aiscm-0.15.1/0000755000175000017500000000000013220531470007670 500000000000000aiscm-0.15.1/srfi/0000755000175000017500000000000013220531470010633 500000000000000aiscm-0.15.1/srfi/Makefile.in0000644000175000017500000005003013220460253012616 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = srfi ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_opengl.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/guile.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__extra_recursive_targets = bench-recursive recheck-recursive \ integration-recursive reintegration-recursive 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 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVCODEC_CFLAGS = @AVCODEC_CFLAGS@ AVCODEC_LIBS = @AVCODEC_LIBS@ AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@ AVFORMAT_LIBS = @AVFORMAT_LIBS@ AVRESAMPLE_CFLAGS = @AVRESAMPLE_CFLAGS@ AVRESAMPLE_LIBS = @AVRESAMPLE_LIBS@ AVUTIL_CFLAGS = @AVUTIL_CFLAGS@ AVUTIL_LIBS = @AVUTIL_LIBS@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ GUILE = @GUILE@ GUILE_CACHE = @GUILE_CACHE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_EFFECTIVE_VERSION = @GUILE_EFFECTIVE_VERSION@ GUILE_EXT = @GUILE_EXT@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ GUILE_LIBS = @GUILE_LIBS@ GUILE_LTLIBS = @GUILE_LTLIBS@ GUILE_SITE = @GUILE_SITE@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAGICK_CFLAGS = @MAGICK_CFLAGS@ MAGICK_LIBS = @MAGICK_LIBS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MJPEG_CFLAGS = @MJPEG_CFLAGS@ MJPEG_LIBS = @MJPEG_LIBS@ MKDIR_P = @MKDIR_P@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWRESAMPLE_CFLAGS = @SWRESAMPLE_CFLAGS@ SWRESAMPLE_LIBS = @SWRESAMPLE_LIBS@ SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ SWSCALE_LIBS = @SWSCALE_LIBS@ TOUCH = @TOUCH@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = srfi-64 EXTRA_DIST = srfi-64.scm MAINTAINERCLEANFILES = Makefile.in all: all-recursive .SUFFIXES: $(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 srfi/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign srfi/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 # 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" bench-local: recheck-local: integration-local: reintegration-local: ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) bench: bench-recursive bench-am: bench-local clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am 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: integration: integration-recursive integration-am: integration-local maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: recheck: recheck-recursive recheck-am: recheck-local reintegration: reintegration-recursive reintegration-am: reintegration-local uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am bench-am \ bench-local check check-am clean clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean 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 integration-am \ integration-local maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am recheck-am recheck-local reintegration-am \ reintegration-local tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aiscm-0.15.1/srfi/Makefile.am0000644000175000017500000000012013213600051012572 00000000000000SUBDIRS = srfi-64 EXTRA_DIST = srfi-64.scm MAINTAINERCLEANFILES = Makefile.in aiscm-0.15.1/srfi/srfi-64/0000755000175000017500000000000013220531470012025 500000000000000aiscm-0.15.1/srfi/srfi-64/Makefile.in0000644000175000017500000003342513220460253014021 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = srfi/srfi-64 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_opengl.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/guile.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__extra_recursive_targets = bench-recursive recheck-recursive \ integration-recursive reintegration-recursive am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVCODEC_CFLAGS = @AVCODEC_CFLAGS@ AVCODEC_LIBS = @AVCODEC_LIBS@ AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@ AVFORMAT_LIBS = @AVFORMAT_LIBS@ AVRESAMPLE_CFLAGS = @AVRESAMPLE_CFLAGS@ AVRESAMPLE_LIBS = @AVRESAMPLE_LIBS@ AVUTIL_CFLAGS = @AVUTIL_CFLAGS@ AVUTIL_LIBS = @AVUTIL_LIBS@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ GUILE = @GUILE@ GUILE_CACHE = @GUILE_CACHE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_EFFECTIVE_VERSION = @GUILE_EFFECTIVE_VERSION@ GUILE_EXT = @GUILE_EXT@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ GUILE_LIBS = @GUILE_LIBS@ GUILE_LTLIBS = @GUILE_LTLIBS@ GUILE_SITE = @GUILE_SITE@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAGICK_CFLAGS = @MAGICK_CFLAGS@ MAGICK_LIBS = @MAGICK_LIBS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MJPEG_CFLAGS = @MJPEG_CFLAGS@ MJPEG_LIBS = @MJPEG_LIBS@ MKDIR_P = @MKDIR_P@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWRESAMPLE_CFLAGS = @SWRESAMPLE_CFLAGS@ SWRESAMPLE_LIBS = @SWRESAMPLE_LIBS@ SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ SWSCALE_LIBS = @SWSCALE_LIBS@ TOUCH = @TOUCH@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = testing.scm MAINTAINERCLEANFILES = Makefile.in all: all-am .SUFFIXES: $(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 srfi/srfi-64/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign srfi/srfi-64/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 bench-local: recheck-local: integration-local: reintegration-local: 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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) bench: bench-am bench-am: bench-local clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: integration: integration-am integration-am: integration-local maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: recheck: recheck-am recheck-am: recheck-local reintegration: reintegration-am reintegration-am: reintegration-local uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am bench-am bench-local check check-am clean \ clean-generic clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs integration-am integration-local \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck-am recheck-local reintegration-am reintegration-local \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aiscm-0.15.1/srfi/srfi-64/Makefile.am0000644000175000017500000000007513213600051013775 00000000000000EXTRA_DIST = testing.scm MAINTAINERCLEANFILES = Makefile.in aiscm-0.15.1/srfi/srfi-64/testing.scm0000644000175000017500000010662313213600051014130 00000000000000;; Copyright (c) 2005, 2006, 2007, 2012, 2013 Per Bothner ;; Added "full" support for Chicken, Gauche, Guile and SISC. ;; Alex Shinn, Copyright (c) 2005. ;; Modified for Scheme Spheres by Álvaro Castro-Castilla, Copyright (c) 2012. ;; Support for Guile 2 by Mark H Weaver , Copyright (c) 2014. ;; ;; 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 AUTHORS OR COPYRIGHT HOLDERS ;; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ;; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ;; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ;; SOFTWARE. (cond-expand (chicken (require-extension syntax-case)) (guile-2 (use-modules (srfi srfi-9) ;; In 2.0.9, srfi-34 and srfi-35 are not well integrated ;; with either Guile's native exceptions or R6RS exceptions. ;;(srfi srfi-34) (srfi srfi-35) (srfi srfi-39))) (guile (use-modules (ice-9 syncase) (srfi srfi-9) ;;(srfi srfi-34) (srfi srfi-35) - not in Guile 1.6.7 (srfi srfi-39))) (sisc (require-extension (srfi 9 34 35 39))) (kawa (module-compile-options warn-undefined-variable: #t warn-invoke-unknown-method: #t) (provide 'srfi-64) (provide 'testing) (require 'srfi-34) (require 'srfi-35)) (else () )) (cond-expand (kawa (define-syntax %test-export (syntax-rules () ((%test-export test-begin . other-names) (module-export %test-begin . other-names))))) (else (define-syntax %test-export (syntax-rules () ((%test-export . names) (if #f #f)))))) ;; List of exported names (%test-export test-begin ;; must be listed first, since in Kawa (at least) it is "magic". test-end test-assert test-eqv test-eq test-equal test-approximate test-assert test-error test-apply test-with-runner test-match-nth test-match-all test-match-any test-match-name test-skip test-expect-fail test-read-eval-string test-runner-group-path test-group test-group-with-cleanup test-result-ref test-result-set! test-result-clear test-result-remove test-result-kind test-passed? test-log-to-file ; Misc test-runner functions test-runner? test-runner-reset test-runner-null test-runner-simple test-runner-current test-runner-factory test-runner-get test-runner-create test-runner-test-name ;; test-runner field setter and getter functions - see %test-record-define: test-runner-pass-count test-runner-pass-count! test-runner-fail-count test-runner-fail-count! test-runner-xpass-count test-runner-xpass-count! test-runner-xfail-count test-runner-xfail-count! test-runner-skip-count test-runner-skip-count! test-runner-group-stack test-runner-group-stack! test-runner-on-test-begin test-runner-on-test-begin! test-runner-on-test-end test-runner-on-test-end! test-runner-on-group-begin test-runner-on-group-begin! test-runner-on-group-end test-runner-on-group-end! test-runner-on-final test-runner-on-final! test-runner-on-bad-count test-runner-on-bad-count! test-runner-on-bad-end-name test-runner-on-bad-end-name! test-result-alist test-result-alist! test-runner-aux-value test-runner-aux-value! ;; default/simple call-back functions, used in default test-runner, ;; but can be called to construct more complex ones. test-on-group-begin-simple test-on-group-end-simple test-on-bad-count-simple test-on-bad-end-name-simple test-on-final-simple test-on-test-end-simple test-on-final-simple) (cond-expand (srfi-9 (define-syntax %test-record-define (syntax-rules () ((%test-record-define alloc runner? (name index setter getter) ...) (define-record-type test-runner (alloc) runner? (name setter getter) ...))))) (else (define %test-runner-cookie (list "test-runner")) (define-syntax %test-record-define (syntax-rules () ((%test-record-define alloc runner? (name index getter setter) ...) (begin (define (runner? obj) (and (vector? obj) (> (vector-length obj) 1) (eq (vector-ref obj 0) %test-runner-cookie))) (define (alloc) (let ((runner (make-vector 23))) (vector-set! runner 0 %test-runner-cookie) runner)) (begin (define (getter runner) (vector-ref runner index)) ...) (begin (define (setter runner value) (vector-set! runner index value)) ...))))))) (%test-record-define %test-runner-alloc test-runner? ;; Cumulate count of all tests that have passed and were expected to. (pass-count 1 test-runner-pass-count test-runner-pass-count!) (fail-count 2 test-runner-fail-count test-runner-fail-count!) (xpass-count 3 test-runner-xpass-count test-runner-xpass-count!) (xfail-count 4 test-runner-xfail-count test-runner-xfail-count!) (skip-count 5 test-runner-skip-count test-runner-skip-count!) (skip-list 6 %test-runner-skip-list %test-runner-skip-list!) (fail-list 7 %test-runner-fail-list %test-runner-fail-list!) ;; Normally #t, except when in a test-apply. (run-list 8 %test-runner-run-list %test-runner-run-list!) (skip-save 9 %test-runner-skip-save %test-runner-skip-save!) (fail-save 10 %test-runner-fail-save %test-runner-fail-save!) (group-stack 11 test-runner-group-stack test-runner-group-stack!) (on-test-begin 12 test-runner-on-test-begin test-runner-on-test-begin!) (on-test-end 13 test-runner-on-test-end test-runner-on-test-end!) ;; Call-back when entering a group. Takes (runner suite-name count). (on-group-begin 14 test-runner-on-group-begin test-runner-on-group-begin!) ;; Call-back when leaving a group. (on-group-end 15 test-runner-on-group-end test-runner-on-group-end!) ;; Call-back when leaving the outermost group. (on-final 16 test-runner-on-final test-runner-on-final!) ;; Call-back when expected number of tests was wrong. (on-bad-count 17 test-runner-on-bad-count test-runner-on-bad-count!) ;; Call-back when name in test=end doesn't match test-begin. (on-bad-end-name 18 test-runner-on-bad-end-name test-runner-on-bad-end-name!) ;; Cumulate count of all tests that have been done. (total-count 19 %test-runner-total-count %test-runner-total-count!) ;; Stack (list) of (count-at-start . expected-count): (count-list 20 %test-runner-count-list %test-runner-count-list!) (result-alist 21 test-result-alist test-result-alist!) ;; Field can be used by test-runner for any purpose. ;; test-runner-simple uses it for a log file. (aux-value 22 test-runner-aux-value test-runner-aux-value!) ) (define (test-runner-reset runner) (test-result-alist! runner '()) (test-runner-pass-count! runner 0) (test-runner-fail-count! runner 0) (test-runner-xpass-count! runner 0) (test-runner-xfail-count! runner 0) (test-runner-skip-count! runner 0) (%test-runner-total-count! runner 0) (%test-runner-count-list! runner '()) (%test-runner-run-list! runner #t) (%test-runner-skip-list! runner '()) (%test-runner-fail-list! runner '()) (%test-runner-skip-save! runner '()) (%test-runner-fail-save! runner '()) (test-runner-group-stack! runner '())) (define (test-runner-group-path runner) (reverse (test-runner-group-stack runner))) (define (%test-null-callback runner) #f) (define (test-runner-null) (let ((runner (%test-runner-alloc))) (test-runner-reset runner) (test-runner-on-group-begin! runner (lambda (runner name count) #f)) (test-runner-on-group-end! runner %test-null-callback) (test-runner-on-final! runner %test-null-callback) (test-runner-on-test-begin! runner %test-null-callback) (test-runner-on-test-end! runner %test-null-callback) (test-runner-on-bad-count! runner (lambda (runner count expected) #f)) (test-runner-on-bad-end-name! runner (lambda (runner begin end) #f)) runner)) ;; Not part of the specification. FIXME ;; Controls whether a log file is generated. (define test-log-to-file #t) (define (test-runner-simple) (let ((runner (%test-runner-alloc))) (test-runner-reset runner) (test-runner-on-group-begin! runner test-on-group-begin-simple) (test-runner-on-group-end! runner test-on-group-end-simple) (test-runner-on-final! runner test-on-final-simple) (test-runner-on-test-begin! runner test-on-test-begin-simple) (test-runner-on-test-end! runner test-on-test-end-simple) (test-runner-on-bad-count! runner test-on-bad-count-simple) (test-runner-on-bad-end-name! runner test-on-bad-end-name-simple) runner)) (cond-expand (srfi-39 (define test-runner-current (make-parameter #f)) (define test-runner-factory (make-parameter test-runner-simple))) (else (define %test-runner-current #f) (define-syntax test-runner-current (syntax-rules () ((test-runner-current) %test-runner-current) ((test-runner-current runner) (set! %test-runner-current runner)))) (define %test-runner-factory test-runner-simple) (define-syntax test-runner-factory (syntax-rules () ((test-runner-factory) %test-runner-factory) ((test-runner-factory runner) (set! %test-runner-factory runner)))))) ;; A safer wrapper to test-runner-current. (define (test-runner-get) (let ((r (test-runner-current))) (if (not r) (cond-expand (srfi-23 (error "test-runner not initialized - test-begin missing?")) (else #t))) r)) (define (%test-specifier-matches spec runner) (spec runner)) (define (test-runner-create) ((test-runner-factory))) (define (%test-any-specifier-matches list runner) (let ((result #f)) (let loop ((l list)) (cond ((null? l) result) (else (if (%test-specifier-matches (car l) runner) (set! result #t)) (loop (cdr l))))))) ;; Returns #f, #t, or 'xfail. (define (%test-should-execute runner) (let ((run (%test-runner-run-list runner))) (cond ((or (not (or (eqv? run #t) (%test-any-specifier-matches run runner))) (%test-any-specifier-matches (%test-runner-skip-list runner) runner)) (test-result-set! runner 'result-kind 'skip) #f) ((%test-any-specifier-matches (%test-runner-fail-list runner) runner) (test-result-set! runner 'result-kind 'xfail) 'xfail) (else #t)))) (define (%test-begin suite-name count) (if (not (test-runner-current)) (test-runner-current (test-runner-create))) (let ((runner (test-runner-current))) ((test-runner-on-group-begin runner) runner suite-name count) (%test-runner-skip-save! runner (cons (%test-runner-skip-list runner) (%test-runner-skip-save runner))) (%test-runner-fail-save! runner (cons (%test-runner-fail-list runner) (%test-runner-fail-save runner))) (%test-runner-count-list! runner (cons (cons (%test-runner-total-count runner) count) (%test-runner-count-list runner))) (test-runner-group-stack! runner (cons suite-name (test-runner-group-stack runner))))) (cond-expand (kawa ;; Kawa has test-begin built in, implemented as: ;; (begin ;; (cond-expand (srfi-64 #!void) (else (require 'srfi-64))) ;; (%test-begin suite-name [count])) ;; This puts test-begin but only test-begin in the default environment., ;; which makes normal test suites loadable without non-portable commands. ) (else (define-syntax test-begin (syntax-rules () ((test-begin suite-name) (%test-begin suite-name #f)) ((test-begin suite-name count) (%test-begin suite-name count)))))) (define (test-on-group-begin-simple runner suite-name count) (if (null? (test-runner-group-stack runner)) (begin (display "%%%% Starting test ") (display suite-name) (if test-log-to-file (let* ((log-file-name (if (string? test-log-to-file) test-log-to-file (string-append suite-name ".log"))) (log-file (cond-expand (mzscheme (open-output-file log-file-name 'truncate/replace)) (else (open-output-file log-file-name))))) (display "%%%% Starting test " log-file) (display suite-name log-file) (newline log-file) (test-runner-aux-value! runner log-file) (display " (Writing full log to \"") (display log-file-name) (display "\")"))) (newline))) (let ((log (test-runner-aux-value runner))) (if (output-port? log) (begin (display "Group begin: " log) (display suite-name log) (newline log)))) #f) (define (test-on-group-end-simple runner) (let ((log (test-runner-aux-value runner))) (if (output-port? log) (begin (display "Group end: " log) (display (car (test-runner-group-stack runner)) log) (newline log)))) #f) (define (%test-on-bad-count-write runner count expected-count port) (display "*** Total number of tests was " port) (display count port) (display " but should be " port) (display expected-count port) (display ". ***" port) (newline port) (display "*** Discrepancy indicates testsuite error or exceptions. ***" port) (newline port)) (define (test-on-bad-count-simple runner count expected-count) (%test-on-bad-count-write runner count expected-count (current-output-port)) (let ((log (test-runner-aux-value runner))) (if (output-port? log) (%test-on-bad-count-write runner count expected-count log)))) (define (test-on-bad-end-name-simple runner begin-name end-name) (let ((msg (string-append (%test-format-line runner) "test-end " begin-name " does not match test-begin " end-name))) (cond-expand (srfi-23 (error msg)) (else (display msg) (newline))))) (define (%test-final-report1 value label port) (if (> value 0) (begin (display label port) (display value port) (newline port)))) (define (%test-final-report-simple runner port) (%test-final-report1 (test-runner-pass-count runner) "# of expected passes " port) (%test-final-report1 (test-runner-xfail-count runner) "# of expected failures " port) (%test-final-report1 (test-runner-xpass-count runner) "# of unexpected successes " port) (%test-final-report1 (test-runner-fail-count runner) "# of unexpected failures " port) (%test-final-report1 (test-runner-skip-count runner) "# of skipped tests " port)) (define (test-on-final-simple runner) (%test-final-report-simple runner (current-output-port)) (let ((log (test-runner-aux-value runner))) (if (output-port? log) (%test-final-report-simple runner log)))) (define (%test-format-line runner) (let* ((line-info (test-result-alist runner)) (source-file (assq 'source-file line-info)) (source-line (assq 'source-line line-info)) (file (if source-file (cdr source-file) ""))) (if source-line (string-append file ":" (number->string (cdr source-line)) ": ") ""))) (define (%test-end suite-name line-info) (let* ((r (test-runner-get)) (groups (test-runner-group-stack r)) (line (%test-format-line r))) (test-result-alist! r line-info) (if (null? groups) (let ((msg (string-append line "test-end not in a group"))) (cond-expand (srfi-23 (error msg)) (else (display msg) (newline))))) (if (and suite-name (not (equal? suite-name (car groups)))) ((test-runner-on-bad-end-name r) r suite-name (car groups))) (let* ((count-list (%test-runner-count-list r)) (expected-count (cdar count-list)) (saved-count (caar count-list)) (group-count (- (%test-runner-total-count r) saved-count))) (if (and expected-count (not (= expected-count group-count))) ((test-runner-on-bad-count r) r group-count expected-count)) ((test-runner-on-group-end r) r) (test-runner-group-stack! r (cdr (test-runner-group-stack r))) (%test-runner-skip-list! r (car (%test-runner-skip-save r))) (%test-runner-skip-save! r (cdr (%test-runner-skip-save r))) (%test-runner-fail-list! r (car (%test-runner-fail-save r))) (%test-runner-fail-save! r (cdr (%test-runner-fail-save r))) (%test-runner-count-list! r (cdr count-list)) (if (null? (test-runner-group-stack r)) ((test-runner-on-final r) r))))) (define-syntax test-group (syntax-rules () ((test-group suite-name . body) (let ((r (test-runner-current))) ;; Ideally should also set line-number, if available. (test-result-alist! r (list (cons 'test-name suite-name))) (if (%test-should-execute r) (dynamic-wind (lambda () (test-begin suite-name)) (lambda () . body) (lambda () (test-end suite-name)))))))) (define-syntax test-group-with-cleanup (syntax-rules () ((test-group-with-cleanup suite-name form cleanup-form) (test-group suite-name (dynamic-wind (lambda () #f) (lambda () form) (lambda () cleanup-form)))) ((test-group-with-cleanup suite-name cleanup-form) (test-group-with-cleanup suite-name #f cleanup-form)) ((test-group-with-cleanup suite-name form1 form2 form3 . rest) (test-group-with-cleanup suite-name (begin form1 form2) form3 . rest)))) (define (test-on-test-begin-simple runner) (let ((log (test-runner-aux-value runner))) (if (output-port? log) (let* ((results (test-result-alist runner)) (source-file (assq 'source-file results)) (source-line (assq 'source-line results)) (source-form (assq 'source-form results)) (test-name (assq 'test-name results))) (display "Test begin:" log) (newline log) (if test-name (%test-write-result1 test-name log)) (if source-file (%test-write-result1 source-file log)) (if source-line (%test-write-result1 source-line log)) (if source-form (%test-write-result1 source-form log)))))) (define-syntax test-result-ref (syntax-rules () ((test-result-ref runner pname) (test-result-ref runner pname #f)) ((test-result-ref runner pname default) (let ((p (assq pname (test-result-alist runner)))) (if p (cdr p) default))))) (define (test-on-test-end-simple runner) (let ((log (test-runner-aux-value runner)) (kind (test-result-ref runner 'result-kind))) (if (memq kind '(fail xpass)) (let* ((results (test-result-alist runner)) (source-file (assq 'source-file results)) (source-line (assq 'source-line results)) (test-name (assq 'test-name results))) (if (or source-file source-line) (begin (if source-file (display (cdr source-file))) (display ":") (if source-line (display (cdr source-line))) (display ": "))) (display (if (eq? kind 'xpass) "XPASS" "FAIL")) (if test-name (begin (display " ") (display (cdr test-name)))) (newline))) (if (output-port? log) (begin (display "Test end:" log) (newline log) (let loop ((list (test-result-alist runner))) (if (pair? list) (let ((pair (car list))) ;; Write out properties not written out by on-test-begin. (if (not (memq (car pair) '(test-name source-file source-line source-form))) (%test-write-result1 pair log)) (loop (cdr list))))))))) (define (%test-write-result1 pair port) (display " " port) (display (car pair) port) (display ": " port) (write (cdr pair) port) (newline port)) (define (test-result-set! runner pname value) (let* ((alist (test-result-alist runner)) (p (assq pname alist))) (if p (set-cdr! p value) (test-result-alist! runner (cons (cons pname value) alist))))) (define (test-result-clear runner) (test-result-alist! runner '())) (define (test-result-remove runner pname) (let* ((alist (test-result-alist runner)) (p (assq pname alist))) (if p (test-result-alist! runner (let loop ((r alist)) (if (eq? r p) (cdr r) (cons (car r) (loop (cdr r))))))))) (define (test-result-kind . rest) (let ((runner (if (pair? rest) (car rest) (test-runner-current)))) (test-result-ref runner 'result-kind))) (define (test-passed? . rest) (let ((runner (if (pair? rest) (car rest) (test-runner-get)))) (memq (test-result-ref runner 'result-kind) '(pass xpass)))) (define (%test-report-result) (let* ((r (test-runner-get)) (result-kind (test-result-kind r))) (case result-kind ((pass) (test-runner-pass-count! r (+ 1 (test-runner-pass-count r)))) ((fail) (test-runner-fail-count! r (+ 1 (test-runner-fail-count r)))) ((xpass) (test-runner-xpass-count! r (+ 1 (test-runner-xpass-count r)))) ((xfail) (test-runner-xfail-count! r (+ 1 (test-runner-xfail-count r)))) (else (test-runner-skip-count! r (+ 1 (test-runner-skip-count r))))) (%test-runner-total-count! r (+ 1 (%test-runner-total-count r))) ((test-runner-on-test-end r) r))) (cond-expand (guile (define-syntax %test-evaluate-with-catch (syntax-rules () ((%test-evaluate-with-catch test-expression) (catch #t (lambda () test-expression) (lambda (key . args) (test-result-set! (test-runner-current) 'actual-error (cons key args)) #f)))))) (kawa (define-syntax %test-evaluate-with-catch (syntax-rules () ((%test-evaluate-with-catch test-expression) (try-catch test-expression (ex (test-result-set! (test-runner-current) 'actual-error ex) #f)))))) (srfi-34 (define-syntax %test-evaluate-with-catch (syntax-rules () ((%test-evaluate-with-catch test-expression) (guard (err (else #f)) test-expression))))) (chicken (define-syntax %test-evaluate-with-catch (syntax-rules () ((%test-evaluate-with-catch test-expression) (condition-case test-expression (ex () #f)))))) (else (define-syntax %test-evaluate-with-catch (syntax-rules () ((%test-evaluate-with-catch test-expression) test-expression))))) (cond-expand ((or kawa mzscheme) (cond-expand (mzscheme (define-for-syntax (%test-syntax-file form) (let ((source (syntax-source form))) (cond ((string? source) file) ((path? source) (path->string source)) (else #f))))) (kawa (define (%test-syntax-file form) (syntax-source form)))) (define (%test-source-line2 form) (let* ((line (syntax-line form)) (file (%test-syntax-file form)) (line-pair (if line (list (cons 'source-line line)) '()))) (cons (cons 'source-form (syntax-object->datum form)) (if file (cons (cons 'source-file file) line-pair) line-pair))))) (guile-2 (define (%test-source-line2 form) (let* ((src-props (syntax-source form)) (file (and src-props (assq-ref src-props 'filename))) (line (and src-props (assq-ref src-props 'line))) (file-alist (if file `((source-file . ,file)) '())) (line-alist (if line `((source-line . ,(+ line 1))) '()))) (datum->syntax (syntax here) `((source-form . ,(syntax->datum form)) ,@file-alist ,@line-alist))))) (else (define (%test-source-line2 form) '()))) (define (%test-on-test-begin r) (%test-should-execute r) ((test-runner-on-test-begin r) r) (not (eq? 'skip (test-result-ref r 'result-kind)))) (define (%test-on-test-end r result) (test-result-set! r 'result-kind (if (eq? (test-result-ref r 'result-kind) 'xfail) (if result 'xpass 'xfail) (if result 'pass 'fail)))) (define (test-runner-test-name runner) (test-result-ref runner 'test-name "")) (define-syntax %test-comp2body (syntax-rules () ((%test-comp2body r comp expected expr) (let () (if (%test-on-test-begin r) (let ((exp expected)) (test-result-set! r 'expected-value exp) (let ((res (%test-evaluate-with-catch expr))) (test-result-set! r 'actual-value res) (%test-on-test-end r (comp exp res))))) (%test-report-result))))) (define (%test-approximate= error) (lambda (value expected) (let ((rval (real-part value)) (ival (imag-part value)) (rexp (real-part expected)) (iexp (imag-part expected))) (and (>= rval (- rexp error)) (>= ival (- iexp error)) (<= rval (+ rexp error)) (<= ival (+ iexp error)))))) (define-syntax %test-comp1body (syntax-rules () ((%test-comp1body r expr) (let () (if (%test-on-test-begin r) (let () (let ((res (%test-evaluate-with-catch expr))) (test-result-set! r 'actual-value res) (%test-on-test-end r res)))) (%test-report-result))))) (cond-expand ((or kawa mzscheme guile-2) ;; Should be made to work for any Scheme with syntax-case ;; However, I haven't gotten the quoting working. FIXME. (define-syntax test-end (lambda (x) (syntax-case (list x (list (syntax quote) (%test-source-line2 x))) () (((mac suite-name) line) (syntax (%test-end suite-name line))) (((mac) line) (syntax (%test-end #f line)))))) (define-syntax test-assert (lambda (x) (syntax-case (list x (list (syntax quote) (%test-source-line2 x))) () (((mac tname expr) line) (syntax (let* ((r (test-runner-get)) (name tname)) (test-result-alist! r (cons (cons 'test-name tname) line)) (%test-comp1body r expr)))) (((mac expr) line) (syntax (let* ((r (test-runner-get))) (test-result-alist! r line) (%test-comp1body r expr))))))) (define (%test-comp2 comp x) (syntax-case (list x (list (syntax quote) (%test-source-line2 x)) comp) () (((mac tname expected expr) line comp) (syntax (let* ((r (test-runner-get)) (name tname)) (test-result-alist! r (cons (cons 'test-name tname) line)) (%test-comp2body r comp expected expr)))) (((mac expected expr) line comp) (syntax (let* ((r (test-runner-get))) (test-result-alist! r line) (%test-comp2body r comp expected expr)))))) (define-syntax test-eqv (lambda (x) (%test-comp2 (syntax eqv?) x))) (define-syntax test-eq (lambda (x) (%test-comp2 (syntax eq?) x))) (define-syntax test-equal (lambda (x) (%test-comp2 (syntax equal?) x))) (define-syntax test-approximate ;; FIXME - needed for non-Kawa (lambda (x) (syntax-case (list x (list (syntax quote) (%test-source-line2 x))) () (((mac tname expected expr error) line) (syntax (let* ((r (test-runner-get)) (name tname)) (test-result-alist! r (cons (cons 'test-name tname) line)) (%test-comp2body r (%test-approximate= error) expected expr)))) (((mac expected expr error) line) (syntax (let* ((r (test-runner-get))) (test-result-alist! r line) (%test-comp2body r (%test-approximate= error) expected expr)))))))) (else (define-syntax test-end (syntax-rules () ((test-end) (%test-end #f '())) ((test-end suite-name) (%test-end suite-name '())))) (define-syntax test-assert (syntax-rules () ((test-assert tname test-expression) (let* ((r (test-runner-get)) (name tname)) (test-result-alist! r '((test-name . tname))) (%test-comp1body r test-expression))) ((test-assert test-expression) (let* ((r (test-runner-get))) (test-result-alist! r '()) (%test-comp1body r test-expression))))) (define-syntax %test-comp2 (syntax-rules () ((%test-comp2 comp tname expected expr) (let* ((r (test-runner-get)) (name tname)) (test-result-alist! r (list (cons 'test-name tname))) (%test-comp2body r comp expected expr))) ((%test-comp2 comp expected expr) (let* ((r (test-runner-get))) (test-result-alist! r '()) (%test-comp2body r comp expected expr))))) (define-syntax test-equal (syntax-rules () ((test-equal . rest) (%test-comp2 equal? . rest)))) (define-syntax test-eqv (syntax-rules () ((test-eqv . rest) (%test-comp2 eqv? . rest)))) (define-syntax test-eq (syntax-rules () ((test-eq . rest) (%test-comp2 eq? . rest)))) (define-syntax test-approximate (syntax-rules () ((test-approximate tname expected expr error) (%test-comp2 (%test-approximate= error) tname expected expr)) ((test-approximate expected expr error) (%test-comp2 (%test-approximate= error) expected expr)))))) (cond-expand (guile (define-syntax %test-error (syntax-rules () ((%test-error r etype expr) (cond ((%test-on-test-begin r) (let ((et etype)) (test-result-set! r 'expected-error et) (%test-on-test-end r (catch #t (lambda () (test-result-set! r 'actual-value expr) #f) (lambda (key . args) ;; TODO: decide how to specify expected ;; error types for Guile. (test-result-set! r 'actual-error (cons key args)) #t))) (%test-report-result)))))))) (mzscheme (define-syntax %test-error (syntax-rules () ((%test-error r etype expr) (%test-comp1body r (with-handlers (((lambda (h) #t) (lambda (h) #t))) (let () (test-result-set! r 'actual-value expr) #f))))))) (chicken (define-syntax %test-error (syntax-rules () ((%test-error r etype expr) (%test-comp1body r (condition-case expr (ex () #t))))))) (kawa (define-syntax %test-error (syntax-rules () ((%test-error r #t expr) (cond ((%test-on-test-begin r) (test-result-set! r 'expected-error #t) (%test-on-test-end r (try-catch (let () (test-result-set! r 'actual-value expr) #f) (ex (test-result-set! r 'actual-error ex) #t))) (%test-report-result)))) ((%test-error r etype expr) (if (%test-on-test-begin r) (let ((et etype)) (test-result-set! r 'expected-error et) (%test-on-test-end r (try-catch (let () (test-result-set! r 'actual-value expr) #f) (ex (test-result-set! r 'actual-error ex) (cond ((and (instance? et ) (gnu.bytecode.ClassType:isSubclass et )) (instance? ex et)) (else #t))))) (%test-report-result))))))) ((and srfi-34 srfi-35) (define-syntax %test-error (syntax-rules () ((%test-error r etype expr) (%test-comp1body r (guard (ex ((condition-type? etype) (and (condition? ex) (condition-has-type? ex etype))) ((procedure? etype) (etype ex)) ((equal? etype #t) #t) (else #t)) expr #f)))))) (srfi-34 (define-syntax %test-error (syntax-rules () ((%test-error r etype expr) (%test-comp1body r (guard (ex (else #t)) expr #f)))))) (else (define-syntax %test-error (syntax-rules () ((%test-error r etype expr) (begin ((test-runner-on-test-begin r) r) (test-result-set! r 'result-kind 'skip) (%test-report-result))))))) (cond-expand ((or kawa mzscheme guile-2) (define-syntax test-error (lambda (x) (syntax-case (list x (list (syntax quote) (%test-source-line2 x))) () (((mac tname etype expr) line) (syntax (let* ((r (test-runner-get)) (name tname)) (test-result-alist! r (cons (cons 'test-name tname) line)) (%test-error r etype expr)))) (((mac etype expr) line) (syntax (let* ((r (test-runner-get))) (test-result-alist! r line) (%test-error r etype expr)))) (((mac expr) line) (syntax (let* ((r (test-runner-get))) (test-result-alist! r line) (%test-error r #t expr)))))))) (else (define-syntax test-error (syntax-rules () ((test-error name etype expr) (let ((r (test-runner-get))) (test-result-alist! r `((test-name . ,name))) (%test-error r etype expr))) ((test-error etype expr) (let ((r (test-runner-get))) (test-result-alist! r '()) (%test-error r etype expr))) ((test-error expr) (let ((r (test-runner-get))) (test-result-alist! r '()) (%test-error r #t expr))))))) (define (test-apply first . rest) (if (test-runner? first) (test-with-runner first (apply test-apply rest)) (let ((r (test-runner-current))) (if r (let ((run-list (%test-runner-run-list r))) (cond ((null? rest) (%test-runner-run-list! r (reverse run-list)) (first)) ;; actually apply procedure thunk (else (%test-runner-run-list! r (if (eq? run-list #t) (list first) (cons first run-list))) (apply test-apply rest) (%test-runner-run-list! r run-list)))) (let ((r (test-runner-create))) (test-with-runner r (apply test-apply first rest)) ((test-runner-on-final r) r)))))) (define-syntax test-with-runner (syntax-rules () ((test-with-runner runner form ...) (let ((saved-runner (test-runner-current))) (dynamic-wind (lambda () (test-runner-current runner)) (lambda () form ...) (lambda () (test-runner-current saved-runner))))))) ;;; Predicates (define (%test-match-nth n count) (let ((i 0)) (lambda (runner) (set! i (+ i 1)) (and (>= i n) (< i (+ n count)))))) (define-syntax test-match-nth (syntax-rules () ((test-match-nth n) (test-match-nth n 1)) ((test-match-nth n count) (%test-match-nth n count)))) (define (%test-match-all . pred-list) (lambda (runner) (let ((result #t)) (let loop ((l pred-list)) (if (null? l) result (begin (if (not ((car l) runner)) (set! result #f)) (loop (cdr l)))))))) (define-syntax test-match-all (syntax-rules () ((test-match-all pred ...) (%test-match-all (%test-as-specifier pred) ...)))) (define (%test-match-any . pred-list) (lambda (runner) (let ((result #f)) (let loop ((l pred-list)) (if (null? l) result (begin (if ((car l) runner) (set! result #t)) (loop (cdr l)))))))) (define-syntax test-match-any (syntax-rules () ((test-match-any pred ...) (%test-match-any (%test-as-specifier pred) ...)))) ;; Coerce to a predicate function: (define (%test-as-specifier specifier) (cond ((procedure? specifier) specifier) ((integer? specifier) (test-match-nth 1 specifier)) ((string? specifier) (test-match-name specifier)) (else (error "not a valid test specifier")))) (define-syntax test-skip (syntax-rules () ((test-skip pred ...) (let ((runner (test-runner-get))) (%test-runner-skip-list! runner (cons (test-match-all (%test-as-specifier pred) ...) (%test-runner-skip-list runner))))))) (define-syntax test-expect-fail (syntax-rules () ((test-expect-fail pred ...) (let ((runner (test-runner-get))) (%test-runner-fail-list! runner (cons (test-match-all (%test-as-specifier pred) ...) (%test-runner-fail-list runner))))))) (define (test-match-name name) (lambda (runner) (equal? name (test-runner-test-name runner)))) (define (test-read-eval-string string) (let* ((port (open-input-string string)) (form (read port))) (if (eof-object? (read-char port)) (cond-expand (guile (eval form (current-module))) (else (eval form))) (cond-expand (srfi-23 (error "(not at eof)")) (else "error"))))) aiscm-0.15.1/srfi/srfi-64.scm0000644000175000017500000000501313213600051012442 00000000000000;;; srfi-64.scm -- SRFI 64 - A Scheme API for test suites. ;; Copyright (C) 2014 Free Software Foundation, Inc. ;; ;; This library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public ;; License as published by the Free Software Foundation; either ;; version 3 of the License, or (at your option) any later version. ;; ;; This library is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; Lesser General Public License for more details. ;; ;; You should have received a copy of the GNU Lesser General Public ;; License along with this library; if not, write to the Free Software ;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA (define-module (srfi srfi-64) #:export (test-begin test-end test-assert test-eqv test-eq test-equal test-approximate test-assert test-error test-apply test-with-runner test-match-nth test-match-all test-match-any test-match-name test-skip test-expect-fail test-read-eval-string test-runner-group-path test-group test-group-with-cleanup test-result-ref test-result-set! test-result-clear test-result-remove test-result-kind test-passed? test-log-to-file test-runner? test-runner-reset test-runner-null test-runner-simple test-runner-current test-runner-factory test-runner-get test-runner-create test-runner-test-name test-runner-pass-count test-runner-pass-count! test-runner-fail-count test-runner-fail-count! test-runner-xpass-count test-runner-xpass-count! test-runner-xfail-count test-runner-xfail-count! test-runner-skip-count test-runner-skip-count! test-runner-group-stack test-runner-group-stack! test-runner-on-test-begin test-runner-on-test-begin! test-runner-on-test-end test-runner-on-test-end! test-runner-on-group-begin test-runner-on-group-begin! test-runner-on-group-end test-runner-on-group-end! test-runner-on-final test-runner-on-final! test-runner-on-bad-count test-runner-on-bad-count! test-runner-on-bad-end-name test-runner-on-bad-end-name! test-result-alist test-result-alist! test-runner-aux-value test-runner-aux-value! test-on-group-begin-simple test-on-group-end-simple test-on-bad-count-simple test-on-bad-end-name-simple test-on-final-simple test-on-test-end-simple test-on-final-simple)) (cond-expand-provide (current-module) '(srfi-64)) (include-from-path "srfi/srfi-64/testing.scm") aiscm-0.15.1/build-aux/0000755000175000017500000000000013220531467011570 500000000000000aiscm-0.15.1/build-aux/depcomp0000755000175000017500000005601613213600540013064 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: aiscm-0.15.1/build-aux/test-driver.scm0000644000175000017500000002012313213600050014445 00000000000000 ;;;; test-driver.scm - Guile test driver for Automake testsuite harness (define script-version "2016-05-11.14") ;UTC ;;; Copyright (C) 2015, 2016 Mathieu Lirzin ;;; ;;; This program is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; This program is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General 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. ;;;; Commentary: ;;; ;;; This script provides a Guile test driver using the SRFI-64 Scheme API for ;;; test suites. SRFI-64 is distributed with Guile since version 2.0.9. ;;; ;;;; Code: (use-modules (ice-9 getopt-long) (ice-9 pretty-print) (srfi srfi-26) (srfi srfi-64)) (define (show-help) (display "Usage: test-driver --test-name=NAME --log-file=PATH --trs-file=PATH [--expect-failure={yes|no}] [--color-tests={yes|no}] [--enable-hard-errors={yes|no}] [--brief={yes|no}}] [--] TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] The '--test-name', '--log-file' and '--trs-file' options are mandatory.\n")) (define %options '((test-name (value #t)) (log-file (value #t)) (trs-file (value #t)) (color-tests (value #t)) (expect-failure (value #t)) ;XXX: not implemented yet (enable-hard-errors (value #t)) ;not implemented in SRFI-64 (brief (value #t)) (help (single-char #\h) (value #f)) (version (single-char #\V) (value #f)))) (define (option->boolean options key) "Return #t if the value associated with KEY in OPTIONS is \"yes\"." (and=> (option-ref options key #f) (cut string=? <> "yes"))) (define* (test-display field value #:optional (port (current-output-port)) #:key pretty?) "Display \"FIELD: VALUE\\n\" on PORT." (if pretty? (begin (format port "~A:~%" field) (pretty-print value port #:per-line-prefix "+ ")) (format port "~A: ~A~%" field value))) (define* (result->string symbol #:key colorize?) "Return SYMBOL as an upper case string. Use colors when COLORIZE is #t." (let ((result (string-upcase (symbol->string symbol)))) (if colorize? (string-append (case symbol ((pass) "") ;green ((xfail) "") ;light green ((skip) "") ;blue ((fail xpass) "") ;red ((error) "")) ;magenta result "") ;no color result))) (define* (test-runner-gnu test-name #:key color? brief? out-port trs-port) "Return an custom SRFI-64 test runner. TEST-NAME is a string specifying the file name of the current the test. COLOR? specifies whether to use colors, and BRIEF?, well, you know. OUT-PORT and TRS-PORT must be output ports. The current output port is supposed to be redirected to a '.log' file." (define (test-on-test-begin-gnu runner) ;; Procedure called at the start of an individual test case, before the ;; test expression (and expected value) are evaluated. (let ((result (cute assq-ref (test-result-alist runner) <>))) (test-display "test-name" (result 'test-name)) (test-display "location" (string-append (result 'source-file) ":" (number->string (result 'source-line)))) (test-display "source" (result 'source-form) #:pretty? #t))) (define (test-on-test-end-gnu runner) ;; Procedure called at the end of an individual test case, when the result ;; of the test is available. (let* ((results (test-result-alist runner)) (result? (cut assq <> results)) (result (cut assq-ref results <>))) (unless brief? ;; Display the result of each test case on the console. (test-display (result->string (test-result-kind runner) #:colorize? color?) (string-append test-name " - " (test-runner-test-name runner)) out-port)) (when (result? 'expected-value) (test-display "expected-value" (result 'expected-value))) (when (result? 'expected-error) (test-display "expected-error" (result 'expected-error) #:pretty? #t)) (when (result? 'actual-value) (test-display "actual-value" (result 'actual-value))) (when (result? 'actual-error) (test-display "actual-error" (result 'actual-error) #:pretty? #t)) (test-display "result" (result->string (result 'result-kind))) (newline) (test-display ":test-result" (string-append (result->string (test-result-kind runner)) " " (test-runner-test-name runner)) trs-port))) (define (test-on-group-end-gnu runner) ;; Procedure called by a 'test-end', including at the end of a test-group. (let ((fail (or (positive? (test-runner-fail-count runner)) (positive? (test-runner-xpass-count runner)))) (skip (or (positive? (test-runner-skip-count runner)) (positive? (test-runner-xfail-count runner))))) ;; XXX: The global results need some refinements for XPASS. (test-display ":global-test-result" (if fail "FAIL" (if skip "SKIP" "PASS")) trs-port) (test-display ":recheck" (if fail "yes" "no") trs-port) (test-display ":copy-in-global-log" (if (or fail skip) "yes" "no") trs-port) (when brief? ;; Display the global test group result on the console. (test-display (result->string (if fail 'fail (if skip 'skip 'pass)) #:colorize? color?) test-name out-port)) #f)) (let ((runner (test-runner-null))) (test-runner-on-test-begin! runner test-on-test-begin-gnu) (test-runner-on-test-end! runner test-on-test-end-gnu) (test-runner-on-group-end! runner test-on-group-end-gnu) (test-runner-on-bad-end-name! runner test-on-bad-end-name-simple) runner)) ;;; ;;; Entry point. ;;; (let* ((opts (getopt-long (command-line) %options)) (option (cut option-ref opts <> <>))) (cond ((option 'help #f) (show-help)) ((option 'version #f) (format #t "test-driver.scm ~A~%" script-version)) (else (let ((log (open-file (option 'log-file "") "w0")) (trs (open-file (option 'trs-file "") "wl")) (out (duplicate-port (current-output-port) "wl"))) (redirect-port log (current-output-port)) (redirect-port log (current-warning-port)) (redirect-port log (current-error-port)) (test-with-runner (test-runner-gnu (option 'test-name #f) #:color? (option->boolean opts 'color-tests) #:brief? (option->boolean opts 'brief) #:out-port out #:trs-port trs) (load (string-append (getcwd) "/" (car (option '() '("")))))) (close-port log) (close-port trs) (close-port out)))) (exit 0)) ;;; Local Variables: ;;; eval: (add-hook 'write-file-functions 'time-stamp) ;;; time-stamp-start: "(define script-version \"" ;;; time-stamp-format: "%:y-%02m-%02d.%02H" ;;; time-stamp-time-zone: "UTC" ;;; time-stamp-end: "\") ;UTC" ;;; End: ;;;; test-driver.scm ends here. aiscm-0.15.1/build-aux/config.guess0000755000175000017500000012564413213600536014040 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2016 Free Software Foundation, Inc. timestamp='2016-10-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(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 ;; *: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 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[: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.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB 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 echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; 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 fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac cat >&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: aiscm-0.15.1/build-aux/install-sh0000755000175000017500000003546313213600536013523 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/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. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: aiscm-0.15.1/build-aux/missing0000755000175000017500000001533013213600536013105 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: aiscm-0.15.1/build-aux/ltmain.sh0000644000175000017500000117147413213600470013340 00000000000000#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-2" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.6-2 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer -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=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $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" 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 elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi 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 ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: aiscm-0.15.1/build-aux/compile0000755000175000017500000001624513213600536013072 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: aiscm-0.15.1/build-aux/config.sub0000755000175000017500000010676313213600536013504 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2016 Free Software Foundation, Inc. timestamp='2016-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # 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. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2016 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/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | 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 | 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 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | 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-* | 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-* \ | 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* | dpx2*-bull) 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 ;; 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 ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -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* \ | -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*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -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 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: aiscm-0.15.1/build-aux/config.rpath0000644000175000017500000000000013220460164013776 00000000000000aiscm-0.15.1/README0000644000175000017500000000001613213600050010456 00000000000000See README.md aiscm-0.15.1/tests/0000755000175000017500000000000013220531470011032 500000000000000aiscm-0.15.1/tests/test_util.scm0000644000175000017500000002700013213600051013463 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-1) (srfi srfi-64) (oop goops) (system foreign) (rnrs bytevectors) (aiscm util)) (test-begin "aiscm util") (load-extension "libguile-aiscm-tests" "init_tests") (test-begin "helper methods") (test-assert "Convert first element of Scheme array to integer" (scm-to-int-array-one-element '(123))) (test-assert "Convert second element of Scheme array to integer" (scm-to-int-array-second-element '(123 456))) (test-assert "Convert first element of Scheme array to long integer" (scm-to-long-array-one-element (list (ash 123 32)))) (test-assert "Convert second element of Scheme array to long integer" (scm-to-long-array-second-element (list (ash 123 32) (ash 456 32)))) (test-eqv "Call Scheme function without exception occurring" 42 (call-scheme-function (lambda (arg) (car arg)) '(42))) (test-assert "Clean up object when exception occurs" (cleanup-when-exception (lambda (arg) (/ 1 0)))) (test-error "Throw exception after cleaning up object" 'misc-error (throw-exception-after-cleanup (lambda (arg) (/ 1 0)))) (test-end "helper methods") (toplevel-define! 'a 0) (define-class* > >> (t #:init-keyword #:t #:getter get-t)) (template-class (test 32) >) (template-class (test 8) > (lambda (class metaclass) (define-method (tplus8 (self class)) (+ 8 (get-t self))) (define-method (is8? (self metaclass)) #t))) (define-class () (a #:init-keyword #:a) (b #:init-keyword #:b)) (test-eqv "'toplevel-define! should create a definition for the given symbol" 0 a) (test-eq "'super' returns the first direct superclass" (super )) (test-eq "'define-class*' should define class and meta-class" >> (class-of >)) (test-eq "'define-class*' creates the specified slots" 42 (get-t (make > #:t 42))) (test-eqv "'toplevel-define! should return the value of the definition" 5 (toplevel-define! 'abc 5)) (test-eq "retrieve template class by it's arguments" > (template-class (test 32) >)) (test-eq "meta class of template class" >> (class-of (template-class (test 32) >))) (test-equal "base class of template class" > (super (template-class (test 32) >))) (test-equal "base class of meta class of template class" >> (super (class-of (template-class (test 32) >)))) (test-eq "class-name of template class" '> (class-name >)) (test-eq "class-name of template class with class arguments" '> (class-name (template-class (test ) >))) (test-eq "class-name of template class with multiple arguments" '> (class-name (template-class (test 32 ) >))) (test-eqv "template class can have methods" 42 (tplus8 (make > #:t 34))) (test-assert "meta classes can have methods" (is8? >)) (test-equal "exclusive-or for booleans" '(#f #t #t #f) (map xor '(#f #f #t #t) '(#f #t #f #t))) (test-equal "'attach' should add an element at the end of the list" '(1 2 3) (attach '(1 2) 3)) (test-assert "'index' returns #f if value is not element of list" (not (index-of 4 '(2 3 5 7)))) (test-eqv "'index' returns index of first matching list element" 2 (index-of 5 '(2 3 5 7))) (test-equal "'all-but-last' should return a list with the last element removed" '(2 3 5) (all-but-last '(2 3 5 7))) (test-assert "'drop-up-to' returns empty list if drop count is larger than length of list" (null? (drop-up-to '(1 2 3) 4))) (test-equal "'drop-up-to' behaves like 'drop' otherwise" '(5 6) (drop-up-to '(1 2 3 4 5 6) 4)) (test-equal "'take-up-to' returns first elements" '(1 2 3) (take-up-to '(1 2 3 4 5) 3)) (test-equal "'take-up-to' returns all elements if list is smaller" '(1 2) (take-up-to '(1 2) 3)) (test-equal "'flatten' flattens a list" '(1 2 3 4) (flatten '(1 (2 3) ((4))))) (test-equal "'cycle' should cycle the elements of a list" '(2 3 4 1) (cycle '(1 2 3 4))) (test-equal "'uncycle' should reverse cycle the elements of a list" '(4 1 2 3) (uncycle '(1 2 3 4))) (test-equal "cycling an array 0 times" '(1 2 3 4) (cycle-times '(1 2 3 4) 0)) (test-equal "cycling an array 0 times" '(1 2 3 4) (cycle-times '(1 2 3 4) 0)) (test-equal "cycling an array 1 times" '(2 3 4 1) (cycle-times '(1 2 3 4) 1)) (test-equal "cycling an array 2 times" '(3 4 1 2) (cycle-times '(1 2 3 4) 2)) (test-equal "cycling an array -1 times" '(4 1 2 3) (cycle-times '(1 2 3 4) -1)) (test-equal "cycling an array -2 times" '(3 4 1 2) (cycle-times '(1 2 3 4) -2)) (test-equal "'integral' should compute the accumulative sum of a list" '(1 3 6 10) (integral '(1 2 3 4))) (test-equal "'alist-invert' should invert an association list" '((1 . a) (2 . b)) (alist-invert '((a . 1) (b . 2)))) (test-equal "'assq-set' should work with empty association list" '((3 . c)) (assq-set '() 3 'c)) (test-equal "'assq-set' should append new associations" '((1 . a) (2 . b) (3 . c)) (assq-set '((1 . a) (2 . b)) 3 'c)) (test-equal "'assq-set' should override old associations" '((1 . a) (2 . c)) (assq-set '((1 . a) (2 . b)) 2 'c)) (test-equal "'assq-remove' should remove entry with specified key" '((a . red) (c . blue)) (assq-remove '((a . red) (b . green) (c . blue)) 'b)) (test-equal "'assq-remove' should support removing multiple keys" '((c . blue)) (assq-remove '((a . red) (b . green) (c . blue)) 'b 'a)) (test-equal "'product' should create a product set of two lists" '((a . 1) (a . 2) (a . 3) (b . 1) (b . 2) (b . 3)) (product '(a b) '(1 2 3))) (test-equal "'sort-by' should sort arguments by the values of the supplied function" '((a . 1) (b . 2) (c . 3)) (sort-by '((c . 3) (a . 1) (b . 2)) cdr)) (test-equal "'sort-by-pred' sorts by boolean result of predicate" '(1 3 5 0 2 4) (sort-by-pred (iota 6) even?)) (test-assert "partial sorting of empty list" (null? (partial-sort '() <))) (test-equal "list of integers already sorted" '(2 3) (partial-sort '(2 3) <)) (test-equal "order list of two integers" '(3 5) (partial-sort '(5 3) <)) (test-equal "order list of two equal integers" '(5 5) (partial-sort '(5 5) <)) (test-equal "return items if order is not defined" '(7 3) (partial-sort '(7 3) (const #f))) (test-equal "perform partial ordering" '(3 1 2) (partial-sort '(1 2 3) (lambda (x y) (eqv? x 3)))) (test-equal "Get element with minimum of argument" '(a . 1) (argmin cdr '((c . 3) (a . 1) (b . 2)))) (test-equal "Get element with maximum of argument" '(c . 3) (argmax cdr '((c . 3) (a . 1) (b . 2)))) (test-equal "'gather' groups elements into groups of specified size" '((0 1) (2 3 4) (5 6 7 8 9)) (gather '(2 3 5) (iota 10))) (test-approximate "Fixed point iteration" (sqrt 2) (fixed-point 1 (lambda (x) (* 0.5 (+ (/ 2 x) x))) (lambda (a b) (< (abs (- a b)) 1e-5))) 1e-5) (test-assert "'union' should merge two sets" (lset= eqv? '(1 2 3) (union '(1 2) '(2 3)))) (test-assert "'difference' should return the set difference" (lset= eqv? '(1) (difference '(1 2) '(2 3)))) (test-equal "Convert pair to list" '(a b) (pair->list '(a . b))) (test-assert "Determine live intervals" (lset= equal? '((a . (0 . 1)) (b . (1 . 2)) (c . (2 . 2))) (live-intervals '((a) (a b) (b c) ()) '(a b c)))) (test-equal "Determine variables with overlapping intervals for an interval" '((a b) (a b c) (b c)) (map (overlap-interval '((a . (0 . 1)) (b . (1 . 2)) (c . (2 . 2)))) '((0 . 1) (1 . 2) (2 . 2)))) (test-equal "Return index of first element for given predicate" 2 (first-index (lambda (x) (> x 4)) '(2 3 5 7 0))) (test-assert "Return false if there is no element for given predicate" (not (first-index (lambda (x) (> x 7)) '(2 3 5 7 0)))) (test-equal "Return index of last element for given predicate" 3 (last-index (lambda (x) (> x 4)) '(2 3 5 7 0))) (test-assert "Return false if there is no element for given predicate" (not (last-index (lambda (x) (> x 7)) '(2 3 5 7 0)))) (test-equal "Remove false elements from arguments" '(1 2 3) (compact 1 2 #f 3 #f)) (test-equal "Extract part of byte vector" #vu8(3 5) (bytevector-sub #vu8(2 3 5 7 11) 1 2)) (test-equal "concatenate byte vectors" #vu8(2 3 5 7 11 13) (bytevector-concat (list #vu8(2 3) #vu8(5 7 11) #vu8(13)))) (test-equal "conditional map" '(1 -2 3 -4 5) (map-if even? - + '(1 2 3 4 5))) (test-equal "conditional map with multiple arguments" '(1 5 8) (map-if (compose even? car list) - + '(2 3 5) '(1 2 3))) (test-equal "selective map with multiple arguments" '(1 5 8) (map-select '(#t #f #f) - + '(2 3 5) '(1 2 3))) (test-equal "generate 5 symbols" (make-list 5 #t) (map symbol? (symbol-list 5))) (test-equal "Add type tags to method header" '((a ) (b ) (c )) (typed-header2 '(a b c) '( ))) (test-assert "Clock starts with zero" (let [(t (clock))] (>= (elapsed t) 0))) (test-assert "Check clock has advanced after 1 second" (let [(t (clock))] (sleep 1) (>= (elapsed t) 1))) (test-assert "Check clock has advanced after 100 milliseconds" (let [(t (clock))] (usleep 100000) (>= (elapsed t) 0.1))) (test-assert "Check clock has not advanced too much after 100 milliseconds" (let [(t (clock))] (usleep 100000) (< (elapsed t) 0.2))) (test-assert "Wait for one second" (let [(t (clock))] (synchronise #t 1 (compose sleep inexact->exact round)) (>= (elapsed t) 1))) (test-assert "Check time with reset" (let [(t (clock))] (sleep 1) (elapsed t #t) (< (elapsed t) 1))) (test-assert "Check time without reset" (let [(t (clock))] (sleep 1) (elapsed t) (>= (elapsed t) 1))) (test-assert "Do not attempt to wait negative time" (synchronise #t -1 (compose sleep inexact->exact round))) (test-eqv "Return specified result after synchronisation" 42 (synchronise 42 0 identity)) (test-equal "Retrieve slot values from object" '(2 3) (object-slots (make #:a 2 #:b 3))) (test-begin "address conversions") (test-eq "convert Scheme object to address" (pointer-address (scm->pointer 123)) (scm->address 123)) (test-eq "convert address to Scheme object" 123 (address->scm (scm->address 123))) (test-end "address conversions") (test-equal "compute list with a value replaced" '(2 3 5 42 11) (list-with '(2 3 5 7 11) 3 42)) (test-begin "define typed methods") (define-typed-method typed-method ( ) -) (test-eqv "define a typed method for two integers" 5 (typed-method 8 3)) (test-error "do not define it for arbitrary types" 'goops-error (typed-method "test" "other")) (test-end "define typed methods") (test-begin "define n-ary typed method") (define-nary-typed-method typed-unary-method 1 -) (test-eqv "define a unary typed method" -5 (typed-unary-method 5)) (define-nary-typed-method typed-binary-method 2 -) (test-eqv "define a binary typed method" 5 (typed-binary-method 8 3)) (test-end "define n-ary typed method") (test-end "aiscm util") aiscm-0.15.1/tests/test_samples.scm0000644000175000017500000001673013213600051014162 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm element) (aiscm int) (aiscm float) (aiscm mem) (aiscm sequence) (aiscm samples)) (test-begin "aiscm samples") (load-extension "libguile-aiscm-tests" "init_tests") (define stereo-values '((2 3) (5 7) (11 13) (17 19))) (define stereo-array (to-array stereo-values)) (define stereo-mem (value stereo-array)) (define stereo-samples (make #:typecode #:shape '(2 4) #:rate 22050 #:planar #f #:mem stereo-mem)) (define mono-values '(2 3 5 7)) (define mono-array (to-array mono-values)) (define planar-values '((2 5 11 17) (3 7 13 19))) (define planar-array (roll (to-array planar-values))) (define planar-mem (value planar-array)) (define planar-samples (make #:typecode #:shape '(2 4) #:rate 22050 #:planar #t #:mem planar-mem)) (define surround-array (arr (1 2 3 4 5 6) (2 3 4 5 6 7))) (define surround-samples (to-samples surround-array 44100)) (define custom-offsets (make #:typecode #:shape '(2 3) #:rate 22050 #:offsets '(0 8) #:planar #t #:mem planar-mem)) (test-begin "convert offsets to pointers") (test-assert "Test first pointer" (first-pointer-from-offset)) (test-assert "Test second pointer" (second-pointer-from-offset)) (test-end "convert offsets to pointers") (test-eq "query typecode of samples" (typecode stereo-samples)) (test-equal "query shape of samples" '(2 4) (shape stereo-samples)) (test-eqv "query number of channels" 2 (channels stereo-samples)) (test-eqv "query sampling rate" 22050 (rate stereo-samples)) (test-assert "query whether samples are planar" (not (planar? stereo-samples))) (test-eq "check data is memorized" stereo-mem (slot-ref stereo-samples 'mem)) (test-equal "'to-array' should convert the audio samples to a 2D array" stereo-values (to-list (to-array stereo-samples))) (test-eq "check sample type when converting array to samples" (typecode (to-samples stereo-array 22050))) (test-assert "check samples are not marked as planar" (not (planar? (to-samples stereo-array 22050)))) (test-equal "check samples converted from array have the right shape" '(2 4) (shape (to-samples stereo-array 22050))) (test-eq "check sample memory is initialised when converting from array" (slot-ref stereo-array 'value) (slot-ref (to-samples stereo-array 22050) 'mem)) (test-eqv "use specified sampling rate when converting from array to samples" 22050 (rate (to-samples stereo-array 22050))) (test-equal "packed audio has one offset which is zero" '(0) (slot-ref stereo-samples 'offsets)) (test-begin "type conversions") (test-eq "test packed unsigned byte format tag" AV_SAMPLE_FMT_U8 (type+planar->sample-format #f)) (test-eq "test packed signed short integer format tag" AV_SAMPLE_FMT_S16 (type+planar->sample-format #f)) (test-eq "test packed signed integer format tag" AV_SAMPLE_FMT_S32 (type+planar->sample-format #f)) (test-eq "test packed floating point format tag" AV_SAMPLE_FMT_FLT (type+planar->sample-format #f)) (test-eq "test packed double precision floating point format tag" AV_SAMPLE_FMT_DBL (type+planar->sample-format #f)) (test-eq "test planar unsigned byte format tag" AV_SAMPLE_FMT_U8P (type+planar->sample-format #t)) (test-eq "test planar signed short integer format tag" AV_SAMPLE_FMT_S16P (type+planar->sample-format #t)) (test-eq "test planar signed integer format tag" AV_SAMPLE_FMT_S32P (type+planar->sample-format #t)) (test-eq "test planar floating point format tag" AV_SAMPLE_FMT_FLTP (type+planar->sample-format #t)) (test-eq "test planar double precision floating point format tag" AV_SAMPLE_FMT_DBLP (type+planar->sample-format #t)) (test-error "throw error if type not supported by FFmpeg audio" 'misc-error (type+planar->sample-format #f)) (test-eq "convert packed unsigned byte type tag to type" (sample-format->type AV_SAMPLE_FMT_U8)) (test-eq "convert signed short integer type tag to type" (sample-format->type AV_SAMPLE_FMT_S16)) (test-eq "convert planar unsigned byte type tag to type" (sample-format->type AV_SAMPLE_FMT_U8P)) (test-assert "identify planar sample format" (sample-format->planar AV_SAMPLE_FMT_S32P)) (test-assert "identify packed sample format" (not (sample-format->planar AV_SAMPLE_FMT_S32))) (test-end "type conversions") (test-eq "convert samples to integer" (typecode (convert-samples stereo-samples #f))) (test-eqv "size of converted sample data" 32 (slot-ref (slot-ref (convert-samples stereo-samples #f) 'mem) 'size)) (test-equal "content of converted array" (map (cut map (cut ash <> 16) <>) stereo-values) (to-list (to-array (convert-samples stereo-samples #f)))) (test-eq "trivial conversion from short integer to short integer" (typecode (convert-samples stereo-samples #f))) (test-equal "content of trivial conversion" stereo-values (to-list (to-array (convert-samples stereo-samples #f)))) (test-equal "check shape of mono samples is two-dimensional" '(1 4) (shape (to-samples mono-array 22050))) (test-equal "check samples get compacted" '((2) (5) (11) (17)) (to-list (to-array (to-samples (get (roll stereo-array) 0) 22050)))) (test-assert "planar audio sample is marked as such" (planar? planar-samples)) (test-equal "planar audio has offsets including element size" '(0 8) (slot-ref planar-samples 'offsets)) (test-equal "convert planar to packed audio samples" stereo-values (to-list (to-array (convert-samples planar-samples #f)))) (test-equal "pack audio samples before converting to array" stereo-values (to-list (to-array planar-samples))) (test-equal "planar surround samples have 6 offsets" '(0 4 8 12 16 20) (slot-ref (convert-samples surround-samples #t) 'offsets)) (test-equal "converting planar surround samples to array should recover all data" (to-list surround-array) (to-list (to-array (convert-samples surround-samples #t)))) (define target (to-samples (arr (0 0 0 0 0 0 0 0)) 44100)) (convert-samples-from! target (to-samples (arr (1 2 3 4 6 7 8 9)) 44100)) (test-equal "Write conversion result to a target sample set" #vu8(1 2 3 4 6 7 8 9) (read-bytes (slot-ref target 'mem) 8)) (test-equal "create samples with custom offsets" '(0 8) (slot-ref custom-offsets 'offsets)) (test-eqv "Size of stereo samples" 16 (size-of stereo-samples)) (test-eqv "Allocate memory of correct size if not specified" 35280 (slot-ref (slot-ref (make #:typecode #:shape '(2 4410) #:rate 44100 #:planar #f) 'mem) 'size)) (test-end "aiscm samples") aiscm-0.15.1/tests/test_register_allocate.scm0000644000175000017500000003015113213600051016177 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (aiscm register-allocate) (aiscm asm) (aiscm variable) (aiscm command) (aiscm int) (aiscm jit)) (test-begin "aiscm register-allocate") (test-equal "initially availability points of registers are zero by default" (list (cons RAX 0) (cons RCX 0)) (initial-register-use (list RAX RCX))) (test-begin "sort live intervals") (test-equal "pass through live intervals if they are already sorted" '((a . (0 . 3)) (b . (1 . 2))) (sort-live-intervals '((a . (0 . 3)) (b . (1 . 2))) '())) (test-equal "sort live intervals by start point" '((b . (1 . 3)) (a . (2 . 2))) (sort-live-intervals '((a . (2 . 2)) (b . (1 . 3))) '())) (test-equal "prioritise predefined variables when sorting live intervals" '((a . (1 . 3)) (b . (0 . 2))) (sort-live-intervals '((b . (0 . 2)) (a . (1 . 3))) '(a))) (test-equal "sort live intervals by length if start point is the same" '((tmp . (0 . 0)) (a . (0 . 1))) (sort-live-intervals '((a . (0 . 1)) (tmp . (0 . 0))) '())) (test-end "sort live intervals") (test-begin "register availability") (test-equal "first register available" RAX (find-available-register (list (cons RAX 0)) 0)) (test-assert "first register not available" (not (find-available-register (list (cons RAX 1)) 0))) (test-equal "first register available at a later point in time" RAX (find-available-register (list (cons RAX 1)) 1)) (test-equal "first register already available" RAX (find-available-register (list (cons RAX 0)) 1)) (test-equal "second register is available" RCX (find-available-register (list (cons RAX 3) (cons RCX 2)) 2)) (test-equal "mark first register as used" (list (cons RAX 4)) (mark-used-till (list (cons RAX 1)) RAX 3)) (test-equal "keep track of unaffected registers" (list (cons RAX 4) (cons RCX 5)) (mark-used-till (list (cons RAX 1) (cons RCX 5)) RAX 3)) (test-equal "mark second register as used" (list (cons RAX 1) (cons RCX 9)) (mark-used-till (list (cons RAX 1) (cons RCX 5)) RCX 8)) (test-end "register availability") (test-begin "register spilling") (test-eq "spill the one variable if there is no other candidate" 'a (spill-candidate '((a . 0)))) (test-eq "spill second variable if it is allocated for a longer interval" 'b (spill-candidate '((a . 0) (b . 1)))) (test-eq "spill first variable if it is allocated for a longer interval" 'a (spill-candidate '((a . 1) (b . 0)))) (test-equal "do not ignore variables with allocated register" '((a . 2)) (ignore-spilled-variables '((a . 2)) (list (cons 'a RAX)))) (test-assert "ignore spilled variables" (null? (ignore-spilled-variables '((a . 2)) (list (cons 'a #f))))) (test-equal "do not ignore variable if it does not have a location assigned" '((a . 2)) (ignore-spilled-variables '((a . 2)) '())) (test-equal "do not ignore register if it is not blocked" (list (cons RAX 2)) (ignore-blocked-registers (list (cons RAX 2)) '(3 . 5) '())) (test-assert "ignore register for allocation if it is blocked" (null? (ignore-blocked-registers (list (cons RAX 2)) '(3 . 5) (list (cons RAX '(5 . 6)))))) (test-equal "do not ignore register if it is blocked outside the specified interval" (list (cons RAX 2)) (ignore-blocked-registers (list (cons RAX 2)) '(3 . 5) (list (cons RAX '(6 . 8))))) (test-end "register spilling") (test-begin "identify free variables") (let [(a (var )) (b (var ))] (test-assert "no variables means no unallocated variables" (null? (unallocated-variables '()))) (test-equal "return the unallocated variable" (list a) (unallocated-variables (list (cons a #f)))) (test-assert "ignore the variable with register allocated" (null? (unallocated-variables (list (cons a RAX)))))) (test-end "identify free variables") (test-begin "check for variables with register allocated") (let [(a (var ))] (test-assert "no variables means no variables with register allocated" (null? (register-allocations '()))) (test-equal "return the variable with register allocation information" (list (cons a RAX)) (register-allocations (list (cons a RAX)))) (test-assert "filter out the variable which does not have a register allocated" (null? (register-allocations (list (cons a #f)))))) (test-end "check for variables with register allocated") (test-begin "count spilled variables") (test-eqv "count zero spilled variables" 0 (number-spilled-variables '() '())) (test-eqv "count one spilled variable" 1 (number-spilled-variables '((a . #f)) '())) (test-eqv "ignore allocated variables when counting spilled variables" 0 (number-spilled-variables (list (cons (var ) RAX)) '())) (test-eqv "do not count stack parameters when allocating stack space" 0 (number-spilled-variables '((a . #f)) '(a))) (test-eqv "allocate stack space if spilled variable is not a stack parameter" 1 (number-spilled-variables '((a . #f)) '(b))) (test-end "count spilled variables") (test-begin "handling spill locations") (let [(a (var )) (b (var ))] (test-assert "assigning spill locations to an empty list of variables returns an empty list" (null? (assign-spill-locations '() 16 8))) (test-equal "assign spill location to a variable" (list (cons a (ptr RSP 16))) (assign-spill-locations (list a) 16 8)) (test-equal "assign spill location with a different offset" (list (cons a (ptr RSP 32))) (assign-spill-locations (list a) 32 8)) (test-equal "use increasing offsets for spill locations" (list (cons a (ptr RSP 16)) (cons b (ptr RSP 24))) (assign-spill-locations (list a b) 16 8)) (test-assert "do nothing if there are no variables" (null? (add-spill-information '() 16 8))) (test-equal "pass through variables with register allocation information" (list (cons a RAX)) (add-spill-information (list (cons a RAX)) 16 8)) (test-equal "allocate spill location for a variable" (list (cons a (ptr RSP 16))) (add-spill-information (list (cons a #f)) 16 8))) (test-end "handling spill locations") (test-begin "blocked variables") (test-assert "no predefined variables" (null? (blocked-predefined '() '() '()))) (test-equal "detect predefined variable with blocked register" (list (cons 'a RDI)) (blocked-predefined (list (cons 'a RDI)) '((a . (0 . 2))) (list (cons RDI '(1 . 3))))) (test-assert "ignore predefined variables if no registers are blocked" (null? (blocked-predefined (list (cons 'a RDI)) '((a . (0 . 2))) '()))) (test-assert "ignore predefined variables if the associated register is not blocked" (null? (blocked-predefined (list (cons 'a RDI)) '((a . (0 . 2))) (list (cons RDI '(3 . 4)))))) (test-assert "ignore unused variable when checking for blocked registers" (null? (blocked-predefined (list (cons 'a RDI)) '() (list (cons RDI '(2 . 3)))))) (test-assert "only consider register associated with variable when blocking" (null? (blocked-predefined (list (cons 'a RDI)) '((a . (0 . 2))) (list (cons RAX '(1 . 3)))))) (test-assert "no predefined variables with blocked registers to move" (null? (move-blocked-predefined '()))) (let [(a (var ))] (test-equal "copy variable from blocked register" (list (MOV a RAX)) (move-blocked-predefined (list (cons a RAX))))) (test-equal "no predefinitions to discard" (list (cons 'a RDI)) (non-blocked-predefined (list (cons 'a RDI)) '())) (test-equal "discard predefined variables which are blocked" '() (non-blocked-predefined (list (cons 'a RDI)) (list (cons 'a RDI)))) (test-equal "only discard predefined variables which are blocked" (list (cons 'b RSI)) (non-blocked-predefined (list (cons 'a RDI) (cons 'b RSI)) (list (cons 'a RDI)))) (test-end "blocked variables") (test-begin "linear scan allocation") (test-assert "linear scan with no variables returns empty mapping" (null? (linear-scan-coloring '() '() '() '()))) (test-equal "allocate single variable" (list (cons 'a RAX)) (linear-scan-coloring '((a . (0 . 0))) (list RAX RCX) '() '())) (test-equal "reuse register with two variables" (list (cons 'a RAX) (cons 'b RAX)) (linear-scan-coloring '((a . (0 . 0)) (b . (1 . 1))) (list RAX RCX) '() '())) (test-equal "allocate different registers for two variables conflicting at index 1" (list (cons 'a RAX) (cons 'b RCX)) (linear-scan-coloring '((a . (0 . 1)) (b . (1 . 1))) (list RAX RCX) '() '())) (test-equal "sort live intervals by beginning of interval before performing linear-scan register allocation" (list (cons 'a RAX) (cons 'b RCX)) (linear-scan-coloring '((b . (1 . 1)) (a . (0 . 1))) (list RAX RCX) '() '())) (test-equal "allocate different registers for two variables conflicting at index 0" (list (cons 'a RAX) (cons 'b RCX)) (linear-scan-coloring '((a . (0 . 0)) (b . (0 . 1))) (list RAX RCX) '() '())) (test-equal "mark last variable for spilling if it has a longer live interval" (list (cons 'a RAX) (cons 'b #f)) (linear-scan-coloring '((a . (0 . 1)) (b . (1 . 3))) (list RAX) '() '())) (test-equal "mark first variable for spilling if it has a longer live interval" (list (cons 'a #f) (cons 'b RAX)) (linear-scan-coloring '((a . (0 . 3)) (b . (1 . 1))) (list RAX) '() '())) (test-equal "do not spill same variable twice" (list (cons 'a #f) (cons 'b #f) (cons 'c RAX)) (linear-scan-coloring '((a . (0 . 5)) (b . (1 . 4)) (c . (2 . 3))) (list RAX) '() '())) (test-equal "use predefined register for variable" (list (cons 'a RCX)) (linear-scan-coloring '((a . (0 . 0))) (list RAX RCX) (list (cons 'a RCX)) '())) (test-equal "predefined registers take priority over normal register allocations" (list (cons 'a RCX) (cons 'b RAX)) (linear-scan-coloring '((a . (0 . 1)) (b . (1 . 1))) (list RAX RCX) (list (cons 'a RCX)) '())) (let [(a (var ))] (test-equal "do not allocate register if it is blocked while the variable is live" (list (cons a RCX)) (linear-scan-coloring (list (cons a '(0 . 1))) (list RAX RCX) '() (list (cons RAX '(1 . 2)))))) (test-end "linear scan allocation") (test-begin "register blocking") (test-equal "'filter-blocks' should remove blocked-register information" (list (MOV ECX 2) (RET)) (filter-blocks (blocked RAX (MOV ECX 2) (RET)))) (test-equal "'filter-blocks' should work recursively" (list (MOV EDX 2) 'x (list (RET))) (filter-blocks (blocked RDX (MOV EDX 2) 'x (blocked RAX (RET))))) (test-equal "'blocked-intervals' should extract the blocked intervals for each register" (list (cons RAX '(0 . 1))) (blocked-intervals (blocked RAX (MOV EAX 0) (RET)))) (test-equal "Blocked intervals within a program should be offset correctly" (list (cons RAX '(1 . 1))) (blocked-intervals (list (MOV EAX 0) (blocked RAX (RET))))) (test-equal "The offsets of 'blocked-intervals' should refer to the flattened code" (list (cons RAX '(2 . 2))) (blocked-intervals (list (list (MOV EAX 0) (NOP)) (blocked RAX (RET))))) (test-equal "'blocked-intervals' should work recursively" (list (cons RAX '(1 . 4)) (cons RDX '(2 . 3))) (blocked-intervals (list 'x (blocked RAX (MOV AX 0) (blocked RDX (MOV DX 0) (IDIV CX)) (RET))))) (test-equal "'blocked' with list of registers blocks all of them" (list (cons RCX '(0 . 1)) (cons RDX '(0 . 1))) (blocked-intervals (blocked (list RCX RDX) (MOV ECX 2) (RET)))) (test-end "register blocking") (test-end "aiscm register-allocate") aiscm-0.15.1/tests/fixtures/0000755000175000017500000000000013220531470012703 500000000000000aiscm-0.15.1/tests/fixtures/fubk.png0000644000175000017500000000720013213600051014251 00000000000000PNG  IHDR 23 pHYsHHFk>2IDATxM*UiiԚѡ B6s 3N PYfU;.L@"B?j0+E *ucKiȜ.^{z~~=y{=zsޛ9&cccq r-rm{t(x R kVZ` b1! P333%~Y{{D$#$]"ܭ)h/gxHRT}퓼k<<di>Z ;M^1Htf?NWҪ"Ho3۟o =.AaʵX9^m̱>Z "fѝXC,ʍ(DLRt,x=DTBGfgBÙףpml$O6uj "@2x뇀 HV T+Z0Bj›;|d~l{ZvdubT-ңKڰ`X ՀP%H , |_a)TV@%txР* B)P9xSFPP mkH4*mWrv9c *-X|֎VxKĘ=ŋJ FGG/^Lxd\V5*zن1W:{?$=`ku 6$ [!@YQdAeB} ʎ F}T4(#4A>4( A4h Aq4?AYhP rѠ^P'*Р3C#@ FGGhP;TZ?T4->A.r[?7Z=@Rh<@|q7lk.#YsP~mi974ϔua 89'p|3(AbD.@aAqWEmbF,M,b-ZE =CHEJ8@#@h / z5@ @ bTHI2@ЁL@qz0C 7ۀi4r*tR 1fτHÑ(h(YTqmƳ9YQש e ) K1@  C!@ b1an M`  C!@Ę=@_Ι-O"C;${+}jCxFy1M™] C!@ b4H75S ۚ@  C!@ b1@@/é K8&&.HV44pڙYmtO/_w^xavvѣϟ_lā^z[n?~ĉw}?^{-Is}G.]Zf͛o999~?>}Ǐooo۶޽{}ٱcǮ^y;wvg׮]{Ww'LMM>|ĉ۷o}+h4N:;|'&&.]t…˗o۶mdd_|[o555uС}9s/n4+Wz|T'''{'Ok׮]6m499e˖GmݺuϞ=[lٱcǃ֭[wȑw}Ν;W>y+W?~+V|W˗Ϟ=jժ۷o?~/)W*tr2No` bT€J'Ʃ/@ @ bH-7 ziTJP 6 b1Z@@J1@-Z@ TᅵЎ3eSdS>S t=QB>S9~Qd zrNClP1ć!`S?^F"Q1  Q J )# N؅ՏW,PTX6cg,@/g-@,`右 ԃJA 2pF kiRԟ Z|k޹y}ۏ~_^tvE4¶#^B^95U_8c?9Rz@QfSz2 97b͚(*d9@g<@O]Ga~@XA?.OKG !KE "DJ (@N^_H'友*@?I.{-qQ2!=?.9\"m.@ι(q 4@ϳB]8gBd=gK~Ǒ*(K} :64ϔu;7wn/܏Go[9|?}Kז\^s03IIv:@ιkң@b{s#ɷOGPrι?J>-hu3!>i@ژ9wݯ,K-ؘ|#=G}glL?lbӆ7/GkOW ɭ~(`u! ?,= X@} @=mHQ@7g81GG@hڜ(ɂ 6\4>LGOv(+7oGQ%!@Kbң@R=@_"̵^;as{ȍ̸G Ep( -SʏEVxƆRn !,|J#A}EJ-S+Лğ+aT>B'JuXUAqwj*RH5SV@b)_aTBP: KS?T+2&~G,(G+ ,B/Ib)$3L谮'[絭1-XX7Tד oPP: %ʇ0|(\ Z*ң ]k 1%RңRQ;^V%gYC鏆W{q"@vwzԁ d C!@p&41 ͵\˵bײ C' 9IENDB`aiscm-0.15.1/tests/fixtures/test.mp30000644000175000017500000227540013213600051014227 00000000000000dInfoQ { "$'),.1368;>@CEHJMORTWY\^adfiknpsuxz}:LAME3.99r,$p {da@b/*N" `b@@~{wCxnwp3:"W{{Єs wmO!!2W%Nst#|FC.pSeC!V q uOqK .!-?uϫ/>TX&Q@|NL B4BK,P>,RU,zY5Q.wp^EWԩ4^. M5??&AZ4m˪,m].G{hZ5e啙nAjWH1F$4J0m`p٬ 4:˗ʕ5 /ˉ.,dSKꒊbw.<*Ed. D!+ " Mˀbɚ~7Km諦mdHXkrSf{"n|dRkH\mu&m JǤa^Dd%UJ>LJkedѨÃ"SWe+eȹ2aVtT1pU Y=CMMتY|Gz*ZZ{Z3$nO+_e!IMh}6,[ ^a%sKbkha 2M.@pmD*YAgDqI{x<$bgmdlDH!<`#J` ma8wxnzuUwO!P֠aau.zP:' kU^1s >.Vv 5q(]L`|ÃSv^uFI"dI2F[`瑆C!'ah~4 @`bv;C ,@QUAP 0ٔ53F:*U26ZT)䆱>k3Ňirک ͪy L<*FVX ;Ȩe2 u(rtY(4H0V#1dB&D!p9@# pe g D!)8dz9S3P0H4njR'@K,s=yå(JGd]E(&nPÓӱQܪOFvìC&:|r0Rx{{uMa|B]=OI #l1KiZ$c:Q5*V7p!H@Ѐn&[GS)Ϗ(':Ї3)dcfk 'seZ%ҘCWfB slmP,DB4k6吥׎3z#vLd*BfNEx|#L iU !|U!042)ahFW-,5DN HKrƒH@-10@N P2+А(JSD$,yQV.{R Z"Sy-%N1*( ħ>Jf0sCT̵&J ^&%3L (F=,ۣt%5d҅OH(!H̉D0*`y^T5`F)R"63?T>ݼ4;64I=4M}%o=֥3IL 2&dh 63ReiJbѥ!Vk޾dy<#``h(# taF.a$0آʟԗ{ efcrD4B5\XIiwN񷑵lI&̌$1\ل5س )Xm͟w!sc%ݯ^~ߓ]uvݾ ]2g{U"<&Ȧ-DoL09͈bAԧB)3c{ʜVW_۽Cbz&,}@Z~zꈦcM%;C0V`D<3$r/EeCM(竖PӍ/קb523RhI1|&Ҍ!}i§ 3J \ HL@DDA '*4@W%I 7zԙxS-$!,.!J(@ S@{_YcFYpu:uk"^$[ٗ3}!iT0 ֮6&(h\Ry2w{d"^h&0e+I NJQ@kCMTsPBGHϱURE|cH}9nJEӥa)<Q}N(jݳ9OR:GF•e 6б̗;Ly@  '5G LiB!XA4)t/z@DWfd%$I"ddhw x4x | R'*rԱr(ehE[b{1iRPQLJ!WDzѥX *2 0ᅇpFdA؃8m-|qR:I?sn?l[.R||H]C~OAha@Z=N"̽MOl0HG=H`d_f"_K9 ÔJ@i t8&J55z3'!1۠oLēy8w5|:*qg5nnG"" ̬yB-(#.[a &~3ڳ2JH\)8H&a:)^^*'!*Ņ,fLnL -R',%bgYdIصYCVŤz˻Vq 9E#TzFMv)fJSLD̏A'pUFL@9mhGfk^WԽ2ހR5e9ۃY.#$Q=n0LʂdbAcpcLx#u !Sl+0&icdtQ9Հǹ*2ϴFMcf{*z'H_yLEO tXt9 uR4PDV,L9iԧ\*]ʟ >KaHƾr1BN;+D&l,bЎ Hy,!jE)7Ԙ@85M-mg47 lPixLb+o:y&si9*;G֐Jo{J QP} [i' NM5iKS `Pܧܱbap` x`y?asP%x&2Uu!zWSkk┍6lIўDU` CbEdQaBCu Yy !z .!d3 RM "Z\9oЧ,^5gBMm #S>Ρ3K;A\091ĞsX5>b;nt8(ʸڭ/K :=zk6?~UR)C|ˬRMb9UrvXhmšFd m]CKQ >f+3 -<SIʁߺ+0 R#}#"\:Xd1J0D`m njx"z15,fB4Wulɔ lH6E] -C!J1F“p>D"b$!PEd8#^ tW)Xb01A<3tلT4k߳74$ߍ&ԜFQZ@!k(aƦÒKt!%53ŬqCTPAA0O̠FeIߢRob?rh !r&i$`&4$rIjkؙ@\`ۋg^E!$ηkcWg{}2 -`?n}̪/˷#CWb)0`=GjrZ˻ X1)2^pONNFhRԲ~˪Y}Rᗫ/Hh[Zّ&"DIj tmj8d;bfVh#K !pI> (ǺD=I~ߩ){/ȭ[_Uhd CSx XC J 1'%P|ԁ, .vξפk?wYUlV}Q2?oIMO_7c"8mfWIJ|GhtԠS<˔2 gv&ݿLyZ!_nRM[JpqD|o 3;ĕ3UdC+؍$0y5K {oaXvE+iк&VфpR-]i1S:嚚+Hլ~sD4s1 ΌLf6*D\jYN?2dڸ"Z߱dbAaRCl#JJ iI:<58ǯܹHxUI$ne=t˒B2){Usfw@rDcٙ|Aw, տXNmuw?,{9Z( @vhAaU.g+oLn"Q!L痵raaq:m Er`aY ~ӳ墁LAME3.99.5ddM%&ɒ>B ܐ6m 쉥J{(|Zs'ɁlYeycb%V ;+ʄQw5AŦ@%|8\`@Blj:*9dN&^X!C l@t<a 9NV&}W&-Pm,Pe#w~TpQ(ulZIu"Ț 1h>)5Q㞰E3 8U:G'Rb{aJV*F sQD HAh F` `jH`И}vaBG&% LETB6lx QLA hT2W,B-PAv#C@ÄY@#2gc%3$TYiuUjA#7 5"+ Y?$2F3 \Zv;rAjsldDDh%b9 C H{X!0"$^W($D)2vVTȩU DuɕfuxTŁ]ew=ok)\36 \B$2H,0ɱԽϽD5XK5-Q#m$-HwZ}1ZtIBQ*)0C"|Zh++ת]xh|7Q{<_6Jj֭$(M$c|]-x)`XccX?((t<@aϞ>ɩb .nJP丰K49ޟ?:rD;p&jԋAM!™+,Ns‚IA)cҍFژ$n^zoW_?dV\BH"ak CH iF㞥 k:xibQw:uz $ȜI`e^bsOҟIyNIf}Cf@ Y_=hzM{ ?C{^bi嘫;PåwXHP%8M#Tī;.Ӛ\vc ;:DAH4Iڵ" F(ΰ9NR(Xw;[m2dSBf"c (\ IIK UA&"t]/6_ʔ`6I$MmɔMK3:W|! Dd1LK:v?Dnb[=$O>7__,u곗n 0"dL.Q3,9$tŽ(m# MhEc#lRwy[֔ޱڝ"9_EKyIdU8)~# -E"hZY/.3ˉڑ\F-fnǼל$ ˺;1l˓ Xu,G=H֏}{FLMDeTy|kp_D>fXg#J %r`C}4aͳ]jxؿ\:,ʠ$nFڭ$YFFHT>Nj X_X@Sd)d`x@4>'uCDR L;LБ<9Zj["'Jy Y i_y6ձlWUHF` hvFPJnBQlP7z uٻD@KyPGح#> o-nDq`v_C׋K?߻hLmL s\>$1# ODsX]9CbG@AGQo6cH&L2b)8(;z/uؔJr6/iLOu5u/je (9ea>I=w":OPj5S4299mPubR'ޱѺ^CzFۼTTͺBʐ)(m+-Yo}`\ĂN(9dsZ lͺ!i>cڄ;;El6))ѫ ϩ|ڙ0#B_q1&H*o2XO󆰇hZ?CV% ۹OFۣW imF!ȡNVrւXu:!l<9 A@Q)5PBQ6@>6,"#뵳KHCŭw/OlMߟ).Ϝr23 hPRVqZ ٽ4AIQ֭ɮ}iW@CȮUqЋY/: ?ߩ)Xi'D&/+D˜X"> _$k0ahc?iQ flY L*Ze J2P9{y#VEWzcز`" R.$+ibj>^F;ȃ8sаB'Tt|?#eNd`V4 i⡐੔b*-i.(h`u"2$LB[C,YV"V5#؋b]U@$c h\ Q/\3 uSs; z*#B?' {7 O9(lĉ=aonHƑ fVg%.h-j*V֨UD?`%TO9A""8 ]L$IP "$*]N @i (JE0-Xqc2W Btc4V2jƆ #*FUTA!bYטBίwU`vlqm;ͽ!QH)DK1qfuרER5D xkULOKљ@9HK̂_MM:>ày$&q˷p?@Pʐ {Z{0@BL2J&b+\7mId}jT[^5]}5_`6@F<ˠM8%E\B- (Hbq QLG!TfZѝœV_ndSgk/ urj3ֶnrc>SfZ>K|h@.I@y" :{`D%c{0 }:Qq@Wy"'ty~QE$4ZRݳc6Nҁgbcؙ]OPm SjM(qN 뵱2 slpn%edW?G$!/KGf""Kn.iՊ)曎A}O> .ņB#ʖ(I(H]n3 F@`&'A%fss(6s Da)p:#. eo "ڀW]JTH47:џ -\1ǐw(UA4wI @b؊FRn51T~29/iRPR=eE=䬁eŒߕ gZ!)xs0C'FOH#}+΋C|f''^LޚڅZ QN?-8/RtW2wx 0JPo;ٵX1-5BɡO0閫Z͹]-Ԓ6HE+4O,vj-kDҀY1y@8# am7! 0I0Wrbm}mK+-Lo*MDUD1HyR^@|B)X|RжoPCmr6B̈;3ycjȖ)vLb3C5ZA7#E4BA0ph7(o >fYh1zxVTfrc0N^Ag;R[k> :VkIhu=,bqŁ`Q;=VA#gҮjPh@FJQ#kG (-p*0&yg󡣼;"TjEF2Vf3b |ᯪK36 T]~AȘ8NxED;X{ >Chb ]gJ49r5(H$=э_>Z+7H$,jN_)3>|E!~rD"$Le@Q4ѓ-k8 g V6'O-f,)I*]$3W{lPCZJFG_ j>nB[lc@rsU#qƈ+.haoHOG㜈"" A9%vr?I]`Z =QPA B dWgoDr9$\ }aF]8TؑlJ@\vaOD(QQ(Y ´KIO`#4ɡCxV*|0d~|8hpoƱɾVʢ'܀[4n'>̪81)̯kzވVZڵn8?,{EWv֭_CP *ou&Pj\jOwgbB")&̷r@AI3\ߺhy'o'y{< ߨ?sζ*KD"%(8@#!BLs~䤩~>R98@P91 } #UG$BuΒŜY.3Utss&XHS2;iId}b/zQ*y;-]p7MW\ i*@+$%:P)c3R! :y}\5P.121 0[VF.̉~mꨐ *2vf`. tRD [&,.Oy "M[`9)dI($aiN8pe: P &H4)ҋU['X=[E <# x^J(ƣd\\R. l&Sg61X9ڜX1QI7vR8T3,%a !Hj{en, V YhJ\Bꏮ#(΁I5g/28}q#"$)b(NJ,:1$2;cΔB,}hI@ѱ)X{eo7xLYO?QGTH,lK*ٱd-T%s Dٔ.ܩE1(DuFk lDH#. eQ1 a`#Q#*Yɑ5нGKvϖIkLv*`QbrB&.$MƩ3Mf\eml{lFvՈޖZ>(T22l1Xۙ'} #0su{=L}/ߙdm6)o? HC-X9n"5%bnIZqKV`n)W p@wH qDs>w<Mc(yKY0gD#P)O4/9G8!4@`@kD(ݧq%,";DqK fel#[:-@9=$z wާMsXye/{F&@IGp",&V' 6_tX@%1TPA݌5Tׯn~J? gތq? Kʊ$SF[`0DQd[X)zTPKYc TDp?Uy@G#^L4U0k!;a ɎPm"A(IRUS%7hT4QT~V^VptRB}6=+E (aA}mycj~گs*)azWSl}.Iko ,YioVx3&V+ID&`aM@PK6XR`UGeMnC;3]> G1̟y W$!{?A'?Ԑ)JDʚeS uܸFu0 0@hƋ9JЄ<2]?RֶUȶ˭J;CfPFg`v3 P[p"Xoڠ8tYidv%; zj@Z=29 5fYi5Nm &#iO[Uy 9 1bKBJ%JbG \j;̇hStUKDG +;_'c)eͮUke `G![w#J@T0VKFkKe}f0iLʺh DFS)+$>y#8 K0E$r|!}IGa&GCmSY[X8TP*Aw;%KNO3HmJѡM~Ʒpk?9 GfXdfM=UU{X,ˊF8x >ͥP?cq/ #ʓCm&[-Zd:CT(lH`N#˴ۅ (yۋD%9ˈpwlDJ74e*8CZbuHƘ`?hdڤֻ3 dXd8ɗdZ nQ'$置kl/QD wAAGZ`Dv>Bi"8 KLgb8[p!\Ci9I"IYU\SurCGf>8HMfP'JE@f`?5b8vJÙh#-zn~8ń fX; ռ-C폩/ONt0qkHsY>q4~ 6'z/q\mkm.@e8a> i:yFC莴i-.yWFJ7(4W064WFpΥ+mqJI(*iGmJ̓GhnHƛl_/Kժ&^/RDˆ#KD7"#. D]Gb$26]Wmo.b|ߐI7y| dLMV M+4YFeUkK E BWGa(8SW*_?VID'(B[I2!0[%VM6H y,2Ifz;KιFƭP`*ˊx,  0lWHpx> @C\CRtBܭC%J17e2:#4n-}WA YDzfrXkDmGViư(Ĥ+W涗JۜXxbX ]W$Okl.͚7=Prxc|߽@ &aXF" !b(<*h`K,(ә 䂡m,D ؄PVFяP&BN(]F 2@Y6Y6NedN'"Q1Z ܌2Vu =DBCɢ3dD(Ȕ*fHbUaz/i:!I#$.EL U'B<#G$# d 0o% c;HV.0@78TMs2e,ȝD)=Vb X Q9e jZdI-Aئlr?'A__U5@WtzG&dk O~ROw2#2߯d;(9m4"CMbIChN@0&X p0Q`ޥ]Eɔ] S&W z*Prb/\m?̖̿$_Xe{?o\``uf6.#s\WoEmEt(hwAO67~=v r"¢ňT:7aV4ҦZR,p4j/H tWD'IV?`H( ]L$"vVQQ}wTRԳ0U/8~d#>tJLAmhf65RTGÕT>l[!Q7"I \]< K+ t+rj rd lk+!" ;JavSAgIg, ?(:?Jnj{\Y#Jd"gkB(HRnK&U~g{ݦ-@mV },[@ BJE T.N)&{0lTr,*BduпOPhΐ*$mPQDTVgQ<4R ǸF1M^M#!D>.I+<>"N #Y,0!`p5].EƆIMP -rD$Aʆ0^wRDH4a(rmߣC8ty'b4!HmtfYEcd*ILɧ`[B{DZ/h˭:Y P$IpYUUL@ tbjʤ |mkX€w8=4\8LP a#0e niPX)%~z_pm")]g0o Zi!k&]c̓SǚX[4OZ h!+ k-,$JD]%k ALGh# KL1@ՀbdUp^oBE_bS?Ԟn b6]⾛fp>]k {*p%Ȍ"E 2+Z4*iJmUz~HRJۉ8$4@H$ ⚒A[& w 0>E 4yp`Hk@Ej7%D% l`1j->*`s1RA+WeIMD2fէwW$"@b!D^ r\XԢcܱ h'U s'c:ZOpxh>@sKCol=gjr\ܽ<'DZAT+CUsDxXTi08 #JicMp 8Ro)>ae {gБJf5S1/G2ʤqR zS KZQW&ݩdsOsRS^Fasj!K0z@r9ܴexmǙ2(NU3Xy ƞv Lqdjze`R8i6.ed>zG)GZ""Am$[1?TG֥ĨHTgGLnR@d50ѻУi:(5)(r\R۴t4𑕊cV>E7"E,X:x7Cd#Ӟ(*Do1TqDcV#N po]l! p R 8 H8Ȼy[ľBiuf(BHKJb*"TLlk*~M݈,k5 tVIrDF*#l8A !57w`?:{իF5uPӔ{fQn ˏp_9 VI$eHPvhkʓ [hFDF(V &-Q\l0"Ԓp~dtyH[1)=(**+?D%**a!7 !OQWsQXpRL ڢaDliI,6`"8 de0Ibd+ c<\&)9*9ZnZ̸#x4䇍{)$3ѹzRm (xBwGUqʇD`sELkily \Fop;<z,ƱoXfNikU4iS-MM\(v-%tw-lϱ+pVʭ%no> A#Dщr{$%6Z :^4WjSen#X&Ƙhb(Kܨp7ވ"1CK,q+?9ؔK"AL@AfUiG^v~uHÃFrAɍIap¯MD;*|E(y#> mqI!1haj6U{kC; 9Y*GU]b [f)-(A>\ dU C,0 yڐ*7aS%qSAA쟢/VKa&@sW X3H}NFI&G N眾ephT#73D\f4DZ|9P}{ ֖;B?ЦTd!-@rU l;<`He5F<$@,c}{{3N0ַ (z0NDywkȒ%ISEBIq{4XuWrђnu&k[,"XL0ZeCڤ_5#4JMҽx7%}$$- ^HYg]%B(vyUYΔآ̑ PG<"TCacO/!d^5KPX؀c'[Ã*3PE@ !bELŒ! l#%> [إ7ݤ{lVbKd DHQns N9$!U8` z^!\Y59ge)n=I ʒ)WK۶9Z?ϔڬyizˤ1天kꚕeb>Db<I ]6LS$iMG$F1RDh&FqeG'IL$VNOpSʕ_auKIMb]XU wo3UW1msFU_L,¥24/hX;Z\뽂+~~wt&Ak~GSPԱ%zѲ[wRBM$DXFc FXcnK(aL $%5PhG.Y ].#-޵,F*XRS}ڍEȚ\nS7iNc(`GiS%cHH~ P ?@qB\4wjwXak؇'S-|3]"94QKnØ;o]&r^~}v<:k{^'W­s˝5 VyBJXhV _Q`Dgc4RFEL$yCJY0Ia9 ap $=o<غQ%Dw@WG3c5rTd>-B#)0;gu \V|D19Ґ<:@LZN\-j ]SACDw{2z &m ԏФ "|'"yTzXnyHɖɦL^:$2{Нof"A0BTsܠab P*~9OGNai8@,X¢jWl tB,k.A.]Tts}jg"00f10([ ~89xPE+"t-y='`oCR*Dg-y188#S<`#´:^59Uyޑb b`KE"W@YI5 ؿ 6 $@I"oGO:ѵ#vWxJIX* 8cLۋbpgC04_'APUJZ]>^h 0VբxT2<S\_;(&\)Awe76gj%8hNt&l6+cJFF$̩):s3Z#?1$jN9S{ &D)z{"cKE`$cF%{V+w}3lUD$.1B\bEXU#` Uz fP,(P #s'0pCl$4DH&j$KuE'kTTUy;k^;M*z2PݩG[tT=EzTu:d?\Dc'Y02"8 \_c"@|bKA$Fi[H 1Ϛ :}Ƶ,LC=]`pJ*}GX-_%@YZ1Ů,85ͧX!؆ =m©3f ފV:A8/azFruikWRꊷtOKrrϮ!\xq[GVcc`` e$n>>D_{BƂs-/Coҿ(ˊT?`U.GJ8KGKl9Jd)6UO2 y#Oʭ|*($<~@n2XD8o 4щƿz @ D`FN.FjDVyD@Xc lcN 89zvկ%qz뜛S/%K?{?6-⟺tRp;ѓˁ~e1!Cą~\m1?r`ZrPD6)TEKYmDp )dQ8uҦ*O `Ij7aMڲb[ '`/oض'(6OFF"xĜC%:`)B#}&D߀R%q FB[">KYkAB`022~RDsu+#ڍns أ϶׶38zIN$'= E?B,k\^Pq(TQ((U8y1TesLJ &{a( A_gfo$$(t8].|쪤Jtr?r Sr$T%O3#jo- qHٰBI@F>3'dHr Bҙ~D]5ĹILcBϱnH ~FāRdS2\4k\3Wb nuI7¿zBUub+S3<-![>Hr=7:k8M7`DWyPPiHFbKOU;$b40`8_SZ9X{2)擢]>5|[,@a἖G-h JS܅rgC\FVZ4"=( 0#521t>~ 0vZ0y=*V4ۑV-rjfRP5GJAvBlegA$N,඲G a$tq 鹜v.å%,EV}j*< 5D&-\'ڒڢ?}~Lv iQ # @ZU#ׁ$Ĩ0/iEk +ϞNѧUPNDaACF5^%D0k O8i #LM!?!6 CCѯֲR$iHF''{:TJž K f6(BfiIe0\;$w͵J^msI&XC8GY|:MՋ'm+w!$iXǼhzquJ oݦf]"h.j_i*v  ,VQR9̥{8冕HZN5b5$ D0`RI #Ks;0n1 48$]׺KsJt_έ I8b)%3=Vh&$8 ]xSe,§2˜Ҭ9aC--uB@e" , t|ujEG7Wuvr/fdrbq5!,u!=~Rq/Z-kz'`TSo=šVmwa .s_6MCH(N0 YCa.?DQH"w_Ri񧲸F:Hy`+oH_bC%hxCy,TRy^Cē66.a5Vy5"99&/Hrm$ Pt!u=@CNsM!#M(iLxj()bhy5cqlVD^Ls P(Ĭ-K @ s˗,MzW2Qޗv3ּť4ںN&Eh*gG?Mڈ9Xoo~Sncs.\+G"ᥭV/*J~ e " #)(X 5ɒ|L\f̉2.LZjK! :McYy3H(LL٬RR:q4kGPa6Q6Ca :IrWn5VمؕZ1Uc&iYqGWsb4LU4ds2 %@IØ 0(*@rL'%I`@ D45PmZ( Q9L"0 =]hdyh/Lsz^e If+K?"P *B;3Hrs1͐p SI*p}X|"cƊD0 *"`Sܼ`=T#*_0Q,j7D5gGR~#~aVGBH[ _˦EB!*ʠIKe^4$!ygq8&+nj$B|t}ҕ¬S3,cmٗ8Ј*! f 0sBB2S!$aŬ3)0&"D,R.m. Sbb0=lz16<y^Z5[H>#6fu3->+4Z 7 =*E7NGLU- _E~MnlA@m(eh2%mF2e{[ )Y"&2 t%Y#Sr&ɞ_A.iɢ0 'ҫO7KkjDybO/ej"?`&2,#H^x4^t^y:MJI נKi, ֕:-1r[xaI|0$&DGU`R)FKQUIZ. 0sAcI$곉G:Ej6oTIE-kǺ~Α B eDܭ>!Uҵc$ZHdTF:;ͣ'}+5|jȯu+Q'3*1)ު [Uj,*RKʼn~ dF45{o!arG9emJ+ȦGX_S. |hUnWuƪBr_)":AtE&M4{Jr.Tk{cTPԢKnԲ,2CwJ+ڡk@Iฃ4, ^:x 2Ee.D.LF#N YccM40iIL;2ēp'{ 18"# ,>m~47Bt1?\G%i"aS4yX%,Yd&T̐L5&hh Q<3 &.$۷8ܦauY.H N-2=,`8 w• ͑h.;AUz* 2_e#J5p~~H:BRD9%-vO8?`k'ټ&6ȭ{x"BfLPV(Zqşv((4ܜ<\jK)sJVy8MG{s8 8DDFX< <@y [j!0BN}@ҩZoEF%Reއ"l,?z߰1C$E@(zjL.#4Zo*`|<##QFm~jd1H+`Ԯro # Z[$nG#?Wwwzh0U[ۣaパ4eE.0n{TYBWMmV<ҢioQktuFbzKP6 ľmch [=Xv&C>dhnEzҒQ|3z5]C|P4ran_.+)3pD2Ri K` aOʀ"0鯶eͷie䱵w7 |o6O5I& .w~뮵Ko֒ʩ f0Eӡ-.dYPu;b~,,,XKߞ,Rap8 8SrIsfbf@JA$ !/ IܮL %( `ۦdc\Df@k g2ioqԵ=rHP\Δ!ž7 [4)0* I! MXT1$1>Ә"E9*[,(v1$r!.#CB' ()(ʸD,pY)7#8 m݀"F:h( 'sO&2,ϯdzښYQc]){%MQCiJaYSu|5V ~kJN4vU$i6v(@9p бYc 0^e Pi?_c(h;T($hM]T4R}{Rj?H9=&-ЅB#o6.бG?!pcm6 OH޼X v $F oDNHb9ԭo'dq"@KH@:rҟTID,țQI$Nn{((xPF)2E&*RA\7sh-l;)gU ,eYK/}Yo;3Rfo= &`?wF;-_ +vؽ2h㉅^k讄.;p;R T%am̀ ;*~w{D`H>xb ci- "ϋҿYUt_}|+ @CN{!_Ai9$R"g [ <<)9֢uFTiV׼ Q+K+}7$mTXuNxUT6Իn;A̰"s؄=m$]]EW_48XGE|c QNǪ2˧0AĔX$D0j, 2* |F`itGuF2{AVu֢ͧM5zG)8D?+J#H#NKpg "hE _ie5W1@"G%#5KP3&j=jIesOzDс= ð*`4β{ihxۖPUFk]y9 R0˫M̉SЇRYE TV*22 0ӹyPXrwI$-g-%*ȩFJ)gҳjML£ïD?Y,]% #KT찮+"t(ԉs|w7o%dw=|Qq 4iP2M5O8Ew>A"B<7FOx>:D%TmV>6R@Z _9ZRt9]SHp^&}xiinPUkpX\&1sȸle&RŦPφl9^x#ӊGb{i;"j)aDx%XTg ($ hS9] 0!+x# W&Y*q@YI@uV0Vx"!&QrvbGX28dl$EhlڲN 1܆imE2INNMI: Xx&h@PfV Y3JQk5_7SsPƔݧ=$^.NB#X2^/ʮl-ȧ-kjf%z.,Q?)zk;g\M$aV+1WfSr Ņ(|]PaT9r1)c F7$SV {#̜g 8۶ EJ^KpL4<@D-Vna`RŨ W\! R"w ރоF/gxde:9_$!Wڇ2SCJϚog?u*!)2(LM)tUծ>Z+oFkAA<-&@\\b̍ 4@ xP- g @cJ(&EKza+$yF"ӪE!Y?:w;ʌzDSkE97t #SxY*U*n%LĈ;r@i 9Hr61WŹm; Y{ĥ\ޠi2`S*n=4V[ѣ>Ym=ou )s`@dD%IU9EP?"n MyM'A;In<` 9 ɿ]Yg`@>hhH~4(h??NHFKҔ(W ޷,$!,Sxy?A v5)V܅ԥXP$|Hi#iP DU޸*1GwXC[D6FYUVRt:o-uezjP GGC Txy6nvڮ]Z@+$IDݸMǶ@E9IbY3{ŰAePI }ܺ7>Z|}VLW<(åx_)Vwx$`զړJU$*3D00H戉C CǰgA:a9Y_Nn# H^we"aL J;B*qc,?];QQJU2r9*#k>R5Ӟbwf;k!UM:i< LB58:%C3HS2R3IaҎKCPВZFӑ!8#2fHM<ܴwꖠ$ߺFFG*E`,"qUVCNl0K#/TK{l9kL\Bu!˟cp?N6F3j1jZTSyUB&"ǁzCDg $H5e8/JA<|b͓[`w/ZD'`@؉"N ?KQ"pS;RT'I-KPP8^Bme y5 XkfjDc|д,) AK-NPI~<a2+~Ǟf4n@RPNӌĊaY߹_JJr[k UiB@@ BɄ+ 0];"$RIDh].)D{[Tg 9 lU4"0fx$(ZTܗe2iNe#~Wԁ'ԵtYɗ4g7G܍JK;LBP`( ;LV4EWemżˇ؈+N$@LXTy< ƍmFW –̈0'r vwG.qSΗK%BՋb_WѨNANL XDX8+F ou^) ].%cWoyl ͕KA>FDkWAĿTZ}?Fa.*9S\ѿВ-ĪxVt9ər휘N4st0]eRķj{8j^I3 `2A4Bi+-螑oP<MZeD?5]jD[W$Vp8X#. HoS ,b$xΝp᫢AsIGK(Gb|B69Y/d!)w3.[&mQ;U⅚$ڄ-r vpSjz3.\`Bd@`@PknnJ50S$֯AoR<+]IdUf=>#Xi@و|x%hYBwzٞO֖P[Lw{lmV;:a"'Ө nH5:@J{ )~5v30'c}]K[VLg 7J*J6;[ؔޥaIe"ëDZup˿)̩t^+k֡]--Da(U02"8 `]ip"dx~JH)z|)ѬʖE]0?'Lsk5`ZI-۹S&2䵻r3D_N"i]u`PV@XDd@$4m8#mE?eh4 ܪ Fh?EKinJ 16,V|֞8\ ӖB}w*?ZR1tDWzc0nBF/yN 4bKI 5L˞˶UZ)1aa ЄHU@D2~%6QzUP^DVDQ(P4"8 o;bЍY.I9=_e4SAyHy+JYmm#[n]KO:{ϵR;>oUU7SA85F)GVFT$7 W".c>ڢbcDI{)o0Dp52$a}LUW( HR }nq"+?]ϧaI<3|uYLkzGU1Knd%'" H." &3o:PNcm+D?jʉ߮Yf͈2TJm_R:TE74m*bt 2 C|}'2 M "#I "1@BlR*4dk |t{khx1E21~]L)"RDIȉ$F4.;v>#t16xD h?e'bzZI._飝c *~; etTͺ vd@x`}pL.JDy-QAgbf* 8Mv. b?E\uk+$|ul;H~gknaҌ02n2JFh"s,ols]i:@v4$<:+9v;j5l ]Ok|A. [BAVk5GHBqi9ɑy (4d !0.,ZIpcC`]a!Hd@r,.`k}Ћ'Z=grfXn-Jiwϑڙfλiں.}/-D-JiM "Km#ge(!3˙ *f3ȺI ߰@SXđ$B|hSh,?|?Y}H@a:A( ρ[V.Xy& 5&ǔ:)RT90<}sB[XfPda?VGnCHT l:lEBppEH rw'dmGo6fr`~*W}*΁U&1 *Sc3&3"!j"b 7t;w˻;V U1![Lr#j Î^ gE2}SLD$Lxi#M@e+L,d0;,oscwoߢq'wv#L][D5.贘!zB n}TgY'<2$kBkbV}+~eyT aaZS(L\ *\$  ?g~Qn>_N{;gcϿ⬂"]}*K+54!7?(%(<>T%'"3X*"H,\ <=BTVCF 4l ؿRѪѹ3)`We^R;̢hy361!1Y)9p`NtGߴ?\\jlȄisD'i`Oc8|#.J`_+Jad0Y()!% R(4.ӂ! NANAGƯdc7rqx8JLTv=,R3954 !0U @*BK?rIo3Hu_OH̕n"L*O w,vӂ90Ey"ɡ˓>8B^*!oMճ:Z-fA{VI-vKjia>?tNpL0(9^ɨިdVQ#4S*x([ثkwVxImH%@f#sVP ~Idd{>w%>}m2QDJI0^+( CdK])`.0Iwt b$kU< .*HNPLJVO1!T^FfjȚd#4aʤBd^J7tD=7o.zi!ThP;[k^E0(BgȊ&dk 4@~™ǔo4%Zc4/We:JhTHDlE TtPh$FJ>J?VQkMpGEtZD{ԾWG D߳η-{ [L6(ی"HDYȜoVG$Bxj/]|ޡƿIr̫35+d =GaK#/Lc tɅ!33֙zOBkrbK"-yT(e#hڿX"N (F4= u*1HAƛQ0BMxlu ; uT:=Ȫ҆*|+2&\R"'LTF_hUv7bD/>j&JkK}LBSӡ7(RЯi\mc t)%PI$-Sޝ9ծPܲs c,;N>xi<}EUh_ȧ~p"8BDzo+T(cVɒ-2:b'8d`&ZX} òK; !xIMbi^ޑs?6e)t@24vRy56۝EJhiys28Es+j 8nL$XDlbⷫNXۇa, XjV;<5Ueo_Ґz?g>w5X{tG\(ITfn cs7`h$7H8)IDewQ|B"Z溥d[BfXI #J% !lWd0I쟎vIb67wL<1,rw8i(X(y)֦Z$E (0N =h kQl1C7"MW7 j7R2Iz=M7ɑ2̦87(5 YT0$P b sW;[s^䘙#dqC`cH" ' !~ hd 9F>_T$q"J'x "vBأ{I"\:-"H1 L(-@ 53гt=aiDg%si|NCL|7p"Q$HkEP>m0}+LܜNM8ܩP1ɬyQX9d2&dbeRͪ<&DW"y_Ȟu@y V[2I E5I"Hܕbt P($Tb1 ^FTp-JJ \<"Q싿Il"24T`I$IN"'+v~5k̹jbeX4An@{Xf!DE!R`Kcz at3wv(.:?U[mU~`TT@3`޽:[J ؎')% d̘ҷ]WXSI)v :id{clhbվoCPXEg9*abe ́JD 9JW]tYL#]wI_Jtot}u lljVHf$%hO{S>I@L%n~)8k=/5DP1hF^LdҥWȖʰe[ yZ%T{ RkBh2>HtYl@KiV}㑤\Dd=Cf2U8} #J{o L1N1_wv~תӗ[Oan$*7Ģvz!!=a E!%JsIU)IC3)cgڔUgWge]} } o.vLq}8[4>)';YQAN. ~=M3l9qX ';һmmTuosnGK!5w9$?~ZXYY8%⊀O $i/!n: W"A= 8U *`a Ýv/: _>R(ptQ}MĻH # E! FԴ:#rCr0d_"_*x\#IW !lR`04&Ϊhd<0L1*C> NL 5b d[}s's7>n'?^XwRFHY!Z%-X+[d2j3+Xaefgy֚1(l}H,LM8E'D'20h3041H!M\:MRrhq[k!89<ljTlp= j. +*SY93Y;_%!$"hJ(g+‘T7 H)G#H6e<:S# |Z@XxP aVMi2=B&4e$~MF''{?ro¹e'5ez˓2:~gDe⮴Em.˵31?oI&R>ǚ9F*"(Wd@0#%ήhdxGCaRWI(I Mq `!0"7W&1!hYHz bxgSFRJ܈j7):S",K1ʀ'1V m.k؏=Sj]:V ҍҞ"cC{WC**(<Ш0]K$C-XbѲjueQ*Klg]38l թO3)hˡ1kzF@h{ 9􌵦K(:"0P@xyf kWI{- kw\JL쌪c}5@Zkf[\q#JoRUu:BW8 ; ̍ݡd)C#B]kz I'XIo!d3{X[A$SlFEI {3vS~ϧ ~y6ڗU mьZKώ2*u uH/VVWcӧzeph}{qy߯[mss^ )F$Hf0bo k|_iX:y dOb zdZaX%cnL !vF1Ӽ;Z/WWm_m3ɠ=*:jd:J|QQ*l̪;89Ojpcnmsr'廞^q.eg3J"I(I0ʊQH%pB yǣ֭ kYyxx03 6ciwzm9o]͂K`E"vt5NM5-@ MЪ?Τ Ϸ)MS]Q/ɼ#>ZgU2V }䳺qZPlOj.سBjrGAS *TN+~Kv9v]Tpi(VEȕV=?mW3Hm̸@WW=Cn#EP5xo?rb0j07l+r .m6?IA8|K6-"U͌t$r3f=F'ieyM֌8 K*H272 .\p y}XP%l?68?6su*ycNvq~zL~B-~M4Rq%Rz4R,RPG -3/Ϡ9dxMh#MXi #L !vIt-!01IjeHMx#<ċ(NL!Q_5N\nrpn4]RsC&@:VD,P,h `0 ZxXe3ZC7`[4Vk8h"nàdUܓ|fˬu2ܓ|PTAFfld疂ܠHr|L$:sHM0T+Y|ݔi3F(I *i`'>9alċĬBL $ך"0C ՠy8Fq(jȒYu$[lD5QC#SƔܚVM8~8pՄSƔ|D!C`PX Y ` -,8h$&y5Ėcˋ=s7SqCP}s?u,;&#DFl}B x@*LOn pkXYj@ Mݕ1Sa f3K$/}Iaږ%I;RWZb)vڤR~s)_q.N,Uءx[9nѮ4B->|h{#p8͊DylHk[s dFgP'GhII%ދsyB8AU b"4D2DILs(Ĥ i+ g0G TRU.r2|c]B2 &FUT3†/3+'I#$Te 7?H_ϙܶO*Pjy\T2KFNAǒ ,LPI!X(zbНS _ _rqRb Ddq_D޳m4 DM/E)(I\> =5JnPfAi2֥#&?gIYfdpLŝ4=u'8A ։qQFɛx'}O,b@!ra !P;؁k󕘋ݶqM>My^IeZÿ>Q+Yg|F΃ݧ@bc?ir%mP%c)O%Ul(.LFPV .u&D2|cA<\]&ԫ$qaٯvꙿDSI$Q"D3KHA(#> y-+2 hOI MP! 2Rr0k(ժִf=Dn$"@uhE۞j\xb-}S{|25m J +`4sőAixjtɚ0#IJnB9[#nIUHr >jXJ/~!י%6:[s(\0PfS%d@ &2B >f4_3&w=:߷ `.?%̏%WO.爂rG4pLRlڣs\ PkhE 4KK %gԢ03E. uP$tݰPD.k 8EC#^q/U b03B&N:/XԢP Uv]U |k"8%=Qr`PSdidƇ#aH$VN;|7Y:XPc73wY2VTIET-$fm1Ŷ,kpeiuBpB$w0&L#d x,|j[:/KR#[8B;֥t]_MT:!N@a[i);yMZF-CJPաp41%^٧gfM̂M B4Ft:4MCR PGl57 E@4D!6SNj YXt a0"g0a̘_pE8hIΨp X,ذZ{?ڥԣ^oRצuݴTjIFa ܮKQϤۏ3BqV"yCW2 H <(<9"QQ@ F="U \.cIHT#has6 f6U"KtTA7bi!qaڢ} D'T 1=by#> Iy]p(bddH1k1?L[I+w J "*@QTE HJu/ɰ/sPWE;oM1SWbхA) 4I)}U4?v.~T0农3: H**+CT. >sE b~eeoy!I %}{)5."jP(8o'[T,I9zz>ޡVW6L+Ou;]<VU8|W7j`"‰ L`U准=h&Bik(b)O$LkRXhҔ"N۴+ iU:!J|% FU|D2329H#. Taǰe@ߋdctӳk' SbzI356r+6LHD!!DM yP[ęJЩn\:_#"rhJ b˶]@UtZueń6mk!0v.X9e,N "YD*@ @~q3yW{,[CTK4aw% !*TR(i uӷF4U46x+ eN,>a$j[.ʮ3}N[i ʢix!/5T55b'灚8L~W9^QQ(D_a y`:#8 [nj!pqV^Y`}lDTx}1X,R8O7 P.0GWduVXMe}Cpxq둣ɓɪٻ{"A e1_MewRJGbh彪pŠs#ڰ.;=v*C[";X 16dԚ7~G O>IWud+;~v%jU_RR[vqsY"$AN'nQ]B$Xm\c+W!zG؝H2 &ŞQYh׌ekEDN{,eʷF*#gqSL9>4Dg+i >"N Y0E@ $*:uk/pa5><9A~6̩lZgRDj| VwUD(;*_K z5P$~VJL,i%hxNʢ 9\_ a"YyoZf0 đ);cJtQo'yAP-fK7`&mUlRnj#^U#+.T;wȈ?Z}JXA2[!`'#pm4Q/7e4X*+e+L5hrBʟA>mfk\[:K5e74?,y̫(~1W 'r˧JwR B۵hID,WyJ㨚#JL$O$i{*!3<ۻ"r_ݷNAo[j8NBpm#1t22`J /,e;IQil(&? (UJk?}NfV.DIs4g܉Wf8VdҠ:ujg]:tN~~cg5Λ'wŎgz+BkR[uLeg 2ϛVE%f;1q9:۾" i7`33m -*ʢCpQ(o*jṐ9Î,+zVݳ7Cȶ!,Ը%5*Ч<D*yL8y #J`{Y-"t-Me a#>FFM-̛ss/V5nP(Nkؚ,7t"M+,⠼@7:$l_G,cjOxNAjNedx"#3п"S zAM_TF$ت6Y`pꂧ"tO-P)֓s:,b/#vQ)z=ʧ~`K S|O&Xp4@|̥Q3 zX棙 _o:ضt d ·aHllC2!'OI5I?zHtJK*BY-}D`@U^Ki ðK]0g"(V/@',b@ӈ-+L@^ P+IhNv_h)=n{=deC )HSø` Y5i0oWU%PXR6MGL*FUr-HFq0oxUWߵ[L<{=L7SZ-Ͼ%֯–n/.s 7-m:Y"nE!+%b!H%I^\% C{ -ak)ֻt LWOߠ2H~Ώ(VVTQ3 $aMܜ@[b(&PP}&O5B2sg9˙DF{ *E㸭"> 1#E$TAZtQ6fH sKӧ\ "yTTuMTDFnР AÏm[ B*'aA2103. 8xm6Ge#rue?ݔIeS2&(Zt;bSH 5o܊WsiY@  ^HETrsƈ(Hᖖ6:T3W6ni~n&v.i; {*BS'#3F 98h Px$q`rRc ,b[q3 K M"%SxR`ӎ~|6_mPDitҦDE,[+HYcng1? !0!'p\xTry^g6#R/bGSH7vGO^÷/}J)T3nѢ**qBM P$i[2lP8^ζ+&:s%]!ZiS`2|% |ebt S(*<hahh!HC%FPH-D#!pd ĕOeB di*F*qYV(IjImFcU4ƃ I Xt)fҟ65 1EʗՁt šS!eLq氾iD?Ino$ĤUKY8w BԞ?ijm2)i_rr/C5Cȁ NFn>G_0k[UtK6hwIFC ߱ow/ƩѤR%I"M8Ihsltkˢ&˦UG&#ULTni2GР)%]ISbD].I4'8P;HX<(ɢ)bR"h}2+MY#J*mQG!Iif˶pMRmTń撐m=_;mV )ULh&( 3 cL AG8 ,[|o!Y11V=б2hhD _,eRHL eog0ooUX|}f5>VWkUb^SRqM4e$ZE-M6f~'J_4fWI[\>HP`ryejM/O:qVnh)d 0e:MӞpHC@.\ԙ8Q'$jn0e=G=A~;fM ;H%@ETdUU"&L…rۙk.b>o{|FN%".y\$&.PJ_(C/8r(l!tM[r(QD*RmIKkc30\ð)t/e./6AF@_r%VjpvywY.b=+ >L0. ( C);3rmKKuG֪ʧV/d֦E]"ߧgHe.K"@|]v}"InfsZ3$p(AnhL3uZpbVKbCǛj~CN!Yz[{7Fp8=3ҾϙaXI$B']ui7>>!I^'`p䡔o6] kJEʎ(rV''H8p5! Oml)ZSlM8@DY,B@GD!8naVt RY'c'0ɑtئ9ܔe}3gk}v2I}GfWMe%/7yuPv#(47O*  9[Mu3ϖzN&I<3^]'^߇L*ċ@ Za 8 1?'-Hf#a9 & w썉syޛ A#!w0d]\ߟbm˩ J⽞r+r#Eی2(eW)&w{YtdjEnqhLJ&3L QT-bU+Q$eh% ȪQքZ D(V"Kٞu_[7+-6ݖk}XXipDȑiШI.( E4H#"Ȓ5NGtaa7& +D6X8S)=|#> QMƀ"p(]F= \;ԇnIH* 2ud#Y!>F^D{tDE 4WA!REQ'[kx"EJ=XYoz]«h-$ӋBn;RwU׮|=7ߩ9u3+5h! UJ ] рbK!lWF:j(MH2HȅBPUbQ%>cZYJmjzd9P 5cAp;Z#Cy2X+A>ip),V!<({:HUTuD0(IF)8Vr8[ҪeijdD/j+S/HUV/l`6!nbM1Xérh29C5@Ę`#L'D6M%[d>p@T3?:լ9m^# w52xl{ |Vň 9dK5 Dj{ @`#L OW# !T! a;MUKp#, ["isR;b{yv1L8r"3(7v-ԗQ*u9g;> Q&07 g]Nt=ԗOr !FDꮇn"&*Bd1PԱ 2Wo23P 1 Z Ȅ!" "fSd]{>YAB[29SiJٰƆ5"*)Raѫ`S,Pz'b,hσC;P`FO!{U8̺'Df-S,*;8# u_$I0"kAMJ(RYs2C~[wN8b檲rN=|Fޡհ },}Q0H=iܛU%spVT;"لجsbW09\űh1E qW!]Epa:jbs|GCg^,/jjU-UxT]qr₆Ŝ4DJZ TNxtk @1<8: )nJvp ^ j:us,5fWf7DqxT5%@sT-B(\ň"mdG?HLņT܂)DeXj PNN)[D^k/`nsCDπW;U,V?cy#. kPa rOkSg F_ƪ/|-!kۼ !Jm TH>FM436cدsr˻T?g!hm06$M-D$ Wӯ"X J@lMFM5a:z!{;\Ηr&f/hy%܃YI|s\;?v:oyOUUmJI=#0Pφ$R.v32 E}(sϺmA>14gIc{@#~šeD͠Z ɕɷJ:]JA14=0PسXNQjD?XLKhy#>Kp[qqRd5I;jGO4I$>zǡ`'PiR ͽeX`QdbF`G z`d \D|ܹԿDEֳeoHl_}/Q:Kj=8aFPvb$E, ΁S U+[4d9#30l_v,#UiοTQ]{#u?s…ӺIC PR$70Ob45uu b9b8"/wpEU!-ubԄJ'z~#`FapԒUO*h\YS"@ti9$ZJ;Ҝ.sD?iIX|#> [L$m<a1윫_ )Ӎ`؛+{Mbg_z,9feWGkb !p4x\EV0pl+MUnXDqQgPUMQI䱬 P_WvMqDQhCUՙQZr23JG D]+Q ֺ&9Gg.`i&{ׇZCáϯ%Z 5M** @I5_S"%q .<"mPd %O1\[:uowR)~(iJ~:}vU!ItΟH3Gs5Cb_~nSnuDZ Sl CLkeTGᦆ0/޿5wg-z‚ @TE@ D:!({t;X؊)\,ܮc=Jw;ȨeEGttqbU í vјf["$)A"LTWYmG Hȍ>i#ְ9lP5FȠXbF1.V QJi2"ݠ@92Ee'ٍ$l)Cd뒊V'8 cJ-gMM:`)G36YO~7n?w}?./݇~`e2D HXkzY wOY@ ޹o\\EU@IEFl-0-1 $nBwxɖ\~4R^ '[iIs6_P3@̵FD0bq8R#!U.ܭ,BIC!nI{HM5Pʧ[*F(ͦrkY%BM%X#L8*1 LjXXɞҥdȘ#ME嵀CwZlf/q'~.+kc^70?]#˛ye&vS|s.~vsljpǹ[ FJDQ HTkH o0"0 P8 @P.bkt# Xc(8$3 s0 O JzB )ql$F"#5 [ rAH-H\rYOQ67 Ք2c! \^6>EE+?oE0v9)r9)dmv8ϗm@o  ڤ]d u؂`Mb>%"ѹn+pA1/\tj UhH$!f[y$HLQD%$Xa B`GHL,R'gSDP38LR0ai, ܆A8Y;wAIFhls5߻@38pN[lDVRtvDESI3Hdy#J 1]0 !2 %!BkOvS{!)g޳%y`OZYe!jќ_s^N cT+$d4џh S!;!-S,fT(&Ǖvaaa&BF,dI[!-$,%nΒO3*G-a%%RЕkӊ˞Yťθš=~zt@&(pMp&F?3B%Q9klلa f,Y#0ҁ`DG%nTnFI(P\qX"lxT:`DqHD6=X,0D# a$i@"pUPrJ64Y! ESLPҧ.ZNPt8 GgpTV ǯ}ͺO .c0iG yc2L`ct=L/A) ʪpIj@Jٱȏߡ+5ꬋigޝs/`yv(6 h-+tj:~ Uꓦ-uҎ`デA@0L.>f|DDZ^;m(f`H}.zЅ aARaeQ1&@ʖ8yJ V Rj r\xR![](S*ZH&J eaҊM<#ri]2DYey D`U# keh">Ggq`Iލ 286I疳14%¨Vե$ATlvZEp (>[бJh=mnm붠FUtլjhS4pP k"XFmWfDe2A")ITKfdSKc8Ȣ,.-ZX-ƊDe91ٮ9eRޡG8X*'`FN` +8EV^i*T'ָC̿ MGA@[8`*W&-hi)m{ĉ(@W(r:^EQl D{b*WqBX#N [Ob]뱫a(LIeG[k`JΘZSXuvwvS, G$`$X~`|PmmB ~rK~zEk jGCi&fI"UFSAQr!4tjCSMOЯt/k 4T9h\JԚDIhMB 21z?^0s1ظ+"E"jXg 0sH!"%TEޫmh:nzw aVD vPճfu\L{׺ffxS8p RuiTb]5@0V%G(dXN=Y;DH%Vs 0. " {Wi@"pRpե6"JV = XV^/^# KԗA^D4CDnfU$*XUmZN)藆cc"FEh,E7Rj"U$& "jW;>Pn hqf0hMEY8Z6kBTyG >c/aT-duY"nuWc葾v` Sh9tAReQeupjZG$I2pP{$$^+$n`@QqεBbXs(TW, Ԃ@{ޅfEN>D^B@y#\ PILb甓e[& whJN*Nֆf8'@SM+藻x~B *0;M-ӳ`'◡Ҏ$]>IH[UVm^j#6;?fl4mCI63rڛ`2ʤćm[OWvO-LeW[ epYI#F]bͮ*6C.Ӧ[q*:ļO p_nJn 43o6.d EYGSlHJI({%o;=?gtɳiMxJfEєJ#s:D*aCW85 #K1mK1I?FnJ-mn&w5oݐ M8 ?E 0:\Ib)f ;c|10hbl0u,( \2cwx?eUU޿gT7:_d=$܅rXwʆLX[Ej$OYzؚ;YE amfh6)} ]ŒAKEO넧 @azUIW&l `8a/+RQu fC<_; ֪D L 30O'"Ks-0ef!$3:OPߨ&u|r= ur}We9$DێT8W"r&2j'(㥕YڥetP BhcVfcVm oɦF=vjf{{P\bN+͙y􇤘**[6A&܍m6 3a;;ftld^z'}U'w̷~7h;#4Hnou5uwd.dk,FqnǨZr+K/H`[T: ZK.DLw= N 1jz1"H̤0<ҳX}e;/20⽞TQ"fJIXC󭏢BCGfD%^ZdK҄bˮS݌ͶiT莪K9mSE^c5CB4  @<$)կbNd5&F@Dpryb@0$ypCؽ?nQǡ60;OhMCfB{K@G&':\^DΧh9 B}DHm߁=Ⱥ1PR5c9V)Dt2ե[2!҅=ut@bc;5C̼)O'[\@D>i@MY # h;oA& "v+4Sr8g#AM/X!|6>)jB(c (!f fΦY=#L^ZTC=Ի$B&ʨ+>SYe"yX^ Vx|{ŒdH YoO-.b+Vb]>mH8J Q@6N QVl0,_3PU,Pmd?.eb\13B֦MSq`4aJNљ#ɭׄ(s@x@!`* "}j 0\u9ɌCv0I`M-AXYzhY QeQA4@h*\O}%sfDGCNFL# _0Vq-"p0ȱa˜GV<[J=UFTУ_u"z"(A$0,Nw\l@ҜHN4%ds퐮m#329 K1$ =bEL: -$߼i8Q DF),hD@< W guQA4 t\Je+uf j'!G_r/[O@mI(MXy7 MiM,:xC!2 ‘{M@ t˸! h0gWmM~0\d\tqW)TDtIU{*x9H#. g0"064ΰ$fi4LD688 殿d!L4`r4io!,ԞyWjEqqsZꣲy+|v]t1r UuK թIBINMO%I_|4(2$*(]*RbY|> v<*\(,L06LU w}UIId1p*xrwDf}Zf;^d7xc) XpcѤA/ $q XZ Vb0bP QH%MNX}/hD&CІm[d o>"0oiR$Mk]֚xA)imֳ > GU&c "kzWF(cὰhgKʔOݛ獶2=!痵D(c"RMFڤmME] %E//fSK2 Ls-Ee 4f`L9V(="/YIIfIjF(LH@ $ E(@2o@u W ثM2RG.[wUg/iu"snw>fgOy=K׾EkrbVl, +QGY"i؁fFYb<1Ɍ2"fӇX„=#c8۪mlr .I|ߥe$nK$rlI^hSț̙r 65SMo\n.0ֽ=؊]zp]ERDͮ[I L̡ DRT\x. šD"0n=F  HH"0@?FĢ"3g\x8:}ب)lf]&Nbd3jm6MFn6l't6kskhʳք>XB%HE+SrB*1G؆Fę |g.l.|EqBh!c7 ؍RX &$%,dSs/%S'B2:RI̍7yZ2JB$YŨf=%)iJke%VHO֟|.eȅӰi皶9)HZ.億JRŸ/ͬak8NJ^vWt>ί- AHؕƮCATT肌쵔XƋ-(iG[/u)$v޻/U-B^rvBUv-+ hý'Sfwsfx:~Є}SgE`/7DҾD(W5Tk&h6" x]K$i`߀"S LVk쮢CBRu˽< 7X*`w6<7yfc'*+`#LI>mY,KdÕDNrqJd3@MY#oBElB(j]u[ U2 5,"hWrY:԰-lz6{zECkYsg<'DF\?Vb.d߽7݊ᶓfIM' ׶7_wV-LZ*JA1yLSrVey29uʍ,.QSדDv^a}Y teW] ' CU'W%8s%r~& SIuoWuzʔiHam78m]RbP&(-ܑ#"Aw0;ԝ d-?(Վ= 44ƷS*}F5¯u[ȩ׵:9үY(@aJ`,MNA3leSV] 'U GC>QFXl? `Wz|`dm)xjdz $Xg{,I$3T i]4L2{7orH?+trzIw*ۙUy];SDF_%S@AU"IPL̰@b/7Pw QF@(0!5Dݪ?YKU@3rLpN)oNbǙpa?+K&Yg .Ic0$@"ChK> $c撾rB;U@@su"K0;&OIQU2wN:d2 pjQoH>F$菱 D($R, J7Gbޅ&&•ֹGWbKXYr=S Q,,)"XbI1.=Jpx)Q@Lm:`L 0 S* T4hߵRIԷU.DoQ'S+L*7" _i$bzZX]vz~1rRui!&A{ kї .r.PzتL 8cG, ;Xl@LkuBr522Df8;)& . 9e~-lH$~xV۶x@JJXHhI#T  0t#?EMr2H@X²{Y':zTq Gddw{*<4-EAZ&JX8$Fe!?ƭ-z$BkZ!Ztj.#ZrX3L1,-*ޡQ vCRRc5Di/k@i#> XMG !8NG*|RB}YE"Y D *L XE374 f80}Y%0X%*Y)/f3s@Pm\9<+KDÅl`f5`a@&0XA@Q 1G'y3*UM5:"Y~Q-4=-8/5T]+qTzզrI^IOXȌ;x*Qwr@:N.ԅ{!+VbV^n:P@[BWnՔ\|+G8rÑY NUD]&)\A8y"> ,_aGpӀ"l9 `0 Bj1Ϙ2fji)₀tbK$pbo^mvѺE,\'O~A3Lvl_!+yhȍ#a88A@2ʠ|^@*Gnܥ7C8D;n"#w!ztXNUKF24E,Ԕ-S>V%/يoq6qYABs-`c]k@Z WN HHڗ:{%u fu:LҔܠ}O+r$A)SbEhT f_>(,b{֦DIXiG8#> Ľ[oa``0]{juʡMڦw;~qM& I4;Ditph.*F@ JD[(A2RŃtբiSG Urp w5Hef+jJT!^J0=w&BwAAEo ,4A,5PLb5yl<|:֖),.L H[H?Pyp@&qM#YlkV3D@T)+8#] 1ee(3hNGz̞HYA ׹7::K%"*mWZȗA!D6Ё i#@z4t@С vΣ0A 'S Y?Kّh339-t!,#뾿AUwop{H_A&575˼zo?ٝ'5v#UP7(]aOvV]UhM;N!AZ]BAT Vt6 jBK~mfCTP;IĢ$EJ)Bn&(mj QgAW*, H wOzb1}#eOsD@Yi,4\l88 #6 m"dqv=kP.p/Y/vsI@|A]1$ʛ!VIo9Y}Pqqm&mF["z#~Ed'4F:5q?R9WXiUޏp_ "M9P!Tʄɛ*!Pnz?F3oy9ջ]T.\dUKU[5^ճ})Sz*RP]N$93pA]D/6iRriȝ9|+8&m_v1d:Ȁ܊b &X RdƉN1.qМ0ERkH HU+_kz7DB?X\Yk% #BK-=[,$Oq50!dcꜮZUב3ѕ2CJjy SeW,ƾ IxgS8Qj,8 WQCME &îտ`lr< a D$_FY: t(q|4yD%H&Ř8(MZB+v-̅KkH$s?$˭ޓ9- ){zJ pj4 9#S3A>F!H!l2P;e{Ɣ/a؄#A 1(h  Ic ǹs+㊛~1 Ghq$XrDRջNV# KULQX 0j\% {JT15ΟѶ㻝k]#-cGu38E2%c $(S 2Zxv q,l !WI,hF[ign~u82)D8HSi,dYgi"iCffZM3ֶf8.SNH.V\-4aW1yKdk "Щ+5?_m*'&ր;QXϡ8mFFZdA6qIsQ5H(ϡ2IK 3,EU^Dv[v}['V5(b0 (\aԿD޺OPδܶ/BT1* ԋMD`UDhKc^OUbd,$ĉ]T֖C8tDA Q2ʏaQdÃbdQ*i}Bj  rQּeSŧjPdh5bd9B@/KpCL4`BaJqcE@EVAc0lh* B)Ῠ5~YBS (V I"%4j ' P8anҜY pA2>z)yo!]U5c*?2#Ha@kDg7%jrheH]g#hNR:r-) )$/ /!3#z A:IrJ|"dNI Ȍl5pq@x sXک:yS3(J6SD/HUqpLHy# `KY 8 y{Jйjds#Rn)yt$SzPv7%@촿4(_r]ؾfMR?I&y UP 1?B e>m$&/ BjY /y߈_KKtD22wyA< XyNQ?[ntm 0+6`@ I2YMY&l; );ߺ)ّɖuF99L߻W͍2_Rnw^%u3$}o|T~o[lG(F $XSOutB`{N@jJFr&Jx2D0Py\ȭ åM / 0``e0zbs $ 3i}n唲0XԠH'&[+:Z9٪ I xer)e.5DZⓎyϝR&~bKiiLU@"E@@X*H`eOvĶХ9Hr~ER幅Rl4 =V->S2_'tgEx躽&:}W~#\S~:6@IHM*QTjm ȗoS9nZV4ǩ?xLjۜfzm^7ouv_;3[s2hM0˴d~UgT(rM8f$و}tc.IiLȿ`!m*D=iʞ&:GYeu RD-/V@MiXybLpKmV(0HL[̵e,JӀjd}iG)DN&=L{I]5vUNri(.;yMZYw#I-QCU ]PY8X儖+* 54$3(Kk/2bTb&ΰTjIer͂ dE7<"fQ!Tb_3S(.ZX$8\yߪkjP8T```3E`o4?Ͽ^ 3(r-l6YtR)d3|7zޞmU2EX#K~T)@1rWچ݈h (X-M ' ER\{C _4(*qD&G=SaBdxF0&kUZaNF  *E*6'm͉r)XviNftLM!_訋.5=i{Tͤ"p/a੎ia}Vÿ= Fe:JkH:N u)cK:o;05/7KnwVHS,{Ir;=Uj[߾ ̢ 4+L ĮNpq* LEkPr;A鳎uC*xsPdgX C%HP4vߓfِ#3U4 %9GDvM4NbX =e;`,$D !Ыj Bm I&@ZMBV29tnGBw%=(8 Ofpsr/e3'²*"tR:-)GdT榭F-s4yR S| |x&L sYY6%!މ ֥[ZtZP(Vf.i!6M;IJ7*,3N>Lja?O0D-HY*l?B". %i0 "08 tCУYH"bk:,W9JjI f 2L8U4_Ե*D^Ⴢ1wID e!B\btS.*R޴O'QIMZw |\6dO R8ZZzh]|>qҿbxT]=ݙ̝]dD!狡NJ .u(UÓɞ``B&tt{~^%_ޭhrףe BTO @),B[̲N"0_OI>fx0yjgzIKr;WD"AWQST:X#. _'RAĢ'VJQɆr^3\X¨OZn|ygXi 6Fj)#(B ='azM( I:JIA? ^m+/](dq$#}5 HbbhBAbn8:uV&"&-=ktF)_{úP(x%2q+vA+DF!$lDi# e8bpڡr'&t%!NLePclj",_8a_Rl4C?`0 &TQ5&TQMRJ,#RXG:UٯYD\oRXkGj^,stU \,3qF@٪T@gݹNw2w:%ԍs-?[LGM 0R@!r !gK͂%Y4IE @L~{h{q.U|/q(n6ಕ ng:gblsS~^Uu`溥E1.>4)lF(i]tCn^L0m}J%-ˤz©7l|dVb(p^%U1KnV#sǠA+` #}se$TuofEur?*Fd{1 <2mDV# ::c#J \U0G"रaRjBEI%R8N&}sorQ * τܗ++t;\u2WaIѝ.u}sD+aJb(s$fy %>r\> P&\rt9SJ2G$8 A_lgnK~2d"'_o%zLS5g㞿ծ)Z\O0z.%lT]n2&o9hf:F5Iォs̄繚8 B$ C|&Q .ڈѷts( Lay/1bnPQ9 %awhFI'9bT )XD4S,)xI#hiC ;g7!)46hk* `H>iĵ7ݵ y/Lbc̛Qr$Ҫhuaw*#tFf$r< 8Z$ieXm&eW@'y2DIK5% Mdi@TH*qD2$qI%E]ܞKzgr R)$`ÂDd tC% &/u=x[e>Bڂ@u쪧غum`%(ф쓫M X&TVd7gHw-zxGH{dIku9!62>%J 2"zAAB화B6~G@DDIO&I?@# I+H"!0Clru7Oh8Y F(1kѡ y&.*a`Ze) BDD%\#{d3 xY4p ò쳛16S@4`ÖrcpODb?]_:|r&LX` |,?|4|dȍHthj) QܪjJ:2J@ıڷݸH yU7%&ŔV1FJ %%k@"9?򐀂v6-W熑 y$&@2fdb Dۙ˒픀CR̤Ixԭia|>qLfJ:..32D-V0Ei#> pWOT0ܙZ摡ٜ}Ikޭ{ڝF4!IistTwSSU T/9,L/"Zd-&I fwr#N#aƥ4IS`]J*yBSuoz쫪N4IJht)2钗‚~#Vb *0Bv%$_:\N:;~s왑ٮS}gieJ*kG(#E_^cM0(\[+7_xgoYG+^sirD7/4(KYazeLYsK3333333333333332lҺ(P0,W_~ʌҖNdca 21cx j1 ek\nr æ9C"4[z @a>˧])ޯc!&)agoKe4R.{sLuzIޯwۚ݊sm?5D.y Q&.f,`DC SZD1Vm'=^}%Q`}*J`qoK#iI &LإT{W^3J1HKk_EHzrLhWn\B0*AfZñ* n] atx Ø6x:"aE(ڸڰMaH~Q΢#` k.&rD L+LJ"y# 91]L$/ Pxӡ(Ɓ (aX1 AYթ%K{  $*3o. (z "(ۓ=tгb$i a$ dj,2K.I$?*I(`a1u!H3)1݌=FL"ERLdP[_6C Ȳ")e2:wj Blꕅ$Ѕz0Ш=M2ezx8pڽNKkgx;<Ξrs}o UsZI " t4һ;  sBEcfoPA7ȕ8tDjJXS8 #8 eGM"p$oYg(g[.)_ԶHz؇%I mJQ!'rn)^(.RkmvfX;JJ[p&S8[;VeUZTfw/vo,TN%}2-Ԭq-bdF@IFV\E^֭0X0Bc(8^Aߪ&sG\²EYB"N㌑.j 8֒FsD3h H5fWjHpaMP෧ޗuw$4Ѭs@֦ qF-.g0V4G&7'LS\vھJ5cp7aDC\A0 #\ \mGO0hddU-YJM*Az>}!RֿF.bK" oѴѽL؝JMM7d:V 4.UWReP _rŊQGK++"/۸kE{&qSJD'S _6_OΫ_hbXpp/0& @DԠu%1kxK01 , /!qZcǀwXXr.&*gjT((\}GuP/E2CB1*GƔ[\h]chAR{bT2DoX0; =|"8 Z V 5*4iæ3A̙/@9,YT9w-tRO)f?+cS %!"dr[&n C )ԹMBΓOzU F)(IHހKTP5  0*1LAQpp?й-&9)nS*~ƻ,g!׳o.[By|cدp5{뺥{DQ ,ܬDm \@!͖],5'⺶f}DNiԑHAWal6W^s9ͤ(zG -؉Iԓ6OAyJ[43bj$YDAIZng$ L$ʯ!0B4L ҅mS}%-M{qɶ]`A@E( ȉ0Pa1*^X$+̹(7ɸ Sa)_#lݤT \oB:+coΏU}| r*}*## ^DUkL[ʭăDrSCץiH٥*PfQEA@DD@B]rᎬ 5hB!i H&OC@rr" _8~Fr3hPcM[HB%Ȕr,YR$).h"԰RN 0AE9j\Y(D =D p(=>Hf^gIP؀b$`t_(OA=mׄ{oBEy W)ytr];UhK<.wpDmӈl^lJ$(7逢7U("]Z9%[Yq{L;.LYw vP)!a L aab8i{T1}b)K]-MXDU(ġe0љOiGd|#oaG)ٌL B s- 8vq.&s) %B@kE&HJ/9dFG4dUD@[0I*;`#J km L b% xdeZ(^j[Rwhұ#`@e[4ۼfB&OYncݟ@i_7D9EE?O-aDT@yx:'c J4Uga=+v2b_ +PPlU))$l1C *e162.䳨r2KSrȣƐN_̅b 1Lv*XP&EcW4sym[G'#%e$X)%ARSjc*/|/E11VA"JI$@T>v/U`]_<'ˆj$03nQ0` =PDfY5[iL<#Hi#> Pe 0"d1xpU,>ǡB &ߥ[ũ>FE͒}qP9BuM4)fQ oEud׉D[NJ̝2D8Fi;覛׈ YȒ2g0'?eh`v`{JsorR!u|K ׀j y)]2\YHڭzRDW1PYYecAʡ+BR;#I#bkz&Z}UYfQgTKeˇTn@B@ YJEj]/ ɮ*@aJG_֣V+S!(8%&(KԉHY94HUD^1(DXCaG !0kqRˆ8E&]Zbp)U󃢆3Bw$("6 8'[X: .qHSM,CU!Xil^. ;-kң=Ic(`25 IwVS4edHlɊ=MHa~̒耎JY$kܪ/J 7 DЈyHDFi%E;ڥ* d[e-tqX_cܸSHPԖѵR٤(5Ce̝b ;A!FK 6,Qv2a6B$c6^Z+K%Ufƍ)ZLBSTf;VdD]k AH.@"8 P[M0߉׋!Rv](@y~8J@/YUXSJ޻2A 暐͟>cna2Ks À" =B2(*wz~6QF { T=!?!&0eȾ%r71^ sJrv'IT+UF"X)QaB bC)̠9!z"@]b5!%<f )4 fHɛ.pܘ/R(6a@b>.TX|ȨDaO%LKm.{6F걄3MA!X! ʔeΖLC_@ $D  .C_Y"" D5fD|XP)`@.)y4bɥj#0 -_+&;7Y+Ȋ CRj]W衤-j\DKPnk(,ĤEA8`0L UÎb]bUS5Mj-CrjnR=s߻<9SUNl}cKW.WԪV :AUV& aeURw&*@ {ўkVef-@̢P#)8#BQ.xG,KVNR* XU ċZ 2Y ):xP`LQ#)xR4EM3M#Hk#wvȬ/ K ZamM&Šd$[EI)9\iF"%m::xxZ6M%}5D xA=QIڧmKGk&&Ѥ?kruX*< Ȍ;E%Ȣ+a瓺ldEH!6@#Y gbu<[}Јx jtrg- I2H Uoř{ULЛmDEa `*$0zje$ l9qJ_G>,#bp dq߰>Wd,; LYlGU!2/ã BD+"l^;?zgh!Ku;su^,#U|!Һ^I fK"f71CifCx֝eyqC]5O]!\cs3\8%ދp,<1b:!DYI ;U[W9Jy X%2rwrʿ:y}l0Dzz7;dE`ab(Y |J !z`0 7Nxr1 Ѕ݊brNGnam$ $p0eP:5;fOUCN9~}_l^7~8P]7/Vre3 Ae*@ ijB̋υB,x3:}} ]`4Cx)7JQx+1$_*tùRGNor;Tm',:W=lX[|.5 4#vdFw ~YԸjw(s8D c%SYcX2A L!1 9Zцv.v0# {9QLm8}R mdrM%V cIgg?0';5CmuoKq Zaن* 򬄱BHJ̠(F#PCAPA"ߠ~MU^wkֵaoh2i\7+7tfg%IYV˖g3C 3u?x 3O.L_ov"?5H(. d5~ r&NvaJs# xXOOU*"|*ؚ43E 2<]"+Z z)_4"zw9i2Lq:FBZfy$$mip/I%9W(@ga>|)iR0B̒%,?dUBf2_8+ #pJsVI[3E1̉kn D>|v@BS\~S¬;f(DÔ4,EQmGP,b6XfBڂl{9t[떯izTݭA^<(m Ҥ:VkZ]k:wͶr#0d(Xr F4TICB;ɒxv!ţv[xʴ̲DMA=!F.:dWDhaBY 9 #JU !\m'`1y'NI(T"f_. ff PhN=MFQ2w(8idž^w=\{B E(qVa5 4!reU)aKjӳ̬=op"}5c;+i+ …-DrȻ]3T(5.qٯaIKe|"ʼnė7sgZ. w2>d8hD8DQQE"sdk+SIP9滄*58P:jYӥ̎eOrB!,Ȧ 9<{s&<PtG]ū^Xsxze`A8c3bIe̐0I.St"yNӛ`5RI!bOhUiOvKrv#3w)`díUC&;{rᨵJp6ݐ4RtdWC`aVli #K1}vIu/1?Gk7 (t/'\$i&R])z2 w@_):"Y^H,/}3M.֕63>K16g|PN`i.62F|LCكF(cP,]yzlp;ǿCQo/ ƻeJAHTQ̿}.l`(66-]O~),rpؕU+W'ѧ-/i)h2VG{}V9a5L1ͩrÊ#\0s ?p1-}\Q1!Fcf&¸[vӮ:d|,C#rZɈz# J0{ 4 Dᦂ0i6x&dM*RB>?ؐoYQ8ʵ|1&>'k4"?kChy~ճ}g{M c-;s߭ŵ\Lm֛Q&IQ&zJ$fO@5 Isew3!l͹F\K6Cg,bW hZC^W2759yu+nYg}/9W5<ӓe|fdr :7!2}i%R'`C^Z 2TB䷿26tz8(uҟyk(Az[X*5 p%W_408 [u_Xzkb;r3/nPrا fgNTpP I4.q OZQU2za  >.3iGVDz"8Oi#JAlt ]gqHˉ)*ghy:SRdOgiIN*D'#'V0B^â"F(+AE ^ykBdɘ [S C(V@f%)V)^=[+af#FXۋIb c&ԏ5YyԴƳ0]H>Ϲ:Q0%#I$Dђ;'@̀'dx>-n`)\b:G6.2ֻTwh~WbA5"FS'n+Qi5+ds=f_@O&oIad>m2TsP`CN9y$a=?v*p iUgP) "tD+qD"#> k=Oa 0s:Wt`'"3ʦ^Go̢u Ytk_N2C'M6BO{&`$lCPL,JC +Aa$GK ]aGx:ᄡHiN0n_0_M^q*WݓԞ\Q;3c)Gb)A;o[/ϸ5Ok?RK3MV5>.HD.iiFqBfj鞍$8A! Q[N҅T_V8g$GK|ٲBjV4,*'rb95+NYF&]HQEMգFk!j݋DKLncN\$=ήc`ti*hsZ5fW8L"ZjF(?'ۍlI$I#i$rpjlš3, "i*iW,m_hys㏴#! A8C,cYB ,#mSl7ʉs*Iъ4$Qo#fY^Y,|Qs˂bqUEs.j! ւ"|j\bZ}˓zTkVYԈB\Ұ\QIR|Y\fk3lhąw`t4$!=ga:ǿ,}}m2ηi_`D6nKa0=ˆ#> S+g"p(f]y@8y6$8UN2*KYՋ@HvSa6;ɆC t?VdM,curW$&MĖb*bŘcydNh*&} r‚DF#,"PB6>q 5ΰ!m@btrlFHVd^XED<eBC1-DP6)H.@:(9O4~}ѵoO ƚqH*Ez1r#ʰֹm\Pu:-o~~kOTzA&!"4FvĄ( zĬѺyi3{|^% ۧHDWTk`4# 7i`bP|+*Mze&M_7Cx}$ՖR3W1*(BCQۻv*iwؤHݒuxmn/Ex"q̮?q@ o6r8r(,!`a4{45yb1f&!:v hvyCI2?yKimn8FDaYȪzfV0ZW x?)K쨹Cf,& ={ԍiBbڝQ: E8%&EΒRZ"/{Kl͙]mwGmL:DHWwtk$n$lZS-LHhp6#%Pt >JcSLM)] ߶$a`GAƘFBT7(6TE_U)Vs]a֬ >Uǵd.Ƌ.t5??-Dڀ\#iPE U"n 3ct ;9eanȰ9*I HH3mS sRnvӪ!,y^1ڳЋZDZ%L'MkV@HO,0ש{Gi8&tzBr˼wm-iuw+wDw\,֫#&xY^6T4< ɰ' H q(h@ Mb$uS;:Ӧ8)O3ܷF,8kZ, [Z2HՖcV/ntݩYd3pŻy=MͿVM1J|,}D5LyPQh| #J|s-|(f*cxw{ nXW;7]2gQrAp@ S+KjܫT"E:Fe#f#DExRnqq{ 8A@AYy9#5Hu 'I N"MfAwb˞IHl*\wCXtw9`@c2YYEK#; Ņÿ= ;kXK&Gpx*1#"<ヒQ8F8l|G5#nh>?*x4 'h C`Ę"Tĺ2=g<  CQ+8pZ" \ `bDYe&/"Ej4BD!TIg pĬY]K 7 wupXxD4fƪS*u# 7un[k Z^.EЈ:_,3Zk95;E+ZSYZsO]{eo[F oo]vl$:je0$ PI0k( ! YՄFUF\F\"$Z,!JbJ&t2BYCHIqס-&BU{$nzn3ӄsҳmU[? 9 >VfeH)([8=a4<ZEUDFeE[\I0I 2vObJej򱱳}(D u MZf XhD i ]= 9 OW3@!aDEύEȾ7 LUje;ywkQ䴧FI_b1 uU%Xo(:# */0 X荣@)ur^.A` 81WN s8pt8K*R :+#}*>̀5DBG(T#J'к(z!kL)heLcd͊3%4y `RLhFLR2bCfFTRk@a ńC.*eۉ$m$g3IfnÄu̐ږA"a{Daͮ55lۛkDD-TO>Cؽb psbdW شBJůDIL"I@`Fˡ< vbBU#UR.2qyGv>SDG K4H%δ9Pe[U&F(e`4 0Q]#;SUSpFU9)c]Bͥ(t)j$;hkm͢=hIXNdhTTu d"Y Ig;~u($-rO,ռV2u%F`IlY)QwtiQVZ{Y{= \$1CiVbRmu4*\&<4̩e;jEr3UvPm~ DcX]>."8 iGQ0"p?h4J Q{I1M#atFn,#,M)Pr,o]6V1iRd\HƵl/Z#VK{ % sEwHSdw_S o-L@)?`ۅB.V* (5ߗVvHL}L=3\*KobS;~rSKtQjuTseܓvHU?mSeaO&2(6Υ,zYΩaiZ+zcՙЍm57;V.}蒭 pQuh_c:"GgOD2? FEC^Kqe0K!TxN`m8)&I#Bfan(ZTb[0Y& ( )Ċi)Pe ŵ!Lx62Wa TNeg00* ǓgEuļ) d'd\d@c=d6WaMXw_̚R[_6w%7}ZPaD?~S&מrlHI%̌IB2XlS#QeUעb/7>wo.OCk,ohsYcYiĿdq!؀^ țQ{u23F9)Ӈ'e3s9y$y>4t !50vD1ZyhFX"NuYsbp E4M9]v7KU,*0H8XE&;=ivE6Vyw3)c)hb¥a$Aj 0^Z]A!; ">I1nג&])U0D.Rǜak؇q E Nj)$lZ]٥>xt^c[n?R/1 IBׅ0Fs-mw%u(wp"X $HuR>1k.dj.CfUB-T$B"բQ5֔O8Y}݈Il=W<Uk)ӂ\EmHS)h :,0#R)Di*X*8@"8 HyonjPbp F*Njծb37茴pAbC*?bH  %sfB?X.xD?p7X`5yV4SRHⱑe*04+@'z7HrUU;$傄Db(NbFuIYzu?#E(D;^P z.*,bfEbM_mXLd%TFv~pD!)`vbFp&bK*ZE*X)2tBPS :"yO,9* @Ș3Q3vj4.>"MJmmEܒDh"F"X["> |OilA qv (=4#JԹ߿kڇl(Wq$C̚t:) md&4I|9KTzY #e =֡#tb=!P8J%N[`**JN# ! ﶯQ@ 9Eq62 Hp\uf͜?N-<߫D}Q>0MĠ"t}ɥyD68S,ga+\gb1n &ics#iZx<}ɸDH)6"\H.ҏ OS j#3@cCXQZ;,z- xbVKƼDg"R= # an:d>3:Pź7nF=/ۏev`?Xh3!oLfiz<2[Ӆ;&Y%9K+C^^WuM.aȳtU0D E"`"!6^dž!ntD*R{&@Qy #K8wKa)$a0ZӘy5.$kTF\l4'KVܫ*;,v"O=]gS0Og-7fۖo [y)LMGXc!EBàsdcN4yNJ?'F%T<ϲ)d_9 4_Q"cu8N8KTe Ц*x=]ewW/{;udhׅ'M |`#!"ij,@xܒQ5Š\3G֗nԄِʈ8B8ʊU=O5jy؝g}WvW9&@@AuhinG^R 8VC D3Q0KcH#N 'O07b(0bCo2[Rm~D4K!a>Ѝ?~ֻY1RHF#M.P *pw01 sO]@@TT‚Tպ[fr5Ef29b/@շ\1Q_+-;:L,ɪm{)^8)%)OJ|C:y{#&`5" ذ#U"uS#R(Dlh$ء)FlM@jN%r-UAfP6cIHᗀN8:pˈoM(v41KltV4B+oك!fnؒG凈$.#Vf6BEA@JL;ҺJIShsO/(%ʄKK.'γAl023xCBN5 HZ#5HRm$âc[QSA(¶*$@/kga&*bVՔqJ>B?miCPD.RKOAQY #8N8O bdR>'YщyJIq8F8xk^hvaW|5Bs^3TLs4Bz,G'" PYQp}j!ODjڇBRcw#eU:aL)BZO!/jLH*caݕ?uV&UCrϝtE,+ $g%v4{VlgEyx4 )Hx8# fzeHe weN"$ bvĿ>  e @t޶Vk8I %X͆Y#fmr k,]| {L @!P$` ,8^w}3:N f1p|T.zˋFrm$%`.z:\  !1S(ZMKȞ]|&-%0A Wh"ra5@CŬDOTk,p8b @M0 0vn-F l9 _L̀bŋ6?P佣@0Mm%=kAI n8pN#"JH722;خo9ɮ0emW"N"I$b)F_Q͗@@MT-5H0ZoҪ۩tǻ i,#)%b37{HډsE/wR[#XQ_$Y\)RJRX׺`pPt| /h[z8%֚_@}]K8) 3D"#|AH0-+5z.`9DoA7 "8 tk0hbpʫf)Ç~z[Yk(Mt%kR.TeZF-5J 9uhÖ)VnsYw*)PLnnw<=OLDdb0">CL Ycy 9IGe(L{K3$HI"|˜C<] 8e8߭KcJ$:*rqe @ ZH@6hrL:':84G;g!(a# Tʎ/LlwչS*sԧIˌvVi2E!uyVs5ԗwCsIPi뼦ҠlwU jIi@AJʊT)8C{ώP2KFM8XWPE`Q#6.!=YXpytr>Z>@N}yLO%3eՔ ',^ʧCÅCK(r5.e8j\u4D?m< BOYxd3'nlDqG):-K>HKL9nL̲ªԔ@a +3,lQͼ!"qQk!Z z.:z/w3biU(! \p" IuKa&$5cbqix"qdC$Ng"YEy$jz-EHJDcܾAE5pmUfLH3%lzD] Wr\:Lt@SfߊqUDL.kiG=Xi ̓tX~w@k~*CQc1}FDeGV`CX gG׀bdc)*s_tq7ɂ }S ,yП?U5֋/-uݝSP"jfY Qd,=|'Lʪp4U^ͼD}cfS\Y1!!m-iΧt1MS g" Ot'}"j9:8 Y[fHc{рgA&Tu*ԋEmbm;I mLL0R۷m[LvKՏTRܭZr ZJJ-WJKv~xʵ֦V>r4c?[*UޖoN!$yr &=9~T% v7o}O6s$LhjrnU$5J~72XߠDJJ6Z,"/\TD[4Xel Uk0݋"s SkH}E%FVi7PA]ijb֭SD q3m$:5 gxJ%H]ZĹ]}[nWۇǢeI':-e{#xs$ z u7bD"dhPN㌚%S v^f4D %EeZ~ f 6cetdt:NeD'GXi|FÈ# [1:b47yJmE3 ,Ϟ+D\ e( ) ؠs u,DPj3#!uQ!C,ɃAY ]'fTB7f }es>Yu FD홞D:CӄfR`Asݒ3dhM 4%JZ@u]!SA&FMx * ' *ص[HؗmYC\s Dwt-P4f޻cxqPN"ƚQGqDGdTDo<1x`uڥqrR`C >#D'L:RC@Aby"> U$Ibp8]q1bQnY ])bZEPU TN(d&r ƌ2p"ATyt]ObqM: [HC؊&20dnM&~,vr6392=!#o~^N<ܟ$)mҩKwX;ɋhO1[)AEX,/sZa+,nN@S94X~VZCX΢&UC1H G8{OAJ==䊌`|L:DgK1BRt }!=kKԺbbn,nyʶXG`DkJD8Wy102"8 M& _O@5)[H`Bpk Hb ++`)=U$Af'32啥Aj \,U,, IJ"*w[mNH%v 9bB6.ֻ4j we*Ϊ-Us$[d q"<nĻo`D(0"ґ."` f&/!$+F ]3tR@+% >Q*5 We3qG gv+Vb8 -C |y93}krQgUCIFz)PiDLAE{ Dc|Bnk($ i8 "s ,VV3L m$hT*4Rs"Ru I%t'5Saj*첺mR6VN62Bʲ5gKO+]/v_%]ɐ?"s`ѢN@,] H&O3]t%i9!e8(̱UAq|h1 =V K UE~apŗ&Fts"6h%jOEEf|+ '`%dy D)ݫ~b.]!I+3W+0;hg~xse$,CC69`@CwX  gnRYE֪ywD*@(Xk;7 # tcN!(3BH+XIgu+[d[ ߽jKRRb5 p%RShDp (o5,pZb6RyI88-~r4tA.*MZ/jXƼ7K !#w5~j]n9& ) HpӮw瘓'ŁR5KeP]k%ED ʋZJ_j:8,&, ]sS1I j*TT.Ve PRj3_ !PV홭dݎ2DTNy0\9c#. _c$H  mP{@I2i{<# P^cM5 Q.&mQ'3z4r2(Z7\\QiAR͉̞6~})k %!IThO<+?0.V#[yl .8]ELaM_c 9)cҲ6mHyb"Lk{:aP~yU)I_K e9deʛ`: ^-GF(o;&FkbbiT`X8sb?'DY:Xq'C!AOtHf&us+o=޾G AaM9O=D@D~b.+6" g0 or?mj2Fok]m@),4\ԴUl0&5j C#}WqV9li! ˙3[zrU۔W/Vng.)$i&/!`zQ Mv;(hy,[N6jq'gq' +`d wRْkv,krƊx~Vi%"Pt3Kܞ_{OXweѴ N IU5UP(ALr2 $=K'gJJDBLbkElOӝR.Y3,o_HFj>B賌vn^Nͷvmeº@ݤvA$vU[aMn$ܺR˙+8I}֪.Gbe +A̞JqgdQ*~,C6M˯6;υtuWD,0^necH |U9W"s0pؒ `qbW藑hׁnGK|m4Ң؈L]70|:KƎgy&^d(*9o*{$*D(E޽ڝ#f,,IBp.pÀ X dXaR^<TA\"A~"U!H26Xa5%&ϒzQi$d^c3{$#ddRUU6LIe7O;o霧qa\? Ia}"7{Bp+AAFeIIjAU$HZiTUxP ZikD0XaM(8 S9Ibs Ν+Vd+beU~*=g݁X`e{ʭ`a,B,,ٷvM$*ګu߲^KRvR+f~]ʩw3zGj3[Pn 1 4.8_Pt0 "1$ȆD)Ie@aU^Vv} )c'A@@KH"hB4#fl{n# =7j -&]³ZxsxX>OHD Ȫk=q Ji?[f.dUi/z`RZYueL(f2iUoknB Pbm'.a+ϲu0b@)mmfYEjN'ȴE0_ rD'WnaYHt )g13k0Mo-ד#9GtU{V.\Qe^SzR ]$yΊCz,{ D#ͧF{y}!g72( )CSYő $.@[Fj&Ӎ8gB7Lv:*S$N QǜF0 kj3]#1Vr~2(wlCНZgdRkZ]N4I@zhK7/w%5c*(UE ZP \$uIvm0҂aiVH'+rN7 C~z qD4D D'k 10< #فU|@"H/fp7O]@h/.! v]0Q/xUEQ1 /kl[^K00+q$gDj:LzTCRI U4BܸZ<S! kg"~q[l~wOҍo~ܕ",!<.xaрWcXy# sw:xQya+vm)DЮa'=BO~%TZ%.ud1+: iLxC&3fm=$;aw?fG'$ ~Dce"q6b $w$k0"dӰōv37[,EaW!-sU*5T:h<ٓil3{[zϊNbJVDhU2)XBLRȌ]\.PVu"bm/=mVhjɚ@̘! )'! ,,2:=]-?Be3B+\lDl=*sU"F(T=D B?GJNBiΫwH%@ Hc,Zf#% 5VD='.VF1Ń* ]ae${;&0D9I%KXٮw]+/U% j':'e[Jm:Uo$Ɣ+!APsZxD2ePf\˦)H<C&ߦaI}=`-J@= wԳjњPƊvPh88CC'ԛHPr#qg$<Kf290R eA\.2*&>|fIxAأٽ7]!]hTVU9S@DƆٳ9N4e?-4&|򉡏Y'̎ hM~B3R[vRQM2Dh*Xy0;(#> t]abdYU}Ge.zjɛWlȬ5sL[eZ2C4H솭o 0Wx}i@(W jhVy#Ԟ 0֕@]^mOQ].Q - YhET0QCFp0R4J$ڻN:G9t>y<${\:"Xj<'ç\2es"M݁j{@/cyxiV(8(/uEi[D5M -9b 2Tk4ebXDGVؒҠ/VDI$\$t6guqP8p%{h6c|jh{U`m>D߀ns 2"7#(#> Q0eAJa̔ǜ. d.";QL$an 5Rf l?LH*7&`Zk tt?!6o5 b[j.TaWSʹ?/=MshB͙W0UTi4"g5 Pՙ8;XcQ?a:#&@{/jYwg8!h2ľVʾn[@ ÈOwd#rF(pMM|Q8JduZV ĝ,g  8K )ëGC:Ux?zJzKK$T.\l@5VrsiTEB U1"M $œa<֖G r);Ab D)@Qi#>J;nB!Ѣ%7t)#m<"_&xaR.F2, :%⻘n 1;r`lG ]պH0h=V`pnԍY& $n,Y)4:hЮ@%I$v%BA4 Dq' #ye*fEgr5\g]~:ng1-[?=4`THZq(3~Z]['nf^ńAc`WB$,5ZAEC!-TgVZ2R#|DF(jE'q%)66)K?M X\8p+S.($F8) F (?.$D!Nk,P^K( #JH1$l[43G\ߤ觜,Uio1XJj+6g@U]UY BXS]dX^U`Yj NkItC|.&$ *7WOhq/c;+=Qwo]酂;Zʜ!>,(Փ2Ut$C0bz:QFב+t&HZ}+OƵc(h:YA@AaqSL=VŠڒ^i59t$ϥ땧RȻb&9r͝B#f%[Wr?+ͦv(=g-r^c)AVt896D-}`X'lV[7$8!# `nfxgwwwfR" wZy[*vXy #H\%HJepdԼ fZ/3#㌃e~"3sBiRĞS7ȪVU(eQ>p9WF9͜ݝVxrB5OxLjm~w-O1=1W_}_{dSAITEDHbX8A- cÚiFH_#/"8!PȂdS 蠶U@Ad(c:((`MM&@L8Ul8hG@)#" ԋҒ"a(LU]vb fJMD`Mi)I53k K?-33<22*,@ٙsGZ"(UaF o&%C]E"d(+rB jQ"FTzDn`F y9!*RϏbTݒn#ƁTPa$e ;%m.=/ۿҺ"4X#GH%2pxF̲`t $,@wE\SwBS.T{ظ-Z^ ǵ΍gpC1~ma\8t'(P=;iVU,H"QE:Id# b`n:%ZRAwLH8'Ȩ*\@m cS"m(Qlw DlPO*LG%MI0ᵯ`3 Nb즷8kj$BP)$kҁML !Th􌚈X40H6DjhdL֝b`Q; ɢyPF8«hL # ݮ_B"J@Nn c㟙 'AT=NFu! ;+!Qn$W_ܟ8¨>HI7£C(*f!#h~&p  5 6sgЁHICJ#^kks5M7wȹZdB9 K@N X OZ&!ަ !rq U$D#%b W h|KXJ5b0p^ib! s6eD/Xna`J$ؼ tU9Jb q` BՠN{O>''ڗRB{4kW$GQ (K5rۻ.Fm;{ζVX_:h P2j~O\Aȸʬ5^=щ687~2Q34D{Pb6VpyD#e@FqڙBMP;]3Vl ]19\/rc7m[LTܖspi19*d^GiDv} і#VfWt-Զc":U>TC+]%[#ٔfVIiեGUnb-o>xrh-G Lm ;D%=1 eW30[áRymү<%y^9NI_\w.lFwtHԺZ,,*[,}y$T[;r澆 /%lے.wA//8bC*XpQe2/o{ea>%CY%0\zR1)[~QʾĐʹ\/Nut*1Bcgf^A~gzF ybPAxPqdR +KdvJWpW3z*T&cuŦbuu˄mP@%(~֏uf!%ZZUcņ4UV]d+m5H=1,mǠ{^rAϠ%bɺ7?8m5# *: j  T\ÀLI1#BD+m=  ic/0ZKM q/RRXNޏ#]&]eFp4{f>R#fYU>41ͥ2H/pi MI&Mi{Kc2SfT76 t)&Knm5`$FX\' ̮5H@/ H&"!lĄ@|g|ЙI֥3|gifhOE2׳ַ/A QyUV\ ;v缇VR[ʡv4+B)n$V|*`q\nCI^hf1&A_;2ܶIXf ;nD4=`7@ U]"'0A}O :kPݵ;[7Gw^#%w\2jw tdHU+,kML\c#,f"H_B[Tk/ó~f<42⇔$[%YX?N4Ϻ2F:]F`įXHC}fdpiW[} 0w7UW!]ŲZlL甤vrRD1oEk+<㸼#J ti "tg6%uO¤0ҫ# ^t ⚳- v5.ҷ-BUR d%DO6Մ?&&NXb(?  &LŮ"$5I%T՝t돀jHPXZ3]DĊMk19N7d+h`:i2FC<ںaHV;t8gk}_7"8-Ie8H=T odiNNлԻ.v~^G'{Ͽ.XM@"SkK% 6Q!~ 3DWi&Vk B4`# K YQQt*<{Q7k0҃_-M%0Y)hy+S^81(yhbmDgŴ85^܅"MЦ7_uJJz-1X\,Du+74]o"]ILfkKO%0d4ܳWPEQqaxK<ҫ"(13?{${p|iq%&ھ?~~!VS{hZM3BR%a Y+iHnDW.B?9T༟8"?O@-DĢ /h L ɄX0\BMDn-SniE m0 -w ZPOF^%KK #/3ojߚ㦯foKp֦I̿8 lfHr0 -\^pLjRҷR1筮$f;av4NcM|ÏdJ?Fڊ苛#i$ e51MZH\H<%D[+3W~s6q+7T")Q -l)l 'Wo^,gjQ1=v{+EXUHD'm/WkD=H#N ]0i IƒeYi0s-3;i`aC#OA/j()f ]͋"MO^VY;('kP&e+1 |v+L h<$S)̖+X==gވeAΧ)Hҟ` b8| Yނ ^Z4Xa;j[[eM5w7&am/ 9ZB܈+h&LifU8H*,GOE:'[*K87bv{F~0IP*jSpq"Q )d&YIAQbN PW LDGc3LB#N xY0Ib; OuMQ0^K%w!IwY xזNZ ݦۃ oōꄙ!X-g& JH[ECPX0lNI{ c6ԻX?'Hut_GGyXrIcd5ݶ}#+P,(4^HxP4@_Tf{* Iu[Ea;GK-u_#o* ([s=KR1xyzP_W곯H9JgנYTJ8 & 'l}#R**Uz ؑ4D9e]|ͧ P (Dmr3}< 3 (S# hhD$GODRjiNJg>(-އWzU?0s"b4"C!,Kّ `p.uy>mtrVhP+rtB#o/8[Z߯_&=PД6:rS&&xKbm)( D"[7[}UD_`/ Ň1%fVP9!HQArT(8|b:2qK5a+*<0˷[X~]z_IPYZS2jK/~2m_Pം8T*224LmcQ_dRDJZnc I|mb'0+C+m,JfJ&<"xf!9R7NWFH5gmnLX.,Rۢ n H $nHm$ ib1Ms$ EeD?I851{c$9iQʩ>:p y#,`yk|XYM[ SXǢPSIk2_-%?~a+K*rEMg}v߭6(UXFu9w9g۹Ʊ%G0YYQUFUPGb% 0!+8Rw%PUaˆج$ģ E3B cPP9H;DKSk PYdaa 0N$${:P:BǢr2aeṚ[I$SR"Ll@42BLN ~Q%r3~$Q)3JdB67ۮUsR(A[}Pi`XsF`2S ЩL)H>| L{{n.1u3M;>#9D;TNeM W7"0 !m(KE É}4Ⱥ잽UM]mOEYID-4Rz;^Ӌ8Eb)>F:M!D-Vna`T#huQ\ "0wj<ҽX&&AbᎵ>*6Lg_";"{PLܣG4~z\z.Ƚt4>a"rrb"y `aqPJP/Xi|BD y$pt2R%N'H9/W/*πĆhj@*R+Zs 9}y@*yGVt8B,>K4uK1*i^"`MQٰ)_R1AC mĿb,=Zk[U &mf9!F2=ZDyrHtt=!1Qd֧l?/ǓD(/D&bX;#L wO$Hb$da7T9+J:&PPkOel}pV+,kb%U"ܬ}IE=M[%@q+RR{(s8#jE5_O?'rgsW" c\qNWH(c Q4]\3?>lQwo0:h*(cF.@ Ǔ20҈ (-yjrZJJ&}q zѦj@1EKIM&"]9 Rΐ9dpBWpc 8y?2"[]fK$#‹U^UTͶ-R((?[ &sʵ2گ D>t[ȣ/A"#. OW$kb^HwWkT(Z\˪F -C =`*5Q&Y-I@g$`ORd^٫uO˿~e_a,%OUa MYAIFH*wV. Гkr({mmߵ+BօDk oiJ-q`β1S[J;a$I3^ &'$>S>|c1VN5%;mnvDvY FVt,NePd"4R U7lhRT_BxQ{b;m.߷5B cНw3{뮵M1EHm 8' %3)Tt2nxB,DF+?(%O[}2D5[`V%jf8jZ jŘfw,<Նʢ̫ENߓ[l!1Ee﵂Gh] lHޔ0.)Q@ {l8!oBQ˫st۳u``m977e+$X#Gc;DUk|ӡʤ)D7c+ok/Q՘Cjn#E4-d~.V!/H3(qKl:bP[ݽܬ)Dπ`-$`;  dYm"N$5Wm}YVt{Uƫm:.;E> eNUĊpicvXpQOH3tͪt 8I*ym0ɷ6{mۙ0x%ʖ9:"XQ6]˄(b"SqrM+>ǖk [# k݁vjUEIfIs)Ӫ6X#a( RBY[Yx*;wIxS?fѯzT@( Gu/JHE,&Syp(QG4zBBi8E+T")VrfPM#&upiD#\@Mh " LWok,0U.] + "iKwQLP$μqg@QD>1Qm.'NkжmS PCb̀$8G-qV DV_)p:"8 ]/ǤeA!qƤJV !\Qk_7+W E7ZmM@}DcP:}G˵ 5ȡ[v9حM E1%oe!`iY/^erNgN|w+VF߼o& *q7mF a]Ջ"1,0ۑ.Ea.G[f.& clʂأ2>mX;Ip[a?7m[CSX^~iN\QīJ|`D'eT+H)"70ءb(ĆX€V <7Q]N VaGAMd?q XxM|,"b*Qv.B3AnaFvB  kC H4 [#X!!^V/"r'eRvVH1cQTfIVA!!kOj 5yZ8fR80Q"h׏VPʬ(usKy(ػsk|4vl6ؑm&1%TTuf7nӻ??OrKSdC%g=$@= iA'Qȏ%tIdH[cj@~{x0LE@E}dg['I32b)tWVrw_WȮڠ ,7ףN{`KenA DؒEH0+VϽޯfwdHi" AX?")2gVЈnF ms; '`dbzd|"၎L1\`gd㱁Ş`5848XTM%#B|2HZx롳֏K}};g(S_G%z}/O[9[$/x/"b%c,-0 G(V-c dJ p*` - /0c@$( JAa6X"E)R#IVF3J:]]SiDX򆞵Qm[~[Z(3oոDvxE Gb(%^O-8cf.ۆ-RS'H 6cRjial0Djd/`۝}VCf^LG̒Ԋ$]fش2- ~YmcJ[um5{^WLAME3.99.5ExvdMkms]  e:ᙪ7bL2k=(:[)|=% {0MFVu&!LR{N9з:2kGdŀp*`<" +m$0zR{E7mlF%:`r KY$E?.3Szn'V`R. *AJ B |k$ 0)wp _oZˤ;?9\B= ގr[`}șz/PXA4TqKe!le+)Q1GʒYv{GQ>/٦LAME3.99.5;}ѷDC[ ~#OEvNZm<l^'s+)2!w,j,; I.vi1b>`|>eO1ӌJrky4Z.BIBChCm*@K \\ d%y@$` ")$Ԉ$t IY4n͝EH]YDKeI0&Mϫ16U="_D>]^n7R,ڍaLjK:ˇuYF혇(7Ȝw疓٨)JQ:0cJFIR j؇-d bGC 09(" +o%4-_ջYE R1nݫ6weuKZHI ](sfͅPԃ"NW"WHxv| mA%ESt4R+#0y!J+v\rzr}-Ό߇a'GtJ3<1Szn&V#z6[lF˗L RS8U5E) RȅY7Hè\1Ty9x Je'O< ̼bgX8hs1 wʹiN h@$HzƦŶ9dk"<(% His^QJrdcGC 0-M" أ+0iȸ$:ӡzed%epH3a*CS6 8~1l~uXkT鄖zFz1Pڕ<׍MŽrNS? *S?fHH]kHd\6&kQ& yڱ$qKbUa|dZ[ӟ=mgJ87\:rܶ[pyUFqIg?l'mxm-h {\hHV_12UAce&31+Zʩ3gjR ?:[G*0e-[jPTT+gRގ]ȍ42bmJw޺䉢qe%tʴ?4HRVHq"i7ٸr9΂I쩫Ds8YR*^˱==CE"~µ 1))"DBpUpz:d GDcC 0xa }'le0J49#FE@ @G / KMlHt @xR{FS!QHD*CAeRSNs]ҷ#H(Hu$,[(8Uk  iEF 0OiOs(h!+vn]I;$Q(3Sg#WUXT1;KCJ xEA4 ,̔HZLaD+_%V%fx:!4 2-NY2(QQy%#LҦd"LyũVZ%V=Cg>[:t혃?1Hj5C[Kq'K.(4lL"\6h( U0D`hifMa!a`+4Z;'Z@ӥaF M,OMazjrӘaӈ-}I"kH%()ANqFnYKۭ'VM[Ŭ6+ d/=KHPM Kj6[:!gwϜ ѐܑŜh^tK PەD@?gXgrΟUXAO]IF$rNzV0!~1{;XXtJԒjVhIJд,J$M"K /^TB G;Y#OU#$ )1 U$AH-_ʵCJ3`9Ro&Xr-D5ALJz{+DTG.Toh\\dЎ.#rȶ :1XkT2mp+ѡ"Ba"[RPf5GFjr@PbFct2.PԊ)WgVɾWZ&E#4/ @h(J/%QN*רe fQ-vYx嵍-h$5OPwtHRÕ;̼8__|P`GG#-Y#<5mşYD~J`aW&YL0.  vIxe4$vM^ogU{=)?IJ6\=v 11SoD!e2)i)_ S["ǦjKߓ28`t")>;iyL%[+9j:YqB*DNAaX$L` Y T ce O*cM PXIJɖ?tGa}-OWu΢a8({d@Xr9 @Ĝ`ia`` Hp}B%1[;C0xV41a  YeJ uob):mݘFg%-+(7DA؎M|5>zB[Rr~dWt۟J[v:~gtH–D$CQAED  PHlܞc!}t4 j 4LEZQK6T*x:f5REsmWUnދ}9QcRd^7J!ˣƆ6P Re\)0N]Ry&"DOHaZi]=#j ql p! 9Q 33oήomZ;.E1vhݾfQ6F7aBGԅ4MH:)L -OkgqU$鞴 i.4Z/SDMscj}\V(G RqIN v5+2j{e^e )dJ2~}>hٺ 붨y)ؠކ2Z,FM' `Tڠ`lcg4Jx?V+,u[5\\\&~ER ϥˬ3֖,{oB*ZV՝9 6`@h w8|<ٰwuD`AaPb\=#> Ezn%t02 %v7c[74`Vi!yc8eS)0xT~ufgyzMRF\6}2Dj08agnk J6qO$| n_)Ugw_ۛ$FWH7uC9{ n=#՗!:Sz1|9KC ^2R28JB_>AR]gLlӸBЀt (t+IJ4VJt+WZ%5!%%;[z\.rC~s,(D9۩hIű"eȑD9#$gn%uRe'M^tYC{: 9f DSP!pOI<0>`I4Ęp2nhx^TNŊN ۽i B.\ I6Ķ4ݴ' Ek0%b&3eѝq%k4ykܦm@"GIa&9{-.bدmo]UH)_TEkM ,Q$TV@\J@fF2YvK^}/m 8IҥvmI)^Z1 d91duĠ/p!i:wޙ(;7 }LX7>m cF0*"zZ͛53B5pff햧̂M4zI$ّgJMAH"*Y@;E6GD66=,Ǧ| ԵPAMgЂQrc<%8D/> H#_\Ƣ DaF&J=45 vbq \\y5  _PUj5^gNpT\ާND &Q:9kj! ymeNuq~S˛ezߤiƒ n8"$byL,+q`ٌYR[e53( 6Y7X)4W'2cxWs+JM5ʪxux1m#X\ Il)nos󟺎sazaUuNI} 9Ӥ &7Ƙ' 8) ̙PPDnD!Kim=#80`=p(D4 x3<޻BךNs>;߮(wI-VUm5>W:{enbLzQH;֪[$E.n1Vfv :ԭ+a0d%3u4B5iKS {Z\d1:D}p?M_[C-XΡHd3R ֜].sдi 4L gziF%v޴j\baxƘ{^&]zu5ݫ[İ %, rl,4 a_wL (Ik|cd7 bꪊRr箆f8 ǫF 1zuIV# =04xs0y9KǞZX0ԅRT2`L]fO .M>a~D!j i>$ iAp! 4r}u{;Yv#*3VPhfS0$aY36"GYj tD$;|,2?>0xi?H2;dUTix}o[^#+JXɀ \*=mrNPQeDAtl g@lHQjvcC]51)E~Uνh F]YbOڞ jZkJDJ,'=5Y4>a:>=QFE0Ku"JUZ߯KG8c"SM0 5!q",a5ӻ DE#pSJ?a;8 `g 4@ⲔTc>{MMqTRP .|ACu.x( >>OFx]((B%Uy49S2"L -ҍf[4?-^u!_J?Ejb"r ZiR^2zKhK2d BLVNehɥ !{ $@| HٳtNa=… 8hIN=iU@D H 'QwԳͩ)悩YwĤsQ`8ۖ$S`+KPDD`!_zh} +@S<NPVSt'Jn 2r?ǸB X(lA6m(#7bݿ@Lqϵ!V@ͫWr6Fo*3!l8}O,e`c1~4o}zPNLrB:\mk$Fp's\z^k?͉ MWw㚔сȎIv*+] TkW| Z&8v " .X\1kP52h$U9~q:mxDG`28G.y+M EZXpTl]{- A,O Aa`I`DԀD!bg-<KG"ǝiXIV dc8&6V튔qV ?ſtlIsuWB^Qس̡!D q7u-)d_T 0ړ2`ѩFEM .LU*=jGGUuUBR@)bZn\fh7%z+̫*S+„aΆWDD(!`h iNoKznt򊖪HC C ^"xmWj! _g=@Hp ).: DM9IS"r=Y=/2[b8v`: aȺ8X> ythΦTVty0ЁLqT1!Qηu$4@kH'Fʤ)XXO4ë/)^D A]5ZYWx$U}[N2dRY3dzmuU<၈Z1FW<#d{u2xn`. DE`!^۝3K%b<fI~nt_UL6r~gFXa4-|n`5 ]~ɻ@8 \H<#Rn.,ֈ8buj8tDX9D`#eJ si>SɏjwiQ[=ꍨ4;DVmhLFETQB LJd2Y N4jL T%k"ڹ^3͊AZ@dFJA(y󏲁?)G^]5E6᫷lVN.B,<+6%_R#a;rrҗYSRj\n{ƣ2JxtHBwtL>VU#-$>rDra}ja%nGk*0|p/t6-̼zj/_;<0K & A &5,pa?(A 0AEeV9Ў"@e@8t <>iI;-[{i:ۖq{\-ְU@K%x!7~2rpgoa{7r5Xx4>I Re *k*KaB)I$+%je~Z|NeC k;"-WamjԮ`~D/ J&T߬o.H&@qD!QË/aJ@] `ek&ƌ]/QE֊Ni,jЋiK)EM7e"|uuBY=2> a ri2G3^5` $$B5ƎXj5g[7*$C 7)%i22u>K1.ՍDZ0R'GfzfRz; \a~HthNO:4M3)Es<<*(D N\ϯDpE|'%(zg0D<1mRir$L:GoJ[jԦ%Aj|ss^&~Hw'`FlZ2{|'A_$pipDP:)5vP3QB~b00%e=Ks%73n2 I(J%_SP|uO/YfD@I?.&w_BHmJ#mk}*'{AYe{20)FGᯫQt(MImF~~SR52D}SDha_$ja ( vk ~&'Mk8٢XsZH}!Q%BI PiDsCuj61H:ҒEIec.JpLmi+_k L_vF]v*0ɂA(tFBBpQYۥӚq+F(qAWcv=f8yWt#?̎vaeb/χg/YtO28&<w;`</,6 n9Ud \q}ۡҽKxH 0iXhbMD8`# ^e[geidǦ"mc-8DLJ>)omz狅<jwX֝HHIBU4[{L*z0HrÔp'28H"Ӕ,3sf$S%aVfXA 5SEZE:re6[LOE|TVT>gP Fg&SiеeLI#+#r3 j_+/׿Db"bQb%i= т]`VxIzs EK&TE R{DБr&t1w$HLMLY G9Rއ;&Bz$)E(CQ_f*ywmsT4FB  T5  K&1Kqu2/g3ݞ>/"@0hSB.mpyLϝ^dJ 4Z>cӬClG$5Uq)es'SO=<3?{36H3Rkn!qdpbO>iŢ iI"y!.J (3qV1zZ jZUDE`!PC:=,Kec 8ݳ5KmaCM6 8pt\LSW0>@„˃-6s t ᛺:4J jLLe]m^$CĖa 5%N!kImi Vҫtڪݡm^/&M]O rڮ2c3\d1q(M8ܰ#n1S5 Ř*C|FZҚ7>P5sɬcRl; HJL1" ͋ēXK G dUO+h<ۂߎVZPueΧ _TҮk]DXdDJ{)fyWuMu^ߒIW~/\!oeT/DE!PTjm=@mE*}li8 PȑYث,," vs$ybעV/P}e@{'D 1_ާJLrx\L>!؀*M콽O9e׋!=BߏX5P7LKvG4K_a{#v",Y@01?I̛fTQ`C*ݿYڬW3M+:diZ@۳Nq O0N55QhE+_=)Bo'",0+|ƷEs~/?khn]e"⊔>{XxZcplˉXxЅ ;7tGS B sDh9A!rgJa?G@c!if5UJO5!Ϩj: JApD hevr?e5d)i7mM҂B6j* jd"r2,c}7\ɵ—iBOU0ND6Nr)"yzh&a4),dҔٌ+6io|YAɬۍsU޽o5_dB&vDf~VRuDSCH!rae#kZ(,~)Q"@@pTSF%$k /KF h9̜B iNd,{qCO^i)$Xz='pX c_hl⨑Kjp%82Ԩa4x)Rl v8: DmEn rVOLJpϢZz7AMM_ڭSPX ƶP4wފ`!R3LwMDq6cAcLwʾ;#%EKTE4t#=q17U{`5|rqr2[EbԖr``xJ2'(kC"hw_vD`![&azx t$Nj) ң\#ÃQMy;oa_K `#H** jVmHG󣶈LF6CqLU֮ḫW a3F4ҹY 9Cb\ w8%6aeQ.^W-T$E(S_Sg9UGgЦ geBQ%狋؅1Bx?dJT(LTɁ [KmX:`2LXݖ/`D{BDab#U[_K$]Ɔa'HV'Mt el [~uKJD1M\ :8$*75 ^ɉeIʽk4UYhX[:_+.SC5ߕY’U-k.k-jϫ7iԗV TYQTQ A"J$ѬHtRT&\K"agQIf9(Rjlc4Z$B7գIրLIs$PRDGI3RGI:^BjJ9V 2LD2"'M1YmqJF"S H"62IцiF ϝ@F64m$ b!pFc h?E3D [F( .RDс@ h qQ1ş*28v,eBi?Tt=?q%bV[az:iu3Oï譢hxxNb*wbfjVgIx:CIU@*v2G,dĨp갥TG BKH*L]9ł$d%Ftj(9C"imڴ@'şDC¨!pNz=#@Bt6Ԏd![M4m$Rj1]J(IҺ}/0*+wDuge c$"mcWq%ӑrvuncњd\:PFFE)&'?YDbvrA#JX:ΪRM7m$][rad}1z'_ەMHf bt "J)IS 2(3oE9`N -U1VUL#iiU5c'B$$!;RId8`Y@!Zmyԑ!EF]hC̥C%Z %GM*SQG}_E 9WEȮF;S(Dh:j֥E (=bpGq>h﫫MZz/WRJ^t[UO"h}Ʀ Jd X6e˽WL`DBJX~a2 Dܪ29'-.p 6ּDeDHIj0dJG-) 0z?FΩN#]lk=aD B $'^ڇXT6A(N>|j-;kB:Ԟ $wk.f5D,E&צ]hQX [zzޚ?{˹ LґDTA z5!A`Pk% A޷8PuFTH;.^(*dA1bqDIcJFZf#IF36jUH0"u-RiÑRlIT\g`u bG x Kp 0;q>H}NP#rBuP9m,CDÀD`!F{=&8@88 e(t= $/qPgNO!1+Ss0'd"`` un,w~2U8E-*FEJrZ[2R+UG{a3hEw} 3 m = @)ГeD3hpJ 3 ' bZ`Gx.GL5 I4AG K:EJꅂR d# ]3=n)#`F)gďWpUqB)Y=`]P.`8EQK"B vƜ6Qc5"Bvсm%cdzHH g {D5!V#Za> )sz ܍2tN@90PÌumqB:jj[喒3&e[w;em,8M{!ׁ4E2:O-1|dKL?snjν$i@72v8CSqtG, *0,\`z"H)TQHҬfvRe%Z07䓷?b̾e2sj[ud$y$g6YlH{1AȊy׍0CAKlVAHla/%7;ݻ+.TC e^ՙ|qi$@rˣRֵid|{?M_vԕȱ_E~A%) IҒI[VcyٳԜQRsyU[NsvS?:Ƚz/g攼lnufr&^YRl4EkP R?[ZѼZ ʴ DpB穬s 8330`H3CsrXRf JZZp"GɤIՁ+%:[z-Rm6!*?#,3.[ ˲Q<{[p_!cڰA)e[EUEQQ"Cr (A:ŮOf}d\V]JnGL,[p;aX!_49n2{gCqO82""{!)X(2p4O f =3TqB=~tϽvjM3$g!"hyrW JEFrS,'%z1|X_/-0j)eO&6$MP]h+I 9!bP|XVAU[:R;Q X=BϱӰ!T*so4n*垜bcȚ| {+\eʋ8`pKM܂ez6l 1JpʈHILU/yQk2DV-<1} !~ >J]c8?W*޲!i]5$$F޷h6(dMBop;_,TА:H6֛˘b.]hn×4b0P%a;rI)Σ򇙜tA'Aaʄ3H0ɧ$2 E3:܍uS*C82NDo]𶻄 UVZxT OH?qB@(RVpD5S,x-{sSεcɗF0zlkc]MYtv&8-T 2D̏@LLW_O>W LUGS =7D/Hb] ="_[@ej= "Ked!O4}4M.B<~饉&Mp;li7L`9nT. A%!+Z4Al;8A2Hq,J4$ڊjg vĝR $le%QeK ئfe)diT{KA}2mD;qҕU4H?~w_K6Te tԎu%4yD9khj>f=F^?[#5(td0R#]F)&n#>TbA^y=G8BzLzϜaݰ܈[]/DH!p <.H|ai4EƧsG"}R(Ճ:BIV{ږ"iRY2+65ܷDA.H˅oPbՊr2׾?~#Y_yS>.U:iO97{turPчɒb#d*ֺ@c֤M:E !!.*h XH:3Jxl.AMHET=Q2oV0ZHQDBOCHa0\a au vI,4.(e:(}]I^QLnΊPGixf8$i"84tar&ǪZWSmYjkS="b)(<=l? !\^|8ˆ_1a>]c_n?\HK̊nn{ŒPd95FNqB7NbYi?226]Sdz5◫{LC7-nI[Q l""XItd?ǭRol`{ Ok<01] ġ+/ +UhTi_v-˪Ъ8y$2BAJ!AJY]Oi᤾OW5@GZ؃ se9`%HDgVF]&+lCe~OsOݏT/~,a u'cu)<ip"<.̉gX#+'a)O* D\CaX#+= \@r@`=VaUUPqabŬUjyʨ\4TZ88AjuSR74+skP޹F,8#Q"$nYQe B4\¦4"62J QC0UQ$ Q>єo+?mbYHҨGmuwӞyL6a…ht3fre\VG-~jYtrK{a[Vɚ;UeQ)\bSRW<2RQLQ9bN)!hL"G[d 4E Np.hɢ~<(|%SmXk5&ԩ2^DȁAN% ڏdN8d*?3sdoNde A\ga kPY<[ Ӓ^K2]Ea)7ڶ Pْ|QaHf*dH8g.Ik 6ģG KK#LG>`~0ޝ!KT2yԲ/ӿwl봜= fxU[qri@wcP,Uu0fJk3]/Աg.ԙ[T=oEVEQ,4e Dv e滑{fdzDG?ߵD WN `m(Ji La<p 7`Vmb*G[ORز€ ('M@֨ 40["qՀY[=WcY<[G! *T.Hb1sSm^H=|?[O马VCsBQZz~UE0"?N}34$ 6<֪4p u %!JLVJZ5iEXq29RNEٔQ RJʫZ,nsh;c^w!3$e/ dA%¶k2lbD&nwz$d}ʳDP<l ađ*`` D"\D`!^ma? A !zw)Tv5sݾkK癌c9/^@ۭNF@)GW-Rb̍^hM(?)CY+Jl';Mi.GХ,qR}*S#. h6ei-ֹ/xYDzk̥,CԯOf*$ a•G$XDym829<!]r$3 pqȻm&:i117_u)5橌(^{uT/Ñ %Bm?gc^Jcld0aრ;\šɐp @`pa w!ڥұ@pq.g{ ߹IQ0IIoG`A(H D@D/> y)D4Cab.cǃ!` DD `^h (A#'P0QO2AS&*-U#Muiq`? 8Ѳ9$`Xyp-wFbEU*I$hf_E ><jr] lz4DBA&,C܀Vs8=H$X%fiX:`&hro_yZ׿Z;Pb-Nk `9ZlX&8aZR $jٓP ?KVpV]b鑞3UֽKFZ }im/R5,kn Weh'j0|2(g E+eņD'!N(J<< G/ iݡV[JD K((I^0`I0Wu?)^)jQU*9@n\!eubqR2֣}R.%2ɪxEZ%2_a!)ywJA/5#AņoxO@a_rt sM,=y-ITUi7Y&8x~S],2u=>J-c{;f{Ug&E7p_90I\ADgz3OA[e o$vAvF}Ibc%b)MD3μ])M7Hej/}DPH!I;==%[@04I!:wA^aAI+shdQu?[7$ lLPc&zEsp("GV dUL (̙Y R>٢<8PkNR.PJK=, ]m[B\ ^E696T94 gX"'HT&СvŊ2,(:gb(/k0 Ȉ{:""ҟ0p+=ʥ4)jA׭IA@dLXer]!'0Yh$H0oe b}0!iI}(Rhsp1p)`sbF6Jұ6 H(ͦbUMThufVwmhÚH v\7~ #QF{]Bʮ5g8&k+cpHh8,T,)U>;QjK#Er"C >Tнp,vv4ře [! hDe`]%/m 8cC*5\J;ܷW?Wq2?X9TP2N' k&wPT˲ Va2}&JAi"ĐH4]qr3HA#HG-E^:(!*67- j1X@әB顃qYmeD,VUvچ Oć r+V哌IjGT`8ujFZ@{ s~`Mܴǁ KnԌxp a# 7Pv+8&$ۋNp!6EfX&lt֗~|:(9ӮD_p@N% j9 q 1!k0Di@q:Y0ܦqh\w)!*/7M/CT5eާoYc(*+KK)SSrS01@h H&i3η\ZbqE8o%: 3'7!ٰDЮ9nsR1)@*d:Y&ѥ:*Mi؀BJ%pB>4d8* D0hr ` "Lx(Q.PxAH9РI4/v:Hfyi,RZh,҉B'VɵQ{@ɭJESwJc~'˪ cJ Y][b+2.Lđv,d?Dg`If;M @) -4eZXm?_,k4)؛%MIKjpV,C!qك+Ҋ!=0(Ppp~xzQ+;j7J9,X YJo#(:, YaZDd:;KF'l<{@bW%1UHIi6QB8  պ ƌCfꢢg(+:m A %9k4F W K! &WS<[U 97o}1L3΅:ϐ!ȳ[;Hq ~ @@,3sz[ s8PWrTkP"SCi3Do!LEKo<ţp @+j &DWtS(CSLtT_XDtOkJC:˃H/$&J֥1Zϖ0H/p\7 p6+m}6%G{nӢ2`zI„O`QPS<v_U r9,=2z~j  k" 2#n$E,FT~>T$c^YLD{dtN6{HfT),Ù)FzQ8Ηf28W"P뙞]]W . ԃ,n0a*Bx\5J en,I+òDwDh!pdfKja/ !z (,`V扌3HMd+Z!޺txć^4V`NHV&UgM5<"fB\$ Lѱ+ڥ]0,LIU+*-bty6ֈBH G$*;I.(pCPCQFH4nl_W%^8"P`Gu\BTPBDk]?HUVi쎬UaN3 d'0ct0VFH[gTIb|'fsĖjn[+^S>L\1 Q*U@R?-9IƭX:@Ju mκxDZaX{:=%xWeqt FVdI]K`cu!E;zaZխ|>ۍ$#L)o  :/VI& iqUq[eZvoR|z];MZ. @o[$c .FNV!&#жUJPEѨ*'bŘ&hx$PTm 3}V64FQ#QaZ+]L†Ѳht؜x$EI ZiFɌѦ ٯ%E `3d+:2'1G"G6F>TDED_Ha"cg="S~)pfIlCXt C24#+܂_Ċ!7$K-FX5@Eʹ4PD-&JgL 5)mJ #-|0¥JPJB$rJL]<: 0u-KGmlt#*kfvYnPM{A/b*J>d.j)tj!wMÝR YRND{ʹwCFE$J#6C H)F4!s҃&IQ"2&YC 8)2U l x鬃 UdY2tpcKp}TukBcD@% IJmh>%5}eivHE10 U@xz=D՜qM/aDpz!(K*q(2u]DJ6\zmvr&lg` o> цRDmPfC )8>J=C%f^n0֍Q(NbmtXDq{FQt {ZUP"{X(**|RQKb&r(1lTu5qReNY-&-K4grDe[#v0jJ N3\Y|^aV_s78t Z@-nAh#U/MK4BYFUf<ʇ?ď\+YD< O`Z+/؁tQ< 00=/Y"+6}H7rçby)iP!sFhbRDt(Ev[MT.f-Nr8TP8ő`&a%m%oHdAX4tXx,SC_Xޅ(PHh09>g"!Fdf% hqpJ<⢃,M@G,hj1uU,a xS[`Nr2m05E?IrNj5ؕZLQ\y0@P:{h\@֪6 @P*E>&,K AeЧ};b?8qaEKnU[--y>y11l]ȩclF)?<異i+:ȲqK<1(M)nlloh^Օƪ"q aLGޣ| ] G"ݝG$HH :O<5՗pIPAȰɠFV"9$h` DREF@^ʹ<cu?`<`څPIjHyO+|QJZL4ؼ5LHz-.m8Gؔ*t, r/7kNn[$KmiHƷzn4!||N ԵA(ýhI1C";A]* ;GJ(, k Fk),8'-k~3'.*p%!rNsD";+G~6S;nj>c[S>3ɑeHTՍX=c2;Mc5VZio>k{Ҿ| SRȳt%"tGS/IOw(4C |D;KHa0Yoa.0a gt) ,ルm,z -[Z|>Phh.DA9 YrbL^P;^PJP0Yu+0FA\6ϟPϭӷ?خ#b  ^`:YlPDIS&:V|rmd%`E DZӊT"FV ZaQ& zuTۢ`Xyw@A%&_B2f=p DǖG$ ܪYđp9B BK:TDi;Kba'Y%_*}ZwPT%x۫ͨG4՟2lNI^xkgͥAHAOⶢ PұJD&!L*==%lc gjvG6>*-d phרd:KsC:)|3oCiUFDE8a)-^@Z'kfCS# !ə0檒4Lrl !oqY<,iWբ>D: qP9* ."HF4DSg *W?>\V.̡MU *'5H&Bpt Yn~g>i4O;:6%J*Nz-jzYV!rmh ML9%BFT.,=q'^.Hr6ڥXK,4t@+1' )2j-BM \+t-~[7aebHR5ܓ!gyqM7 &J5@3)"Btr+aˆֻ/wZh KYtexN;9+0BhؙOg#w9C/=NIU0M&Mi. V.*Dmbj9$ 8%b *EBX=,a(],4FdOf^ -Ȑ1*0bևgJZDrCH!pM9`hg+ 5hFG3%06&'j Q|LD-2ljgxznkB]UB+\0 u+7 $(Ӻ)oXV.H_H/_rvz$:[@@'JdI}1"4$#i5{*!P8bQf[\jfI]"gö=sO[?B&"*\s&9(d(E AkqE^ޭ(hxSvKu_2SZL t 3 M4#uAD (yQDvZ[nzbAfUm*>]Ƒ))Gła%j- 0.4,ڐEzD!LI|=#fg*pT$%eh|ǰV۬(DZ;O$YT+*WWk3XiST KISV.!ǀGPé,C2@5CXkxjXr...-{ޔQuDnJP ni_N3P1sN7'3Yhn`PBydVnIyA B,SDZIN,ΟuL*ϰWsUy$!HmI%g(;L:v b9l*ZV~GV6 .)vE`*@t;j-h.ULRᦅ\L1D`ԍ3qTduP5*&ϟ75LAME3.99.5UUUUUUUU!/ZT̄WqCُ0y8DEǿ!cݽ3iٿ.SW/ ϝ߿)[][nT@d % mbi"mJXW ŁV0HmYre{Y]DeC!Y,aJ{AzA_ 8_2*17DbfOʈ q$\snZu'2(N%y dYhaB`Y òKm+ "t8)GCB]"]Ts&4:%0]C(44CD ()ȄCq%4ņ A0;ζ4w [7R=qؕlzϻ6Xvyi͙;iGdv8{wt 4K4N4jרyq$L(|yVתa$b7CbD'M7`B#qc-19SKTC,o!HqbI!WHu'LIĒDH"GtA9Zl(DYD2ZDkbWyJ 5ɒԤ1&ǽS'LF;^dMCA2aX( #Jmv  b̤~s-b*Zր';,߱G5ZwL`r1 YI HP2…QŨe[>S9M~JSRL_Mx9rG4ǡ KCVUQ4Ƭ8D{0Df :/F$J*"BbQs/#>SlFbiJf`kV2 \,JbʾS >;靣; q шt O,vmfbE +]3ZSs|-7ϰeRk&_f[q_gLIe;G#/ybݞ͸dhv9X,MZ@B(Xd=#]iL'/oMKHMQn"L9Z‘AwqL} C&Uf$u!܇hiu?^h 2Po#[ЯW1W2&ˇݹLi›[r"XJΨpSjEIsP_d#BHaY; bJ@` b!3!トIW^Ȕ\NzlC:KnzEfdu{>&I33" >-:b WVidpm( ̫OoC sU"=x>IX`ĭN BA r >.0rM:4> "ʕhH3)~A۾Uk&/Eѽ_n~9decw*nW2&ճ1 P[r!< *fmO"f$0T5:N鬊MicnW`#quF/-_28nn5Ɍ* SHL+u"kTdDH!pOY #`JY!~ ;paж)HhPMHlޒ8Ug=\XZ-9|:bbӣU͉-A}+ ykY:k6wZVj8?eŦvy6X؂F68$ b`bNʖf" 1z՚n+g|̱2rA$ifJ5f.z{L em1S1.OhUKb1fiiD#QIL2'Cd!pCȉ#>4`bdsJ ŀȗ PT;{cn@QYdfmqT B1)8) ΔԕY'F{ je1]Ɍ[H!hyսjM^x(}_ZrUGEb: y8ԈiIhNaGrTRVgMidXf`k(j òJ?|5"(N-SbuD kN궊BUBI4Ig-5Eٰ]{tEC"2;||6>-(btd!4WuaN$HpzRt1z];T=uDf"z$1(#$y:yhET.Ҳ)XFtB4VNUCF}35l}Km[*R܍?Li&Vj]LLAME3.99.5@[11^6cV (pZXH <* uƱ~TKJ^}ú3/fG'v##HoKSxz8KdDhf2IH "Lmw!t03 5/^}]fyIR1 Z)ZZI N6J Px`*"F[ ʌ@ȉk%rq./bԭ3G!'Ƙ¬Dw0.WnfEnU_:+$I {JĄe4 jt1@>&(k/4t#j~tuS^{]cޱNVTojZGh2MĦ*נ  N29s!A>;Js"m񂆙e{ހ-ĕ(ÚL#3"Wd*Ө&ud$HA<#K Qj tJGUJ)2ͬjfh%[ʾə`2oPB bYiH ~"Tċ{ ly6z2 )=͡1<0QfʖK9v:ofmvb*E"hJO#kSTQ$IDC `"g؎AVf,(ffs)cf^D i 6dzeGzá\صo2T%]"-5DRigk, # E !xcd0Yը=Ld\イ\sg?yNݟI$i$RsIw;ɦP{8Q 9 {YSk!M8Յ%ly竣}x|;>K_1u3N"F/{y&bIGO!9A"nLMS7>"9n?ʳ;),3-q 8Q[ݕbv$銹Wr6誐VUTϵl$1HZq1$C[4& C:OxS &[C{>x fH_'3tH1Rx9qJ Cr53;NyМ4Jű|7[nƲ-5#"dIC`fTlbJ|kEa0ȧSl$9LzWuBR3u˨E eZZCvYMOYMPVxZJ [FrYQn❔᷹nzM?]r!{6! O!Rw XjX&> D + K#FcL#>ŵ7wbD)_ڎQ({*eoMc=p$%iZ\Are@p f)!G ;uweu*UTZ"Yv˒>-,o=59݁# *FJN$+cR@RRU X25d 0y==G9j1dUh\I# s !v [(`)f~3Eɫ3p*c&&J竞"6FT#+ݻZRZ`2&&Z0Ԍ̨m3V0#"Tk>`U_ñVܪCl}R3eƏq U#\|g}+"*4OI]Õm#~&X`,O-:*^E/^_׭{;wffffffffffffff~'@IQP5$;"U{oP#aP'l'ppø4:"af$BvRa@2%-.4 hHI,z D=A gmU8fs9L̅QH|ktM OI"d.2e!R[ :qD RPwEM!pEVl:y]%aۙ +yo'p~Eo-;Rggoa']qSdfF@9Q0c,,' \Y*љ`";c*H!HSYJR\u:p񱉡\4T(:S*-4I}n&,E%dEUkR֥)mm{67cmEjU $p\|3\|6,X]E0yRָ'Cˡz#PDSBG@ky-i i0dҥ3ǎdҁVhP`0q(!XHhZ71c,ض (#>y+@ $0,ΚNqlŰ.kԡqmv֊tUm!Z72ZvFNle¢7`rRnbJKMPcJG0<އ[bI ^!0 2`y 8xFЈߚ׊I$ fEL2/䡩`Nm;ձ mK?jXg@)Wkngg^d do`f阳gCSl@a,p>Xe%+$sEmZ>`Vc=w7Du(EP!pTL=&B !-\h (EeFAU&<$2&Ғa=]00,ɲ X:GXP(&o(ΡZVEQ$ʭ jRIrd~M(h ֙riއ$fyצ&^4b-,J|I]#UΡ$C Zl31bCXxrg㵰ń }k->׻:gIJ5G%F7te8=f奃4.Yu ͰLVWPG$+ }NN50!Fdy65d&r>X6(BAO#D`!pS<0b[G: &zEpnɶ'7SBII|5#;W@q FCq mf@XpBKY M5X*{PŒ-"EEc]E"T"F$KQ0)ͽo2d*ͤ0XA 3Q@2KVm?,+$i"r== s^-h}TJTVSr-eI#^ǭKz^Ji,R,r4%Biނl@N#.PqM=)+޾I`mh@-k I.I Uy5 $vŬeJHrַODZDP!pQY=& ie@e􌨌@ڊ=TyVhXB+0f s$).+~n$ǤbxgR$7K]L3-~B&H}_69Zԅ4Xڿ24@HhH*Y$)TWFJELhن *r6F Y !jX@(fm6PAH4VEF"^*J&Z-1A'+N(+B!Db&` *r7dK4pҮWbM'QT\A)҃lQVs "I6a$q2eEZ6`D!MJ|*Ǝ) ֿd@zx +۪hLxթ,6KffS*icV0x@o JS^ڹ53{ov7M{)yy 0zogw[uw,((2@7!6: ʶD-=VIlf#oJ޼6Џ9Y5G}M,zGLL j~`y.G~b)6jwKԿ А_WP8lWѵpD4B`h-ei$. uݣmH8z#M\ˉ:jG1-iT1 R-M_C}x0\ !>` BE'1c<>˦o A ̙Znt8ipk4(i*edWߘ$H ePެRHj|r \*6q)@ KLӆ B|BMcWEц^ ''7)==@c)V9[f=:';(iOɲ MҪQJZ 6RϐRpr2Uݥ,e֖٥ _*DE!UcaK `])嗌Ӊn01c0gfNG`[43P~3+uBZ!gؒҋ[vك[4T#K2xtL,iəV UV8aNBO:P.Ӥ#U!_]ﲝڵzLHj/$*N[ #Fi o:`#O9VXn괵Xܪ%t)9_5YsyE-`yŌC uV5)h4 P*MkI۞Ǯ-XtdVKj86 VZ #Hm& F= ~6*:C3>rȹCʺuD;B!p_=G8 `2+x ^ٽyH3zyDs(fh b6=t~L4!)8Nv h & V&v]؀ZǒDMNJM8NlT\12!,#[,)@Z$yqHVb7B#>(&6n_CNB[R "[jDn[ZˆJxlp4}Tr15|Zּu"AFH&uhrRgdPT|% PrVHw yI:Ї+&G.߻^+ug:?JM)I%`HU,Kĸѓv0e,uDDVC!L'K/0"@6 |ik-9SK}1=dkfHFX3H03 $AfYx |AŦ] r cxH++QS$L侚fGF _gz'-s6RKk23%#-:6`a.703j9u]!~{9 GHATg-/ (P,^Ve9 1.U*S)P-+!(Lۑjː7ZPثUO_ܚ4'NmNRR+,D0.xBDӓa/y{M) 3 K6e}D{!M$_ D<&s89굉3z)$2؉(=HqU,Zx5Vt'u!w,DMɶ NBtPe&ke9HTZLMFӬ sϕWzRѽ +)AP&yҰpZ RRDzOBGi$:Ž6M*ߩ%e6 b+3pSKpB#fŒ-qҵAUKiKBD¨!M\aF0g1 ^ʂ/EBg1Ak-ÚC^3͈0t!Hc[3pp*9WIG+td0[}nN<z4 QRw ub@-QW6W4mPؕӹw[ l]R$)d0K V0Q.m,?{4$SyVD\nrS]̿%M[JaVb?%.ysY͌3v(9R޺/oYV9n-_=]ct-m@sglk 8i#jr9BMlzWdJGWDȀC@#pMyiLhig+ t :SЦBd]tߓWڨBRVgouP1ou7I%j4uDF=W#'iY0p)Dan MxgsM$F?F/k .X@m舟( 67hŷaPN{񻽱7(Jjf|s iz 3iC.M/+ެs5%I̮F 󋝤ݴeE4H)*Yt.d м1eB.dChjx7xW gYC)Dt$b?DT'"$ }~˨Jy@03`85*bDmC![:="Mg@gsp&M2*\Ji2_.'e W''#]h" ;NsظG:D CgcYԐF!9R-J!h:R3ObQSK22%@'apK&QF!,C DqY4_Fq(X@iI}Ъ9]?o ,EDawawJ$!rMꋙېǕ pl°A}5`-1`!S[Mؠ%u2Aj  m5C]7v@&!"e<^6峸 b1TiЅ0TEA6KU~-3f!0PՂlLRtU]6b#P|A=^ oCx1ۻ5oz@ں^A` ]0n>*2Yh UZoYvb?-m4ՃqTi!{Q" If\h p HrPAEeEJFÀg LQM}dOEDs"D@[@H uP`)aej4o+_kw*߿^t@Zi9=PSW4gA#ˀV .oS:W} "!)#1b{;P?30fApd2Ocq& 76e sۓ-FL GQ\BLI lހ"R9%Imkc k0mrlۉ1_396r8r^[(Wܒ ( m$pul4jmwذb,黺Ct-C!qMjHu8$Mp6lKTP}Ź3~I"YO:MRX0xŔpTk N+.hQcS`YfPb*REm}YAOzBv ̸2yZq5ˏBNUOUc^NfY4)B @S"Oz[X DH7"2͍d,K>6 Z2Ecυi~M>uP)ԷЪ?C rݻDZ!LZ=#Jt@0TPʬD')7ґ+;Lw)mz8'zEonFTH'~^d3\2@A ܨن[[,B9$:TbsK9%ZmfZ5R^l䩹_CR"&<^#Z) d`>0`@t^]UMW= PsQ*4LAp>eeP c% 2t+,i 5r}2b_8^Ƒ؛JտBn)D`P.PHx]ŘdA80(ΐ PF.u.\^%1sD`!K=fNP@*I$Y ߺi| 0pEWA''7O_p,J5 FF( $eALRkU]ԽZN<)UM楢L^c`Y!q[DB#LM=//*dzh`!Da<8x *ׁ]d揔 @ !gT?FD9B˦G16j2fLDU$B LމϥCsǓ[SJN/01H6 TwF8K+-u#^I2~4]y8\VTWYW{ >b$ʚibskn\ !6`vR=HN)6/bA]/zNW?Kb$<iUJU(EsPd+vzMBO^pb^YEI{!cޤ6( \"#KH.XayH@2!D#`u'ZL] <4췰ZIz!XLN vTLRnM1(4GfLt2*.Qe3<7vo|9rᄀ [2I.E|$B+;~ĕudI=c0_kV1rvD@YCa``a> !t lt R"LEҶz'ۥt`C}bq r͊ĩc=rl3cӄU'xNԈ$#zsS2C:RSK>Mr; vB\iLx7]Rl㒎:De,y@kHTpW ]H&!+ c]E|\Kh^&@P\ŤE q (* i_ewAY@EEt?ݩ^5$s*yǽ"3Li 3{33$i|JGQF2ЛnyHʋ0$ WV)Fb;1Ӯ"豋P$t8 k ۈh CD<&^ a"_;` k)u"ȉvR9jtl=:_c]*ddT+De"4jQ,>\~+@Vxy%u63u)6%05(`8 7E(GދKR $vjpTa줏OrSP$>[Qk%Áяet[tW'%Jٙm, ZHM%ّrS4N* J#( ƆnwNTO-$!XS隘BI@?bCAM(I |YQav Q3iELY֍'M$3# D_U7IerySFXvgiKm!y\tۨ_xYy@Gd]hy~ɿLjJ 4zܒC plz|&hDBDPbnh=#o0 Q*?ԸG2^J (|Zm(ҖQi5|gD("@xx0?Y</F#EVd,t," maycFʚ7e<*ҭ@V*x浍,^G1%uHC$7 s+<,Ȥ`L԰fb[paEñab#F왤nߏM / e IE"QfNhٖiVS c<XǤ+"YrF@M(AWY J(ۜ9ҧ#>E1UGn˲B-q nF,H6! ERQ.VC[PeoYi\(e6Ak)d BD=B0a a~I4Wc[|X#5KEȭLBR%7)"::0rBym#^onǛ2YKdi5v5a>b牔!RU}V+hؠ+FEEtiiaUJ1'`*0"@D%D![+=JU gdk`v9e}@V25&LlkˣbJV$q[mUĺBEP^ꇧ1t*RرcJHQ 1=5+7 FM'*l{ 0<O##+oP ԒmSYJ~`G'Zfy.IԯS{ͪz=}=^wvw>! sHHRN0 r!'dT 4hy 9{Bv<{hЊE29Pe L4ŮJki.mM3x*i⪘ϭ e S?Vʫ#uړYy.pP@GȚpNV4FE$}DH!Mɖv)s8(y3CYOl t |ԯ4Z/g;^ye MFg*l$+DۀLDO0c ,m` ] `ܕJ < ZgO/EZJ3¬B&4Gf@(IS3UDd9DvH^txJ? ,FGD򕯘Σ-iA]䱜-mca3xJ0'0Kl33T9&J0!Fe:;xrcLNfM@eyp (W< jOPr;*}| 㙙l333333333333331ƤAT M$ l β4niiw_P>DZM `W_v8&77s*U uU) 頼 M/rWbUz%u Z%v3MS?>]6-Njl1(zF͒4u!={%JM#5KGeĢȖ2#C )6I ;cq "Gd @n[R<@r:%"R$I6gct'01*a3pHQuȔ#)$0!tBI!,e5m 3WvEQ[lRKmBY7A0YA*)̡^4ۂ<"LB WH71T,. 6f0^Eڿ=RKDtY2lVZy,r B\fCT4ѝBjGcdDD@]eJL`gi t<2c[RZPȲPZC;*KFnU}4_z0VZ9X8+gVVNf*Тr2.Z_ &2Iv“:nUfIsrEX)xGwR@ٺީ3#ܑE-`鮲X2peHUx7_<ԩvhk^bU)Xp7XibhFywJ[)ShٷiXYUf@g~gH40BRUv,lڴ?G6Yfpo=;ٲK̷v7_5|\!YD+hC`qim m10f `OR9|ŅcFb&,`ȖEylhcQ[D[cAңǺ該RwGbt=,q9) T-b.$DӼb+AV쮗bK/ / gkI3cvP"ۅZrCVgˉ Wߛdm~ !YgY3]0 v4@VCK:OY) Xy#2VIbH]FNwޠa4=^]AovqbCz$"D%#[Ne3zj-4z=nDU@aEJI4 !u,70RZF{4uYg^RaeTb;PCdL-_]P&FE,դXT>\E ^7[JԹ덏 $< Se)Y iJ5{'5@ _3ohqNsKճNP(t*KaEe4L$JpH{+SDNE!J*e"Z0uI.*݄R,ʷ-G95vnƦAA& BTs L4!Ii8EGAna#) o']޺EAi& Bf)Are-JGz5`G&9F/{H QΣ 0vtmo@qwAN6ݔ` EfRԯYn,ڈ9uyk*FTZYpO&TVsWΎgF,"oyXj䇶޶IvDHi~);!bI}$ όGʴjᢒ%e.M6+d,D{C0!L m=%WeI4ji :MzjBIi4{DWM@՗Vw[+[.f*KF!sh#Q1ɊԤu[/"K(ܧ!.H !*3ekHK*iW1G".zg $īThz:6H ̸ :WHL`}dha{ʨ.4Y=( j&cy2x\-ZW9JC?%Z밄X])3K=\,< n&A8E$eA6];_ԓѵGdeCۯ)ZZnaߛ5gODD!Ke"VG15n&қb..;L JxxL$\z &m~5PۚVnn?5_TYqA5+ZP!PxuEY$^_n+y~!dP#S lD?y'D7,ɦe:M CF\] i޿=`]U/1 L0@A0ĝXFP XѣDNi#R5-&Ey7x[ibv5$D^ 44y%ld" ?%$h( Qoͅ|@]Hw$,OKum3 >8{7 aX^hzc_D!pL==%Y$G*+p~ȪyXŻz/Z!o4P2g3jX&?ԴѐSށw`XH1rХ`YZϤOMQKQ}q_~U^<ݕ핗_GYYcVpJ2R'oK! wU1f#߉ ;!T99$J8xJ`F]r(F7G]Ve^|Nhd4$[ItӶȾƗ)}X*O z6&ԚL* PЦ&e@$69ʲL,,A>Xj>+7n~wHئc 1m_zDW@ab ja"_ ȩQId) |@@a&w 5S{W"!ݕZ$D aū+R@̦RoI҅K,R`}'eZG_@ 8J}lxCw;}VcQ k+Y":;Wֽ&3W.$%ҥ)CR%2>wzhQ{"$IRՊ2 7ZiG?0t_7,o~o>[fnߒ0C&2cs!(=[y 9.gMJ0;EQJБc 0$ +XH4 >a7D[8CAX/`F U `񷔼!Vl@T P BAmuXM .Dgahaaw<̩t1Z4!L6)hcVǨHqeT|[]CXz y(C"]QJ6l"G8Ŋ]2Qƪ6U:l)Yʺ%wt>VOW&KGab`]U{oaVjU#Вa +c(㤢`'"B.|3I#wXMKL;N/Hwi1.ɆlpC³Z D951dHJRpj6 Y( ꔡpP7d2x"(JPjD`a6U mG  1z$i>PAUV|%&R,%t:,UbXHo 0@&7PE0،$T f˚bץPKm Ta[%| 9{#1+V ҡRC|w7 p;$'=):T +Sw#Vfin'0䮋h.ߖ,gMC*-b ts?8Df% I}MUՄrS0W"H"( x8ARi+Qd愉V $Mr2!OO5AAJR<49D@N%`ի y ch76x!t|"˗2 $oT$j2I۝8g %Aґd Hƫ~d`}yQ'UuFٴL8p I8y::pa`j#b""a\dV0Cx;rS(=d{=HRjÌn! e4i}t EPD\l/Y%[DD&m[K%^igcg’H,OSMj)hyO"HAQTEDFXyDC46U-K$ۣPвHPg%=ιh$"A5^D# Vf `k0y5+PS+L򺽵 Xt2"b9O F 0J% - R#Xȫ :HX c MN"-f,]&=SfM:$9L9E%!4:.zڏzD)sE`!T% GmL@5i5 |Qu5o1[c#a]gT87Qds-$zRI3:B,>Ioz֛3EvT:?jg: 7d-wi$pct[I,[+W1Czd=U `]$Ί+g ֤IՑ'i%Rբ0]eIGQh爟f \/]eTZj[X3hD*GNmI`o"@@ W!QEEI>cWKTKW rj,b~yFfF\ŒcioPE XG}*DRh!p^eIi#u U| b',g3S=pB0FS>J[4Fs1-|R6vl|X^Ǖh5ú?X˞y(QNX{#I!(nC")尺"K(&v|IVЬUB}+ieQx`na';[صt_oefUA ݠ[EҦ 'K[w,wPG{k зw|˳ϓ{u\h2fRHTpuB8Oŭ a8wxX齓7#{CVA@ػX=C&EɏیX9ef)HnS.CDZ<DH![=a=|[ g~}; ^ ,z)wj !ş C 1L^ж@o6v mun7\P(X SIUãx"3iFẒ-u[_D E,yFADH0 !YqckkűF%4LfۉIK!3 d/7(]ѣL=~FL}v[$oǑوX ls Tl̬ ^q|x^ΓR##eTHyU>, wԬΝed]=Gd`6(w܋ͻ\rnKE:KB@4/De`O=aMii<)P/#C,P2C2H gx0'Lrd YT=!4~'ҀT&WRv&+ӄ)"Rխ4w5Q|hR;tZlz"nӡFbn*W$-{Yp۟uT,tdK"/guz?nȬC pb[T[aO$r&Mz7]َEc1DFh!Hzh‡_I+ i ~+= A>>gP OzkU[_@ IHHdj5} 7Y4 5^}*W%CyqD4C#pGƋz1"_ 0-P+j2<)vИwHr=4,/'̌sޅje, ;b[֜K?֎wt PeD$ QxHb! n_VK=6ϧ+%I*0fsG,RBsXqՁ$VX$, 8"AEx}U~&@LzIQ;dݴKw~٧%5:jh]4iXDe#xGj'sn2b'4+i9>kn_)!(K.UC+Hi=uQ8HDU_N ;=`48nwpl̚,?nЮy3lYux叅C.K1zř,G ZݟuKzKVJi{گOy<5K~2F)JƦdۗz8IIWJ)knRTDV$(h$WB}IRsx%]DӒ rN [b%HOG1 A_QCg7T{4=.rqTr49HER6+Pl"麷""\}Pu",>Dn`gJ#_5N*팠 I<<@Tnۛ{wkD/D@MD{]} 1I0F٧u9$wKP(kf*f6@@D5b aܞ:W0i$RL@@U "*-٠S McȊnº9* ʼnt&r3FJF.cw@Y -Gl(lM3j۴|-sݧȏQ (Y^7 [-aj2]A{e=c Ns>eԓŇ4 jٕQ 2LO y[}xH_2Trd PncXQ-^.Ri%|fIv2{,i>4D_C`` 48[C1Z_# Rɣm'iܿ \&䱲y.Dꎅ$dN,5?OU@҂ohhTi#wnq _V5eYQEH{ R*ZM%Q$:GlqSykxU:BPcћ2,ΰh%٠ǣ1|ۈʌi% 'Kau5 c9SyeVm\`L(ٿm;5 [XQ |ېh.ռX.+4SkFkU==g1224K(mjtJpbLF>QZ.bjw8O Pq4-dJ.hZAJ\ PTc[Ue,xp[cj;$Deut1@A  !>`^n]Xڦm %"=g5ODY"9^ݿCк)ﶣBێMZ׵ IB 4fABֆa!hg8Qe+P e`4ds DfZD9E!I =Gkv9. ˜MP1萦Z٭FǬ( ;$a;cjWIk)ѽ:dHlt3D9#nu !0Zq EH}a(mc04H̓tЅ 12V9Aqr 5 ;brRls*td'}IU[PXV7r cL4LC h Ӝ<BVadI*PjX7翝g=֖T*8]AT ,~޿**ePi)quV-Hyj@EZBAJ*ÏZiڅ4ֽn8DdD`!pM?3#6d}cYV١F`R ;R !$늎XKfJ U,6(XM`,DB!JH ] 4_ <+4Հ@a!P $Y24M m.A נ{UsԿv+xki6oQ@jI[KAy|0YC G Ҹ\MmŴH"eAQp`PA#&TDUai=90W ` xk bYK9̑qVVD ua*:.] [ YȣTVԻUFUVbAB\]I`DT~Ln+I7sVLKmsHU޿_ zCT 0%X ʇ\Uh ʖ}@GvoDXDP!r]k*iT"s',@@\vI*{@*.3.Az7y  5DOC#Y }iK dA`$)lWx|PY4.p4Κeʶ\" @۟ӺNSg oN~)EmɸDI8N ٺwp~oC_ _v=Dyɸ-l'`|(:v񘁛1 2B.yTF0MNJ%`h ud;4D:$tv)Ѐ >H \B Ei$sRۼ&ƶIQ1E5|܇ڴQG=疆8d{4 f㢨)!@Փ!9 <$ & NZ&wIe ~+BP?HDQCPfbڝa#) R/?xʵכ龝r`n}5.6ז^,NVT;MD1Ѩ C¡''JG8]OFW=ECBZu4RJHa2]7:Y-ޮwF!%BU R2ުL巇 ι@ K~8Xv5sw};7ʹ_WvO|4\:B&$* P` IB-!TH`E4 O]\Oĵf8AO?D+&Eh"`*- geɐ} U$#0F0R{ݤ#չTδg3#%$gFka7zwFʹCb}/eD0T~C燡z?9ڕڟH6JC~TY&Y)"*2K?m B (y#dT)t{2WjY<;G֖I*^Ԍ4ڶ(Mȃ$jZ]R[(j)55_\!㩻VY!'dj%K 5`\ń'2) \ !б5-m N4@2QR!B|Aa4b6BRDeC!\$= q !vIe1ZUh܊E'/-Y(]BXgqQºW:_A>%-}#C> kd%CY،Mz #:)9:F= !: Hܻd*\D7aau˪=#lHTU g_ n!-˗"=!\g{* -Lw6*9͘U_22%`ak.imRUThBM83rL-헆8d*0^ )WVtuJmW+{I1ֱ.7yURoÞɞU%4:yCCqdQJ޶{V@8vExii (N;3( Μiw*쯢adOA˖{o?%IMDa@a^JdÅ gej dcWuԈnKG(8@pp[hSKR2nE 4R(ԾPǥw#t0ȩKXbhgk()<,hP!A fB8ZTYQ"%=~F](6R r-Bu/.+˥9'<>;ow7RS/2>#KE~V![Lϳ̇"24]2L,y78I 7\bD 9,Gj: y Yۘa iubT,f "yG˹86I! `4I`JUDFf=aw 4 -aCHNv̈8$PJJPBЈBR/.] : &''e'ˤY5v;FшbH+B_R.VFP\] IBQY+7g)Z4QDf [[a!E$*ic :Xsu#6'2&Hiy yɍ飉fr \diВcp\f`0 fF #r>f@3u fb.v)"C$C%pf 5V$@,0Ti1\ð< ~QPɃSRƗ\3?޵۷jfD?.% ( 3,w3LkOďLBHUL@xቂĻ j2Zzѣ^5_xk-2>r_u5弭3ydX~XȌvF}4փ"Q%7Ni4e~ߵ'?w#VH͏u%Wl4 &0t ܼ L8P!G.FZȹMY\A4!K6\)_,3ԑY+}=z 4NDyZSW:zzu$ J}qv_;n^TX3 RhM>=}3ϽB57) i{k~%oLD\C `fy< } y72rؘPC4в Կ&+;™B,Ϡ@HUUQ2F!Ri#4ZJjAb0P d17hzpK!1nq%C1?7Om}}W`WQQ[IIGf#s6dR ŒRRq>O4]"+:^kЛsW {+sE@e.|}QEjE Lǁi@ agMLyhKGh3 ձ_C~MdsՃUY &efZe$v\Ԣ(ADFf@ZJǬu]870Jww/q:\H=/jۛmڀ H# %K/^or åO]7WytD oI;@Kio4M>&PDA E@$398]CbJj[RS?Ccsg[̳:]hQ9럞 Cwе8s(4#KhgA6vGJ"-aSH}rT2q T34<6ၠJ~%;o˙p.:i\u\#rQu?^d?AaJ=D,2.T^T*_OD7D@\ @ x5 Qn*+e; )#Q1'i27Y=K{?.$ m-p \AN6Y #H^ ydߙB*"5x[iJ+fA# _x1d\3a{,1y==l9w̗,JQo; "TWHqt`'-y;Dd%.au%f$8[   lsVCRɉNlZ/UcOjU^u=%+[g8N0&Y =k^.^LzL)œD`Z*0H w0^)3j8tjPe\®thCÄO'삨 $!p"z+ .h,Yѹ:pJG5DZuנ&;?)H-RU5 UjTD:{嘯ߑE=H,RɭN^G{[jFMg%&BˍвM keƒLKyP:(G|O Yvj".C9[ |FmSW1XUFc)G5*Q"IY)ktYy2RtΖAzvVR>V,J]wbPהUG]I-1bB AJpdJUPuU4銘U|͕c/8OQC0MOBX*ƚE+2EK 5z$ƒSWjv ]Uzꯩv%vhHQU vef|%6,hDJtrl!xɐLLOoL T.SD9EP!pLa* i7+4 qU  wKx!8DjI#9̇58w!je0,}`H]Y T`92V뒪VQ-5*v@qpYHyJ'G*xv4\4[)6g2 ?uF $ڐյsU5akXk ͬ]–=V(C/ߦҚ k6絖  uhH !c3tE-ISyFԘS4t`IzO`h tĐY5hn 1I5TegSsj n٤ogSfϰ9,]-?Ҁq*Gx]A2O!P$H˛pi rW,@ Q`ϷKsozqXU!BUOUF閍2nLnt, n%Eqm{,Cnݺ2Mdp񍞩 @ 1b΢5k*:tHzUvց+۔ N8&TQXⴢұYIV؜ٵo5S%7ZHDE!Me, `0 f锘#Pe+Iq3b΀ԇ +בf+oʽ87Mݙ-B(֜d7SSVmj,EG^/jb4Wżd"I$,9YjXL~ 3cY[5P|[m/J[idTXx>D A_JvJBsqIdfCz7y:VX],s?mMN8d7B)LkT:WuA-IyҞn/aԨB8*4GWX'ǶYtmٷq}ɾh's5gs$L]UQw[h5@s#A\㦎[;Kd!p,#cgČ$82HG!3,1V{ek9Ԉ 94SVۧ)E9׹GHLlDg=fÐ$33>\ò\&cCpe~Zs@dn\\;8'CcįKf0iF 혳jlt,qfM_Bƻ?h~|%)ޣ*CC{HCgA HgwǸp3T**`Eʓ)X\҅CeZz%ɿf3Y}=.- ݃H/2Rg/MjN9D I/Gl1*bk;pmW2FfMMfapUD)DhaNy " ]} `p0+qs6ݙ3_(N{Ls>CP4`(Kt0(lHO3Ui !PKrJu;z%DRҽxbQnhMz}M2^(,bh 54қI\ԓgfͭ3]Sm?ȯRyJ1=!٭ba](2qBaiNVq M\,>A?/QBe!#z A?v&^ "g|b(N:wAC^yE/+Fjhj s.Ȓ4 NyPÇP;i')RjlĮLaّqMLc NcuߑR1fݦuH8|mg}R;){$W0RW嫕G{T>fKY HJ*Rz8l DQBo P4M!Dn&}3}muN fxPE;-PTA5GpH/oet㦥V4W˴H'Ma2z ;1_;ه>;}TH8ۼx6 j[TTUkC;ykDgp0.Ju,+6b+e49CJE1hA*&9c3̫|;v.>PB(|K~j*LGB0#cCp#;#c~_3d]BaVKHY#L-Gat Qd33,јdվ6g ;l`ՂhјL,!شLUx#dUhoG:FGe',EOUZZ5}c#2:rlfv9f^p8x{T1=M l 4jG jzredLVv_;FԮO[icTh'PIL4M) ͊͒T@1p@3Zsp' rڶ+kk)O͛SoN51qz3prE-2ՙI^v-_Ȉm(;.􌖾{]v2(7k ~gLYdRtH #gG_tSXJ P\EWs:CVddZa^%#J |Q&a0 DZ.{UE$2 |HR i ]))WGT,rtJo"ţ4+D)\*ne?[]0,s˸xm?dTDXi`!:w+DpDl2js2}LM}xK$&4324/q8?hlA_]# ػ+ w pQP93$iNd&Q(*\Rܢ2bmK#0lH钤"1; /̉t?:<6lYؔJRR20MI&*M=sٜşEMJԀ@ԭtE$0> "ܾdbA(aIC#> 53k n&!$3 ЙpJ-"see5)vNiiUV7O:݄"PpN6b(C@mhiXKG]DXfܒK^qm2 Oih@FeC |  !. qht"Zbi~0OxP=L:zRVeDC2 L62q0V:"X6@LL /CaҰ9mlCG[[3}.(ͿĈRحw윏%X+52Zhʂˆ*qYkI7"ҖDjφfpj|E45:[|Tp(`\QwBdHfǧ Oʦ'+67M~j\&:< %p0EF#64o:JD 9S/P <%,.' :,H %vF<!% Ddd<,cp1, }#$v4ɞ1++.'|+98X||,r*sEBs0eo5lJ\YFW4>gHgk9q!Ѻ9o(֊nfz$+f^w] Gǝf`IwrjJ;JDmOB!V `s#yd#$c<-F$wH/2 ,r V`pfħu8#pUeP mMt*9lqqdFz.P>dFvnRg+WzW"(-2 4:A5Rs勝{:):^̞ `v71JdFaTi #J` iM"(0LQ)_g5 3ujH2kmkUɹSH_eʙ5!P $ܲs~םYT%/5{ u m;׺i4WFýJI$(Jjy %#'6s T3pepʖqJ-ZfIoT\_fIԯO K3 W%8ѪWߕ!D P&1+b7׎$FSr1H͈2#V$ۋO4n(gs~(daA(aXHY "KI!fIL02*&dXtaޖR8ҙfƒW*L2*hp&5jBC2 QCLQq9M1FHIU 5e(:1#{;ߓˀLotPpd)RHSu̻`au)9ӦҲdk bk?J){0ǽKg? <=OH[ܔi"R6H׼C; )kb+ =Bo뭼{Yɺ)[}Iu; {WnUJQԃ:٠ȓ*2*7:vs JϾdJ0fXȈ} "KU|k`0Aq,2~2Yߒ/ W$% 6Hg J_E VuX,4*F aC %f M]\([,df%lϿyFUjHH /ABY33RCH1ClHT,$!aBL8D^ڝ47=%[ "[Aߩ!zFV\ X '];tKe|e4Cő𭤹Ce2^CE͋̎FHR+ RG#3x9"=RHUXήDdW5L>Ag+;nl'dY#IicGQg,d0YΤ~vfV-9c ʊ^s,͵O]GJ8ۧ(лd}?~e"h2tzpb  H)eR1uy(S Ri]--WMEE؊H H}s"{͎Rch# +M#Fo2=,1,o*JL׭׼p*2RU@kZ'm 60Y%MڗRi:w n{SsFsW("!},K=ǜ<sC m9rn؎b7 $d5D!P3#}it8Hefii+<4 #-\t&5bwZq\n0XbcZ c\(Ad҉hڅ$!)IEOFYNL3 aj9R0%OAjL [^eoeAFI*>Zf`P+>BaňԾ'E@Q hGxP9J+jht$yJqQHܞSfH @3_&#Q<w@$ 85* [ h$Pú OCӊТ)֝2J~}#d€Eh!p1"OG،d8%3R=ѰHqu uDD>Z>3$9BcS _bRULAMEGS@IhS+=WPB6RTz]\YB3ͅg. {/}{V!3y r sB e WN(,MȤ86dACfYl #KC !| p/0`[]gP!L` EOB0uLD:x ThxK/L S:N4kIHrgŞ4F"PQbS*2o{FG1Dw1'r&I2H(qF,Ɨ!u6mP{J@ֿ&.{R b=lMiE^WjLh>tV.RM`)B$sa3RQF=feBFCƱ)@=>2?fTkk5l0jcFLF-Pw7( ]ܦjDGJZDe#ݷPmD4ha` % C S e# |>#2ki:HɟhgH8@B/z/)3>pGhEwS96=]fnhpRo]Wϖ+* Oy&/O+:W)$R?$IkPJW%J;qI;T8OaZFSW@iH8` ⡁̟ͷ㧹s6E pg-m)1s{j^A;x!FE$kc (L ܷ쀢aRQ!ɭ#d39 [/m%upG<΍wi` Y OfV@{4(N*{_tv|sc aFS;*mQQdE_A0fb XI cnK v`!3ɻ-AI[sWQRhFD4lIIk"ӥ#l:9̿L+ToXTM;^7J}Ɛ)D2";}n; NMŸ/şMr=lq>ѯniN"I-7iAsrެVst|ѻGs\{H݇RM{xU` (3l# M)i6`-fED_036A9AK)O^(?7 5&[{9߻AI찮GS&0DtCJy ͺy9D/վW =)lljc"3."n'6VdWCP&Y˨i# e` 7"$ёFUxe3,N>ERl&P!p ]ckI *-"-6]2oI\(K\=2 L7{s"d9!ylbΓC=Ot_dϽ4"@$BjiN`N 'VĴ:9hc$2G% I@E.B$`1ZN|:X%6E'ᣵ uGVw|;w1FWe=e4~zqZTJ|bc1Q6"\{iQ@&vHcG0@Ge`fC:% <蓁LTd$7g(^뎡dKPaW #JK;tM0"4 +LR 7uYy~J=y}gT]~٢nrf0,glD&'v|is]hH{H\$cjy0ݴK8bGnOӲqUsMWa+ͩN;-5#U|RIp?//ܽw/NR&OGn>+8DdY/_qx{*i8H48mu.""~mcsI*]>nY$Y"$?Y2L*ג& }(e *U4H;m!k(=E hX)K%>$ 74dSD!VX "KC |f.3^2sVrY!Xe,v?NTVF\dK\#]v`%C Pq)Ewz)N<>n%H-:ȵl#VwW )6MM1C?zݙ+· ae.2+ ѹ3&' hqFFv9ŹZɭ_u;; w'dEo"lu˕WUF&iW4zUd"HQFFO̴͟g8S)r80[G̈́0{> ,@IIWl1A<8iEx@?lMUeW)nOåt&UdKPf]+Y  A4ITb40Y":p#2ɵKِ9P<&l4($#2$HdӾZIiK 2dJN`9\V;WOYDoEK8A2Rd[O 01ְT[KRm6f}4= T<`@DSg_qpþ9\?*^Lw93Şِ*[jPSUTrB0h!2mC43侴TKNZhfe=g]dTY[TG-AMxÐىkvR#·//%?/Z>4ɰߜ0tsyqZJ֗R5byuJd!CH!XlCpJ S"*0RqKs6oa+=E趍cffffffffffffffeU3333333333333323m(֣ @w!AƑ|W8Q[mZ@ X XSQ*xq sܓ hB^ ̝mU5B5' (p:=ũn&H%nIsw4A2'F1$R][)4547hX faCe WM&tMoIY}`8p; snp8ȍHr;9t\s0il̝: 1;*7)1Oys!ҡvM7'gxg5!.FS$&&IH7 % ĨbPZQ1{etbx 2s.дּwޏӵ>ebI5ci6:r5KNYrH [ %\'ޛ~J}A[}-=?>bwlMIi&ֆ\Y^$G'gdrS VuctYDLaOI=8 QgNt (&x#7@\i&0[aqvϝ*RUHf+S˃Yl ڷ>Md-$$/bZSt֑.&}jITY,M̞m9yĮ*f乬.ONșIrx0(|Ε%Ahp–J].} T!F3hBIiS g97Ȁ +>p߈Jifo7#wO9 Yn4IPm݁*V;j#’IJoVݯ}a6ְ$o*e9oi9bժDDH!Qc)L=# g 41 S ejV򼕍&cQ _2"(N%UD5܈]D80Î2nD.Hմm=8AD=3M (Jc}.-K4m/<NJLS.MyGA]Jݙ O?N*Fh@yRѣH@P)dT͛ʑZh5-Lt9˰|8قh9& SQ?n9DN/3R3F&s. ̳21+iE;$)Ju#ewSt2m6KgvWγYb{hޛ1?_vDoA% ]̼ G < c&`oLôr0 PP*B!2ZR GH4y_spܷ핼-cP}5ŧ 5Rȹ|;'߻^}~~~HܐHO~YC)f#Z3X?$W5>כ?: ATAY(ӢPֻr/b}_*SS͉Iw3a釒Y^df;fԕz>AN1$3Y}Ej]7l5Gvv~B$E+EDY)tX4!D4VXl5ADDm!BXRTX~0\ ,Βz?J5? Yu:-޷m"BUDT_#0OcMlBޅ2_zo:+a.*Ʊ "bqcqD$m`f l$@1[I:JO2XE@@h^Ia s#< 8)CdTD~n!KG9m=#., `.%hNvk)ɜ v]k@İ0,#jW-kK6͕eGCYЙN;Z@+P XHC fi!kzRڊ]'21*k6Nzdb 0ǼfeQ*orfWwT{~JUUS!Ʈ˘tKH^G~}V)cTyJzM%u-~EVd6;d؞7&x !Yċ ^ 2>{qE&$eWRVZQE^˭5,w .ۚܬ|k&ʭ4$Q}VoqɕUy8QKoDC!LcY=0fe I 0x Ru/={7['bpܛxdohݲmDY3IƊ*Rk@ *$E&fTZH @HK 'HSJI6ČmrG2ן]Da8"GI)$j(E2ȌӏW$bO֒3/YƮnCr >jGIDV ztfצ\>^/<=K꽟4dKT~F$ EUmW-ndH;G{HMM@9Sje:k;7NOK_f@O(=A*}"av#Z0CCfaP'p:t: 0$(--f@3fuاaGjqn1gfʑBS -9{1J7ZN`H-dD#D"N[=THy݋-,E5,=KOj8A#j(\mb'lRZZjвga溢XQP{Pb#ƒӒ Q6i.An|o C8U@.XAF,mWBDDN2d,4XybB G} SWRlX[9;LX14@-8 ,"1@X6!~@p¶@Cnl[Ek9xŠF<oH(D7I9 YTMoaxDND!Kf=,k-k &jHxʫDv%zKS[v;4ҙ8 ȃqha?.,ӁOgvq/>6e0H`7+; l޶ H(ا-hQ1Qcªc~ dC;4d<]6bfSSl HD#t3V]U}͎*YNROĊ| dgAץW.wO4@Məq1θqϤ0EsjUYaːQm͝T94Zr"U5?@Q : ä=mWw@Z?DwEh!M1#h`6lp~c",l<ѱ?:mb-JF~Tt8}]w:NFP˘ՠDH,QboOmކ6PU Wq,ս pWhXaI Dǁ`b/TUn83!o@=m $Ќ^I׹hAN2JΦeON?N 3+qhc $mlTWJpɊcMx 5YmezD#KZmrϖp͙Nrsq_b / ا^64 YP$Q~2da$C YU.C "!zZRiЏ*ndVVl.*Q:sץ?dzUA/afS$ 9)+9S6K21-鶲8DgKFIC$"$J-.^Ii\UE dƒPϽ,) *HDE`!Ii#>k45,>P4 7Sb;W T::#*T"Lw|}*J^bѥSʠ XϚm:SE8"z^9t̨^.󕙙əS`)ڲ_) P(B27-/g-0U!&Q`fDY_gD6wp2PYĚ괤%W!Zm.6XM VSsSO[Enಌ˨V㤄l4$%&c~7 *$JfXjy߲O$L\׸vEEIhw1|Khb5:m\Ԥ/P\24QDG `*~̰Lm 5l`>S@IX\T %Kd$NcwS}psE F. KcAI?>l$*UiDYDh-0]rNF8őU/uWj͊S(^w~&m̳4^PJͨyiy.˨t>듲9X: `րOH4Z%<'xh:wT"zjf&UEqF&#Mg m9$}ajb~|**76fԹi-S~[FAڲr 3bS?xz.lڛ-HD[OF'b u%H$6U @Gn8ړ1Zڥ3ץڦTg^DD!LC9ȭv5(OWҲ""D6LT_06 gJ=Hc5G{&nDD[S>PnPR_5Wg[FgbixDf&l]qr!6T&1Z'eW]22R{R "J1TWe ;bmZ")Stj=+V$zxo8Msƚᔔ\8 eo-n Ř7[BGdh&rM4ѡl J\+vocHk\r !c&KDhx(38ħ@Vh[ZwB2u*#tra4CRŀ5 CJsZSä/bFUO##iFX: ׁ:u: fzrcYi:^3Ped~JU4퀖Yמ:c`Z* t\a|}c8.XnkC6sɴn2!C1YM.>Jͥ߯Dr`a2[icOO g 6BLΫw@ $K[Fκ@tX NDi8I&l\'Cmi+r0u j$K6$s2TQ.ҫYrO em5L F!Hպk'I|s ]@TV4j`ċ)~gዊRYgm>4J.G!ŇR-V0V HsKL(\;r`(ݳVϥd@e, $v `3,`.ˣltǁ9`=f 9'ŨYW#ş^w)3ےx߸du[=DqQM@e%j %5 XE2򞂁Gh7AԇK!r]#(`IERWLr!Z"F[#XshVAXAE8Q22`F`L!r\(`Q]&W`DJ+Fj\vrY-#+ D9FL 8Ra*B !S$mG2cBmff=xXjIdmXCa@c#/7EB7&\/ʮO\0,V0v[g`&l q#J7F~zO/{\8CIL-95`Ȕz{Kbܼca7vmOlϵqM4tMIq6޽}.o\|8Xk־=5Tc}Av ~I L%Ɉ1g|`5i Q+bnRĈW\OU[t.-HK$H;T4Hd" (Xw>1IXOc#hT۳ƥR~WoVG\WDpC@`@Go0-XTU3#os:SWlVY+j+?IQ̼I dfJ2Q&,$19!2JH&CYx-@Hi"8p 4LH/ߩZ=o1V~> a.G}ToGo꜏?ҰJJ6mlc&Ȑ I)A0窵B\8O^H38Α@b趻t(~}Iu 5?rw7]"$A8HTJqR;+cex]o.܁/{R5յ>~g R YuP6$D%NC `qmp8 g2OXRH)@ϐ3@ "t(`m, :*x2qj!*4Ehp@䌑2pYhs`]fʬl?̾@]V)oM".nJK!zZt%Ur +"@R*̬4r_׿^ln@(# -;AW& i4 D5G o(hzPød?xbxe-Sԁ/I%E :TP} U &٥BcN.,QE@UfEC C5NCR0DeFf`a%:4 X8 4\BHUX"R- 0.C\_fQbC& R#etB+DL 7R84PRiF\ڻ{bIo׵Os83<αy>+}' vLL̈6 hӠ,D!]U`Z*8A醺UE&|1N(-mYcI: ;A -r깺!p=VDN`b*< d80&0עe6̠ݿZ] n`l@ҦN誎rć*lU:%Hcxo//Cԛn{:җ˘^ԯU^fф\^+JfɿGK.>%3[)E0l,%ز. <2"rI$I1!9IGK7iNq8E¢2RvQ`gǠtI.m0VkYpzI.b(&4_dJN 2JZVLl*8lz6U&[>@Ѽz^DlE`b <9+(7 pTԺض%f>KAW:[XH 49YU^V+ {1]f yƱsw^SFaSF#QXG E=[C̉Jf;ž7Yy H]ILWZYN}bgmBC0fiIv^c:ipr`Fd d)^$hcүUw |vN" q0&O hNQZNgQ+5)r _ E"n :yYlByQv鵒Ëˊ#6emCXFDO@IAi$p@G4 `Nԕbآ-8+zE{ n‡%/aYJEVb>62,lP,V0KqW RFI!IAagjB CK CnuToM2l֣HOd)s`H%nGH!Kla We+ j5 Kq:R!D{-y!5\0Cxԣ_^X_JW _X&Ț JR"x!^sofmJ $Exu1hk\fv^ ۔]JS%J'kgoŃv=jQ d3*jzeZM)zZH08646${zcZ\5J2čF` Dp뻅`6آaiupQb>BevݩⴻZuJe0M܎3n% h6ʬcf2YΦ\e'.D58E-ae9h hhв(k|ZDiE`!PHja7Me*嗜e4~sGR\?ləܣ9H#iEتMmC)_ʩ5_NÍHaqɿ6zRuu_F€7|HҬ\>c,Xs'[PkI`mbS7o2s7rp@ޣm6Cg"Y؊mWa[oj+]IwF{d)b%Luh,W@7T$z[P[@ʇaB@A/љ1mU03P UQPQsuC)k({QJmEzYSLIuduk{k^DE`!Gf:aM0 ڗH 5ZHM9 $@&"q @.|/r,;TA@b|<;~ؿrc\oO=šV%P2WUy#.}|WO4z ٹ߱$S7|@M)|VB hx4TTD&\Ea gSƣCCU3#Lb>Dl^eV'ZjZ2Bc#*Fry?694,v^k^RE21)dps^F]6fomhAz1BQo)~jQ0.#k? ut&F,&YIDȀ`Qf ('K0?"/MzIJ]oys߃nY#Sb"GpqZ\%8#PIcFHIbirw]wbYv&[P %iF^xR_,V

`qϊ\c XЈRu$/f@atț'K{UqmۀEp -)ʭ<Iw&kٖr2h]NnѫrH_{GNpG#vRάHȴ4uǣW0O*lܾ4AJ/DxEE`jF]<mw1<)@`,OV|Zh|{[dxpI C9.#ELp5%4I'j-#dJk236DV(nC=ZYt^eG/s:Zl9?.]wn: bE%$n'5HXML8aƨ-rY 54"`$)GJ$RV/s luEȚQv&43@үMȑcds6oR$pP ´8:$kl RL^s`Y%{l]V+rGLnsPII#6=k_@fG$H$˫i(0)VKiDj`qƚ{l710H;nEI˜ 8Wim &jx2·ܪϦ*U%ؐ7*21đ3vQb{#H 9)BUPh$u?vl)Mb[7zd鍿h]>^QԪ_,>eb $+"TGBfb-@𛀠.U@= `0 ܐĭ&ֽn`xu;q̯O(^Ӷ'SIı~w}o JKH^RGӟ6ѣF8IzI#ޯ8iMIG{qi..jy*ik}Y(AL?3V¹}c6Zw[DFDW怗7*KPn|saiEy3ψxf㌹ò"jƼk@&^BjP#dAɚn ۵կpK <<15:SFCBxIWqS%0C&粋0oLEe)?STR o@,2G 6ND*:]i3^!涐n;t[2õV+4']kcUtR"w;Kd_nE}_a0s*B7FA(>@x*/rNkeB{r <=]DhC!p\M=9xg `gjuçVeC @ͻ&3) P!1_wN|5:6(Kj|Ji! Mbߑ.s7obw eޥc:~3⻮\G c)N}Lv-8^3-T0C4!}sö|Q#ÄȀ{&yBe!ް&BQKOU$eqSܲ;>EO1#P{>y<?ZƑ߻"SaBR3F2֣ϙ23i[.&{!X"K&yioO2 ٟ׾(QC1qMDa5c*a&' e !pw4 xt 4udΤ8D`kYQz`zlב yAGU^Q6Dsޗ%0(%Se@ snCܫ+Ȯ=,Y!8HLw!F v:@ 5&<\"7]qJbl5Ru?_dZ˚wSt -\]D 7? NAs{5TtuEY.whnBH?F,k=>W0^h66DWg0ìuMj)b.ظB.Y/ SIP1pl>gpfXiRe+M3%{̓'ƼQ;[q($I?#S6C;S8:N:D QrWV mBԙj:dHJ"= B)gA?UWtfI3 وA`],)'&^BsO4ڑ WfEP!pNL̵ 'lw{;?ټJ hBӉR`0拱.|@z?˙[ݸ2pU/kwyg5کP>,0D$BbZz=F \f* <4J(l24z^֣ꥒYzkA?CY*ԗtmj+5]i@h j .eb ziESw'(HJ/xvuUn.gʭ3UFu%]%睎UsӸggjk.N]j`ζYL@C,JT:OnbLB :pZ'xx(BܓүQ*(({&me#jZ"hK`ʔ25Th.bO4a>bz=h%twy:*ikeID1"8)9˹|l7_~7ZA/c_D-M`Z$ 8dե?3$I$EufdJuI 8 =F@,JH1%m/; GYYB.iR:`ʚd'FY]:jIvM2j4@ I<ԙ:< -n9U>$t ־??g@ԍ&ҬơE$Bs4HΥ J@AfJKg0RE)eF%M-/Tۥ[*|N1 >/ ޳vr;MܗK&FKrReۿn;Uq)%KretU{-cM X%Maϯ7E?zDpf `(<. *7`~[)#uOk?e9B <]Lʴ$ţ߆mkSq֝%@LMgADbM2*=j%&0 ׋PTPTAl@U~(= c04MDUdFy[_<ō." (Bf6 cvIjZB@\(K{v>q&AHW"\D\8gz";8G1O?Jb ٔju5sTDăUBocZ [)XajA=A> S7RM0w])WDe2¨#L#j=="f `)ީ$7 ÀO+|k:WX01[5bQ$@ e8PR:DF4xkHWE3!X PŶ+]-)49;iJD*E!ioI.K}c !`  i4dQX" Ib LKi( #dAFLAwL:p݁p" LB@vGfkT'P 8Ub$[;DꁑB )ooB,-W(-IWm@ںGm"ͲI ` Bz4,2;9,,$Jn({œ^iU-PɹBlg 5&}0B~$1~խOAF.!C``>iD籢F(f KT^r'amun/fa s댬T5.3Z7Dq_  < a 3,0ǿ0B[(v|FЉgmctƩT"K>5j@mSg9Ԗ׏?Yݿcf E][޸Je-#$0.R3;XxJa[X%zIcI(N@&a{)c0%s#nqY!2zL#$/HꪣHIl78ζўA "=@֚(E#^JdftIаX[ܲbrl$jLnGQ$:v!VwE&p`aE{pT\@ppkIĀz^kEFr64틙hODǒtoǮъ.140riCw5 5E[i2$fUi4󶬓]*XcDBapOe:wdhLki1+uܢ*xF9srB@L0 @V|rm\wfv^EC7@4@X9>7_4NqsʣH)**bƛ}8DJ7]c|/s?,'nrѤ%#ZL'h^7N3e<4 ^mK/^aU.E MT3Zzk'܇eءVD>zE`!L= JRh"LD]d<擦F>w0Bk'lm Q")2vC,:M1b.cZBJ 9Zj }>pdA^AcDDrE!pL&a `4+5.P*})^GG8q.Yߛӹ]gH*`J'M$"iKX*#E&5cŘv=p;AŬ.{Eo: @ ! rŞF/TRTtaR6?17-%%w]iefC0|PTQF'ǐ%2Qt^1(5ʪԆ8ڃ b,F}[wN>vOkCD,_c6JrgAKhS P Ă?HdULEJH ʩ\ӈ$L=>ѰJ#gY$$X5R0!1ҩ~'JpK/N I6E) UFz$bhffPOoԭe, ҩ53X)*l eި]\UkwoXzmEk73Q!++k_GcndxGnAt'(/ #RQSM5Cы& :H8Чd@:-a.CDEN`'H2pAU*^ܣSyrKb{϶Ә%+ԹnX!(N!e YUP1ܥUokUOfvаRuJM27?LLɴbۓjA+$j$Zh>Š(LH4{j:IkiL_f:%w^7@?u, `Pf`9$Fr[FH< Vbʵ[u9Qh+~CPwNZ($JETf RH$6@>Ÿ.^kC coz.5(&NWb"*RK JѬ3#* 70:Pɫ|~DB!pK/LjEA%Ttd30FҧnKsHK/}ZS'\X*,wݷ-Y=H.O0 %]lm#,(m1ÙL22ʷff5$XvШD{z]̧D7A!"PAď@TO} J 2XSxLB !UR7 Ut1G9n$̓vZGjx954 R}'n_БFJ,pjjZnS9۠(a-$l>EKCr'k$Y`Vk h*'hxet$t*~u0HLSNChˈ؟}.A^IM$ƁAf5rTDDрM `[F8T ,֐DmhZYIB_ubBu@JVv*uL$66M-=AT hSrT ˖DaQ5}_eD5C!]jag` kXxe* 8O$~1r'B١%ɜiO"lDS(3L ޱAC90s6?|hTEm HgYB#8"R&l[AIlX jQp'+c^+Γ):h:h!C@ɔCtlQl 1VWވUH2}DP.aP A҉^ʱݔilW*|N0$"2A!R]-*/.X1M\l ZܨƁH@O9PY"@Ꞅ꾐 hNM߯ɼb̳D#h]Ga%]a #-4 &d0F'_!^t$8q`#׶dڑCU]ۥv TwA *ك^ ƈ1,G!1X* U\HܫYH@`w 3-2A W 2&w 5H,(`H%dC!ͅܞ,w>?u+Ḛ>dv4md2H.rh(hWN_,!]_kXh5@@  Ń&C65+ɋ3keUY$Nt1A;HUM=N< 1i!J1.贕m*G=҆vKYz}gsHv>S.XU ,=;#'!L9)ytϣavXDP0!`'M=YuK|gmh2($W`@oXCV2-ϘswO}i10yR 8N#16j\((RF9] wҽt?ִ᷿Я}b{i*OfK;g?$f\7{5I %nQ$c-=AN3Acb~ıc\~bI܍bDAXTp2O"#wXŦTfUYebW̩EمkpgŌ!#IOj|Qy|?36XYR˻07n8ͼ3F w+z0#疧N:mL`FgD1MXDN `{IK4q8)5 hrKcrm mxB55inNMX"D %#R" @iYp"@ldiΚ:oO@u> ^F}wU%aI]SQZ(|h\xP@s2DD`V&OM G3i lrR0q5Af)LUkM "\&moB4: >9U)ۊ"ぃ$4@b;MʹTTB0ҬIEvlF4B)A8(@`@^Emz \]Bd*kh*:I).dU+zH]3DP KCq8J/&<5XcVôfb?iZBܾ-F+!ӪYsG.UYֹh#\PZ"gFvBD!pSC=ǐg`I<+ f~(]nt>0EXxe4g'&e(\Ն# "X~ŧ , AK.E|(\(J *ʱ3I!+n)#6L`Nئþx3YI W^H@B\Oа'${6?]IKα,֫.6TOer@\RN 3sbUbeB&!?W 8e1KD5EH!Mi=%j `-v+lc6Ή;;Lt"Һy=K+(E(Kآm,XYn{g~ mk7.kk.e-([A8sC .g* 4#Dq[l1-iC%:(x,0A4HD|֑iϪ(o`ODyDZP!K=.SG3f 6VyMBnx 1x2\q#4P3d̮qƵ)XuXu1m=HJ5w!*rpBEqZBmtoiKQJL#S`^jlBJ09Xj:jBrlN( P<%BZXI'A9%|0Ra?v'fݵ @M%^;[! |f\VX8eV%x6}cZZ܍J.+c7_RϬPwe#d%e$aj jpD,C!I,=3D g'' vO^s,l~ duZ"j (2-w]}599Kz[]1` I-$#7bPiڏ=sxq‡eesk]}§[zXݣ5Rm"H!%-I PDYw78!!#l6h8P!K<Z]ݑ~ےZOdYUXEPhvvmTe^2&%~{>T M SI_"u1y$/}QHX pr 3Jnͦg6{66 J PADՀEH!M=, Q@` A `od;kΕDY¢r6y)yOu;r# 1B>O4M"Iv/blO&Su^jmq3W$D🉺8;T`pjB BHk4r;%|6D1gGrPD}#3S#)}a4 u ~s%t 6ݞV}!"\n&MJfޡrK'XSUtS"S<騯b;dJj#2X, o|Z/~)hZZM8 |`5bDm]䴑4 yZFI=s3aLSbR{bJQ#d|aP(DT b0KIcG-v%( V'O23R5Kx ⺜c1qT]FcG%@HtsXʫA1|/%YÈdʧѣ]*BʘpU+dPhKG~D!x[dɿZqf V(A~0U ՎY,I$vSb۔` pfnTsg_ h4TʞfncxI n8Mj&T(h*@0(+@6nQ.Qrd: {fKA=]nMiͤ2ƑR!dN4$#ce|uIGpNq}DEh!pR"\= 1t %t 0h^wDgb"`o6uK~j [ L4q24ӷMC9AYAwڻc4`$~;R:6CLkQ HTwѵunFgY{=A(H?u3J4DXwWf%&Af)i[qc&m )K24*%qjtFS]26 bD``!pZ\a#N y ^=e 2X@.Dt Gbqd&£ȚGpW3d~FUR[KX}V9nDǺ+w۞ҶVȗQ?*~9gf#EGI䍹%Ikm4d ȬN~ [gq}4zgUa!G 3(&H CcޏON66@Hwz!ZԓCEp'.#0?`IkD8 CpkMjC +Rh-@C0J4F$3`U"X1`aDG_ Y-Qt1@$'I1QFjt$%)6}2H]`*W< "{1MPd][ToRZ*O_GIfHі( %KMa%L w9wc*n2QIV`gfKdM?cX)vh z\ŽroO1;+ɘͳaƨaLhRK0gXsosɼ}Zb>ih_sc\}WsgY͵%P1U:hR?y^GZ-/h2cfJe89!<6c̺C8d~^bHge%@-@dp L5 È4Q3*4ydJsdÄe>3M3^~p ]4-0`V2hTF%4@C k!F:A}QHMń*s(!]9JO7kX5t䔈n`4m?UY6%@GiI]ѯnǪM-e'D5Bt2)XT \$G֕+e3Y21`$6&; t8TIPjX;JrPқ߲5Tzٶ[mz%W<}WcD %pa2"H 2d&Yf޺dYb  `"@$.ݭ1_@Hh@jᡖ.j`CE6ELJ^:0jaQHKx"JxӅx3qyV$:3yJM:`!(@ 1S5,s_!&akL9VM ЭQHsJ6yLEV@X stJEi)=LE=뮍ʛHK#&E/ 3 %lg|(*@N$#dmD x@ M!RŬ(X,˼Q*UjPEhXd=ۙ)U* =_ImOQ $O}.p9dN!K '# k-OcĊ-Frwz,\A.pc ynq-}peޣ]EZƎ|޵IZΖKcVJʈli!^Ŧ۵'$7J~.ݵĒDeÆ2jZNR0$I {QQXT:0|yc 8 Qa!ySdJa0`'" -o#wܞ@fӧuhz ]ܷg4@#D҂g%\ϛY/Ml=3OR|2! t)Rz2\C!4Awr%M$֋9+bS\qo-9~'U $>澔=J;{j5wdv9֖Vf5amlJ T@ɬQZm967m+=bX4*̫^e|%iF. S}[-W!K LmK֛ޘl/H,#a52kMmTjoaL)jd4#@ "/#(X Řr qS֕c?0!yύ2'&cӻ+<6.qYy*O1&M}kk=AgtgSY{(%ߛ9}U}$&yWs^7_2͖ fei]PEİ*5BFzE-cAŒU0ԝ&%$Fxsh  xE ZLAME3.99.5sҫ[e%ef`Pc}Y@iDRDDM2uH[^wl Æv@.H[=4s[BkU_lh>⛣pZk #)z)'X}cRCe@d* h:" <cTuW59XS~PL")ŶE R;\ͤI^%AᑴcҔ agnBk.qx5-ɚdկNWm1z"`H*rA?ToJ.-ryUYB;M& pe_~FޝG=Kƺ57McQDDʋ 9^"ih髷Lm\JWz1)B &c8xqzA`v]wպpUU%bܺF9q..PBq#>aGRR raD?>zThqV7]eFds*J R3`"n )1ȯ% GBj۠kdH&@F_(r[w&"'%w`$ j348̞=@ © ;BPQwg{f͖ۯ{ݟbZjgK+v$L7믾vX)_Z:(@  D͘`5oazZ[μQƸT[farVjr 4uX]4`N#8@GQSJ V.$U఍s( eAuȪE=f @~cVmͻERw&d)r%P7NAX5@0 p6hIȊ5JQM.V:\d8Ji0/ #8$-0Pç^{(}MWYt @r7Uпw9vh.4'[!Y4ړD!hK&+Z2*`!ݩl;,㯺B!$]f;vC^rH"4>!&G.\k=ԩUQ ]I&]Mcb٤PKs(f;K[fUU[MUC@ Bl1442áZp1!t.IYLX]oҲ+cF!de6Kŏ ivUd*%ηmhaJ1ݱ.Z.vd/Bsm&@ʹiIG+daA28@( BQI#l$kHcQG%7ŢnL$RTNA*,`جd36~(oL(,EBYK i$c懡6u (mWR:KS"DUʮ˝&LUM6Wkiea@6viN_KYK3n[+2`̶(r*r4 T!,_}PHeil<͓57ݼ71Teo76V>ee6=|c3{G ٧Z6)Q>'+0jeyk5D,ȉE*Z,tf.A lԯt Y߼:pSryi֩KVGQ.j؎Nl~q=chuj6qty_25'-wbKfY 7_آwxFH g$r:D 8݈1IAcEQ$\ Đ.E+ET"" ?m|]˙E(Ȫ%ě̊@45@+j$ngG `4vDF/-+azIQAİ3}ʽe܎/c٦_ @`9mș(jD0G 0rpAo3g*APv`ט"Gz =С5'vg?m}?x̀ /HgASDd]] + #  -vșcn!)b8qHPECTY5)&{- gHc鞢!4 @m קJ;}NUڴ/fK% D$ʞY)5חHD&Q&#*0K76М64,-4'6UT)%XMEL*,Ah{ OARzJ2HXEi>.Ev5b~ѷƓ ƔdHZs<`æ<.f"J1"!$o /ȱN d7cc 1P) ! 0Ȁ$$D$WkAwع,Z.v!)wކ U ⳧j8B6 Q{[!Em܁U"ȪdN*$nxZ$l̨T/(<{T.e @|o_f?Rۿ7$@ThCBQ d@zC 1i#l$ud0S!=_ 7NLi#bFtYamrRQdͮH ɸ(#6t@xz#xSaSx5EbrXeSg>K{ mMUWMW~iXQbA:Rn j>1e.7?*:"U9kҘBH:G$H&rduG#ʭܘuMV>׆lA6hƂ'J두KF50,3t M<ĚfW9oJ֩玥}kX[γqm+27-@j9PQa@$Deaݐ1-WxI\]ZD0Xdm*JiP%"u$0t"i0w'xCYHDoLaD1Vjs%<-|APnBȪҨcF*hSv]އv*V qCLo2ǁ"Mab`[-+ǻJ[^V{BUmU2f?CY{6kCGYP2+Y٦D҇s'kc7:k䞴vU`&I-S3K"}hK2u徟}?kEfvxeY[EA:ɺu>CO%<Rvp'KjlQ.HBRt,~h\B?/(=jH+Hmi̴^q J܅w*ӦidC2J+@=dp>-v1f)f KrA-Rqaa3s":tdzn{KX/WbU*@j}JQ,pY:峕iu8QTN2adžc3**FF$lݪ,*Y!{mtEHFdp',C\>SO|XA*\rHM$ cHau_]&&2hOX&GQCTx}3-":,j % >1ֆ&EFWj@e9luʜj&=eךڒ8 "SfTTUGmMX"v߲/dKac 1) Cn1k#eȟdRF!P|.'&x|EֶCσ%@I4T $}+>}ѽ9Zq FIyN+UQela+:d %i:)\ 831 DDdx"tIr5I*SH^&HL% <:pR7gA"-` F4B ZA7 E[pPwĴd<\tm֞+kx>v)Wvh$ǚkIbTJ  (hfzQth q(CQ-yj]U0I}ldzef~}K8,gqdV.|hUľ$]U5 iF)4" J(DGabQU rM(A$235Y\$ ^EZ "s?S\ ᇇL.v7\ԉ d31( \%΀c RP5hC1Ёbh0| q#|{\S6ŭh@(f?2#h6Ь*NDaTѮ%4(\f\")M]l~guz*VGWvJIR˓INP@+* .:*U O@MZ|3 ؕ̀J$֖F ,X/AGFEBj;e'ih2\ d?cF0#`L 0#z'I߷a48komץh ,%KưȕJys^eV&9i$!I9 B] &) 1l'K>rYTuh+_PaRЩ#}CjXWWDnT36;ؿ!ÃRjЕšJ>RUwU\D"%JؤL+wwZؽ~ndĈ|< JFrEC}u72k@K;Yݚ*t` Dqm=oqB ߱ާwfG򳳽b*U$3aP)uոYjݺ);B(uSĢz#*B!b+Ԉx_e*eK@RܢGhY3o.BEK1اӺ8I$&iMm$zՆˢd2cGc0b( "0Ƞh>$݀f\3RnPje\[woJ1WR[bXJ#+]>PXLdA`NDvѷM$r9Qn\&":1[S;O*{[Z,VP0~(Q@c/qE!e Z)3eTFYmMYQ B bi:vjB_YtE]LvO?MVVhweHAHXV%;'~ ., 9ṯMA R'EQf!@p6s@b F {*# K9Yu"d˾1>F_v:Z1 dcC 0`- ч 0cIFwEI 3ja2}5X-lL7l?pziS Աq:H?Mt Z2`Lx>'<PaI13O!nW^ex@qzn*7o3K)rй \hn[LXٙxE00ʿAd@{ ('` Usa+[4eR/9ͽIzlb^'NW! 7M F' 3ts 4V(͐=\ScQ=IZZjHv>袛cba*BW+?UgijT<<*QDܖ4%j4ȻֲJ.]4X7fNr%pE \4m-!)jC'\w} J?'Tې:Rv 8GSi~d(Љ$0>8v"5o%&Z#<:G7HeS, $<0Lw?V:V_ۢHэFd`G 4b- #8 - c zkQ2UH$9d#-K<H^_YXJp RW.vdz LphP|:&Qt9AHh-"ꐷa"2մD)4̼>X ESL6 *tT+M\<4|QyFo@̘"K&tI+L hU62@R#]"]v3wI\I"UeREGVX=貺)v~Un)-+ Uq' !g s%-vB9po8bNP0g *#%,=8 ̨jFh%$0".doBIa)‰ ".q 1!@4,5ey'I | ]tԨ~LPz &f/}F*_Y?3.!..hLUN,̖"djIM <ӆS"b'z<# Q LG VI( K Rf>~ z ZIRNqp:)#yJ}0MY0\jTe~>&v횛b\ܮmƉ Fs ns;uZcrR"FlZD{֋juSK?xSL H*4H"4 ]I= jkIظB mB5n1`Bd_Hc r'  ȦҢڂn3U4]ˋmr7?ZnfbgGrgqZ210`c YJ@n0Fh(eC ST4Y4d hVuA=аtdsQc]iJe 0L?CU #!T2eQs]Sv~BTL>l֑92Cq~3%5JD<{R;xGN1HE $A 1!YhNQ"C ?8PhUP~DEBqrgHCUQF)uNV["; .(d Jm<+ƠywE'#7 `/ĒEQeQn` "𮗒*82iFJУfIÉdjDyK,Ս<͙}U6{l$tFkwfT(c/=o[gRHzr]+X´'SۙcgK߹};kQhZ\5k/rK{ v(&ң2@1̝}$e$cmA 0>)=KS15|Ɍ8hZL1RIVv6=ZuyIQl2U܉"[d2H52_RXTC#4d73;D 3dNVOg b ƘyaIfw 0A]a@GCe:֛2tQhV#nYXh ?ކS4NiyEC;Bj^دgk.}()+Q Qv[_1bԻiM I}ܠʖ%o՜qK0}.gS,rjح|]M`[r!pZYEi)Z;^k@5`y9Lj 5oo8 [cW_޷ bm"j1bĻ]g72Xv__+oj'#Y q^\3|޻h iPQTzMmN&]Zǜ jT/(>XUWJ~d5$Aod9NgsO N}hdD0 BF>b|Ư+z1.bGarCز]4bB‘׳]2WJNLtP@*AVawq[WYі?Iĉ(0| *sKTI7ظLhmUmy57c%d ZM[Q| 9"Uu0 mK &f͂;Y?VM̤B,i2Auأ`~Yk}{DwGI 'B3e\l'bf +T)$iʽdzST+&cdLu1&xM(0s!:ܯp .R3A" }hϥl_M5uԪnR64V"9KC-8w8_ۉ,g / !B,VǗyJȠ˷D|&]q S|S] ⬉99&{~rx\bЃ`2~%bINi$w BImt3tmJ#zqiv>) i_ϕ!v-Xb,UdY֊Ƿa)-ucfha4_J> 8F`JArEոud` kH^UY[I4d4'`%  [ff<EHaWj勵oBm$9B-j-1:ZI+%fD 6#z )Ըr+뱳+VG8c0V:EǪU} VyweY$mK"J]v׿ocT2ک;.47T Yti]~ =XB,N\)Xa*qmfRt8tr1&O/+k.C߲hIZ$HdrU$.g쬕ؒUUO"%E/N31&R(@H4w;gyIfRd^?Vk@"Im aUmﹽR wvh1(;5 ק:J@PdXԹꢶwǻ)^f׻n;wbjk$M˵e%%#jveնDfr5r mHmbb"K6qV{+ I0P1mL[5_{|4D]Jj6ťVlMlkU"nBi', nEиSdLX^L7f].ekv x60&gR؄iꊶ_-\ZǍlyUp7XY[ I'- h{td2[k+L% b 9kqNxVP#  gg 4ܥq!EA-m i}ZHLnS gfR咧iԶXi4ń@ ИH@;y 'p(ݵN센,TBCS<@Ap3;3HcL%W'ѯWmjLAME3.99.5ʗ!YZ\E1R]k).5풩`8ShE]֗Q[PfZFZ>0E$T[IQ/Y9sl7Ʒd~U֛*IUԜɹdDQ!XJ1IG֡_dJQI# "I0Ƞ& N =`4="RΙ~57C%]oȹ.ͅ)` MI@(hdμh>Ik#9Ո JSQTpH3)ZqTus.wW{RM21L39~!%"B.}Ϋ7LAME3.99.5UUUUUUU_mq282KAsI1CشrocW`]T_55ke+F;]v7?TdI5)9 A1.&2Iq1B`$aI@0ȈJJ] .0&X B03OQc6I?LW_vƣjV&i߫jcns:|_ß+6HnG59~{=W3+¦?u|G%EvlÜ{蹎>k4z[UC?O dԿގ;bcd3Ks]=;W,гL蘶71p1I01~BŸ r#ļuf+ ms2jU]?;leU]JX]C9Y!dC\i5H=6U܀澌 dʼO]Vh!Z3SFjm绶q;u-FUloLJWo 2I7fܾ8ױ[/?\FdAA ̞6sda ĩ+ܕ7BW7G5k`H=~)WL2 #n L\H;ydh i*kX.!eż3(t ֞AԼHTچT ' YV-R[[+{*^O&te0Â_5M?r,Jjeiv^Y+wש5{k~h2y˭[6dIw .  OcesS?fj{?M5Jͥ- AZ8C"1)jB 1S`q _dkV8FqhJe[.=#΍)PPZH:wbxI<'#aT<*˥;?x1%~@UT\A*N-jv:w[bK"EAlXcRdv&Kd4HL4Щ2pAqB?HN{r].bSx$+$dÑ3ƂI`ϙ)cYR bdRPi\cHnj;cd[0_й3Y() ]s^,+AX%ް]4InZN-}Dim– % @{2MetkMŨ7yפ4.Ri-_ԓ󒶙9cYdo (pFQE@iX6љtpQRWd "NץU)@k0}D*;=5K 2 ݥv@ R&E  Zd>p.yc2yC)Q0?|1ߍi,^( Z=P׷r/[_fQWt4f*I:dD OXng4mČA'c Nz8rxskZ% CdӖD(j~ϰE  aM( iovlEZ7OE(/ui/d51G윭-hGs5 oagD9-,1 ed AXƣ?lWe. nj 7a]0 e4'(Lz\ǘȍ%4<= ڡJ.clG'/LJ36N R??D/ `At5Gh qgEfq (#k~߱] ȫP.i<ۉyo)\pޤ {!D!=&1ӧQb\}$Q ]4ԦI4=LLIFok3:Ϧlu ~eGd58Nc 3XLX\m }]Wh}ؿH5J`- mB8Iv9QT5=66fuBܢ~.gFd J[i|%x=u)eL< x]}vfm'mD'؈؊8`f4 XG* I=ZoOgLg܏>z @*&XrƐUz; k((*|ⓦ:ȶ8"f9DN 2uݽ`YFx,^-ZoǏbÔzZТbB$UyC s7Xd@#@ <5JS. _I!qdǀ4< %Yg30DŽ$$@Pѡـ4n1+{G,-W'ۙ^/& 5Q-UEG9ƨqdʀ GZi$ Bpi Q0g\]@qHa$H!1αSCّQ'W2n̢i. uLes!"؝\E)$8 +*$yBIGg]݅e-_;J9Ĝ<_G0]TYMڵRB`Ylr$ JpRcR躡K&UE OE h 5w3 dfk2.*J Z1vu[HBQDSfZ󶝓p{B"r(a0̵O<'Q n1>ۋYBu/k'?gz HHdE +\" m0'~Snf-.a\hZ!P̭UprP2zCD1\TK`0Od0mqJ(:tτh_֌C58yV.#}BVgt'fmI%N;!Yr^nIb;?YBT0F;]dD!KۣC(o_e}?uLAME3.99.5UUUUUUUUUUU4uH.[Kل<7Nvqt,k +ǑRgɽQ@ZP mK^DBӞ#&!X!Ձbӊd!F1h"2TMdQRcF @I=Ȑ&|mj%sXDin4-3 MQΣ_w7Z/uʱ qph)逗ì9V B?SOBŠ!J؁ Fѵ%;Bc7 A0>NB|L3mB+ΪYnkLAME3.99.5UUUUUUUUUUUUUUUUUUUU@h{:[o ft\Peٓx"Ne|6*5"I<+S 0ךhPMd{A#Mm:,~JX*( 6d]V" "A[oȦ&| 5\6.F7sG K9VUTT@Wc *@쫡]\]e@)ȇ X-G9@.ң b p`Cae&E*\JT)b|Ά1,DV K7߶`UFq4Ü3WWu!z1dW^wn]_ULAME3.99.5UUUU@bB_eC*ոe']X"lEN Z$E'KœG HMU5}/TXMUer="M`[*B@˃+P4&AVh8$jd$>!p4`" 0aQd >ITS᫳Ebu[]$/{ڪʱxIj3"D)= fऀvS H)O#@i&ӥ5R @m|&F -j  O#YQGձ4[c@F*I@m8"6ߴUDLAME3.99.yB 17UaJaCy !e1eNjS)O2hϳJ.@Yݘ3DreQ1=F3@Ka }لfRݚKmǩJ[.UUS_WUP,WdXsq&y}d%?ҡ4p< (# ԥWQ@%x1ugKmc %qCQ R<OF&p󻑺Hvjq*\|VS3&LRlisR?H_k-ZA\Q!F |ͮ>g]iM#wiap5UoSY]/b&{iS/rnNxc*RoZLAME3.99.5h-(J2 @ aL}ξ $i0T 8"`)΄Ca.|8|8[JQ u=jY\'g,H,>- J\UiWvkdd .Syx&` #C+ zȫ'< c/$vKwz髷+޿HVKe B,Pt*M!5,^/?K20X% ǖQjTpDi{e6Տe"COu}iݐ~{/cTNǍWeH)~=ڍ\5龩:8޻wQ=U!ԟ *f@HR@8J!S0aLMN)>^ J@*B`ai@R3@@S0rYtfc6hp"4\_(0\6!P%i0,,Z#x6^.Zm=, 2DNM˓CdTOL+p% !S 6 :z)~kx{ɩmR^폱y&ԵAE`N<%oW6?m[(˯@#dh")av ,>1r^=~hޞl[6q@ *F%EfNۜNz$qDRToxVpSWK=xpw*U?/^1]M@BJvMVD ; CwjI豗߭~ Z "e"V+-}>a -d4ύ`Іj1dR-jVSÎDQq!.i"!3I3rk]] Z,A@@稶wo틭/e޳^ Y8h,yޞm>38S+TL*nSE{{?no!9t9uP>0:DyBC\IM̶6mTKa*9E ܑ:d Ir9 C=HmԀ~d}>7QAEDnr'UH0?$ 9|+r:++I-NhN$hC=H٘ϸM=.Ahmҧ,rߣzR#ywwfk 2N\Kܐ/~*0"&)1sD09c'^0p P!0+"N@P Y" D-/@qFh{R h[HHHkMa^3}2;)XťtT> /tpL2OfŢx"d-DY+\$ XA& o瘵p< BF^W<%N3v`rEa4[]ҹ@ opYekqN?_߻Xiaޑ!IE1q9a-=~n/:pG:3Y;] i@^2b7u4d]v3.P;ʦl(BBaتZGbK{x站C*6Da XK֬ Rw:\DL-]BC /gz]KvKP=wDN X1Rf >1,tQJ#96j_?ul/fˢ 7.zU587ŜKd0ZHK!9} Mg-.vP0.iSƀ/u4E V2 *\Z&mpn^SuK47谀P͝"/jFQaf J%\[#[J\0}4:=EÝ!ZVT^*QdY.m0忣~t(4?7xӠ00~fLL!i=L 0Uh@8324 "gRMA`Ks"ታv0UC4eR:VJ/+P*>3qLJ)T1*U:_f ddـ 5W%`9! W0coau/Պz)<+cK).ow<;9Ooa]Ni\ YC. Ql=aMhWA.ޮ>Cz8ӑYIHQh" ^ɧ 4[ !-w(SBPձ }j,%u+{fR?}=J{7U~+'(mɢ& "5k᪏ŊcɕC} ,g5 ]{IG8+Mw<X!C>e݋dRs* g0dcExeGtA= "f#Eؑv}# b%T/RY:%)%ݘ#Oh-5U@"R 3vz+׸&r80g{h7$>wȣTI"=;jxf7 K7_Noۣ?xTV",Yϻ'j'jZyX#1|t0$(~Vs4v4Ha~>ְЮ֏+D @A.K7-}dx]U{K""}K0Ȣe~zn>%aݿbIZ/ YT[G]?3wWVu^;Nڃ WId\P*uFi¸z vKO &< 5-{ʑ 4u 3f4!9}BhUVUwggVM eĴB-$YuoJʗI!8蚂6&E#Gh3 I3JFu0rX1WJ7z{H@0T*Lӕg^EUa?50#'ksu?qt8)=}\i6JE`Ct7G}v~^?5dc'V3"@}C ie&\M"=)D[UkWzǃM閫MZmZFjG䤳āȺTd x<.\|rQ%^cs'ֶ~ܟc{'f`aNb^jI]4L7STrW֨HU"bTޔe{huY]i){+.LAME3.99.5iyvD$ V𓣏pu<1UF-K 0DJNq-LTf}H6X)<4at!dIzQ3P;N5= !.tkH(dBXy' #yLUȯe0wiޤd9 [d1֥war󽜭Hչ/Q2r{]Ic.\Rʽ+d*jn$ nGCṢRƉ.*ڂC+j{"PZFBHfN,EhbM61.yV._%Xi5bZ=_G_wLAdLH"vR>xljjۊw9/ `QZ}Y-l̇J ,nS*Lv[%Š(Yi"">1) Nxb1YCPNU2hlXi\t=< $<ɭJS53k XHqd`U,r, "J il%0Fr_30ʠ[":Jh7 Q# q(i9@*g8Mܪ:yVXw6cUyf-b]<"Ai@?#I}*Q"ѳr'9mP?wkKcN%;rGR!(.FF8t}}}5LAMEUU4(PJME@̓@ILtlEE4A,L$ 4&=y& vN迦  C&Z'+TYԌ*gq!%~bs]}}O eWFwwNB*C2u#gS6!ҭ_dC!;A$"Hu@'<}l$}%0{ 0!-LH4aN$`Ms XH^pK"D&W K:yds]ٕ?zP,;2Qq!1!{X<@5H/ <{[RM" sm'&M/J*U\o;o1(Yw~LAME3.99.5UUUUUUUUUUUUUUUUU@܌JK3 BD , P2v %tt$j8Tb=rMƗІk,EXѢ=#]Q$ˋPP<Axv#i6|ό^'c{-\$Ʃ,FuTLYdBRlb%ICUM В&!Ff€߯38Hmr!Ωy'K 8PmVK9U5㠐 }:%%NrV0延5n'vd5;G(pAEuJ5 }[nRpk9𓘩j"dX BpA#yUbA 4 0,ʩ?nF`Ie cs MD2yrU TXm4? zh@` E`IKa.Z=$& ؚ7n:"{/U౔i|=dS[M 9BoiG[8< ("BTPaV܂W Jt>{;(~趌LAW8@Tufc 1p @%oKwt P. (frDdPCrEȭ&e@ā/-fmf&"EhfdOTD f8*cPGwxvir p-s}C&-BG_$ڛmĄomI3P8(qƔt Mr֋J`3H:;F!!& )B=ה(V:-iƘegku-*i! fnX>o8SdL΋Z#@9"`w]y7܂H&!bQk5z˸Ov9g hQdTXC;؍?jN_G\Xd#rA,Nd !Ss.{* qC e$"6nd^nk &Y9ĈS'JڳfXmI)2G`:# [F؃ u4&t]i6_}/}ov? 4ߡd$ Q1IQ2fEAi8 -="y˲$ ꒠B/ R/fC"(,!sv'S٩Z8f Vtgmj(R@>om zc_[_3~ZQ%\,¥\&EhCE}@lS*O6M4ՎOB`bF(p)hjtt~\)I[$Ds[d31TS)@(9#usV8'4:]@ѿ,ac.O!ӷt"]@ZIMmv 1j#Day+3g&rݙ$5J< "HoC@(j(D:+ QcbW`cՊa@ؤA‚yu$kܷ]#MHuf-bQoEXwRS F5Wh;b*p,T F4]L$"G Qi6`l R[gAjWg }u?wRE(X6ھsb juN3ZLjGFeTz71"LdsJYS *l$IC-Ak!I]@uKBÇ| *$ZW0y4P[3 v9X2K{z.#,ϲuzWr}g8o/gk otԕTW{,XVqUs~9Mkw/޳ r,PuYc^X\ "!u2,'JK'MWvԚk5Zq` J7Lh=9 `"%1a`AFCCA9(A9((- lD0 ސ c< ڭf _P{oGcۋLiI<@-6RQA1ִMhh.KDJ h檲+H Tw珋A0j)1$]vXomdH@;%clwgNzUڌ~`0:ɳ}Fn4eXc*ʂZ0L78]tZ) U,(/(Q8MWw4Q+u5¼LdI;&@"]AM%f!e6Ck,&}Dٺ͠KywgSL3]ɻΛ,Y+ V30kqը*EH2n+u]?V(1גQa¿TN 6b-BAxgA5'nn3$@WϽ߻UH ,h "r'"3Nj[2^ѳJlh(WW 0݇AI81S7:L>rg{=f"h򭝆;";kf{uC a1/e3l*155jPU]9b ,,M'Й dހ~&kL!@}# TQn& bHa"[3sb9zAHDH -@1@GMN4Bs&AB5$ \Mp˼iR35+D+@3i0d,!+*f0=DHG RȩbrԕhK9/ꈁgzb7B @E^LԽ3'CxS?b_J4ś=kC]5l c\?{Ե(e!$PCO[ $"`>xI2x]wOLAME3.99.5)gU5GY=RIbL,Ed_ 5D D*-UYFgŖHXD> =Z|\Ǿ*쳾Y+qI+L/Hmg>WLAME3.99i;`iR Z.)bNARh| `FCÏQ/zJ %@3̩8P~5CA9uiui+ۖV (՚Hy MpܒV6(mT ok{\A‡ ro6"8F§ ! E5dӀ%R<* } ;o`}eeY#a5ZS^hn:ʤ6a.Trƽ=ʁ!4s+o$U1wY;+>GL)k+uy6Ww?l&s SpA.(mǎq'MB,('^>K6i %5jZ9(:\MÃΙLAME3.99.5a髍#"QFeqzgk CLtĐNm^펬O yYe|g|~IVچvdsveEͩb_"(TTIdi2@@#<1͉#0}5G8abJY*ֳ$(y@%*8iV愂nA m[Q dU7Az|<.֏,0+sd ]c /@M"q'W#k1Br$5+QΪO A('*#$H Za>"i'QIevܹ6ٔk\e/[K ڽ?F0T맕dށ XaeXqc ︳3Ww]B5bX^ @L7e4'71} E]NrfZ>_ ;-t FF0|>.B#!}h6N茅U]HnDiCn` 8ᅦ)tD1B_k54媗ٯ2lϥsm܈I?$ <%;#+ԓ[PaVV<0*WUa Zkd`$ r/  #!o%4 ,,ZAZ:(f DUb<*Z,da"AXD-9dfSZnnYtm;f5Zu!DZseAi{6sDbKFb#Dʹr]gdRG.t-(8ɞ2UaTg01VĚiyuF|hXWZWGN rQF(ըE @ N*,ONp|rlo(Nw WDdYKԾ픖=.8eLrețxfX!Wԕ2Of){ie§(-=%0Q9~SX@YtaL#l >1 3d\ 0b*-#eu%gTϪaܕ ^)$Lhuh'fVeaqPA3]"p6mquЎ"!涽[yxsQE#(""v4t0%qZxݢV=LCici[mdXUQY֜Bil:w%<_ܭy m.h@ -\/ќK'+y ZU !@Vzd9.-B2%aKF=Yv/w&c2)w]-d.ۜkT":۔A>(gM^oTK# | +1qqh('[d(b1BB". ĉ/0o@cΨ*JEٲX 7\YǀAz^'[ ̠D2^yx 7ԇhm 4 vS>u$,U/+ȗ~/%G!yK"4i֑OnuAd;mI Zr>+IOC>6?*xuvRGdb[qV09u\CKr!{QFx]}|71\psJiG(Q@ Qʇ p}CDV򫲶evʩ!Xni%"xNf817}%4Ѽ-5^h~+of8_v: c.4>"fg+ *T֙qc"PV}sW䒳^SJFzU"4 9D\dN[`J'EՑ 2]YOY08#1; QVpbi"eMGJK$Q#'z- XRȜYf]dMD ѕ8$#|8 Q ў (EF߄{kx 0̵µd'KhaVi #Lu !vIataeiUq[Es8|8{#>ƫL_9&:ڠg ;D!]z;9U4ä~aFjMKdme6z%Zor!d&a $JEI0/ԉؼg`m{{fqADh ђc朻SYJ/' by(ʩęD}ѲL)*qi_um`f"L.-92'Sg]'Kg)S;\vj7mPmڢC0Ć5B &Tc1pr:xDc&NvrOZw* Kc3<'{7 eNWd`A"\k(Y Je~>ZM$lke52"Bt 5MkN&q6;ﺞǥܐC<9djg(FB~n eĔ }Vꍢ)ij닯u#4IlT%"DHDmEcJ.f3--I6<ތYmAGSؓg?1'-VGs0DRTX9ks ouC*DCS kkͼsk|5 ncZ{3Fkd2JSzr<L+4n)43Yϊ@`I[!eWU%ٮMXa#5Q3`ȘީBhK~d݀^!\i#K) Av|0A[yG2YAKtQ63IHÁT%?JEI22@hU 9iSI|B#j3fJ@Ʉ\yfk2I^z֞ܬI8Di"D3hd0r+`Ͱ\o\̹GIK.H.Džunܥzά \ ɍ'jZM+wrn5u#]h+ʤA\O=^%rE%YHص qK,#me"?kO IB?땓=z/6jA ç*:6j@G=ÓXؕ"l57u"9AVdYAf`hl #Jx)d3YX뺙hu-wЩ8~\26'ൻd%#zireC%r%Q Rs [{;1JA @N3THten~Cs.O"ZR1~ Dwu(;aa m?;a%i(JFH z_G,A${l@eڠMW0++WFb i?#)3#̜)\ Hwq6V?;0~4ُj{ڊ{$3j#eE^.\5 #H- Ͱ]Nr\‘,fL{$Լ̈UY4dwlOa ;1>Ud.qyQ6G`47*Mp7;i3Ui? rp< HGx(m?dV@* rg9tgnUv4q|M9UYr 67SRQיR'jnYnEnש&=KmxX̭O(&[Sms(ܦOsKI I,̉OCR1JI]r1ᔫ܉|s-3UWڲ<~y f;Ql"n$J*8HINClB~xH.$e;?NLwYzgo̮tb!+i'Wd2HfYFm âJi} zIo3^Te#r3_E!XIfdxajaE8E%RFN+A-P}$VY_s|}Ro]ҍTm"m%qr>ןB Ja@w͈>(pI\,)OOC>151̋լ-ۊ^A#v`BpO`yƄ| +E/Y1QMX v/h32g1XD؄&/i': k 4R[ʱd: Y4 XjJWrziʔQKH)lW$ 4ҫҋdgDt cЩ*fE/OG7da 1lT|]J[H{IFօZ]DTگ0U99g4\#k l>`?hzr2-Cսơ؏*Ժm_J猏KW'abA E 0뉵bXh"-v"kNyH^ZQVRT5$s B<ODTdY+H!`K(C x "p8w Z$M.LFENRX.&yhUM JV8SD|TjbŗL bΞ}̦ :LwJVԷ1s} 4Ej P?5A8;ӇF$A'l$BhIJiH!&k;ל1SϜӛ+pXI >#x>)7+7ˤV*$&bd-0!Ӈ>LFXB ȆjK#SLX!QzCq`BJNbcƈqĒIJi[Nfdȵaa6mC',ؼ-Ed_dH8# k !me,aɰ-oK= 5]/m}n@80lXwxjLH4&Cj?PgI i4k)KsyξC֋(=HǤH[h5(vkč]mL&9nj~77>r̲:oƕ'OR:n&JSC ?}`y|`F*I(@M NMaF"XV c5Ê:7M0tewqdti{g9敷$3? {'`k)wĐ?RH9X˿dR?Π̝Zi~TJdb{2d:6D`!pT%؍ L ? aIna3lأX'T]'%u˳/ U%zPb^2[bwI4f;:Si@aLE-<룯3[J4q`{-3Ny»EeNLDW 6>N qrHIpHWue|3fٽп̭B!}dYC&Oh "KiI ~ @ 4!"-B:Mt)7cda}źF7MHI%7e1qb;v:>An,Hp ?HcHvzٝ8;3vzC27add_4OqG RUkdV$xᘭڐj530 (CDD3DT) _ ݣ&~`E@6Zֿ[~]^*,ҋluS}<1Yk -7j r^n {g3:-_&J'W"Fudqџ@͠ TSs2UnvX5(jGH"9߽ϮqdFBHaXx # M7Md0l} ;dY['JCͷ0$&U;R8QbeHo+ 8iVC:-s62)zfGvfozoLyH\-1Z+6*CXw)7">f_!=6P C ab3h$㵂G>}˵YN{ؼ !yHǿ#OVBD]\x #`5H=?%D;`侙']#[KiI5i%0֊AHdkl1a۔clR ˻ ܻ U;x=4 q3d`(#2IXybK)y x Oa0P}OMݿJ wl Q:O tYP`\g;MZZ" q28H]\jEB2)<T[grOS$fwR#B+>Bg蕻-Or"?iH\8|my!\ghoOK ^|x癭92eoil,WP`5,h= #HHJ{}wD9h8}xԉNrқD$QK$9Od*ʄ,ܡɔ?UҒOXGU*'"瞉݈US~R񚊽m^EQEb"d'aSH#>KI} `l,d3ЇgLc)ƇեH|6{ٓ&H&&_&*ե0Q`jߘRߗCfC:SgZ8OӼNK}TJjt.as~l}'msșlRaLD+qP])/!cvϓNJf{U!eH$lCb7rʙhp4zW6XD6D5T>)-u8DS ,^R7PX ,o8tBrϔ勢M3W+-Bk"L/i^SڷݱZ|b7g净 w@N@|ַ]{3.Q!dHD2S4?Ea‡y-du:4 ]kY6dѥZ0t@ʅMI$Hm$ uRzEݗ>Rn˦Y AXhs sy>< L'x, S ƪkN2vi7'jiOx6]8%C3T 4CggԻG[3əZyWW[/Ѷ$L Ϝ@.VVE@`&d]bAKaej %Qes uiyO |W8#PlBʛ;*t.oyM3IS>8K{K)B%zϞI#-""%Yl, N1h2DnI`@ vh}$ L*zER0RbCm6 +fu\GW{iK)4骀VgM& ~gM_M.ɹK7RXjnlqϲKScv;Ycj#<RAUT@ Fh}okar -З.BӺWǬTXG &8 )6+##(Hd @-oa`!9#QXf!]+ʣ%= Ԑ~u>sROe>yQ Y=^0!_x'kW.*:Fvk$\J丣nMS|>rd6R? dI89;@&<$5!-&CII~3YU7BVv5~qTUUX:U W*}L vY*A#&mExId!CXk +% x=s[L$؏eF,S AFQ! DU(>`DB| @ȴ$x O^r]eW @#RJ:dK]ҬeyA"&Dd)xƐLCv ۚ6!iҐ׿S<),,O ; yg'm꫈:*cw7cqB#֡U0vFv@$F2J|fl U̦iOP(*ulX~b-AGD5"nj1[#^eWUYm1 bHy2úJ~$pYk4Kˆ%OjbJ."=! 9 @ABhXf(IJ  *i'hFj3ݓ^o9 M(ml4" ]>pE hkd#{-eW+WUM?UIvL% S( gy؜(YC&ɍWio2س$-(=$S+Oֈa b"2~"9Ў1Qcd2[F(80 ĥ_i@!ɻͩ@JH8b,QaQ/0?~LFhݣ֊Q_D7X &1apxRC*PyTlz zh0y(*5t zr ʁD+FvzDcY'Wfv vqg1/^}}ԅow#{^&K[OIx%9sKzIsHƩr;8e{̑ujO?GZ*]Ԗ 3nIlêW6M,t${@{y噣~E DL4-X2ODd$ 2("9" Wgf!ȯBApzj}5`OQT83]e5_-o @S5\Z6@#K%xJZ#6ި:㠶9 Bpf,1{t#*ed' 8M4Df'&|% zπ̼?]$<l=:YrwLAME3.99.5+Lb8 ^ Nuw!-bΎo *br!ɘ݁/q=9jt %i IV9X|VPb#(hV*xgEdр+?V% Yl$b Y0e@| :m1 i ima6~kUO K)b>-r7̃Н#'@DzѺX׊qBn y1TN&<2h(٣2ŶuDofNa0Z]eoNYX:Zԇjtyꚟr7XO8˛kQ);&t @ MN^K[UBCI+m[x Y'iVRec?g^dfwkcTZcQt{o(+ 9VvVPd1[,Kp$9" ̫_k@c61(ڂa3,3 =+Bx˨P%QpeX UTÈ T֕G3:D+gk~+n:2~[F!ؓRKm~Grcrw][ޛַjYcx5%-)[ܪW6(z?i*\sjkֲsR Ab Y+q?U:%&Ĝjݻy$7pSq4;R <>Z=:ܩɭ"dE,y7hX$ܭPpD$Nd4GY}= ߠM+9܀' 3i" r䳎Yշ+OXŚ\)ٶRaOOEzjI%νJr ,rM* mjiI.C~oܦ#M $A$ `qAگHSe@*Á3kK("Ql2 =r~1L#RQ|P+y:xYG#[;X~=~z88Y&/X^e~$&5\c͖Sk>ViwA6N;4T$%ł6+6f6'kBqۙJ1Iڠ$5E--S^]`dڀJno O '0*,L`{#wZN۬6duZ<,Bum})롿 #=+^W%2gl24G:;G$\^SE nIƷ/lrU [7WdR0pLzύWyLTlPtEN^QUA_ 4 8~)Y!>WY NGbb']7E#ѱEQ37XTUvX>{.=5Jz/ӳ,muaRЫ)H* a U$Mg|+M:pxlr]lmίEߣ$O]0 t2 0A:}vWlMs`TO3qѰTL9[rfwUpmZdGͻa"@ AEIU> 'tߺܾA3k\)}e0ja#1\[o)5+?X u(F(b"`%LZ <ŕ l^Wt@[o[erVu ,`YRH#g9 V"~efaCQ@ՕBzA@24U,~jsj>ԑXC}]hQ {¤1?d[o1蜸_gS׆nWgֳGR,]ie5^=ۼWlY Ȟ;D5o ?{wwQuѨ[ x+dPOs .@{WӃ%'pಐd2HC2\ٷ?IU4O~d@r4bj(H0|2`C0JH>XsAv0!^n\b!rkfbyBf>4IX93- R0Ԫ#E"2M 7WYv_޶)7Ik5ᬰ5+oX& @nP]#H`.ïM]*YO)?j@M4k6tV;3LL`RA J [G YiF("-$pZd(- Cd.KUnk 2i-Yf T:+q^- 8e";z)dN|e]#jb%n*UNց4$Q;4-ipšⶽҞa+ ]@c֫v~O5>yp-^C}c4."0]@S.hja B2SaTMb ]4Tjk.@O4CVRLm1qa 4Iμ^ؑpH_iέH:2\Wo vQI-iÞrXD]cݷrYyij׭3cuإ=’ cr:~WdRIWncA,njq+] 0K+_4*%{\<R܌-H2+Ƌܛ\~y-^,a:Q>XzjhmۄT! NYDH1ҫr2lp,*I# bIF­ c:&Aq0I*J&n/r^6d v8vH ghFM1^b7!!|RѴwԈAUfk7CLK-Rtmb@rh Bp4hEhYptvo eCK\[eoM2*_G1EBTyF!Kt҆{{?@`6܎[eQG M-R6KW !CI1x@z8IgAV _2ͿljtMU"_W2revՇ~-b>5h`~`Ub1`$q^&FS < MdԂl)Us?DLsmuR3Sw\EdLC[na-@9ÀU!eY? 0Tt篗-fb9 $` ).77!3~n #ł>JGoD螽5XEdm¯Wj[oƕgPW a`$K,@a ALQ4kU-E3v;5OeXAu,t 2*$,s 4ei=qD;pƒ`K1 Eo^WY5@`P=lj\t"A);`~g> @9 6 &D̳X 4HwClo$$EދOw޿5gq9mh&zXKXMT8DB,) #)EPُ9 ㏣*˧nV"~rsI䒀!`q*GMK5ڄcSMi:\VOow CLdJ;y8( B tYO|1h#aHW* QX!0u3 OFa8\[fudm^׋_#*qfoN}(F|"kZ?.e@&/SBx[]ջ}~GMV"EBTB* Q+`B+2D-Y9r@|"Yh \鈜@`8.(D V8𩃯I7R}AR-%>-I:7 B+ڟ+GV=+Rr{%\X潱 4('1Uo'IrMTgSkVt?O$X[$mM*KWdv k 1 !X_1 htѣ걟Z2hjjKW $Sbo}i%&l=(J3)hKOtOhTA+ʃ?$hL$p6݀֐I'r.gX: >_@;js Ln mhSRhQ Bxg4 WhMdŻ}] vd"J"=/hXWV〥G_kU7mAP< 43<3R dל^ '"Z Bر !p9#`d/Y ;l!i\$f WU'{:n!iuHU3گ ˹brȤJ-,FqR /*["{Y{Ƞy0j<} d 2{a1fj%kLty?Zw .XIum@Xm6a,Ƈy,mMHBNHp 1BIڦhWÀ7ԕV0GXx~%S.`$ P܎Z5%29wdq! XN([Eo9f)@j2{;u]XHcznV(QH8v! 2~.O7oFޯdЀ#9ng *9LU  =.$L ?ճݫo)-m›N\r[CgY\1@Pnd8">A@@r脧r bf1VRo ;hGCN!ZuXQו1iLoEiwἊn}Y` h+>y[]j 65<f_g6/nޓ]^A&XD`I;|L=V,0I0`0X 6n @A]3){gV_gCGɅ(淬qpõ%7'5h*_/dAVi+IXmg[;nvE'*B%`# `0iAA['X_G2wI g}D9$pTA!r[p# @ix&DE,\8AW< ))ұq=_Be*ȋh:it"U|b XucCY}I7);˻TwovvÑP yؓDsPLn38tK[h0aqMMr]$@<l 1YB d\KXng *`\Ā](w"-|+EQd#˚f%I9|Ua^j|Qw1=V`MqcZkK"<wzD?-ORL%:?@%Y-]{ r c~廙=5PAvCόMM".ҍ6 Apq.([$]OQhazCȩ1͜``@OK[(OQf!F;]e܍~?h %/b$6lr;I%Ȭp8g:3P]ch!ad_3LY=+@  gGPg} qoб+W`&0VTÄp,r8\}ZFn}tG˿@Էf#%7w@>ENxL3ck6?a7:3̭gyLɵՙ9܃Nk˜ֶp(d1vxN_`$ 5@>Jl^0d8hUZК)ߍxBYXִ^u$u)˘VYc2VB j3[ "ZҁFی@_nVYݲ՜׭ dRYS *f ya )cGg<4 R#YSOl &XF7v£SqӔ*Yvݤ8l$c?RA̶a1p0tk8Ggs$A!aicG&I[D9iTDumTwm_O7)"o`: (Q$RpfƘcXD)&tQC@®HRBלIcȮF*0(xsh lR iĚצ+y~Sk?D]{MK/yabکFuP302kE٘8nt!@3OirhĕXS-/*{ <`%7b\^+dDDBF.HY]cIǹSoO~U?|*e*LAME3.99.5Ufc!\ &CQ!贱]lx*Oĝs<'i :0H$D!QixLN! ۮ_Fu V[ak= YZ9*Bw_D]#M71MedW]Yl6J!@IM BYǤq&jW-Fm !<֥z_T(5EZU;0dmo WtE BY\B4@ PIDE=Y&"3s.bBW wEO.1->|gz$z`X`ݧm 1KkI1W5BwqwEs!pU31GLUa֐:6ÞxXլCmbQH;:&*pxm[M>cÌ-z9/Dt"jތ H $hUp|w"!Z)/ڑΌUDD@RU2"Q $`gd>KB$` bV+%0 Æ1#I<`W{R>DX>iJKB r|9)/p[ QeB0D9ң@cU!FgZR@s #\4 c-(!a43b4\ !eDS-#SIm6n̖S*8ćRю\f10漵H߷ 7 d:PUpA`($#YǤe,ڑ"b{zOoӶC fAI$WAEaʑ +MUs'Kq@0:ooX=іGæ+Pp[]Or/ ǍUn,*f; UZSR149G-ɿb B@\hYθXK dQHjַ/K;dj>Vqp%` # JHeG/TvGŨ،Tm]XRp=/͑3Z˥~n=-v$dL6Gk ä]IΑ5RMĽ.{ءmdmڿ_=U6{ծMJDT%%Fa g$-ёeHMڡE"c\$pYo9PDK8H$D 'Ӄ0O%΁QeV]Nci=#H(x~!b"$#.dHW|M!=*oN{7=hw*(d7>,&m"_$q@%|u-m7vDM>ĥ Bs+뻪+?Uulw$SI&A(yaBPqRW5jۄ}/dt.q]ѩ$IO eC"5* NAŢR I)IZmd,̴kBo/hiQqB-TQFly|R  I#h]/)jcmL9mvuE` Q?z&CRO)9 ~0Y;.o RPRBHI/ݢOo,c:hFa%\4jzօrE\kyP9v4zЮupBd_H)Lr$@ "Azc` ^/ieU(\A.|r/wߪu-k^a b($uNwB]W g.wG~f@iq%ZCPHFa,n9#=Njv؅yv^:d 5!2%HS5ܒr"q=qRLV #{ Mua2U{F=і0ύNSra*k+H#S )~0՞أ򐈏Ac _aUX t\F3{#~z.erU!R!ƙ tgX9yoUf Fjœ,$xc}eZcL\}dnA@J+m:eSHA|Ϯ,QrUjj"4ۿofnNɒ7j /z]f'I \ЯYAaPJ_՛YMNxSѕD*o Ʃ|>ei ,M tqھ3]*;hBf${3Le əG٣_'-bxuR$ݚGF5KʼnR(F~ eRIŬ혢G*L?*2ʁ c+ {2Vf3dŀ84R *CHd!%(H6Plƣm,ƭɘ,_{ve?eX1 E.O0XSL>!kYBy[èN2pZ"i x#h^sU)k_c;A[lMP-S;;˸euvc[ml!/NK7_9Rorz*vhc6 P1 [h-ռVq* b{QiˍEˏg(W2A.5}(*.kra91awdZ (jӳ8GpxCÈꤪs|"T;5J &d׀0Q#@]=h% pۯt4.QR:}]zz?ӵoK˺"`4A< A}ĸ,r3$'AmčѶ0 ML[FJms#c1M˨x.spۗG9f̶HͦoG 7\6 yj(owxu[dLNKXfԏ%otV@_|aN8h  Ȁ>6ҳ@T(t7E"?<Ͻ@$;ob\+n'p퍅9XsӤuaWd)3>aHmsֿ d\FLk 3"l 1H%tk|mޞ[~G~2ñm4"z=¦@:cqP#?;H$ ' "S$ 4֦TZN)l#L2xrV(M] 3DZ!'ښi$PN^Fv,;` 9P1)Z ^$(dlXƕbTtjRAIm>-NAZ5.KUiӈV:R 77kjҹtM&9+p/-2!d**!I S(&'59Nq $DN@H"!N4lbX]yY UH$,Nmɒ\B!ℭIdK\ z% "%qҀbԑ iMWVmQKMġfK*dIg /@Ϊ$2<cԺ[%[M{"G#Li23# *K jxŢQḬZ*u ɘ#LB`ʴ(e HB|_rkNr $EmӤ^h֭$7n;Jtc|ToU'V}7H&wҀNɔn7Oӭ[ yw?L'h Y 5糟C9"pJPOcҹ ɴv4{J3z@yF 1ddCblIb+ "'M "DPԡ!h{e\cRܑMLFQb!|M$7 bJ]~bH(:Y)W]2ywwwv_}餀 JA r =㓉.`"hLt o -`CBaw3 Rqеe.ᗸk%srRk ޔ?^1]b ލKc.zߍۖRXZkRaO}XV%KZUwjwa߫{;1MyE@ f}ާEW^OpdԀcbEd'`(գwKd M:Xv /GBv9=2_{%Ek=}gYx{ٺ,nݦÏ[uGзZPi/F JRݑo g RFVmmAaJGH8008!8m4u)jϥa!QB!@xFfd6[w&)M{ǿZѩJ{sɸ(ԻtֻVexb.[߽/v1/µ4vԆi .Z; 51op{>VVJ,A$=nsbh`{UT^OoFۑ&dAB1jO{UCA.V0)9dZg + -+IYw b""fh(p"vV皂CKjJwsV-ٳU֟vI ԱE:1To rU2zj33Vf5Vy\٥]s k[U¾?8ı6% 6M ^>jETU;9R/%CN⍂[ Q7LvcCt‘ưɑ0r  PHj021t"L &Dh懲",-H|r~(1>N<񺮪J2)-2p|tc43e x.yMH$> I dP;`Jv$9-0N)rвI PMM̍Q2@YdCRv:O* -Ufh8KS:ڍjYoM1iˑ hacq0lC31-YX!)01 8wHjI50}eD|eQkaJQـ_n2J3Y /-$'&9rɱ9buUmEe7@z+~!U7ҡ}^.`Άyc0P J,d& CfYuQΎs{q魨 .~>Y/TH=KcqIA^To9E^*ޠZ,C'b|J_؍2~x*tJl!7{¥Bs63dr 7?QĂݵ2޾FbҥB:DQhZIi.Dۉ BL-~Qm*ͯ}h:I7HֺvMV`KX,*8JA4b4l-%/egorg !}1ZdlA$h^_Ƕz(XA3VyCjԾ~·id:FVS,2X= e,OpQϔܓЫUK *]6 ^ԭu/o]+AJ6.ۑ,,Lej- fV eËi" $C4xUcPYQS{|;T2W\NJ\-$ǴSlABذ=Y~S[˙~@ meҡV$eFЄdЍE9TTِtwj665AL) ֶt:yʭ}gk~,n ɽoo+cP"3bBLD<=Hkn?z?{+Ѷ*AҾdUOhP*z(P:d_Sg   EO ${0k1$cJ`">EɑKd޳oelj E{F6%0זM)rNeû rL'm ըjشdnI֙l}f߲dSgtneҔ)>gdS#B*ۈaȈI@)LUa2c]>8 M,oaY/>ASR%4f0<IdScD+1]eDGɰQ߬v{%dZ__}?SysAZ Es!? nF Biԧ|蕐sP1%֕Ġ 10ta\}[剟dFSIE' < " oDZ#ftgEDrkD uKa*~:t"t Pɞf!@*%FS6O\8Y g tiXi~|ӷQK|~Ƣrj8w;S6d365iVld,. ji(C&tR`!8ۺ淠4Zls~y3&PdVy&@] UGc ` H}C`k-TM^&PB3hKa2&[~˲ίO#^1NP}eÍ$9JwvCZq3#.f:tأ̹;rtt0 EB#1[FV~: ߻<]$ ,~*wbxe.Vm~קּnLAME3.99.5GdEH][C(XH0a;%sξ} SZF;3p XRa!N::&C}WAg٫GlU%Y Fd@R3'` ,#mQqIb!$8Q6yjS]_[(GSKBB dIf`#((ʄFoE$ =mcpRéarIK@o[v(AA,_k8jT K(42"Zښ ]e!TS Hn__׸=50-oede-YkP(B>i#`:eDyȎ!n5C q9a,"z6%]ckVT2$ǽUVΏܛ;.BLAME3.99.5PWMdJAIP pq,Q7֧(+WUl&Ưvҕf4p [DsEXY[џaYaMFej AFdـ"F+L')c eG(yZ$ۍ\XF%fNdZv$&Iw_D"l#;`QKdjS~d<<_+mm؇,yWT0l nf*'0%&(PLqD:!ģyӻjmgD ymȧ}?ӧ5LAME3.99.5UUUUUUUUUUUjmˁ=~dpCMR#n~ɄU*&'ԤU=/%\3טVTM[w@+"IGg.0Hg=Zڞt>~vlu cvyd?Y+d2=)mxg^yQc8@ & e9C9:/RM@IM&g`Xl7 Flx&fflL~i<6°R,\ű_kC-5 kg7~8vp1r/Wipgr 崰lb^+Q^gwg}RB Z@ZE-i"9.KGS.2Jt2,мs b;;1({* h9erD" 0lF%)1jPɞ3"0ph`H e[: \'78D%O1m-9CU7N2#U(grZ,_j8 'Q+t=5i5Z(W|<֢k{3KNȉ6$~UWRV fax1-*G~OdLӬE29X=+<&߁@&xgWQJ _@2;&wpN=3N\[0k Iқ%6'wV/Il@d^k 6MaG9zg7 A"f̜d4pÇŁ@5Z; wX#x}-*]ʔ:j[n꾕/ 4E:-+X5-$oZ$6kbTáj{oR*VwH)tn^^ 8(ޏ$hL8Y Md0Ui( UM,%(Ę-$7#9X<.qcN7oրH5U 2JC1.jE2Rovjowރ)jPc!e߬+qCؒ|͏ h>3).AN%z迁2 a_Z EПo~~$:\@'iMI>eZ6bCLaFY[ۿ_1>@Ї*I2c#X{1,f  s諥J<ѡkRE>'DtE*O~Q+Q)_B`uq5 ɔj,zdWd1i+L% 9C ,g0Џg c _>2sC%i0 :6 G|0\88(Xx `fmf$[& 0ãPL@1'4AC -jFnL3fqCwg&<U6R6>|K z;36la4) kIZ\he9]jOj%ID$ו~dUOc+ֹ$}?LAME3.99.5#hd#'mKU(+[ /!p!Q4AR_ֲm"+LPb(Wa KP`AJ,.omG-d?Z;\& Y b 0q(Sۤ-I0QjK,ЏVטOkr"L23>6ׁF`؏FMLBY.N(lL&i33dZ߽,8rE*"V$$4QU_m 3RpYv"M+aޮ],+KLAME3.99.5 iaʉi2h0fxc¦($0]}v5} 2##< Bɀ r5Ņ`$@W25?ǵ`pI Eg0 }'Kt/ :e,IZ̈́9j5Mgd\y"`-"cg$&Q+F>$'JP2n@$ؽEE*wߣfܟBNv$ `8 %ȢCSetC{XLAME3.99.5 &r6`GS q8J8$6JVYBhdr9b'.yRDH mPG!uv={%%  $K}3`*mdN?͋z#-#hoM0t gM_̋,0XY@F9ID5mSK_o/ʔs%9.L 3NU,#ْ8\R87H*6JE1v7rLY*T=ȤEC@(2ɪ-1.[h穯ro()hЙ!ɐYC4V˥" 2EK͚lFx!ޥMSQGi:7yQVL">}IDmdUb1\ ># '[E*UYCDō䖥!4-I,X?] {#d\SI,t! # qpo(teoZtnc?b@cCz ؎5JO4ID,'wzv޻y2fKl5 -Gcs?3JVɍ|_ؾx_.R'n*uWW./f5e򷍉;BfXu;ܽSf!YZ ¸iyY Ii-sHKü[m8޻o~}w^LAME3.99.&ZXT7cơm? ؑzdBzV5H$zRлQaێۋm(uoՖ]Ad |u<#Iu๴J(IFF$aN pPS e-i(@cʊ1QLHp a&&@fmQ kF-in^O VWb}uLAME3.99.5UUT#@ )Y q)uv5jOmqA(%RŲ_6L*l#ffʫjQRc hF|i?ԦAbrdѺ|+DM ``C,ݯDM@ a]]3_dA_Uy#F$q4 [؆%=?"gR3)dM<Ƶ\4rp%%Sf^Kw?DUe ֻ+yh{N.BT)%N.p$Bުu U[f_ ]8o4 U<ϙ2Jo{2o}1]&f PKidPz'7kUK͹7Ԅ_jLAME3.99.5UUUU$GYB1+W9="tN"Ij'c56 ]/-EroHY@M?yHEߍx(|=Vw]tՂkf*ZH[ZIsmcv4{=7U)X,ocAd^Pr& "uI$u%7c?H8 X7s_'8;la S2>p?ڣQ}&p۾eP:x< G;8s=缕'ل @Ѱl,RsM,BAא1g!?LX Pdڙ!% ZlE.}OWjlLAME3.99.5U'@mDla'FbR@FPbɠ` %(v#^Y7ݩKV\5,qLEܙ؉ JC:lK #!bW2Bq7kZ+m |Ќ+,\db'P00`) ".$Zg|?W̼ǀTpN@ltC!ɌC1vKӶ~*ߔ I%eEIb KR& h|( q耄HyGgGXsc6GK|p|w뤠0tQOdmmAQki۩S ibr?LA0.7 q7LEc#PiO"[P`PѝGZa C4$0E, GN'-ua+M2v}3m3} W3ZL Ԕ,FFMeҧ U4idS`Nk#9" g41 J_.C]οzhGH.67}6`ɁXc`vȓ>|ʇi6ė!( ۧxH@4WwQqN*JDc4s T#=n>ӝ-22>*:f&_UH9g} N[]vf?LAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU .)JWCgEXQC/W} sa bË:!JI1Sdmm[so50S&S*xwz@ϊpe,CLҠ h#Hh\` e{0ჿ]ݑ]F8zIiLi$PPM+ Q_Mg*"THほ&̥1Mr;tr}Ƕs89] 1۞KhH8iv7p8 Bc;Tp*&{]gVDJ흚ҧ8|\ #:=]0d\9'5:d IMC9B cL$Ѝ&t }ޏnEgg;! )%|4&kQ!SLFUr!Tdp zi|+QE O%M\A}c/3U<(7hkL3-IXrAcǥmuү4?B /I0&cP-O_t+@, ֔@x hM='*$a!)dh`Pt ZӶR"3Ñ80c\ˡ ڀdZ1FYu477LڻԤk^#*h["mzd[ջ(.6#9"1ySUg=?c,3KKZUpJra9kNʶynYaۗn7K*C(U2ۙF`WrOG+&Qm@%0h|^$P"Xbwv咔>* $ev!)r)RaqRBJ |s$ f&Xby`*a@1wyW %.[ ]J k(|cX[_թVpLe)1_ʿ ?醿P[VI#oԝǛ"4y(eKuԻ3O3~A~=`**"Bad8KQo 1 !K ;܌.@5nI$m|X&McĺſPտ"JJ@X- Y_{btjߖ*G#*HNGL4a iU "lME<6/,m: ]P(D$dxKRoiǘ+cfw `h` DT D`WL7g9(z۷?ISDud+- 蚈uysBǚt$rd? `R)}@  O& 96&, ToJ=xO:mC<'s-N0n/ _q:@@4 RʀL>KARȊɌIRX8_y"YՆHD Nxp8'StD[]UHDyGIY-8`HYRDЇҐ%$" (xzYR' [*wjᐤ-ȎҭC>j挈AdFR4mtsu㍩rIGŶt+jzoE؊qZ*gWb偵ϡH(/=\j06q3UDũo$%,IrP? [BiM:~q9$Lu7u0{KI+z^ܦ>Jbd<*^c I}YĀ$'WBeyc/>=E}#WoӹGoX > ??A,АΡbp Uȟ}W3E@ r@'qJ~:Dl"eĐZwN:TȈD*QM#,]iWeF&!- ZHѬ%C"Q%IkEH$S)!(('@pNWϟ|FRصSm'mu:{>~-_' *ʱ3 zGZlcED{:@|Qd$ " tUpet4 Kac Oy}dCazw{*ʄpT &]ݮFq!Xv?}ޟWwWtXXAnk>D0Aq4G 004\`r.b -f9*DgV(9JjT:;!{qѩ7G9&0=B{1TEzzud:)LQ<# Js*5#e/Jkbi@T P(ƚ{( T4??S%U 3FJV&{:/m;W+a QD2Pt`ç%x,^!kp|ҷ0;%ۥ]~Ԏ4̤ZF (P3*`( .$SEk։,~ۯrkUe@9)1w1$Y!EZ"sVC/b̽oY#Qx)xd_`S,p'8$C K,c @v0G26=P$/ t{B)QI ˍ.j뻲 *UoڟՊ 8ax£2 C2Kw"t'Lk,h4ʢ,MYp芊0f, is $,s&2@T77[ctUp/[mڟhS_%IYsvXj@hfU9{=}XPTͬ T .o^gggXԑM ..$1 `i[ @Eo۶!AGKwoO}]Ed'1X# B mpPeuj$I:}i@o檤[8 JJx4Qhx{Y,.SH&8^[=?wmw*;q Q[ib*ߡ?orwo^4 Z-dYaIVᘖ/4Y&kZQGUXҳ r +/?nȋOq~=K03KPIKj3_ݖo͟gP%!(ƠljέĊłՎ;,f%ݬQ+=V?Fyb舎pLۢ3f_dY[+N")C ieaL0'0]ޫ 8ŘËu]7 :ԭ춚rJk 5đRfw&'4ĴHaG@[k)G#z^n'< E3򔢅eVT`2 4Ha$I1#[_,b1Kb\d/T1&wy$ m-rFgݣ߿GLAME3.99.5P# %ERS(Ws W*|k<*)xt@cwyݾT p-{BH%HcRȨ CtZ, ؄⨏V2o0|.mDaE.aAaS2?3YΚS#?fUb2aYI#H]ƸE2+[Vc:?1=LAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU X"c0pƜM(EhoՆ1g J~'H*Rf߳wd<*-!wb7br@`Ao(X,.`$)7ap ]6v*[d J * 9# yks(tLk("Iz߯GmҖ$[]2^d 8Ԭ.gY!!x`e-~:"byƪo))Jn+[GR P U Rh?a+UUeMb ,ަ@Rl>`aJL?.ԊyK&~7M/F.-J[0fZw=xLAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUb8ڄ1kC",l;1 ` V@ ]_8zpPՙ۔%SNA@<-6ѡa9yЪfQQ>6`H: vxPLpWd,1Ի)(9$A k~Zhif SidZa@mmoK%c rԤ7{ #Lhj*UU NH|dY"ަBH 4,B*|Qp?IHnIC}vrgRqRa[EɭE4g\OsLAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUgb8P"p-~h->)dK{)s$:޽KƯi)^X& N:˫ײ>i:uUߩ"%= m07}kQ@d0N Bd7@x=c mQ0a {"Vؽ|ߵjymef 1J"ÔK>y},t^>E-bz@(u@DFۗYvl,"so׳7U"kr[0p`0 ]]mJ K&ŝh_eM_ٮؔLAME3.99.5Ci HI#{עek_tTmČ@0& !Wx0WLi hCXu³!v1XU>-ťZThBr.en!<څM d߀HXk;%@I B!G`02ḙjx l&#AHsɯNIO}}_ vp.zIRx~bb(xp@4*؋ATrLfF)Zsu*9KFziH:s& \M*vR "f"ncAa 4wKWWULAME3.99.5UUUUUUUUUUUUUUUUUM.?K !@d=ͧ؀,9#ޅ[m{tь4ӌv,RL4@[ $ V hSM.g\ Lz}̋(Հv6'{5LnmWtoW赮Sޠ%7#d 1{OD8! "lS0 'o /Pb(#'$SO "1 I@!Xڑ.ExJ5'5W_ pٚ/:sҵvT1w4~ S%u(ݵNKQ) Rq+ s`P ;'d7迼3D?ZݜOm 3eбm]o}Xnq;8 )-(`xe>f1Q Bݪj&Yǜ:ʉOэc~ҥ`ad`EJ}6rwnZW7gQi 9NC@c8/g6Y(d)_zd B(' )AIqi6= N:Es @A`?N+:u`ʒޭUoFQ)MUL1:ZIufr*2?zѕTKL QC@ d p0:𒀦aoԛ2jKc)*j0,4FHq̰cI#&팳ԯѯ>LAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUIk8,b#@J]gjrepZ%F' eDct` A`(D4VL_gm}eXIJKӸ:yFd`)k)C:)I=$bmy1N0qș| X^Sv{5?W_Uh$m McsbpH6qAZ~h"T`dffiE.qcee&*aBF@ S 5*  ec$$b[iVѯ>)eaQ=&#W xE$NOLZO:8ΚZg:-nB%}U fz~dB\$ c&1 3'?b`l Bw@DdQ5֟Nw_mԭw}`vjeXNtPt/hyTj@c8&g8"A ;*MQ  q0cH d86dYMKx*iY04pQ@)qzmRPT"G JF `!{oұTLa1 PϙrЙ rZ4*>=wUHucz}^̻ }=[jIH)cF- *:"{G^{g^T%jq(ysŊCɱ(RFx _WɃBdYMSa+ =m0Nw0uGJC+!ħ0ހtS_뢕Xk%@-I-Č4r2.^D y!N" }B߶Yr4"$qY7葹l K'dӥw<Pn. ".2{8\AACj&r3h6k$Sкk;˴> f 1d@o 0:nj dk0濌ZIO~g_נ+)(q5ts%8Eco3&藃A &LɌ uBAz3etgOID<50ENi@M:6v`9~P7`g镖.uCoxݻdoN6)l;wR1Y+YJr sZ}'+ʣs (h02p ͹zڛ c.GJlW%G%CP[#Q95s~ 3g3+1jt2]@QB!\9TP3d B#--ŝsV<֝0Ñ[jT"aSf +dQ@ma $ߠ)EY7 yKP6d&軼hY\A9hׁ]PB)182:\ /{svCK3 0V|cxueIz׷=ϲsh,eXVIoAX6i%`.rS c{_rngĹ faiȠRVV")$S%I)ن%Q1  ReJy!qd"̵@`(0!X甕ߗjJ\ ÞC9OR%.ۖqyRNΟ\_tz{8d]no@.i #0̀pwyyuSLGcI808NҖ(lb$Ka$E6ID9iE %L` dړUd}'If8!(re~m\<+J-V%h J/@K$ * lF4 EJ\咤H }6\ž=.0%D$m}ZڽB6EGtz}$ed(JB: rԻ}Խ56Xr1(3G12g#}kuxO8|(}|.']Md/jaKRI5VSPVʣSVk\: >FU],H T^=|vkdA-^RY zd'3vnod5lw>+?qYٟyW3]/;?4#m@^$!HF\F  @  9VbFxɆe«2`@njmj;VWbW @17GO}D*d9Jnk@6i EO83 qfqoOܩ+㳉dvE1ks g%soW;r|oXjUw֒V0za2L6*õ^lUZ^ö_}4F*C$ ?SŰN 4tA(3V ӫ"RjI aJ3Ip PK q!23~wiSo;g֞[413f Ka"3 *m[8N=Nʿ}#%0s}F!^]İRiy?`VflUZ/ W(}aX|R4z{M̵Aۊ] d.)y0"CC+á$00F(P)EU>k=nx6i%[V!~$D,׉#DX'xXrĦv 'MN[E 5U'JvKnFlLdGddxSِcC%uT@beO5&3:7(XJ"D/0hxCD.1mhi 2$Z焢.nԲKBO. Ӷ`j+YF2E9FƁ\@oRf {٢wEGkkp$n9M7>2>PxSds(:)Hiϛ[~UIj*XU$,ob" ![(Й*rQN($Ymqe% cr]#BѯreMuڏFPVIQRsBd%H!Ay#WG #48lUF$,+Hb{> cLŝ/8)z%Ҷt HteyL̘cC=@22i-}w-H.iY9 Wlt[NIΙ=Z ((D+Sޑ99M߹aah`3#v^7h; {cҝӭL9E_Q cSyjNOu/9.ÖQjLAMEҋ)YO6F'5#,+:Uexsp2CVy3u/tr?4 [#zoXyG2/&.ǏoM=F ')#2bBa Xђv:>|~6_d΀E`!; # !u~> X_lοVǯ [˯lB6Jtg_Lޢ@Ki8I&2dFM[dAm#RPQ ) 1I6)JVľItn+JZ1{' 2`v_5F2Bɴj.vE5 Gf">gv?z3v@RQ.&"6 1Ή"@Vk#9,L<ِ11=M_̍ep7n7,R {ܕ zLChHӬ9)@)VEj w| 'YB3 Aψ×:H@&dYH"MCX#>Heg70-{|&W/^Z汏D.+Ҡ tD`ԫ\.( b14$esZ'$g I:gغdRJٚ\vӟ'm2W0z,ϻ9$hۉ[ +C #T0H0Ln@&y㴁_\Eo -Z)4V`7e (SA(Hh:T̘d o#NLOeϛGHҙ#i$S{ |KS2K,uO/&)H$2%dy;>- ԓ$KuAd=ABef-]ZKU3rsM48?d*aC^I òJc a"tp.\hySGï>@8[$ii7V>ۮO ~\ƝC]V9w .wOwQ c㦷޸A~5T6ltA+ #FZ :Xs`ጇeHuh~~LY&Mp8NOw*SZS|ϡ"ʱ鱪6I-N,KyF*)]t]03O 0r32z,!ʀJSCYCB|KY}uUz #ٍ0k(3M)(py1\fwh3)LbA1(ɳP~!C ,iz7$J$_C8bhmL!Pe' $+h_t/:dYCfS| #KuK AvR*a0u` q1J>=slUg"HDBm3xGˎt- z%΃%ܩ&I5;8t+ZL}M߉*xϼ*6 dYHapTe| #Jw@Ήn!$ #uGA䃌@BVRl$Ĺ; nfVg\^wq@h/@5e'AbNW-Mj 3#鷤3Dt':X>Ǭ0H+ +Bri?m=vh V6fMݸj:=Hi saQ)zțxJr-;3Q$9 ) U.R1fH1aM2>S2* dRCa2]x%C i|:a0QKM:s043T2 ;ȈD9,W3 *bwW ?( l:ܜHJ;RS)2GԻ?Ʌ9~CL|Z锔e z] ,m;2ҏhEҌ}l#)$ktih”ۢqÈE +#>޹SsX^H<\?垓tf\Hq&ߥ>*<#JYe/]S2GN$2{YSĹ8`Ԩ +2*3#RM^v|ս2cM"uȔT H/E"]-MFF%=̇-:T˯Ponu}"/|w%jb!.a0U]4[GG3Quhd23.RC-X pZJh5(-hf!aAaXޠB31~fO6+aQ\$R'ĚG&2n4]'ԓi)q7]ˮ, 8k'\e_&{ND=Rfv y$ZX&gzc dBDhhI L Av, aH+TL-i1GOc6kԘxb# 3݇ w7@K`w]T) .F*D'=nFf`|.J)Qa):wgH)z\hDs (TT>8`C!P@| sjMBgYmґW9ks-r YgOO>n)@2#(OEcѮI ƈ,F.ED62s 2d[t^xN.rrS4 zpD߫u$\DDȊHB^uV줊ݐc}^ 4i~} p@e~:.RkOj $d{DCaTj(I #JyVI"41^v$)J$'$j Z+@MtԴYzЛʠQkW0tYVP7<Aͥ54U-/P*A!LJ5:p6.pYs%Zi:iU[S ձi\+Em}hV.jKQTr mD0g҆A ),iۄUntx#F:QB5Bȵ6('#E4tsZ,zF6& !½* &aq=bwPBPR4nF>?Gyqd$'/jER:4fw,R+d65 Y0p~6VxV1OdA##N`!ѴՑj&*CO޷W^wER N5VT' MS(rT)GbJRUSwTI*]{۽5漑IzbfMCrIz7ƞ} :{NbJ1UZaUƬ.9c+Sjlhas~v{a fsQz>eLAME3.99.5 DeHT8AD6Gh.d",y[~&I!.Bč2s:v9\:tƧ\|$YAD7,{")PPugö%lbFnc-V+v'Vi.k%L߬Oe2Rd#3#JL`ӀbdLȌys}ClsYٔ a!i%h$Śb"GP£ƃBKJK E)p.ү$hۘ*V 0ԲRmSn4F&OmR#ț".=x[4Ed:>,MAu$.}R:Ȗ P(L8( `Wdw_d,vZ"BӷfP6"n.A7ywZ a?-f^DK ׏x\c8dV~."԰iZ?M8sKVlVy'3xJƣ62K3yg[b/ZrI޻_d[AaRiz#>!8b60ÀɄ(e(II$M$Y4z ƪUjɲc!B8L&8 #-iX%NʨT萗q4`buM'tPeqUp{L GĄH,pͦt"M =F^yG/Gӭ̩Y$! FI%I  @: C9o##Eu@~)C.HcTp:@g)MmV;눃i!/ 3RlFTڠĵc;{w48qcD}-W%A~x1\{S_3s*ĦR\df_FnaKM$9)11 `sX$SPPTL%o/4S5矝V"$'UaYc7F0gm 3AgxTe7i"F@Rl0ClI4̵L15 l-8݆=G-l(Y0V.<*,bY`5y:nihWSPŬlU_߻?_M!,눷i!ĵ4 1bSE(E'SUQ7-;Bɡ($e9{DU؈UW1 UEe%(YwpnH*QNy^:%G=6wPJsd<$ . }#1MdUdDoVUV'`# Z0o31@҆-@&wS2\p&@uS cOT# \nl™r3;(bYƥF*!V22JfWB>aYT,M1m)OλM>]&k(ㄉ)f\;A(q =LQ_gت ??##),5B*͘t3.cSud- % - " s!id$mGq%+f.0G3 9"%C@-ޝ j{-Gfrg__U]7D <A j(ѫ`M,Y-?vzeEQi8_xL1ql6\CA_|]o\HoROw\EyUfd[W+[L8YJhF* V:5AOdՀ\aȣ $B }-e$0 מ\՟b먞[=d?XU[[[Q"ArX:) W©D(UJ!{D*h=ܶe DߖYDFՁ ɜ`ѭ#"{, ˬ: RT8Z93Ȩ~*dHkL25h# A!)o$tH8)3kN KV!F'wkV<5à}dEMik)&S2SPz Yd֋̊pCN4xM?%Hy:DlL]y˅%ݏȎ=Ժs7E;4n$H2f7z! ER}źn{tjnGNU-fy+_u4ѻŪLAME3.99.5VQIщ&"QL@- @Veq1j&DMWPTAu+:}[GzJ/qg^$kպWe&hdLI<{$fybUG2E*Y .#w_crӉ# I,'wdN1X8#%o~^Hh з:j:UgP\jkn ;P{iڣW^QSX@+pY.Ea~qZ3HcL_AL^1T +Iኗ8U+*\k.I:m)1wz8[ja=CU܏l=MqK.ߡ޾5LAMEUU~PT&3(K8HD"@0,!e(2EIWd}7=ż#SK!k=OyW@ם7HS`q[΁9ZW(VeJ:44kA(KN$!8@e^dcF06 b )o$p!QrB@j{PL}iԸo&Ƌ غ{5.HHZ)URHQj< x8 Tip@1FV':Ie-!l_ȔSuף" OMM=W7F c4LkL NS,VQ AZ-gȧ8R1nu*^3!4=RPUt8fr e(G`T`TB NE0a(p*kWv:2T[AZ{oǢ{DL/͘]G UL6#Zһ?ucak'ݙ4bI*ZPE1x]Sզ=LYZ}%)zNdb0rA`( b 0'm#Ώ'F &SU8H4]BfF0!I%TyfiPLb^Ix ` zlPk+0 `,w{)،r Ƽn4# i/K[liyax]r˂P M`<9wOW{!v߸=^Df;ýI|9rS5ȣQ-Y%9'u?˪wM.5m$;&qÈLIC. 3e@Yl귻[7ZD2{  a:pkdF\0ގ`hOӕowٷjt#I&` `aWJhieE*xV`a*Q g&M]G,2`[LBs6v8RcS1d34Xoa` $8-K$H| K8Ƒ:z @RFECČB>;l*# Qj;) .MQjX#J*[d*?pˡB$RrR(0AA$dboG[؅GfCJ*U#@f664 An>?sr/Lf-RIj9Τ{;z2H,ьg>|H@.. at(fz Z#$J'tWtOË xIA "vogoSlz[$ӮHdsCkG(x=! igN12'JsU-W1^]KL ^5KFK?S3 6Odw :j0m.F#ا PD.:KAe%˯a]!"矽xȎv33gw94Gb$Qb}vb+[)#H Q"Y=&vX Ha4S1'|!Q4@aR̆0>2%c$6; fKJqiY66rUQJˆbֈC-Mw9 K Km9#&֦9d[S r# )m g̀g| N6VY%MP"Q')jnpNCM1Okѽ@= 2^=C? ~/JM r$QƠt2I` JVI8`iP|JCkNްr8m+(/z݇hO\i-%X) ;D3wUJLA[4H ldXIs5"@7=ݾi*Tcsn+ XA 0+݋ U&ݢ㛥dm.7;8\ȣ eϵg8dYӡ/"! }"CJ\&n)D7bK]GtU߳/U(ݵ@Z<ǥXFd4wDhċ]MƑ,:fYb-kIq اTnoZD"fІ;:Vec#E5W`Br:RiIq[Н*gV{kn{= U\<Ɯaa^-g:̓9*~ʢg6aS} V239Ą1ԆpU2#IVRX.DN;R`lo}mR=AUjv š߲){dUOab#` " Ukȗ%4Y|1KFo? {r[P`T0g2Kpj"5WH^8yGd=O+Oc"9=Q0kg|.%2upOId/a5c4f>$J:]kEh w{ߨ*bXd&WJ5JE9ryb2a.΁khP!'0bu ^*S|EE_gOOF7MnHI4u `au2 KGՀ 282J4;k5#ӭ9Luܖ-GIr9ZD$G%?˙*o;j j%jR*>0^ `wCf=Ͳ5vy|-.,erVeչڝY_pޭaSXkgly ,H 렂ۭLPN$yrUjf)OpHdXQi0@IwazgTĤ0c/DeDp#TrI"`zv0b"I,j_Q+w=JҚsW#&L{\Hi=OONjhvg}u w1ےv  @#2A6[ XPNdciI4oYsh*QlKJ9RpIldz 5B*Q69J]‡-oBIډA <@Ecco]J;zSPYt5J5S>r;R!# k"jTCF$ȚM)UT+<#}q `V.p+Dh7d0;=% MM㤱 ̘: (y/& ʰJ6 zU#ݭ~d,^ՠM e]=)h _3J>%ױwH,y>%+ nF6%P$7 1(: M3/ŀOay{ٶo̝1:$52 'Wo!4E{["I6f.-} owRgn R=+#'\Y i9GJ =:+ 1&XF&y*ŠݚqAVk ۧ"{2Nv!)TQvf&w6dN2:3dր)IP& q%EfzO 5^Ҧ_o7ɀNDIHCs5mT/aQp^BaGŤJR@jMV;HiP6]ƈJ"0JQ}{U*I,{뮙}\-Z=TS?!-r)__ԟ_ݟnOס I,i)"lX"d\^ ʍه]L]4:&ALeBRR˓䘕oM­4I94]WmGڥ|;4muIdbkMmgdTHOSlp# CY#/'Ȟ' @Y 8ky|la`В+@JG_t;0j6("LȜ`O|i/jQϵ.k6Lf &H٬PF!6&:>6Bumq|#嚵*:3Ue#6'гRL4K>lO[BҜjb>e \8>.W]lWY*$fuA84ӛ+H PT,ƇpŁ"1R2'CG @:'aaXt8SytNY9:Zg@1l69x||VϜw?d%F \"9A/N)Ȝ|0zǮdֵŅ<e4Ԫ@$hWLupa\v(wGgOzQĚ6l3fC&<4DB nOPh$a@p'<ÌKJ-G Fu$\MSźmߚɸ`xăJ1+=KWF4x`&Ӗ?c0[Ԕҗ}֦Q8;5ܿTrU-֠qG[#/35heCI!lPQKe61AlN}3a85̬E739R&Y0O71Y@`(idIm%I))Wvh f'"VLlkHzŜ1,a0ձ$93vY AmBn',%ke{jO$h{s;rSbg.NڗFq܌R[ڗpiZ-2_,,Oi"+T\]P4/|բſ`V@ $f:KN~SS{y'?o;ftcNFk>nmTN>ۯvh@EEZ8 |21 9kpee4i'wN` FŒbjœEޘ 0C78 ?FD!юn!rr7f]b[f|ʕ#|ȹ+E=6ˤ֛w lߤ)o|^o*ZSy*d[MJs  M!)ah5<֪Kx`aptmm @a֔s-0P(}UMI܏ٷk{j IZ 0B14p$6E1@0evP>s`̠ҩUP$xG!dhm[;L8"$IƫEdҺ [RHӐE-JctpMDFȘ)nܻInI( B`qW9EL aܝm7ҝm)d 8a+9€U9 Ulˢ=$ lD8Fţq.9̹y8 fB: uZ%~J.i "IUh+miS#?AP:gw0AqIfm߁b^idE>Sj@*Y %e0g?tSFϦ`a0ՠR 9rXخ<.ʈz #b<=Q00X$ڷ4M3uZ&CJF֚nLP>|]uv>⭑(0(kx_@`0h۝+CάtFAq.$w|-b;4>%4b:,ǧ\ܽ= cuAբ.%UtD21(Y p`D # [m`p`ptB=D:uLIzAAÛ}zSjv?oR04xmh! s~gW6ud-&Ɉ@鈃z\FΰGWtS |"DYrnH]R~|ԠX$zcWjbB왔XCعȼ[ףFݟ5XU6@ʠP@1JCXrr[f[ d=+) A pC!R<eg?q 'u{86G=z;?Y)T9QqQٳ OvcRs𱀠 w}F ЋQ=-׽վ%֩f[LGFfeE#V#G: 2\ٝ@Mn1d.q1`U9 A8HòԤHƈdf *4 S_k7X(=neO\eK[Ֆz{ndT2\a ` aǁ 0bRfEf_V*f?/~Q9AOsJ-*0Δԥ&BQd9+=_Gfesm졃N,v:E-zËQDkdX|!;{{%9y1d{w+0mOGF\<@pX b(qtq$^,Av.KY/E{zUgRLAM @#l|0H]a=j  f8zIV=:ܥ&/ ڤiHawřxyS` >馔mJmdBns@.`y e](7 ^Ê:u?GwЍ ,Ӌ ml)Ȫ,c*W6GB"APLH0zbS1b/W[mukb4c9ߜ{YYc|?`=f9NUQ ASAGQJvL>v*썠' O:43/]397_^ִD%KR nzZ=K<4vakt(|A]Pd S`L, X_V^3iGyX.P`>'Mˆ1ِi\2'\ծڍ0L. ks|G2z1i&bpL idNuFT@ C%nd @i|()! wm'贲]~{Fn[d~v{%2*ct:TZAS2` |$nJRwHu- Gxe(MXOl|&rdp!дD[s/es,ʇ_,8[00|ɝ˳]lm6Mb{ߩ*^쫧ggM ` pmHerkvQ}F馯]2Uc/qi?( Avwb>ZM!fABd`X)h1́MȔfwLL|Q皝L<0B YBT 4Hī"D$i)"xCo35a+h2Ne^燆]؁(Mz{?JB Noh$~ƒYS#JhMs([ +؈%?/0`kNoeͱ7Rs;f[ME2"#LFpE,2("tV wJ[MB qe"RQ] wVaMtut ͥۊbw1ܯGBD9D!5]KC1d܀a#Lr]11f$R:Ɲ}cAꦍOXl:k'BԲ FD F1/%aFCmtudH@O>0CB d1&.m_!&;=ėn`<@<ǺH$}AԇQڐuxT郺no[Ys{-!21,D#-"% e&MHy-nBm ;M}F 2XNivqD$0}-Rtpڴ.F9J{~gZi1f-ZdU 3'hk5wiiA5dE7&` s]%Ȑ%0l&Я-!,i+l]>߱LAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUɆL ;K10Ŕ.E29V")X`B:38f_m(Xo2* 8TiО:L.sLڤV,İP*˺Jca]da>+ #xUǰqe}_@jO?MW59{Pa9k:ܐ`4*U< VccC[ʴ %PgN8skҏjԲ[ޑS bۖ!,l)h`;(&m | vۚt}WE[E~Ό܇ʪLAMEz˸\ Pm&2,iN)`jz2 NA$3r,<vz>}A5%HcҦ^cQdZ){C7("l7Hf<V3z|? b}>%r{Q3oK^L/3-aixvh/9*C;A-beQ-H]'&$Y78X~g(zwozܳ.Js!:0v" ] V!EH䊒^kUbϾWuk=[AǫG]ho9s&?rrPzurtQcp @p@XRËM@QHؒ\Ifٛ0~|UfG(fu)_8yAamwzqoyEbPn$zE8ڿii DdR'2X" "c"%4#HBA1`>_O$l2UnPj+\EU+ͅ% -rݪ£MK7%ۑ ٝl覥+;ڏjXS08` Ӭ &6 \!ZP"@6 U~p}\Iv*gHe(_i5u vm5s qQ3KbKnR44Kķ:$!IFN[*ow} #%48ūs:d&2)Z((tmu9m..vOmXReM_Du9_QWrdb#L)=b E0`{f/wWSV2D޳(Bj*!qҋ#VFIX($G$z6xP`MRN:XHX黲"f^&7Y.9,k/UWnX^ov@ͽ.OcbլM@y";zXL&eX+0)D(ѮӔq"ju۾؏:ޠ8(;UPdIHD U[_]7v[/tm'bqɚ-c 7x IKbDcG$,CzQ}/bCnC g> 5E1dӀ_ˉF$" [0QPE3CޔW4X? &kxsL{ko% nֿBwKSlN5|c@(Ǒ@qL-dK S`0Pp1$E:"-gR0:ٯ®w#mYp.c6Wu?ڽ!FF{t,"7"SC-.cllz bQƈ务ϘM;\ֹBa,1XyR)5ҒUlM)6A]]+vCz@EIH->ˑ?]V~u[Qju`eJ/{Eݶf}^uOwZNA Mr@4`峓Օ c \TJ0#"!GLLQD~5G 6Y;>ZE aZ*,Z(4Xx-~jLm׵D\E?IXǯ64&#F5^GN.[þN-mdJCU3kE1H_Z)[c98"j.,ҡq2hH:VJtq) 7m[RS t ?GyeB L˶ѿ׀;dAQkh-B& 59Naȓ Hpfb>k&ؖt}X͉삌ĸ "AX0$$oiTaWVO$tg.\[B=Xv~ڹԢApS 'XgRe2ׯM:!Ѯb#haȻZWU?[\w&S2=Y2+d5۽XXT)ٶ҂/d6UyL\,~E@0t8d0201|0`d1B6p``ۼNCtĆL$t8cH|0p6gK 9-fq }oXd5Wk \#9!!eȗ gbXLsougݝ+^bR){Ҍ8xsG)Ny"7\i}bZ@~Hð4h+jKJ-Y/ sP¡jK-4 ,`cY 'BG3^tHEzK=W5APU>)"@Lo_r11kM4x~iT$r`kH.RZzylo{;{?B@8CV0!S@e&3a&U*Mfq'NnuYusW4I6tc&zO XP"wq&&؉dEúap#@X{#T9w3V{P)HxD Hě ^ϖ A@]E:1RXF1 a@NcO+>(tS }iʮB,=/L VӜ\S+uԴJnK&"?ˍRONn2IsFE X-R' [0J:FX 61xCd^OӘa"G/@h4Ř 9qB %.'s'}paaÏ]n(קz=gӷ_*WׯGl.` z0KvP F]}sc鱃oS3.#DaOEHYT$2 ) 1cWe,b]GkyŃjFdpD8xGM*f3e&#uNb/bvs賭ϰU|p \Ԫd ;JhZ{zihvm ߄P Y(@?#DRXzȡ.]*( }6v;_~28Cod[2 T&9"I.w[9'jgW&D3$| r΍80}Or؃"eT[O(Lz$KI!AݤmNI8v#oByfveS?ngbBjkz4+AE;qvdlʏD^H3V y4i8Mfu!r*J.命UTJn>:N9Fd`j kՍw|YYH^KH6yTn?dGTKP"A ane~[?[Y6jtG 1@r k P7Ҽc%Zg@4s b&pM  5et!qФ:2:Hh S5%# UIAM+i{hPd.l"Z6.rޥښVUkdcSaZNԏt 9u?<Z\EYSQ,eA(GF-FhNA}ZGuPan+S"SrUuv[~kggg-=JK%8eEDB$V5IdHYs,V# mq[$qf|Rfzt/[+Gk=.f^]RnҘ @!hPo|GpZ-Pc2o>Cڽm^:0l4 M*)P€U '0`Xꣃr{pvaM"9#Apv]rEZ)@Ke(*UG|SW,!9"iR@), ?. H p)|AbP"9-}_i.g~1 ޼icg1s[ѭO[{36nѷZ/uhbjr#=\e#[-jo߮#|[paLd^)4R$oB]oe}H-.ӂ75mڍZg^ezzPURVܺP{Xe*4!u#.%&`y3RXˀtdQz5R#Gq (ejVa$Ӌ*]>l}X-qdZ^Zj:| iU59.<5hޝmS׌饵LolĮʨK.8c9XcwwSU2. =B1[hZ (Wb1.EtV 1[mNYB+=UHhZ/I w/O"`٠ć j#=DU:d_Tm=&+_0æ10tl})LvZth'Y}8hkvXiFmvt(zbrge~,@ 6ttxnCn%b}$U@BDzVq%sҍsH[pO7CDbb9ئ*G۳3 `cҳhDX$h]ajOB΁!_َƐKZ9d=_欝kO5&ܗ@=$.HC+(aAv͢#0R!g! տ󝦰&.MWYF*%L*E{YyQS UJidπ'NYWa` "`I a)\א<t,N*yrF So-Ot9::W6 rky^  vbݠ a@BGf,d:e#lK80B01q !085ңt1p0,,hD?|'^l# ЕkHm,"#qD)yi5EOcyx8Paq}T)hb@$UXL>i19mYnϢ׮-ѭ)hhȆVkJ=rW2.X0M8\JBnUQt֊$+_a#}dOS ;I3Xe2RX*; 05ͪSld1[S,D 9DMk~' 23ƛ24hsM!uk:?q[mff ,t$b-Bug44 2pй*2Q ģxZҏ|Yiw o*64G.a %kK5V0%i$i@ᱬc[rߣW  Fbґ$#|2d('@U4U 0ڙt6MEѠyqN.^p  , mx|&Tb0b*Dadžaty3ޖX׫/[~h%PzY[zXzSd߀1GYQ$`#HC}g0I+Øk}Üo;zo?)E@D&t@%SsƎZ}jy`[GnUlbrTCs4H8eŝ.#ךsdq82hR0@Wy\=Gsoa:qfQoUrZfSC;1:㐃XjVs01dX/s dZMo -`Y)xO](w 32¿brV14kϩJ_Yi(0\ǎ`XA%0aªP^V)Ɓ q`91A F||2.*?v&v~pMH%V%é79z'4/)nhthhm)Pdpl>{{kbTFc\owNN{ WO}MJA Sq۷MC?2P2X fʳ,lŇc 8Dm0!sCk౜>3d"&o"@IӘ%2_!)ܴʫ<1oOO^d߀6Zi% ##Du'6ژkz=Q3oz{\긿73"XeY]W0Yws}RmpaED]e#tСI~AI/mo1H#Ao@8wQ\I }LQH]7` (iʦ5&wU?"AU[42tk%Vx=ޱz_(SM/>n~9I1}0zvAջV?BY]0ݻՈ6 @ʤTkND4E0 d]nm* } {[yi7ncBMG&3_3\02M%a ҖW OPYF'p;2rw"I*YudWPN,%"ַ+Ěl̼9^KXdjZzVuk+n 9&>;?s{i9۔6fxI$`?/Rk=_#:po*@ ".* 0v(50YpFQ4,i"ڲI%$F&ڢ+ͤ'SG0\:CCdcP?Bgb]gDd1PZ$@ c(aN&!AWXԂ0`(N JP&; c=ۅ&D>3YS0ͷg_O@*^CM3rYbMW1&_6mAX(2$k0oh(JV.dDGrկQ@|mt՜Lnʀ3̳= ŒMe*=]kLAME3.99.59ђ6Dd(+ɊI-X2fy:C?>6%i8?LAME3.99.5: iZX6Az`'q8Lv:zKQKmNH 4&P 2l"=򉛅:Ԃc{mvln2E d3$ ] "==5 &| bpVgffVPƕ2 _WQ|ou%u0z4FZYv*_'xJd@fj{ʊX쉹j21̚UE6Igtk9Q5QpdbG z!ފtv6^T(L1&b麢xڈ:VޏwULAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUBT ^q"0!B V%CeLlwt$8'Yh2䣠 5\vI7  >X[#ĚlƝr&9Iqx0UNen-ѭqU4nNϣɲE)`09Jm )pĥA,;$dmTL $@L#1O%lsȬ&4 ᧜_^?Zc;E'u&2CK^U9tN]2A&ɩ&"bJMK ƜU-*wBpEmFmU:XQvGw-e4QƱ $9E%HdH`% \"/$q$0bZH91(׊Y&& +a9 pds>BDhF5V;3CcI\IȵI# v3~$p` ~q-:Zefb8BVߐEe9je)lP,N4iUD̎kb8.$,ƥ橹6:jy@y5f(zj'5LAME3.99.5m@>&pX+rXVݒ@O$f?+%Ph6F - (N䥨cuT8uSE*TQh@BALꦂwh{1d.8]rTd|VK R)#Տ#$q瀣 vt5)jYg-.}oܛ=JE=Cw@C$hZN&gvrv􇨑KD L<፶R`@s2D,1PG"I$L.(Q!Por3͑MQqB $łf7'*S#o?ݩojiH"iTаs'"\P#/tA\kw9ĨXc4;ÎYMklb/ż7jǚyݾ=!. ?rxie>م>WLS=c͂1ab6Ϡ]#Q~3nd ]HC)'`m" h9p`%4yhiS[z"6Q IcBa;t<,h(8XB*̜hsKbي C}L÷ݗn9Rrt6Nx-K5miքNP'6  W,"Eփ="@ qVǩch # /5D[4?.FF(3GAmsu"ܐ@N;v(o1[^kk Xr/Gs!qQ{Gϲ1{h_o]/V[Fl- 2qY5m-Jg0K1ï˽ 0zGIIQZ4zMq)#e(2-xͰNqSF㩯ۮI!rc鹶FJȒ3}?\EaDM\dRk )` =# )HdZjeVG-LaWRo}?d歒vϦ@ m7+0& "> ^%9*%@DF#0/k+EWb+'iv3$W/s頕1@:7VW0iuH23:cu&ۛTa47%r14YR@L1ԥ\"I2;ޔ\i4ݿlջ/w)x5 QǢF$I^.ؽEIfT (q4Q50!!($ gIgceV)5~*"-Fix0B()\hd\Ik b# " ' $( z!.*3ch?W!4وwΎ%u!RPFQDGp)BHa'X֗=j#2a5A em*.YUyPXJ%OZⷳӮ:'=XhgA pQPb!@ BX0eoAdSfc#2fUʸTjt1UP`<)Y A9#*̋YCPvJ C# -Ps֘#-?#-69V}vh;u1I*H STnEU5ggvjq$PPh0dMdDCOb`(#0dpeYKۭꋺ /&K%7ڥJ0UVe.V81*Vb~I>nKA,zЖiY [T<㯨ro4ُ@fcjGt H=ERlXŗ,SWoմ)9F~8hdt,}LR%P^Fq.*v/]`i|2|q)Hz ]s-2x.\3@dn09HTA;DRT$Ay"n#$K 7WhU9r'!.I$hhڄFѪ@;qT PdLI{,5R*1@$p Ay [6 dneS BXj$(i(}]=zG$.qEї("mw$O4 H%t N2e"!BTY O/hr@ة5K74%/?#e'KжYeRs Lm.S0Ӡ$.dDmTiBZ(LNɂ-"8|@|,'@R䌿 pՔp){{O=-@oŢRT2 (qi6*L 8h} Q!hF]G8yߩiApMDe\椓n( nJ:Q! =.pA:E=j4'GU]vvhI\ia,[DGW& c$6@'al,paIbQ=0083XEbϿ+z@PQNrHcHSܯrhɭR{LٞC-;d8c 22$ /e$0Цv#tmGz@9r\<ayl,SSuS3nZr[1t8pI\ȥ4k%gR=ջn$Ԥw;x{CַE F˸NL[2kf) ttq-=M;-Eׄ4 nURRigkmwvUWo1U{WEnJ<`b$72ƹI[_҉G#cQH- ˝L#HD#1k!55 :?׺r g_Tw;~'<`hERPbN]JkJSmg1tk,4d>cC,1p(A" L'rȪdtP ap*Ho*NTALyHF4RܳX>8 1d ZyЙ5CXK4qZ׬ԯE9^ܘqv6I&Rko}?UyGw-׻oGX,PG^D̏RS*FSz2QkY0dyu5-&ȧ-d((ԕ?l-SfgIJ.W-UsoUvivѸ(d%` 0P( -eɀ#dR{!3~5ŠAl(6u g'AE1@r kwHۻSTymxoi .MFWmD_ _گK3wu٫NiGR)7YUӎģ(jK{5YmE:=?ݿЬ"FB [( "\})<L@$Eg"NG9v< Ń93 7H5,M7m SOzP%Y_+_ʷLC|*{3%g-IHwGmۯo߯|jZD< KNL1ΝAN8qkMo) @ vW @FVd9I)1( #q(C[^I/Sk?@ &[:M8,]L+8%}/5_j*.Z>+mzخ^GwB̐Ob:7\@豀:rq&StW6ڲ|DYfE jcjOuB9BZLG(o2Q]-njeQuuCAŐWJ' HX\Jyq@dĀ'J0#m ci)t,k}I&e%RItQ>@z,y%6^>zG!nWod )!bLTD"4m*FquT:@+sD#6Q&Bh5b(Hc+4.(A$"8b<(B(2Aec$M6wcDBO$7`M&ўupD.emBP'st=vگ@2;WWmCUVPem4TYF摪s (XHb*G5Tګ|vO sԃU}kZ~Awk 1y-/ZdӎB #K"FOd܀GHk@!<"] #ȳ#%RKkT(J-@e[׳% 2LH\JPq1`/v)gZЯ2nUX^~:4XJb2$3R>}*MϓGgSsuz'Ś:/ꩰ[&Ʈ2-,z80+׫366QoxM([lN4A/Rf&Qz71|GŶ3֏& $d٥uT$MNqv!rܨ6 `49){UzST5Ϧ!5fc/dcGC 0# " 0%tK0/v8vG#,̜QLB8B"5)jX.G_[r@<$T}eR8YB ,tFԕ@7?k#\AEəN- ۖ^Ӕf$uL@\֞tsDPv(Z&h.olܐ YN] K*6$"m ^:0 Rh$U$Y2Xᆁ ,6I]9}ݺ[r;"eUI%ԀVk:fYV5T-o&ak% Qa vBɤTlGE0LfL!dgsnuT.wwJ@v\f$RdM`[1B$ M! d4 ~10U3ste8i~JP "=ЅWZ0nd]b}N~ʿ_m.o[mdtSA2b`B\At+pŽ6 ٟZzS ash&w;W}xP)b[I ¾ %bW mwO?oo h"# t#4!MH%F[[lh%(HЕD^pSJ2z+(NH`bHVm`x$;dW&%@&O/2vLEƕ.:rג&*(6+TG@OdPHcR'b +Ș#d'+Ka TV$:tEQ #b#nJEÑ >*!O梶Mjw_UV}diIrkPIq؈b 籎3+f+QC Tx>L #Pp+62"Ẻ1Tqj1rKR,-*bx+EɮZ[?e讯f+* 4lh1iPK _4Ppht5Dဘu@H|nZSNִ1(.&B4LJ~F ޹i1 c$W:V"$0˕iY!/n  <\R`VBE3hT9;Шe <ZEdScE+)H' " lm-@$$Tvb@8ŞuXŃ !t {JfN%v'6[]RMYaݒZ@A+#DO( xVc:Z Ƒ5{d2X]r$r@; %m^䁤(xZⓕTLXhs]fZUQ3'5pt"edKc K3# \-0Ȩ%4WHk]6GLa9eczbѥΌXO.ͬ\{֝V(A'kY(7c"A* '4\棍@ ?$Ը fIky&*:f",ړ43G 5D UZ0{&kK"S8HbgK"DC˳C͢KIY88:CNN, M8dhRM U?Nu z_~ZTI2#E]BP&Ɛ ݊J3,YT0y cA̔Jm=־E%Q]Zne!Ag:Hx/(QG{Qf'hbdcFC Hb) dtm*tۮv6b3@-S$2E i iAj]k=z:.=qI V-`s;7k P@.:V4V<(ÔRFĎFFVJzDL91O%S7 ȭ]m U{woYb -x*Ae0b%4l8LC W}/[:A€^=hz }]oGoYHWԁsb]b:cT.:d 2FB;-e@)0dK0ӣk53^.K7~LJEHa"hoX.U1db0P$` @=%uH}%0d#+5һPMf)#:ro8N^Me,sPjٚR2Bn3%-A0$ăD0SN)|Yd`Oc)0% h/$m@#VX%mTE,aRQgE+дm5[~YcEi)HXI4#1 J L\<0xѩbbv%?UW01vb!"@p/NXN!ABA-ʒP#uxstqfv/eeʚUg*lg}[zoe i+Q$ ZCsьoA-g)&dŵnWBω`8Ug[ 1R,jػ$@Zښ؂3"+C9{D jma6:6:q ~d7!;>)Ed\ R.`c5//0kd$@ EQRԔVIԺ)uZ̊~;+SSbV꺘/wJL5H.[IIڊYiÜ՚+JWj>,"Gt`K#mMm5VZ\tty4ClC<-͓m HWԀ U8qѠ0#|ze4D',< 6PliЗAiε8,  W(fmk(cjQ{]jYF?l0@T7y5sdTYJk 4."m)$qd0qڛle~?;YcA-ҪՋY2}y ?g#[HJJ'J >:6UnX sojTMxISq[q!+ucw|$<U=&8WJŮa.,2ع7uߵ;Nͧ}WYdYEr[[U<"sdШX?38JsM*2$bx)Q9G]cx/YarМv IKW;zY]iɪd(Aa3& ]#E[!$u$dEiS)8r(ik >N$7tn_nUA& E>X$*vv_I|0w_ t.RV<qV9'N"嫖$Sӯ%~VZq$S V0ARO3]kvSFKz)!vtg !<1cen][ܖassovVȾ%]}W-]%BLZ=eL2gjX֛E0DsyQy52KhlC@cT]7o4aU Յzmb]n zPd_. 2% 1%0Ȼc #b |߮gl{֧7sq+m߯kPlٻ([n4J ʢ Ծ @s Im&}@$82:ӔI@~2*ȧ]}'dLľ{8P@P)@Cc,"$% L@1J&:gΎk{]_䟌_eU.r{TAzPY=}*1m-BVxTC" "U2L%BV&mñd8. lŢk)iH[2ʍ;J,I=!:"f{Bf,' @)˴#v-t8,fdDI ) "=%0sH#haf҇I.4.HʈA*i;y(]rmЊ*VR @!,\ N[T,Q \O0Fh*JM|i.߶:3T]#F6m\l"2oe `<ӪO:kBbHKםpʞ)Et>g=W#F; ( lj1d1JbDD<@&LVc!$T&mc z(OږITf2e[t'$clmD,aɭd>J{ 3 +]<Ȧdph>a޶%w.,^ieHt}T߫߷b$B5MTRӐ'YuA\~YQADjd "@ "bI #%AqNyeMʓ&g$E<'*hx63T,!MS-D't22^kNBCETe"G-, f%JG&g}{L(nִU"!f3xLo8P.DmuMmY QÈ"YJŬ9m(C=S{2 Yp[M:n^uU7=Jl[n55Jdހ?Ic # ȵc$ܤyxTabҦOvk3s0Isrj5uS9s&jY(Ovjv~,',5 qXΙMjAC] D>!&h}/^Xrײ+s{hĥYX=nm g/ ӽsғq#PgC!ɵ!iePW 0Q6bѹZ}%} [Zi7$FRBA詓[ꮛ868 8HKI cۧ =CT46%,uZ'#Ub ˆ战!F77jK+ .H1ԲyFdbC 1#@  u#qcԲqI"2TI~9ZH~Ъ?ԯGt}nkwD) hF٧ $RDžvn˩~}:(h%ϕZ"©"K3-iI犹~J2}%jή043b( ) 1X./sRAINurz'* gRV9D$+6ODBHoT4dU\ ) #$y'xdttAI1eZ$*64Zg"nK4QP(FNXT#H6IeË *&e!-JGmZ}$f,ˣM/Ήʊ5Aym,Ⱦs"/\*ĹmbBL͋F~ܯkٯm.n $,NJV m}zF'!GU =d$L,L!B!XقE$'$:$Z%&ܴ)54=li+x#{G8cWlV$ymQtdRQk 31a#_!0mȦ#V&)IxT|f0d5i3 AedGRqflf.g{֗)Q<~m=μ!bB) (XQyiF0cW /=6Z[{cJRB˄Yr_ىkA4oF)槒LLMٮU sfpeJfW#ӰZ>N^hêP_gWߢmU{KH]ĝeJWZCk(\H;mC u ŤBLB,$c>L\@S: r.ٰ5#XZLТjjdcFc 3(@"8 0$$2Y+ nZָB00Aջ]lK*ww{~QCIserYHΘhU :QV | \$j\&#,T;adCmɍ9#NJrv{lK–Iu] el_խnNHym7+PQÎ&ޠ:rH;ro_E!FTDN!9&mqsl42Qm2(6J,r ס(% #&32hyw.;hlkxhde1Ji /@i!@d0S)Sv+7VX"4JT0S*15K#qƓNDBUmt ޚdԏiZnoJOR0l@u\=zD8"yFj@ ʫ !t-Z)Hs[`E\-=Hl'rnNsQ7%!poa븨ŵNXdܶiIN`ciT(dkQ4F??N9e~SÔI?NR}!3@ Tir)AV nSWj!GizAea}".+sD`- " -O}bb-db0B(=} }etTA$氲e$+HoHrF o.{W==}zzw#A5Îiq`P֌4-! Xhtdriem2z@.0FhjLdws98<2KiK|ңl:TD1,S7MUU,-$YG%TAl$KPtゝP4EInQb&?hބlsn/$I5gV7,qjT.[zWoc_><^$YQEaFd J~ѥҖM4R!;Zd[R)"0ȴ@OaU?9o 1 iP4fP\(mA kgy(r^õ8Yoثou3V5@zrVf L#?/WAo$[B3xrEYǷmO=%B\^]ٙ! e7 Zl-IQ}4ln[o ˮPKmȭJ:NտU6[FDl2躐}mK 7:rRJCA@h $3#fPPꈤs_)ӡJM0vt{: 3FmTf&An j: ݯE6+̥db 0b-` 0%tg^xyn@Y4&IΟS[Q+c\[KdlA(Ã*a-!B(aRShFPL|(W@ beDfkNWuRhP%-ڄ<.Aq tFU7[b'U(48ڴhcws^K|>Շ|Ƀ Q.,R5jM#p`蓛,WH 6͛:H2_Q FJWFEWR0"ӏ jF`zYl6aJ.]SFdUH r*`"&%$qcڨiD)4Y*u3<#'bI7#dyƠpLԞ Ԣl ~5>JSE_}#"4 t`Dv'%𞥘,̺t䤂Z#5ܣd8ߠX,NUjsi|ғ{oZYim}uRݭn )"֌eC:&aA"߸M;4hҩItIcT H&6w Ag$[.?Vnq-?!dEIk, = !c6(a|g b5.4Y_wH*U:і6@#*QzD7o(6” B`9 `+lr-`R1 R g6LpنxU '!&x5.{I 8ma0p测ͬQ`UZI Iv{rJ|랼>~_|SJY~omI"$e[`l$wH`jF1=1"oXo MenW&< u\UbMr}^aXhv$!9\ϲCKtkbY1,m<dh%Ic/1r#@ "9'$o@8$( ͼQ@uGXĘm/YMhY% d ]Y%@:T$ %x}J5\5Kg"vt[>".lH]d8xĢ=EbO?;]lEw餉)˪ZyBj$,HYMxnG#\](O,iS " GaF#g߳h٣z@{(\%/X;4HJF& p*KK>D`B.=urr Nd웢 |G :TC)NxV? :iDvj\QYEDJdIIk (=" a#0ψ% {\.աs >KyqR?_D3@A(46z  Zx72`{ψH^6Rd"&1aWWv\$t9+=y|Ӧn#ǗcZdϧ[V~kF~ظ6xѧ2ND L+EX}$ҪZ8߱jȓewۭiLa_pB$FéC !X a0ɼ:8iWCOXtquGN呖c-^12 <ȴkSlXqv icd1CM X( -q )metǭMIdgBjwգΛ[@ llb,`'00C8Y4X0X.imb tFCĢ6aA-")fp7m%:1^;3yɝl .l)M )GV`݅s;5Yt%xm*YϳX)&aXg%iP$iJ04 PV偦)q Jthjy%yX΂` PX \7KWqݘgEdDPk B%,y!nuȚ& s֜ڇavpŲ#9s @ȉcǥs/KhZLg=LtA#*j-~m1I~'L93YȖH־eq˪uMu:U\I5Rӈl9VsTyz0`AT@{ LYngbCvngVTuq9̡iaOs;+T,RRs m]YlS¤W2Rmml4M2,)kRJVRkWJ%,$@5.weƽAD dJ}44Gf)jhʛbP(Z>.MbSq;SBį^jXvNV Oe{eDZM8.ƩSckUq+yJzv~ttYVcM~8ۍGd؀Zo )`}{cf ܿ|-ʯXu+W vKh;%ƛ,Q PbT)* 8{tʶ|?u: Y^dNd MuPsqT*ݹ‹ C2 qj)}\+e^ۅj;;&@V0`RvU IP}-0(B6q&vsPg16հl(,5NSGpvneձ5l^8Z|t]8y*1@kcc)Oq T64&^;ͪ-10M il$%;ppd Xe*YĀYI4p8ō BPg^hWLրń2l"#STi.[ΔB#V'>(bo18a$9@83ݨԱa+~zta*^\xiUO>Jyii c_InW3Z^-{r7C" ĐHm #UDe?[ӨOOVvWϱI(d53|bL]ʎ!"4`@`3!A|m @K-b p rU dI*ktKt R/@I&ky7eInO,+` Nv9{vۇVdBWQo /i[Y˂ewcK8# ;ڹ+ 1.*l~j_M}F*˖K`s [-VZOXH4R@h $EQ>Pv8OJE"bkYRdmd|@UVvӞ5dH2VWe` am$lk L(t1L0qso҄ W_nk!QrTJr[ҁ X@!q6mP 1gٱ;~(򟻿dݭ(;!#$b. 6X)BQ"˴ǿdi+>{O5"Ed>eν pHHW=ࣈ# Wgҷ_O8Fmv7p(ӑ mҩWblCgmV׳E8 z៚)@xJ8X],h0VLZ5H<QyT-:o[& s&Ok+d+IQ;lM x=E O(x(*lAR$՝#pCYj҆ƞ}Ex8ޠ)7ަ RXp!xi)-#?j@KB,Fܪ0nPȂ9WR;hCLCqܙs Te?K`bVv',j*Asg{y% _[«kٜ~so]كz+k+ͯ?N/zY粈ࠓt6L=$\ngsgrLM~Ep5W7f͉s3mkp0mkqgvIQ hYY?:R- d$Wi'S&mifz/GzQoW () 7NnNh>bdv(1 G&G= GY3CaymD$ҘWL t}:\l,76<Dh.5PP` IVM$"B F}ƞKrhJȣ؞y`HRy`*: B7EhƌUu2f豽KfZSԒ&^3ZD&f,LkԔX K-@F㯽X 5u܂7wR5ʇT73LF(Rd_ wlH2d/U<'  sSOH%R4 |ci'MyiמaN|yk,sNE5{YRU%HkH$p]z܌Lj5u]{$}{+5˩+I .tErsk:mi@-I1rH"(6GpB\vZ/]X: Ft%Epe]l 0+WN[]~%fu`/ k80r2N=anS5T[cfI%8B:4z-Z!BbS7tg#!̤Uh Ƥ(`YId7=]U+P)<  }U%f}_E]^S!ȷ) 8b`g"n-Jv„C,SsPj>#˵TěM|4:lxi:RU@j.`4xt;Y߷<`& ,&6 Їi .~[:U1l r薁 aepҢ2LRP).8J؝ D `Cf8r )YBU_~ SrCAn : i|Ko HH#&ssgGv_18 P,XЂt 2 DeYcuV.d]*.kI0)C gO&a *uu7L^; Gj@ Pk=}t80-Jj +>6')ὨkfBw-z4?1f5 ~,q{z!=N`NQ]KZݹTQ_u؍VLiPH LMM`Fwp+ݵq;Up~:?lIJ䒱m> &RҌS D 2Ǡ*0?0OgtBdRTyʳ)DJNbQn(ݟp8x\tF*),SM)ιd-3(Y B 'k'<1\M?E MLЊv(` BLE6l^ap6]i 2Qd uoH;lXqt}Ю}7_$&|]ˣTKRugW$ #1AJB!>5ǫLpZSW= "9YfOOcQaG#HCڡ8ܥEpڎ1؏wooSy&́\:]jGYdl1sS OR2N9d)-RO6ocsuݞ}bv~5El4Pf!2RCNp$*Q6|OD+Oic1ƚ(0K=VEcxPYA z^?wO~"-QiQ[d Z ;D#@y}c #X켭'_8L0€x40dA:e a$@*hk%F "[KI 9r]ʽf[X !4 O*/`,A3.¤Ab@U!Z9`Z|*~bt+X5֊^  =l2QUro2:M8-wEHV#q#LAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUU$'b@"]0d9 HgvOKvaϡFS݂Be0 6@?CbYI!H컣pt$& ޠQ{o}arGɥ hĹ dA[;"@"]BMXXHM3S;׿Z`A+I(!y(+,.,H8*o[Lwi8%o 8X>aCA$51m񻏈Dpyb!>70{1gS|(A]R@ mD.0W<ի[^e u"w.7?lZLAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU(#m;)M}< v:zxFgqM{pOY/rd.@\,L! bweL0شZ־RJ08+l6&3r(dU{4Jm"),%œyB{Kp(a`KSj۲s;@@耯5B8 S0LIVұ[X(W?)֎vvmJiA(ZY`ƴ~g٧g&&tG <uP6U,4^Mfd ysַK`{mYijWeC+ʶ|`~JlY(.ubHLfJ+ ȧ{0)c$5kn0@vuue[N9KuȲ5d؀S][k +n `I }i0xyh4g E^({1SDPXLw]O_MDq5Q SB;Gg/Vfgv@19*+n%dn9eGf6oHTk9/y/S-FXWK12&Rdہ2go{^#S_o=(N3mJt0Ey# K؋yN-`-Hiz\ĕŕUdu ~\<a’?xB쯧$z*p=[qyv+0v\oy=-!e6ϸnd=Z9/&WdLGl-@")B9c祋',y7>Y `Jp}a\ok_wk(]?܅5K`9K+}IY |^Vf,v.Miq,3#ɉ܍'o/F D^i>Sj_E_緙.-P՝5ItW-[juDZCe8=Gr٧sjo.}?OAqfńCL]@m֚,hw3(@i!:^,,_) e켮ԍQ_ БOE: SKk2o-[ϊXVR=cH^lX+MdHcR7 " " uSǰqc\ɳ9\Rz-Uxvw` ͷ{v[$)їzL1{>yT1TܐD]SX0M~uBB6Y=[kK^, %6aDU*8yz[3U, 2hX Q~RՕ`v%fxf{7,عWAImZl2ף7yمT07 pAdrOUXAJr;!^W]KkQMYD"ld$͐ZB7hB2UI7"dHi4K!^ n}R?'i֠skdRVs b) ]0if,ɮsF>yvf}wFRGf5~n|d(d$Wb\(e\+d)9+0Y|(vUXZV%М>l>GU1--]p͖GǞgKFtf-"e%._% N8تR=l,$aG 3QyʖƉK MdJ.uWxVYQQe 4iE݋9_wKNiLntg \!Xe:b]@L7Wv_ׯ=$$M'NcC:!+ϢW[.=8PK@Ό&0y3}J8D`td\R#Y,, 4N g|)&4U0ӍSg61?vcֵQUyuUv~,Ttݠڷ8/+XВIAX&'.q /|` C+Yu:f,{! FH +^z`ΑY(.2SbΛGR?MT7_IW\P <, S: C L RBT72DrOYtXx@$ʵD`#`!s&vlAAlNPF>uQ ,6|݆J)s݊ &`do4Xk *# B mg]HǸ8Vm_:k6n0`sXn(\-&Ik _Il@]^&nzh`,*t4JcǦ[{+I=`LAME3.99.5UUUUUUUUUUUUUUUUUhr(,!1NVc,Zg{K<۽dfgusu'd-/KPgRo#9"EwdRSlK$` " 8nk(t (tWشdYEhR{koEwuomv:`:LDav/+ L44CfMlR'?"L]g[enr[j*,+sS Q Q<IZ6+{ҥ @Jn1P&K9c) d#h46+q2%kvcj,dL%$j&! %_d;'@{z3+*n)/ؾZXwf1wLl{w4P!X4`B%f3(B#.~fP6v}h7$Hv9m$ !aY1)V! 4t Ԩ+$\L?\L1)IDpc*[YMGէ/*kd(fD2GAJR2yNm,RHy)㓏^뜷[<~|Z%JqCT*X !:IqM&b놻nuI7s{?9>Ho`؈(8q#+m!%H L(pAX:ՆY"m$I 0L=4p#ß0`@:I(csd@m`$ +;B7 0IxbaI pBgه I“C A߱ ̄@BLo jd" ,bF_^$ cM81 !C$X0a^Jxayc1$5c gK{,u6#qEבe>Y•b=Zq:{fP$M)$I Q$"pk{ٗy_2{o{nYfwER }%U*dW"IdrHqVŒFH5f^\DTu{0V} V'Y\[d6" RP2ԳtGRL8E i 7q-Dbř$@8::u;袳& Ik[,D1lJ!aX.Q(~%LhPahCL7ganMJ-&NBG-/Ð.0j+0[F7NddTGTno Cmǘ gȁg0AږWi\:4RWo&Yzݏ=0ao ]}dO8KRE$u҆M[xjLbJbm|$:Ɣfvܒ8x+md}oWd>1*Qk/# ]" KǨ&|dO@ v)D+k0:X!Hz8TS2D7&Sjdi}<À$"<ӖsZl-RȂ*4)p|fB*VOA\7v[M=eo>oZluPC9IL;& #!%A Eei e&{큦B3P *)yb+ABx2njL&i,MK6aF.jk܆Mj6b!+*bʙ$҅'!|c\WP0hrXZ4mHx7Ցk{ 6){ Mdb$!M ,= e6@DJι9e.grd&I赎0\AJow/ʯ;&Gm$@QM%h'KѨ(db) [1 G2a.q8K;sHi\,}.f8Yf= XW^'c_P Ϋm975Jg_g[6}۸0Gg>>  %mG]:}*?=ɡ<;BծI0A1GGCxȱĦA:h-P -.f9 2\\^;6ks[XCJd!KNi%: 7f7 rv{C _srX['u^cK}K)VSZQߖ)3kQ mmD`0!n niW8h4 PaV#xUQQ_-ɸ))D OUy[MG?4(jȑJB!K2OZLR)d$hBL%5:3ks@1×z'v_B(IvԏE/%T"N$pVC4.8gU@5HwB?rňH$Pqk{&hԚFm<}KNGav45H dy8-= % XY)$f sLonާ WI8m$rFIH^/=Yep´53 ? gh$-< چ/B}̏vuZ}2#q*W,qac"xnj&2JYJݷj BUCmk|>߻uieZ`RG  E€:7 ҋ&ӏ._FyU%$0ss*dSHS9 p#Rhj Ҷ!T̒5lۋYkVoOfwBmG#d *$Ydebe* 3B /臤AA9 厴i=urۜut xB9|-ۋ럚d$JLI+p&@ "J eC$ke̒جˬ~G7n_hOUOSϻPKlL>%`,0,"bncD]{-x}|PP?ꄉ:Y[/~'^7}js_F֦UO?; 0`D$̠v:%P4 =EuOK(@(NraNiV[wY2\9>j $kܓH,4ow/gVG,4ß1PzL k})C3MfMX"yA֫7%BԱIKqnխG]w[i} &_v_)q\}/=$Z,=sתHP#1m$ e:\ӏ5ӌ9ICg8cl1ѳd6 S 0!aDr 2ACf.l:Iaj1:˰ĵ;ukL4d]TVnk ` - -F$7`X(ܥR!%;t*ʗ">9+12jaԏnS F\B#eVzܺVxŚ˰$$I F (X7yz٧0Z6Yy$ /jBT2B.]Rw:䘚G:\d @MmT Y7)XǦyZ] Y!a\\}RɗTﰨy ^qMJ_>[j)Dc }eʔzIJ -VK?6ƍVljf^CElBS 1ՇI)oBdLGKk }u0wI^sp5=w8i)60EY%7;k{27.Q+^,9qZj*IAFm":+ᷓR, SUdr-Bz:˜؁D,,(L =I%!`-M?9$hfO̯!ssǘꘫܱH=v?KT$X'5h5d@CnA0rZbX-Y7]~9#lRVNTZ P~siudjt%ZV'% o]`t,U8[ pҸ* +"[ @F<V_ﭠe0]v2UJd?2GS +d" # kG'| ܾZ@22q[ &DtT#Ij$}h⋲4xHHXOjXj#=f.)&_.*"cGBu-˩2 rv֘VA>}RP{6j CrE/ut"t5-w)Ǖ=pr9 z,Fp}J%2th]s=@Dm[I+2$E43Ec?s6"ܝmrĶQpA Xu_~ڗpldg@X :l$`  cN wq۵Uwϐ+_@Mh:vUttw,?DF݊ɔC09niF"V*[gd#+o(4r37`ge]:dW3R7Ϻ08: fb"&?%h!W_[hչSM mwFvH 1"<gfYKjx iá&/LMCϛ0y-pGtG?' *$qeEƪ (YިX%Ew]G«?HzC'ӷw4@hP0^,@I.__dM\k&" qsp'|p= FH  /iڻHm xΏ̼raٿE"!U! rd%A:Sfӻ~"d-$ X/E*T`]Sw Q1XGhF@ #|P*F"+Hfo]G̢X9Q}(Du) y>3;,4Hd)iKzvfku]m*Oɝ".%&Lg޴qL" CA@ CA婓?N#Zi&&iF"g~6,C\6r G>EZ%& [R}|ULAME3.99.5UUUUUUUUUUUUUUUUۍ. 5%N} N~L6Lf" /q05$j.M HƜ-l ͱc(mwf"Lt|PYkzJ=a` wX[Ls?f+?ےd?i& B0N  H*!^_(CH-UCzW#DJ4\UXT Vvk'ȗ.]5@$X]&C) $ET&6ˑ9`( Њo҅^1v}P,,Q/^_upP^Ծ*y PK28z41;|NMz J41ٞR*yئ7qnyHTZ^o(# zTgږ ՕU`<~+XQI\7( z~M][)~ d.N*p* 9B !_L0pc h0akd DHJ 5,uG5er BJ9U<Gk쨰-j!.Q Rzt<8Au}FDH(F+FaFI@FbJ8'lQ },\#MnmPg , RPEG%KD+4 r)qR]N2ϑbMFM롴 o:*LAME3.99.5[)D01b22W!@E$dg 4R w3]|IWxz"i0 ُ npw9_-$g&zfN^bB;z8PH.Ii>"f8BeZu"B鬃u6oVIS(B⟵}7 d`Sc $@ MB ]Ǥm`$!3NJT_D&P tMrdGڭ˧"RdƧ6+2^U Ytb2/)5/ "&8`AH)3}; LVN $đe HmFa-$B;aT2:TZY4)KLAME3.99.5UUUUUUUUUUUUUUUUUUUUUʩT6APc* ]4ؓ)63/7*&0ڰ?ng h;I kG5?<`NX NOLQo?$! V崙dJq)L"SǤq #x-QbShUg)Nޟ.ߡU{z;W^jW]PP4<` @NWαhha6i#>ab 3hrNPwCq\TwBKQujJ '`~X!]}:xL-iT޺^ίGfϭo؅LAME3.99.5ڛR)@C0Z )0 h'D hc= ?#I_X$SojJBv_΋Ru ~,[@P\Uyc1YR 2fڍ2ZB\8Ix!)E5B]ŋGmd#]{% \bpYep@OOYOcq[x!z"Q @Kdd$"2FV>]Hy70' JcQC0&FORWoIC`NiP2ʖ*PRae 1sGV(.^E UbYP 'Ю|.yK:Aښ3K]ʹɚr  Yp J xhe*5)Ch%3ZѧgnS|#1~VܫvMËG *Wl.tkgHh&&HKY_P/^=xrbgejw@H sL'3:ב#.ȅKxĠ)*!( 0GjkeQ%*= l$p H1[,7) wWF&w-dH` 6@&BIw?$ a0%vס'H ݍ̯eYeq`Gzi5g=$q5=WZ9h˹~݌XMy έ[`4? [(  ! 0fاF+zٺko s 6x„Ph2G⺋F|CP8Ļ:D9 ,(Ƽ dƌ:,[c&=\Qˤ MZOJ;_YV ^^Y3{k57 1|~w,nYyq濙|*w]c,BQPx1`2"Kz5onbADdK~s .@Y+D}ug8!a4iPE1Șh& `P!ǡqrP cfA9&rcM4dN6 AA w wyG ]~9.QxU"VůD@ʜ(\eM~u^U;UW_cϳ78:VWoK FVuMREo^g@ 4ݠQ| #8.SULppKE T~s2o l"w͑A}7d pɰl}9 ; ǘ:aJg/Tl7stAndKN P@-+ic= z䘃Wq5i[?oG_ ~S_@ nJXK8 s &o*Θ_\MߧֻYj}.[>V(=e\pyKUN<""`̍:.0Bo;$ys.W~=  sdz3[ֶtƥh(#zp2#5WC@@MZ%ۃnwzw䇋Wx u;6][%t7PSZWդK ƿ_H#wiTXYڅ DFѕ." u~J֥E>V~ۿdJUYkJIBmg$z#H"Df "r;,g*gATC6s _h#uv.7Yk|Rl|k7JweVoqN~#J/S{d]L9R~L(- +:UNSui/G]UX ߲B> BDP.Hƣuu4C*@!~A; (v/AqU=qS@aYWmF<ggbvr]@;l i;(# Zu$ \#hs(#&0Fqd*[^{~ " +a Pg|WE<90f*c+`MZ) rU'IG7n !Y Mm?ѧu_fv@nH I6PC0G pJ3d]"5 #m [(j8FKhٗQcZ6,(DXiT`X{P֊t E#;3+7@r%[Zu]|UF8e=]ssIv*LAME3.99.5@@v3 9(DTBl{-Xfa 'Wv̈&H\69a=E)?t!C6;MIFdAil"`9}mg' zҍceXb}W_C[vGPi j$K_V?wO &RJ1.iЀgB%{s{owI.P!8s\6QufB ,Q5ڇM">4dO.Xm69ĥ"LT8˲ RӞ솿b.Y*Pd"_D఑bd8A u:߯;Uv$=l ~a0K4EZt&NE{> eR8ARBZ~Xe)XƥaeY8FP`Iӥk6H&f>{n4ƊR=4v~ϛyu(m>Tܖ964@d!YOB$ "Qmհ&ZbU"$@܋RFIĢ>rb(h tpq^/cKyZX;&whsK$S O?Cɭy*IO^~اNjJVAwX&,W24D:yڌK9Go^Uκ\CC?}1LbCS0g7T ؂(_ z->k1PfDn\CdIMw`*i9Ā1)Y{j7$>K@;e47^}.eA0ѫ3 C*`~ k R4w^f*_sin"?4~L*&lIE49XQk㪘}UWt+HvZ4`z;0 C^=^Nz'(sbL?G&&4[1;M!Oѥ@"m̫&Ѵ=HIW^ϳԞ #v-+ ܧw>BK#>[%Q]btmssOCCDTEP}R 説c,*edUEa&@ QgS&U}؄@U hA 0а eX$)KwB[^)wݽ mgI[țr!Pk"[4@p a}:(-t0_5r'k(gg!(INUN~1:EvAp?}Q2:kËgtvVm&$Ө]mLAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU M(\? ]IADTSz 2 T)@5PH `EOk)tIj02gUbWo83(1U!dԀ@k *d%X-, Y5eMf Ԁ@-$mQgb=Rb߁.]}YWT ij0  Q5@|Yn_E4obQ R3€ω.U8ACv(x{cjLfoEDARٿ^A!PK &[pvM8&Bޜ+4_7O*LAME3.99.5(MM8] |Y3yK=P1$,!Tnf-qg?Z8أC([u nz @ Fs(Zȓ]&*dM[i|&` bqSL!vw7`hi#L5Jp+slнgz6N8DRViLg-MA D*  6"4[* Kr%+w @7j?zvULn*7ozf$h4y8L<#'|0] ?.b^g ){H2{?1=u_LAME3.99.5 ۳&QE9aZ0$ZNP'i(tT5K(@ ؁ YyGf@ !Ԭ,%vd9˵}Њ++?8.V@5[ST$+00X[لvEy:3"=(_LyjF}˼dހ3Fi@\! cmgFszhR:P+D @QmA}9H[P}asdS,<{_;J-[߈fҫ-V4KZ?ѮOh-@*8C-f~nQ;J(;q @rR q.n9.i$~k="n>jY Ҏn;^jw +!dՅ$)D5-.>>Wu9m ZibYתUbC"}P"-h}j3|T%U!@*384 C2^%]JH0FY{dGS44$=(Hfx7DY<|b0-C˖l`݁K5Wn.m.TGL1)hmBFXB_M^Q%챉dEѡ3m# Hڀ$0J$\ Y |QVRY }{8,5Afv2 B"-je.qe" N '$/#ZTW򧁡A`>4YBb‡BEZq-.#n!=mȯqݽM޳{@Ya{`A[dҭ@c΍{2BQ/cQ4c3AwG^= _9M:'GLAME3.99.5S8IH;* Ud:.U8p,H[XJ{~ǙkմDmXpQBqf=n@U.4kS}`[z 6{?UvdFT`@b}OǤ`! YƿU*t 1A #L~&qj|EFcDr)lqM$XVKSW *:~k+t(/d͝;PaJ,F$ #cDàʙa!t5I_ `\a,0$=?ghc CYJ( 9G:4./ Y%t|tqђvc͢CNK:Hn<#"M[_9],U+G(r7#k5[} ǻv3DP1, ]v!x7VuwCbMy{4bdEGW`,@ # Yo# xLi\ ܑ.V{ܝMrOSƢ 1`uVJ @Զ ܞ08XP &F%":Qc"\s#@0 G"E5UDd& NB7Dr+rUuԡWOB:0ۋ,v(u{\!,M W)|#{y*LAME3.99.5@I2ƒ$2"@eu^F!EIʙ.jT5x@BU vŦ^խ]oCUlb'aPȕsʵyT (Ɗݵ`T`멈eQֵ Xբw%Ud{/T2b, M"!w3 $ZȿdDFMsisd{owA3[HH&)&ZOtRd7L<&H@228+Y2a~Օn6mͅaqcYBFm)4$ޙ*L Ui븳eWSv"kBrQu(SokD߷c')H @xK* el gF%-m Z qpj"'A9QD A (t$c tk1. 'Ul;^R|("t l( Db*L 'Ȝ6Dhnue&/21/dAKLp.@ L" 0? $r 雓F KS9D0YlhTAK0sGւ:Lf-W47E?4* $sPfT*q1-.GظQNV9{A'xeU16g^NL:j9}ORp*[ZԂ^#N8jRrXR;Eg6:=Ȍ[ALƼbv[M+/ wmMQK"/QgR͏’b'+XNRǚܮͨ=NHJzMeoZ7n3 7;-3ө@YR(WfdHb@- <7w$ys' V3CݔCq S,1۾xwM^eA%:Q2E=ư(dFhq[Z@4Q-R按uZb.W,gf3/)QCP![32}=Q JR,9kI"Gw!ZR&()t7}(!P8,)$D$.ky+;#H,2ªY (Fٮ O7Z`'U&Gd9Z !̊-ĶȬX@n 'uNXg H?4S+΅B xq*0d(Nwa% 7ǘnd0K!=7B,͢$tg$#1Eͮ")u2R劸{Y6][Q^͛m^o[v|ހ"P'FE`IA2A-$8YfD1a\ icRy -mdD| #+JH6tݻ}$U[H\CY 6{6e >R!13$ )zu$9C oBղ;b!·ED:QI73;NI$J 1kȇ@&h\DUCG~#H>@ ,ԂMrW7dI&}ydRLq+p'`  -g%t' +spѕ&npQTS)vE*&VarJ RQYklۖϹ݉w֭wݫjZxm$[l!sC"cJS,Pec`Na ^ aO*i _9,0R4u/DSKm@>[orTRe{a`a iP2{3&AdʔJl.>5m2=t$@:YU~< @yX!YaFT% ۙw݉ϻWn_yeZLHLBYdb/LP' `x3i%rY B=4-;2_႖`l `⯷!ofmV'E4Wqt :' ׎|nF"hj@1q[!!jOon>LhaD !QࡀD%%BaETg}R.}PU17Xỻy@/^EL̹O5j#E^nLLK-ت(!EoN1 $03G' a- wgONԞٙc3HAʊN٠ݗZ vv?:& 31`ČLa^`FaECIdπ<#cf"@( uK=zd0T^P>vc/7=$n&d "Ş@:ӯyXhCqAÝۈFU^(XZd b2GtCe. .r+hT- 8~ԡ6֠!j[-%XG4yhlj@$e&>#[6rZy QaV0\*2MBRe=PǶd€2[S ")"AkDmVo'<uֹU"@0D\w1F[Dbǥڤy/M>R> 8Hr)% )2VBa Z9EPl ` K5jqCp{{=Ę@m=]]43>EU5[['s/ ۧ@-*S@ɶԛP~l_cq,b:ULAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTam9ŠG/xBӺ.PhdO`Yrq7~8W_B?z (XH[ )ՄJQ5G/FVtvNa2d[- ` " ]o]$d$Ԕ+) $H}#WE \z]neuuRWBs<ˣ6q LB W>;"mET߰ o`t]w^YobQ#]?lnQPqFl`5jRXܫ=~ZLAME3.99.5DqϨg"yX'"rr& cnHDac5SˬZrOC!ꮞyه.,S]4jޏdۀXY+# oi qD@ QVcRj\ۧ}z -Me,x=c)$t3]b#z^Q1thyRʁ8<ںQ}u\o?2ZR̎ Ⱥ!-1tr.,wu:vvwLAME3.99.5 qYMr/d! >3s84 @4hTjIi9ALRHPO]hml<+cauu5 >aoLp4waJ,Y}ArG"Z |C˼m7ufѣGQLAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUpafhL.F!"J:G5A-h%M~ܿFpLӧfffvk~u I/*oolMv=;߭JV-J+RdBЛoSB9uq[Lsgu{(1(jmcIRMQO1Vz6})HUJFdNTf-ʳ|)y{^ZN?UY8!w)ĕL!L]Zz쨩iA20'0sm5h٘1NG~neLAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"ɎLW+`bi$%g6Yf.oa 肏=cz!YMD@ҳA #q-d`US/*% " g0밣g|앣Fv(fԷ#Q5 M0c\<qȸɖ\բyAhNwcA^8B#h*Xt55xĄv9uXq άC(;U$)iXsHEm6JLQO]WlLAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUU;lJm9` A22?qD]L9+v?*(:ᄩaGKF24]*Xcv*Y A@c@aԒgi_i$v~ T(l @2ϭkǶ :4Ën͇"Z|>\cvn Gfgl|%G 7zkzsY01bφd4AE1 x=%3apgG TcZ_F@~> )-*1K\\W{^Ogo0U- iS1NCS23!~I!K%F{)cb%V*,I_n@9vGXVcb˭GI+;[:g;#?x]%xtQ=6l7Gս02m6,d› 3M~zQwnLAMEU00Wsʍ/FVBP6˝WKP3(r͹gG%méuM<5QEMbc^C[djaMKd{_KK%@ C)A=h4ʼ1ޕceW v6T6.I߫~5J+qCeL)mٜuN@Am(i[82*fygLl<@m53KCMSE B$dvNM{ '@ "͏%20P2PC {'4&!Q-}g/ZɚǓL rjW(+LSf7Yx"RܙU93Z3?̹2p_}2(dY+=JРHP Ro?̽Ӡ &I%Ȓ5cQDs5.s8_ ap@ a#܄ :N0T'.< _41!rB$TxJVS D8PyȡP"S-Jݰˣ^|MTqm38{Ɖ_Sg/+d^k VŒuIxe cĦb73 mӖ$PC@JP6/fs,exKXC3氌?8ۆ&J!Cd @M%w$߽." Lϙ_)MMeDĜ+ap{`nT>&{KC%ljiM"o!>~]$L$p@J[IĽ݋K)h81`+A`d.6I63/wB)U&*8Q˪ʪ`,[DjU:*~2.Z~_C!Nu а,$چ$EC%OGo=Bn%G)eM~MϬ:w n iː,`hL-VBC P8vI.!*̙m&q+&5-XUjj%35Ku#(ds@M)6# "I%3 $xetK,jorLգ,P, y& ^꼸 WZgԛFa`7`R`hn\ߩ'"Tffd 0/" \@m5,$wf|kli$憭7 ub:ߜ?=~޿I@<$հ 3CSG$zib b袓Ku|U z%j:SJ vUmq")bhL.WDQxv{܆ܠ@EP`w{OswW؟V(c #SLAR/ (Fc$@J p~僸0H驽 s-JY)y{ٽ6fr~v!ngQA\#H+h!>!DSzOT1Q& =ɣzd/MSI@X4fQ;.nqP^w>q%'AaSsJ WT{n%Ic0UƼNYڔYE!WhֻPpӳ@B:$PJ=r`5SY)(ܺ`)V=wēՏ("L1Ҿw5Q bA"Bu H Ps xi+|&Y8y:c7EǘE;J-dsVvo H:+'i"{̋+YrdeBkīrTV-*~ v7)1JBP|[f*d?TO*$@Ibi AMf|:yʉ8㜀PeeܮHat4E)a2 U_wP+R.$qzs#[8V}UCRmemI ]qZ??oR Z%&*M$_,/gSVfxEf"o;_t`2ń/KC \D#jo3 Rr@R* 2Y,DX5 <sW%zhL( {Zødgئ[` {InQU)o9H*;Egt8擒@Ԑ^ `(?[CDəBBR#e; A[>p"| jd:@V++!9B aXܒpd6goiѭ}Ͱ_VAƈ5PͰ"+:2ż#֝تc.wYWnIEW2 }(TCza00./Ϡ EDw z5]f7 $b$b>lzwKWvtiyb9{LAME3.99.52xДqT1BEAx (9b>psP! udBA}KWDUq/GRr"5?/GS =]8:ZZw=?{*)woG'j .4̊;FK6 f!qpir@݀d} \Ǽ=4>N~p]} 7FL4l9Ā_&9nRסk13]h__( 2P!ELJ6*uP7+s5o>Zg澝&2R PM {%<qJJuƙ4VҀ@6 > Yq]u⃨һ1d?4D@'@ A 5_0}7S414.0^bu>dֈ##aĤBr| :җ5C41iCR~EI{יLP) ɦ-i#uGf*S fL !NTdx AS9I30*|RFŵm 8d;[?~ΦmaU9 8@ǻZLAME3.99.5@9l@{~c5IPQ#@Ohb(f0Z{l5*G INoͷN:])fh7*}Cp44[͹дX{6{m]dK=PZ$`Y"AEMZTƤ kuX r 7L!@Qe93)] _-荳+*5Yփrڋ82#rhthHL`pD[ȹQ< җ8'~?cgdCzsjKƷvX#R8̭dot5 Ďڻv]5c@R M 0,Kr]jI&)|{0WY.$ZO0j`Og< 9^:PV @ig Ozr>ָڂ45}]sOlK> Ğ[ldQYiT(9!eAKM W@i a L[1efusZC yւM4F0`၀2b8,") eXzImσYLf^ { Du6 k 噓Q:!IW.!qٻJ|TI!*WyʲgL]49yɒ.OoGRLAME3.99.5!]`$|=TAsU&F}#9}|r^b5C0MQӠ(~\1#q*Nm;9z'BiqTtNtΠʦi/8EA/hy\'Uu+ѻr]}?OnUZXPEv lB kJԋM68rRL>Cd`{i@' a(0{#`1Ak=,j[&TVOT9\c Qr!Kg75;ƖXڍj\€{ϵ߳A>ڰ6PmN(X]MjC=VCۅK7c{§3N'EmK9ܶ#jfβ& 6%ݨ Uv{ 9X0r>+7n=~ ׻oA$F2yT&N粝fzosݺ*#@ @0p3ƚ]Ԉ\qlDʥ(rxnKHfi,ZV^5?dfs1׈ICd2{ P&` "A' z~%0niX8Cim8LJ6<ʄOs_G 2 #g|с1ვR2;ބ<ѹt PX)|Zp:7^0%8Y+M5M8xjXKqp*0kg),rSmQ>le7ͅmٳ?:rեB>3tL9>ȩƴt+}}7j~ڿwWuLAMEU58gP")8IuD)ijL& ~U%pAv|0y Π`(rW*_}N+`أ{PԂ j6d׀?1" ) A% 0cdT'KU۳m)5쭾ZCB\&HU!Ǹ ˁ!'~c'È"Y : %D6-osѬD'q8# MDzM/ rꌳ4Ҍ~:^?G^R*\r."dɶ^į}GZ jJP)mqT<08L *)|EO1 Edz`F)Jlp4C^3r =YKB9brH]%V}M?@EK !E\w3ζXd)3Ny% ; $p! [}^}j/&` GIA*o,8:%zBU9<9Px JҺ*Qviɕ #AYdIsi!JֳU &M8!'|4J()vyM/L뚙NBeӳUu#[ eUTi&9 R XCbnK E'ciggE!YKdl@-x4Ki,/D敝qLGc0ƴ9bBb60:A |#g@~A' τI=^cqeȎ#kŢ$0*Vg\Uu7IRJ d2DL 3+ClɈdpOBۥI]5Th DD1C_K;nM1U:( B<I5 "F+pEg(kQi]]90$JQF*LNZ :XBj!@xI%6$-E8,wʝrYR,BG{afddE,Ip. #E7!oȘd|MlM1"nDI$ZwVxU(6i?~TuDt,B:4'"xJ"$UL2Bnɓ-"j+7{ijZ?! !}1?:yխnvWk X$It Z@u'B3^FURWWzKmn6d #D.Q[@raEd"^!p8T pz"4Rr}[a~xW\a}Z3يSziHoGiAbC)$ȝg\*!`m>udcūXH, b )tȬ$0 ([X$&$+[ zEԭܩߵ_}=1T9)iЎ,Cv% !M1GG!{&*l㯽>(MtGo_9zKi>±Kȟk0yu}S[)%U4U*,`ROpqBzF JU^!P2̃i7 EiBLF>p q0 4F!K'ۜL-_znQ/vȦDsD-u˦E0T![PZ}+l<7f}.n,C I<gJ@[ziYk,Lv]Z&2 Q[GOE?Nuuq^CubJWK)hf+Zq!0iȄ4U%%bLO6YؿVCkTY Dm`03cApnn[JԒlM1HT$47knUKqZ6btB&'#F1Y8 b2vѤQ^Mf'Σ+<6݂e,?}R91Oz6(9Z[B a84gCKK"=E!nW1_jDHuiRq${:H!˜[M]ZoNÀLY[Q6$ Ж> 42vQAATْiFkR$gzo w#IĬM@}d&a2)"_!ֈdp+y+)IR.4KurP&+t14M+1RnBk.eLu6Yߡ)wZUKdu@xV;sX] $P,]V߳(۹l !3y6 l4M"ٵ‘rMGJ5oHcH*F𴙧N ]fzLchf[B" c 9nڜ$q^Dty`tн%Z_5~g 2۾HamUq S&I:CR/=R 80E#R8) -BbaBik{(]`بž>dcE+LH* "$.8,LomLiMh;T9D~Lmä˼:Y̳8v?AD?dK;/&lCLR%5oCZ {)&R2ӽwOO'uRD4u>H=\p#S92.0(9;E,,y Y#,9-(l-فR%ṬTSKz Yp h,kVg;{| d6* q#d,SX-r< 0ROD29 7@,:cD6Z]5" D.5!C] Q00J*U$h2tHӺ g^"ED@X>čiڥ5%NJ-#L^ke[lYbf2ٷ@ 9<Ȁ9H &qTyJ'HA˩(d;dxh;Al,=$㧋eɀo5Cw;ed>Ik- # 0ȨcEWMi"kQ_ݟ٩@e1b7,PQLN4Ho:4n2Q9z)w'v3@9,@F+nEp}'f>֚wfqtr:xLbk}sJHj"U=_7tƩ}ϳ hWFtd49$i2 `F^] 341B٪Yc3&ezbgRxi53qچr+B\h!ܑ97ɛ:kbdZ(3&"l$׈d$j$quw ĥVBeWق@2VX0' &(OEuz?5C&bvP'B֋n6d= |K}Rhy#<ݙ.LQ[]5^Nb˩iuնж'RDͲ9U5u:ÚǕX{q p I5RXbh}[iR=oM@ @JPM#st&NySbèWT5̳H(1Ù\q"90 =0 $I~#H{b'$4sǁ%sTe4ͦdHL{kN@! '$̈$0Qa!Vlȳ,ޛTWLxN7(.oei3a2-tGs?vݜ_uJw="4Ğ0@Mi\$rRL*IBj+ -OG J | w='1DZ^ϳȣV恝GmC;OS%$ LQ{-N9@UZ T"1qcե6Ϳs&EA &vuWM I"$8ZkQZI"Ι%07Coʆ8(ZHz")K{* ="9  1!e4\gNҡ*RFUH,8czw~Ev_[7?ڔ+\Ѐ 8-qL eg*+o7vj,e3"i^tozv HTX,4yxcޫ||'/D9Y~&G8I̢ED5ъ$U9vIxΑue(ݬɐD"0#T9**WWuɏ!=GJV].8D,Ddv3t94|L!i"xx:;(2чYEt۴qT;( | EPZaU,އ\uYQ)6NdaF 0B$   !HdtPhQ- 4}D,"*dffNhB!Ԧei"@œ)djCm܀Alx"'Cgh2,LzрQ.1ɨi$:p^Md1a̺$DFhDZ$Q>&*SI#Ly ipH&eQ!08P9 *'hw .Em_H֤Nb39.e@j~\M6)p)}U*q׭@,7<U3!xLCLh̅IP6ު2#us8C)\=6@ dcE+,H-c # Ƚ)r$0*"Ö) ;UU1Umor&>[O-9,lR>K;Q&/σX ܐxs$D(%}aℍa( LTiffQ=4Ã{&>! W,ReK&6bSg6[# z) ( J \ji_-N ՗Pj0ZEY=V2.]ꚑ~9ھ*;%ҁad5vG&"F&F Lt:% y,eDdew:8ڃޚoʇf;/g0XEYa) d,LIk,r*"}1H+M#mSIB*֨s6vThE{ HfƲ|.`˙qۨ]--e" =v R4jH1e&hW&j ,yZi)ӓXE Aһ,ѹEv,g.Uld|J%JE!>2g/(r8 )4i,Yut5:Fg5e-Iw |\H&3&fOq+ WNW3Vl˕f37g ?PQשMRлSzUR MJdcaJvqPN)l8κ(dbHJQ6L\4΂<8ȺI =ɛ2{uFIonQBLd t\fCSd_Hc)) #&!q$ `*m4)lgڔ5BTVyMwNǼ'n-~uL)WP<;Mitj BJ*GP#`,h9٦DžQ`@@%٧ҲA ʊ+A /ByApńBBŦG}"ɿ=W>wn9~=qS0nm SI2̔lzj&Vfe[e PYOph" `V\]vm<άܶ8DȟCAʹ*ħƍnrrVJ>|E Ӛl}&RU2L&a\44Yiӕ̢{֞hMN|׶C֥;0f6docFa4"* )mȟ$ naF *Q.?Eu! m:x)[FP^,fKd&l8D7nv 37cx{:*)ajǹ,}XPgXQ-csXW6!濶-vb/'+AgmG4n񼙭f*GkپihiYQНz3J)"Q)nyGdj-`Vs)S(k~pT-[}iCe{6\QI ̰"HC@{#o=&/&M[eX:7YGpB\Q03'Q6L Er(MDQ`A d5P * #0d;-$ ِp!SB6HYD.y\NqI RlD Eʤ_B6BEDX0ŐN\$M#E"v7SD@(w,,p`/Rc[_QJ^s<"`&bhVId"sN $ @\ F 9UfegvkI&HƝt# DQ 1XSy$=gs ^xzk< u_fn髪VX9i86ldrrpK=SC ;3 ̃m/c)Lxɴ  !.hZt4ֵ%P^=4=.B1Cj6T>ʍ@'qH*$IkG mAv&ۨUQ{Q1n JӤU=oP j5<8!ĘRء+\=&+H7̑op35Ӫd8)Tjkwپvz7]u:v,G3gƇx&(8rͣJbj_8ڃ7^k*5ӣ&6j;:X[w/>iFS֕EL2p]n[{~ns5{Ic$MdU.0fԨtmc)];#b̥\/Yڪ4 喰2ג#8W;@͡,bfMI񮈤YU ._o>g_H&%@Q"PWM&P@J!t :f, x2@i4%1.NAA,L Wfm ;oۻ:Vsk)wLkr2 K!E7lTo*5jem{EY[Xf?oO_WUR뵭]PJ술4-!X$*j!@&q9dMHar* "͋<ɀ#X0 *ƥr(EIA F,f]u|M[Nr[Ud2c}l3zl|2Mfi, ƵFqi 3ڻ>hz](#kr 1>A_2~U[{(Wv#mqP HOg( ^=̉j惥edD8L{ )M'U@dt(HUA{HFP3^3Mo%UV`sdiK$qpl-3:;m(j\S$B"K]Q6curG]ݤPR?n_ϷWeDW>xX5IEp2v-I&p[ -زo_N}[f5 ƒhTKM8K/87բ=oV. 7,+Hm4$Іd-&FE~n͊O6aUr@D*I$1k5|mRa.i ܂;VvG9O/&S='m'excG=3S 1?r ?KEnԢ&ynQ,n-Tw~.g,I/_wo? |^d\t^c A $3 mٵfgYjKKgۀHZ6\Z"x"e]o+!`/eAj#u+H0N"20ӈq"řgFS4'8D"6MT˱n5}V [e,-b$*m%}WnN?MFm,Ay{B\q'hROFDsiuYJòUlĻn#%͟n̉{&q(R抦KKg1sہUYUYD 󍾺:=qc6E  ": &dM @{ h&  ?0`f|Z&2C;pD8\xvuսE,-f}](BSoqV+ꡃ̄CR9*]!I$viFWxw<$)B9H]n4hOʗomOk3Cb0Æ@ eʶd7Ǐ(CҬ'qirrFra Xt`pB_[4xg L3Mfj[ZW[9Jt[5,aŻk/\Szɥy߿abX?$供;ԏhj7oaV} ?;{_K5-U [m%|MWr'@vbv3';s4xfH]W" reICXs. w7lm#="@uDaa5 Ak+#B;oj=Y}Md]k 0K g?4x=q.! #Bv8X9"IXCMP^( JnrSQ)gER__fOS}fHOɀLL@Xp=pN{VC]uqa2XYjfur## 8& @eG k̭JIcudр1 *# 9" W S1 .`Ut7nFz ,4%C қ i5  b@pc/$MdEwpm]2A&BȲN= :ƽ/ $8t sYcۑSãJ Uꩵթ&F[Uj)A" hJ!X#s;OE[-1N3. s\n/?nYêZ #E_4c葾g&.qBeJCUY'oĆj`xLD A1g#bwєNQ4 ?7%C$AQ ҳsM(1>޿B6A´;ЩdRVXj8H")BiC OpԧV=T C 9WIf,i^i"ihL}T}Vkerܲ9noiwy@ml\|ds']8ڒ0ёTz)\ Qq .:oƌ8cg)TTl(*8‹ga32/ID ز8+A GXgr8E-D(RE.N )ibd^]Xk@ s8mFJ뀎/}$HP2DY) [8N{zfft]EYcU=vvgȶTR0R|J;5HӑGZŬh:UX鞣vk]0rKS$ '@6U/єYSK{PPPy1O{9R˕@A0*| 6UŃm4Ye Gួ2\0老2A& 2y?^aRbݭCCkieUai\;?o?LAME3.99.5`cg"tg1c Y`KʁdZIvJ2{H̠+"3)p @ )w35yclb1;YeBzUȨ}>RQ!F =f89U4IQ[ݕc+" Jܼ5q.dvEkI+\!@ BE$uh!cLQd'6ۈsiRr{?GsףuNsSlܒLj2U@O~,ee:*/UT$ %qj/l$dGcg !<[4]pF8H"߉J~믳YI0V%t}[:yiLAME3.99.5qGv! .C25: qSYF(تB` sX. sk^?aъ鯿A4>lNqc13fEBoF6s8[dQ3B$ IC et0BԉTM*;O[$p Ԩ1t@ݦ) {7lJ2_N[6#ۥ =viDe@R J]bN4DH,>.~qs[اC0PȈ \;-6*d) PBR'*oX$ \mѫbߋLAME3.99.5VX-w]B 6H҇\T p5[0?wrQK"ȶ绹er3ɄeSY3]z(i~G"(Ѡ-o/ _bPT/7 A!bjLUŃ_4szKCR "\ VM2Ҡ:IjU858!Vڏu7*k6YLAME3.99.5S@15Y2, 3BO~ \d辍S%!Eĥ6OvS2kZq o,.kdSKè(@ " c礮".MW2W~KhjQ^+#]壔>=E,d&RQ'\W?wN|`}DOR^aU9Ll9 (XXĄW P<$jMKMaMSfȥ -,'Jٍ Ui| c#~ :Ȇc>3U\1uBZ ^pke{DRT)S[:caqgPyOюmnwRyK(dPI& mBM Ⱦd0)4*&mc?cf r [OS`Wxd _XZ(&qEdimD;0$.#e}!\HlAQ1Vgt"$N`)z`cf!b B%MZ4+$!4ֺu*sV*IE˭}R0рa,L`ID:I^ 8'UJzJLnŘV+ɴ6w 0ń5T7vm\Upߛoo'&Xnm4MXN{(.KBb:ꠎ֣b63 d=k@8A" +icOCDT inCRXǛ]i8?N, %jV,׽)*tfZrVyl12O$te6U5O,;MIM3X9`nr]ATB.`vY^ɚN{_%5H/%2XQ!ďޟZ~^?Uic*sKY$L{:b[Z RAR!rJ 6  ‰̖D nV_yc+MϬH!9lpE1&o[(_o_o7n]ciO+κY\?!z`MN0 IJM#  <\erW"L-8Ra.%`]j̰bO耭UB,t2V\#GfGԳw{ťlݯeS?}5-ҍd%KI)3R)!ym#7C%$ψ%t8IH56Wn]` O[/q4A`ɩIMsK55$6@s b@_opP@gpV480␨ X[,8CC jasi7OJ: I!)奟S/h5Eġ:u#1LgyNіa. sL:rOM(J1f|gcHfDjػDlظ۟nl~c>[mooK#haq5 ܻ-Oea⇟-PI:\ɢ 'R1( i$ "HF &4 /֜$㘏\kZU,zGd`Hk 3r/@ "]$@c0۬}VZ\~*~R d "@,s2 }_J7?GŲbcm{\6%&w} iM\QTN :J&\5MbӃC9ʄSwcM3ABO`NKA-yAKWݭ]BAݿ·`CYٲ֓>s0r9J[&WkOzt$(D'IC6 p$p9z)#@Y-EeYQ\F]Pa9L,VέR0B^+ۆSOT P6ܹdbH4(` "#'$ry#Mo>ֲÙVc~XsdKM!c%? ( d\g3ҭ pKHZ3T|wu6`B}ϦIvffͲFa2&U?)j1#P ԆPd6bB,"#cf/6EaDŕ;&I.5fA& {6-9-Z¥8t2-W %KIGC.R7fUon c/I7u3nwOsH;Tޝ>u.ߔFgdLg {{O&70 NKgyVnrwsyv\rb%A5I =uv?*Wԙ;-R-Qf7#īb}ꍱtLqa`eڒ:̅G`МӬt+;JqKy܏gl`QUE>iدuz_VWvC"Iȼ[WKD(;!lJӌN;@hŢ(hE5=\'53p2[(hѰO.P˾'&[$3k;!տX]Vϴ@[ Ow_Ncʾ5AGPCݠ+VHbTdfY^Y{ Cv! \iDȃ&<D|)6s$84>Pi7&ĺ.֤k,X&t%6fɄ8fP9#rI@h')TBsI:߆#D.5V9ys]E\靝[/LK8Jul cڧ}YJg7ojthBJJMTt1]JndN f'(p5j*Ɋ]ʙS+ryfI0佉m ӕ5dd2 *r:RD1Xwk!/MSO_uke 㶃2OZ]n.Y["BnDži+.YbjmRKdu5Nbp -|opf!$9PDom JJ&D@#kh͘J3H3I7MO4?-B5ظuF)B)^r 'z:.YH)ʅ͗B[;(cRD'h`8qk _F2cjVi!2 C G'ѡBVUNjm%k"EF[t}_I$UsXu'ZQCb^ؤ͆H,LqiQ1%"X.ߵiEg`\,6wNB@zLo]'+Y(GTd:Ck,*t! ib_g|ˢm\uiк~Wf= '#NI^JO"Z;KI]bJkQto:6R/vFqjp@˓qbոgmKn,Y;jeTfA~6%BR7K<>qKwR0&&Pdu!TP)H*<Hm, GWaԛ[ELAME3.99.5UUUUUUUUUUUUUUUUKZE2@%A&¾&wĨ£W3`0QN_1:qr{ ABD3;O̿%Wu%ʩS.x2_WDإd 5TS/9"@ l2Nik(,\UHq<`@@$K K͜1 0 6cU@s?dR& qYn96%7JBLG~k?}HoIMwkTX\2Mc)1>ǛtP^e4ܣ9qes]fOW4LAME3.99.5@d)$pm*$O:3꽧jbNn*AV`7AbX|] C ;:P2FN2tPj"6kV9+>81}CiVS͌dDX& aH..뀘1jo©Kk|蚖^ap$ "jtȮ}hM \"3 ߌ 0H*bA02,b5ÔyG6 MģɫypbQ>M':8^Pdq d}yԇ*,t"s.SMLAME3.99.5UUǝHt9FPP\ćR:Cj&3 x3LzLf~X)A[Gk<*95Ww9[s_=9Q:C璆E<@ *Jd7[i,/YL  g1.$Bi5O Iz~[nm75{z}ؚUXH,'ҥ(af/VR.%ditiTLb8GaҨ!¢AZ{ "S Lh,^u) @S%dEqSZJၠ+11O!&9O(izkvz4lԤ!C!s"*zH!"à027Ì0Vpdk`9f1M&^Cdy*uFb8gT7zis Δb=S 45.eȎ̎GwJj1rbͥkzbh߷dWzt;4dQK% ! C '|1zٛ~vnt^eckmƚ{\'SPmL_vz;_S? *8MyLy l7!I(`Rc YS0G9 9@8XFQAQ?![j^0\%l5qD hӿ=5)M+Acspk TqEsF]H)ІSw=8%٩>G{&cߛ0&|QFO~v"<.R-sSvoO|wo?2ޏ^;3ړ a®A*jlUa$:Sd_Ha& A#$sؚhtUUfC*[׹]hu;ul#)q6UqVJ QܬfTC$CBqXtTWYfAy~v+ eGw!&\No|WHKC3mmE/cؖE*eWm8uGu@3Pq77 89(!1L dPh<.(4175{Ya:=!+0÷,[о̩ 4tmƝa.dXNŇX|7 e ,΍FvB tVa5ɏq}.h]:WVJڢIbM5Paa\X2M{؄ȪaJ-J"k\?6ڋ(1NY/XQ7K`-iԿvl(Ʋ?=rv>̯Wde`C5B$@# PSr&| X2N^!:ܖ$JTgowEabe@!7KBb*l=^I\$^b6,Af8/߇ӵdf V \uDb_L'0RrcH͋&3B <e2O%Ɉ(䀡 xh(̀scs;6 Zv]o:ݗY[q biK#sNvYWu͝7Z6@pDRU r!9HB191e eOYZr.c睃ˎm8uQ0BlY$qdc`Fú`& ]#=M$HetzSUj{Hm=@T&T TxFW(v$ +ESJ椃֘ۑ?f)r+ܙo_6`7$:LPĮZELXh63 Te.E-9ڕZվٷP'3wu}ٳm uyr=jmq?u8 ʊmHV임uv\Ja^# ̠,iHY'Ls& X#C;SXj5H&؛Ē0F'H@ژ1TrQ̋8ij֋BiL&buIN·R,O9NhcZ }dԫWdAMkL`% @ |+0̈#TT9kr@jd b)F)D։㜂4(nkev힋Wk5s2Hh| x.hl'G^TZV=?3NɄ^^ePY:\؆%cQ&>[-51˽6$xLR06b*^fE8c҄5,afl Tcw7B]uKll?d B\"QGQ[ArƄIבFBUΐфjs;@RBj唆)MpFg"7Hc6qe); hFwh=:GlYdpc)@'@ "+u@$p [iKQ>163eT-uU{m 4E֒b JE'GǥiF*p9k%;Õ6D]Fǜ!6Sf\|%U$ (~l4 Whyn~ n7mVyޑձ|ֲhv@ى:]$?{ ܴgB]6%dsԜUw\ $cBIVIϳ?UhM8)s'})r%luK0EK6|iL )$%e/d!E#rqUЅWPìAs0AQX ;<+mSEߧJϥ2,d9#]#)u0ш%tTi@aE=#Mʾ{-Hس7S0{>PVa2Xe#Jxҗ'( +vUR&.%En4暍TFNEpY&9ӁOk 5BnOlZdaX:{ܨTО-%4uz(ҽ>Q nlf2(#AMCr5IP+(bQ,>=yn=}dVk # CōI%0hIWw#{x]BHu* 6 UV+H%>S+8h_ [q*hKjX!Tkv*_[lBu'G`b Yٖ[I(?E2 dl49H&0#U "5IXp>xR4MڄGk]POצ1m@A`6S\ˬW"Z8TTg"nJsݵ) ޻rx-BTX)vP5- )wo}l)R2nkrGc PK$L>BI\Zz`jmI_dt`!zI-a~F(%@!6 <ČxmMҗlҹf.сu3L'TDҪ]񑩽HB$#F!ZBXi c'V&H=Vׇ +jI,^%v{/x:TdE,/+m0:떩mbeWJxSWhا^~+b %@`@d и||T4Ʈ2uXŽtR4yi.|.ptHue2w] b. k^n읒4J /rd:dYJŭr-6G`,l'ܷs~Wn뿇 W/dI`,xȬ{c"/%1wu ),_ 'P3" NB I '!ܙ,`1Դ]c $ݦR  D"cԁjPd 䚂 R+B YnPej v2Ϟf,2]"6U dX5 lNBla''x7c_Thz3ޓ*Gdh: *8/"\gPDo.#31p,j$U5Vu{wfxOj{ jԛ1E뼋[}0[7.m~Lnf ؖ]#n1-K5wOx(27vhNd `?̼05"))]BJd"E1RsL / tkUGZLɥ7e ǥ,̚!C)Tʶ5BA)0f BTlʦmvz;=݊G^m RP߭ۊ uhVxk$$μȻ,7b,toߠ_+RNFJܥE+I^;v9 fWM$adSZL-J$&(دIo27,uE$O?᷅Uc|*፭=Z;%ۨރ"Y{l)ŠYAAP!AjSZM/d[Vl\d9PdfMx!zI#)FH Db* clR; b4GUa]vyKj3GwD1$Ģ1|s1„t Ly@@ xwLkF1Hh% -W ^׏}QR֯H9G! CQ-4ʦPcYqUI 04T滑eZ/Rza@ s%Ӎџ뭆;vG"AT٥)8jJSSF鯣W;uu̚ښme)mHO)!ń(u@x@DVAW3)mӊa LAME3.99.5Imn"DDӆBkVѽ0ܿ_bDڲe(:8CVbR=yw(F(_ܔ _c#4Vd F) Q:e%Ĝ 5@!i"f7P`2X55پoxnEO[dI(R0THw׾=H*t m `jfiTW.x@R^Uwikq=)+(ע3 t1r\hJ>1&&11 va0LN$ JLAME3.99.5-I#i$9rfLѷw`GWj&K,W;: L^D X-Yj-gT4m"S K P\b81լ_d,h f'=A@1iJÄ nѤ0WH=q{PfmvDMrO55K]KS-n[*B#RQv ,`$$rZlo+Vsz[Fzh0_Fz\b DX)"Bhb;0($eBpVHP !Ū#m&xhv23bze*4iB~R~0xTklIdS  Wnͼr_@`xLBDH\]fJ J?xw4zg!IN1{y'L˵@I`DFdP# `;}aMAIk21x=s !uQxHr)5ML]JkFu Idtz&3Fv W,funRҽ. Ypftb$., N BC$ 8H(h9s 2<ž{_ aIHef7e]кى 5we V)M5D?nOnW0R\9޿8Rw\4E7#$}u0yukxky#{U^d~P` b' (qx3;/G6р#/%roӘP7oD!XSY uq0",TE[#|1ݿYc>Le!HZOz@a WchZij Q:8ZV Mo6Qgi!$8XYFg3RZԦ+klQ/} 5xVxvvp0m%Pؾ:BE9;nP<i$nHFlYfIg /#UL= `, ɝ]0q† r(4@e)d!M@MM !,m6PQġG~}*9O>9a imVc^ʮT{rĬ\[ aqޙs[>~ɺyfE{ZDBC$N5DWDQ$ l@ KS6oW@ nHIF~ƶg'|0cAҐhB07pS -˷9Q2Dchf6j)u\6%:?QuĶ2"m&{n+v_,nR9fv3mib(ݽ͟U)(e{_2E9j~~fݫes-,ŽasD"ȳ.dm~`'d|Aݥ(?7" ^"H,R"{^u@, Uc̩)H3D2#H4# \ OE% Fk(U\O6Ɇi򎡡b V(v$GXXZ噯Z9eY9+ G 9oGwk~ bj>jvluRg ̋=JVadFG<@f/ # v!(42CNïV3;ZYC:Iwyڏ*;s#`z5^{C&mLa+D [ O(¨(*H!p@ om`$☥J>ݿӻV]HZH04PTuvȪ(A\y#dˁ'!u_a5 !',?ԩ[>buV!ʟx 0]Jh[Ug(T浭?Č[Ph <=oX҆\  b ժTy IW<\,: R,Ġh䥻\.>7,04q\~eS5W2=ASnL (aV(TvOm9&[D&zO S*LAMEXwg}9RP@*MCQ#߾펫wuVYT(.?4Iay2a+S+ {3To!at1dA4ο9P~ $~dIhkGaO $@J,6c !&=uѩG9 e7-$"dNAɋ+UdAz=W-5b;@emuԇԝ3] `_FE7$] 0G'XV_(%?;t_Fr)qian~[Xmh[Ƕ?> 9phϸ): i@9(T9v*=œA\OzwYǯxTzk+N4H0iNSMIlr$L43՝mj׹Z=!GV; $dRNxb=l9`!!g6CC x(揜P mqەCyW 6W7n{N?D[oˍfK}V@HS``hdL(Fbv@mw"N5ARJ779kfj>{(z"T+2`sLصѷP`dOx![nB=)d =5O+Kӿ͞?M\p_;sgmz &Z+¼.&)GR | a] T)_B{2ȣ : 7x ade[E]&)iL)iTi< j(Wv8U$WRpXbr ;ʦ:Є t1xG!M:&LS0 r1i=>2`FcgٚXV&hU@ +(kp(O"5S3{H7C9͹c='l>Ks: ϔq"c#aeWHi4ʰJmI#̃gY0~0Sc͔̽L%736,J>~DT"[݋?)ä(̍k!saXL^hw; -Ea@*Tp L+h =A&tSeRI {gǷdPaRW%_̅xs)w 2 A"|@qkd_aX#Y= A!|r| Tr%ȹɥל&^%U$*t ɐ!3Od^8Z’G͑r*c`lD͑rV08`NjpH0Z%1|&q8P O ?X"ZdqLV]2@$4I䶋 c^^ʜQn/O-lr$YsZb iIG&)et}hspBF}/ J궵:glfzM7.ą#LUD Y'()uzF "8@ӔJɹFZ%0A2ge:.ljN>x~lx\<m"3RUdMaYdI=#Z 53!^Vt $R2)iU(p9 + Sc3hTb5zy9 وpVU:oӤ]}$IЇַXEXBB)`/$%FF;НGD_gf 7#$ʂgmQx{;=(~x_$4~{ G8$0cK-Zau26hΊM_T]P~e{ҳ'{C8aF_>ɥ>^eNKTw|җ <8D¹mbte]lho3gfe5kjBjL&E琥S- V|,2$a۷:n}^I;>ԠE@hF`d0^bPБ NhGo!F}uÔcUkZ4,?vH/2 M.Dhq/_ǾuFԙ>ޯgOOʖ3M|ri{h/ 3pm6ٶؿUv2Xr2K(cR쇘fh5}XQ H>HEwӶN57畸:[ьeU5_HxrM-r(*Wdxd`Fc|)=,! @}/0?!p$[Q\P5:JAՕ}_#.-K2"dКgCRz5Ct ]r`Ȫd"RMGؿ *c 9 4 zZr0mtXHfǨ'}L_:f*C#U6[H̷*"Z]wo_Skf8]1G)_M\jbTL2FY5Q^4 GV>Ao}e2:ܢz.s-5ǣV 4gϝ}.*s-dRKaXc*o<~ qZ (񖰼cɧLtFDi+ Jj2"kZW2x>zӽ8$1y6kDV%q `>&مԵ $.DRըsBտRTxKKȠSG[A$Gy o4i EpVUO('0x@!vЉc.NF*u  duxfPY@hb4[١Z)Uh$뺹r0"L)"rVȏ{62, gY,].ǝƽ˽C$A$CF*Llq B@Diiz"5[dM! } `ŸH7C<*HjiҹYGR\t+|nZ5Wy۩;T\:J(5bMvƁ%)2"UCU ӭ;~ϷwUUpUBQ o'1i%PHģMtڭTULɺ}taGH#PVy5VeUٴk(hBw2YyU]y ^=wf:QiEhvigqmlXTnZ-JAJ+xWWh֋] .P8N0TQ [Gg#Z2C5Sc RVo6+\L*14*1vF]m9,(8Qd>EHa2rHJO="-@!0)񊠴*1P㔩Sbj4@t] g #߫E"O+iNypQ ޺ҧ.bwg3N#dp.%Glm"H.Z`{}?nwa)n].@D`PS D!(:>M[BY26GMrI{$`:7()Bԩ5$HDa>+J ePSJ$yxOW ܶSiO3+(Xw$mY+!6j/V_޽&HF [QNS,~b3H?YDV5/dqLx"觬i=D+`">hQyX@]`PUbS,J4yW(Jhms iCkM (Y 8:9j!G SIױ'8510&2JM \W0PxlwntRIYi6<\VΣGC 6g7ۑȓM\DuP(%; E:V V= \MLw;mB;=3T(VEQKh?)f w&ԝAFT &2fBrY2qr^t1)\`&;y!2)tsI6dI ^m=3/`a#->ܣ J!aHnD0i=1?'xsm"x8ƅ# (Ź#h}o_`k1Q(y&Xtwѫw:Iݤrd8=DB+!'ӨV (t4q N?:I@2# 3Q030a0h8䊚b}84)GI 0jed%GR(ٷufD=@!#m(I7{Q`X[\WM,.+Hqw{m4h)ЈqXvZ.fM_M4MJ9N9SJ]nd #0 s. 1{@fhZE_XH}Ij(r-֍B+8Vh{^z1Ai=vR,ҩZ@8Ki ɶPXiX7#2o&_M hLZ!jPӥYktlLť?98L^Nj_zmm"nQH M.qdKHIf%jmJ /@!}-t/DPY?_)|:scT7<8:*K JcG&y& 8^?qNu.Vʷ< ""^7]Za]ЭqM7;꿭1 eް 0oF "sV>p)62s_ޘjau$*EH K3M4[4 !T/4kC) M]+TGOq4H~YL*8e;G=TG' R]Y?Ht!8@)Fhyl6 0B=$ˊdK T3 t: *i@eޢ̠et8r?!KYȉĢI)L,g75C C p#d_)ْsL;@!起0S~Y&:G1c)@"Mchc)tT#dUD2,Cb" j{=? YK`SuWq"avîxC0at~a"3Q  x= P5DD"4ɛ4ce`۽O((In3 `WFJ1v߱L7By>4 *bCs^<1B&B^벒 s';dv紩ev,"!j{fp T|/R\8]ð fC`˿bO,4~T*īWpb/Q1TOdE!azeeQ,$d(i xbW}?R>Idi&lzR .- i|/S?3o|p@Nb p6 ^ͼ W'P` dTL^dfVETt lFNU V0-ӎ$N5E SQBF%CDo.s.߄ئ Z +Te"b1dI@Y$=#mCIq ݠW-%4m$U4E_"T&l:Y}Snu۽Kr^o~I ~rDQ)v4@#`0$S2)ۙf.drs={ "_ a%T01efVugk&ǪLAME3.99.5wVy\ *Y)ݾ-E.2OOgz[b@NRRMGPk[ je"S^,̿MSuV%~*e"4e{4Lܻb$SCbN<d.9nmrq=,$I9*'"sȨf65( o] gc AٌטIcuG!($>b`Q䈙ku=ު@d̪RX0*R iPDVHDuDj:P   ͘ zr\LBO3@6)ܙ,EͽF)GT^bWQ[K[toIjēCz5/ޚu1_F#Ԛ3A7ڄy1r]t.n QRNcO3V-#R5O~s`GL@Υ#c4֞#5YlTFcg{OB|,=!4Rer{2T``$T!/P)F@5[@v1]խB15SdM!bhŖ9Kgdܼqɯ=7>K+a 3hal0 3ݟا;着EC)?Wȅ+d3}KK r-JB0LR)WL,pYVk_oWwQ &El*8|TmꚆaј&~ma5)^:Y7/R)8Zͬb:wow ADI$2D9b8\s/%(."$L-̗}CI,4H]JWZ$.JiB)$kUXAWGEt dMB-ćʁW  i(`ezAJ%!cbV+IK]dODAH&s)D-@!^'uOs#Ts̗pC(h A^F64qi"(TٶwnzR5>BȆSV;0]ז_DzǗVrv]#طκf ߜ84r֛ 5WLr W2bp0\\!5[J\3̳9jyBgY, X=9h=3 zk BE^gNj:s"j<  L"fd2+V%.s,V0*2 Rqx `CbGlHr@R!X]FPB(9'-.VNT=X#d=Gh!Pw=# y![Aأ$Y y-He{HpΌ@hᆰ8GPuHKh])}ʂtʲcΖ^eL3F#eŒGh-br R-PAJ4LpߕbGA'$jDI#klC%L&2DV΅k3װk)G=E|w$GնwQ!"9KZ!wܟtq Ji[J8$WRD[ 2zO[z]]S-(RE̷}aܾ`dC4K: ь&b0OΎ#ɖ%N]Mie qT("(Y@ [+SLI+$ 07Y>=ONWx]yY4V»Ku(PfhEDV-rwL֤Y%uhDXcj܁ANF4ib/HxF ܣZn.= <Q "ytA" CarŢGY #$Q'}-P cܣm.dE!`XYm ؜ ٥8@2nmmeݾO^6_>f쵆kC7G=F(j!>Ǝ㕚p ПM {[YbK8emw#2S{S]W/(K yÃ띖F$!JbۣU_O^k.fHIX4Ed8EU-; ~ܹX$ Hqp (ӹ9MU.\\hBdhJh!Ȥ ˖g߾q"ڠ # ^v5(%]C)R{}cձkVEyCT02FI B$a]gVEFTpki 4J_ܡ B 2qzfrI5tdN\HA`ȊF`(,܂.]wxHB}c L ^InnEBbtSuq}/:l.g#-QHP;wV}xhuOB7_rjH鉎7%`A`!,< 'xV-F6q^nVǀ1HwNfvnv">"udk@kH9"6nS<﷔6{F :qj*]YUH@ET622'珰Z(k 鋤 E=>'5 Fvv_ATJN9eyZ95S5! (*10-/6h:&-(Hxd@!wiz><ØE3@"5$=!ۯ ʱ|&[}zޣf`!?v7^/?(Uá5)q3tHhP %O5D=$Jc^`c[RJrESM 2K< Y $Y٫F-x\[G p@3CI.x1#^ވ`,BY~=bv*KH.T 'Zw_Ci XSR'Mh\~fQ}xn.?k6o@UDr?2{i!G=&KroBL0] TԹHQ]ȚdFu*Lm#o;`"iu p$t>@Q̳ۄV_nnշj; v7{zkU`cCB1ghiR:@vhauJu9sTE97C-"d n-=z* 5Ƿ$qAlZY|&Abq[4@ƲXLx[kq)PN;R 0I26_ұCT~+IYİJ1a_5Tc0p %f j4,ǜ!+Z'U\å]^d}H$`)Үd7!k5߮~_:(5jZ @n-[X:DA8!@c spi}# PB&643uV@U|<ԈrhHDtC1Ajv.Ћhe%ݳ"6mjo裱Wʝԇ2F.6o?~MGLޓtKWH8 TƾGzcȎԤe 7R(gHƩM"mwR{Y P HU ďL̉\dcB脡P9.^ D<0aQGQQ&LB, {5t i ǔ̒Q浙Nhhd0@g#<-'O@XϿBOZveS^ewmGUTWo~qʿ"ܫrVƻn@N)*Z *Kq0sCN(,¦DCc톓"B&BUl.Awz n y#,u5$HJ@NB#-BɵJ)uWO_o3 nJ;Bhf4qT mڑ$ M0&,C)ppÇ cXCmE|*%d1HstLn{}kČz=? XOdNxanh[*dG<`(h 5P $9#4*S̳_V-}5oV10Tq=$Új(_Ϊ:?aSȡVXE>x Jim[.)PZ liIh| Å*Ё#S\-GK # kmmH/Xow96ClOgwsuAoIYD$IFAT9c],J9TfDd3`_ߨ몳]sҬhQa2Nj1oͿ3X޹OXdG0`m˫*7@!x$mhsS~gВv{RCnIm ]f,Jqxfe9qB@@rG %TlcAB'cV84 I7Ņd˓wrTH|p]]‚K-Km 꺚WD)+SJyw1W+߯M[:ű56}M,D% 2B0t/ZdO62ƨk)07` * #]n4Lu1[< -o.ìU*vpO㥝2GVc _=]?6)ɟ<5;Q˿yR[jo,Urp侯ac)Ի,^/3ڳXŏ d2O}@[iC%+3Ki8ㄯu۴Ї޾ۺ~M{wTsj6ۭNyġ,e uv+3#3ɡ WyWfQTn4 :7&a|rFC[8b #"ozgєs ?ezsO6Fd Xڠ7\iVWP @1eV4k_[䡅goCNj^;_FYSjLAME3.99.5@pVnX9 CLۃqCsCeWvM\sa{V< ĵ6H ͥ`5,yQGdPM!EiQF;~1tSt&U@ >yQݭv1+znU>J]d ũ4H'J0f\A`1i#m &?Y!2 aZQ%4NS/KDcCMo4uO|գM~mEtZ63*{di7d!.'({A"u\h gyn* /0`s&1&7b͓.ż|xs5m3W1ņ+[Zy IKy?bGӿj:^J.&o5kx )QBBOщ?++^T+:ssЩW2+Ttbk$4O^qB[m$ QM ( |#0@lˣcld @ d.Ox!Z+=<{9w5 %vp@ Q@r૆&Z2HH]nB_{OgŒTk(%(pjjV#–F\|fcm%˻{Ŝȱ\ϮL>~ʒ˚Xg.'?T&"^7+Usj_gNN4҉7q1zPG.ڑ= UDjZr&0qc} "c=Bs 8H}GH1pVuz3*U쮾Zk@ 4ۍ:1.Bp@+4HWrE҅D/nQV~_q&dXF.<`ijd=!3,p#ɼ0@qSloDQ#j"<YD lfw2K، SL;ƬґNsxk鞯זֽM[Tg Ād&ql,>4'fҟiRùBŒ齓RfV OowR_ jyG(Ǿ_tb=LAME3.99.5UUUUU ],D@ijִ-G FH*K$n #QL-aCP\A^OX`$9HaB}v&V,JE%%6ibdJJ#dހ=Nx!MC a.tk!d)(ܘ;8*u*GVIPu.-Fqg«<5EzZyoP]iWmu=v "H$qi,' nR_8br1^ 45}(Hy c|&=ҳDdE跐7gI0.h- 4o/4M^̻VLAME3.99.5UUUUUdd-UcVΡIzԩ\FJs۹q`]{Z^_9/ի\GM+}V%67']ˉԔ8PȀ #ϵ-g ͡HVXEądBOa _<ʗ5`!4񦦁Xco1CROlI\mY懑1 њ1FMp͢5+s`u)jm%_D2h /GsKOI]Ibeiu͉`N"Z*s*j*ZfBDr ?;hz\ɔvB,IDB EJUmL *li3=@>(-) *Q5#[# (Yxi"J?VXt2}d@5Lx!x\?a#Kt/@!'xf ްΥ XQ"ƄŔHf%HO&II7Ώ ' fɤU[?Kk {*۞of{kۧ㿭?~=[r4!JLB 8|? N-P ,RPyƥ*}R<#OZuLAME3.99.5R1Tm"֡Wg)|&G΍l&;ʹMiHQ2oºSas>7#W?{n1'ފUЛI gN Tk#iVj"B0a讼{ĸ'ZqW: Q#̫ld `E`cr[&*/a8)mY= t/I?d@4#x_"QMRoWn7$IMxViCõ08 (bҥ0b.aT ' 'L KPk7BvM$u] :bM 9ԥ {kHR$ܔ;c&X?#AX@kV<^N—xANs#E0EH0m(7GnZXB O% )Tk6vnaOI%*N(L4<`]w`dO"^ia/0#`!R4`o.oc`x(g9h#8l90 IjF!PG9R͎ *Lf7: [$A#DY &i.._,&if<`qM&Aad6 }kdT@ZJldFHn(% xo<ӱ‡{fK-~0R.mNw5w߳u[|Ld@:Hd*}`Y"hnM.ٹI3ڌăa21:.)gбgVdR!x\$}a `e ]QδEL$tq=b#9$Q9ee3->WØ.I5?z\e=IVgE88֊:5c!V$^)-ʚ?2{?\ LdGFЁHA(t<%Q#8ʁIKPl?8,0]+P<b$52B!J9{me {r:>9YshjЎijݗf2bZrOc3Fޏ1Ҁ!3p(y^f9A\v|Z#e]/>$FLQ)xѡH4<2`>' FdJIhbzd$\a$ 'Vq@ .mw=7j_OZ9N:yҍQGrN@¸L ф]2bjwUh[+;a-+ Α @(GBIQ&mAঔB,J^~SZ @6] G' "LqWZ4&H@d3 Ȓj$L9PhP Cļ@X9tZU5e5n/.D j!|^XS"̧D2ҺMzRidqKh!X=^Et)`!0J27NrnzSDoiS0#1hT%KI&57܋3۹7 arA>d(CAVDp4J3 })HjJ&]9DvnfC6IfWdo CEQ]x=DA!3_wEM#$O7 D1-jI9G?[/f9EUZ}d7]eٖ̍',D""H{;"%0zUT#fבBr~4İ$A`]jfD@ v ;Dc$dmVפ~Z= 67d:6H!b(<˜ )yIo#|0KP0~5XWdJS[}Yx$eXnᰥJ,E7g5boAgPԑcY%R4(a1M1TզŞ.]CtSCu/m4]^B4MFțdZ1Y٩T=F+u!6԰D B`ph!!ԥwBc`懾jhlR12\ #q!KL[l#dMd&(ПM5Ћ(\U,/k/OcSyQOD*  0-r2v%zxq+>p Ư$g0G*r&So9h>.Hz3QFsCdtfYȧ2uVz]d\aq(~=~H+`!~ ] CR6,!r:BʠQ%"Rq5b^wiTlدvЮM^fN_Oꢸ{f4"a^$~qʓt׼uꞳ;آP7`wH 2̋"RXѼ<{^J Èa4O4PE>xRvj046<: OV,>aRתᥖI6AROQ۞5gu4hZWjږƹ'Tuub7]r2H-lQ ZpCb7F7`4&JJ*ԋ"Zv9 +~IEaq(5Li5P| U<dJ!ra%~+`"ix=SdJcտ鱡?|-6msؑg"_ etR@q9cÓèeJdYOH}pGY̌7e^ryҜԽá-p3"O0M! 94bu8jQǑ&7<϶"^(q8P4+i#HI;h(J"tQt|G*,ogۼƑНQ <ȅJKYeXnВ`ራB T.9E(] RDN*!4=dBAW=vLKiL!eg\ETI)ldJ!b=&` kz*/-dmBhSls=hFrܙ~Zwyz+ kJ1 GLdq1.U(00š%^j!aH^Py2` @au؂*j Z>AhM"$)Fxl|+OٴA čVH:n^K8$x;i3(>v =rH+&TԵ }QUkN- #S{4wMK 4M[9o kߌCҶ{x)>|{>hgYkΞ:zbK""F ҽt.AXk=Dp(]YϻG଑ՇY$yo[  vw}-']Bz6YSY%+1Phm6D)3͌X%)e9VLQcXg$* {php( =Rd]a Jla#l5@!!j5hEmMi[>k׼nW">4ngEܒ<⊵yMGĝm5v;6)6ܥՐnyg&ݗdG1I\ yj^1d nœN}P@PJ87N:oKsiCY#:&Y$OJq+\!KQ{\"G"ʑJ K%SA3vԆ!&voIcgn^'^5Ujj$hꑸHC= $Q ,LK "JvJ(f&Qed%Zs(?#Gɵ+ԏ8!bp@CK-`/q`CJ9r SչF(њ!X6¤E{1dn7c Ah-I3-IXH"E@TVj6(t/0Cs: :O?S`*\?X QU #=3t-͌jt͎/7;?~oAbU\{KMW֢ad8Afm=i|+ a4")$Q&<ܩsU=Z {bEuCJ1LޖTv1hPﲼS<`,N c?Dk"AJ*d0P!#BīX,zQuT+Ā_;l*ħ(T{(5S! ݿMݥULAME3.99.5UUUU [M,m83s]nrKfNfl9:E{u+鲟b_ڥ[/pLznK1kPMB:,08h4xLL)ste|wX@G>ݸl(>+Ye+b3Q"E!%Q$IW"ΑpC2 J2EwR21+˚8aly5w(GnfU`4uFq46q3;>VI~f|[D.1Q@x̔ "k`/G8O9pa0*=_d)8;~ø.,y!diVJahkoa`-@!}<񖌰)UYj(o뻫%ݭmMh&Rz#(f uߵ%U$)@(UәL l:*<2.7 Hu#w Iju.JeEzօWRɻ^c)˒~=pCVks{8]oU^-]"4iRhI!&AsA5#^WK@s y0v`|A>j$RVQL߳sܼCά*k"ߧEXfwk~,ui糸vmZkه n-0Օi,mal-VdSH`af;v?C&ameEc{T'Deսl{e};jE&aNDލ2XHaՇrMfEJK|э t#;4G瓫q1` (!_GDuy ^2=zFR@pGd,`En%)t!(?`<^n}W1wf$)WѤ-J'auoBb#j`_UǑ*"Ade̸~ا'VCJj/2 ]1 Ѯ+zYa# fO\EdQ5*H$@jTQz]ʶs>umeX5r^ձ)">X{e,QʔYW]Į! s5ҲMs{$%8 oNpd64, e)n.sFe H9Rr$oV'/3w>}aGOIBT@SE+H%)=]_z=N+(%o@KPxZqUP.ft֊7fyRZ(O׋iF7 DRB=$ 怰v@@hh;ú$r=zaL2fK܆` ˟Wj`2kgʖzlV !zQ4`*YmxʳhqLN~nP_*Z7?6$H68c({bY]muJ@ DD7$[~ˆ~Ec ׈yxPצ6dFX!`` =#h iA_,< !̅ #,$rz<$CTFF9[VwA5(:oi *"%U @ı 1c] J74\I)"ӧF1yB!F*x:( pbl$OF?rmas@Cdʼdd"P U MB$*f5JWDȮ'BُS=u4h޹SL6YOtd U[^<( 1j}}[Ҕ};zE>@?X&k*X R(9 d+u,fdG!phC3"0&2L 6%Gm2q@%CvAQهhi9r1YRȪLAMEVتdCHW"&.M5B6"߳^5*jjn{ Bd#EEgy+wŌZ:A3#1K06_Ԝ ,LAW*k k, d*Ih!]o=t (!i(} `3^]{DtlEȌ22-z|'Pg}aimcV崎/9}m$ɩ2=J֞1S@p2,_Eփ@8¤2s)IG{+M,d o$켏Q0jklm8ԑzLa9,=I͹*,6 .a34{(/}5 iw[ubA}XGCaAJjy=:N@9 ]THU d΄ zQg/F rby?lc 2 ƀ#Xd% CqP &(׊4^8ۼ p@30AyME+$ A Pf'eHCd@Hb[I`w-Mx%헤.PCșh$ <y/;%7Gn} & mΪƇmiP4a-(i$!.id?3UfX8նT}Vkl<U-I#Oqᭇ3oQ(x˼?;']sQρ-8q-4mD8Sʎ5`Ǭ-c2H~ F$d`Ea"yE}exgwa&| -p` f_F>Q)1銬צZ]c6Z)agVs BNZsH? cʼndq-RN-MѲLP_9bfhAῇ.d(0 `RPl mQ342kjВuX[ :"vgdV( vǩ)KS=_X[|c#e4OR0Ǚ<1 \Vڈۃ Ήp-q4Ԅ#cmT>y6PH];vZQHHMA3FfVEhSҡ4͑m{eE+eG$'@"Lg)BM]J+"Y(΃H\H1u.Ý[2h@" ;qgT Wcc1z[dqxOY ,XGcpxUBp2UJi,(v`=U&&BB{@L&XX*cŤIqe6:"\nھPw/48ίss"B"I P}{d:PΩf)4Vբz]$孨|:%jRfD Qu;pؾ' #WJ2mTzFQ (&\Q/B-5TTXB(Ja!!u햡$=nPd"( =\K[0)a&::@*eGa-ψѧvw--iRLFdƑ)5"FLnoYv{Xee]:-`^qqB(ꁞ2wTǫ$AY2BS$lL}9r jV{\5{Z !v*x愊*!0YtqL`UxYKX./t͓!R9Ka< ];\! Л0{Ġ XV(WH (*GO MI4;2M{ ,(m%E se 'Ig]*B!KdaJ!eJ<|"`f̻@eXGTG#i$5jV9N Q~Ժ^!nlڒ[]O P*Y_RTS# ) Jc״BӤ7!G+U>+qkib9]%G5}v+&RoG]Ww k8Kq ^hȒdkx!Z?=,'Ipl o>X\m-Uٵe'9X^^_o[JLYz[CX*lO֡yx:K/$ϦQ g ՁF4V^kCHTAOKi\NС/PFX.Ф0晚*ZOSnd%9QܡJP% !T UZ* |Su1Y8r7H=Rob_I-E^/st1.Q[ĘqT_ov^]zC$.I%\:ʠTP lLӧFkb[AXO7 IlkV}oq.dGH!Pnh= @k0O;63<헙ͼ|0K-nC^iƫA< BWW`mbT5ZQ;C5*yc4J "!׳B{dW!HQ?IIvg`Ӹ O nfd^(ɗ d˜I ,5(4 y]+hvt7 ۵lceN+]}V]geӺ*Wl]ffQPhքvWj+ÁJRahnXT{YW$gp4A5In+iheZ˽[&Wx8T*+ygCC^%:z dh!j=:F+dk}VQGA7x کӬ.,bQ$LQH3/DN.ZDTϐ<^}Y4Ve3@CG<'UDZZ/gkB30h '#ݷYmV<h/G^.PE-:6,am5ٜ7`k(ܸ889aRJS_WV Mz)TRKdBym(tӼrx{ ]#Ѽ(ާpfo|yڟLvaA{OnvSw1Z/%Xmmm!4],nG_c^?,qdTL@s: =u8k3#/ANȣQ+-ABhIߌNjv b&H&lC12OדF9&i1C=JyɠyJY+gfm9EMmSҌmէۡ{~!poKn+P:thSTps ʕy,Dg Q\Bc㸙4E,m"QPWhM"y_DPvO K! {M{c8oFȁtŚ@8 X+%qRgɌ+E"]{S$lU81 v8ۥi:Ej@5 cPビ HtdÀ#M`tj|;`!!ҕ%_kL)̦ls"(Ck:J01ȃs9?JQ (AKԇ '-ؑ{@n[;sWV_/t mhtQ6Y" l~(ZͥaR} վ})Kg: }iSB (}ΉeV`QOYizKci̡ioY+~h*׳VrN^nZ鼗롕6>W}/_@i77M 1ԫ5v3FLѫ& ph>aF]0P."L1 cFPaD,d݀FHe j:[yv(BD0~ FYd)ka, ]Pɭ>qP@1Ћj\3߸-xدHӐwlJҙ+I@#r<cQʮMIO' WckvptA}3"jwIRֹ3Qhk;_vN@~NWp*,| Xg!;BNHCA"b`"d 8GN<`f;!!+_㤔%x䋞S1_]5EqUΕT)Q rTPȔUhUFQHp{ ;bMj߱zM9QԶi}P>x)ZA-RKh8hd3 j"T%H* +=l0 FZ Ѐs%QBBE:*Ev(0nE:f͛m=[M$eB“ph:ũΊ)g9@` +:Gw\ޱF#bQ=BƉRqdA y"4-EFH38.4>'-Fq]iu1ὥdI)nZaK @( UA9E0pj"tDEyQu7{6%g\0` 9Zjv~lL&̓^[Ej''"DU=qe& 4fvCܱhl$n]z[ÏeQ/Fƒ`oJ{ԶV*nʐBYpvP$ 9Ԫ93R%`qB$:cDzF>q#[| g-i)F:o>aSAVQ"|RTTb,Ũ@+<,$I$woYM2I] x}__ݗ婹Mc~P":ܔ4s,%dhakma? )`!j?10ʜM"F EG4rޙSJ\nn/0p*k{% zG'rSpL^d$ >> ]xecUնj.JXنk] "lFb̢U7! wF!( (~/udeG$:%jD%Ӌ/UK`ݚ]_Ι0o,=}[ƭ"MFU_ث8`N[6 4:I]O<3%ej&{ Ú>okd1MdEx"Tha"f89`!#+i4&PYo!P7˱ rXnAZ0 u`؋S ~VK[DWp.?O-7y{0Js~Ymp' )m*XE^MĢC6A!)rb"2YUP09*a`i#/l*RK@ǥ(a%3 LAME3.99.5vI#e&az]wӿK?tlnܺJD77%}֪&{4M!!!(-[V~?ͫD9 Fa+_RXȿw1{T:`?d)Ea= %`)q) j&P{wgÁgzA2BlLҼ698yqc3ZHFFE_[sg(qtoLAME3.99.5UUUUUUUUUUUUUUUUUMI6B-Do#b乃-,% Hib'jq]dml&I埓GHW:U=)SE-Z3<]mTZ&wyYƕ W(v2#hbIWBu9վg8p.d- ej-i^ YGd |#)|1pN;Kj"]a1(I^Jf$F[.Q}ddR74랷n뺿d) RH͒D*ԉ(%bHW8M0Aec3;gRku&9 "l׹^VѷC34ЬQ Ch"2 47"DIx[Ѽ JB:'rr%&m;gqUAUV ~+b՗cVeL]Wua`BKR*e ;[N A.m;^qac:YDSru|:4i:_Ẁ3C¾,d]Gi"Y]i=4;`!yu vG˿lNk01|J;gvﲯcpF{w_Ϲr@M8I3Qope-jnH7.ԕúz(ʄ BQS#MI<c2S#%Χϩe2rջ,.*  ED`XʿsuLAME3.99.5UUUUUUUUUUUUUUUUUUUUUUU[l#e QDSRv۶Jܷc>E/qP4xơh HFem6IZ E% 85wgjb"YQ-  ~n "Id! cOdm D3`*h51Ӫ†MU~v卼mFt1SW-.>c+m(uFH̼m1)WCGT'!Ds1Vap 2 O*I?Z9)Kؚo]]\5ޝk z%IǽX52H:yVHz:psujc HR#(5B0X療x[VW.t'6R_RdhS/a? ,%xic| l3i^Ik|G+sV6>Mx#AČkt;)Vg3/l:<7>~Ew[N3iq3qhݰԨލZovf8X+@<4D0EhlT& | C˥>A0;%܍r(nxv{o, CCs߿ QT\apy’_s}kntijz`HHrCFAl"`+:4 9't=2f>*?bޘ|X,4kKXdDff$ 5jKCQ=B\%R|(!4RK UPj_pv~ÖCiB}X6E3hIj{H(VK?y<.ZD%9 G?ĢzA3 \Xfl GȴU\֤O0{.T'Hɮ,-BRT(Y#T N {Ku JI4@56*A₍ɇ86(L6 "Bֲ">-tdUxt/&(e(|&]M#!CKpNUIr-@ k]RC0@3=i!dFH!Yɏ=B q#lIft`gXD|\{Jm|}cw+Q"\hm`{p13CKSh0d!^wPd6Dx V&(Bl k5M,yN UCNx}6Na\Sf!O<ͩ7!3Hb/n?آܲj`/R"IPvKϲ؊1MUSkWO~u2<{EӀO%?9pa/>|Խb\nXio,B,)PJQ-8Mib:x%Pf6@둓E<inLt󗼼oa>{{___g ʖdN Ԥ?25\ԘPCrv5C6-hNəh^r{oBYYP1Ю,[\V&yGtm 8HފXyѨb- m.} -R;yEP % [[V"υiP͵FD8u6"qQ*K HObbꐮA$ )?=7,;dFȡpcM=#v v}4 짩Ȗ̦q2; !Ҩ̐I G8.qyǛUmʼn"1Ma$#MOp 8Ā:8:e>ҨYB[V`>}jTU3*_p̑#&Zɭ>5%84*i LVp]MH224&i$p-EɋL`v'($8pqtG!6.Lۛ}{5L3C6ӂPf鑕0()V'>vg\QֲSE4x n=驑d"d!jYM=#x !`dd6>ke=|>=*\1{r TU1Cp8$k%xhHH~ܦ.*BRosgzJz;)Dz&쪗GSy{y9,Bk(mU߈]TtTj[3}3x,h4L*t<ÓA8KqI"lֽFeG@62brL$k ^L]}mqХf7ci@c8USQ"z%ɜޒl1aUdt 5d x!pd o=#^ }oa1cMnhJ舫$96VY 5-lC ]u u$r'-:=,>_ux[Z>߸amź0B)e;r=E`wa工[$tYr*?x4(J,.QK d;H, ~yO h_x[*4QTE݋Qk.M/Qt"vS JFFQ\tENi`4L̺&i8,CrWUw!ӥ4ʭX,IKq*kkHo\Jw._"OQEq2d"GBK dGAUma# '! )x~~"Sb3lFΑ=ʱ½>7k>;qHtlTL`QT;̯I''ek]577fehE zoеו0bl:9Qr9vQVyLIrKP6Z0DY\Smpn&?\k!ZWӇMZ4LJ.4.k|,*yTe[Tw^GX5 #Umĭk_`>.ZiY;IlLwz}8?N5aHB;I2j?mm%mHĞ2bqk 5KT*"YD=h&ɐ^&zG^>n"Vt.dL#rw,`ÊG3 ak10ig$w{S: ڐ=zy ^..1ƀ^Q_V$%4O: YssZڛWj^(6jSMR -&{PktƉ s9E4w`nhB088, /~P,PÈQ7&s.s3ޙN; .l6 (#eK mx* P9iwkm@[hLJ8%0IHat_YzhRS:M<Qu@p: HX-ϛݞeESH2B=G\F4^tSu2\ qX _d9H!n&Ma4O'!v?P-Pˡ4nhGIdB'DB ֞oAf\@Q.2'fJEH6F:ZTHlj9!%Qa6U"! Bqjg,u-Q@`wL0y7_4Zo%e%G(tΩ7f}ѷ-(dYFn ]<1!"뿞J. +~q߻[ UcFӿ@&*EARmaȄb)Vءfb4m>o0azVDf)B!LjI獻?p*![Yf?nXϡ@qD=~j9uGH4]*Ip!0PZ+ #Uڻ-:{= )l@Z)Qk-/%G Cz$(*x~Ē%b Cd`m="mLA@1#u.of#`|Tpv08$Oa\N O]t4Ær %#K&>TNFd] ..e[RzZ/ޟ(GIPll z 4q&csddc(vYoc8|͸}>L@X1$μ?VvreS҉Qk6w0&y˦ S_3"q4uRxyQkҵͥ1NfAp)Wơ8( { (,¾݊C4UjH\( fR% &80l̿FqHyFwq$0,]|K-H,1Hcu/GU(Ȁ(Yfgd3 M$!0P1D90d l6MPSu,26d[`Mk>7 !jj(ERIFh>ݻ '.叻 4=@*( h"Ih"7y94!o8q9e9B̛A5RPrNϴT"\5Mz#RD\LM7حMq,4X `P0`H7 fdO>@BCB#D$F 8`9VI*[rabosʕcŢ)9{֝Ey{N䦑߷^=\BY,v9gf&pR)O}iqg{v1w??po%[nd*m` u&mL [8o.79eV*!Jijh}n$j#kzߪ@FDf_{ep`gV nMFu 5Ŗ |giJ骼U+wkO'ڛ2^' : Q-Ld2M֗;N]ƏLUM9VhRJiX-eRus|<*>ղ1)o"T϶Q$%Í9125M!ܫ(UiDiWw,B9az2˪'.VN2$!)H`!z´Q ]/NփDώQG"dN$`;` lW?35]J>$g9s~"}X /+vZXITQKCPO/F{ݿʼn{:e0I9l_# 9©F0TBZt^ @';χU!~سt~$߇O =Dl]n3Q܋ZIij9REX8խ%cSU3%օWF|{η 9v)92'8 c #I^PE(Ib͉5"@T/g(V8}L|Y-ZZy:s P>IQ}7JƖPy7=cm[v*d8Oxi?=W !@tt􍮩6ܯYn0֥MEk_z>mA e9qzIRDҘ'*#79[42k`Pd h+@,x4Ō6 \C c. Ssܐ8R$p0^\*ʘ)Oר@ Hb 2H0'-zXr2r&J3Vх٩)npI(#D ,U]!erOI*@M GTT6qGQf)Q08@^Mb$42E"P544q+hd"*f[i%PW !D!ݗ"a8Ydt"[1 )!ih~ „G7\/h p-qE8gVRtß?w Z»GoI.W~%GZ);ړT?S]r9q=?ֹ^`r8odpQɱ&V(eV.D5ZZ5‰JᇄK1A8{ H+c40J 9SϠ'xJ ៘h\Mgvy6sj),(eGa1S-VZKИUG)Nѓ[= |^{sJy?5df@ I`@b)*7uI}إ)eWBR?һn] ;R{LMHPtAh,<2(:oQSƄ̧Q^Z!2tp9ss,}qndHkbW3i5qFL'Do2B%;="!k)!(LǴٱOV«`6*X5xYcejRҧT krw4yL3Og|ݽE!֭4~Znũ"1 ,gA,=NѲ™ʀCGP}x4.u $dPK!Sej|=./`!J * Pj(;kIeQA${I5mk)"lBd\c2Ȣ|B edZB5(q`=.7^yϓ A%bY`s2W r0 p$ r4VP:~Q++-b峛.SjB)İRJb 5x[ixLVpY]V:ڶ lQeƙ > a޳1cխ;H;+|;FLc~5f?'ר.6{VwL߱Ea"BGj ZQOZJ$qN԰gN OJEQc,e#^('P#d>J!NC= $ iI' 8ß޳mQ&86cFO,5 ڱ2J1b[%cs U6ݵoV|oy탌\kN1Tfd (mA-(zHp@:q".qr,-m NJgBD"!*Gas I|qZIFڋTEcwD])Lgy!*|b"@Cۮ$gsM ,dt>9|$P_]|.hbce|}% G.G|K2uqz*ӵjsF!j˘ld"Hhab=#]#mgh| Fs;moyډW0*}/"Qx}=@+Q( xb%]޵M~uCiQǻlv0/,G87˜^`7@!DQ\帻 &eu <) Ad-3Q*E#pa)O;B; ,ie}~杴*@ wJTYf@rD2S<?:˻9&6"7"էr74 te`h@i{FِoA1]Ğ<LTz*OUI7\Lۨ(#I{8dUb2]g <} !Bf絆 =|3,@*0UA|~  ʦB;: Dּv=B/L@ޢ d2gʢ$~rI1Ӑ$] ?{)XI$ ^Qa>Ta8Kb8TjN)D1JMeK5Ϻ|2OIRNJ RފFT0| $3sj QS*&gzfұ;m ditت\YGӋXf {]̴5p2pݟ:^xL'I$1a~.' tF'h@tUj j$ܒߞǹoId^X[=#k 5f 44;줡%SFQr}^װ-I&Y[MIƒIiSZ~w% ^df﫛}g@~yM=sԫ3pG1HD&+Bj.LH54\O"Y*|'P&RJ|ma OS G:!C7]T:MTrj9d8H"f^\Eo3{$bG4R^_lG]$anIP;F7GUǶ/jP{pxoٻ60 OEqĐlbVSw0Ё# (XXӡ -Tqd1bVF ="^ A\Ic'<F*(#:8;-z!f]C_m*Bs18FC<e}1'QE:'iȅdRgc둾Tڜ=OS1I3͕5](EvE9mYqڬYXˣR|JHO1$RPi)DmI*e 'E1@Qp!&!i[-9ZݝZ0fewyYnQj K\+IkkLei?'F9̬FN={:1z~  g@Pn]V)/$iϺlouMyU Av/gOX03+:6&ב'BT$Al>Irjfb &},m mELAME3.99.5m#i&mJCR[@U z=_c;z^;ʜepԾ܀y-Ą/5t2w[kd?IdF9mZ d#`)"+5& ( q1jFPxxYcۜ*S_O7M@t#UWDQ Y2$1P@rI5 tG)~J@НKG!@kw; T>M;ҏQ7w0H_``P<EWU ""&;idOPl 7 8HM70DWzW>pmz A@Ibƈ"C@mqլP0YC2T 5EzMOP:QF`r?zVyGZ$Ld}#wşL}@D5uR7P)A)u ~V$%a#8@3 u:̚RF8 =N];>XdN"(ew >5@"G)Ǡ! ;AFŶazzL?mܻ}}:B!(bomc&LN֫<.[nIHcޕ QVo?CPx-Eщ;G{ B'[TnV/Vdy kT;~']Z}l)4[l׹KeX5uR6]RG+]vv̵Ë1sTJ,]IX0.l^&58,uAcWO%DhxID+bT'cҟQakn&e|n Ex"BbE@eȔ^PqT9㨬N%B]3?e8؛2j-N7W xx_[?~\Z|wLLcNc 0ܷ[qc6a#AUdvn 3`R^t+}wI[v椖ũVOkeZ3kG2[7jW5$5HHƟTdOx"oIK= #'`e'0y0PeLp#f+ԋAa9g~O'GUb\ٮݽ_oW'Bng(oA`&qFEG1f"R;(A{4#Z)_1 `nfXjW{u(*$̠d/U $Tq(œdh0WQ1U)xfkNQ%[tx JJYkoףSgsnOj "D8BBsp&!_&lMO'K*PΞW)\lxMzC XmQ{H8m(.%CiOd܀McaH[}="7@"0#DHshcsyݎބaH.&-.X ;.Tz\I([a^iq@D>*(]iһ3,PaZ8Kx(un}2䕸Zyqr)?˸^*{J|u7S#^hDIqSMRnAybGbp˨26Ѳە%UM5z } B)$9p"*NmYm)-dBnԚu|qb$)%p"/ IJ(s_d8xciN!!F B#(%_ׄi+:K",|NM8K6~FPv"QF9SO13gT? J{8 ͨh.ʭ显a3T, ,HHɕ)HvG1%9"[76 ǣ[9Jzp%W<9 $J%)D9a*#bvuPFL1 RE(?5-C~NGSZe qǒ D꣖VQ( ci,bqp($"-;C-[drFwT}=ަ?w֒~*ҒDB87LFļUɎUKvC7$J8Ws#gs5aI {_=S̉5\>x-a1atF&%:I PQ5޴#NWJY?.N͡ܥoy_>ۛ>(SJ/mDsROn!L9Tm& sA \{ ILH X4Ur4` U#I8hGdLE1ni{Mam9`!$j]zӧ`YԞʫg( 'Ɇ}OɄR:=g:a ,MzY t*_$4PXZI,]^t%' -DGܕ:ҕ-OQ\Pb<) 8Q8sJNVHTv0%D w$,uRG]fBMzs-4$98_7y2x(r%la-!p=7j$nu vz3pGk}^<d`"+g&iJʖ߻z/u& ɥYȺtu)6qI`t6*V@=$>xwH9tUT@x/R%dSIa s+>< $`mtfE4AB_nmZoYmIsR8E=EEY$h=]f)f75Qm__@%1N +#Rhm 1rKes8c-#&6Q,L7$B%Bʋɜ>@jEeUTaF]f/~=kHn{o\c~Re2PBk&gzRg&y0wQO<|ő쯭:?Tomh2#XH(@Ss$}ʑ,ih ȉ r-\ǰ b54dGEF)^+-<榄`A1pqHC!Bh_/iV d SWMI+~v7M6ǥI4_p_ݽ%uxv(ɪ]")-R'X9cuZz*رxN7ǟE~,̓~,(1)F~%ʦ/e(Ɂ{*Nڿ[ۓlk(s!Oa J\Cv HY9?5qMU3c:#JPZT8477^ewh6jHMX7QiwMHSvt{{ԔTj '8 J(>d,<`Ɖ[ d $,է\TPpPjc]fJ?F3Rq5̋N\8_%ݔkpp@.a4^jGMJlެ$'aKZd7Mxw]i>,A`1j#4 ޷Hd׽5ĞڣX4%VTULM4_OЈXB&b Gڶ4@"YnmD%A0t<6ԤVKn_ VH\l&3Qx ]=A)wֱ_C]G~&8:A@)QECb2Mjg#($q^a^26LAME9KBV! &ݽjYGvO~@F Dxd\*s #f6i|3*?Ԯ}eHօL+=+C)i ]Q;HtP* Lů(t-dSIqM=({|-@!+56iȌ8ܦH6Rkg` 1Quq]1-H[{eC72w7X9$EHePkLxcw`0JkY!A_ƍH=tf4jrq h&P]LɭN五a yECV+U69i6:ҘYb+'rvIb*Y'̜W6_ I XN1T/_O;__B``qt\bRhk8`$@'D=@!#+unQ[Zv*$DDyW=?Gfs &~<=LG`~m]m{¶:OjwwDgOիHwz@Gm:-,ŇF%O_R<Fr\}Rkd,,?A9Ho;ȁm ԖP"%lQ4}j!hRLAME3.99.5[uD=lpAҍ־lj׿gFByw0k}7G"2d#J%{>3%=P +!*VQ(< .mz }d"HiHrw)>D7`!)u 4;tK%AL8ᡌ2NB&Й܆Df0YcFbʘm:ܪ2Ax=Sbϕ>S}X"4SYkH03&^FtT(=eC̶4AWpfL,]Ä fe99)04jR5!+w%ʴ1kTuF{1Է7|T"6Ԏ5ijW2FqȦ2-ThAН=؇Fjz.wMܜs5"Ӎ@'hzU`&JW<<'p {Ynk HOP\ZtGlrAF"?Lqg +oFݡvSz3lLIQbA!7M)-Tf8})Kvv묳V4\]ŖIKݵdHHaS 1#6x` \*ċHfpRFq &t8usTBsT|=9 Ir PG`e X;p2 |`^( "IiJRy}V*0mN^goZD0r\ɸ3t"hg4VwҐ.L+.NtK1b*қ@YsHQ Ouz!۫#I&9)T[e'UǐoL{(T]rȭ 'FF $B$\: =:v)m?RY L^eQ#-m3 Z/dr(۞gnGfs7dŀ@XK.<É-`!x| M _rT7{TJ'GۭP>9AY$y9}lI<'?vӿOUY2!% P9AEg_bfh0 H\d"gڡi Xz #C"): 0 q&'(8^J9B)ԋwtdtįmn^d3v]VZhd jԪʫ=%fRc2Fh  s(S"0>'{)ݲ<"eb_" \xiKŚY| QMiB{WPLYU9+vdH pdheG`mpC@1/5L"Mi}_D@>Ĭ:LrIӍ $FY#nZV-keJn4eVNvJD(I0 0c@ \"dR]Y±U UiD:(MF7>knfx^k3}G30UdQ`aS15Q 4ԫ0bэ(nv5 %Ns3B6+3c/[#Xv]` v6%ۛZaOWg`6lـ`iPB@ݟf긔0a#HhZ-"dn/.tY2ls'ߍx dXFɡpxJmI<9@!s t n+6y6瑒=ag/L2_Nڈ$)RQ*K䎹@FX}CdGZLą X=hS\ʷЗZ :<[z "JՄl$106F0vO|F&G(XSzUz[ D{ص!Xv%%6XX~տ[41[FOo,{|8!Yvxy[21YY1}F@Nٷ5(5) IZ|vb]Sun-}vP:P` $Wֺ Hld'F1jSk vx''FA.]sd{'U,K!twnR RԐRcr4IKK۩om %_OwX8ޞ=`|:p&g\kToWUQJ.`0ti$=~!}%d8h<֪EkMw+S%!D4Q͑a\mc) m2[Eh x xGM培HAcxD\4,& ,\ChS9VvļM-(,^ OU5D>ބdPh q+}=bA `24  THYHi~ƫ)wނИf/2a)%S^̅cK{vD7dtP4O2B }+@0"jD[t2:7tԂ:ULAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuI#i&,5To"ޚ]  5!#d pΓi"R/B᧪USyYVnG[ x?d%Ji&nHڧe>=@!m(\vqx.k*Sin4q,8Yq%Wc2BHQ9:BkF::*ߵ5.b{ J&{+^Q%O-*-JQGpރd`+\|r9r;<g/tX{8IeA@ŽST~±5. i&IMXCe8^F+?bp:Oh+ÔWVo~\O0gnem:>D. ND2Dt=a? ^l\R@/L5gp'IAh?AqtA*^2QQj, 7`!nk*PFdk}4kF ]#kX:*E~THҲv-{.H FˡV(XL*)*Bܸ d<`%yU l e-)"jǁqF#8]ZoRN,W/Cͩ(QF #@x3OJ ddhҔ/(srxiT $0oQ1q bY`A—GxUzzvj P@!&@mu<޲!]IE!*9U#x%  BF]"M1dGd{M׈fBh*kn؆(dWaZ}a{(;@!f :>8ZT#ڻK+s1"4}z?̱?Wd#Ljҷ\mվۡN^<&oϬnI5;yqFrBH %% ޮI=ei{AX+ E؂0|kN6B,wkޏX$ +/Ld%)pP|)c8j,|l=xE.iSS%v6v pbR&3Ho`V3"ׅx/%vþz!([n=;.#ņ5 '&i$* jEYhj oB]IL9Ypt) kdPh! ٧m>E=Kl7Cw:Ua\4u#ݱz9heY;)-V+ٽ[fWRTt6qeP%C4A1Vw9֭Ʀ)FHRJ׭SZف+( ?JY^k8יj2_9<#̭])K7#`YԹ&Ra`YtX*\t=^wΠGsxokxz _rZ[ڄK%vI:dcD1ȉ1w+.D5@!! / #Hp|klDPFnAY읶{7np`DbG躋@XRFVFXLǒNN"m{rʪ_<&&QIBJt<,G,yqnοT ZM Ri>tAggc˗9~n#:#RR Od ȤIcsL97;: -NͶ CMaq1Qb{㝷^եULAMEU $" Є%j,nܱQV Si{nQGWRnrN6R$ &DQ`LL! B:Vc86;PdrL! Iq 9!beTRB+~"0tTcppiw'AYM3)sA{ٍe(`AXzd~ԦR=0uhB+X>Pm$7$DLG3į/9} ]lDe%b.7tkΦ\׊#KPZŚ3LYiVXАے1IG8%2~R#6LzYB^}N(~%[x1=a`6xKҗK[ ڪ~I h #M:I$D" *Y@2QU$/1e^mJ 4Ca_ G6s0Ywdbh!T9=/P-@!vg] 8&zH">Mͣi SprWzb3۹xRy )8 aK\Ǩ &# ij xro8?W<J@ )Dٓ+{nbX8[#, ^zH?R 1-5fQ%1{.%JgCGe И] wq(Faf‰T~~fVAtlm]i[KqF@+7Z@EWCp.^J\IA44ĈQ$ rD@9KJdR-Gajhٯ=Y Ed!1VE_Q:ъSaa< :1ȵ(slV4> ;5kC+KefUMlP!iӑGNInKX5~ ӚgK%y@V8ILr|MK @+m%ʱ9D11|B5 (QΩy_"hZzg&N@dΏ{֛̆Cy{uf켵륶ci7a$)-QYn9Q^ +/d6u@NH\$I .DrCMfyG?.,u?\R6NMuiSg59 X%Z_])c*(PBD x6f@Ui:c&<[\63iVr\! S N v_ -9y,Q4`/L!vnrm`$BHt :}`TT WF yd2 G i3.rV, dh!TfQAp=CKi<ʀu(NŅA͕.(.:dY`b)-`Dt+`!T Jދb N"=)x^x[hzLזE3k0YiQꪪʷ'8vult3{+Ǘg5os6W(}wr#mFRԓnHh)+y̴-a˳R en-sl>nGP4j} Q9q%紐y<7s#Jܸ8Wͮ~F (5Dn`LF孚eWFU̥:7ٶfd]ftV T.2A)/PܱodtEF @tH9+I\% 2)7̛$Œ"߭S_m\Z 'bD1I;iԜ)Dž4m4Ѓ?~j on/6 v0}&u\DI|3U(UzV &cy줳U CYKl-K#^]7nhR0 r5HkidmmvAGu vFid:#a#F%IݽZp7xՂrss|1QP`&8DŽ~{hǁR%-,q (4Q؈su[~51wV#m.S.5\JIصߠ3_Xd=(by@?UPfLB@̆zg.r<{T[[r׌qH{!7hwzG+;Uv̶(PY`$n(~O3 UaT)Q=a./r-$i:%@YZU_d^Xk\ߋVSk(hA>%bℋjYh'LX&dG"pn')L<Ú  mڧPi:(2F8iR&q>HX#r?v#Ep8U9;'mG"HЕa*J*r4T-o*}4Rz\s<@@#꾓cޗ9ϒtBxB.HS5&`n3Gk3S0™s| ;,oˮ-q;%>벩̪ngi(̹ԋb?5B)V2"e8 (vyB(Vԡ|%KeI3me7̦W,%b0ϻj]I\H cZ fIzt Bczođ?@a5d݀`!\&=#tt+@! 9ˆ|s,ٙ # , 1#oy'VSeUCD+Dt{S~X7?{Yc<< m@R]VSӁ}zu??ٛ{K DX 0iDN)|;RQcޚ(T#tE,THp]"[if-VJblEeEF(0|ܒן=#\ć")HuJ'R% '4z|/2TdY2NV&r3 [{kdGGN`ې m<E''w2ʄ}g»R.:Z/+}WPukO.b/BYdYvxҷ6%#o|*iYjYbnukopCjGbkҿ=moKl0>l] p9`fꑢcVb@.J&PJ؉NBG$ |:,dAL{"Jsd奌Yc˃جJu\=g6eVHz֙W~^ȇdXy|jkū?Ʊ}ᆬgӖpX[cYep6dLT1EP*+&ٍ.A#T#ܧ>~M#qMi H.kPLt{a1c<kd-`**]<!h70ovᣙ" fhi8sTtʼۤ-  ʺj5\Fv@ s[z=aba{>>qhm^1}nū%{yUc B@U4ME\_ρ3>8J1aİl(rJe"Z܉&ܒQHh1@3*r= `ñ%De~]!E>|J1-`̱뺁$N^EB PLxtѦ'P0{hh+KAA~QFn8D9qt\5ئ++K++ndvJo`c$T#MilRW\F>D 8z\rJ4.rR@d <0Xs=8E"$4F6q5 ׿f]l %'(Y["9N]ˊEb#n4m45bڃS\uP<Q&3L R,[(%JX&XB1AKz˚t!rMV.6]j"ygDscKDkEJ%V#IjZnMnR쐻WvwgWimKKܓYi*Row7(aD$!b*o&2'':<Ғ1g>@ 3ψS`rd-JLx!YE<Ä!kV \9S09˗˸g2,Q-qGfWH&ױjkzsq寧ݿtP\3lWKT/HFHb~d.BI MS&+ة@h?^9Xc8aٶ[m̗ Uie ) zE grU jGJ搫^ތQ eSe7++dG!0K%*_+'/S hl/?$- V*39I!zŮM1uy=BS!RvXTS)p )AZiBL^ << CV[Ϲܦ'^DVsVoNxJ kb ܧrFH3R=đu ?AnItCSaAQ=wz-\,k ks*1Zqg 5^)Y#{1՞@K,qEa=6#m@HLR$@btw)8֧ld΀#@#K*==.%@2*0 p.j7 pSECy U)羜6Uz31]<؁xKl *1?-IܬhZenɜn׻0@ ETHCnt>B$鴅7HwH pM21"hϫZ'6<1p q@-i2ڸ7Sեm&Ul&M1)MɖH:4l@d>Fڧv3Dו:vjr6 @ͨ|8)35eQIarL- e/Ȥ#d."{H `19HӺITؗmlΥ5NiCdHEGH!Ze*=#f G!xAm|J( x8Ze$Z\U>1z/o쪬![PR],v:>qu3a3efO s䈴Oq7#3C$3GԴ3wt H9M@q eA'Ѫ1`XvE~5mk+gSǿufRC(+W{\8` ѪcEB;ثzX)K2(Qbb"NpiCb1O]&aHuN*ICہIkW5 B9эQQQTI"*$H>B.Nl * )W~=cZc,X EGdLDa[Cj=3 -y`j4 <Q!_H>Ţ]MpKqYޝ^QŒkSXq:|ν"bL*Z{C>ϔֵᮭwhc2ܘLMHҡf5$L a Kd[,y6G5qk@.1@Xj[uỊw?T"}ˌ9P- ^v*] kR#'gw?] ʂYB\ AMQ&Ka,L(Z0A\dBu"&Z!42tR *Q" `d<#Z=cy 3vnd mɋb(PE㌩g_H0XSܩdG|ˤkl; љ9!,ՓRQ%jk:zê*+2?i˪K 㨌4(s48mEp,T0L,fA ѩ&2!%#:$lx@N dE[zXVtV^,GОbLAME'+pm&'J̮rz ;#BeY}6Hvͦf[O֍KN?mʿ`%f"7LT5Je`-ۏ)lbM:(GƣdW:ߤ 80TMdHhaX9=&b uWf ؏e$"h!^a+5'mI2 `{Oq; Vb\q"掖TCaqPC&[R"M@(@;3x}Hj}LE5R?L cNhe+USsvTׁ ihpA%kyNޔ}Q>ZUb-dH N\R4%!F t9mkmIi1lwyuYY~M}GXI"eig"YyRhs]K]ǽܒ=E'aIKq3j5v.:t?ȖYn6pY%d@Gh#_Eo`|D+beq @"K,OҒqA_gVe@w˹-Ғe4KC9vBSjo7we H<qv~EV=j'ߐPfsV;mŻ+!It+Ĵ15ԅoH9+1s=Wg̬s&O= _`zϹFm(a ?cD{䳪$;[i[=meUEQwp-7'#r\=%"۬DFez.V@ݏFH <01APM@l,]2}CY;,Ad_EHb8eFH!@!f kBV0єk[L^зf dB%xT!92H] p @hiR!+e/nO\G mNǼ[>a"ag/+iEm-Z# #o;9+h^\ֲ0U]yHY/z2[_z_G0F|ZLj 'uM{o U n%o4gy屍pgӿ1F4YYABHE& o3`F~A@ #@`ȩm=3z@Tw%X `TTV0#ģ`n4d2AH#¬XiE1@"dď%(c>>)JܽR ,AIxuBRY<:6QkU. cH5+D4Yy-8n#km 06g v=WSKTښ8vWnսlH.I8ΓGEb8 [AZZ6b:ecŃG;tQ/QR_?2Z@"a]Q}j:V] q>f Ldc jR1 c 3$ 0*=* =púdHal9%u9`"/e#WqZ37mMIhmgI *vs3{ ز\'`./ P|L7&/A]E|PPD =$"!0+kfbdvNtЗչPqmG"D|⒝/ QݣgHk_i2ܐ::D؄1!j?H&LS,.:-2쇑XSQF?ȞE%/QoOq4uyyIv-!Ehw} &15{?rw?zB,Ҧ,Bhv&JwdFTBb!$dnOA iha%{p7`".5'QYT%t-}ƎՇwg)!.fG Ե5߮GK%?#*lC3)6 @P,G>{:&dd4J(w$qKOf!RBLBCoT2`j2IILbŦjRSK+{kZ:-IlZn54-j+˧-:݊bǡEvho"/?̱Qw䡁a1UvO]sB[*?@} i' cķipnIJHE0 [ :5 B~Cdj*x!iKma 5Q"(!̶Xfɍ>ݮVqo% Vf wJ@#ǼUj#ݭI×jST ҟc[>/O]s.AQ3S,HiⓡqohQ4%Um7#LKѻb픜~YgX:\ 1D\6;ɗ/\S 8=oI-6(.(Xtr,`F0!aĵ9.$&䄼>9 *G3-M="@8gdd@Aphj0HP;`!荤 Rɸ~4e ]tqU+Ne̓mLKX@Z$, H NTW]})Щ wfuwTs+ %_L}0y*PQc9Bqpq .ȣSxSE\[/ۻ ):ʥIIH' EKMكtE pjOu \<8IЏ,)g5g)4j(4%K'n8pu([0PI?eFE!M=[UOA{>ݚu}n֐2D*Ɠth~3XCBgT[|erP4-Q ;J[T_dxFH^( m<LJ=@!%m&x/?~s98}SSԬ$uK~U[ZØ@QL 3i˵(/ZŮ3uOX6Ɨ1{Deub}:D2W#)^r4e΁tf~eUTۢGF f+2?ke$fhO[h}AX%nEdv57uS b D!uuSPYr2Ii-B(;?՘؈( PS `!#\9HSXKy NG{GOC>!01dwxx}v JFE^rd%L^iK a"od9`!,G?ݺmC}@Г#Z>=`ID3 C۪걯_AKȂl wI}EtG8º~cS%Yvu`Y'<=c$w R [J.lwEP}OcvRpqLjAsQL ;~,W4B!Kbv Wh?PbO/5@"jHyƍJ8FiUe&/oQ8LF*Zف9+lR*9q r@ʦMe`L;!_%pNsL^HkgdE&dK`bʽa?< 0*u48B#!@^oNh-)w`| +;.SG y؃ sɄEEaRr32}d}$ƿm6ڱ8m&O4riB Φ9#Q4)kry &M mA%RFR5uI80)v]2e=vVz6yzfE"+%gܫS n݅Zm#E&m1y8B7f-OBvw-hN꾖(6-萲'^]o5fQ"B'+G(s=p~l e'N;Lђ *;!="d[*=e#`v+| @d{ǧEhHd_NNoo!)N ɒ x v;eĤ7ad >4{**O=&`S&mms;avIbZhGZ(g]N])uUeiUWq9H;1x:Q("B{:BHB>'Ŧl"?\BjYd>-=l'M/89Y`ges:$kp#x6w9{Jb(@--2HbKKvS{qjRb)#OF5#ĆPElꩉd!dGʞ=#fuW~) (3mdI8pXPlvK\׺{}5}U1O/=vHL5וzFYg=BKY7#7>cgAΒhEO 1{śJW'C3,宧{ hy,Ƈh6k`q;ão=OZQ*S ekl0Lszݙ^q ٶِucY]UX%^īƑLk:Y]ȥvWu3WT6Hhaqq/ w7gꃍdJzx-AiK'M{|\FMH^o-P@#q @d4Mxadze] p +@))!ljUW5*TR8SF0:PB0DŽ kc.Wɋ{!DogUk}GNՑf(!LձB<1IW pM7'B'nD~6SAg&X KP28yO=KHIC`C:X ϼ?Bhyh %MDRd,Nhnsj w&e";'U׮PQqIrƷQb;a"`d^H]F+<C`|uWo,lyڐ70#_$`X_|zn9K\˜]ߵ!-J}7)av7di)6;eGPOEe`brW)va^'aCop0(ʥ1=J GP@h ؀*!z=LAME3.99.5UUUUUUUUUUUUUUUEEO{^f:;qHJp>TZ.@/ *iB H\Uj S&zv%Z*:u\a^ϽVh>O~ΟkbHd@HI`g a[#@i+u 62f]j{mXJf)dz5+&#:wzXز}.d2Ĭ\hGZO:aJv4kjK8AYYՖBH>8ȈrGA7U҂~r sPQM?3`g)fTRwOק"\I|$;-#i&Fht=|C]v7nm:Y-U~B )kIA)b( bQHE/&H/l\!s7_O:<}(qA򠐔:r٨t:o(֐;dMJ8)MG{d@N!n(Jm^E`1uu?R)ݬ}cWAi!Qr<֜VW48rM5^2Cy*oWN%sv*&F h%fg%BA$1!4F1 B  @ V@2P4r0PE2T.raMf|$jOhJx$! .2{_M+4|N-CwB`iI9[=Li^peU&ܖ8D]#O62`gW?{?ji j\23yN50F`4V ,tEvv1VAQD%r9aۺ.r]#'dj XEˍ=e-m!bݱ8&ZJqEtt۹s!F $20'pےa"`y$Q7j˒ ⒣OU1EͥQV&b:!3iu Rɽ1k 2r"K:cBLl8Ě!,`#CA}s<ڻDD:5x3}h)uoy7b1*U ].E6i{ӊ#H Եa k%Ub')1͢T%@w$P\[U*/ZRNV*4(K81~=@Ohf gasdsFjK-< $-i  ?33 qkb!I$Z,Mo}u(V;W]uAX aaaCW :UIFjTIdʫh&K(N\ RT)FBA( g##tN/[k"#S1֬x1Oń\PAB[FHIkpIhJ%)쁙PIf= .dI7%xؚPTh=;>Rmi P=j|ړKwoxw],=0gݟDL 0SPL<(.ebOUbN.8dG`b[Ma-!&D`-t&Z\;#X kc"%e8A :-k3g8pl.OYqH!jG86y}ٻ$᪂T4YX5*^R{]cML6m8%( .zidJ$N2z!# ׭E1@& O=+/cXD |X~*wvIM ijB׵ʶt΄{؞շmeڴ{2H]$E %g;#1H;d&}Q<+`MiR[JI6GeKmzdk mHa%m/U"3崎8arBQ:d!a#Q=k:`(Ib[E 88N8'@+LTk(ޠ 2['I<$'ݛC]h$9I_}&?{}~SS jMBl)K ]x=D ^|4@@Șd v'hS.*LK KLtgִs*iGT Z'-O$@~ni"Qv;< 5IA61m!M=J!)z|y-4>^,XP}2~(ōSu}̸r+ipBvQ,d~ =O`-@"-.<))҆*D&$1H Pd "6bf>#VQ+ []ݴPc-Z` E|h}rЂrn9>pW̩eˢr.嘡(&4 f<i2E] %ueP_#/<*ַ#i& ohN(=HPYMF%zPLyTk/qRV$]$êAI1OAdG%^?s(QA) F?͊r "*ǖE#dـV"?=#h)My nh! Tm=r__9ny'D,$H\V(TiPƣ$|o*j /eWݗU!KOx@WS䎫 Ф`9Nr^P~iEP+@ln/[.%h(8-ǖd!^?~*h Rd#ijV|/e\"C !d$J k7FMRY@ JJ 2bYg[g9 ]B/un8h,cp(Q+'y+PVe 4i'Tj%c8,8Ȫqa"'0GҶ{#X'h1;Q?RJ4LЮ?;JLjeiz:LjE<'D৾_Ysκzwίhp؝>dM~ݿ7T ;E\Bn܏)=D[mV(d Kj" A iE47PʒVDԻd:a{zn=!@k+| RLB SJH;`;*BwwA(y#L%c2G'~g8Jʊﳘ# x֡K/hp(mc.k&ձ J$.CBPl@3W|MQy(}v [Ԋ`0Ʒ҄b`QJG;FvФPZQ;AEHO5 zRB\j2jѕ=rPd5 qz_a4 %Fi(9 ua..yљ.3_Miwc-6?Ҡf1dۀ7LxAYe^-`!0)<' ~UN 7"#MЏW&<d@ąPO-hvvIcjղso~S+9n (F_6P! LY=i#6QӢ 7g'#?b_J**}5"eFYiY_#E%c`"ȸcy>ߓC,\9Ǜ%B'ݟS??=Plzi|BTr3~r[rZNb)P.PupDѓIT/) aB0wdFbk a9@!#+}4iqb%+;1:#Bc5JaV9̖3Y%c19frO *IA&. E1L]{?SX@)p%c á(Ha;fT]S)Z0,xT0@H|+p-|#+P‚g[:U0hfP@Ƈ{R'(T!5PP1)QTM?`Ӏos4ovLI&I, ;X:SX 4Ӓi |rb6E)n`7ǜqWQ1u?YhN g)XG,d?Giw-dŅ3 !t2ʅ0<DHѭU(䍴丸uDfJ6)Kgl %kכ)q-VUҏ+@彯cBR* RvB@@Uܥ$2ͱI*}X1hH?y>RU _ʱT3bJ(xx5vgDaEVXnwvs lG32)qȩo)!UZ"4`ć4I(i@8>\xT8K)(r$[k`ZC>1 цHv#gغOdwGa0dG-=#oL %, $18# vѴ]n^*5+kLdY?O Ip3R-rd3.`` ` #8%9۴ڶ9 UF|t:󾖷^OBQM5Zhe"QDcA@ TP*jKy)ZqɞC-UЭ&$U`Qt H.T,:,L1geQf<)R/QW(ٛGnMnijy|(n::Ptb^XR(Gh&5鳥 iۗ7jJh%ٍ%oS\͗5[ep&MKvf3KRu{6k'r5?JA3+N"H&+ޙqmԊo~Z btοd0`iz`)\a!ik0ӭ>܋䆀!ݱ!sס51x}{do v +\`ȉL?0('J$ұDSNٝKVf0Ya̺.\ia㿅 | @AC =̖T[f/Ztx=Bn]J5BhDL,4,ڂ!䉆FTd)8 JctIJHN%GO t H¸&|ڹ3˖7jzʷ)Z^V uQSL{]n-{HGf"@3.)i6dkF)iYs"\;`")#h " ѐ׳vvDkਖ਼CB" 4L/x/,L0 *hI*@VrUУ\ 1dvqʵFY `e#4m_!^iSD/#2iJ g N.,vfH#!BZoGܷiЭIH."0G ZJfƤt]S 2I$yeH*^D[%rh?21YT$Ft/qA`P i+M]f)z1v7w'w?Y@6ԎRd^'xAg ;]S{Vqs *zyۈyg#W8oOv[\9@$mj#;W|!tT]\&FP"[]y߮-+$٘8 ;?OEtŷҶ=B_F _[ƅ 1 qE@!8TgU^ի= UZydD˞[-7 Zr =bt!'Y4BɪT\I.,E孭r씩9Jɤ9d}-Ox!bȻ`‹ ' #,s+9B;:-Ye-da)CIL>cMonjkwݡ`r\4 I&r)b. H.ȈJHdʵ^CK̃Ў<{`_ 96kZ(2ﶰ>dh h#?~.{t~WEiӃ #Vd+yL~)a"e &{!nc(D"%s?Pa6sЫ󅹢h6?`W` fXVY,q%6ͮ>ڴ/غd;"ca%ZA 1 lt F_/wӺ ok (*\gEˆ-gV$`OiG8QGW^ֳ` =!6s2볦dYFjuBͣQEqSCHB"D*@R.$3hX* ?V}*EMښ:S]Wj=YX$"Lz ɺt`LjEJH3@ΩTJAm"dQNZ7E @u4vۏ],wH([cM{N{:zVl&Dt:fcd h\w0o+yM u¢BdH!e]i>@Q 5]au,8{jR:QS1lѦz1 9[awgz#/=HY)$͎s DfbWhP'4(,4TK" ĴAG@dF"ANV,^13Pm G 4Xd$xA(4TO;eV$8H.j%$e5*ѐcѱe3g+1ŨA%ćLfO_"ep_ϙgflF*dhħG[[d_s߱;qP RfI;/AnU6伜 Zjm R": gҐ8kWnKOI d܀/JAJھ lMS{; ̙a8Vj }/r9aB:ǻU'-vm|*Yƒ?]]h&!TnC[PnR/,xHh2*=+vLYR+$df5m)$ rYy EfJ#GB7v݋)Fma[FRLE;UT]eTFڞ3LKnVdO#7`3X-0,dfkjK" Q (6 bq cQQRM .yxV[)C7m5dHyd{4`ab% Odo att= eVOum_ϿpL3$*.G`xpW!C:MZ32SW-[kr,ڮŭ5u6?VeoKi+v7{@.`<,ZQ!9e3EEh-@! bWƈ<0iRp$`m#!O&#">.u7zWJ0wH2m1Ypfq(.J#C-~IK r ܸ[Ike*V,E᝵A&4Ҭqn1%[Rʶ;XRRXIS a(H*i IZq8ʒI6)%EdJ?@Ye o 81-'?3q%4O"lhR%{- lFsA*4%CFzm2@ k6ً1vʏ*mc͡EǍW#/1ɲIn~͑nUznae\ML??$I,KuHI"I`v&4RgPfPc`5`fFr-,0ࣹTRL1:] 02'T `m)g: iH-M91)"tl^\Eo`^ E nFGjR4HZkAMcu{ ¹h% X.iv<]W:Xhu7x UdZxh ="F!& `(k~A& WāQ҅J<8|p i8>D7E ( +ʾMHJYW/Qa^[+Ecn%zrJ"FWxmr9ebVui+IM9siBD@ˠFurupsѨ(L6>;Co&CfY݉LYBݓޞR DꁉLyƍ,DLh 16g9C*ꪪ&q@\lY.h6 d]VG *ϖZv}bW;wHQ-&-B1%\ 2^`6q0(Q̛EqTR\(B~עSF`z j`HCriUwiHfB6-> z2դTTu2[^o5Soܵ S5^dMm @M;Z1a#77\DUfTA>K Cɗvgz6}#6gnsD꿾.vk^!e-=oEPC18Jk!6P" 40 @v1 >IT!ߗ`%Nolt}ƛXyޣʖS6 :Ǻz4䷌ Zo !d3}{zs>^N^“nIbfa/-V_vjoMJpF\rՋV{~;-=$iZK2rNbrTmRd,`k-`\;!/pEQsH'=ESr?h+o*%D릖b)Wܶ*}>: WMr^P L{ #J>\3f) Tv-!Q7FNj4w7"~vq re:00Kn1?m,25^9mj#w@ۍ Q1j,JU(y(+ً껿!o+7TєR1GP "4t AR,+LAME3.99.5UUUUUUUUUgixV}|BkM虮Am WoW @9tCKM>fl dOb M*_Md77 .)Tt 8'zgJYHt?n!C@HX%Q/E<Ka"f Нv~}QZւ4|L "pIp /jܞ Կa>= Y#e&.*TފNyݪ#צϣ}璌/OvhuIU=᠚(GYwT2$,HJ,nt3%fo162bc8"bYAv $Dm5IeGdnZ[[v(lۛcT_F`q8KϦ5!(YyXB1$rYLI͙ :BtDS 2끘p1fdp @^EϾOhYuE'c&dlh a(a^wkɃ#*i擱s+sͤϏk}}+W o2`C(C|疙\7' 7-dDΌqD]4I- ﹫-?h{cϬgOO1ݶAh66]Q1 8xHV8(˛`eIÈ=fK"@UOjAFִ^х:ߥ􋠊znSɀ)RI3Yjb̺ ÁcBa9@D=^_oITnIEs}l\ҧ "wj9S! BXKL7gd\h  _a/ <)`*5&=HWSURpSg֌ @TT SnXka[36_32ONo RrHv&-F#%G@{[mB DQ \8- ΢YO?TQ3ܞF |&P3Q2t%+[O󄈄oC3G`lOǚ6 HݒҲR8l$*E 5bBؒ !u` 4<Ƙ"# VA7HL./ +3_cd.]v($+ƭ/h 2ݱog:a30U"w]ogbdoɊ|a#OJw!lA¤$+@(6\%_*M}uƜNjTˆ0/5# 2 h8yyl[:fny.Ki29$?R#^bκaB`B% ~9cic Z!bz΃) N0y!~!K4' u-[PH({ID;3S:AܩdҶ9\ύOHtmfP&B0PHyHT[5GkЕbM GrIgt}Fr]_(C x:H@yLŪ7NcAԍ-ْwk!ٓohPqnd7I`#x]Eʾ Q>a;GL"FD;2eŽL<"L)_Li0?G !+QMGVdk\yZ?\±Nn pȅA}4R3`w5l!(MzjLAME3.99.5(vci(B,sw =pbG@Z˅sn' K 5=$F? 8gYw6)SJADS Gqa1Φ;*3]EddOpaZ\^ي]Cy&WZ@$Wk%Ahs#>:tdDZDT1$v8klYAM紋z%O1Ô(8s|]CRd[a_Gz=<01@!=JZL~>*\Xs?, d4.E5QK8 )5RrN&PkmD G> Sa k39o4Hxnzbt,x8Sc֯*Eqdۦ`QUH{܏ͮ{PN$0lu!埣,aPh|-۰ᬷRA9&(;Jsa^q/Пg:;NĀ" *WtrKwWH/5 ,)5`U"3 wMܖvGu*A(k+bKga."M7Y-~]x+/+YtdTud|Ih#ba#i/1!)+Ü9,+ð<ҽT-}\[wQVis QMgsk-c2p,b,a+kN/,V__@k*> k0;!hܺ8CzYGukvy <28σi[@ki꽺&"}a8; v&LAME3.99.5u@O %jJk/ {Ac0Z>**fkgSX؁<ߴZBIKDl`~)$‡谔}Q.PA>-~2dNn``;!쫰x {D "Wb+:an=g@gvdm$ᖨ^YT@]j h+h&?ThqtUP'J48x dU[iC9+w 45BnP + }-ǣ, G͉њdH)H`=@E@1l )‰,K3~8'8'8'o4PH]zc(^ Or4țVQM?]Qg}DD04"PbGt>\F>$^o4ONp5a']{ЕO%:X@A(m\[SuzMlIX R P,.6\-K9,Y'm%z\N T&bD&mA9M3F,h;$';ade@̌/58!@!dF詊ҊFa3@*APʹꎿm}gd4I*(3s"^p9!u s\nVA--Tj=Ph4SXqqLqĽDI&_Ny*owTMMWUO2!njS$rݘ^ճ}zOԐ.F vBLiC6o8"S",!)e35*4lگe*օ"W (ͫVgufsJz2].(NLAMEfx>UB!I0ڄ ~B+R 0Իԯ,8m 2 {B.k n;Z&a="S&DhLn>(prqDFrPdhBsK;!4owޫ"֫": r\J7uvd cƽѱ(MOK5߿˽ DDn9ЂJi8A/.s&؅tpmH"lU޴OѲcJwV݆ g{Td Z5"2<0~ӥȸ ן*0Aկ M#e&@L2wBdwKČ" rW$p&cj<DYkAD3ck}~+P1z!]7{7_D0nݣ[޹58$x6]$^oi`(`bLXUe+ǀqJ9YK[QlwzЉ}(Ÿ \yiVIW#=I$ k$JP !!/,Lr1(e)w\ Dx{)G$qd# s(aH=@3& UP:"Xi8p֖UuZQ"%ꮬQ"mm[ml]Jk:JތԿo][{q!MdZF6irbHAj;}tq& "hf!v2¡5G2$j(j=N?ť9P'٢Y M3縊ӥ8wky h_'Ej2`y\^˵Ah6?ަh_ی|֒oֹ E7}I{(^qMXV Py:I +ǔ7ՠ, 2QdG"Z*m`e7`!|8{eU7"|8;Trj8֊!X3綈m_[+rkR Te@PANj(XיipXXҴ /YKZ%R"&RJztxxE)]`f-m_!fdGuVdaNDǑKtΪ riQcAq5j(qArYhծYE(֤V#̖wOyUgyw6H;5S=oD+2@q9EȖ1E^xpxaK@6! Fxy|?zIv3cJBr+g/7dڀ[Khj=L $#=c~:m 4\CFQ`r !g~I}fu6ͬdT*Y?_g7!Pp 2! dQSalsE>u!renA}=ecjހ(TLd60@A@lK]'$O sHI& Q|<c4@S 1h"L@04 0#lll?C F?ZWfg}vG\y{!2KtzΈDlff DEZ)\ڵIa,XP >>-)*{"DmFE@ôEt6 /oW}6ccDAcGFRl6ҪBBFГWFsӈЙ/XYȷՊW'n}D,1& h{>/y1vcD C d1Bfa3U 9i5wzE5xڅ_lEFk;bZ0wvdljbP=YG4\X\Sf%aOXLhfeJ ^L)DR=d!b OaXQ"Wٟ)8s漗Quw.؇_:Y-0B*è:gsϡ@MS(r;nr^,#:j[[ӟpP򸀝o.g'Wocն^i7.P8%&uiqsIq5!'(\RqYZC\i*,̡@D˘fϿBH-K"'ɉ$7! B)f2h*vL`T{yd\mT#B ūs^է97Q]U, RG3`v:8RjѷƆO!j!~zƷ Ld~I`agJt} %jjҩ(wN[Kyw?^ooOWN XV/ӍZv[qO˺vUl*KҴzqCeTUU'&:+*gǶ*=U&a0=(cC-_U&w[ b'Bv+`H}LvTvw8̺DlHl{DZΖi7J7k[A 0_rWSQrꨀ.#:HR'b]GT. G'RHlo'dUG`c\ =D H` w|T[$9knM=IErxrJ5KT,[[496ߋkۍ{&0HS[zqB/$%(h COVĽJ1f(yQJ\_\o]H.]uguA`pR-NFnʒqҋdHA[6dAkE-’Qƶ,P]) FTaJ[-ĹD[b})Љ|BJ N1j$Zvj;dwh"^Ū=#^ ČbIYO, Xh(H lbd) ڍU50AOL ,(CNl3 l#yGHRVFU_*gY$6D粏R6E .DCeV@rZCϥa3. ,S>Z9@<"B1J ˁsUAqM&ՌQ"-y$80/z.}A8XRI.7R8( A7ʧ4%M cȻLႱ"ه]2-(9Lba1ԱKw ]kd/Gh!e?=#j)#`aQ (",lQh^dɵ#Ơ vb[Rt[پeK 9yʗfEJDkN6Yp\D臥S!R \C@X *l4Ҳ;h %h'p_.PP Fj2g / F9Rmz̨V(H+p=˃} `hjնfLs-[1Ӯ!3z(kdJ!Hb D=&l 5sal8 *YSb{ 34a4N.U4aw9yF%`p_8 1bNJG,"i!0jO A#S|K=]2*lU琿Y:A2ߴfgg3N.fvF(ՙu ne\߿VV:$HXIC(.Gy^md5}Rj}.͙H< ?RkAї2lm\:i!YYqc0 L ^w:dJHhfke\=. )!x d1@HEDKx"q!pY@E[ӱ^OiӁPmp/wN`3z=C=|>;v|f).D$meRjGWLQ9^e奞ÎYgeKmj9Mt'IG,9%x)VZGqEjFsdfđrPuTTq_$92:=!HQ0wV϶\"$}J1IVyoP&YZwU$-lӝ]Zj>S=ʤ>PhqF͢G˛©Q eC+l/:pJDC eE:N2dh!VIa,DFQ2.@8IJ]BSD#.L[S46}bub&L1 Lc%'*F2 w232Se57 Ye#OwrHWV⇲AiiUMh62N]x,dm0,rH&-єmq5ܫe/86Hf5-clKq~Ѫ\e" WSzΥF"4d!GH#aY= ZB S^e>A # >3.) U,]ȃ,$9}ua‚ ~bl] c$Dg,TPwY?2mðf9# pvC}eDt͹PKJ2%:WGLVJw%sY+sDOyJ4Z]?]w 5xI*@NҕOSvKhHy5ˍG֑"y0یM^^AAb IEI֦g%*ܮPf6Q1K+)dCJp!niY]a#n zIl$vBJG wH^N.Y H7WJB! t#BϤD,i)kd }Jb>TR) KhVn|$4սhP^-F3PWmr6(J/Ok k\J5Nʭ=7TfaCӤNfqi y/@>F+~,qhDsV6tB 8m%;ޗ]sX n.CΉzEK\$v8wW mºV&6Ji@ugUDAbh|h4Y:i6DEh[㩭7׌JI: JҀqft "EHH@!x+"K] A'R[ZZzd_J!hd\=#v[l}ܼjߦ2uM2p>\x lі"CEtOih='dƲ$b{;Pew-"M4?X89+7ԋZc( Ñ_5W9䆩m+z)|amv4m 6w5=LvAH9złGa !-`,?1JdJn0WFlm<<-N>W/r62x?l-wvgPGRmDe"a I(DrNέzkgq3/]OAO]nFD=)u m szXm),5$phV^qdH![i\a>%` p@AHXtL0k <^S?4ȵB-%9.LkޅԧB kC$FPF:d,؛KIJEiBIN[eq@#xst6xl-}zK1U ob)x6{U8l 8X|PU|]{v?mr3n^[g\ʳȖu)J6&iUH:nbϡʩp޷*(AL_F6chsm nnJ= D[}ҹ﵏F|Q\ݫq$AlF3bĐhL7.Y7ؓ,kkԄSd}h!\m=#J'`!1dğim'$"6DO{F#[{r(VOw[Kli&k(j+["6ŏHJ/z罦w?YWR:F$dH&$;yr)r%n7JW5^%cC>û'2sVzs:ҩNΔfu53!眯枦Mb?=K $-naJ/#LNziV9h~]l˖f^O*;V|'g ud:1T&r6$q- K6a @ڲ@?o3:Xdr E!fy==#LE/@!ޮ㡄aȒ;W~>IMvwQRǀD!¨IFLc!17auF_m pm4ڜ $;ܷ1Aui@P͍QFEϜI2aͩoN$]n$MH8ZpkQi%Ltz!dit+͵Y^wR9?fݥ31 xq P?j&p1W>}p@5Udi"D2tv N4$i; {MV&_E#VvKDVåG-KF5@غO@X90 n*Iȴ[_,nA@w0KyfXjKzdQD(c$]=O!ethfe25pOH7\kl C%).Ҡbăjl[Éf4݃ bٕEI$%~_tJ 3v5oV+~~_RYNaf$lRn:y]46U,%6@$&"%BɛQ$SaZfj/})wm[P@( }yޒ2Vꬄ"\ߥc1I)2D t/l[-sS,K`z$xXy akZse>|:-[mnB RBEH0Le' L&4ܶdh!x`ǩMZ>*C^Qa%4\Hx62r)XG/Iekx7n#DYpD0*U.ʹ5eT-TބGoIhCJv]U$0XcPY+b4m%CUaH,"!q\ak#e1}:<@Vn-& Qu @~y2TdH`!0dFI<ÆId!Pv%qJϱRDaPx4&I22G3le5a7n2%2x"*ª2VD8P0 BWF'ҭ{?G==U-II}ZHO1;?χJ'`0`0xСl]X:Vb-sUTX K{WCuvTU ܒYm15ϰWVd /*8PL?ETN(Ԭvru^vuZ;wT)؞ .[lS̠XQ3،ֻS 1%vYj@ZΓMydYIGa0vi-a#^F)g!_t FT,~L~rY3'-ũB)gJ 즫MEK l QEWaZ2杕iҔ1S[;0;Tv*.YVAc\+EzDmF܅e0ܪ nP5,UXh`b/ACAYV"* ?rە '(0H$w4"g)ȣ4TI)U(̿T꒳-#2"WK_ x\*S ZLAME3.99.5d]7adgM=>iAz4c HVe::%VP@XYeVP@㣿K,Ȏ,,x6VM$M%Y4Rne&/:nK*S#0J*!.@F.DBZ /,,KXXYX?LAME3.99.5d~`cL@}# 4aiscm-0.15.1/tests/fixtures/ramp.png0000644000175000017500000000042013213600051014256 00000000000000PNG  IHDRھqgAMA a cHRMz&u0`:pQ<KPLTEbKGDitIME "P$IDATc``dbfae`cfd NIENDB`aiscm-0.15.1/tests/fixtures/Makefile.in0000644000175000017500000003352413220460253014677 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/fixtures ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_opengl.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/guile.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__extra_recursive_targets = bench-recursive recheck-recursive \ integration-recursive reintegration-recursive am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVCODEC_CFLAGS = @AVCODEC_CFLAGS@ AVCODEC_LIBS = @AVCODEC_LIBS@ AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@ AVFORMAT_LIBS = @AVFORMAT_LIBS@ AVRESAMPLE_CFLAGS = @AVRESAMPLE_CFLAGS@ AVRESAMPLE_LIBS = @AVRESAMPLE_LIBS@ AVUTIL_CFLAGS = @AVUTIL_CFLAGS@ AVUTIL_LIBS = @AVUTIL_LIBS@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ GUILE = @GUILE@ GUILE_CACHE = @GUILE_CACHE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_EFFECTIVE_VERSION = @GUILE_EFFECTIVE_VERSION@ GUILE_EXT = @GUILE_EXT@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ GUILE_LIBS = @GUILE_LIBS@ GUILE_LTLIBS = @GUILE_LTLIBS@ GUILE_SITE = @GUILE_SITE@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAGICK_CFLAGS = @MAGICK_CFLAGS@ MAGICK_LIBS = @MAGICK_LIBS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MJPEG_CFLAGS = @MJPEG_CFLAGS@ MJPEG_LIBS = @MJPEG_LIBS@ MKDIR_P = @MKDIR_P@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWRESAMPLE_CFLAGS = @SWRESAMPLE_CFLAGS@ SWRESAMPLE_LIBS = @SWRESAMPLE_LIBS@ SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ SWSCALE_LIBS = @SWSCALE_LIBS@ TOUCH = @TOUCH@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = av-sync.mp4 fubk.png index.png leds.mjpeg ramp.png mono.mp3 test.mp3 MAINTAINERCLEANFILES = Makefile.in all: all-am .SUFFIXES: $(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 tests/fixtures/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/fixtures/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 bench-local: recheck-local: integration-local: reintegration-local: 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 check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) bench: bench-am bench-am: bench-local clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: integration: integration-am integration-am: integration-local maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: recheck: recheck-am recheck-am: recheck-local reintegration: reintegration-am reintegration-am: reintegration-local uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am bench-am bench-local check check-am clean \ clean-generic clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs integration-am integration-local \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck-am recheck-local reintegration-am reintegration-local \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aiscm-0.15.1/tests/fixtures/Makefile.am0000644000175000017500000000016613213600051014654 00000000000000EXTRA_DIST = av-sync.mp4 fubk.png index.png leds.mjpeg ramp.png mono.mp3 test.mp3 MAINTAINERCLEANFILES = Makefile.in aiscm-0.15.1/tests/fixtures/leds.mjpeg0000644000175000017500000006124013213600051014573 00000000000000JFIF@!           }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? <0*A'dwÓK< qO68=jojP NAn*6繫* qS*֡8֭"18UȢ݀Bk5}m^mAPA5وV6ǩ84䃐1ZرXqP8ԓm;~UUr?OZ3qZ?fxرҴJz_:=?O0Y-iAB/c#D8 qɤ*$`Zg?_ғͿn2OņWe8}+)ahAȦ$i`ؼwsBy`5Jՙ&93Uٰ:qPMhAے*;*i$iI}Q}ỌgCsZGZk ˜$wf$n5(l |)DI$˜U-M~= X'<qi18 #VR9vCcA +E zռ1 q+3U 2ǨsS\m?L"Vn9*.WU* $Ucj̳\j@ɬ,qں=MH@o{EY˝g<$$j]t:} n-2[+>ᬱpp1~+2Ꮙyjwlr["6#1Yq-/r|JW a1fFEs7$n#Y{VjVj]:fkKk}V`-q y0 Os;:?|,fLVȢ8{FW/6)'gSpdJ*Ņ֩e B7LWGM'ĶyAc Tr8i@m¾v,Y-CJnW!1rqIX Ǟ]~uz֙ws7 8U/אȷ ^,HҴ5tJ1c2j\oS۞C^C{Yndl؏;Pb9qɴ{דϖo\bMX59⽫G}:? Rj.i ȵ q%DӮ56Fy]رcO5s=`_ֹ~½/X;n-AwK([y#r9\.mZpN$?-yֵ[؆w[CR kI[&ߍ!QrJM}5\$~+5*Skxjy94;f9:145=SEP8H:ShŒdv:Fj?n*6>NM{CsN3*x *ԞJqҮ29NTSm948 k+ "sPO+n5z01뚿 yZ9 ] 1_Lb<#xmp:z e3Wb#\rˀ;Wy+F.BB8l|Gh8s)P[K<)G E<p+ijDj#i9=^ 55Y 1ٟxQdMP);Nr}+1_2OG+! ]&y(YQI\!ǥzƽ,?۲Y7%%!cw5}MmB٥2d݇ .>XUR7PT!' 9ZyR߁M?Km8P1Q0zS@P@cڪ@Mti 84>`I=jX`t.~Pp;fw54ym*)'ǧ49^v.:cxXaXkF7³AabS/o]kҵBK^O+-)kꏯeO{x[f 0_\@c4W|] ۿY<3ȭLWӅ+od'cSnUχ 8~A~V~/ ]řMvB#޾R2dڣi>b7"@*'5b =5>q>"@5Kֺ_/iK3Wy+.#+|EzZTeJW1TV iҼlnUHg5pWƁOjʗd q8=+ qڻz?UgNQqIjFIȦۑ}9<kJq ; Ql}*4h^+ '*@@~tnzJYUZ  K7ˀz֑5v?L֪ 8=O })~r+25* ꫑ҐڦZB{d״|K9͎hq&';WgisC)TeJB7=}!Kky }oX tdg V Zw͏i1vZⶹ ΰ@VeI"ƿjM|׋hX῅ZOoBI^af5^ -Dja #5vفUd#pk4+E>'jK 72: `\*zVoxTA #;SFK(Y(t8VK r}^LR}>|v=!4(l,s|6O7{*qg:T`V{r@c-Y3)P}ެ/4ƫrヌt < c֦P{l5=MX$*,LP7;[* D͓Teg"F*;keT܎m=El9`Xڧf2y fSQV)*/~~%:VqYɮk~>D=T~#"Լ9mClDFۺ5 IYwW#wI@ ұǏ]~k<]Һx>!^@۴esw }\3L66cu75{_~4a5 MLjy G-֯Jֽc^ުb3(I_">¼ zv-Nio/dv,rjjAlٱ}붐w>?ƿj ,r*ʩ;OJ226kZ8{O t"e %8"o6nBK˩uni J9M|>ixO×qj۩l sq%ԦWAJ%;?Zuď#ŎI'k2[6|k7nnH8!sYSY2Z2)F*w QF V9ɀ=3UWe'=j }j܌b;q*GCRd ұ9 ZT`>I9=¨d)^Ӛ@3[@gAT;䜊HEpjaOa* Gb1SĄqX^Ց'կ'ӆس(?JYbNm^;ҟ ZFcp&m?E'I'zh` :כ&_&:ypcOV%'V@ZS6V#Q-W 4MEeⴒQ[װzi<'s{]>[%/$pW#?!mb]4l(x.{[a1L2p(UȦzsK դ=w+) \FpJ2H7j+o?V6:q vW_7(^4 M:az1ɽO|!M.8n+淚{ ǒz֨"u5Kzo[}C]f1-_\Fz8S+B]:mÖIBcNOZ̃n3V֟zJ[KsԖށkW*/Z$m?\H.C=tn} yOJ`)Mgȸ;sT۞sZޡq~>F)=i1Ϯj@ $0+C/jcGzqP> wdV0 5LqIt5g9 ݌txqTF~b*d \ըG8[=pjV;vjy=k,ݭpt6HvSZL *7pkZq+7`{bҧ~|h/PVK¤A=}GyH|&!+vȮR~?\=4;RpWb}ry)l8q]`_4W|e6۫_*r;s\~_5N )+HmP\p'I>?{f1>j } |~8mUt"XY;Ì*WwMb̗!Su)"UHqJIq\L Tr߭l*7qn^iv/',$KA޻,&N='PO?Aq^j0ok۹u+m91z֟>Jqy4tV,q$+4A Q*@דMi9V2}}LG{,y : Wf:(k9G_>2[H l`gPFnj^Eֶ.{W:O?>†;N+;Xe9s5_ɥ˞W*8_ҼIgTM"ZE9"H"._j8\:r~e?1IECt YHHjpNTsZ͆JM½Kxo8Ϟjׂ\}]OYh"|27 ▃knd]ې]d8<~ ώ<_q^+>c]߇OwVMV6WfO2qǀ+VrCé?zw/M"%3F:zsW侥#M4Ĝוq+HI5Yۤ p+H늮W¸+}S€85ԪӥB{)*y4<FTR* j`5&Ԩ8[lu11q[v`uczl@5^/icڠ7BCdF?yz]8Xb[x.2<? ++qwֳE9C(\q_|@Hʱluf ӞpMjCw_(FJ>5hixۨXo[dEn=+݀mXg^ۋoݮX1E̷Y"dl:_ܩ= ÷P\iVT̨(*x 5!PCS"0kbCA_6Yiz#wZ`ՈXowV 5 H@u>wyaͶ d+46uT+V$1:@b_d|5tc)t#=m6U ?(U p8vaK 71Hs_xZԝG==ZՈ\ |%qMRy$/hZ-b;u?LWT+m#O̙W=G_I;={cc~G½YgApH(zWek(ۀc1*0lEϭkQtf%Pm'Cw;+_6:$ZZ<繮[˘r{ S?7P+=ּwc*]6E\~88WHW.i4l&K`}Sog*`p{  1z{WI:Ӛ~wvZu*YD=j.w5EgZŞ ÷ M_ 1v6?O¶_]8N9^ZTȗcs19(spRAD2[K#sy++u9f[/xiM`K`:zw4S%o795 S- ຽ{5>pҼ=vF]$C?VLYħ^Hd-:Bs\$IڽƹA'Ș,Et]`.}&gİHV^vjPy%$J"[ mz~~]ZIe|G^ͦhfn-8d<ƺ>_ Lf]ݜa_\׎m'FQU!N]ϰ_xZTfGlk_=e8ׯnɯ8xyA&1]5SmUKN01OwNUI{;cG֨xcawGmm #DE1=aޡ>.o\p+2W T5?YFKV@FFW/lr#~1]$@ÚG{U" N7OzFt)cmȫQPJoTl1F9sRǎ&85 Tl*v?˥58֜29#5Db VbC#\| T `^Zu>Rpr2/>Di!>ǽzJ8GMط޳~a:(d~GӊM[0jve.^Ckmi%pL9lorIv$Q¤Fao9$DVþ RdfnHQ~n֝,J uJ}+; V~VNMv ^AaqjO19DxJ8Wqk)dtܽsW<3Z串VztH5I$ldy?iO*H<3z{+q >I |k&&Ppơf'.<󪽥^m `kCn@==}sQ { _jÛ@N {qk(}ȷX)?Jͤb \NF^#[@5*,9htYR< $)nO^} KX.&9ipPz`Wepm-xrB0I#߷^$ OzU^ѵMyX2 ~jxw1u;L$->S\Ɨa$_a"وd+t| TT~ns u$tϥI6FIlJq0>p<p*6ȶӊAf gkRzvw@!}kjDdNKsqڽR%q_;k#o 6mIVTI_|oj^+DVV '<(UznνD`})3몯[EzVk Owsڱl澔Kig>e(?@ ?ҹ씵ący!Rwߐs_ZoyF71nZw&EZ@#wnYxfK=3F#ھFף=JOF~cV?25ʗQ;]WSyL^JF+[HuHgO(ȧj$X4ɷ-^>*,71<i$If<]r ?Ҽ sc$X-"8ǯҾn[$) HF+Luk3+c4SN*sxcM$zz֢>8nQU觚x|[wLnʵq\ d֜p;Tp4>O5 ufTRҴcY2Hz֊:סih '=<9j~bV. Bi ={_ -bіA0\ *x{sE(Ys[X$_h.C@Ҿ׆Ns4! |+>wbKi915㎄WcO|yo-C"Jx Y0W$ lBȼw`˱f$3*Mdzi7QMm(Ak 3BF ,}E6ұQ"6x*N(rkG |Nh]?S+x ?yw s*~cAU~3ˣx_EY< ~hj47RI.݃~&樬yS4:] xɮ^0c^\i,H1ެs\WtL|ag۫5ƀq|]́琌c*8ːZiu+NIgrsk 5聎*ǎRCNF3Yv^Ӷ4׮M4q՞sj2P=)m<ֲ9TF8kUl *㊏~F90ODSшIAuFҁ.tkq},?&宆蛓fwQG{wj#Յ_: jֳ&QX)hյ[MK˹UT c[H8sR-ʾ mcrj{dg=d+0Kb^65,S;cާ5)dqkepG*_Es܃ףK_ɷ<+;>9@ ǵSz4ڛj)g *KmmDJ!5KxŴG.NY4$ķ#Nۓ޼ND?cm@&6*Uu_Zj+F&\acޘ4q[Vj>f*ޓt$;Щ +&C7 ~t$Տإu1P䏭1𥃺3QݪPztPVSO_P1s߭Kњx֮xӊ_iJ~Zy5'q4`dP#zc5!qҎE{>5=FYH~?#D%h̼:nBP[EV ^_x54t涆K{jl'q?Vrј]q;n3Zo%Ca2xȸHnO[ݬkEBw2K` MD2*ߟo\nPcSs=tfndGr2eHkpI n5M몌+rrN,95Q;SCԞkLm$#GӠPX`RBTgcr,5nOZ!B'Qg2yj*sS'J80 f^z|} zֶ}%WQ0{ФYȡ+ ^i>.HW(}}E.I #&_=s$?M;m53ud >ӣmpb)Mv脥9l&x>k5T'eo^ ZG繾J2˜tinAЅ??+βvoԒ?~hxH^"i7HNtm4U2DGo9ǯyhkY 1CZ^Z㓚-sZ7uq,ާ5UyC ~o!A=T^SO{uk - 7nLj1˹O&kO,#mAp=`a\tѿʙ?SW /U W7qk5 Q+9ǽzmQ K5ҽi11_J| 5Y_]# 9.C1^m!%z5:ql/"-Zyq|v"|6%J}Qqm4 x5gR@{Oo5Xs"G4D ą8'3>Ҽ[p]tzlmC R^8lW{/j }`x"DxXt,zW^S1^eDWz|;#ryd_7`F|E^{ҶZ,3ϩ;o.v%I߮kTC=i)m'13Qɑ{T)!Td"psZf՜Ҥ)yZ5HLpsP ?*q} ZԢLǨy@HՓhHd j)V,XNhz&#ö"yo8ǵ}Sm*ػ" :P%/  Urq_[*UPt`W1% !%UzVem9!D Tc~ r&P񦚆ϭsn"\W)9Ft1H]GKXO,6 { YxQUDHqY~Y/5gI?0Rx^b$5I(rV1,ŕE p1_X:2gS@rG5XMy 7|[IlN]΁ֽOThtkt"0sxis^|>--m^LM.1< ľ&">e8dr&C@r*۽sbK|+u}kĞ:aV([>kּعKv7R${lE t$t+U:Y!ýA \ cRͩ]Lcִ91YL~bzRI"t)ҫ6FyS# ~bIPz$+LT;; 8*6s18ZfsFGn*7F Jy269ץMU(#Қ&3Hl cjUpO["+X泔uI#݂5>wqOqHySݴJs_Oh?xRMRw|dĠ~ ^,F!#ĊlqZM,ikxAbC"Eֵ)A$b(4`Z &MoCm,!c; xVVGuV 쌣 Ύ!qsMQ=;{$j$5ظ㸟8Ht\P}&;E}gp6%Y1ſOj_޳e$vnq;|˟B:=+ފH``0Źcg>zWI;4;u~O~z2h>e|X֚4׊ qҾvf#?ʽ2NfZIkbgE'BETf=xȪxN}A*S֥ AȦǜS^"#JI皠8meb{zSq>y9*ʨr@pip2} 3ڐuMzюstX=9h߀Ҵ SiM5{C #ۥHQ0B<1ҖרW2i-괰/lj<5G< w#[d^uŧ|t@%SׇxK}#/@` d@_$$v"l~xKan$,tf8yfMq_]OiBZ29Bw+@y"-_ kŕƌ"xz(RF1@^@ z8`+.$5o8'5)+] s_||ijw)nFt5=Yw\>ߑ&[J%?־9|?xWPՖr\׈{} MGquWؽO_ƴY +Naqu43+'rp+ҦHTGjφ ΅>WfOLUTzF3Y4v(#GnqQ@:qUj;y̜:r{Rd"9ҥS#(#rjzT JGrNzVsQޚOQTȤIHRzg>V` ,犝95~y&g$r3S1S¤I{TE&Bn:Үtdu֥[gh5c!<Ҿyh[hP% $.WtLҿJ4}^YK;ʍv|g-IVWT(#EtlN?j"B_jZν%p+u5LH]#rKl=k6t=z͞2:W3d+9M߆5 '±s_[[֓kmdŻ3cX.W/֮x\4=txM~}|RR˦i7$}+'tH>^ʼn9PW WxUSQn?3 n@O3Iq&b*JFF(Wޓ=!sj he&MN UmnRqLzV$NNڂj= ?O1r?JkR{T4^*JxLHg309X ӞpH58 >`?LTO"jWΪd;O=@'FVԞJe ~wdڰܭ$\Ɍ~l &y%Y z?jD`GLOr[n{ұe{H"b1ڿ=>,+۶ӭYv xa˿''wwvyFA]W69GүoMzdf{=Bˎ s]Uǭ1#q ~\|0G\eRrk<]CZx|hkfvrǓLaFծ ϸ<ҭSgҙOЧ*L ZRP36lp)ӊibw#=*=)H1@R)t|'gl1RQ5@(,Ku9GJ8)Ád9M*q_aS+@0ySq`AbA9'֞ܞi*}i)"RrNE V?V.#xn OJ3 An鞢4KŒ 8%W;gk$l3RGY]B[,n èkd#NQg z_>:^Ͳҙ' +¾ayݝؖ'$O,czQTKG}y |c})N;H☨+ x;S檴5QsINEQAg^٣ޑ'N:t\ {7HvSr5FyœUۃQƐp8 AAl-#7L #'֩wgޟ99چov^I3SyI-4SAJgO'(¨2(;N{Q#rch?/ZcrA\7gHpqހpLaF*&=w(ܡxI^D*N>a?zpM)j|_,Gnnj^jhi0:8?J*rN94R0H=3gyLn7g-RYNHG'&sPKL 4ژ9戋nJAnXR$pǖ=?2HF8<xI;f *7 w=fbA dFFqq)xNO3ރE66qQ1܌ɻ$c2r:iciiH~xW y`ʢ pˁϡ\SSyn6sMfll(H2,4{P=>v|xuxE@T+:$ϥ!cp#>*1("r{Uy\ A>^?/ҳ)}qO[ D p=F 51@71n*v0X~}s@P)V8DZ4g;[q㞽}jR.ۻ92^JJ5Gb RqެG!}Xn1߽2Ni+ ulwgpZi#cxۜ?( 桉iZ6EI 0p#8ϧPG)eHO㊢( Bc`UG;T Y^ A4&Np3}(=\0'<4LV F mA>~Tb~b[c>^kp0+P)Zb]wc,3cyʦ3`p=8^*1dcv$8:#RN ^:2)qOb 8~Ͻmʑ0}}=*H$/VV6Pb6|ui7#) NAI8[rjscs{YtI\~B~lHh :0*qo#Q8o_-/԰9Tdqz>^B[r1 ӟI*X0]Đoӽ@& JLҠ֧ߌ9zmǑΙ9YSg zqBiF2BgcSV%L37 `${Aȩ'+P;93v}PrXi.j}DŽ\cLo}?֒,phyc86Z}Vx ;;K`0>VbI9Oj?5}`ڀᙚԴ2dc= Nh5"d]{MH(=zUʆSڕ3Do)NA?ʶ J.5a# \ҳn?J]y&-w{"z1{W+sҭ\q[e[9ۿ`Og-hÂLI`201~>Tjk9 4۲,{') J=+ɚ V*z BB >O\W;BD`p KpWG'Jn08NzW=aIcs SE]aTКDHuTeA.i2@9DpRbKȌF1%g--2~R{?ϭhmFk,Չ Yi݆J`O.CT-cY]A?JNA##q_42wdqj>lRjdk˔u#+4dϙ1Z%?-GqG Ŝ9 #i$`zU.qIeis\4*I99Ix^VsB}N3Tk G\ pzzk &'ȯl Z 1ҽ0M&e$v>LU].zBXT\ȝVmMq83!P`EmxŘT+ԭ%l,wSF[vuH늒E'_fF*`Qmؿ2pFӡ3I#4\f%猜N+uek9+~lFNkܣْ#c&l f# HDEOtXK $ 7`zG̝k yO|mivp͓ɮ pʂU$u,SWe rp29ӷNaFwqƹ=zUud6*h v1V\}qLXt$_ZtQz%Y Rq׭kB=nԔ8B@`Fme?~e23Fps\ά9#V?U@#]yղ~v(Y>+J)6Z1U ")j T,u;6Aں dWsg} F5D=hcPqR zP3gΏg(=3PK42ρ\U?ϵNኴ\Wz&G_S#q/*9@(ӡ ,wE&A9ץJۖy''J$4.+aBIXU"`aXzV@wGLeU n'"Tm5YBr8Chƭqu\+T1h@?Wʦ 5#ҝNXm'$l`}j QQOxz+g)Ac^ϵt/jXK1 Bϒs"Z[xShַR#GYtCIm1x1OP{G-8ozl4l8Z>Tg]d*H;N9oNA?}Tz8H#,G~/XL-F z$fnL"BѮ6#Yַ?nO˿CRZ13@aiscm-0.15.1/tests/fixtures/av-sync.mp40000644000175000017500001021377613213600051014640 00000000000000ftypmp42isommp42o#moovlmvhd/ / XC@iodsO)(trak\tkhd|%/ 8@h(mdia mdhd|%/ 2U-hdlrvideVideoHandler(=minfvmhd$dinfdref url 'stblstsdavc1hHH/avcCBgB!cx h?[~R!H)* 6| r4H!sqQ/1 h6|!< +ef!5^!rEze) 1j c?&'o!-@Jv #wx-{2!J,y R!0}{!^4 Q !Q!4% U;^!5 fz[} uIW4!M.::|' X!!yW  o  f E!M stcooC\C4}uO&r#,Rcw^ &-FRv ^/Tzc IKq"k&Ns.-U(xW0 Q 3 X ~ 3 w{ Ǎ H V Y 3, x! )  V? ~ ɷ M5Zs3\@F~;i`FW ^4X| S &2.X=/T T3ZZu7ɬYɭ4vuK Npn % J,q)d'Jq_ڸR&TJ<pW`%=Hi8a/>o>@e!7@ !!fPit = hc k F!E1trak\tkhd/ / C@Dmdia mdhd/ / D<ULhdlrsounIsoMedia File Produced by Google, 5-11-2011DYminfsmhd$dinfdref url DstblistsdYmp4aD5esds'@vstts*stscQEFHIKLNOQRTUWX[\^_abdeghjkmnpqstvwyz|} 4#9./6;. #1)0 0017)#  6)-6;2#* 87")1/"5 %4(55/,99$4  ,06:+-3%%4<)3/+/&1,  #4,&$ $00<Q % :-;/143!'#'2:=9(KE6*8$,!<'4*0),@1+:$) !8.29819 ++,2-.$+/  %T#06960)1; 53861/+/ ,  %<7   001*2 6%40+21#,*% $ %5+),1(,<-0513 %))& 4  47) (*63.0+  h(1.D6(%2*9&549,*56 ..=3**" .33*7"4+-'0,4>3$   *<,+5 $97/0@7/6)?  )0</;1 /!.  ./8!5(5(.-&* 606+   "`   342,*6/6 16/  &3//<   % ,/*%%,,3;+0p/./ #+&;96:2,(2 *7:0   2(=)++(4- 7//6/$+4'-!" ( ((5.,5 &5/6 &5"*9 + 0   +&87355=540$  ,-(%&% '8;,/ 4),301,'+. "      +02 2663&%%{0,8  "/0756$7>&8 1$4'0)3<3+3 , >=/+2 ,''52*8,0=  p+$ "($8,4*.7018/ 9,/5<   9! 44./4'1 49-166$   .  .,(%/:0 =/6/31,.%      8: .6+-2 t((:&!:*3+15-0<*4%+8,% !    ($$.2097 .,#  4))-2  A$]032&*4+-9+*:.  -7,51&   ;#" 4=.2/ -1743 "(+0.5'$ # ).(+.) (470 +'49** X;"&!;2$0-)7!(2<34.2e-5E!%$+4++610-7,610) )060,60/;208.5.5-4630% &4   &$C2(,64050:'-))4354$  + <+2#6 +-.$7-'&   1F'6+32.'6238 ,(-1#+  ''5+   ",3012   34C%.#0&/6)6)30,6) /00(5(,. 3& ?#; "6<2   44510*-&  5C@&18<(6*4314).5)6$   '/ 01*(4A($,'94'# %   *(24//5038!60/$4//3$. % /?4 3 -//65<!3!36,3/1+.0.5#  $'+)2% ,  ( 3-338(02/2"/=*   / --.-(1*3469/ -003)1:H-704-3!+u+.&07.2.,205,,  4 #&;3*/64@0-@3*.2+'  u"$%%#3,1&)3351700)43;/ [1(&)02+21$73.0 -"1)+3 1:!*  =/01=80/%'+32$+ ( -4/1.(3542.$)25.$!  2  1,-3%461/372)*   7,&2*6*5 44,  )18/+#/7  5-   '$43&1%.z ,3**+-/844% $2,1 $*85-'+'5/<' #  %030#     %61,2<;%9:1 +.'0102.'+ J-4</955790+813250'&,   #&12>969#;)1 &!1+)%1 ) 2.1 +7.6/49/ .})*$)"73.1).( 42/( 1*6-/   )6/0*4*5 >3*-2#'      7:'(;0 0-0 #<5+   37&6//--46*1 1/7 ?'% .7*.821>78,40(  E"537 1-*16 -6N0 #)43)(262.0*   (7-*'  =(# /6>,0(= 5**& %. *   .53 2''0 146  ++6%     $3.,,-224/('7-6/"#)! 02+73+/03'*(   62+-/"  /+.3#3,00>2. M(6U/$*3/;1*$224 -+0.4&$8])7$.921)'#%7+40$09974' 0  ,143,:< 06' )/&7/($ $,,33:10,6  3./  1:-&  * 8-/-1.8)4* .(2.#  ( *>149)/#& ++51A39++/Q$#%$35&+7+: @937   ,0*(2)3="0%" 171=2$4/!1&*&    7  3&&>28 -1.3 2.1#   5  134 *'3.."/&:(%   0.6.) 075 ,2,0.#" 0  =9    2"/0:=( 0(*2*0:28"8)*0.8 1-3stcosJ_2b6]ui<(`W<0aG̹ ?bR~ 4 Zed7]I1=ad 5 B Z P  ` 0 } u @ 5  ~  `R 6 A > f ٲBj}Fih3%ImaBf|Aj aE,ѫ!hlquRCi[nیC_D6YB,I2ZxA5ZE56Yb 2s4֘!KnW4(Mp6S+pYN /Pxrw '@ QD w !sudtakmeta!hdlrmdirappl>ilstgsstdata0gstddata90255 mdat!Be =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr?V@ 9m=M^|d|y2#Xv4;w0E|Trrrq_|<)R ? * +S h%9,&A.&݈~3"]…U@{6 xB GkL:9th?:H:|:f]fЁe@x:!zOoHp0 -C#g_oNbJ=CME䴰p¬f-GRRR8DT8;#4/59U0֚ddg1]k<Ȁ~~ЌcqG`6-`NB/㭌8 ;r%WXdK!C;`CdC\ʃ׸Y[Ei69|@ ?4mj̣BDKu=_p gG$ E;ر" U!K*o!;KeX&`6zXBs!?/!Xt*QRX,Ƀ<"AF Y`ɕ%PvH-a6G4]n%3c\Ӱw[\y98OHgֵ뮺뮺뮺뮺LлfV&]u]?cW)ϣx%~,[cuEaO4s _33KhD-:uꇖxJ__ \ӇMRM֮Y<LuBRGL/}PJ\@8?.: _Gy BYЧ!OovAM𕤫?uDv;n뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺뮺뮺뮺]d뮺뮺z뮺뮺뮺뮺뮺뮺뮺뼘]u]=u]u]u]u]u]u]u]u]u]uO]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u_ XLO4jQ##Lf B P P <1.H_B!uN6 d;HXܰ krppqU9Fˏ1;Vn''7F%ܹFU:3d='ː,)^7RguYd艊fM ɉB5{0190a? .W p>4c Q_P qƼ V2nDDf3=/i*JQ1`f~LryWzH:dZ:_1)3CK1db`;^`:Lc 9mZ b2WD?_DY>XŜ׀0rg|0'4H @DDË1tamPC h'[EUƕ-1ƍ?%x- 7X ۶!R)"%N d%J[!SYH(0<ͱ00laR"Sr$@mPcZ_\=>OM7D_~ A͡%(]JcrEkпB`אr ?o<Әq*".b$Ow8-$cA*"IvCKeFz8zT޿F?-p@[Ʀ+Tz_GPb08* K?ÄH }r84U_]Gr1JT1az3:䐈7K &A謒H֣k?Är ?ޤB{-r RX*]r vAz'1HnLp݀JQ~޿Ff4#<I*^8F/R'uz(tJB?fSұ3a9]u}:Az*/]u]u]u]u]u]u]u]uKt?]w]u]u]u]u]u]u]u]uJNɏJ`CӮR{뮺뮺:_]u]u]u]u]>7&8d-2Dga J[~:(p L0"8-1?a !&an3%a"L#?٨Ftt%W`LBk-2$YÜJnxTp938#3 ML*=wp7}P&O?c .JL{=E8%*Ԣ&<@`6/ 2Z+֐( y3?^ h2S _`CG&Q#GaLthPW&.BWZb4Q.% td0=喡yuzJ K_#fh)Jf{1 ?3wxL:4"ߓ@'p$$v+:JKР/Z@7&ܼ!&pPB/{Lc!ل35PBq]`<ݻ3f AI2 ɶ ;  Cxa{&h`fU@hޟsϟAUST( s F7 vҶHe1+$') `Ș>M/g" tBN?5@Z1OCܢ a҉:ík4/~`0H}@sۡ\9辣ZDsH;IeSPYeׯ<!LvM b;)P"B>-T;Jk@|6.`K|4^2\gNX&Ep$s8yᔀ|6A GGX! (urTXb1`($\&Ҏ<ahC{`c\iO{> -(8-̢y#R7i *h*MoSv2+`QO=\P՞$&*+SᨇQXm{yWv6GTK+Jr8݁c`0,qBHL,6l@ &%Jʈ]gHP ,ɉb?="/] / vX~v]RЪBo,!wr ‡x .Y7AS`!]w?B!%1 |:^`Nd t»8VX8DjU-cB2kw<q2]xy>_7$L#1$U<ܧO# c.WR!rMT w7 w7%}RaqI D/xu[3aЃvsu M5X,`0 ͊V Y[XX[_ׯrtɶYkymc6i)B$U 7F7 LH8 ؾh#V0іX7 o?fHt匀:@"܍]?A1F4ӗ09? 8U{-Q ="cK/~@ &Iƶiޗu6Mg` r;L/kGW72Ao6RJ07-8:0ԁǢ?] _$)v-;"5tMXC⯯=k]Ӽa "F IKa!bRB:p5 Y]gJsI)5/?10!t@+|GuAER&4lHzvh\|DvicqX+ (|)djp}+ZDP qG- ?/,=m\`߈q"{ ^`Ej^'֓Gc[ N`kuV 'Cw44}nC7p,kS p$o 6z/( ^h?Ɍ-u@-`Jğ(|K}d8r~MX*K6b!񾊤X& J{SIxuxc(S6Bkןip>O,˚[Tc.zѬM'APz<ݞ+-V(1DĪ $v'(#V_ʯ.C<TSBsQi_HoKyivew,=ʄ4Y^@8 c,q^8s0aͩ52B_IAd 9]ހF $Ok?n9h&? Vy\#q0 ㅌ v#v%ĥv?CaPe`t;Izdq5$0&1/k^[h+YOL>.F6 9l<mAS(L1 ̶C%pak ocxFV~ y$4z_ L BaR;Q؜ OmPVZIO|P8|zB!{x+ckÔOS/Q Zy_~CtkYpE{md$ C(H˸d+@`c'gڄlN㚐V0 ܷ݀;^#$_n;I372 ;7B/Y l=ETYnWH.⠗i@ d=0دYT1挌 d xF|xB ]x"3 -٨/}k&:gυ?/H p! &J, LPxnB fV'[Q"p r1AԨV3]?e'" >_AY>F" bR?`^P=E6]iѠD(A%aJ; ݬD5QD!AXYޓb? bRsǐe( 7&7Du0TonNbY۠w̤4@|+ =09kXV΅K) |mH>s@@J )ѻrw#x8Jcou H8=`ZQc RVS,)?l/]Irɑ6(1TO˞Zy |*xj6@fǖыY4$?(H^ҟ"A'L.@78KV`ѦuČE=siF$X"6(+qBsFzg4)udWƒBP "(nBPP")d=~& ^Cm+%8S@ B{j"Mw"cdHpmL);l,dtC(4oA8# `u`8EŻԈ )5!/v@+ FA _ —{*ꆴfKljqĈB[}m؝jx4HIl'pK~f) $S_Y{8;@{p)> ~}'_C =z뮺͆oPZF"3jV $Q)nn%P)7S֕+8rp?%La7EAXYb' K??iW =GbF:~OO q\5camjT|+ngpb>aP3]-0!bT# XAoFj W]u__7mh[!N! ]u]?MJv2u.`1βPlʂ q q8 gL%WwGVm-k$ s~7N?OtL8 #`,%_`,w#}Eq!`O?vpA\g^[޹g yj]A@'p_ˑ\|_4 c`&-C[Q`9;)˩i$[Mqh͍̚gG$pR݌pz|G47A)\X? ~k`8L# X,'ld2Olqœ2 p6A'g' ~?r'/@hCR#z6WHu,kGτwGoww O@_9? c x @&T}k, p^z3Nba_C$sϔ?b<|癊~>WZ4T֏ER %ВCbɩw/J"d?967Cgͽ!{6Nq6HL@&ta@fp3'48?%w"%WO*{fM#y my6b $M&O$ UϟVubn͒\z9e1Nڌ9䎆xz G7I@$A'~ .h #؃Bm`@ߓH|R"=>$1`b~6x l. t -6[WULw'f{4m 0k3c41vX WdwSwyp.Xd8#8~~A/z?N,F;RWШ vׄ7`XRdNR͛9_q/m<'0 +|5>_4rZ*>u@ `A 'K !KB1 7^* A*2]?v's/PK72&J@D ZY?Kc5F1kKUQy~22YH SEK쬾1b<~x?$h<7ܡvey22`M{񨠐A@'ɀ!M9#`@ C@.|FBQ#x- U7?*H/%{G2)R/vLmhe9i P7@(vV 7ln`v3 zo;BF@OB\\thG A HT֨e7¶45nMQ(_c6Aŧ^맑#x$RrV~a<!q9y9G#y?O$1?0w2w+p`3d&#' 4J͸&7L4#P)!&xRNUw|ldv  'p.!eK6+œMW?}CK ObaOsw By Y `HA`''|O>'|O>'|O>';CS%Qp[` yb=8T P%JEX`@N,b8=p=pSޭ:!%o~U@<@ Lr:*+![,CC`#+^]׸`(-pxLt%C(4W Z]@x8q 9PPyA1,QA,@$xCS H~0'P x(S`k mR$Çxw??Fx (j0oVQ<~VbP3e֚!L&yD֗(B1>#U.HP#R߃j0 gݞ#8^GYme3ZW1,y??<MnQP]/ +P@´mD,x#j~?s;NRDj`]';yg]|i@$M$zk i?0- ǿO=?bҌ(MN>#`<||l6i]~}ly"jpt;A)@LHaop(넮. #&c$(l 8Gr(D5pޯO6Wo4 _~hಙ(:`DR 8șޓ;!yjۻS`[w sF)J@A@&A' aك0 hP3Xd@zgKțKB_OM84> J#x1 al'X[3b02<⽙ϊCQ'$U>?1{fS?cOe(1 Q<(o!fe<݉m\@fQFg{o6'ܨaY`!0{!0w!0z!*Sx0!@|v ,>Gu-ջa  wwABc}rk`>T6 |>;Cq߬LZ,nN.D<=cӇzA I|x|EiOC . o$Ld,(GWPZ ۸GglqU w<%00"1l|H-Q;凟SG!L6w@rn3&KbOn +gm۶F6~-]Qy-8MaA[FLmɔIx[#bx1 @3 sŝ62@t9eP/Zj;|Y-?{J $߭ %PhW᠑5pROڎVn|sGk\ +nꃗBC`٘n Dn4BJA/J(E BߓsHzQ0 ƇUcgiX b$8H\PӚ_~o0ƌU:Zh{c^6 e9~n_8ε[?:sdwTA6M8E+tW1l|I^XI ̞ftGycAs!zNsa>E'-;=Y`!6)l#A[~s\gȧ5|8'\{fPXYbóV+(wZ^ruU^=σ}Y5S* IUw%,d\wZt^7^㵃=>.D%ahx'0ÔBXbasi qVY0 2Kƣxizq$ч5m.G ~" W";'ZhJm/+/rN%n%lkge˂ bYuq P]"D|=r,ɾ+!O42ñ1ZI,m*H '[Ax"֥`6fQ@j) NVEA ^3xMٰbl mqU2Փ wXo(TUe"R\2 嶼Ԯ:79Lu)flV+ .6mJ.٨@C< d4AcpB'M gLˉ-ik5Jȑ, 4_6blJß.M /#D͉ 2xrT R9#V ߍ(d>>`pV!T]ab7kYfeֶ+Ev(9 {KC*XuLUC_ 8VqN4j=_QP"DgMV 46=JhZ Atk0fؖOo?tYyY*s%nhVҁ|om 1yF =8M2нlZ$UZ54A'!c3i}9@GB|-3vZ-3^=|/J,Ǚ Ptgi@\p >t7jdSA|"$c`! K 5wj]|*tވɪ%:dh [;JXR1?^ }|߼aµvΰ*;>Vi FT*_؎hgɰH3=8J53ܒ|wi!Fc1r!8qQAw3b DWU(2ȖklΉeU' 83--*1(mfMSgqazҸW*:]ki]}Ml/3([|o%J68! K"!J8H: ,2ac~٫6^R׍R(->Q6B) 73 Vl%Mwa#jAhe.@FJPQ0^@brP"06%\ 3o:J! wj1B:YRƤs#8r$hjdž`<:&{ЦS-dr2GoZAM}E%8  XA`L H! O~İb  %4:飦yh5ib Da`w$+?5%/(iJ>E f"$C)na(2+逨'`H-&xP|`49bzkT0 9z^|GEXX503ՐƣL9)_Te>'d9K~!yn%Ssb2 .uK !y$ 0&! K`ðJ;yk@Altǩw5& 'f9yp OM 'l]ڨYs+Xm'̀ŪV 絡BIhx5ˉt.ĒPѧZ- 9~l1FєK%E-A"ŊXWZ XЊ8 a4,I(/pNF!LY_2$4CBi7M KiLWÝTJ $$VAi~b+"EQ)V\Saª*;! J<@ðLUL8yB#ej!;W6")NcfFD' g'fթ]NY14MSH#<;αK(T,lJf)eEt_J1J*uC%kel/dؘ^Yb73@ \QMUobޒ[Ѳ.iʦQŲBd5踤BpK+qxh"RRq潯Sh֑ŦҾ[tj:! Nr BXP(t5ɢˠ(CdM?> _zl42+DSj8YCrcv|G!rgYg80.̹:h+<Uy $b(5dS|~N_nmH[9fqVU[+ȃP& jX,YePSp\u|+8o⫾+s*6͐# &gTz~ɐRDx檰h h0sOh$vġX%J45Q:We'zW8R! N lSW4j 1Q0Wr10+ʩNH e1 @܌Akݦ \:(4x*-u$iiFh \\\Ȍӆ̚o M&-V^MT|nc(dg YMhh@\zsYX'9Ϳ`Dl:tB Hdڼs^fr5A)2bPܲ@E\$2'R, $%! Od Js焺@I81[wTS[F]z>#CCX`-Oz&o}'9,ߵ1A.6^ΑgbH*Ct/PbN~sJaȔ"Q$04S3"FюW:' +^]Zc劔͜AdRݫW.4ml 8g`mAsT Ih>0!KX^Q6^uZJx:NT2UUg)𽟀a01Gizk=ɸg5Uo4 sCج Nnb 5V-CsvߖLj",,ϝ G[#i?ѮoHD\5F @yI jz0<|?e˜_SC[&WmBjlis|% zKw!jT)Fd@Xh L*Un."tU7 f[d'N>f*/5gDYp;E b,ڤs†cU~ߣ́`Gr'MS%y+u;/H`mD4K8ZMtWstԞhЖmR X NpUH0ӻ%V00v_Ρد¾[B: } ԆK砗:;EjWUJ Lbķwz!TMbmQ)oKT,;UE(7L<&:W`[Sh0R :O4Ey!fMr){O/*zщMԾTUNN;VB;sU ]Y`#/`[8ת^͇eUΚI1֝k\&v 䢨%:]5TdY V8#L,O`irZ#mA7_( NЁjyױDM{z(YP>A'`&0R)FӀZ.)#3@C F0`Gb9c-|.kSi`4Q<+ͫӧOA7ozwA̰(W!xra<@d|!OY}v$J^ӝnCT z׈.A{8 67C)#o8'/WA'LaAi_e> Othڈ&؟yB8y}ZdD֗( tgJ) ))};0l3(prUQ-?fNKǀ8`69-OT5z:>G (-/{NsF`6F?B`d5dW iÌC hJEAM0οwLjή_|#xS>mmͽ$,8/ghE8):FPg&s_Ԣ|~Wk4Vvelx'1V7zo/%gwϖKGKaZ *k|y,,,$Itb Ytlj('46 4bOYJv G=c|3Kc? ۀ6Q .gh(~mLz }\%|Jc$Sی5VaUZ.3 | X͝Dxϻ0!~"- -^sZ(ЃWF0C.6P_C(> ^/1 XЕ6ǝ}$HZž23S r/p,i6FZPh L F mdD#k'C+d~q0ܟS֣zvǃ@LpvOC Kܺ~+,}4o6>6c.Ra-1Hv`藉5wOWxG)qm7ٶ;^8iNh j@^>U5 J*û/7ULtJ(nAƖ?a0.k# <& hBilV@c+XS,][+LD8dHo)Q^"A(?Z @Re?͛Ɇ "B?+z)R@C?kp(P ר di(GǠH`鏦 wXe wƏ[.%.L?5?iT (jvlYisZue| X`՜$QAU^@ G޷?;8$nѡn^3B]t'$v\!"gx "a0]oXE%`@]|9wT48G ]V5WTug%D*iEi ņ7;`VA'oAO?ǀCYc@i*L!{(S>6x["H9Yc֡Ǻ?+ *x 7IAwRQԴu-A 'g0eM00FiadM?D)?H(A J#7X&?wbg΢/➃.,DD̪ޞjkS:@QIm ،vXI78BA@'Cu%&Fo)^ _aoY` IVWOm m@0j0O7@A眛4)<8Jٔ6h4zQWj%똀n$Q &R\3ˌO(_<=/A א!.6l\1SuPBGÄڀFATy$JI?O?-:dm~U q;oL3 TѮi;aDoЃӖ y&U=l)4;]p(iR) 8p|?B!fhڀd@*EX0Q|8K Vɡꭏ$FK߬s( zؠ0*DTDO-`¿9H~LXy8p ]k/zm D!vo͡?6@}:B3`=T0Dd*R%?( k?KG?-y~:gPy>E/??G???????????r 38 -@hƀ:>ؐ{x700   0&;}T8ɝ@H'Qʀ%XuKYu)^LK0^xkw fd1W\'_ouK0+ۍ,srApȫ@@-ͩ fc{P2}]:UL7 y@,kɥ)%X~U׈Y*` ac O+U` ?&Ty_%/5aA'Tu G hp n_rQS_\WUVX\֏py|2ς9zxx? ,0,At #KO^2Ffk Ȣ˩q(:8 "?'3Wc  UZ/p?@@GR`~EL`0zk`?9j&LeYEpO˘2%QR/w[gQ FhFHiMEFJ>E(VMR8$3Sg4b.lFD:UPbH OII-O@E2@6޽|qIä5K!@ }m| ǰ PQ`Zx̝eP=!Tu> ‚`L$DY^VAdXjZ6GXKW$ L)CݠO!.Wޗų*2sʠKJ2O+L;`I@fSpPldͅ, J5_URٞH;3'%56" B<}OK:K{06F`bgk-jf R$@|" 8+혌!T`D4+=Qt%$UiR11,DwjN9ЈRfE5sj'Gk2LR鯅 yRZ1djbk1Fd=t.Yڨ١~ WEuW$U͊9!9^˂&k Ot ^4őOVh9+$5D-<"ŅqYˤ,B KP GE_41_lHx9q)-@XX%7ܱ& vEQ(H!S݅d YeL˺3Yt :9!ʛR Uϱ ߮yj~ |$s~}qsҬ A͛ EMCj^G54@OM5𺊯3ƓOM#ɦEZzٖ.Skϸ$LMt\PHlm_m^(!W-en僺L LP-Q0Z!L \l*4">iV,*l'q+Wv*BD(JU4 X:! SdBތv]nkr,axSPsS1NZ~}H6ʇ~{ü-Po~u1L$f.F{gς53z u7dch55Δ7tK#!hgV*nl#Oa*LtC.7 ,4,,;Ke o90F xⳂ\MEs0 HtO -~yUQ~9P L"> =8FE(vzg5@Vk@5`CElؘDkD! SFPD"*‚U}6"ⶂ"̓p!w8|irSW¾k&P3!l$曫`w+h j~* c||,"9*Zl &:sP9f-kly΂،5%)]!̷<ᔱa=. :vARJϷwIiT^V*;I3J/Q:F1ўxNW!f}d 0,گ,oxbA(D,ԍکs׾! Sa#D1U-EfA3e?~̮Kכ?P& IQ %[K,3́x.M_85㷽}dB_Pq:.^6 {pz ;Y@ "jb@2QC1)X'h&M(RO<78NO=+<+I<BY@X1gp2T.m@YJ# bCI3I0#,A\brof PL~&jwogH=Q_}Ƥ9wP=mpeS/IV(ęLq/-i ,~&Z v+\Ӯ Fzg*PqBB`ǝkn}%~t𔨵xPč/(qH7+)! Se tLliT-ރ3c=P*3B-ÞJI5M]u&ؑW+GAyR粿yD5$Ca /}<̼wwjkX*3&x[>sU04In۱Ƥ k gS-Å)Gf"06ziU|j*gڱ%| zֲ#FfTCXA~k3ɧ_:F<LgZy ʛ#hؔm?@k;#Ⴡ/YzNџ\j|! S-/%14|IE[\slֱJxKȃx}L}1xOL+n]$uDjZdCBs@a\T`NS4mz ss„e{C8s`g1ކb? _%&ށL #5Lj1.`XR0l&&P!m? QXnR{&! SL0%*@dp?՝at?N|oqYOsrlBQ|oC4BKchRoax x.QJڽ0듧>#vx 6 E \l3ǰxۅRxX;cZ1?p$lzEIn^[IXޚ^"%I njv,`,p͵IHS&;7h$! SU"S n՛ X@i0 "Ӿjːd"#"eJ#189  V=[O*oFqPbl v")|.a\RWserRܱ? f/L"縞$ M,/!#v eM p@/5^Nm.wWF`B-<{󎾣qq1qHZD$3đe0D-{9OrJ}ģ矃k9;2kew9 ! SbJ1@%  ,rbK$\ʢ }QoLc%b4BjE ATyeg,&C0MB3s_]Þ p˵`je]ĂXns ^T* AL%*P@`q3㱚Ёw$ɢkTm"gSouYX(CwzBae bAN$1%g~>ٻL3JN8l ؘV$Q)#jTJwQx-d ٮ! S V]r0e$LH~Ƃj1LNil.|ۊ S6V8R]ke/||ULm"+=t7M5 4IhfU2|iZ纐W~WSsM5?%ۈo5r]9!VCh_~^T<_q@&NtZU38vvg3ߦyL\>o |T&y-0K+MyWËuB@)$9 LghX5.VbZMQNNWh V]9¹cR'! SZQ(5 PX&P2 35;8FϺb[C}X:W,-YY2~=(3lfFk}3,-f|P|fI5{p]֣˽_Ad?QMyMb )fP*G]BgGv}\U=8U N:ާE.ۄqhW Q! PTL܌R ְoWmE/3.0?-%AKS)TxC;0%\L2! SuP!,$R#,ցݓ hP*;΄DjPu^$a851ɵ5rg:N|i6jOqLM;| ї-3;m1r5m` + K@#_Qqs>/C 7lXLUHMGb45rwtAB ȸ@1u-P.3zN 3UAZ}>kzN%b8;}~A 'R(,x@ %=뇁Af[L.$$a;G]ve}@ jl"AG?QM 30mA7o>;kD^q? "ycq.O D Lf[ `p?P:j]&CR{4l1uA@'U$`M6GA?iQ)%ISGcJɩh8/p>3!<lTހVW @1LmSt7CbJ6p2*&!\ ">?F\o&p@`_$D߬DEW4ݪe׸JrnA`'|DBUIJ]w`iǔ} gݶ@CN@&ɉb5qf]_B3 Y%fK9 rE+9*.T]`w81<`*2@3xr4™FD9@3`3.u0A'$$0K ς\^48P_ ir3_#2#˲$i lDw5|u6C&hfĕmR O3?]UZ?'~Ld-AwLb`c4z$E&쵤A'4ǁ?u c%Da^yE<l#e뵄ꪳ*LJg@yaT5;0uT-_~YWL\I>" |Oθ~#Oȸ}y_*ei e,dD /3z1sO cx,pc xA'$m^4g !yYҜ<@gdbF"[( ʋI%#p)̦CcC%| 0q3 BM_u  2yP6N/!>iPAuJ} Hr:_hZNi^7{#eZs,'᫝9:^:LF,™S^L++rGҾ2kN^~&b^nrlZO]KWv \@A4/ Z-`Y+Jq?Zq, g2er_&:9P;rU`@|M $*Ϗ?˨ /64vS&bQ(@W_Ð  \.`-l&$ϸi TI6@@(k x|W)#XUhQx L2r\/vm46GMli 7t@}fHmFR ?~z|OZrd?Vwgmd(h/|WJb mC0-@۠66;g!w_c#QrJ^b \ _,2p@L_:S$A' P*?MBGD¸/™14H$A 3 fv#x $8,^U_LIsMBƦ|?+gBN}= KXV(ڝ"AX 4Crf9%/&aA''!C vw|bx88ⷷ7lv 7' AA ' w| 9y.t@&iI8E6 9<rwe!O_.aKU'9#b}+n ؈;^a بy0?=YS;c\yq``τ1~?Bܱ@cәRړ/7A@'a۟*8 $hF>* ːJ%N@Љ F_@(8 YLg͒ + llkt#tL N~4ޠ4=EblD|(|O|1L dq}Pb;.* #vmMj`;ɔ_gdͯA`'ɀӝg0#C%4F>#x|j"0SƱz&fh*Hf[C.U]4btM۾eIJ?bF5U|Pˮ Hv-غbh7!]dF!X*Z1ҠG Տ@{+j !#-`IЭZaXq3`Y7GK)Okbzy_"0'4JS9Ê}ɀ~a 0f&~#9('|O>'|O>';zr㒀L4KpN @;h&`0 U ʁ8=œvV:*191o\ >7_dR`u xӀchbq=RMtzRA1Cބ1SxЧI]7 V 'W!y& QHP`sw_289`0n{'uBPG0ԩ6P1뀠0=5h cL .C[2`4RzY??%ܾ"xP!AX +׀V̧"1怇b>vXw7%~y17 c'A8 &vws]! SPa(b HE |'.@[&E]78W\G(Ԫݰ;d~sIt=sUoL'ekc# 9@I]lo|#;M7&lk5τ2A*9=$c9:WQ^NKOvj㛏m_$J`p˱K (\L ` zm몟wy-)zUo=ܴk_}Liw}'! SmC0L$K J2Ceo"ܔ۹v\L >#yj#:褼:K4I!L׿4?UhhڪD#|A22Eiɵĩ3>r`\W H'Dz8#\*MLĜʷ  t7^C5g,$!Z]meț D Ah.V\2ډ@O)J Nu3ha+X! SJ`h`ne6^p;~T֋f\MYQב'f(p짼Ҿ^5e;thV_jk/e5U2ӺHB{\*+Ey!3"_h AD+@T*TP;tů ߛˡgM<[3S!0`OG\8-3]GiZXvѬ(e|!?gZo]EM.߻QZP/S .y_^Oߦj(ӌ{[X:`b(/@<2;iD~ FQQhUt׺zEq! S}>JB#423ZS U2"\$Ƿ^ *$ 60'+"#j84K!մI8ﺝsWw I4{ A\$!98}bV4iX@ޗI1 .bgC q̻HͿj̟]܀eM/eh-X}Jϧ˰'`]NhJ{NtV!+@#E7؝9lP@(_w 8MsM:mo1Z! S>5 (* kkk]`,RW={u08ߠ ɛdPvJT30< 6qnhɐ0Xƥ,GݿWiL71;xnڂxwg1QXx[E؏!pMvzggl'CLdG 6a,ŝYV2LdE-B5|wKkx\)iF/ F[VZ$7TJbRKw堼ofȅmoIp^<Zγ/=! Su s0JccװIk yN`;dr|iO1u%f3F:]1cyT!-z%SH9#$[ww39ώ]}, ZCc:5Y$cJ|춛,@-LJiSeRYge6d[?6L\00.X깟,F!P8XUU9BL$`1( jHwؼu##[}KC.*sAH)j ak^gd 5M̭o[Rs~ D!|8qCW]Pp^VZ8,w! S BnU(%eXlJ RNdxQ<ꨚQ& zIF6|=龗\ ԇh$^ЕXjQ{<fbM ,r(ɷ;7:+R/[]2J/ap#dVTW6~xs@k(8)~GטVf܀lё]VJ6`h/%gODi9IH^ ]/҂TEfy8d+<OTP~ۥ}yZНwxBu^r>LA-"pba5^2t,_zĤ! S%ХwGv%9^Xm %LS?V0~&%&jS3jOK0ߺ|{!<_dBq_~E' /~d /l9di ڛ1 H,μBKSTV(k! S]CHⒹUNʠذ\$[#nʮQ&Q+m<#3y >C *HӇ+M}[Rm;;ܵ D&EfqqGG7V@@ < JH.YK`b3 `;!5*6aXn٥?&pSlhNLEjozȈN~xS|(RZ!|cHCp@a l%,2ߢ=`paZS57[22q! Se,#,(YsC$zQ HVhe Ml$4'gX$a8%#K՟{ pM$3@l80`9ʺ{!>Ux,@.@?295ϳF.L\0 ީ IUWEM3f_¹뤺OB-3BT bjL7JOJ1YXW+EV*qΐBWR̵znhMO5xE0; ! Se!X<;ٙ9@ @kIGշv$rt'JgDd$ȠOF#`ˁ3D-EmV#),< a;8#AvZL 1 TfXh;fWn1 30odaҿ>br 9R =* ΂.I"vI=E`IBM7{`:5^ ^)1DZ]` wVdփKA +<.$eڔ9! S]Y8E9-@#HaO4Ш"Xih±|{YyBs8), pLP;mb$@(?0: J3nad}TSG6e &f$#eVZĭ6*q{-:-@3}t[LX{,&K Q4*fșN_7Wԙy}LB^':9ȧ"cF]Rٿ3L6tS7ũ=-e탠a!C!ĤRXݻ!LG&4 VD5R*!,CCdl*~@Jd } MǍ;z鈕A3o(y[ex.蟫!+I'B?mQ[XP>M6' 1ޛ#> ~uHаs5Pξ̢`8)u!?:1aC;&ƒ 2V:ՔAI*=h"cf:H!Y7꫈ʿ(; *zJS L!jTŊFdY#ʪ at"ͰWR`||<!h'`Y>փ~2 B'jfmo>tcMjE|FJUKo;M$TD@-x:ۨ=LF*z[-uA\;tX^bgNM\&fr kJ( +,hw"*ʼnC]8=(4kwrc6G&Fh]?3'`vϊe(A't, h" <J2y$)_}4>~̚g%Y` Di<2\LF\mӲzYJ#yG5 ,| p;:Wc3bEŌ"zX)EnyH?DfGp#fZA'LaA^؍Y$BYӥ#k  itB&< DD}h~!+<'5z(%2BtPn~swQ?XP ֓#&88cf.0}e*6X GO3##>EaUƯ<~ OCؙ͵U/}jmKPkLaILToV=LQpA 'oAO)ʳF? hZdwe|D>5#y(Mw O)<?3@fp:zPpr^lq:,uqW~$TB ` "`P#/w!  |*0؏YY瘌S~ 95j_6xkޯS&Dc'^>"ez܍BA`'@RVܠ83)Viix["$EyI-\ڬ (h ؋y͈kWH أ.4j)`wpn~8|'b` ^`AKfh4ZPdx Dx A'k4{I%F!qfb NYuQ",ׂ <1 bۿ%8 ؓI0yInUhC'>O

 ?,V|sm%$˒)tNA~%J_e>3b qR0o5Yg{fUn7x !q?lll~??}auLq6vc6\>+0V5@QC i-0$U=sfdI}fFO抿+ )L\Vi*񫀟%RJb|zNrena ug1c1[+w^ ư&pP7:)B-~|p6Z "9lC7]!>?X8iyZ}MW ˰o<d}$nA'$[X ł^*#(hhgPGao+0O_8 ͐@v&@^ ؒH/'(}LCX%?Fy3OdlS|[.CEfGhA랳٬PfLX vv/| 0A'$ ># 8"̴G~% B*Gps%5p-26 TSh9LtcuQB7Jg ?K=|l@Up?OzUH"992&A'%h2PvKDx-lX CsxІbniSXCq\ ʘ |(` L<@AO1Gvr- r1/8KS4َQP5x|KdhShp4=Y0,H%`#[rXu .Cr0 VW!y|B-Xiב|O0|O`@9LS;4)|8Kb# D`҉"DH Thσ6S8ua|NL(="'ZD@Ј/j+`hJjP4xxɿ>;B!~mPl Q8rdF*h@P<ADd_ÇP U| fpRX\1wMD)vh`9s|`x3T &2{H$7^ΩFW]OP/DOr%` _+W?<??#?z>Uا????w)?????W8!-0a8(̢ F2Jqk& 0)3/>=@,qCA@"ʀ%XvZ fpIWϡ,cxO SY%_,oaLYqpҘbLjaFk6ڕK0ֿ?Y%xGi f5ȁʀ%X{hHk<1E_K0'hɀ!TMAE-B,A*g 1'.[Xr.!hr%hҘaQQrTLeV9g:fL4t]3Jףڞl}7նy/D1&kjQ0 sD%9 hNYY>e&85&1h9C7 NQO|/kRz4)|ogdT0\A櫾G-FօN!Thl4 ̗TUaVH +ͅU(byatOMB@IkdYCQwi rE[̭ (J&i/r*ІZȕFb[2YT aW:ꪙV/)eeN3?ZgEIw?Kt"3W "ḍ WKNf+`\0s[bV\.Ψ/cb%0׽KNU(!Tea!cQ@wfby $yX9#O)AͅMMбzX"Şػ7K%4Ibl7 V%U`ɞK!څ8x4gND*~Q0ˆ4Qeqd8=,xlޟɁIԽjp"\zș;n< !Ұ],G\~ 8rd3f5`RBE5%6hoY #' ra~/*(!TMcJ")gʂYs&*bWh])b 8*ST\a2̯reW7B&Y^ Iqk{:4>_b$ $8|.j6]Jl;u~d4[W y% g]X]\ڝN ܰeN;V"=HS4R $QM`Y[.C)'q%+aWy]m! T}Pt\ r8lPq $/*1^ڼ,SK,L 4o 1nf{V;Pz1C-Sb`2Ĥ76@ IAظy0c .*ɞ$c+ LI: Szgu y+ry;4Wp`Ba$[LJa'&B4Х1~ڈV3s ?\,""bf_H RE}C!Sb(& $f,PzHC0 >Ae+׿%Wq.hQ:XV`+\)t9$_mu^#lͅG| :4e>h:y(%;||jMʌGV! hF%EE9^0g" ],bLEYE|dR3nhZ ?/u79ނ!ٞPy4e#I c7ӂb"Z!Ā1@@9A 2ꌝ= ~V,p6ں*B$]:P򶆐!S>F"RvKjlx.g*kګ\oGt+-t|?ih{~ߋ|"@J˕[. )3"!KQi;Ngjq0| W~PMo^EJ`g/+]=2?r t9h.A:HZf㊦d]& 4ץą ; %1E[. ?ɠE`Q  dH>1.{X'.썲}܅Bd2Z/L{; V" BC ! SF0t v(e[i@/"00-&28 ;h3@fS-җ3rw36Zj?3ފPؠFst+UwGH/k0R(s2[{#I颙':B+N%}aZ15".')I&q] UV;1CɹFl}sZVUUw] !piXߢebs8}n/5R H! V+DrCqZU<os>! S8B0L0T7+Ue*J,lΪwm[%2ɰ-ډj=Wy/`R/³ZI_jT9o:;=@+ֻV&` 2a~O?4U.I6ZD7iYezqFk\26CK݆0ia6zk;yGڈkz(ӱN(wG aa(G4YrWXPDUKVVaiI4ƪi$?mY' %5%C_{O^(#{Qc۶JrVpWW vEhWu\VC0Z kp9B`]FYn3rD|LcvQC<`ȭ F 1Bh%/j-43r7kby*qe1 1U*Fui)@&/WB$v=! S`(QjÕ*˔l@o K KDlɚV Z>=G CRy Hgk.WOSWf6^uuJ")۱/s p?1kwv`AP@a :Ê1U~Z,^k IYH <4 +(X5`QλYWSNhq! SPX#e‚ f!EfKO41EC,R,~^2w-btkT}"8CBӹsZ_  >OM^Mg%:c;EI ̃/e. S}fit1#[]khY;Kr -Jyɭ<w`.@. `-48m\7Y=y?1JubU1P9^'r(B;! Sm'A-9 -0N@֕7)- O9(̳yal%=R`JRXnC_WLh&cU ŋlRt i&e[j1E𺍙G>k:qD63LZ YA&zB#%v['R ~hJa3շYR'Ity1>)wら':W+ ,4qhp+EK%d_h! S<^P@@|Z~)Y?y%;#]Nk8.e X+hN!P)7v|[&hwqq 5eN\Z.G5I "C@!V<'xት}|4asA/g}WR 7؍_;cJ|DևY +|w<<(̸3<>Ƕ! S-IB(Al\' F!\d!$81B+o_[vz@̢eGm%>7e1a.6B(8bl u!g59ط/c_'?\JiQUY\5)zeMvZ(=q&H:;ξs| &{!&HQ%! S"#We,ɴ4Oں@ۊhB<1DymaIYe.tkR 7`n#{oy=Dޝ kOu4д ۂ"+eҬt\s&h P=*Uk_ONiR'39co:1현UU(=ΖGu泤[1Հ 3h,]sP'a'/ɏ7>"nu՝K[71b&UJ= nV%ǰ%13V;:Dyȷo09Q|b|VƆLSOlyw\К<,Qe,2y1!#FK ąԧg # 1T>N :Pݔ( 0X!{4_ʱlihH[Xb7^^ &+3tbNjPeF{.)VkycTZ|ZU]@~xGD$>! SlTSj A3[?&dﳜ}鮊ZkcRvA6[eϕGt&d ԴD'E\`uMU97f?O7C4J@UlH { |/݋fdGT8w)ִt0*vOaOL}&}hB w1\ &3IF᪶ŀb{|{EQ QSr)<‚[O RNrxVtoNb@G%L7y꿱MƝb0(! PX-N,7h#W"(7Z]4'[UFp\dkjpȼN! Sڛ P8Lм*W12_ Ȭ[t1mlF0YiN[8p% IUs}sZeX:RLN!)Q Tk0eNdEmYE, 1yw3²fZQ`l,#R{ G-;(-RHĽ 璛tŗ%N}'TaQHkR 7^2A '20-?%9 E8{maoÉ!`l!j%^{UK ~?@4&U!FJ=.6: rۿ]{)MUdE \;+=pblG82'?GO(b O瑎~ yRN Zs0y|m@eqҰm6L''=e-.$K1MmP(BjSߟV0G4%&^HI˥6ς3z^')`TߞJ{_]U f~LiYߕuǻ#ͩjɭ_f~>sGoWZj[kg䇡Ay(yb΄A@'QA#D Q*@@K=c,|DS0|l\W+Box{d}gsxAcð?oV0UK`Q#TV3oD|p'&Oyϧ?2bYöT6"L | q\؀ <<A`'WD:;F_>#G2˩2|TްQb_pzqPA'\ٚ0vS: L;~KK\huX1nxLYy/S>g aq:p ߢQ+ ͏:96>{_u|)dE͉iR(90@@@ô|A?d)|-|` j /7żj_}{ƞ$A'EBЦ7zmN#9/d%Bx~#P Kl J¯1 0oxS)5q& 5uf dԘ )ii  \I"N*ezff_/'<ܕw{fF}0eL'jۀA'?e16 -?)xT%| D) [{mg%Q{IJ`HW& FBHnZ9[:ɗeQ*3?7'&V+>ܲDbKQ"r~̵9tfPX t#(q-T>jن4 A 'L.?<+!7>B_Fe}DyJw3b0^4VRr yٰ\g=ȹML}P(NLEgҟ5`)О|V_+'1T($;Kr #c$ xoę/؁v5xPA@'`>|$ӟ'G.ONŽy 8nD7)nA`'tK!EzR Hx/) "YW\_/s 6H+k'6x B0pJpJƇxfνܦa90(#Ь a`Ǭ#a,*pw?0'$#/ <WOljyF<L~L 9jۀ!0eE [!&8 Ȅ}}}}}}8HEdI}‡0 w,Ls>Od"w8+gx)rrrrru_0l\s,Ÿ/`3Jk΄y3 ؠp a@>@8D 6a|RLҧ ]:~G%Mߜ(#-TV3όOoFH1ᵹo̲xH>n7qs95Tǧ>Ec6Y嗢`~@pẁ 8n^$*p8F@U}CdR ^`;Gf˒ >h (>[ ǫqL˜E" I(7 Nfoβ*~bӛ0p5dzCnh.2wSgE\nT|*4KC vyFDR?8 y '<PQ5a^jc-EJ905ʤp+#]CMM_S_J[kktݒm\\c$P?0OJc)O0ZpɑR# }O o%u}h(g LeFqV&PS2mm?]u]u]u]u]ueeVU]u]=u]u]u]u]u]u]u]u]uH{뮸Z^뮺뮺뮺뮺뮺뮺뮺7S S뮺뮺뮺뮺뮺뮺뮺뮺++뮺뮺뮺뮺뮺뮺뮺뮺뮺$mWQ늍]u]u]u]u]u]u]u]uxaAX MC&o),~h=]uW]u]u]u]u]u]u]u]Hy,d$Ce0xB<<66,!eٌwzS+&﮺뮺뮺뮺뮺뮺뮺뮺뮺뮺륮뮺뮺뮺뮺뮺뮺뮺뮺뮺 a뮸fߞBp+6!bsc-O}},8࠱Mh"Y]|Yˊ,.6 o`9$QB?7£//!Rp`]jm{r5DP v=ޯ -B?! A'] 뮺뮞!8'7P Ŭ(Շ$00X+2 JK8{6D00/DtPnC"a¸3 n*a~D;j _.@* (׿$:܊b0h3BLKߋ3<_x &I`ToAxSː ` Xe!wpJpRRQU'B AGX~ $a aWoƩh(aB | d}Ohi@Co4?w(|;52Q' \ @[lFEؿdxlooOc91m<g4_CY1P=/:(x $HuU V5 Bm2_/5u f4;MI;~Й%RkGG̉dal1J֐1>M?p{UJp@p$̰nj]Zcv1xV:3"gm; Fs\3xYem u x9 .n U+C|;R̡?XurHEz2?VɠT" ZuN\"N$j{G%G+LnT __ .fpzwѿ5F@:b%"$xx~<?OKCWt`n0 ; ֟au}e?}u\Y뮺vW]u]u]u]u\t׿C>.ᄏo\,뮺뮺뮺뮺:+/]u]ue%MuX]u]q7]u]u]u]u]x`:y"̠q^ H?C"0koS@$P, LCBQE., h7OGdq 8G;[Y0Nn@Y0p=0&`9۠KZhTwb3hnf$sd2q؏4 9Oʇ<5sU\㏄BjU@Y(==>?TD%&|@dxHZ0`/LN *U>ۂ.`(BUx& ̭j~8xQ:~SBQ@ H jh&<W>~?Z!J ̌EQTn!DỷooOEa{Rh"% 2&#}_@|7+}q d&3B\]N_?%[cp˅+]T @-2~D3ÇGPX3$fR6W T3QqLxC#6YC>f : @޹R;ˊKo>2hݗ5-`W)cSaXfi\14$*;X)gUa"ۂx bL j ֊hKaQB1dH,p9Aح{D3R0x _uh` a@ P|+ǐ84Qi+i`1^% P;d0Toh^z80SNaڸ+ IE1ix XAk,!מ&s@^HQ5+-@6E4+ښP %鄬 [難%[d/=hIH b-1ApqEdI;)!0 p}ϑWIG9[@d71h7 |'m('v1>j.EL?s߭M H>l{Bb@WIVnDɶS2+*cvy^~p 44&+54+`06N DRTSAWF0 Zp3U3ra KECU# h+r&=zA %>pnpxxe$U_lA4䚛kCPaHђh]]3!%/  Dz?n v`'HOp^@E $!Z]4lEx.TEE%m/ r+iUܲdLjB ;<VR[E% Ώ8 !0u4F&Ak0@>tV6@8uF)7Ͼ6.Պn!5bcd*mGk[PƫM*X^~n ^ YV|كcSH }xYHo䤢!h@_+OR cF!!pA! {Z8J$ځ _S fM+ C E?@!Xb\~׍ ie(,k Lcr i zÕ3rhpGer/Zy0{wF!}Jdg!߀Bd0$]sG׊!֌A 4x?83?~_~!SpXY+i1 w=~gD {I BOK; 0#op`<(bؾ6ppK/sL?l 6B#f $^6PL8/' W~U>Xh9QqV.b$dB G;` 0MVud0CFP(MjJE\Uᐫv7Π j٦LEC `?0Th 9^c.Q|0"V>;@A\Ϡ3J!OwM &=IZH];;>~mƀvYSG >/jPZ2*P!h'B< ?' c#r>@s0a:-j2;DT &H`W'u dH frLH #[>o&`i~PV[ 9P )opрxE_MpW\<9֭fQ1+eKWL1sp_k뗹(# @,tA%|+_#"cYg둫ENqfUzV~AyK1y#{Y%cbpO=B1;wwAr.05pxIO|ghY&$zθd/9<O&,%x;Wa9gpK1 /W@r>ɐ#a^H0KfZ{Q֏1iS ź|^H4[{uynՀV"&^?F dc~;{`^7RӀع,nB)2D>D \WŊ?=pJk:(RD>  8*iݷGݘ:b}` q1Ot-Q,F0W!@ XMȓ \ ܅o úb-rIp#!؀2 E?# ¥ ]E} ^Ј2 &Gj*# "Ip6" d`+1~P>F.\4`"I uA%a0`'egpgR+9şɇ6!|Dy'uр*R H/6 *s 7 N-!}0!t@:0Q[\ڃ4Tb =uEfwOjiC\3쁸%_">a DL} ק:8 p/Bnl0*;W터TCZ K\"ђð&r(@(7W`D| TV迲{s6(=AfZ~}wm$i&`b)M;pt 0lg;$NgFؕ6!&u#|'*p=k?VioVTuAjlp O4qVv7 6 l)T(=]e6Z 5 3 ctS {'8B3"5Čìb X E#Rh01B`tʗK'n'EخeQT q2*+U`8RCl/k(gmDϟGEOs mQ uEЄY<1r!.0C? }1gR^Oڰ`7;[ٕ2Q?_PX!6¥[Fp,T+wlhx 6Ѻ8"%@l F|o@`(Eğn  }̻xqXA9)=0@ib 9wv]5aԄ o3P2G֑|8~ҌUA<0H $Oȑ[dO ^tFZ^_*3ܝ]u]yMKBhgaQ%Jg.3F`Pea^k@tU J|>*>EkWBً+$gQܱJ?K*U.XHúN|Hv"RF~Ӕ]J ()QE6]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u\W^! S\Da%T QC0Eዬ#yHEKn B<'RyɰUK D}7(i(' UsּK-3';o  H@.Pgu$YLQgvKE>k;/IPV UqS e+d RڭxiBrɬsfbAUdtpnw<R,9isÞnyAjl107mcWBgF:|YXFVPNhzwv4 @]f(|]#̐')i6R4RXWj}oBHaki$(O]uPN1re ~! S>fX/ dt\gm?+s> r:<іzBL?ĤD>p QWU! \QQ\YX b3ItZD`kP c}Q( @{͆uSc6'=l?+{i:L׏b5 410hAl6qFTgxRČ}CHg#E:9ݏbQ鲨De,5#$IQoBlIr@NZn2 HpȭC! S`(#M 7@,*̗(s05Nۼi,˧ Zۿ@yK^4ˈ.yC`08!5-JdcuO;*RThYzHO鱳gV{ Hpzyan֐t |1CK6}4eF:J^oaKj nwx @;#5tVJ(H\4|ꎤ)Z)h`~ ,}քSnn!JmM>2! S#!(JVe BЗo{pYJXYѾD.e`zc+h5qw2=`H;"=2n21#$/6IRv"PAܱ;jJ-ڑM+`!0m0,%6^ASikd l f.O ˝ c`dJ~rEqrcʀ1 RANx}(~S901#-cT NqiBr Ĥcl=xto}! S, D'U~]`& @(6ѯe}FWHϲpZDWC>X~c t<sR22 ԫ!j_Rd5ԨtΓ^$d%ŮY{,7has+T@$ތ|akAXXE%Ch {p$9w )$hV^'$W`):3‘dzr0=uwfto̘!! S(Hل` ,Ũ(QAeۧ\Be .So##2Nj aJapH 3A0AšgeF!~R/F偆F.ٗZU%Jc˜ҫi'S=Yt$l $VSV *K(4NBf cqDf7k-)RES#*+[#Z 5鄟?5v(wcx9ͶWɡ#$! SM-EGG-ZYN+G"w!6|~.:pes &'xwΘ'B[&'ɀ7smjgx *&,IRt3W](VHN8.t6Fyezͼ ;h7N:tw'V= B@v@`~)U--*忰ń=fь2i:tk\R`Z)%^(/ BHJ9I&KlOWe !*;ڶ pdc]! SMFYM[^ZŪ{tF&õϕdƓ/j1ğӛ(]׋qw;4ZDYfŒL7lŖS 5$aD'5s_w| 5g"L()s(uBRɓU]ϦsqpP .66{@ M&1;l I7wP .!)(yY^Hij+R4@Q]j탨J4-їulŇp1ΗV$! SU,ܜW,X9T5P*beG #JN3%+"0k7Ybk[9sRo8),12TJPȢ B@B69 r+[ AZ2"3- JE ~[oafؾtϑL0U).EIԥ +֨jVAJ]iѪ,T:! S= $ =r0ue=5Ҭ~PFJmqO8hnwsNd3 {2N[IdVD36An;\ #'t>D%TipIF 5hCXo P=`MbXixi) _Ӂ}˲m qTዖt,J^Zq#kjrp?@%MZ\UF! S%!  Tz`,,铣!;FYjev֬> b& :) 0Hx$(ձ'5vWJN wj7 kB#4šˣbu jZ8'f}Ybܣ*RJw >JnKʧ0 l ih  fۿT U~ UE8zQk[M y޼"THFS@Ʒ7=: f9F^'u;y_;~q&Q?BnZ7DKYiZ9T[>1SfI0`PŁ,Aߏ:uFrv䛨Qј=6WIe JTyLIRsPLMWx6/vy$%(XE'|O>'|O>';=Q ?K V`襠 AQMx,t p+ P<%Eݫ@t4ݓ,5/px M& Y`e@g<134@EoiR?2&T}$ 3ݞ'U>G /epRB=l&`1*4֒M:I.ChM}x)æ\7_4n >O}fUQ\; my7@>-θVO??2@B Z(SL+u(怇d<ɦu8%;G8`K̀%]Qr›3omM58'B;grL~|uU)| "<??OOjs j|Y_6=,.д65LG[a{I!̀` 'OAd 6<sin洛C?'>+($iNOsxUy|k VxgLy0ptȇxTa8 #~a%i娷ػl%qL(~h?NJ°:<\Qh?pt8Sd(oUɀ Q30z`FcXU&k5o}}Z:ɀ0A90`k>8'oq|_?s@Gɋ#`A@'wZLt[oX3/iD@yetL<!(DIhS K怇l_y8M:7"MsA`'w^X3&q hy,(x@lGC*Z#)# OyL Dx-xПʫXOL Ally4BFCau߉uu!I%(d`Lu3f:t932dqet\A'wZ| Mo@ *a̧De o4?Or*d֙%x@@ {BD`M?  H{M0‡q3|A{Cv LmqkLc@3n+lAUZ * ;i3? A ^#9( <''bYS`' O?l6LT& ͚6"p!_?]BA'wZނWxM\t +}Gg0,VXmqJ?*<ŭfɃG@!CWlLq8d0{%2P*. Od#!L} O 3_~!9 -wuV7aB)wC/2j*4`A'w^ l( d2~"%5Ae,_u&\^#~p-X ؊b`&O ۊ`{wf쿾uEA7Ô'!H3aL?b$8w57i "j~U~yx:qVFQYw`A'wZxIk(!|{w~͐2|8wxf`3d3`fK㩊ęL_s1?9K°a <x(Q6:fع|} أ t̤Kf?f?bV>V%bC^p< 癹$8-sѵ0?!9|6H €;bA"IB^@b R~.A`'$?1`EAHvXM) DwB*`?ƌ~t s9頋l.;3+H|tyGG~'p?jDF7>& |9vS28ɀA'% G"\<"ao+1mM 8@,l͊x€h²`rre;h;00|N?o]W_Erv&!jTņCCrX*D2]X@Q Tbl몊[dS&"A1"63I[wS}AO/jM/oyͦ3t q9/eu5qD5!eŧС>4ݨ'~O=K$zts,&o8a{>N$4F7U$ Y [ǭ֢]dGQehSY10PZ߂'un1L8ke\u]*+YY7%Y Є!TĢ,*!7ī%] FjU[,+t/b{ˮKpr[p?sG 47^dK\wR_#LJC?'%J*2I>d-dDt>{ZWdT̈́9v`.3GZ}4$&JvSVXykq۠H<|P9!Tl:B qmJVRYA/IÆ뫺Ne.;R۬NP(\P-!=QGdd4QɅT ]jIayN52s5!TE aȡ]߽EB!H U?58utĻ2kRqʏȭOio09L,8&^Q˹QR9mMp?I,xxyT53Fko\ԳsD<,7B 8ERHf2nqgn횃>4Y59Q)%U&M2κ'پVϮc9d@dbU҆6+q4Npe '"h,j@P!TMbA$%DY ZڸO0b 2 z)|rf QImZyUYO\Ob5K4ԙQ;Rhb~XkBt'om64aak\,ef;U>\~m?}ڌ:@w}(EKe1f]*t*Ky)G6fjڸ+  aѻnzEfa2W̊Nb 0 DL2s!T5C0B l P0 *j}F1Y݋8i++ xM# @FMu}Bf *fgRg* abs:*51kJd7Z N8!UQs? [w2۰ѴmsѼl$5%kj3]K~-̧kc[+  ׎"X , x4nmŭGxTҭ)PãX(.h8 F@5Ltp|9!Sf8 V]-.2bY11Ȋ* "6}X㉺AVB%tC2=r;0YbX61õ(nH{lDM%RFYaEi CuslTp;Qti XYaa.΁+ 3jMnZA+P`k AƢpO ^9SEA6 >Ğ rR1eH @A@3ʨp}= q$ixߎޝ(2-@m%`0%Dp:?! SCf!@R NZJOY xm\}UYC\NjթN06ж`B R(s`IS!rLs XIWdC4'$qѳRK]BDԐiU'BC[b4$ mRHB'[M```EU7ulP I핝H[SFYr:eNTJ 6 !0LBl([IvYғx4`N/-VR<'^ ^' B"7{0! S͉d"jX@JTXYSEXR(`+*$;a.G[3@/Ω3rP5!bGH)D9bSI؀PyFJ^HLSR stQ0nO| aUW{xպ+3Ψw."BA,d޼'56)K9"U͖ ehjh$f`0Ylhwl~V1+3Sb $*B.dkįP! S}<@;$r. )t- 'Ub`#Zgiu)#Z ]|_}7KuN ΍i(T ͖qBfő=Ga9SYr|Y:AoO }y7.ősWsko&,w? ѓu&VL Tw+ 1jc/bkªP hq*3Dܢ'wqp!ţO6P ~iv aI(@5 J Ԛ:i߶F hk s|gO! S}$E1P@&\PTR[@pPY;χ(6<2=J r.};TW~T:(^e bJsC:@x>I}@޺Qr8pv~gjeSt-Jr7O-u U ^Q\rЃ; RM14{sJ)+}@A@N#Hn=4.[$hqyo/_Nn+0?6TI@e!\*DK;Zb\Y8m\[:+.r! SmK@ЂU9ŁlH8"w`\*iHUMynjfBXZw~,ZO{=nN]~TqP/1Xaj kԬZC S|bQ{D٘X'w0'ow1\[25J.T\t1P8e\ `- KI:!/`Ĵfҹ9'ƺN{vbfrAAM͟)ں [aV]y~bfw/1 6 B4`%{2( ;ɧt_@@1r2>` BA΀pCeܵ?spts;hpSs q2&p'/>w@?Y/Jer! Sy#!@~pn 'ߥ }1 ALHS 8Ѷ{Iz/+n;:Bpk;~vcwմ冟fG_ڲ\}tum|a R JO%wxMp7 N:6 1_`û>fiD 9c x8S]vobp %,1b7-DZcj. WvAF8 Zwj!?`X>Ԙ=qaaY~@ehdʑC /;Ƽ>{uLΎ5ERIqADe$#IOxFWz>IMKi5)m%!.vw6wk_Kh_F`7 D! SeF#1R !T*bb@iJCM ;;7v FEɺT2W /P-(gTdzcy&3ՆݔxU)$y<&dP+y'jh+H!b @<7fNa/! Sņ fd*q*B u瑼HPvux(Bf÷MV9v,BRRXuX9 ָ%$ԃDfnH)QqleY֮gen44 ~Nh{Ъ|t̄Uwz=c)ot\u'@ MsDcp :J0`0 EOo;^="qy A)<ۢ2qݢBbķ!`zW#% V%LP[z>! S cx7Х(P-()RS-UN}*Vb Lc1Poy9ǵޡ>T :v=WN:i| k㼏7GyG_<&qW)Ri1s)+ N.ұ@Z86 , >i#9yR`.rP''r!HP#e $~ P mViFZ`G*̝a&kLA([JP SDC"@w4̷'ٝ~ܿ)TR/n8"Vd @_q YLalvGn(e;A"v4 ;)'+rkq\͐gDm*'Q4i@*2@$qYJq=NQ%36ܕc:A'$LJ,KDxXנ~j#|3\!w \55 2  px@AO5ǀ@%iY`2Ai-&ln뫤 ILĐZd0JC+( Q6 Օe1C' =cEz+Ц,T9jˬ_0p:Mga͡?6@?= 7 K;5DWߣKYGdm*}ǯ hpJhla= يR &Yd@*DxF)c MV"AkQ~f ֪.hN ^b Pb, a _H.'1~`f&<9b|F%bP$d#<%Wi(_ å p z(tJAHa-~_??<??#?????:?????D@dl,x a>/@9`T |<Ik^K62UvS=wnqDi6w}J%*iK\޳wgL[~ N{ 7[}VB.,PZwrZ:A]'`.өO `#z߻^qpwJvޤ [wx /vBtߟo$t4@%z{_|HoRoF!jSozQSFĻ_&Ҷ A'PxWP, "`{0-G"0mp^GY17\=R RR,y29p8z~G @PqP1?ƨ68c?:n.OSrp [mʸ:j\`3by.C`(q|w ]3 K.#8G͋aZ![ 0w1?7 瑌c#B  ѹXu2z`$qfɒ;u3zO'\WL4vnn\Wnݫ5'Z$̪5]m>i{v //7(h?m l AmT)x[x<mXk.9C|W %7vO!NjƆ'< QAr/A'W1H%`hE4낐7HLiKP_ { "!0Zs8( 6L/|lq!L&9ƩCLė21r\G&ewwHLdPSc-?b. E|MY9?'<_?o m-1pQFLx23߸%33O΢jA 'J" iˌڍ>a0S=L"i Zह)hA2#Y cM o 1/k!^&nhY~r? @f -t?˙yh@_ $m zاb5¼y3 O8o|Bs~ # 1(i3%ܴ{7kg3A@'7}j|8>ANO|2}’<r_qNzP=~"m<_D.)͌%061fO}c O 9?wx#?MT7;^HH(52dگ r\ y9M噎|~A`'w^||'uI{%P $Z›M?n# Vm>lzCL+)"yf09=0.4ntazGӧπ 'p便GQ01fB\#bxF"g ( A'wZ( -\xO:cx%WvM %L;%I)k6>>ʟ\Z/fOLYPՇMޞfL up\zىYoG ?B<#/ufrre޼K6 KzA'/wס< EwwMHSe-f.))! d4CY G"6$+-K22n |wN68;ɓ2LA)AADQH0C7z KGG?{~9nExOg?p.?@5bd7X34%'rZcpG_ܳgwA'wZ </R!ֵy _9pB>sMbR ϽD,͈, f#bL'h!gA+-jLʾU#yXZt51Pcp!C#=bxNoJNC w/ߤ;C|~U?3!k#!+oy1M, N oc͸NAs)>o co{ ǽը%Q~ѠeQ Ud~//g&Z39/38@9._P1+p+A C3( b 9-ܰCP|NkSp? -:?wRHvNS+o9_c崸 ! S݅>eT!՟[PLWq?4eỦR3Fs UGZʟ$ 0SZBSdW|BUPX:C~l~SV16QCXŽ98Q73s{r5>$Q䠨 UP l. yo"q%R:T"W2CxCT ?u"otT T  )ިLH88WIY3%Wi,W|]WqؤCđ㐝ԜA'v _WC40ʔJeaN{(.$,P^ j^ё(t{ȃVoSOU@ވ?k0(`wa`PZ'= qɒ)L=2-U|zD&Xɮ.YȂX Wi!9-J#E͖[T9! SeH2D ՒPR *`8h;& cz: .2d^+T/u|J"#U>- Cʠ>q6~) `B܀`_+o)&g;NU < SERiؖcCxLlhkdEcitAo;1Nܘ2-y2BA+)AspR‚82 לܥt;2\fk BMYNTbw! S>6@ȒZIv11޿L K7ǿ*h.VNw`gcfdq3TƼ!AKtEt/f~9`I)RR,ַfAyC)=J?ᔞ,:*|=.hhda09:}O|蔁>YJҿìO) ^l+PU44nNՒ]d;VRe-)VzvZ~^oz,C! S"DD0P܃fY@. Ajc<9^]<]6pI\Sx:qS-xL W^ƹNuHB e7u'mC/wQiN{w NYKV`hE`_cGyyw%l{dl%a~pXĀOx>O~!WS5t?w{U!lTU r`^anJA3ZO-#>-Y9ؤ7Ei 휊%#jˌI;vfI:l?ǚ;8Ћ4ah.q ^pdGrW! SYV q0 wK1-ȃw*l,L 0X@kv3Qv1[{{]gz?NLHPB"psVfy_֚4\@ ;'1gM %X2ٯ;՘b69v! S# HedP@2Z=j4s- dKa \1lFX+PTgBuFd|HSgC\L'bU–"}n\lu/LÝ8QGw(a5R@ㄌ|pҧA$O1H@2^7oq%R2_/L|4YSL* eI‪iR"(PAT;Ƀh:L+0q?! S}RQbGiʜseK7 ozyresӵ3cj/4jX h,IF&d_k;e'k-IV.)#0Fü*7*! Su hJse`P,%ȴ:㫰lX<2mT1Ĉ9z΂'D Mw-KHbRaBn\; 'IR8Jr+Fg<tjl T1v3y9M'%ğ #we6ukҗUE&ȃ`ʪ7{r_%(7AZ3hXB5Aҍ/l:Y,Vs᜕V$OE EPI5l! SUU@B(+.ne:zBA]Sх7RP19[ݜ0.Lvi; ɀ+Vb-?: #SaTD -)JU 4sB7uPN4dEj"7z`_|suK Zn)T M/+NΫ} SSSwyS A+W(d@9Ijj2Yċ(JЄFU4!das^Toы|,e L! SU Dzaٻᛋ+=i{ Mm2*ȧez/FGT/7t:#+ᫎ.fxVI]ȯAX"fYyrAw[寷՗^P㯉7Mȼϲ{5Ţۃ<,X*l }GQG>w W&)Q:R GԂc2Ue! SE(lHNq׳4vš7$?95thĻ!bQs+fKj= )~񟵤ÆدNqFZ@]l+L莚֖I$0bݙ!}ZIk-;Q7<.QD1 -%`f̀@[,R i}Ƌ} ̳JCQ_3dXjp(B81JTXϦ) 4M#ѝ 8rPGb%(=V@ J7oZ|Dqt0*J*)M<@ \Ӽְz;M*ScHMrUr J f_U,! S=2!J`u NC42 %7/_6pۙ…'ĿAG"J~q 17%Ȁ,V)vp\0.Ϟ5 !' 4I(Ҥxm trv|umm48SKh4~cڃl>Y09!*SM+!Ey[w[j#*&${PgU]k9-,*]n mJذAMf wx(.;Kpf 5( Н,ZJ]J!H庮@Ć8&]gS=؅`>U?ZI H!6lA-lK4' &L@A` zy1 {L9AFMkh{%w z\8  R}{JFKxǒ$ X&/:o{XKA 'ɀ!ֹq,"xn1_P7rɆx,H ۩.ۀA@''|O>'|O>'|O>'.@&x?Xv V`ٖ_W83 R\IœV |elQ€Ϸ\ᔧ=ZNr?Px# pqu(`x\`(<:&=~$e"֫{ F0 up{ay(pqQ|"p q4d,J6.zgJ<з ??Q(PU@tiNSV̧)6ohm>'kI>_]'>+(Ҿ3ϟ#3dm2Qf HgMLJe1TaNmx@~'#rwr!wB:y,Ek>~ DiAZA k$Q\Fpk7^S9:^DeCl5~'3= A`'o'*_Ǎp%P2@CȈ,ɇ%eKBQei%ƞqH3@C = =g]Q#x Ŋ~Aj3X,wwt7PedS\$q҃7͏ 5t*Q"[ !O# cXV*Ar5^>3T1"t<}k V%cc +g.[cT%wF4 eQ$>M JI|A'`0`Clާߪ4ϓ@C ~{ٱJ",##e T,|DS;-͸wixfB.,eJ~'JNu!0ž+x)rn?B:?IOɎ}{[*2 ׀A'LaAb5dW z:a`k3uZ˟MqhA!w(%L`x O --3&G̰IaM˽,*cæE4'2LgQLwp!x0#GK1cJ@¹bPu}kj&A'+j04r !0Ʃ?Ö^>Dae#?w48[s'!s#(1jGX%# <x+|TW6Oz5!N `W}POQ2kOw+U:pjsAqq:LF ~ g$S%3dSak}Lk͸re1``oZl;mAZ 8GЏxt}1'Zg&d姯ﻵ瓻~*`Fe/wFPu{{wa;(7jbgׅ1Çki6ǬE3u:x1aqq.fϒ2 %hR/|jh9!ޯF/w.4/4L&*Z}\<٥MqUM|NIrc?J:aVLr\-PN@ 2ݬ!._ >.z9i7_̔ltA'`@Y "OCʩ!P ,GDx/ ԇ+,y=ׂS~w] o9ߺ&6L /N68*}=IV?ɉ.ߛTx1p83(-0dOc_0Υr3"Kt7zM;˫GA|Fdd3`I ˣNb(s@ND"eA'g0e#"PB0 K D<"%Li% gK{a>48%oB8&QG@8H ؉x9.;Nǀ͈C10iDtϥ:B]) |<SsW1cjơ` N|0>S,Ln Uy]&/؞HFfTR*|cx;)דCf W0&B _ao8 =?Gڵ&6^8]O VF6 _/)/:ԄpC~ $W^t}}uA~fLA3A@' 1]9hR@>&z #k͂x NXZrGaD} ؋=)(V! hYjۨyzmkM0,ڴEQ"SW`@'  ?f8A`'Q)2y[!t^%H=pT$"', \x3b*#1L늴ۀ͚O !@O{K> 1PE7JXJDՈ {vG+*یV}&4c Pfq!%ʴur Bs;guu<5$#wKy<VfuW282 + HK}&AB>!TU@h" F+[4%XDUX- JENnwE R'j}O/ӈxd͒X/Mh$Q[(^ @ ،L^z¾{vjQUMlM42CPޓaZSi}#XiI:\M0F%+4Hqk =oy. [N,x8($T[K ʝj=<ൻfl !T: 1D@UW;f*ZV%2YaYbɱڴ70'TK u,X L*J l)))}%Q*|2B0؛.+㒙,.:M:}I8a4&^eM|ʓ:0ձoﶣ̆e~ t~Ů  hTYš E0,'I#NB:(7bTJ>󤊥IGC s!TmN¡0@ Lt$"-+@;8fӍV^ah Sc)tzAT9f}3]/UJteaF[{o8'Ț~2,Zݰԙ2PKZ-YcM , 8{햹@;hKH~`LI5.P%ELrɮ}γQo iOhgp(+1NOcu kPjo&6!TUA0DP j7T-B1jd. Z{ךX,n+LOh 4i,T&JX]Tޘ+e,,yj+o]8IGԟje5JKoV,%:UjnJBԠi`ėKEzs!^ , rY>7}ܰWri].?S6WK졶q2(!T5aPXh纩*2 *(kHTɒFTZG,X 7P^y42E[Tv|7teĝ`bZ!:NjplMhS b^+{osJveg-װ^BB2vXHi뙃9>59 @tQJx@P!T%Ȁ, 4 ]6H!AL}g'=䦊OVL`*ELa O&JQV׬E&@4F~AwfqmB ~lQ8׋1ҘUN& uH5g R( S8`5E'͵݀0#-tJ}S-⏅x@D1a@@$ljFUA Q  B d Dzܸ ϛ@x!S0@Ba(K\ϧ4Tf*epx^`* _2-a:/9 ? ~le PNO#b}hJz"Er8!-% npipZtFSB>K5;e*ֱD?aW:0_]&?>hQ<)Xvwk\h II\CMv@ۨd5JĪj>2DZE2csW_)*b+ 3=Ecm,⠠[E弬Hb|JǺM.nwnsc n2L`!PB `lH1J1a|ɎQY>s n)3uKi2.X^T!SʼnjK HVK)l,]p bɞ= 3PsJM|TtTRXsV$ gU[+5GB825=S)`7 3ss Brv!%jP F7Aѭ^ʲuɬ{o5m2bC$C?10J;G(+%E{X4` m~~+ -]Ps:KTHjrF( 2ɋ Xx 'AOn Z]/ b(mdR"A{7|DVG4I7˼\''Vx#Q| vhճ= !}eRmXj{ Ubb1b5-WT,ףL4H(wVi( n@a(k*`'@Rt8ԍe SgSXh*H!fJLpbj;[ax-q! Sb LLKKebxlVúf,$'wikP;|0 3L\($(0- ƒt΀ buvnUHvw%ڧg9: ›\1e`}؁Z 2˼UV0)|ؒF{gYV0%^j&rxƀߴ;ꌜKQ-@003 dB n5-TrSBZpap ¢t+pFڭнU)UmF tEHg;! S`X *lGru{_ue Kg/p&s-4 |_>C~OfwҨEEwT*D>^ 5}!9?"rEI_ ɻN> K&H |V\Q;8] 7P κJ!UP|eTX A` !]C2,/(:8H T6P! Sa 4˪VdTb2Q '1x"l"~Y =V3-!sH(uQ[WChWH4(=4 PjI hIK̃65]٥J2E4}aV_ ]67",bْ-,gFx#3ry4L:AH`ܢL]q `|ZX:r9' O -%_}5Pxezb# p d H YVeR1U f^_Z!4=D# @?B! SM ("(xȨPh)*3Ef(l3r(k|L,@ 4u碫XnNEdüC7݂Y>B93!{%x,aASߓ P` cN:<&+]` u`{F5؍Znrmf>" Gl'P<}96T9%D].N ׽ zd}0\c楙?>! SS(*P35 YiF DrG]r\ SĝAatbe>o}T:zAn WjJQU򪂿'.>س __{no1 |Kr9M ' 5*PLwGulzID1]@bx /Jz4%~puM_(:y\ Sb]yD?ÇV]ivZ,'3%Y/5Tn};ƽۇ(gdb#;AJo{!fXckgu1M 0{h4,9=M ՜~t0HI%Q@j+.Ceo*_/ @Y5gKx]! S͆#m˜ t&N_\b\&(Q(::S "ΰZ,zgSc ZfWN8\RbSˬ@ !z! #ƛeR9Ϫ*vQ%a+RoS}/i<&KШZeECO*zn1%^QN#RРݲRg#V& Jw"'6%yڱsO5@w!brN+:kHb]I~uk`j, v(r%6wEl/DH 1^x28;jrrG{ hE=1}٬*RW:xr )Z[us'Y+ǭ5urӅPYdYO=^.A'A` z G|t,<&\GG!n;kWi]K ͈^0G8V&O{0#(8y~!*~ 3a ʽ`.!ɐbʩA'%2BKBIy7m~TA4U [6|@e a`hA@9@"@AN050S͏'fh\,2c/&;9̀ |!<>j + YRhz.|D. \%Sq Jo͸_: }"|B%$nHC3xՔ6)J _BGÄ&@D, RD#% thh̦zt= 7?TN6(EV Y6 O&KXyR7 T^$NQvBCd; Uc+o\}ꭽp 2Ok7j,dH_@N ?8W)NR?w͆pѨH."]f-oEq`ᄶ4^DORJB& F/G^O-`D8T?<-~PKeR_u^PKs.=z%XyŭUTLA'$8מd/`KDEqw|%Hd?szS'_J?+ QG&VH:OEȎH}q_z/Qu/"\벂VЧ[o%z@|h r9%oX?'$ğ6 榅"A 'W$wa(8R!K!!īE|$٬ݚOS `( 09R|YrR/C߉.hn_ 8x(>6s:s$+Dp >?ڏU؋aI̸CW|ZA@'=q\þJ04V4hSqu;y3q 3biif1™CW:q \d&xBȸ&?1$="rox'Iɜ6riv(Ÿg\@3`3"kq|$x` hA`'L.o Z G!@sY6?!4~#Ի(2Pxߛ 3n jv7@fN<2}CfqMC*U!>XDv#d L!z} s:GcSS/""| yMnJA'xy*.Gl f m&F=Z:/[|lt'i2 I1@ۓuJ|>xOmB;Ўs?MS~؉ˊ#b\d9$@{ MIP2"aj߸drS _N8 ՎA'T ϞB“i1F%j1A(N4m3O ,UCMs ,? M?ۖX81%cy y{nUrՍo3o]L>Ok ۀaT!?Ë&!ajy<}3ZhOËK-o*wBַ};e@>+(oJP"Qx#ؕ:_Gp:"+}ӦĹy`lw~E ;??k}{t tT'2t$s9(q'\IZ 4A$><ʁwz<|\3&}]UWVNZ\ADmɋC柮升YryQh8gg?|Wr*\B7ڮVAj  %6;qOM~[W\D+C=M;A'o{++e75 aI[MDlK[r@@LiiŸC_ KH@*Hl 2p&M`3c8䙇hY"v(y>ueN,V?ֵÐa#ֹ#Ho 1XW{n#1\qĔ%~*_A'|@7=_>1HNKߞo[18`OH()mm  ؂r wz\l F2.݌أU?G1۞`Ҙ?04#y$8(g7+X?ޟ t$x%l w6I/5WMA'`>|y.tAwЦtmmCJF pr%S5Ȅ)K?m9e-_ |:TV~]o آS7<w{(:PbI TC,>'b^.y‘ <֫Rk%s9R+raZ_ڽwf́kg/;/wXui:Յ4:dSC# -D}$ Ft|@ W}lY ~w&SFt2yyI(IHik 0"4pnl3te_ "TYHEqZ{ӝ`Es V&yЂB˰JEN_rv0ʍBy7%|*UKc3f<{<! Sͅ>5f5x~QXPz1i6Q̗`ׇ^ºQ%hMI~Z0OUS51"d/5fJoȗ*4Zå<0J*A/~o`I@^hW@s ]Yʊ9G`j@݉~A@B|N'_P3Z)KIH9_ }`2lɰI vk`5_~IL?! SVM@2td|/Y * lMn0y֪ћ0bLVCtLuߒz03u/0 Ozu[ Y4ѭ[% ~MXFSM7AoX7ʁ1brI~KD4VILXϚlBVG+M5RO:?+b14X5û(XW ,)̹(+ !;grTZ+l:\Ad* ؀8b [&$! SmB0L옉)xdGvC<@R69րpq8&pew@S 5#Rq Rp<H+ic<%V';R ru2B0z5`:rk¾^s*Gg'dDӜR/lǹ$"|1\1yX;飐ȥA!<HVUt5 y7)&AaYA(AB X(T$+ 0?_X(! Se"DF UF Apw@<)~ /yyi!EnMr)o(JǦ߽zɹnd5`~/@kL / TV@fYZk5zO!0@1 ].H`tXR_M1r+ڷkd/@%+CUjNcQM7Z2eX85YT)rJ Y֔I'ӡfxsY)%#KT6g:! S>saZ [#i)v vy;eTB>c N6 y~XeMo9p%ꗎ?k  oWS*#(9qɷtR^CB}G+\6)|K=no[z3R\qB87xi{S=33,7uWuѹ -ojF0 ?}wCaVpo *Q$! ~1ՄR-Qf{D! S}`#P B3Q$JShqIʷDuD.YKƥLF Oh6WG7BFDɒYgbzFF3p,e߬md3:wK! !tXg\_sJ +as^tcq1CfYJ<'K֬*ur+Z$VdĈN#yNgǎ0S/rUgi'iNRV0cI{K2Y+R휎p?FEg! SFQ%v 0@T.(bX7+4 Õ ,fgxsJC9qn~Htw酰4uRd%qWySC3]0:9;QmP5zcLk;u3uY.6,3AW.ʄ8TWrml)fUn*Vl,OzV( Ec1mU]SWqNo'@8B{< 7kނ7pLZLn QWz gjߥ(k|f8t+yJpzQ! S#Pad,ZMn{la4[Po"^U5#7ט3%(*3 _2M͂u=Ry- c:0P jR*7MM 5fگ*ɑbȪ*9\ :Wt<.^E?/G,ێ ixDiV'berZG;B%i]>iG7l4Gb/ev7>~ 0b{G[Yh e~p`ștUKPBry(s^$yq]>~v ,dQ Dcs&jbeYQ &$U*VsN7Qu-6CTa;v" ϔ' /x*u,3瓳Aڰn%XfMeSi! S) e7o 0(,(XF "6,A徟u7.9_s- j Q0:faۍ.(y#k2{'A>L :nQ{mQBc{ogp ;hm"2M:aS-'w-ۘ8QP(Rp@x , 'P>Iʯa1I(3= mQu# $׆(,) SJHzj9Le 9ޥܩ!dmI-kwL Y 9|ݦ .# %\G|:V}MՓl}ߥv [|3^fc Ъn бg>x (`P;4xxolZϟ NS+iY)ԗ@Vb׀N^90ݏcм@+\A e, ! SeV@BS0WYY`ݏK_t )U"JM-i%1_@GxS'&)0 B ڣTS-]f|ҰR%Gj D]$Te,РbѬz* NɎ\/7r>U ?̽ oҴ X1#6̪e`FFV5Pqn.) ̼@ 7O=uq:I.)k^vlPx癑ҷ""‰I1H/ xdם! SeEk(!K7CGn\ 44m*>"fdM`Mr V)9 5Ѿbru#tエN(g_knQxxծNG! S=Z0z=&0, e+ p1x6|^>g^iuT27G #R-/p|63CVͻ`K hF_")  fD;V(0 ;e1,5" ߕ} 1^8dNAFո/4YԈT)``(ҀlD|(#cjS#Uk-yB񤏭&VCU݃? S]Q'8LQ,ƨ.myy+(ۇ1Iz}HZ汥AmXh ,=#`;0L~l-! SR&#H`';ޠ#>WZ p$!Aг+qζ+Hܵ\:z]iBʖnfI%D>)(ۭgM-lhR1xtOb"3xE<b̂g͏/ v @B*uFt}aQMh x7"Rر2ɔ|U.y\!NFJ?t8/xT(0 xd_Rh1^! S)}@ *0x,)m܀*r۹̷9<|Q94&ya9w8u sA0><2y8a 2+A[yrp 9h2%m\?0 `@ B 6*vs[O[^-8!!S! RӿHR4OFX| n1`7>rc7R CG<~*fmN7zCQ D`Qg0a{dwG1:c5{d=cJx矶o CF!*SS;[jk y?+ǸhE =_( >/3zc7͂v&% W~ğ6PD:`}X5DžaĀΨZ[0~q48ƛmS`iKֿm9*mΌwoQ`@J<LX]4:CAe_)/_H{%KkVҤOA,Q +fa8o yg='F@ SΨl%/So^X?Wi'0#nUA 'tυ!.6 .r;ix3/$2&Z}4S.!&9l\T@>*Rf&zm,v3("'=kGPc?G~6~Q<{ Z9 ub ߊ䌃r@n(-/3&hQr4sA@'ɀӝg0#C%4F>#x T'Gb؁8BNB 6oOX9?iy˿?!A@5`k(b'|O>'|O>';vIwL񟁠 ;t-814IpD)JԬ0/Lhloǐ> sS>jw%GiT^AB80 L :`U<)@@.=7G-p (S/$$8n8\p;9(gDN HC 4 9s*}rH|g[сJ6 P|a48 ?ϴ!`P ,W.:+z@ad?h}@h[\y??Q(PVeBtQdel{|FR C`"K$GA#Mm|g?G/5HlnL=Ryć)@Imv߉.nE33<@?!=DQ; u GGxP|')ؘTއɏx c3Pt39?A'&]j +h" <:&<%>&D>hhC'y.4 Dx826 \ZdǓf`宑 :ôi1͎ 5{7 0pBZ%'aЏDG 0 ȶ2izg@ H}RFCY S!"i7&/$Vn߄N|hK%$J6"$1<3ca*$Qg̈́x\Gf (B"OG?PJ?Ϩ"<RS@3{w I`Di:Hk ،/!4A'oAOx^4#,5!"=ܴ)gɇ` I+/15kGS~@3`I.P5jx \lq̴LyKه0KyCpS?(OS ~ ;8y_*jm. Lt6#3$av;) рA 'g0 `!pD -@4FOdЪ"v'cbv'}0+Pυ>v!9)?pIxaKSx;ߠi ؈LyS9 A@'PRX20-M3DUxHD-wςcx Ǘ^2(3d0fLwyd POc*?tGϱOpJ?:OXK&Y`R7=LVڒ  ʢ@S*7>Rt^A`'\:XxG){hi\l凱%1'; =Cʁ@2fAQ<Ğ{<'03&>j<{)8PfY)c!ze =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr„ 2 #|6XD?}(ǧg5_|<)!`8#Vay:L걐O.( ,_lp&!EH ln`@$'!V:kr3R=Yc9lnq~}T]0< p;k+@`: Ǡ9oGken+^rtr X0}~iGj6"'pI 2v^G8( Zi-$;nϔ PsyA3|9N3MpHU/tTkw~RQYp[T>,7dZu{ ~Zv,Ċ#c[ɕ;f0's^ eh:HL۟Ow1}JH%Ty א [cw,u7PW; P?ȫR& ̣PA͋.y!+xB*B[6^1 xW_@&rpK$fJ6 kC(b!^C>뮺뮺뮺뮺뮻뮸뮿($JZl7v`s`#= e˜Xj31>q8:eSU;)x  P^wK7_1ĈQ'oȌ kPqq{ o≁~`((q0pt|:7wJ$~{~MY.52n򬂌r[rNAFovK뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺묘뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺 @plBAà) Y|ZZr;4/JáSE U`Ъ$6ˀx<8p vҒ? RfY?,)Q b)&%xKeI ><%B Ot)p  x=+{W*叭iiRҥ/*F=r2~8P'͐KX߀g*lL.$6"/GA4>ð}`]u]u]u]]w뮻ᄎᄏǏ1sd>HI 뮰 ]u]u]u]u]u]u]u]uԆ]u8tv?Yz뮺뮺뮺뮺뮺뮺뮺뮺멁u^LE(@Pܽpy хv° yd @ӊ+ACuo}cd3dat1-WP^z|Ti%/`qS<G@n@|{&ge]@ivshK1\LaTs2Bnc~6q3X8QpuUc@9ovDŽs0ˈ BX8&ݪ<࢜? H "釠 ~>uWg4W#[$>*t̨!mч|L|2xwosLAfe9CRr&hڠG=>"Yq0(C)c[v EHpkg ǤY7a)_C= "@*dE8V0! ~݀AT^Da]kT<%$J0AEIflwEdPHj+Ce@^!;Dzk282W!JlD_hk?ψkq#E(@!aDؔ!mxxސQh|J;20d7*0$A)/,D&ݨ @@`b.Y, 19[ '2K[ =8ĸzN @=A/ ) b6>@</z܄U0?Py чv y8d4!EaYh!m˗ɘ[֟٤AC2^ M$/]/~$KsIC];`E<90<8 @07 kPNJy[2E`d0=H93@8@!\@Cf7FQHb,l0"#ŠmЙͨ43@.AohTN1'%x.m7 AoYKoD %j3C:툐c[aXfi\!t,*^6CI: ɶ@L|Z|СP4'XLͩA4!zo6!g "(tY o/KmPL@.SvY#Jfƙ8*Gt dWw_ 0WUcs`@qp1(=G kj0,iVz%>y<1Dw.E!Xo1|'ǚd7%厳+^HQ:zZ":`PnқBLC+IM@ bT7 fub2.^h&#SLpOw|q hC(%+m"4Q%mhƄl|$QMgiTV MljQn *$37ΰfLx,HT;щ^fq=F@7H^ƣFC~`{pd]-ZIp`!ƺv1 n(1fߝmԬO67ô]!B7p}`<(c X.ɿAm,.A!^0p5A @4.rG!`h`L{Zh( v:#˸8X orK~ҷCFXhSW&U؞7<h n{y M6{XQҌd:Kvd.t8G:^({*HȐuikpA ΐ%c"whB2'頨Qɼ?D'OCa:9^Fzj!5a8uT H> " v=2fP¤ ^ {y).-ZAp=>m!d`9dV Yd}Y*5W`MO !/"c`f~RMN!9gKl^q?_Ep7 s">/. IL]Q@ e}AUA;{,υld!շ Ck&Gؘ0#/HS - H 40@8SExR33r>A i4*:Cs}0$0ioKT9ߍ4HN:-Ck: C_142009Ep~K4F45` Am>@_@D31~#k`z!^јMUgl l4Ҿ% (HJ*_c3ˑ֝l ہ<ZiO2iC[LcvŇ`xF{ГCc9kL C<{wj H53LA;L8N )Z9,Vpqtgh51&/?6w"o}GBSlY?@)\QiJdViAKL$5Br ægh Bi&ɶ.~w  k/^ r^X3њdc y $^.aFO(:BN_K~oU%R 0=7UMFŶH= DZ53KWX wM>E\U̝5qj`;^n21DFqC_l{)u/0$}.}Gt>D  |a Q |rAzir"''Zvo"N$GmmŘ)rRor@gː1ň }k0Өm) w/Ab̙!HNrZ %W?_¤Pz0uҎn?Yo Ts8 Sd5\\Γ ^lP0Z/n#=F6@GZTtueSl~z3Mf6 9{ JW2#z 1 Yg뙫eZ;*0#W AfARК|vH^wmP\OxIO|gϷ,R#a=2T<-_95ꨠ֞9gn";4nG֑FW-´|by7(ـ`-|=1m5 ×27 tZHVZ0< v+xIY{'@ФB-a9#~Af ƤZe +רFfwO8SI2)&1rҏM4d`WegEYX3bVGwE"^U[&w w&k6{ނgƘ*?ί ! X+%D0#/0@ Ȩ@8@2&@ XE5*/e@[Eo_qxd/}FX !;Ȃm0D&ofd Z"b!eD=7L0)8}Z&bx'_ 32 }$Ǭ9pN]_N{f_ O~LAP=;|@ʢDqcJM +rs@f%PL$*kSЋ'uw~wЈ>Ah|!rU{H#s/ ~9XSpSxrG#ҀB$U)KN J߸eRfh׾oMp җ0&_J(9?Ϻhx.{oTYhAfb'Mm$lEȟW;i< By E;u,>яwI z+C+-X atA ΁~fH&BmK0oab%[+0kM H-ZJq'~͙7}qK@-GA)iHza\p`\`C ^ݨ?E,ЂHSfWVli3+!ఇ>Li a>} [|3%OBТސӆmldˀ@NN뮺h𖅡VdS5~\5*K .( nk tU@7l7*U8!(}%l}qD+ m ;D©Q|n%Bdfj^M9 &)\v X( :Ʋl1ߘ%nrKBjULU^iFev'VC"RP͟3>$ !AH(ݺmk뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺+!L:RM$c@]M)c:m=BR.恧3#e &5@#QSޢC9 fɀ`l,x,Z--l"Vü%Y|@- L[&!-?-)bԒv Нǻ^kf|OblBR*ɮ]eZ7'#A7_F0;~Kb H`c Ƞ! 6.U,AJf΃@\Nml[( BXd˙m e?ڂ/?!LGNdJnWMLα;]BJ )l eM0gib^ndtl| ,lm,%l@RggM$Hc)0 ,.oųn`]qx>eļp\ Ϟ7!d1vaGKV2ۃf+f ,g\xc1S9Ө7>;m[g)K: =3W1,sosv,,st~xwf|BAV"+TM' 'p_ L$4LȐcCЄ4˫-Np!jT:ARX2,*씀I,沒3nK$KD%!+O(C )qhd*\P,`*vKCZ"R⾄ГoY.b JlO9Nif|޳k\K4I(D90<~16G~ds8{ eKj45vI K si U*FZSx!0hBBFúWhߊU߾ˈ*Κ5\knp§Tְ*b[J~0!@P!T=j""60vY V eR^g*UlT'ZUԦ5|?sm7ġ;n9%UcdqרS m X5PZL9 0 DZ|M5 SJ⒝!tV9@h=K&˷{KD>(5HkO >- )cza%B}ҌwㄔMc29Md^qb 3ً$+ ?<.X!T aPH몦2hVIG)]jL7SR Ht+e So(N©z iXF>>6ORf|+ĕn3e7lE)MK9^S qЧ@2*[A;볻njW) m){Z6aeb$Y#ԄPƖ,:7g7L`8V&2 6._J)D% Y,|Sλp 0W/ .AA !T a3e1KrR@J PM[KʌiA]uxFN3b)Z7<,2u05T3|vg@1֩슪% ưҚ([iPޜX3ފH&撒q9KJ(Am(-s9MMnHLb?øql)gJu[h8͋*5zlZlnu`#^ۭ&tޤp\CX(v0 8Q6V'6\-g h3/Kj!TeC2 &;YYJIj\QWa[.;yo鋘90 f[S E'1&jWy(۹ hJHL`]y8eUwLTIeɦlo*,flHblƺ@W8j!S[Cc4,ђlܢJ" ~E2s@AtMx3r(]i|z!RolR;f83F+)n9'Gi\\t>i<}ř!S" HF87n2P@QO )p9_ss *O.v9~*ՇJK_4~ns]|Q(x- p\K߭\_ `ՠ؉zq)$Vlh*+(=Vzlx}j&?_*Žyd_:T*d1ij{h BlĤޕld$z ʙoYG )PהS9#! HBp5>-i"!=9 :>&q}Uh*` ƿnیsտJ'!SP݆ƌT% iq""IJQӮ*HnLE&O)pBq)>+x(W66(؋K7 㴰N kwsܩ[:`tک 5ꨧ&߯~$4DEvPVu .cRaZwd_3@v}@ ?{􍯑nQtÁ ơl ` j왜 `.inzv-H^ $. (h0Qrc~U1x! Sc!(2UZs]Ze,H1'P ObiQQzt+@(Z@Z<.MHzdCOS"1[ϰFSe"$;Pi#'WY*6<` ;.(u.,@c#/W 6u)΀w:#pJ "T[(+7m\_> 1o݈q] Q0AE@$Մ ZI[`^Bw;#@hYѴϤѝ[O^WBvCs! Sͅ,GL# `U%0m.Ibj x&&!r:'Xmk#NV֤w$3W`sA,#MlD8bKhӀ^Psh5w>4:EsgYR `C@=f]vox(fLJPi(sQ?Xo'u+,!Vm&bAXSao%̓OΒmS 1t⣒1"->YYe//mF=! SmG0P,4@d 8M;Qmq -{퉸"Ar1Ur4}@dF@iW^?z˝>vTOK)ܪ2 nu> c!3YfX #tyj}|wrnA ן,/ߐʴ F:Lt_~OZ)Ee9YBla4B@kPLPMe\@8!?! Sm"#!(D7.)yvܲ8R}j>URX .A?d^^5}lmBdf/zRDQK5J'N 5yl8Qa"U1ZzHʕBd .,C ,5s ֛mbo(Bʦ-(NGq S:*L,IrҏSvڄa$wr )jJGx,Bw<  r;̝RB M7ٯNjJض.:e| *1gL&fZ/QZrp9! S$A,UXB&P^R[b }>H(~,k0UVKԄMTaqg9ҋ ҈$Ec[Qh]Qpk (:RˎTHfZBQV+ Vxq g "i'(YnGwTIhx/trJP/ϵs'w X /#W DpP@,aܴy^mJnar(>qrǴR_6!~DOnY,0ymsO!;E2F!! SLQ"XAa@8Ld'];k?Cogj -D&޽_l |bemhzb%':~JS՘{f"]D6 OE"-4X0$@N*ez7.޳3;Xt<X{r(l7X핪KM׾/rjN` XH yD(L T$ x OkoI7(Z1<(I Bذ~lBkfؓFKXh;;]o6ބ! SR(TUp@w*!<E5QJRqJ鸈/d+!1 ]M`&xv^}Y'yӲ.yZH_h &isM#PNwQ{\Gdu2;uֶ<a"4KO 1 "NG2W69`A D`H"(OHs^d+Mw,qC:;i[=o${EWpV zωzo A@jdvww! SZd 2 Tf8L-bz޼JE[I5|Dp| bZ,e%n(RǴz:%_K/q==Lw72 %Ji֖D}2dJ2 xؠՀم^L;^n4HB59ODT5S]? %; K |e-P"&@b7R OXcΪƲ^ pmߏk \@{S[a ɀ,ڬOj%0Q@!0=d-3Aec=L(ɋ#'aM@,Mc׺sג#j|/K%6 ۮhgवyȭGHO>Q|v*` c^HM,ُs%X'wP*U`r_<0燴xO,ƺ'TnkUK0ώ,ƿ^+CU` c^Nf,KdA',8 ٥0 n@Zb<>/.+1;Y}LUTy1^&׹FJ8`X--6?YVh2dx FK.c\v/?f_ۊxޅ/+۸8D*fV߯ 9XcV?ֿ<`%?"Yh> g$>HW4R })U3 㺖,7`Jf=_T͛V}]W?S60O'f_6\~"nrz{p`8 gL#EK~y]Vߟ$ _Ӯ?Z3sO~Lչ[W^z]Sߟ݀C(pVy02A'Z$ , xJT<$EF0m 鐏\-\ezZx<8Q~`3cd 6uZ])^ ˗oJWʞ&!LY3b/xm?c'c1NA-@3x~r֦[ǯ~|uP #o͠Hsq<"p[V/>L|O&;N [$3Ek~lVJ[.^:/LD`|~1P3ce"lPεW9HvSs3?|%A %FߟS~ K ߓpΰkꩦBO9*g˓>QA'X(n." Ģ=pNQ2cX%ء@%Hl< O ?y7/N|>\f2M1W1`: A'4 p (ŸGA.F|Ë_ R^\kX+͈]3bz蚘Q̾1?3.(HC#ē1' ~|a[>~˓12ؑz Leec#MLy3/@A9A '%k<7L0JMG6?3xP&^yEԟV 6ILdX rrd}cnai?h7F(?0O|Ў/wgGr@uR%PMy3^Lo^& ]\y;L|,+2A@'~?_yyXbemo `9,"_@3`$b {llV~j?ݎ ڀ͏ƝL>F,<@U {Y D{y$8GxED$!,}abg6JlE?k;pA`'y9&˅1#d~\Fjp2v JY$6إ#>B{-L2S?B+BARG\Jp}wceQRcz߃ߗfBxRWA-x S+@gG86&H1{A'L`2?x睎 p;ֹDxROOL'Ÿ>G$|wʻ6"^-15zmB#o4ɷf" FT{bGGᵁ)9o|~31yз%Z23LPp?v:bD-p! SͅC2#*0%pz'#MP[v)>֦3@a@xg0ؖ;HX tDL-^G{T1˅Rv0/YЪFl(DT5J-(NW_P۔%la[A_FF+Y 6x(J @Z[@.Ay{TH5c1-Zw)as_jݕ̩Mb\巻Y7^~" l?Pм.[, sãV8 ^"n<_uk蕕ғD'L8 $k\愸Zxdd!p*;~%'A`dVH Q (&p":X#=*gv.(-UA0$"shOF*PX2fH4>! S"ՕXVŰ-vV`qQgmyL4CΆUB V:8*QslVwېEP;G}#XL)dfA+ |ɁT޶XsSVWr? "+wta~;uy'"DbK\@ҩ+mLf|cNg/zұm8^ZFk'l8()[1!rZ!PQE Yx4ywi΋Qގy%cTJ8ֶ9tۋ! S((P36ID% ABDb?PkOw`lSȨ?Jk5M F )l#Qcԡ"^ A =S#S+5'_Nm^jH1gjR7B?f48X~~=- =gwoPd(b^Oa.پ#2\Wq=v4wx9mc ȅ* }/~#hCN zs*F>J?A :Iyz%='4iDRѿcHD5UTQO.6! S]'Hh`7(kAa2óf"JHR6hjr-fĖdA4wo\\BJb| VPJO}aegMx~ׂg]he]S6韏>Va] h(&-YU Be 2@)ԳqT8)%UV(@hAW3QSY֔nо"ЙLeg)S1l 5M-(%*/ 66Jj4Ky1>Q-Ա"Q<1WS4Q71,8&D*%s<5 ! SeB(=€%STBT4R3ʺ] 6̋A;'ƒMyyvJS/>iUϜE*a #hdwtYHD,M@vnm,(F+UaSk VIaR c``[S釩V:]aUs(q"aU*PIC{eNÞl=>%9CĕPU8mVxgѫGlm> &Fb՗r+5ܩ]Lx$+< 4F#g*.2Ԡk% ! SU*^U4s-6@j4[v&ϋ4ٻ{ 1hcU/{Pf!/ a`xk(7-Ki碦Re' `D=0i- t ؿS7nf't mҤ%wwЎ8)0Ȑxu+c  5&dt#YMynx`h\ tNTaìFDbX%!a0(@:t$/S{L|lSCAUpʕKt2LudVn31,!Ъ` toacr4Z nks1bp$.s .?EUk58 Gq%qGepV/:e=ZY|'v! S13A@:G nwd0hA#ZN(MΖYj̦me(Hn֚}/pk†gW9|<+8bx3>3dl׸Ø0n|܀ >`Z3>fNyr\yXO6 ^CR#X(!H"H@ '\L Cp]0S>>^L-@0>){g Q?dUN xQ<(y!!@9!0z!0u!0|!0y!0}!0q!0s!0}!0pA'`B?϶ p?AĒgJ˜{-d 6D͸mj6?!A -u8;(3bo)pHqb0xDg2`PO0x?mVd/\]>oc`TGv\X7A'tK160w ™c1sUhcMb$G_"ؒa+_: U8H8D `q=$Vl|tVL [»ױa>\gG;6zǃ@i'؟؏m~W W RмH Y+B| dHsDűvafQ.􀂁hO!g*WLA҂OQ\Cm 2$ڞMޖ({\YEU> UD"猝=b674ԊdV+Kt->1㶄D wRY4hV1W]7 Vkc7&t}Tkk.ty_ wl@ 0LYE2K?_y&% 4Ѧø _뒄e&- @fV0>rr`3cc op "vd !M7Oh\~yϝA%< q?'ؙ~nI/itST<)Shs/N@6mq9nھ=W7oghF=(WfL}+,sq;ZPqz+W3u˧Ww+u_ay6=jt7liE&cfy'4XRmr)85(ss6yP.^x|D[8AJO{^GQp ~se\Uc8 'P̷+8C `^O妭xA-)?:ʀrA''|O>'|O>'|O>'’SOM?_!`'~F{7n Dx8/^͈?dW&tv||p*z gf^f4н0`&~ DM[H6?~{.d8u|o7}1;gO1;z؂U`ǐMjA@'`, 8!,`2a =h?D)iI4N#y!C Yof3H|:N!W gDP%?gĀ\oL8u$w31#HBgw2F_ZրA`'LaAXnl[- OCBM[H1hʙ2"kK Dœ"<2'c ftʓ3?3ltɕIu|dgk1'߂? 0ЏP9*/TJ1gnd7@L@3`6"kiU:<A'ocVe iCl`>eSy|g/F[G }SuDm( *qVpja'UA@3yE1)9|n#|f?϶ 9Os4c>iJTԊQ,D^NA'|%7 ! \: DC#=>,![nӏpS~͐\t4{@/3b^,|g X4ݼ"B9"qS,% apa{E ' ;3)>?o a YDo\ll,,NXW D ͈S=GG`u)cAPD.&Nl#Q#8:y;Q13A?A 0$8^p! 0~!L؀ۛ)\d炥/4e3@R+*5QO)^U*9UA >'Vˎ}_F MCBOY pdcΆ'j !浥98´Y8W ؋#e0%#_{.$@Nm>N@3cU^o>1C˄H ר@ӝN pr2 wM@CJ!,9%Ue^мYJeq2O\W!cw?f z;ʢߏ"ҩs4-YlmK^87 %JMJJVk=ꨀ3P:K&U*m%E &6]_5"/k!LG7c7ɑjZ)W39j%khRX,f;˘0˫"4ҪJE@"g]ןi*k=vVՠ!)vupW)L. :kbRSЈiQdU"!EW$A%ߠ̽9ug~2ٿ屵oG73xv,D}>{tRfd2Fe`~ 2:TA7RߤMrhݻحW_eޅI0w;=.fձ]g[vn zsM)P=! `=PS!t[!I`g !jT HРlm KdR43J Թ!ѼxkXT7pX굋nfw=?TY ݈3v~ڰ]Эni(F`ib4+\ zzI乤F&[?6D9IT_KJ9m&"Z\[kV~.džrdI~zÑKeG'"-A^P,BT'N 7c:?'_}SwglǝݼeH̵$s"iLlƹi݇7kLdוjl$uVlA8loY!TBEc3|Nj]*qR:jJ$RmNQg=36p-:DLòVߧdyfOn_RkYP8,zJLnƋ qR q-2ھMhz/I7;hKg=6rPbf䉍ޓ+rN3EC4+ѳAO4-ιiI5uִK3K[kʯ[: cCg9o?+)Jv0:CC~ .QƲ9 ktB D!T6`[&2fR5@ynZE:C34[Ct7}(kję'iOp=_#C_RżB;Qq[X"Ӝ 9 dsUhj5͂1aCdE-[hJ2Sس<շ5FmLiRey Ɲ\$ HT u0,7?!Munw8| ګc b Y5T\X35UvFȰvfj(0!TmFC0Ѐx9P^#P@kn1*Fu`R[m/1 H=G3/TX@f[+PNβϩMUIwB[F 57Qtu$LI0glX \mFJb*6ʱɽEU?1Z=g*n+B>5fK/M5v͂X.|2R*^K$-R[P?\ %,!]-Ab(>HB\gYlNj&g-'Vge-7zoc_*{M]eWo Ћodc!!TuaQTi r ->zuVDc D @F/! Si`%]*@pu1(u{tPuTW&t*n\UHP)TAz{7Z0fdqT%Ԩ@%t01*J$V '39e Ry,N@] 0$} \,Ԯg4=A S|,SQc[(E軝 5ac)XrRU䮒2G! Sd!znĔ]"*@-M"j3"#6UYwsqQ+'Tp;y5]\'t#V2Y^Z:Eqvu 4vd^bFLv$4L7G(VF̉+f /+/ c*T4IkyhYeT&k1Zn ňY4*pL㨝ULi'`QKIip@X ! @`.b'zוLQ2`$@8Ba9j ށe! SDV0j"l#sPrD&˖SeEY-NQVHetꮊ% yDbP y"dԡT]FW _Hq"쨞@[ ѷ`).[]ɝuAYy -"T&1c HNtYPi]'YYdOPmfzdX[//k%7~Ez2!UBDU*R@!`4Q0% dD@ݜ CQ ;RmV4΅mbF%NJs*""dTVۤ ! S`"0Uȩd--8#zsGr}JN-%Vʈoښ(XPf%($ `؏0D܉g#5Bf#An?u.Gޭ} ˜}"0ቄ Y>éwÊ XQ~c0>BB4O7Z51i(Ȳ0 e\Q f~X.{j!L$ &:O,Z,M$֗{-\Υ֙tO@g=! Sm,D1P@s"R`p[F/1X诜$N1(#mlxrnLn'U%ݾ @GqZX,wniݘ -e+GqAV*,HW^фz]D b52%99 XmRP,(qautmeKݗ$Sm%G)TZJ ` Æ f |`*OЙIK2m9JЖ<*[}8G,5Ou9! SL`Gi)WR 8rzKVrZWӴnKhd)7H!,k+T@[! +txa VLJ7YjtB&˅ ǎ( QGG4O{ܬ'/t|8γF-g!cSb0IpgT@C3aSލ _bPv0t9xl *=쩒B&c]LᯅҊIh n|vTqq*e ׌ךDŽIr.wL[ޜ\P! S]%Ef3!#.F$~CjxVZx ^FF4&s:4Glg(fWj+Y ZߖSNŽ,OBT|Obڕt!xN*îkG3UB| tS7ގgA&ࡰ :[GDzRʬ6BKeUwID2XYd 5+W̄xIK';[Zaƒ9{w:4lUgp! SY*P1Tb ?j*i#ҳFWF$֣k7ge*m?8X4ۜZ$G*J0YS00oY\IXC RY^E=ZQd9 +DWX\M#ݡH#KKM^nQnbq^Rq*O/ 8BMFRt>{-_J1}Ղ*qfZ|bJ)j! SU`P (@?q jDZ)&ۄkhI(mڨ7t 𜔐LJr:ͪ;G 7ﻰZE&|-Cg׽\{ՀyI|1/XEG]@Ćӧ*mS4˶ 4 zBMP >(— RƘ%JiXn:ƒ 7C%1XÇx]oS" )Yo(8! Se%fwj@!dd{u 1 Y" 9Gw!{:[Ue@u.'mYй|ܕő;.j= ڲQ@^{@#iKL"_10%p07v#~~ 0ppBGW+zv,] p( w{f!7ꌵ0F@,m6˳yfYgZN- YGd Ϙ(4f~hp!ND֕U} AKv8Pj_5̔Vwۦu(ΰA 'QP[%tA<)M=4Ij |'EK/bGAp` Hq#2tX f o{tN$ xA`'2%#$@Q,(-sH0B2>yp#6A1b `rrfbrY$PNTE/!sr&~ ׽ ^AP1992&A'$X V$DQg.20@Fg\ޯ.V)ylR>;5* ,A< |`  L8EkE|B,/i@f8ߠ?| z`h=uq?%*7 DO/Xbx{p9,&]+P$ՕC4j'(qٔ15`=zC 4 x~`Y0!M mn_`TJ/)d +G@.ћ@z`x?Ȍ?g㇄0ʮ:iwET6^9c `dm*|.hOoMJi85U*`ÇfW*ُ68~#2T*&jL2=yC zh`@P:DȉB{|C~rCv 6[:lb_7xKؘ5oD[G0QyJP*:*RJgP?vgauDSBm&%^+ gG#??<??~q_+?????????? u( ,016b?%<%z?kh.rnu$-=P?f;A E<Zs!9Oo?_?Y%U@,8#kASOU^~~/U^Ufp,K0EvL(*UX@Wf}9_*` auW1O>K0пU%X}5y#9@& =oq O,*-A'$8ZF PKDEF|GZ@\5b>b@ ȵ߀py| .Lkax@"4Or_ۃZY_'@۽DŹ7~mqR;/^w/z\{Na]&??^Cjx)%`6;"0*#&s/ ?񕺵vP0zS_$ߤǯ뉰 ֹ&c]0n}7Mvޫ i` dNȣ<ͯV4|-VnoCI~K:}&N߸6X ♵7w;nկhnJF>N1A'[ , bE e"i0>D,YȀ;1˕8@Ag 7@};?Ef}ǒumpzXYu(񳭹>_/1@fnLcVxlDL.OsޜlV"QỺ_|Gza Uy5u/|4F^eSkJtf%jԻP|;Bː~H&L?N(HUВm '5|82 됹^HW_AQyRe1|g-=':rW|[`Ro$!!1|5 A3\M{~^uZN*k7kLo_Աk?&d2wh^kU&8#lͿ'M&Z~!j{7ͰЋ^vL t&Heh⯴wh|VCtQrx_^HWVq{՝OkNHu-@A'W 1 fGOM? # > BeQF?՞A*$ꡯ’3i%_lb41UU%@yZdZsDŽ1wwffY!2.̻tܰcm`N!>E DdN!ֹ%?ϱO'b@zU?Իy7`k&hW%%_56m:=LUW9 "29&5A'3VBD).Z' jy" T,6v1Co"Vf 1a79?Av'g>sF1 U͎ݦXÑjNE0D~= y.#?ASp]Ç9&dF%RGUjZ&xղ0iKT^d!@fX1ؚZߏ3c(WPtO%ϟ˻8&Bm07c%ֵPGf5~d q ! S (^]ݠ^XO%"L_}@:<1'6d vfVa~ҁopik{"~ X ڈ+@4ۥMz-J ƊՈs4OIH55 uc:nFfzU|Qu VX]"RޗZFGѧyi쥆&p,c k3 f4+r\mh>v1_+6ih))l 伅 Q C4}f*3l(}S lA;k]Y(WD! S`F***RʰP7MvqKd))R. lhӹAO RgήٚG?ðRFlQuuxn1Kc3rClRRh!imQRfs`~ Km&EDPU-Pe|煈߂yuh'⨨qU/^!)5Wlw^ݥ$Hb+C\U8YE-evY:/,kʫb=fآ'։! >tbԺ̹a:&U2#4 T]SR|.UX8! S>46,U*T`vjr*M1U5)QTc@8Lꆁ |h$p$v-|guS=U %S~OJlԚfv.HERݡ&s¤_A?߱ڕ6chnk\mFPEƘ/d)k ]U"wv5AXP&ٓ>Mģe#8OPI)*%S NX; AUI U[TPy"xL%H ; cT! SutCzUEh*;eйA>Jw/ t, өk X6Ds&d+ ㉪X䟷ewbl3ey^߾X?7'bSwIj3 &ͻP  4:fJ$ˤ&5kK} 3"̒VA5u8J]Y5w:Z!Ab@ef?Dc{RY PVJp! S Te ,j:vP|.5rҾp JuW{)6X{ٯlxmDQc*g[F `iKJU8ĒX%J'9&=׋Y`41:Åt8"FN7JjcŁ|^ 1ZyLoѸLV!X\2y9_HN _9DgV8! SeBQ8 *pw&%,*2*!6Ӥ4YH$ֻ>摹zµɽ/z9|i;wW!o"` 6?oyA+L6;ۯ6SvA{.6Ǔgf lVhmV%;=:|sba/ K2;fr|8zkKs3! S̈́T$(QJ*)a)K@h!v }o=PE_תHxQA`+svOۣrۏ6мX#q<4j+e8xntbL=6pm\|p\cyOIz'muAqN>a!~qՏߍECz5L0D !x@,jk6Pb`(I9DQ:`{#F׼8! S>F)ToPU Ď0Hhz^y)3Z"v fW~_\~@zM)b?X)sGo/7sd\n oN)}ɪ'0zk&F_8 Ɨ6ŗfQDX*&Wўɨ:($0jae3f7{xtQģYZi ,/{ y}K|Pzs2Ƃ8;l:uڰK^$s4 R;*n[طau~˜\4^y#M/g. wv#lXVsWZr?`4v݂+(/:ӢH=ԌP5enLRoeTcBIu݆10ȷkhRxM[! S>v @U*9L=MgH}<Xm:JmIt^G@Udz( Q`Z!Q0PAp+5l礫zZ5~*@:TcdC#0f!?j zrԴ3Q\3ulغmjGA'@ןxlR`XlVcQ,5?H:7;ʇIF>Q|BmRSQCαC%kq\&ZK]{ͭ(Xe/LK1L#(DM*U~%}9>/(UY#|LbV(gIfۢXJ `B*@Dڸo4=Eʔx\Au;W[8Cɤ' ZmjZE""ΟA*~10*p! SIHͰFz>v- /ՒrfKS΀S\U8?tp}XʀѼM@A PQt+Wͮ %N! SM#b(м VR@$pw*82ȓc}1^_&BKZ4 S~yt0Cܾ*祉@vkQ;e@ =ZZP,bd6 "chh1dy|ISB"p a=/G'CںG$FYa @ (J veS6QXRThXej+uԵOF< vy2TjE)/*7E/5V"}q EJx҉vu" p! S5Q90PX-V)vCpfQzj왙h|es/GbCڵ2rorSvɕ ZlBTYUm"쫯<ծĩ#&ZI]!;nP?1?*Yx9XM%HS@ɬ7b[cTHFt&Q3hPցB+53gQ=7*N"s.J ^Uk%Ia LJWFaK#,7y!y,XV `! S] d!Dbv  %~iP5#Fu(ġ~TUE{Z#i2YƋIiZmʒ[ Ɖs*&PãwGH!s!PaTD~o"i P@, &&:mO}bh$*8Gd$ $seUucM#3cWSD3Ȳ`]fk:2B5 T/=UfuWpbbj1dH-gw3| 6 ԟ:s{*_h+=9Ejvb+k$JLif*ME1SU tZlkl] R.ej f,XJ&C`(S@A'L'9?WB> *GJ0i+M6M?Q4Y>`X 3b S s >MKldU;׻g~flpCI & q>3ryǜ`7ᗡM/Vf|re;p>fnfy4`&`A'S2iK `~S}2y T,V1< ϶ aGG۟lv&zD@Y׈"Na`vKsPb A' w?bcqC2c1/* @7lM]G$ez ͒ |)?&l|dK&Fl_2,;zx νzd~Wƞx%N`oh0+j#>!#v#&DNa;-<"uGf~7CӤ8~A%1;61IذA'ɀ!Nv8 ?Hh?#xRZA ''|O>'|O>'|O>';ԟW%PN+t0nve!4c A`8+`o `)>tYa_JL@LBì`:0ʐ6asAaSta+TP3pq\ `plGkHtM)#l%1TjP~ 0O?(q`rw_v(]f-4p􃨵0$P8;V` ,Ѽ GÁ:]"ʃxb<4(o!6r+b`??QxP!AXp"|s)$$h| P2i~@K< Dx8%N .[Ʒ}9H-DeP^xW8S3[1'#Pp,y??<76yo+jy Z țKX{Y!2W9oqPRQ;8]ZYzn}@0ASPRFp}?u{~ 8 ~&$ih(#wvf=ByW\jġan0GG2 @{kF|^8Xgh@yb `2@zsKM'A%os@C yκ8%y{_!y4tlF8jjfVfلsT]06 &o[TB ?C ##*gBs_~8H@l n#8 s$6Y ۄgsD7)?Wv`$1]8σ)(xbv|RR?מaGpߨ?a~Lڛ֐ #CWѯDPU(o dw0TA`'| HB0 x^ Զ!mTae0X怇`yLcG8`Aǭ/0'|fPpܙ@gL1ĆOr]@e?W);b~ y:7Zܙגp#p\ώՅrZA'|aCT5dQ4!4 IKDFDy!,0 #!sQ `$xb$ h|ȅ~p&t3aVeFpjSc2~Y8jN`7/*-j#_F|:>=@Lf%dc\ì̈ gj4je0€QļA'5:q3&-?i ! wWEL<ȌͬFh~!_v(<|b:قSyPzcRc`GO% Lb \WtN W&~'eq;c)-0Qڼզ叅ηm[XY1$jl/ˑ\SvԬ2=ۆ#Sc+E쌊i&٠;B(3h^s::IDuɑy|F4eM5k܄(m\ELdzf[TPO~ g_c: Z ov~NMkܝ7̇7\6#B:Hy Q?Lo =T!+Iq>qd<Ќmy)WAhk'U7KG4 -}ho}SxjyP:֘61^"[ =JQY 3b/5oza5M*MS*'rx 2 2$ndQ@|}^LR\%2;gs D0Nq7s|id w v%J/R_F|q)?%Llg()O DX5>.YC& ˎ @o ztX .:+I|u_[{}@A'Z)?,*{cMEֈژx[ -GS~qX1" \/`͊r߾@rw=lq r w?fvoė8A(1:b:j/B,bw7aP 13`EipaX(Ю7.dbF$b=kG֢P:Ў&?G AHʊ;$ Ojl*e+ɿ.h@A'Ai(淁B0*0!SS16B5 mpB`XI{m:םp)pa(WGGg^Lb~iy/L߾ 8]:! SyeE1 E=K(V.[PX5aRjpzŇ܂',-FS|pƕ ٞy!8m?C{^uk:PcZ˚'lb9hw̎@ 0mP:zP_0gbK![tvRy1h;80W3ǀ!*H?>]b!BP6kռs3+\ODD_+{^~ɀ+^001$Z ![kxvz/ d|1|5 |+~{*_v>a!L7G›Jñs)Lҙ];>7]n`s+0rlef@e8"S׶RNniQk ͉rlic ;Z`tDaGflrMK;{؈c-)Iu(9 Q3dA}eOzP79i CF:$l}$q7HT:5!0kEw/]kzq!eJn ,ņn, ~mQK*^]hw?O6^df}$K'd\VSIF%4,M\S4;.x"S4S$k A&'H5(ֈ* *TO֊ qUWʀ>!T: aP`L4 ;l)dBPtrN·_v C4bMXRC;5>@}S %'sWFqSTwSD &恛+h RBhY.Nv lًd*l;?ip]mvX'[ֺ,24v? B1+Vd3IQ+sTAyAwì@V$-(Oc@ul]fsXuU x!T}B"c+Ud$X4nWfdYɦŒ*C1C omVP,E dŶ΍ \fUSST+Iyt ,VZ,:ޫ=+򯜉)VSOrC  0e)Q"v wFɩJ5w#b)Fߣ)iN$jɝSTxvL>xI#V11>lVi}<G $#!T]aP`1)v?H˧7]%/ 5Xm[]%df@fR쟤 b6{R4 Il =7o+&Xr.-'b1؇5M"6QL|Oa:Őbӊ ?A쥍KsշMbJ\5"FHfec9ĄRI,$ 8)E-E,$PԒ9䆧6J5$UnI0`DO&Xxa'p=>b I'm{M򺋻)2y4(i6)gqLd2Zkt*pZu.2%͗eG*}) &pT0XcugLywA*jE.dxgT4 3+HSMd_,B}C!T AVP; 7-1k([H~P B%>%lSu? sadfCaNJ.,y$>L{~FvRSj-#ch)&[)J;NJI3=rvI,6E ItlK:ΫOJ\[}o\?$o6slyhOEifZ-pN7ͺ;x!E7 /gV)fK.!I|JwB瀠Sx2~r1926e`HR",sRY q04+ʌµ]$T';}6 ch B1rwo#T{QJfk\µTDZ D,,SCyc©(B`@! SB@ޅ EA R q\Y-8:ŊgYzjV7cVji=f,HUu${Ex䳹 OU ,2ܱ)Ln[wB(O~oZ~`*)#x=R(:f'[MBXW`:% Z'GmUP *i2Y&Zgɒ7me,F > Ӆ5^H_?}mƌpt>n# Qx=1}'QJ]‰3T5$)h'p`q΅{Kz*u! S,d6d*ג,H:fU?ZkTdŸ Ffji N~NO[T@ZV+Tz6'@KH=_52G\و C+MhRMٳ偿2ku[]#B|UjZ㧯 $fןfmslW#'aW7;Q0V>+ --Wg'R,#2nL V+8(a֔n.ҢcdP,//Uiug<ԭʮK)khw̍*s! Su"G1D !`b HU NhM5A[l?oaL.jTIkge(H7Uh".c6i22yp?\#˖{it@9(@ %j紀4_|ff)[+i3"O!,=4fM 6m'4?  1jQgTs9 jw~ 5Ra'•\]j ?! Sel{Af)[dicy &5!Q8H#P-vdjԮI(z;Ӏ’6ʒu( d)!.lXN4EWAѕWtIźʈY VW S̵_uO 27?_wL^ ),1I_D.ӂuiݶ2N~Ū Ĝ;wܴv`#s*#i>tT1BPt` h&H3r2rA/8AXC݇/?e,TP |6o}?͛>6߹63;ɛ99D*1b1af9>} Xޞ: e36FY>! SCI M@@Tae>{eQ0C keMfΖp| {`0]Gp ^$9UR ]#FsԗB&/ [$> 0g\8*B"(<@`>_A8e$Uދ9UI"%FG.4& 5wJ-$kiJ-f+zS~])ϙ(-%;Ho?nတyA 'u`Rox'?Kdz|~~5l2N;H A'%lIIh>{@3 @qg) _/WhCDTf  A`<a Za 0 L,c YfQ[f1>Q[)5s`Cj.p?4<ۀxR/Y\V4 _}wO(Pᇥe\("z^No M\P^4)|8J5L$B?D,qX tj懛C~t=?bT?%uu"J1J9[|OdPvg)P4pC@*EH0Q8JZ&%L*|DFOza٢@(jlOS&K7~sCrO ]ez#ASD!vd._y0)̐ 7Zh/&Ox ERJ7PtFޤk8B~<8~ұo?<?????????~?????H#h  />#l[K0&M TUV>_$s%XfSR~_ג¶ f Z;&+TX+@Wf|c,[:W9ϷPKh^LpOK0׾@,k͙PK&A'8yK `$xp)ofq}0B?B }9d ٭'y,%Q9zdL_ r`r^'P8h)- cw9g4O62 S9IX*g.1q-E$F0}܂8(?ࡃ vQDKx ˬ :}a0:;P{IǮy'_ϒ&<"@ZrSߟ7c`K lRZ~H[~s*/Lzw]_=)`/:93 R~ x7|a/O"ޤߞ63>rO(=y0UOԹ_4A'Q,pX 7c-""Aɓb0}IDɦG?@fP002s/n GGww&XIKHKAѹz6#Я? B|2T_g>eȸ#?G?f' ګ@3y J6u\Zнʉa<2+#ɛtA '3F?kg(竂c5UzA 'xS[Mq?2ipO&^Ύoȴ%z0/cfJ ء:a:<  4# <*[KTjcGiTLLƑV ) A@'LM3zoz=5lϽ] l!AUkj6H9:]4^>fi}A#|GS>` }0Iؐw];f*̭kL̙hA`'7U[s%P&A\u#2@;/<͔#͈4 3|ldU@ |2y看T7rd_&eTe\XsL/p r À~ eE [)iUJJ6]o k~tG]tR*w3櫮xSfB,80ۙ֙k@H]Hc _۝h~*:k0齑]ce(D pړ} hu>:l"prbCvY4ۭ5!i 9Ml\ PI{/pn?Cy!(?<I)n =48ck\M}T8bѝ!X8O}L 6,˙ WGy'!;@% &M l+ H'wѤAu@;cdCËxt B3^뮺뮺뮺뮺̿;"뮺▷u#<—xKD͆ڃɽ`0bt(P3QrY`^ ))UxJ4ͪ<  QRP}k _}.d \St#zW]W\C$Q0K_$݈4~=jn .jct.-]]2[}W#֪(αq*/WQrLluPYn9뮺뮺뮺뮺;cy&w뮺뮺뮺뮺뮺뮺뮺뮺PGۊfObLߵsǙG>^*GR嬹{]u]u]u]u]u]u]u]u]u8>O.뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺!V@$(!jHhja|ki!~<|'0q$G4}u]u]u]u]u˞x#(pG$ݗ- 8 t#2?ׂfȆ QFM Ѧ%jUT_974c^G#)ʫ@Ar|h1^! Ȧ1k@B\]B + J%)ݰ @bi 1?ёc9 'ҙ?bRC(4p@ ( 4CL$W8@50 ai}Khy@CBMOn9B\4$mH@nl]s%=ۣK6cE#LXPv{Ba\l$&`ƴH)/4\tE+t\𯛀o+ |0@(v+q{CD/=Y8!e!r@M9.f\gS .k uoLoHD%}jFxxc/5gON?d"^bn#_<@LK@ ,ژ0 2m@rW dA㨄QUvbqK׿ca2 D,HF7q"S~ WۀwDS^zMDh iqboO>l?)s 4@sAdBL$RCo=/hMG(`~[.E{0Yq@ĸRZ"ү˿aF U˕ U[[0mm>C 'Iչ`2 N7E~|M0ikU5 K0}5DfDhf0q o(lwI^wx' Rӏ<8KTdeR& HZd~_{"Iv?2ـA~:ckoc [ӍM.%T2up{KpT_/4 %OÇ"roQbcD?Ä>FĠzDZ7{ 4=  FK{xN`CFZ` puz"1̊0 3daf8  wyXD3 =L(>D5u\;[>D?Zy lcJI@Q|< !)rf~{T0nplj$*U!d& J9~ ΟP>JQr? #@9\3!1b&Z]0~9_b c/Da!3GDiyؕ$@? "~q 8"gW-V%Wbf87Lg0ݨ@2gH$02!_πq<'( bie/Cw޶xN/!) aAAfF0BnL 6W4` Ltc ̃*N`& `r0P H}bo  0֡2E`9-RʧPQf(]ct`%`"JNl@8,E 8'|#Bek R Ն+KM)AtIVKo6 8 L\Hc!VW M*,FOw!Kbnܐ hu0êHM?( Lȁ=)oP c(!?XT5\pwo\Dsjy F7􂨉` a@(!EŰ846hN  YKZ.!A1<åG 0!ߥhyGsi@q7-nj4$ww[B38G'ǚ- yg 'ąRPcwKkM Q,NbT hyhѕo!H# c)So߰ W/< Lz#i[5—QkAZX.-)KpE0/(v]ԬO?5R`w=c,0 K` U1%zwl@ªx5b3mPj w=2f1 UѴCl}_`w̗.%g0ly7gi!oX +:x@z'MM^G˦,߬@Bd0i' {5B5&$M߂*?߄]?,"V^`EnɈ,K !?4 ?HH޳4!a|: x(K$x%:҇e4xR[CX=3d+LE|Z:3#űae+2?Ȟi`@M$Ӑz[dkiuiRRzD!"MWj?ŶH= (sbF`IxaIs@߁)5knE: 2hՖG7*̚lڢ$1wL*$@ؤ K _2/$g838`Đ xNi9{~ҩ c)߷x x6|}^Ԡe[J A*uP0 ܁p= c#b>;u 4n1N/Acuh&D0X) HmrʐTް kOJ߾ Ý#2DV)w/uuA 3Z0\nT #)#r`Dpc{!V'h>YNwP A$y >s?! we!!+eOw~q"&V_&PNa@Afv18zBN)!8۪ - YHL0||?Xp~#9孡>Jz3pf/#H"P)+ 5V ]֠e0ηSOB&8Ĭ`7TT$R-޼U=s;$ x'eGpnF x0䜱ۿ!UAxH_ |S=-8_P wN…'L"h|+bw#71 >Q2?A~+7(ӑ- 쀿;i1δ|S TT>\} 5ԉ<b2Bwf9˜ l ̬@xPɩ1)c~0@,F/^̸DR VLV@NԠ{ -H4h*I4_vzuaFc" ^g4DF8 Z @vh$@6ƒA2_uCzST}QM neVa0t[FakLq|62AšgAzpʖE#8=*$/,L0lKG(@QKHvݽ 0S=}t%׬?e5*}mHd2.p'9ͨ7Ehs {PPYRzuNy?1@`6=W# L3 {o}OD7^|\^T~W~}03P$xLSH;*)Oh i>M2*k(@O{q2 vJJ=s=(,[*[&Mmxq(&Mhe0a@"5(Z;VXF+8ŊCeu:᠂ 7 !V~o]%1 k6 u<1z  .~ 3 ctr!@7(B a@m6ZC| 6⍾A?EAF /X Bq%v鑀^b{7F~@ G˱PZIz^Hun_CW1`ێ䍐aSXH[ڀE?G'w1ۿ"@C]QBⷯ|.(dO `zp+ϑc[*5*E 5l*Xki|3)Ym0q s/Eqo̻倡n.ix8`;!&qw@@X ]ݨ7ERְzU (Uė%v?r r/ HI<a>?h3S e(]Grq-[G;뮺ͳxPy£3C5r["s!g; twMU}VhiŞ 1uZ2H,]u]&D[ ؋u]uO,z߿d k?[ٙ  ls 9|T}lu~  SmM}X dD m4:')| XE(t6gXX( 5'}o \7G9z+蔫h4GKepvoՒPjz VOo|?K! (mG5,]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u\W5! S&!mT<040R`rێFl\ :Uʨb͛[m[q({ӑLCyGzI]v 15E(`!`ABϻAD(;g iBmej`@fV|Y8 [Q* ):)j(`%)W(y M{Nd 5VЕLˍ! S ²o(' eE %]wCAsj xS9^ē6`͖PsD9jKMD҃+BA@ɓ'}hTVs0,zj0gL0Ԯ47/]&^5C/#yg'q{v%c=GDwnBTf2B]=z#\ ,7y{4Nbˮ |xHM2X k͜j/P._4A^wE"v3B3gh! SQC0PL*l(UiW/!aC2PӈtqI#m8o'5Ǐ1ԟZ#al -F4lͪ1U{&f%i|9'Z!BSE"7lߏ ݆!v +.]c̠X ;Š,`Z)vm.V&Q$˻ecˀ40x/ԅpB$E(/9n(#Vך'jm 4tAYGsDa?:3.}! S/S*,P!IUԊtVC\6}* .*;&/F.Kl+ J@8E/N'Jy:LHo9QD(ƽi޹R {/m%~ &uva}/'׆]'$R{;Kbs?dnN^|sMbETڻ˜?I7-8P7Aچ@ڽ܀B~}[Y`A `x dn`rf[Q)LvΓtvk&Coղjb_@V%*rLw&~! S̈́I1OP P8E,ldrȪr=@Sye @_&o: +0XͰ]n f糱Mub~BEFfS,/TsZ"zWH- H"|3l^$WmP)<;i{mJ. !U_c>˓ǹû A@b@(>#K3`r5X#at7Ֆ(yWDmCԥB垔 %a'! SԞ*PB8LW^*FcHc N%ܚ撘 `Ǟhh f5e~رū{SG ډ1ȉ*ęQ J7=h׶(شZmQˆ ;{K49Ok'{ 3bXi΀ְ;}"q`BR0ЬyߙrH3t (J`9e1n>!2hq r&`\Rt0#;rwE5z/Y,h&<6Ʀ # l%(BBK"O't Q^ȖwhN! S>F"Z @IK a vj;n,$"EtS䰝h8-ŀ?2^^V.f܁Cs5bE"Q\mM8&+Um |";비5ևUt+KcŇr( ySk{L fUPC&I͗| ;=vՖt;! SڬwBXP0<:!E[<%sЦA!-y[ { AkeWxO&bfWF_uxzF@ KŪKb>:r } À&Z ^ߙx˦ٱ![@C9(hwsCORp VEȄV5iZRN˿v${bG<,@K$܇=+$PH@b`\\kI.pKdPt6Hi:k-J,Y4NO*D! S!eLC@&\I4"]10@E;D1Js󜐙ށ-R'/&ΠxX4p nw2ٺ0=7HPi Ke^!,t:7-,^Awlwn[x^;ZQ6d^{` rBEf89~ԫE\ϙW,tz&a:)uLK4?ˎ {hs0-d>Z @~f- cW] U7v-9Cjz[Xt3X[L&J)eUQV?>Je5E Q#1qYb;΁:ta -J#2;WFj! SՆB$dAV@(Pvwx4dr\%(@iڸ4UԱw`l31ǽ#"ptQ͙ʦ-5x3U}LeMKUytLggҥMʢ@s%Od"k@8c֌#1KW `Ul Pns# :iڜ%TE)R`KAn'cÊH(v]#w)APӼNVV~[Zj3!Y|! S}( a;P,K ;S#RHwS 'p_)-< R0ׄ & bzR1ÂfRV87gյ(!-(e0nX+29MKU gG9̜#D>bf H 4IW93=%*{K[AXB[9)GxsSY`2e&*ayif anU{ TVho\'{8tVWNum&@&<7f+~9yp! SeSC UUv@&[.&34£7ybo_Z[e㕨t1fEeNYCɁH9(g^Ddk!)~I@罂C&JWB ]YZ'TuTtN;SCڎu[muUMw#(v"0 =uwJ$%8HOX+Pq(ѺU"֊M LEM*Ȁ]ń2aePmB7[[R+s u! SM+^UV`Vg 4̘"nW3ZV^ĕlpY]MQ[MP#8"MtɊè,'[ :P k S/H ƻ@NTX-C8Z'%Եs^, s ́RX1L;걶#STx9VFVsLm8: cf*D-M(bS'Jq+Ԉ/J@0/J;r(Zj/DoQB`n/N! SeC$TF거TPRѤͥa|M+yҠaq[%R;wb{R1t23X`iܕ"BdAܙOsFj3!kYۼ~tlf4r62_ Y3vXSl0 ,6ٳ >d,9CA6WDE D yF"a1.z\m"ԋ 37ZRI Eg0n! SM%HhPSbPX.nokK,_j,fL?/y…`ւԑ=}_GY9s]rpUz5D`M`^#4Pu|of$/-,X3q^v9RMj2ReWݝ 2Y%9ZK$+\4XaG*@XPƕsYf,&c`fURt&Jj>]Sxc%Xe(fDOkE;S(_ڽԢ%ojNp! SM $eF& 5x.4mO>Ṥu}16MEřBP?sg|}ʼ`-zd [#w#<~OL1oK3g‘#Ahϡ7n@E?Oq#^]!p &X00YUTrP3J.?KcFZ, [66Vdq ' ВYGɎUPm)F9a`L<1!$<~eġ(1_7_}:7Nq! S0 "(8]5Y w#j?䃎:AmpCA?8L+R4hd8dPX'H}h4)Yd u;Աs 8K("HC %=pж՜> f{yPIhuzD'+R"Zگ͡ fjSK{erEH:4)+mb>N5/؝/:u DO:{A '+&e79e~R9#/&ǘJ"@Чomi啲n^"֤8hnX7<3 Ƀwwwa%_M`*|lq < $QAM68 n1FU?G33C &w#j#so~ O\dn?bYT b*&6Wr8q O;= A)J5A_BJu@p#`,LxH.nL} Ou6?}7ɀuw?DG{ܝx~]{. qɼuA@'v>fgLyH,b[7 r`ݑ2tO f㔵XՃ L6#Fs,ѡF$LY YM/fĐBGZ`0aX;ya1)y&?ϗRqXWM@3x)Lt7 A`'`ZYA.3gpI$ $^+Դ#vv^1gB3qEn5 `3d ;)k<ŻOGcbǿa7 G ^>a|'/18LIg3҈$UB:+wZ@A'ɀ!;]aGKBdBs3o@ADq|mj!ro)`LQ^pat _lD ӟ3Xz&c0 ێHf8-fN^4TVF̪EHߣ$&p/nFH(@H3T3B?yX6G+};<;d ZA*ǵABM6<ֲڏ V̓T`ӟۯ/9h2Tx~ NLs_0I[r\R <)z}y2A4H ߾nA''|O>'|O>'|O>';=H~L񟁠4 nR YB !7BqV:x*0 { pA!=ePb<\@\BP`8y+)5l r#zȂ"4Y4%N8}?IcT{AU o3@$A>4XV04`7`7) ֏;4 xuo* %!|@2yon: }???7 N\!, qH1h|!<֙"n蠔G#^A` 'p` S&YT[m6a8{!3xT?1r9Od??'[|h|!DWÀ R"H9$'Z<;t@ V 6<'} j$H4y5?0|s]x LyX Y9|ly&SpnAeuPa80GC탏+cЌ0SI0$/@3y1JDaNnA}O%!3ƀA'%<\, %Z@CȈ,ɇ%>&Ц}Ė_46bYޅ(m?xi2aC?pyoyb:| 7;J*A'`0`AtQxW8怇o%'e_ց"2Gр@Ϛ[w 'LMyiV͏#AF@QZ,o[Z;DO z?<#T xAXxO؝q?NA "ng gɝxJ7&up|:v$} րA 'LaAhՑ_GEL<$7hq~T=s=( zTߏq| ?*?6< 8A`'%7+KXL!Qȏ0Xx9Z\#p 5BXD0%?Ϭo!ݜΆ`Dc#Y9ACDJ]A'g0M0#İ4M?B"Z#b2h~!0A@y x%"I{>jVÐ>m .v͒=dc3a29㉑oGS(aâ!L؀C ElZjDD).q\bhͮPIt7d4` % =jplARە6\}`@$| 1yQJ`MGÅldE/o=r Ǣ!2}'6I~>*oaaP,?Ob--k8!LG"zxfS~9 eےvBi,EkYSec|Rs`J Lh EMno]3T-[E B)r0ħ#j2e^DCOEsIjHXʙkMch=:m?,Gk'9G2 N)U\ 1{wuuy~ m4oo1w y+ Ÿ~m^Cܺ}ŬtAO}dzE5DGa|~)oF8іxLiN r :yZr$r0;2`X)L\^`Fr;!jT͊6BSɨB!uiT LulVhdQA)Sdȵzٛ(2ola wT5( bM*[#@r7Vg-`PabL o*8g*%^tkL!j$B&.K3 4ϵ>dN>2҇ :էpHՙ;gdP.(l[վ\;Bgˈ,=~k*{mIֆjp aTHY[4RY)!T> A()9xÆVC+R d*\[(mxH\TbMa4*T]ye>؈U 34K^tʜbkz=h6͒[)gKqIb{i.QEciR6; >Nл۞NUg54meLtIG~ *RS<[2$̕~"(i1:m3QݓߡkBlsJ| ,^YT @7B`F$_1&3f)(!T>a1P])%EБWVdbM4VVS]߿nZULL0|5vQ SiUٷړ1PLY9!U:ʒpDwI|pEᤋM@j]ܻ ebȼK4ZBK-%>ҋ[d1r,)8o'#揭W%U8Cl0- Z:1m*8}ݮF%|wtY9~`L?j@FV9Vǂ=%G\h~b :y:L Y!Tm:D`l4 C;P eȄsQBc[찎 ZU{ A!]A뾟=NcMD38&FW1p!SՕLBQXXRMD3P(W4(r ]t z| ;t6a~~|v}Hg'L ǚЙrp[mI B VN҄TP5h$V : Yi$˴tڐGVyذ^xzȞJJ'AĤZ1j/($H ) Bqp(}ExSBJl;5:_BArq/ %Xj8!zh9օѕN[C`hD˖D@! SfE˓w@qr&$!Ve#YuMi«ê)Jpcx 4 nX[v@S`E7wFdݜ!:.6V59_EJ4d 8|K0 AU 3JVj su)/vw0K한 Jm3%,Ύ[/(2iLULMEu= 1 \`^ BzmQOP%dTZž5V$@3,[+*$k(VF:S\! Sim*+8[oP QRʄJKC A=*l.iS8}!9sieLPu<I>v#0CEge::b(LJW bW-"+x)aFAyo`VWEO=+)z~  @;NӾu$/<}7Ы KuR|w+6ϡB AR,3B`:ϮV֔5ZcXo^QXђ4^b)A#~Tbh:! SdHP6U*T(K61i.:j1 |tOtδuD*b°ZЩ+-2:PmY')I9uxE%,ʷ->;(h[-(^AsZrFkxNvcuv|g;xp^YL|e#[1/h0Ԗ&KW^u_lfDT]RX7 #JQkHk)"&t^ dYRT!TĪw! S}d C Qk.$lL:_/Fp3х65HM9  $yt5ک)o:#Q$Vy$` m,r {d]Y 8eqnSdh L2C]EO5SVv:T`ԕI( ĺ-ܰv33I]1,Jna 0%k8%/p#zBÿ, B[POB~8@DD fR,,@gd6-xu~(K@! Sńb* * JZC{&-uaj4ս兴汆Dvm4_^,! ft_L+M7ڜkm "`V[*"w3𭊨`Cp4N ٿ6e0˷뤯PNF+*44$erXF> YDBR5pPO5hC]ba-%`y@m阈qI$C KhQZu柞9%.,٩ SE-X)Xhҥ)]R! S`f rM谠k8[%j4xLw^T؅T)Dm2b`ƺ~h?!U68>QdH1.T1,DKy]Y܇ 2gx/}[WVX&xRW*q>'o u@٫{:P:!>`6U`_$?wH` 4C v tb+P|{lFu"Oh:e`)QUA2ؾG0.,bsY8JanI@R^MK0! S}G@Qz/mP/*ׅu@f-#k3(lM-/H#C_+<:(ч4 HSk|MFLǸbe~Zdے^&a6 [e%Q_ ,hpd.e@13Wy&^np.7sIwhLl` e 5==3 U W!wŋ+vdn,T'Sߵ-kKeSחB5KV?Ռ&FhRMZSw<]! SAc*#6@ٲ>lݙx~+t5}FL 723@b4; O>WI>́ mm ;c$|a74 W;i?%3|͇N-? EK* hg۰oCP!΀c6ad4gh3\6 ϓgG>Ft̬lKcCY L{$*A'`>`нR ?&2{[" -*ш?3L?^)6Lg-pǿ.u3 y <<@%Ƅ_C,` +]|6/%2f`hpA'.!BIi% ci\l6 \( 5 |x(Qn5AfuQ=.2|l abhdP!fVA1TyS%<0: t7CCt?' /13opZdeÌȈ3xj̀A'Wm6ISk\ .K,0HEq]Ac/, ++1Uq%S۴o8k`&[LD%̈́uh Fz^ أ!;ۻPQbCt+0,鐞f%F>G`֙KE !wE͍^/4.)m $cEn^Yw7/w{ֿ4&@@&⻷N]_CvA͜ NR dMx.mWsUI@A'$^ ĂܳJ=!YhR*K& g%oak+UaeǗ!x? DWb ȁwAmn{cT )YEXӟ6DWDFr6RL#ĆGHh1 sVO `g}t~A)@8Cw6˶oZ⸎+h s(v C^ Ja ` X)v- Q q ad0aR.Mះx9<4)YYqѥkKQ |&(7IT`l|'5|2`x5pF{H.oيB!~xp-<@Ѳ0 QV>#>Lo\}Adp` 2lqt<:LOA'W 4H 1ElD@SG a!'9!AU>K( IHI(zD e x(QGx ةՁ⩈ˍ>|!^ @i$]hoP;i7.Z0J?A9ݍ OMk e$<ֿ pFϘ,3.t7G츗u×`$~@;gA'qF^[k"B0 19DzS&aV}߯#>L! ^ OTNj͈ (ُt30"C"p8{͌4?lzmy^}L?lqf ִN?_0DjW*P ȁ=zA'/w&|>Dp +! c/=ϸ35Q ,0]H \S:w!>6* :M4Lv~;厒P2kB ! __GGϬ Gg~ 9M_f^Nu2+yWpԦP\ (\A'<\ ЯH+Dol8{gQ`>6H;\M .3gt6RW\v; G!:#2w1y,9%|w*!x- jA,d|#3qʘ{:r@! S=$V`0Pi#lz#l+H=b0&DøэHamap|ĝmh>}utyLwhj;ϧ<*$]$wF;>wo G(in/,TFwmZ`'QI aҁy}쓧m` 41ھmUx_0) ‘&=3&>ޑ껳I깃xl?ۻCݝR#H=Z4Xo)! Sm & HeȬ(3G> |:,K}[%}$UeI$R5U7]iޚߧ2 ­#ǰ@%b./ Nf$tpK[5DI T1uL7YD?3nzPP9LҫYiK%;67٬VJ|©]Hݶ)*e6._aw|+ Jw <>Y1m?:Ҍ?; U~]< qKNJ dN?hMSb,V KvbJe)[FpYo! SuI@QaXW:]Kcb)te쎖ج,Όe(`ThR"MF5XV> tu@ 7hȆBmTsF8>nE2FXf@tAASS\߭jk6kFrU;)Q"&#'8HhTj ݈*$qJmwnj9O4vt.~3s1Qoy}X21\(س`ݵAݨ A@pWu%rAk5ΤkY"E#JdH.L-(,bAn]$X9! S̈́L U (pr-l}(6-ʩ)To[/Lj O7* t9\FntZw{N{ hYy, 8's5%Z%qYզU &rc\#w@-@3v]$fBq]^n,OXK)L @'+q<Uçd~ 1ꈘ/0+Bt~wb,cn>}fyB;>! Se>&1n2Cᦻ%f^7˽އ_K”C-CX!ƢJ.6zs-YD/3];U&֠ӏ-PA?\%'څ2CΚW^){Ҟ@HԈB+ _ F͔k/(T$r'$J\Fx`eCk‰C$Sd S3UhIH`@JcČm

VZqA`IOPP"hI붯ZNi V_ԑ|U)ZZ?b/$#qt=[m! S̈́R}) *P zf6sJep)GД}-OxRh}]9Y-%G-iJRFy g#Yn@^WkFf(ͅR-r#¨ ue)2:7zittJB4_X_?dΧG^䗃.P(c,Ha&b`/rPeRMH {"*oI]?=i2X{be,ݮX:ZmӟSf8! S(GH#FYC,tJAK5q < .F\#J%>":PPs+^vL1sg҈dm S%]EM^Nz>[B]t¨=5飱%>!'_C!ZCh[gic U1OKB)^6'~<UAa dm?>^bg2|c!J@| AZZÚ .uRe6 ĆB8 YF2]lqU"%-^^{C! S`Mj3w (0" h`)FQ4ko5B 3 x9q,/zrݩCգ6ǔt+wqu'G d]cqB`NՀwʂԚߴbj^=GzS7TymgD:g:ƸJtE_ƼشŨ4\'{0n%Mz/@hn(@8JPC^O s]z<|*W\*(҃\g2N1g"Oy4buK!L~}I%ShV1]sک0lx! S$ʔ%<fNW,Zl ּ7M?c)AiQ꣄Q,`_94}|AϷkNj &VI HwG;6'!icgJzzCpHƎm Qey~6.xg~&zEts-leLZhiSZlۚ" Ӣl"zVJp˝K)a'bH%HaypU*iOao1Q$+V:m W}T!ʓqUN! SFDEdTv (tR(I(-8G9΅lVHz_DuΡ\NK} Bך8]ǨY4bH3*4WsHgɧ `r*э/RDm£^Pͣ P:r"7$jAė=8r]IqݸCEaA۰:MFWsb34_-?8Ӷ[f:&"d~ h/O^ڄJ ^_.J&FlxzuU=! SeC$e ;S2tݫ[t@(핦rʖ'|k7U/ʥEӓ* X̆b0|[Q yvLRqѣNn_E0ܝ+8z;ȏ Gљ=_" FϯoXEEǨyեmb3境C>QwmBot`C^*oV䚡-d-K  Z%0K 3ٝ* Nl Gb|3 1Tkt)ݼb)6Y@V-t-*I,'7m|ug[`Na(W-Eg(BJԫEEgGU#WgUT6$LrJpi8w0;V$ജ9T?A! S(M:0P?Dek-f&ebrs ̡mgUd F453hqA)?mQb7żڪh:zZe.Q:쵯X;zq%`;exGiQ]- S]cc*-BbUPj4ztBZ[IƤeT35͖. 1:#+551Ƞ4$X Q9})w;xEiH| Z6Vuzs҂F; ްGiuv߱K^(y'^v! S]D$4U_',-/z1K :l^p:{ nsQaR`bp>Ԥ0"I)0Lf;O9Q&7ׇVpE҆$a5Vk:2UKh5. cCTv3t@X :RpŶP% V%LPv̀6bhHN5%c1Ra]8_FKu(T;κe8! Sm+g>O ,)drђ_[g T>aSrY d!Hr̠x58Un\!MpZxdn3#4E8q6IrԠ)?p`RHlfC1Q;E$a)wFoP5j+ 6T0i @) g:m%}N%ŏ"I%UIjH)qYD*Q BX7*$N))o|>\3x>ZfO! Su+1C`P+3RM-o"F܌"BUT2#,^[NQ.`綖ɂ e %Z!S$S8[Sa Y}v|ze2VM|Q`A4CFɮ^ \ paö< (4toV &B˒(Ls>l 8ΞI f2H !?#7 _P9)j&,e~udLl{+S1WP*}1y>jا, ̈8LUwE$jg$F(O`PpA@'L`e7$j#2UzyL2 k> K$D"@'͐$1;񞌴fpnLPrnOQ?GGa%s u_(owS*AI$"R =KXU3A`'LF8Cd'ɉ@6MDbra0PrAki2K 3b Q2;Gox3zX B b;tm51(cbMy7'1闿' =>;)߄ SF>+Kuf (+7A'`7 p?IKa4F+,ij%R䲹HaZ#ܻl q Q+,^6?"`w!;͗ ('*<'k Èsia񂺀ɓ`^Ą^ߖu'wes @#1 ?# 76chan-8/`pΤ GuM :r5INzE>?4X hv}4p,o4@p7yd1LE,|nL0HT'ƯlDӟ2mo1 hԈ2 ^VW](T6eR3LU+Q<  *U)7HQ7wܖ`ex7Џ`y<"-C(7TzA2zo4ܨU|-o \ *ǵA\!°#3ɝZj>ڿ)[s6NQN##xc5#˜߶ZIhGCx(" >H92F3&"(͛"ss=.5P/ {dvKZWt87jj20O%R?'(01H*AJg/:L-V^.t!gB̀Y@=\L`3boA=!ئ`@fvr| 7j3I|)7wxgZ<^! G7 W?b_ p Q瘹_ pX95M :u'|} 'cuG`:7ɄM|4O7'}Vc1c\ջR|m WqP"ƽ}w 3rHO\r6b*枨^BѹM7g+R.dadB)rkQ]Pr1˕E`R@| hJG A''|O>'|O>'|O>'^f'Z\@X<؏E- j p^M@tPw*% \G +*2@wFcG G8^>s)IcH0Cm!:;ii?ClL*e?ąFp { j;#N8"< $¥ t1wZ I|!Ƒ{ ۮpv-^o! EwV] {)@ѓ#gLFLl} `?? xP<(8R)D"9n[2<Cl'ǸMJ#x1^HmI.'<@ ›rSS1tƌk .a8^GYx)OO1R){&/,w^|⛮C>0AQ$GE—0t}#xڴ_0CŽ^Z`.|lA#4ė e$agH?GbJF+X^ ?B:B\OA'%Ogl3 :e(&<KDR@ƞGL6Ռ.0% 9 3b3C؞J|!⭗ ~vzjeɜ3'4zÂ'&!@' v{x>v'!eCX ׷cMe@3x7 $Ο&=274+Ժk9rSLA '`0` `I! 6Q.ڒ8怇byH&(o"1| ہ4x آW31/%Z0"U'v0C쬼 :] Ϧ>b#)ٞ@0r og PAג\|ĿA@'LaAD׌Tf6vk@Cl_hK{ȉ.=(F:#-&´E̴8o;RFdIi%y>x~Ͼ O%fIu1Re{6?je&LXǂ}SBv}e1x%#wxy @#{Ck>8 HA+ PdL=y#dNU*mf^yNA'oAO!s,plBHv}k0E(z3j=~ O)3d,s47k͎!x>fոMw&􁋇 T!8>~?GN3Ĺ `Џ3V}&c1֊I$dZO-܎ncgqp/%9N`?8%2}3C2}癿} >3;h1҇>S'8~w$%3NymH>oxy7eF|Đ79 $ !!S4BIq mZw ?+q1vƞvG6}[{<$`$,4$xm?m}P#%") xϻ}??Q>#HDOtkhP HDAAؾ>1(=LJ0v6ǟ_gwŖ o  MG`mxq~ {n8GK|7x> #QXXxy|Pvu!SM%HLGF"@RH(٫l@.=$d1iZ5 ֶg26̤-!d2wfwbW"v]}n (|E;]y&`! S(70:m9/%M.I35]Q)|[wK3fr VbgWFg۾ 7un 64 ҊL9L2>5< ?wɂI;˶ wB=XnoT$2gl˙Ud@g}zHJec֜1rLZ |ܞBL=BR)le7w!jT*ƂP$)]IutHpZ3$5*w1SVyW [~7³&7c\zsylw)0/(Ӫ6>6:Vugt-Vq&tC61m#eRCB0 瀃)k!a5Cb @YFLT)#%, kU' `Ua"m0W%lDklF&ljFC&D&t %H W!>+\Q4aeLJJPk0KkŧPN0NH(gKU/)fTyY]xjhX]2C6dz "30i SY& \K[[h)he>|1i(66jYE'WMCE|΢r X! ?!T: ! eN27rT c1%ť8,ȩۈӴuŒilY +q1[LM.eU~%l ,FƝr'&s͐4i158[rVYuu_Gj=65m*f@hA, i>%T[EIU6fev].-X5LTe,#\ΧCT@hX&I."fQx2#5:vE~_[b(`.5U)˺k껅T0QMnFkm}C!TM 2s7(Fd\DCE\miz:?L6s2A)T5iLkYOr?ʅ)FN.-JLcҠS*ms.b4`=bJȮQsbE5xESdl^W ܘY 3I&<*ndm<ٱ-.ZW@֐D~$U"ޥ~308$ ERNHaero m{زiP6t1rحs2Ɯ"!TUbl$  !XfP"JfeN{nݧ?Q'bD"ݹc9 B>j\ۭnkK$_mj=f^5gjy9R2"4b 5[ַ%+}ЮS_{[K+R6: MYȆnU];hxI]ŷ42Mųcpe.uɪ5-ȸ]5IC~ ƤrnU3ІTa$׎;g8a\(!TECf@XH͹VPLI(i$;qn@QLmȳƽnwW}l)Eҵ:[g*=xw-Z 7i˳O7I'5qwr_0@.$2'i"&wZ%.x5Lu",`w~tfu~cc38TY1 =]>R -@?yIs.w9}=e,vQy#8`B2k(Z%*ITa'7M.}Pb@ Ji>}#!S͉&#@iCY*ijE|ctpX}/D6 ˡnZ&Ee5bYq}VvJsa-,T(SigW"ȖVA/Jsk%%/ yQ0gGN Qz C|`qcB\˻#5-Uv1}Bc`<Qxj2̿W:da& Ò' k\ЄeWhQ|,lRcLfP9! SdՒo%UɒK:٘ Q;L'mxT#A12S`X-i+ה 8oݎ]OAWQWY~{OeN4ց&uxA_ܛ؊XoxKA-S)tWJH:T֪ hMY^H }M!3-2tNC>nH`4ܯu%Ju4 D@!@"ZX>o\;~qqS &J(Ͱ-Tn &HTb*! Sd2ũإ*襲w$"[qm^-:g&{ё9,yxN[\%U-tʇb0NyUKhsA )mfSIghw$4.ƭ94r}ܠLP0[9*vIb!ZXR$,R)p+5ԍI@: "tېOiH0u4 K|L2*@-9 #0b6$Ũ>Ece&aQA%"Sb& BD]E p! S:TPU$ _>}qͨnhnntOUǘtaSp(Bm,+`,GGzʤ?3>^>|~rqm #8C򂕡,NKڢMTrV:EU#=e! ;P旮jJQeBhcY, ,}1eJ|6u [u9"; )UHelAB]A,^~newA; QhB5R3@ (UytV r\wiDID! Sb AJЍe"*KnWeu=$ƵKFg8f'2Ծ}L%ulhMeUN:Bj`%Ew3cc.<#HPhQ[M3ԻKES& o#OBN[<N-#?"md/`TݫB$*Qt`z͖A)\ʷXbзMiā1dA7? X 0,-uF\?>gcX7\hf@4@U%?"ꁿayWLҝip! Sa^V3@P8Y`'~Np`>Bر0(EJ 3rJAWut)۶&#V>h'V=,F9"2њ8*0K.9e:|ܢKl:=P: L $TVי=llvzSZWxD{n4.P4ֺyV.b"RQ^apDB3^knsR3߬rP)S! SIE1@WAlpGNYWǝfv/eSfvTjSedG;+!Y mbT QQ] 9{@ߚz8Q]pӝѱ,\O{ !A'g0eD <0 K Di<XYDo4}y~Qx%͈;A2&} dl(+Dt> o"Ĭsu#1'8Vy16C57$ -`"یXd3;(L՜7{O'F@A'@J2bHH> zyߧ} "yw~OfĘį: @kMjoWZ׊J[ʃ0x;t?71AWA '$ bA/?  8jd<@$8W0B\WY܇5LQ<TlLg $Et|z!ı` oϸ%H#?$hɁ/ 5"300A@'$j]0epe">!n+! tw}}AU?& /oɗMPprPK*8eUww,ƿ?Y%~_,ƼX, U* A'$ @[*т"a\wWE%`WvIxKA«L n(h-- aw~HjCYyKhT13{vrXqIC?f?S~ x_ғ Q3xU򽾻#6i[fU)5鹹BYQ}qMw+]_}vP0nV|ޫ~?Vz]>in\FM?w=pQ,՟$U$~EVC) =SNh:[}qF ~;o^ܯAy0Dt"ީ<F{7woy Ǡ-?F*A'\H D`(H<$e"A7DCŜfW6Ub5ă֐DgE J˻f=OC=!]mZ̦Z|~#>8;Hlp?Lu0A/ ww8(@f}, *|5 >O/ #~n}^۟cO2EPq GHo (TK=%ؙ^f94뗦BjSruR}it5S(G>j:wraRmcwPF39Ll}uɎx,``oǂ#&Ac`ݤ xkUꆹvR.?%.ow)9V| viUO.w#!TV~_h\Fl0[A')/k|A)r3eAtF\3%7!T!I$3FHԻ(Rԥzf`^r~6 ͊ 8]LVICt˽v'yoya2#YV%`x)v37J?*%ُ% -bq`ņ7A'sNbJ}6ug}kU0zA =P?[xh$C,3Ÿ|o:=7\kQ<ހf(1X)eRc)nM3(swXa )іT|c`>$<x tfm#U*&otffH"f0A'l8RoUh rkIJ>2kW;MvvQ`ߟ 5OfpoLMV `3cFjeG~& hKAT./!A C%߉, |G³ 94gyN6`|5f&rٌ`g4d)ش83;3:saϔɆ>pv6w'H#2Q2nl:tAK36EGۢV`@4!3c82*aØ4&<a321π4hsCú١o)xdё?! SKhT P@tWFt#G]zwap?؏w'|Ni0?v|_>md`a󾯲c a v|ĕ'{hjk45Bt@@*|v0b[1`b&5?on|g}R G=|xxf`| c}Ͻ{פ!ذz4! S]SD lr+4@ ؉/ucg/^z AAFqfDGo8#*uH6RG)H'p'm" `,H8d33Io~W眛/H,I}+: .+c\TJWyCloZ06R|eHPz|ZoXQ`)% fW{@WB B ?! S%UUCha)0Tٌk#K2I`)*P'Fcs$$a|zg”ü;eiI\'i+DULR5@V,@Lz(nu,aחSϟNY΅JTņm!>R<" ^9vќo(a 1W-,xo%z?/E& JP@T&+&LT884 "h5 =CLЛo恰+m]BK_)|IDŽnⳋLh8ecכ_JN[l+ȳh&0RZ*.~5@d' 3W[Ml.TS^a{zƢ'7 ``lD ͊ՙl?iDjNo`O y@SRIYHXVU ƿ]N6$phONp{6ؔG! SPTHPIz]}rtZ!輖q%3&XɋfBgh8ٷQ._NS>JVZ-sj^lɝEq \`b75;h6|I9rH H /F/M*ŝh_2! ShB`(@2@(EMEKlSyUQou+s4ٕ\ :8p&/?Yd$+G!ErM󣘷ƠnS?ݶ[}onPCȄCi|@54=B#^ SZwrpXB_*S|DjxJz*o(})Гd<ٸa+F Tn+MT! S̈́JMX@*pZ:d+/LXI,DAxwtA4O_٨^3;x"+;ǻjLxϿf:*~oAp?ۻ.]2,\J_V ߀WG`ob$pw`muιj9 LN_s?8[nKSze/P\1BV!  B#}@ bj풗(.D~;A 4w|9::cT VIpCCBOLׅ̹C̆c3Cl6 1֔b_[%5GIz%`@ GaWMm%-BOgHi&C/BN\v!PA@6j߉?a/8ݳ2yD2DP9O"UR=l(Zi露/;-__! S`` ] S ttYL$'+Ē14:#MH ;$b}$cpHmNp7{ˤbe ^{x( \qAd9s9o5gL IK]SY(ڜ'Ipz}vHvwvI8 nNHXag-ҁSE-!{vu4Q1Wbט 4"K`{SDjR^XQ[of:7Zwn.^! S UɄ J' vOrL92^xҚW% L`WlJx [, yq#`Y\q&zrv[?LTV2f@h5c6ITP5~BPh hiԩPNRSow 0torv( -:gANJq\Q/hLJL?zY'kZ|z;vZ&S :nus ! SC+PPU:5`\n1s\.35 WnM8ŖKY4*tCG0n8A 3+v lTv|JF,5,ёeuD@Gu/>% dOWiy veb#Yf?pَHhJnlJF! S]gP6@U2UnE!8bm 2xQvBpvL a{Itv(}*]{&/rR!Go Ӣ̬}UTiJYH~A '0pOs`Z!0?T eH>͋@运e'6b)8ɭ0*|^Y\ߓ$|y1L2dGd)NNS!O*qc ,d'9{ALEA@'/}hi\ d3j̞32b1Gd ِ g8U*m͏%+ E•wUfrqQAx"ϗ(%' VhQ8;)Ry09*ܓqA`'s 6rXeUF(>% g%JC J;P2i`.|l~ )3`Q"thuS/G ?۟O$ҟ&O';sJf -1]n;@L`8L4ng A'L>#\&6G e ӈ߁ܼa T;FrQjBw,,͈<%AuB cc=۟ E#;[d%s7xO5&9x8 %NdQz֡CFqHo{8PBuLހffXUp@A'`7?bF>F$b p?l22|嘑> rfL&BILeՀZs ۊv;p7uO M,3&H+i1b:y&@3{`lQo^H%|Mx;y1% `A'``?\i3pC|~4 T^K,rA}#h%̤mDp;ɐ›Hf2lt_kn^%zx7C%w3ye#֬FXOe-߀X~GDox+\2HO3ˆtx A'ɀ!&Hd{@ /kFk7#xb7#oG#XF#?A'I'X<}bW_\C!v@b>9' (0 gX.i'J:5M/p^rw+ bn[J{͏)M4' R\J .M=YP3chnp,ooM  -wHd|zk\þB?65wlD,X7ۉyw:E RCq"@FSs{ߺ"BUZ;GiTM?Sbw1h+r(ACb? lγ#cubdvxeiqP UD=gclAr"3̨KjeBB `FgZj>ڿ)[s6JQNny/͑#x2yO|{ LftpEiU0,G A''|O>'|O>'|O>';[)g PN+l0lv#K51 3bPC0{JelW_oSQR ;@A/_ܿ..N 4 @+08y  rnε0+b _HH@g:\Q7D?FIM&S[˜ 0K?cH@rZn[z+lL~''s1=qKGGq<\t >V~< Ǡ[RH4Cxl !f#aZ;YR;??)AY||Y]P xX\k"DZ-tmƒNՂ>ɐsw>MfkbދrH0v5?y|<l6 X dwc.|lAmc>[NmA}H'`}؎C,nN_f%q-{lA '&v {p_+~h@!r@00"$De2hm2Xȿ<?4}PZI xW,IdWڀτ:jd( @lGB8QiӧNyB<; ߞ`;B8@D O1d7L<0c 6 A@'`&08'M"dۀSb yôĠov\%2>f_Y3!ė9A`'LaAhՑߖe:c8K1GBH>mkGCSyzJ#x)<]$XPbt~~pe*L1P/"d^210b0x?gDs;c}"/o$0@f@3`3,n w\?5`!e =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr?;  Wb+ }AU?;N{^N1)^:3;6 ,(6#q`(I[ApKW`+D鶰p 6t H- OnYrU%"*|i9[TsR`Т":5c.$H*"Q' iJRCSa4T&L⎌@&͞"f@~dbъ[lXȘJ <,h>)03\_&|$UAtAߜ(jH޻S+̋ZNwE&/u9(JE~n|1m#}@i+q$AZThSB+V?R]. h@.K@{  Np}ȄAW=v E%p@;jPaqBl+ 1 ?Š{HvQ%\+åHjz뮺뮺뮺뮺뮺뮺_?Fz0>DR/ocS{Ѓ 'O6%#;("f#;kE@)WpmQHZU?=rE5vmQ/ʛePydd'Z>0w3rjz{& &%PptֻA ߻%C'M$%e/v5뮺뮺뮺맯U[@  Ĭ1%T|/aVdQ# Z@ zCׂfȃfDza¸3&%jUThvu0\ASH8ר! H-28F RX h%S#GCPuBq c+m \%",$QG#fa K 0BGϱ`He. \ 1k R+ Î3` e%>44sȼez9|Hr ÖM"pI!l͌?= dɇ ׼!6#;/rsx ŬH,.(2bg Rk3|_.A /]8k35*0@ODT0Â3‚1\h19҈Vd30 .U p~x \O׀[xEH)3 SbԌZ3h_y xaX2QT@7 ቜbH,IeP8SL]l6brbqKB 7Eцþu=iJUiS^'*Q4s3N@_%E4iu&IĖe a%{9%*:.%Hm F[|3Kn8٘)5Nj,D@eU?,Cx-:cGpu1Ajߚq꫾Ll2C?kG& C9G}A%eA܀aԨ 94^Y%qP *ӂ&&dpt?+r/ߺ\7_J%f;U ޵)/e.|>%[n<\̜2v:DB4FFq0kpe(`WT`)~y;QPF!U!Qo `:V|"\QDbCmK{W$h|l`8e^$3Uaq PVZ S a'u/X 0w[8HA xQ:9X {˃VDc7[8*C X&p N{ ! ߦp:$l]oxju"'`RDJ^ w#^P.G>?fOׯeW]u]u]b8.>E~i+6,fGv?.eu]u]u8!g'{O뮺뮺뮺﮻祈뮺뮺뮧̬.뮺뮺뮺뮺뮺뮺뮺뮺뮼0 `LE@1YaJº~o"IQhp8PI^@>% |`07@`4ХN )dYN Դ!l?Bfr u&exp#@ 2 f#$(>p>5asCW*b&+ȆQ]_#(>`=q5{) Y( AiEi@5H.|p ޸Q&WCHL1qOq@XY7 V:JhWc0xZg]SFs<@@~1 E0@hm3iH8el&F%r[!!/?`I08w( *s Ը+4%s)M Lb 4 =n_O gFCm6~P $-@~NDƊ0Z@40'2`E*s GpZ` y%eap$ h<#EdD9ZnF<0 LygoC{<+LXSW09@"/_?A 0|DaB1]F1Õ0 LPL-|##7 uHZRRH(?3JR Ц~tc- v dcYhߦ<= 8ROQXx "pXd!.&nքg(/qbWcDO5pȆ Ď#dD0nb193D$! S^@4Ĥ hW *1RBs M$j@ =HwӅ00cBA@ YhGp樲-^э R&_ dJ(Iݲ2! 4SO F gmTc۹ kfE([e0 [c-dbGCwM}yogAGB{ F:Bv1~YE) GpC dCbDY0&QZ^>40F2 k\ܗ"k-N2G77 (:WjS_W 1dJu{ wc LcC '=*X^~f@ G37P Yv bP[ڕ`YHzUqO2}^ TAc&xͩ/CH8EވR(a.qg…@u 0B+$/*-< ܫ߂̙pW[t&kU})zBPj f$i)~@jߕIO̬hnj(~|? ukHxk m~5B: \4 1fA LIZcKR6D B-  ^{;ft"1Uufag@3!(h̄>aOv+9kq)X=Oq ,s)?l2g&Zm@PDKXr4yTL Ar5m r}`Ym.7~M@ Ӑw $ao04 hdzB\+ZτJ`??6+B#~G?SXI'@RfA kbA{y?D/7!aq(My{fCJS?fxP-b\+rXDV/@6Wh̆a@ie hz=9XmpgIt84R!azoU3b䊆{*0W)fߎC!!5N}ѹ./ RWlebɩfy!QF? {|P( Ho1u`;D )x{'M{S@/|\Ĵ(=^ v{PJ bPĹ@SNq^@r0a:]$52x}&2&ʁɒ,CN $D?nvr=v?,  2Vݗ=BM cMlV^wج0Z.k<8Ҝr?X"e\E_#1g-^?\ڂ0L` lsZmRZ :pA UjYn!1+Ei[ E16z{ be[P|V9 P\LZV7 sN<H_ ^ NӯR/jxO9h!1G{mZD 7 Ч ]/`2 g[)SE"I1km/ ŗt$B/'2:,e;$E ) :: 0Lv#/eÖrvl=" ">)8@v3r%! x!B&D:L~-~by#0G32gEG{! JªwqEE t>L<)w@K ɇf Z6Z &I@ RL8l3*^pA -I@oXD5hU3Ezf($8.~RZ uӸ#LcA&@7l rQZ;48E<NoCM±+XC4ݺx.Q~! GZ!@F;2z }$u rASYgQ^p++\U`}NեG>5xT ''0p|Hn>)Լ` d!d HIL C=93 F+JA'j!ֿLGhxwyO;핗 {^ ZjS[}wm$i&n1Ep)v5t0#<WHE!V1pr)+?Vi-a;$mcFZ?|öتn`GSMp)FDu`A@$ϲ H:T .pE ::&u mhS]&fD%)+s0^p:mUѾ `@~t؈ }cO$XU 'h@{} q JJ Rrr@R/{hs mZ6@Ma!oq ?"vﭵ1۾b^K(_ )Ye 3|1_r(IaR0oab%[+cEKMY"@]?F"_r ^E>lGc>YGTHpXysY<r©p`\rAZ2Po9- xr`GHc\tv a<J$`O:Lhcsw`<_҄&Zwܝז뮺hCFg}45߿kTN(s(!w MߧRKqBP2'qD+ 01I K޿0\%ESLr8 r MaR`3YC%߀=F cໃ~r\2?覐7m]u]u?~G_lz}L5]u?ۃ oZ$rB69X$?K Uj# o\m3u,(ɓ;ah}9Ew| XE`42_? hX[k|`6_%_ @ؿ?D+xX4?A,?-WbtRH!z7Y^_?oKᮺ]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u\W^! Se1Ykp3%7G  aj$+窉LaRgw˥g5uÜLE,Ξs()g& 31OH'̥xC| $3l"b9 ~t/ {;p"$Hcڨb@mnl108`J<c@G[PxQ0ª$ azx?*b>0#+Lo!/"ALi"VRAʫNsx[D1RJ~S-1(bqG! SL%L1P(]` D{\dU]c*2To&۪ܖɮxC'! *Wa|iO8uN L2= }ind](7)1ہdD!H3ae=ugd|tέ}rOjFC "P3c@X`A`kGA75L ٸ%9%`"֜NVBS LBMŠ Vn \^).& x!!SD >& 0 MD99?ۀ8Ԃ":A܎D7%Y)`G~NWeRto`9y ?}h%zLɷ1Q|@kO ||Ə'0?O%?_-?$!*Se Btlk(bP+^]vs؂*ys'`ў8cRKqU;HNsn/2s3^a?bA;$e/bblar?ye!5Be"@#7sr'PلFc+ Iv:r!w z-Ry4stʸHX[Le 2sam -> PŎ {{tIF?z8N{$QtN*:4YR"_[oW!1qp89L|iD=֫ZmZr+gΠOk# V3M1e$[t}TմTBp2dsvUx/or`'4\/ƨz$Aʍ@Ac!TeaP4"F\g8n/k,["4@O?T0^TUGZP@:YkH%wbwvގK%0]GZde5$I#xDPU GFe}Ki,(ȍbHXeWA7|Dhĸ4|!P(Ca~b>!TEbl%) U`s/zܒ!K<ӠƼTG7.\l׋Mme HyaP6;1XiJ{,zOg},Ti cZݵl]v%nB+0v: ?{Ul:;-9jHO`b8DӋVom+W|.Zy Lm `-ƱjY4܄EMƱ[Kcc{ES<B*3exuT]LsTk3u}dM`'Ie2 ύmp!?f7%gLPp̠sSyF:`FLA!lK!cNvR̜\xޘ p$]G;_?aWLX@xCZ.f! SőH14J A ddIJ$loϑ@3l[Ԏ_G N^!M5t93~6MŒfmӴ>UmRDaocKRmR'1*µCst_/b}bJn3!v!סA"U4 "8pE ]n$3>8+qu~%MnMˠ:x!`R['C$U- vJڅ% Edk߻l,'G$PVI}\$?! S(E@7-Ib(%Q%ҿ @K{s- I$<@ ֮|CvYl(QCs]啨թ*'KB`H:S&գ@x \jZtE@+0s2GlcE%e0ճy榹ІwdjY- 1 (4m!싆ң)l+ $$j BꒈMΥFm #?VQ$! SE2!@"[(w$pDK#>!+͞FBa3et2;6*(vũ`8B@]mZt}~oGkA`6TQ 6ﬗ)u, uWx #`Y@z_}w0Q}?GWBB(,2Š0DDT٩OhŒD[V4`\FQ4[9)I$QTDS_`=!Ofdt CϘ&?i={v=.u<D5$ԔQ9x0n}Yx鰱IY1 lIyz"PM0AP9'|zi<|ߢ ҾIqW}4aqݼK*$0XHKu ^Ҵ6AjA@KK1 Ć*b V% HmhPtN0.~NA '`DZ@c2hW0'+ZܢJ?cBy+|5阮^;q+Gy1{ko?6KLASQ +3c6νxnT# ySk6\v7uwl%0x^`3a zgz$ؓ rW|Vd>6CČO3c!f<C3Gw= ד]"Pt.ST;h@A`'TX0 Sx R>Gֲ>G֠GbL?NBfe38Y SdM A'Q mm&0[)xF)[zIK,1,#<0P;hrJqD!VƓ{+3p 4ؽm_/. Dt|~ O)#A xGU|>/Jȵ)=^Hlp@x.ˀA'$;^,H` $;- r[!Fy}KB*U@h'//-ĝn\lBpۀH Q#zc%>b .:<[pX"I`3,85u{fYClsJ_A'f@d% 8Xx2>!g{!d#R4xA].b<f e>P +0K*PT UU ./YP8wf)J&H9z6LlR?(p@ Add7@x Uh^+RLh; |8Usސ^! 7Jm6 7Pȸh( M;'" >cZP/oRR U{??#????????????$7ndp{ >@n?B8e~@,kT,9XZ{;D^I{aPK C%L"偝!pqXK(` 8N/C㾨`@T:BRχPKTku@!nPKg9e@,Y^zH|7%XqZ8&B@,񡠛&A '0À Q0 <@ _r F0p[1Jg"Ae척tDh-N02rY.e@O̧L,[bA[>fOwN?O@6%:1"o׹ M\?G,`3.;'6CH?ۭ@l V<߯3]>~_$Wol`ZI,`⦙0-7\F}o7] VlCH/0ɠں=0/_]iO~so?V?q1nEI>!jSo}imK_yJmbIϓf{|A@'Tb@t_7ܷ")E6Ÿd!nߑHQTr}z_0/^4%? <x(mfɃj $|J}l}I0<Cm%w?gg0m g 6xC~}ܛ|>@g$ 4@@|X=#p3(C;g9؅Zュfl| ڃҾ(wC̣m@'77H{ p ߾O! S,i&f@2Ouw ${g۽;'~yɿ:/.n:! i:dL~?1W|}c>l%cx4}Gy;vI; #wlDB*gg6>xH6v;vCvto\7#G0 Oݝ7avox3];FJݾ>0r}F`Hk# up! S$Քx-~lHG/˞RmE,B y6 cbKዤFvdq-K!QSDž*`Oo=6CTS/{2_xM(J6[${ ;Lbi_09\ـt]݄t@I zM(4N8WU{vЊܮcxPFAÕ Ɓ>\m(D$,KnTfk+͟<\xe+lg(0#y6)Jt! S`FwAP`PVAY뙹fJԬ8*D͠Avm` 'S/Sr̓Gp:|d\Ջ ۖ*n6Ʃvz< :dPс&kN `Tk+)n'MƧ9<*{p<1O$ژ " , lX[^R0+XYahg?c0  i~&Zo~Ȯ x mH)FQZL(R#%T '! S YPX>tлc 3$ 0f>O+XU ʰl͋*ngh́?EcP;j|P)C Phh69;Q08L&whtRAW09! S>M)JYX k޸U=Z+f&XЧfFqdԲrN IYxE"֦} @Tz- SgtylJj&È vFL;J5tQ-uOtIW/U905tιN/Ew ;u~Ui0Yq ![/ -/Ř;[fmE(qDuw> W_>Y.Aɬz>s0G<~dϤ)[IFKV"(Y/Cz7ַSV,h@oYK|YbԓBh:`uRcuhfU2pYT ϕ$P):ŨBEҲC g!8D-ЌZ1Nԛڽq0q?! S̈́PB0ЬA &J"9thi^ o ۩5贏l0뙥rz4Em,P65^%iP@VhҤST) 5-bŵ;(^iV 5$e;yn"KID,g (Iic+(D[oz+0RjlD`4w,nGn.wT.VHbVN,9 q0R.Jlsy+ʙ.ׇ~=B)4N! S̈́3e!@TՅ4oL2q'y օCC%:(W[Y R[EEt-]/5f%SRM9\GNMNe:o𡂤 H6dWMx5}Q)Q]ۅ-^׫:L<-8]` W)IAUNHbP0_3-O@ 90ϼqڟ=2ZO+ܝ\z>! Sͅ>F"~BP;8^wh W Y^L@頷(5U_&RO %pCfGžgC}g?Tĵ^b{!Ylt^.T+qj emÃiaxLgckPokj+PU V$ ųI=_E&2]B u36W$IRȷz4L (X-ǯƢiԿHRIZfVHOk<ǣ%Yw! S*GPCA(eH[*h pGPwPۇglN!C{<=)^A:|]a.0k֟nBr%.58b h^lD[Mkc:UPNK7e>*{jw>~_~'H]G1OP!5pv` I./AkH0kwv @?ObG6s)~@vGUIE#"NJ5!#VQEzھcbeBo! SISPRTBQt!^zm1csqJ6.Ȉ?PzBƨ@wi/8W83|åǶm] 9n>3ݖߕ[*O(a@0~+s!I3''v.ݸ_#MCXd9^WP3Z 5 `X@+Q6aOc ~̙R:zWZ3>@[vڙ8E8N3*m%o{G9dMZ<! S>*(YHR;N7iQS;v)c0GrCR~P3c9NDyɉVLʸb2ܙ݌\9I ltN|CӁlOgF.!.CgM_g 0q?\(Uh׏wpPJJ;(-ʋo+cG$o;7J) ! l*r#DCTT^Ms7eJm?\=9)D,瞘Go|[oB;Vel! S%!hEv·8 .@$ݻ  ?֋ޡl#b8᳾ WZL졖Mh9FX uj;m.˩TWKiOTy%>hs"*;[n{-WߩѠ.;3#fcpzKR/(Xcot*&&PeX*LA&7BԤ"摰V(#[*g,2j/xle?6wJ &VXoaz71! SGƓ%UU6dQ*errX-0}|t!:@J^ڨ7ղԴݑؑ-pJ+]wev u-|kFqssHsfWbDs~ Eb9~~l_S@`: $8Bj֌D|H"*wqBPÂx0X '|4$NL"Yd2hLFH1 7do{{$*= 8@3E*LdՉLQEҴ- QO K&wVm cA'5^.)wρә.oaKA)G!B/OSR&?;(Pk8z6u3kv3bnbzyyI~' %ژ4&N#%>!2?{Ü w z!uPA'?*6$VbOG=@<>lvR/ 2pq0992y" ߉=s.:׳x%?G'wG~C$)B.[NN*&/٩<'!ܨA'UQ= ByY‹訠s'%쬘pJ`$$ 2ze g ۫3x,&@>RR{>mV<|T9(qaea1^NI;P9=0yCvx 2+ldl(LJ|z.7@cOO3pMq#C{=ĉtT(~MQ|veEN;-鶵N G蜠lvb67r7xeMZ%UY]Nf6%kjaqs?k|U & mNo7Rµ' g/u8ciAyCf q%Z ."fD pA'L>SmYh!s T "cxG</3b.R uU4ӸkDfQm(@ysrwxǚ'<R.fmc9:iԀA@'`KBoi1p>j. T]2wa&.3z 4mQg:vX  u7:oѠCeK33=z*p(z>&sB65lF ӟ(;gowDbD3A< Cn0/# WMgjkTM&A]'H0sʪ]tEp`կ)a"o D=vq3 tFxeX3s70 D(ǎhȄhV}i(61cɹoK›y S`wO|FG#xo? +<;x瘹> ;'|O>'|O>';zi? LI`+l?0=W(eD nXqXWp9(8l N\@wS.1D̽6 &` c"y$14˘\p*`3YS@ ˜|?p! chΉ)O^2g,@%v(TL%X09@STH_Mڒ,ކ؎{*5B'M`LL _G X[. ,߃_ ??*fo &T"S̪nA0ZIDo4>(a?M3Dǁ(p}LN4Jpe3r)Y???xoK_6ࠩ_}]0A`OJ ȑ%l=ռ._Ӽ?obQ()X(NB, \xK@a {Ǭpr~HZ?/va$;L( ~X  C,/A]rUpH>{0L|G6DBɳ]3 u-~[xpA'&1?X3J@CȌ , ɇ%e6q4> aG#: 5 uLMLY>>8@ ̚b DyGU\qfAݤλ@lllQX 3߉>pKxO'``qsF#xpa}%&BO'^8&uccüKA'LaAie~(p!fe=і2+ZM4Qnh>dT<֘Dǁ( 1"94dİ{^ xo$keB3d4ׄ9 >t! Sm% I P`-BiХ7OnSV;k"\q.m*m'E| pLSr|uiHJa4R挶UQSwT] uũN]`iSp0NDav-{QQ .~ ah&=K ΜL֧ 6k/6nvyµ3 ~#Z(DAaP+rVzBC#sUT{ps<}+ kr! SM%h10z0@Mgh{m>jD1ne d0g{ f\UUm!8)𛥌)rE܈$ѕH%?%y.540HJZxnܦܷ;aB%_/~-z#SyqoM[6a|N,Y0{yO8f(v±14:~>xkPkB3l'Y%?@8++0*X2\h62맪8*,z! S-PaE%Rё]z+nT15 EeuKzp^KO&9U;:5o14hqC))[QQ\3,RZ =XTV_vfG! S-֭y7gBRJØFC1wX8]heP{W `\6bB)1&$"G%4uuxt1O"P+lf1NAc qe[q^7):bDH'lLQEX/d#Gs! S<L39Uzl R*,jߨ)Ԩ:G/"3\ڿN2FXE0?ThII L(iFPҞ꽼݄(B݆D&ޙpg͠ZOc պSZbH=u|ף?8WÕ0Ds K#B[cĎƃuRjorVot:ڃ9KL!hCխu4$3yGc04 TEM@q! SSTBRڀ} ݹ@ ]]/@-`fDiɋ8#OBÑZ1h!6YIYd :4bD솓?5 -jؑ…o`;Vd2+kz)3|g0J L50v( mv7~0&x-E,nq/;۟~!fYDڰcҠqg^o#F˄I_b _?aj :m|9A/x}((t45!SKD1A @@ ǖ]nVP$;٨c`[Q}KML B0*9VIxҐȖi'ꑂeؔNW29,c:6q'^y$\Z=`7WjL{M5N- D0ksj_Al@D8;oBZO.b6awۢZ -*G b[pY6Y1 ,PS-~0 bUփtP!*S-f 7`eʵPŏZet>[ JwZVD$5wiTYoX3j"'E |a]r@_LԀ,ךfcCNE9@\N)꛽l@  ')iJzrU`9<2R1S U}>й 4Exf`%J@ e Xv??)l2 #4\DBk^!6Z1XT!LDZ3@^kE_%$UK S"mKjK[pFNbFv.c9c fJ2p]ai"X h0o3ʑ1Uǔ!] /4gA6ɆiU<?;qi~GWwFwשׂo#y‡9Pk2s@dIL܋+_bo|9V R $Ķ\[N*М8/N)yq $_b;ԣ BD 9ߪ,FTUB$ Ȍ k/źVO"ObLL6\$ t쳕2XH/ax3;=xS aOt9Ic/"l 6?ZN٪k[xUUUt@}C!T&"d@ 8V+QZRUT dkQ䓻e'ymOQ:RJ4bSc։V9R+aL$KL$"UЎ$Z^TR_IbN8pnȴj2Zr1Qm`]-\%PTYeQySKR؎fDWUggZFW6#Zɳ>94j*?at&dD!Dl`!T: 1PBUUUP2R;B߇?/ 2Id}H>Cn- RvOޘ51Zsэju"ҙ0Y!Hʞғ-8. ! YN&TH;.ṼӌKeR25G^%ߩ:]->xcTaAa$O DڡdzqTNt 1jV~1b!TUD t6"JLWV]UՄ]WCYvgĚo 9e!T%шd6)t(LG- C 56Q!0JhHQzr #B=N !֚4Tb)u)Ps5$H]V|*.b҂x} fK?CMϤ/ pZˊ.{K ܹ>!5!T ġ@%PL !@KO~՗\dT;. d. h.7Hy}}cM+)ЅFb ׄ5`]y*R> ~"qhCVhqs9gZ% |5ן5K*r!0ƘmIRPAd"zWP8-,T^G91p&?}NeJƄE32 %TMkAx!T-C1 *ʗU@['*3TC=~٥ܧM ZO=Uyk/*Ra AVHCJЌت!XNb 2EQ_ _me3[ i`fSܤ#6)BQ^odIssӔ6W@\SW['G yX)nD30bX JOv,o)CO]թV3 ,-( )5@}Y:n*oL4>ET-Ef! SbԥRUZF`~' Yh\`)!'kAɅ3mzr{պdBԔb1!JԄDt.X<̓"4=(U[V4I*=l0W}@  uY6`HiT$`s\iCr&Xhm+Ƣ'P"J$dYXz>{{ͳZxa` =:@I(XK3Š ϸR~h?߂ \G8c^IX##Hz! SJUUb ekDp*P,#)f\Ԇ & C-ʩ*ftV X<_6x% +&zT9sk ע+W`#)J3u~[rpU;@ qDR~ndQJw喌h1^;& ;bU_[d%raRl*`!rAT,0O39Q ֈ AWkx^ZHW:1UҊ֐@S1L5Ds?xE3B|! Sm>)*eA xk|i/R ˱2K앹 h},#B]bv#+Um<$TL]i7z@_{7NkI0]I}2x>E`.DtRј$G}_[zټucJƅ;AB, 5บj".5Vq h\Jz&ꙺs4Bp);b;&c! Se"1Q T fj@Rʁl-!^BS Q50`"KjD #&=Aihb8*" ipfȗ{^R5T`;R%mK0(ɽ֡bgvLs)7u1?OLv G@DbZ [|hZ@#$#vZ3N ,N0z`NvϔFY8Zjm<A 'oZ3$oǀqx0#2C*@4'# Lb M>p g[0{77n 'hSeM`3nZLdt] fPpjdO<ʘUL3znE1jS}0M_>S* \qd;x8C} j7{Lx ax Lt?A٣q'@A@'2)?ff ! ޑ)}=4< A=n=&0J?-Zh=%a8;y_c#-6_?%BPJ~sJV>V%cQ\QЉϘt~*g'V'}sqpjf+q5 q1y3hA`'g0eMYh DdEKM?]H)tq9IpJ#yG@f dm"6LP9S xp3`3cLfٔ7(v ɍcd|wwBNK#xª18D?ova6W3wμ!^f#R(fA'@?YUL y p&f "g^˸xv6 y _I{ak/R ¸BH1|.~?&B~_}gI pL{*.:A'C!G- Hm6ۧr.,XrC<)&G߀͈̽&+hg"ߐ$Fͯ68s <6L?2++Sww[S~G L_fAALb@3`3,;)c~A'WolFYkp|GP"Y`y(e[_.(i^ʪ`d|_c`P)QG}|ze[rIFG!{%3n 1 0F!E"xm.eFj`?ְְ\G|m1?+z)(W+ Y%osr@@tf0Ipu)cS}xJ q4LP HWcn}]+f7&p@a?K'./*3J}LA*7ղѶi͆NlcKF:'C%: ur)\^mî]`JA'$_x1` xfX&S!$DV0HKDuFMqAE.y♀o&r* ,B?{dAG/Cl\DEG3y~/z`ڷ7;'eZ#Ÿ'%imA'$ on "LФW-"alC +WhbnZWP ^<3xPKаѿW&8'?Ɠ:>dzx 4<wt`&$)㟒2&A '% DIp -rQdK /6cyLFyU{v4t}nvY@@ 0C 3BLi`0Za` '@( QX=0P x|Ѧ~#/ ޚ5#D%`?q$?ϚM`\&^_㇇*t*Wzo~?CN-m'j4'RhzZ *>?ɲq3`NيR hy?ؔJc|F[Y=pВ ##7_,Y ;ԑ=G)'!ۿ|8C~uӟ?tD1n>[ ĜM??Oz???{ H;n pXM>a 0$02(74c%9F7h `B\!ij` `VBr)PK'KŮ,$ן,ƿU'iv'b f5#9@,9W ʡ6p ` `DBEAw?Y%k?Y%:֯$XK0e1_,R ^2`A@'B1<Ɨ@ _#>|i)a{|Mݪ Н&_Lܗ,?f)SLYh 앗%e? qP%\@[05{ `G@j[}p^JP_\Ffxy_kBNpi ߀⦙0(ͩV=ߟ>#wV$3p=fC?՟Li[_M m@+6X:֥{bA`'[ xA[R(mhxX BZyP)vb.Nq:c^;0lDD.4!*\KLl-s ̂Z+4l'r囲v7ocR ?;}7@ zӏu@o,Pc}Okܜï|j+ A'WĠx\GIqг*%"|JvSep 7͓͂'Z`|͏:g1u Bg,MqȚ\_,w2%z ht4TZ?G@3y,l3C>-𽱬`@Y3B<}N! SV!0Q0*@U }Қ4nJlcQK*'{@J > P~eTvJQcCO-˺l=ρ۔O5 HI O$NWeNLaP+5UD ZD?v^gw0P2͊Dc&VmbJ6ZD%#Ta{J0s|O7!7$d9a90 զ] |PKЁO)! dc-:t}q!! ShPB  U+U/tfV &1GEǓ }x \?g5P£6PFCnc|@6D4^e"(r`6{|=L+G7qo<7)Hw=?MtQUd繐9W W !@!x,)Grj;r6J6 At; BM֒.{Reεr##F]2sY! Se"0L$3BATKʵJ$11Hr#P60RZ ʂ^9Cڪ ؽ# NAE q 檚L hCD5!)plq4do ߣ(%}n5ۅLN}Z3ZS$MCRW/>љ; a( F2 ¬&<%Rj#U 2hcIbVz/tg{AGʼ~! S̈́R$(&>MU(0pYx3a v2AG1:+ztˑGo*t97Sk1>UKr-fÄs0#'͝(LpK E"xQV; GBcJN&"rf#ƵIDGr̹?Ew༨@ !F` s3[+=#z_^@zS Rx%ꠌnj-rP:%AkՖskU4)W5V9! SOJ]X"l "ihP`͘u |Fk+s{?`#tzBH1Q|ӂa'6d,X,1cfrs4gv+mc--^ UmR]/)aR||;AӶ(SwYIzgf>\E  Z {@JB!['b<wz-ߜ@Aa =c)ƕF;}téʅȌX**#(H4nQ:a43lŰj: ! SmMYΜE[iH.c{^Usx%0mZ7ݎ/s1_ẖE|g_NqkW?+z6D{G1ș컜25I/7TAɍr`E|I Yɺ0( eٴM 쏧{)-H!ʖk-϶N"aD;l( 3qLc h8ҮB^jTZwOׇzLfT/Xkk>ˠ (;^f:g?MJ)]c좂.5,9|kߗ¹ke;N! Sť$HHcG1aO %ʱF1Cl8,(yj<ﲁUU| "+x+79]]fr%歅%E&^Q! V;TSI1ޥ}zUD R** dHˬ^ ˖(T5-"UOYFu䆇iQM61(GYE%a !)#ODuKX{4c2;%(ORaE)~NTxm|}6`Ro}n]Pԅb+ic,oH8ߥ^Y8d]piˬ%T$xָ_}oY1/Q AB,04kJB?W.J+Rq\`! SM):Z*`!t)BY*x/]L1䞏R)]ع({({=Uw=aM'^R}Z׋R |(E]16la _]! @~jQ7ΉYc6"oU'9"Nx-5:@4ÇaQZPv nxR'xZq"m ^WS{ƸMnECTڥ|hC)CGf%k]R ,욯bj(UK<5Fҟ/Eu,~'! S5" "0 -Uw=%Y3$9!8r>! S"X$q Jȫ*hY$ UI$*LK'Q h$%3ڈh_ՒVP*gM s7>VN˹ƿ<ۜ9ssn4\Zsw!a m-x)`!(0 De 掳[V1%4`V,Nhj*I*-;_}guY*hڤV/IE&|iy}۲4L}prsv_ |=q^;_!!Ԁκ,K{|%d/ c҅2 = |ldk EKA6(LlSA1)Ͻf2 yy&?2\ a6: B}38A'!ExSMu]:WbT8b!-AOiHr^OϲK ≼DӵZvH FLu&"w ^of@%3|Ewwxr}+,w~0U'/=X ːÚݰ $6K +P:u'SX #rz@!0J"EEK%?M8o>s G=0;BA' i!PqUU&{φ@,>mA@'L.xNBZ%|&;)7yx?QWJ=$>2$\@f`vE Żo 聋aӾČ 19 !J~sX{9ԙ~ : XqkLw@3`6CqWA`'L_ac1?jϐ a0mmy%R#l^&3}r_;$_fPtV'ЉV|'2O^8oCwM-,OxC|լPsa,˘?aq+6{ؓ &tJf~~<: ~6k*BQ.\U,d=C݂kA'ɀZyqrG#xAV'h;D~ҪzX@AIp}4`|u8׀^ƬRso>=}Ȥ@9X8?M3}*@.A,LQ_ ;8PzdEUZl,Jq2 N+iw: TʆC!PbX5~ƄȢp*N,A~Sh:>H{qclAr( ~eBX1 }M{AqWlY-(_xt]eGFbQ#xM rgLpCդeIǣHa_(a wch$%}q[A u*?͆5`vYy1>L8ٕ>PHbx៟O%D `laC2-xi.+MJ*ݸmx]?@Kf ͝Cioƭ2,`pJ9>V?rb_s, A''|O>'|O>'|O>'"1h0NSh tx &`A"֝qV*&o6`R`pe||;Q-aN ԡ@!@~P1a_Zٝ ~-_EL 34Z Dx?XsE ΐ-)eBal/lm# v WY1zK>p9L}?|<4W6y_7\8ڀ~/D4)g#7?Z# o)8wp~68ͮLS5J! @W1q'&q<#kþP L K`/"0nQ[Ǻ; H>? cgA't, %Z CFd@zs|M0SDo46b0xgG#?B< @fKÔ%?@3#p`Ofur; u9Ԋ @cw;?9 \Ua b)ǜ>!9.L ^ -LtΟ&cRf#ANA:H HA'`0 *"9i }[D b1MC0<Ύ"2GTj1iv͸r<; f 2ISX !Wp(Ļ{?x šiی`<=좐,b~cnm@l׋cz*Acqv> >wqqǻQwټήW7}f~HInoea}ɌxwxCje'>}-k3^O9eOd_=C}(e򿓓pGCe3aJ7J<~{>d'?f)aATp=zjh%O\ Č|{XkU/V|!9x"5n[Zfsp75[TL2~&Ui^vT 6fP3Xﺯy!pl ͷ?!Ktt O|;K[6rx#p0Y(hBJ>WAHB/TtNacWqVOw GḦ́ G7R5as@=C%Jd_!jU F$Aej[*%R"dYV*TttV }ؕ3j#P֠$gC)Y.׼>'-lI-MWƕԒiR^NL4)$0vTmMhGJ1EJ\% 4fX2)I|Tq1qSb-pn5EgTng$eH˄b4uEPdN>*zȨb.-*yXBDUN 1PgCC/`@\W?-wfU(X:' IǮJF9g ф&a+!T1D"u)Q ].IxS ?xy4kio0ͨLp;6;umm mY^CkaN(p:$N\}ń99T]"elg]-/4vUZ"�b (5Y'Zg)X!1Ѓޛlmq-:}f\얕'S{昼SYx,͆iȒfUSIBw}KV|o)i²mw/޻<=>j kf4Q+tbM^)Dr@y 5eRBpub:b(!T p cl![ɃNэIUcn>F()b|0nS گmyo׭c7㺷U:2]^:+Etxݔs-aߛ*Kq*"~9?ȿQA2QƸb&02*Y1X&Ba3XHns6& C ڱ]6rμa]E:&&iǗ dTF$2!f [ͮ2 *lүX$^ f $F4 (!T|:GPب@ T2Jhݴȑ YθbG-^Gʲzfؖ[:#9f5IrҜ-*J8%f4~wP[E_EBSᅦAoH9<V?q}io5TnX}Coڸl93 N5wҲvx  @ kVdpech9<>ƭ5Qў8ʢGvh8<=w20 ANΨyDy*Nw @F)xub!TUbA(8Ь apK Զtws:tR[XH] W{Jˢ[5S7Iz5HɘXŀ jAd ҧbd!52jml'S#R"f?:uHQ?!/Sg*&FMȉTi,!Oӱ el+);Z@e lS Y%ӣՌM'xU`Qĺ:eom]Z觚ٛs8ڳhFuM!kt!T]aPLD(j0e5Yu%xBUERlˢ e`]Ee~oh9ޞQ; J5EA]Az(uFw1'$ε075d4q kTm 33`" A+ 4\0]Kk/:Rf$Rys 6J B[N-PuSX&hcwF}N3 MD鞦I+pj>D<⼎ف y +Ui:ʑR>!T%b00"LUUd [+Q "S#(YPJAם#QOjT~w_m6˰U9eYľE$/KOec%*BuS"MpQw]$ GO6%QtKo7Ѕ-W 9YD R{32wHg"%ry!FB٠)FA9"\v/ l%PZI\F}V_Y6m"RGos>~V+K[+Q .!SFPnHS@FXB"zV~ܼ >MKԧ\)9Q34'rPK1Uag>~[ZҽQ8镖lz)4euNSY=Z62p.3B"Bd)kioo w~?SQܼwpmwZb*by;ATsdS ?ŠbGLFF/Kr,n OO_xByT+/B $$$p~O6^n"\wIA`'oAO>@m9@d{$}k#ja.` !#38`A['% :z @0H(ugSb9 _/w z9sYsJ?_z}oG@3y0UW!԰].o8+2C` A '$~AD<e"##"! ޼AgϜw.NͱQ:R`rrfׁ?bz|VUژ2 |q0 bjs|l@Gwh6C~ztYאrvp0A@'%@4DH,(J""HZ4`l ,ߠ()|bo/w rMlː $0` L<`@AW4GXb0PơRX?%P_AAE`hxpeNAkQWЙ_/p-P9*?O6VrMAm +&=zB e͇3𖽎&p. K\,#ATaI I'xf (mz3o~QDq|2`hES'l" SZoо4 pji=X hwJ *f &ȃz8يR<8p8\hc(*(TTOBȈ f@U>DO/Cbq[:lOo !m-=`{ɀ0Q1L8)EREspмnF_)r}*%LLj;S ӄ=ʀ%X%ג׈c,pT`! WgK0~ϛ,Ƽc,ƿ_%ly@,:!3&[WS}A4?_A`'8o, g X0@ NQqsi#>- H`}2 B) !j%^[P/bLW@ #Hd,\tXrx]Ί,m6X'QoNE6%(C%?J~/ Q"Fx: Q \cŧ^bŽƫIS_/pQہ6:+` VϏkߟvP|O~!*b:\!%#E-gw8+k /'9\L$y?W(?gu { MY#7~n_1t}^N]o@ϔͩ[`o:QT eE [R  [SkK,! !r\ ~zyFy9998k{>" /Cw+0 3\d˃ly`  43~f`.AQln`B"K i @}aע\3r31= )lnq S`^(+NpfrGKe7$W1=p`& X8B0 ]`n 18'U =l!,` 3m*y`|y }a@nuF\wąY^A $o%PC :v ;9h Rτ}2A.ŔGfJ5 1o@R |Q8ElL}P漁(^ =,@Is0'+.z h@._#h!GB{GL^k$00u\ßZ*' GT S% &o,6°O~뮞뮺뮺뮺뮺뮺뮺뮺뮻﮺맮뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸MO>L7?qPP(pBceӈ'&@)!1YkB0d ?=u]u]u]u]=0~ĦUJ  TrJь t PX׭ !x!6l6@`n;Acp #` ۠i?Ch, L愯>\ R Lkߔ GSS0xpwf\ڰKcDl MO\fph?V O$XAw (d0 a"(1 q Lv={w? e$a gp2`C׀4 ~ Md˰}Khi@"v>p pV% ~㗳#5̔㺔K6c͍3c7,? ' ؄ْd rٙx0oFWh)l$m J3n [*0 ~| ڙ_0+r20(v/ql @t7?30 .U p_@XY-x$x iZ?º?Fӷy9s)ްu[c!bR*e-` xbg3 Cx!r`P\ kZ;j D ~:DPn2t Ze DHc¢CaD (>?sR\ ҦDh iqfoOe))%[& i%cMA.&2gF hRN Q`!V\р2Q&p-hySGԠMZ"z|C{Āp;~`EU7!iz %K{H]y7a#-/1wlˇT_>%TdnH%ϱ!=@.U0/CЈ7 pʧl" QU [x7&*bR~ÿC{a% J  R>?Op܄)J4csÇ͘z6F6V?.+dVDDFK?мɀL8tE]?zX ]WkoV'@q!$Kob0$[pCAc!)烤i0.C^_u?&(5(A <-kހ@!@g=ۨ"&`#Rf40!(q?W>Fp'.M(3 fDØטBL"#&xr!\s<I82И`&&N/_LXp}L;AA&avמ`dBci1v|_82јdK1hP4` IF?@i)83"Ɠ)2 Ɇ_P'|K3в3جH`a &u' `ȴDdzLCЀÿü?8Nc֫$/#9ɞ8o?ws04\C )jnטRgSW5LxX!z8ρәDL7F+ONM4 y0 c>lCbUqLVm Jx3@Rg (dHߟF?Sumt ÌK“~@&!?Ł .^>%(>pXJu!Es: 4<(ɣ i׊PL 8bgGkaO_?^ dR)'0G8)|U&`ּ&&pHZrS!Eۤd9i{,`}B&tY FM[c\J) jY bPv7$Bc6p10 9- ' )YՄ%~ ps(5stPY\jVoD%2ssEb5V!&#+.i"òm= : - :&&zP('Ziі{J А0wPu~TA7;FF7 u#jĤ RUE pi]4R1^v$$;$!J%vTLЯ0&3*A M@Pfg:*;j&9ЈW,K9j'ǚg !DuXoc*s (;9\*"Ubt_XX%ϼһLUb7~hHH bzsp hB(%ZjEE$Q.94cCT6oDJ0I޷fP1z k|&VQx#r *XUQm)ZoLHT9!կOl" 3󀇨xQH>ʨ54Jl wp<[SU@AŰ!^; ?凋sii8'>@u+*?AHǤ!wD Phq1WЕ@mW4#s +i4 Ӳ=q{C db}?|`,nCcLO(@L {ro n`KN&&Aե8ElWhp#0Ռ|r0w)/qd'0oIxC >閪}6wB# m5@T-43\*9ExHK(!qicYJc݀PB$職uB)/w|{J=/6M5 0vHsƒ5[6D~U7rl[kaae & @#'@M%'/8uj^LcE=T-H= F`'d1(dQ5ŕN[CՕqT 3dԿT3HS7TH {|`7R ʘ 8HgW3zD0I E/b OYrgz?F4{-~,-EUd !@f%BWMCn?0M,M qg0ݼ_L&E7L`m@PPu4p# 3?(=:ANYx^nL0s,5laG¡v)d5XIh P^`am,Vjʗn%|D`zg-62$`pY AF%|+̙cN;Kh\X( 5{+ dY^` ـ AyM9zlgŻ?kVt+TP|L ZA%?EOGx)g  _+ByBrMZ ?Ò~LNJ -z{,H% ’F]@-|=1ӛ Yfp{*v$B/~ rv^I3 Gf23HoPg;{@'Rw`sI`8@v3t% ) C͇Ȋ՛)挌/iV }h$| ݩ Q07(Ӻl`ED-S;&ivC#f6d$5ԉ\zއ|LY&7 / a0߱*TEzaI } TT+#JͦqАp9#̛ Qi6z=NOvAc"^g6ۂ @ ?b)eI c|~2D!s0*=销JM`k$RBS@:+RUdv~~)9M+}@fҏS(ה.A/@Ŗ_dF*n575jdh1)R2,3*\#K`_R`7A,A8in}#XS @gR">q( _h=09?T(vK֍{*6M>ў QQ}V _M49|DdtUļ?8l?ͭu]?I6I7y@ƴc'K0昇{F9-E{"XF9Tm5GpZ>C8?kpS0Yv &'X3cSKp_1ـzAwq +;$Ntp@ 58D5]Fa1Mp@. `r4cgV4ڗsQ% <рGF$%&6P)"2*ȯY -P @ ⍩ PKx2\Hxßu>аz3j+ne ®0?#wrﯔ?9 qG޼O8]K0:Io!|lVw_5<k&T f*+~*mu7z!ja</3:V7}qcsz~ a9iHjar|\rA-P kB41K9HglO`@%dt P&MY,Zz ;cPzE knp ao]u]yoK!heaQ{)hk N(/_ nv@ n{OT|>tRQ 7<ŝb'$Wc\BW`~OQ)IaAlO ~°Q~~ wh)໇氹0gAA\]]u]u$ILU0]u_?[g&\i-^gAmaCY,XiW?KPvW0j>? qPޥ67_BuNv'sRЏK_~R05͟%_ QaBJT\S^I(A?%ǩX”k Ӕb\(!Tscb^?]u]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u]u]u]>! Sb"C$fYD% Ռ1 Bϥ̺^%kEYvEt2|o,7]k-~EyJ$fg.k_+~Ή*CDZ{-xt צ"ce4.A|<!bq/^4_ry` ! BQМ]6gYǭյ{λ1˺.!4LQ,j|:2Z<) ~sYnPPƏ ˃HY.۱~ҁ"2C3D& Ҽg:F;<3! Su`U JID-0%^Ίc҉VW^jmo: PeǷF"WO [5y'. xyh4s})Ă~ej'zM'OSp/ " eP|Whf2T=?1}Ƽ>=Zwv8!D@!y2!@[$a<]?D^vC<)LFb*N[IUT*NoumI`p! S]'""1`E@y\m1plTiÀd4bIc|-NXBz3Nc|埖tA c!ӯ#wG {r8Vd>(WFʎY6rr$$o~Va¦/oxV|g->+ƷC2jAV:aF}njcʄ(D3ÌZ XbED~퓒\rmNIIP# 3ҦՒ_GLbEg':R%'lly3! Sx0׹M$hgDK Nj@[AD;і28a@A/E 5 |Ym8C\Q+lv!C 5Ȕl,4HSNCJKؐi+otE|DD.ۘ=1 `'7e|6\чƎ! Si% hY@D8g>=[1@kq}F{ 0ۼI <600P`4nG??h.>tD|R`Ih؂w;ǁ|m1`il-`myG6_8>xmP$}$mIbM0/  y׷YmrL~UGhCϳO}@! S=*oeY߄(lЅms+!q.yYY{k߈ܽOC/!^u\"vF%kTZdģ8vKvc7U# ] S,a͑&GS\Na#@IYn€]Ti(ٞmW^\%ˀm;{6P(\$A0rZ>)X(Ew"`(ʷi'n}-H)J! SI(F#'tAm%]hE.?m5޻AӮQkkuy#H\BmC&x'ξ㧬 JJ9 ׊BU;6DWO x S,SYkd*UaJ,< E(푱w X)O!/'܌N9B A5XRD#EeftQNJ-% D!NW1! S`3P[*ʢnE%%IzOuXUS]e&/}5TuD%CֽnȪpj[+KJ#ڱ*hC L:1HFc]oܦ:xm^. 9w dA!V0-ǰN$(fiGtfXk楝\#PX  "$xQ@c d(| 81^nҽGnb pEҁ[IJCfvT|CKQ"Z3"3U$'! Sm60*TdKY'c\2Wx{BR h!F:5?$} @Vp=@'vD+9|$ejF(% Q9HAHv6X|7厅Ol1ʘ ˲QaL9La(9pWp! S P `4J qf$yv[ kd"7G/w-NƗk75nCNx)UefnTbdg|P9<9VQz=*gGWe hfM_}m~]Rs>&CΙ0}VgH56¶K|GCrϘG$dLPS$D(S{^Mz@Ukm[>V:5JxxIk"[x~wp! Suf`@ .@5AUWu{bi[-N0qt3#sw4J[RPP pN|e"H]3+EwFq,|$C^aikyV08Eg>u\2M*A Ζi/ *?7>`NAb00&$n%ourZTX)]Jl":AtJF8R.OrvTA Dyv>H! SuJPo@& 32Z!Q+߳G`n֜c^b4{Mzd>}}DW +s,# eaKDfiı N{|/{݁Zk`v.z2ʗJVvn_#JlŶ`;w@Y! ,8U(&,P@Hj~ѩU<¥r"Rl.p! SuhP(`ZTņrk}?9:fpٷTO7u d쁅^ rbjm߯i.0 ѓra : $SHd +go: @@q?JuBLo__gmоOC$WR0?y ATwrA0+""C f5܍M#:JzIg:|nJSVt'o4ٻS%߫k_G! Sul`@ 28MhF"KZU\uk!}Qm5f7SڧGMȎdUcIжEԸH|EfDҠd}R\YImGЎieV401n[ <7D/k,x[ a HRW>*na@,`!/xEi46ru&%ē+^hp(*B 2ՙT)R^#oK⑛p! SRP*@` p@ xz;ԣ ^s;Rv,> jSB,2Ko1¬i ^9xw{Q&ޑkۦKpN>KXDM@BXF <\goR&j#6ӉBr3չ/s Դ",.>.OgOGc:`Q  WYZ ʀ{JH@ZpH~62d UA)޽I{ի>(oǮIݸ! S>fŊQ-|g4 ?}q||@[AF~+Ǫ-۪^1'W*`!@u>eYp߸s?++E"֠0_+E*] rtmؼ>Vbj 4MRK~oxo6nkGfS+>G݅HB8pO T(bՀFEr0!8 /X,!ǧ'IXĂ$k{e@! SGDQGC ,]Azr;ZvA5 WArBs^2Y3?i"ˌ(-G%n1! S#H@(ލP8wR}VJY0&$=wZtb{'Odr웙~Ք*;Tz92O>Z܄#;Z(uB5R:LR/:.qOEͤ'jHBgjtQR5홛Vn 6YHRUW} N` 3%JH| Y0 1L̉3dA=܀wCޕ% 4$-*J;,4M܎X+M})alug2\! Su"XS0,e, '+vGJ6(O,O[VʋUkf {Լx[fo`rNW*(쓷߾*~AP;:~_*MYΊ߸3zIy4,}C9ͦJŠ܊9L..'azcrI*k\LglTrlYA#zG9pSғ!PڰsgEg$?2]HћJ9VEa$s$yU κ2^AFyMLBzpF|%YL! Sme*``aj3iaU4[ET͸LjI6?;f\>E?a?G>2! ?dX 8N ;jܘL+7gf||*| 惟3F'.;`ztgQ i~+G٧e%9 A'#6ʤǒs@ۡBօ2C_="!!G> ;mCkǓ٥y yڀ͈ 6Icv1TAA9YI ee A } y9X 5x7'_d799i^>O7Q 5lw㹄".`A'`gx+7,S={me%P9,,FL;6ʠ(RRb6B&Ka k)'=pWq,ɍrbl2~?8c"AF?o|2 7M<ô_ XX%?['wsA 'a'{1Z)a~"oo{N %v u⭳,egB⿀܀A@'ɀKN8 Q hc>]x@NH ;  -5? u o@Mpg0v& YEʀX댎ϧß~_mG0#8!_xw ]r]N{!}4Ho5pL=p3%ђ"0propaƒ.0lew"9X5{&f I Ï#U-Ƈ84U;t̀^rw`:=ym|Z)öA 4cX% . V^ֲGG19GF6S6#j#xRύ1+@h@oe ۀvnM_W/wcA`''|O>'|O>'|O>';Z.@&x?X@@R02}vlG;+ |4'c\aԌ!~(<œIcX8D@A0`KfiaW-TP;lN0}q'!OIqkp~QciX)E8Fhyaut+7é( xC, 0T#]-`è6 =H na@$x 5" O?y??Q( NJe@e+fR.DiDbB>9Qfꪱ#U.H# m R_ b &tӷ0x\|h'i?=>a73˷~#XG??xoKsͨ((|HpXaHZS968Gq~ͷߵpH+H`Sڙ>$MxJkltק?yLfmNT` G6MLܪoėJ 2œg('#\wwPcⷽcf癌% q< #NLco!v(.2#*pHHIoN6`A't,6O4  <&@Lxi<$#KB[=4W4>~iJ#yG,36<\q2ircp`zxBPwQYurz&NO' 1 ''#xp֋訧zF#bF>F*9AU "60nL&왒@3u! S#I(B|)z€( T$cΆߑLQ D)Kxl,(V,!xw#qw9AiӵzTkx>$zy8,JT ŇLpp'>4gq1:d )1*O~rZJ,Uc!)i_Jr]}է2$OEͳE3BӶۀkŘe Nbxz!GQ! (@+[Yi Au !tI)#ipa0 c-q/ \燅gy%=5W,L! S]" hLVeJW& P .{k,zX%Dbl;U{uÚ?ZxFֹ7UZJ;8J%7+4(ی.@ a'w-Is c(d͎ Lw PVP.BA8P4:M~k8ө,zihtfE*N1YUu`J&NHe dHC\,WPL8IC\3,KY# A8! SU-GP$Uգ*׺`EFɘͯ5nBҟs'6>9X[-b{%(X-wJShԯd8p;* ѳgɆS|RкȴN:ԒBգI ( 56`0@k߀Tp3*{_(Ȣ;nCaKMTE:,F#5G:,Qxm\8`k9L)Lnt! SCI3m5t1OMF=kV8WFET gF*Qh꽷_gR4ydKku[R>ZTE\:/VEKyp,l\#Hdl ϴYe^$|Oۦ5ȯ$ <ҽ3l1H㊽(J@=F> ^uNlex0KwRcjC$ן_RRiXYgw:FG! S[Ȯ {j`a˙c-U5tX0;{Eɀj Y@TD 4 |HK<4C9 zpgEF|\3{ l8Y^ipF]fVGȁ{%vK">x@5tv,*u"w 7NX$.@a gepz; k4E-=|6 x! SK3'9@XL+ߜ85^گ2Ui{nK4TTeN[b IZ}:h@}Q^2)5gy#LUs,0)Fuh Q$JCC, 5ehNbO!Y1C+(<[_#*[~Bgj+AfZaqRhoΜm_BBH_m:1"ZmW#o&X!*SC.& A2P=gO_" 9WkSu I=:|CXտ}5XsಕkX*Sj 翳p+z1aARFvU}2b#iSx-v2(bDk6 eXTwN,i* q9譜oRLMUxe?j~NuC;w)"q^|P5ܻSt͜*} ѿw.HdM ںUHvG :!Lc 0}XwK?ۣ`gc8&#_[W|!@ɬL8\ߤnwo}wIC!=PA5k$)px©E*y9[ 14dG-`9$Sb΅yIpgy:sMn$@/}UiXI`ڡڙބ,L}8`zWirljYfU_d3)ffx?nיMlW@R !T*ŁТ%dRQA "8m`9͙"j#W#qp'~TڔaFMSaJC[iĠ(-YQiMH&,ֿo )5?y\O6nDY!+BYZV pE9% ʓS2Hp'E*dS!g(*6.u.)P*(QGlJ2v!T: @H1*7fTHBՠ j[X,-k3rj9,ni)ZciYʝ, $F,bwHd,S43hNEC[)U47o  f3*RGfˑT@pYl"Q2)/2vo4@P!TebPXym*%p8{&z'sOfdS-!EԒ+1=kN!i7Z':S̗ 5Yr$N&rŐ[HEBߛtК؜䰲EҀSA>, ʋ%;>ڞGi)~D.'?څhtE2 t=A|*sq+]' 7]TXn7kÖp ChA`!TMǂdm T5YyrH ҟBܔ+Ci\# H1M]/zp8\6t+5GRku*`j^ǡ:nժfģ 0w{잝=ߕ2XĆ)H@5UUV%lOjI5'ʢ,`0 g qh4#S7$L5Y˘@P=Wg{YˉYe[w({I*XUSOZ<5(!T5DF 2`؏!T G(P$*hJhPAYXU 6Ԏ=̓+-PX.NeFk2WoZRa hݚf4ԋ;mRiX:UU ϗtNKֳB I\XvtJ |"0Tf"6ek56׺!0|2^+pזm:62hЮj] 1J  e H|B@??WHK]@=k^:$-0M:{uRJSz z@z@!Ss U-8@"\~ ??cziugl< ifjhB 3erl"hλԪtXR9a.Q=(dAP/:*+s6re8PT%nt ژ^V500%M}wNE]5 t}m@ CB=^Im񃣺` g ܉j5gPAVp LuV_|-ʷobrlJ<;96w0/1\JBŲgOS3:>ԅX }KO)!7t$b! Sͅk N%HE )E@|30Xft+g #2UVqE] xJDOxA"=Rh#w%NjIcpD,0B[PgPH+v%/Hi䋕H'j@ tL[Ymՙ bIԡkUGpiI(VlvJ3ҢZ6=títdxm4ʷ7]7P<@BpCD3t[-Dc:bBS*0M*wV΍C78XVdp! Sc !R)! J[c$ ffHG+P&~?&tsu`=~;IhqQH(PW֑5x|B}#:N %=>ir!@‚Z.h Ay&?G95?QsQsp%k`rA3"M™g91@k9MA'7EG~Aۜ@A?B 73$c,t܅4kVrCAϽx%63KeeD7,w7A H># uˏN BԼ]53\[d0)5r.C\EW0*ћIu:Mh/dC{pq&@fY`v@fH4 h G VS 3yb> utyBwP;;A7&CGfۧ"fX!վ>+~Ү\7GlAl' }BjM1ƭk`Y^:c˷@3x 1ֳae Zo62!{i;x凑~>nr>8OFqXϹ'^\>;O{Ag ̫RFA 'o[I%OmQSClX&sP% pC*+OONN/qCTVx ج@ \v60O˰Ͳdcx@˲߈9‡|eS@?Ho Ûד0B#&L7 IРJ8 A@'%Ip%HJlŁl>#< IVfyITl<ל 8b\V3d1%jĬCN} !O:WK+ϝsX?Z9/ w~ɀ1J_霾#6SC?$3A`'x 7#2ำc@:9`J#ic (6>#t! oΑ3I QyUqnݱ>E|Pf4<#(G U1 _CL_f @50LlDAF#@K +!\jZ!ov)8/͐H ^ b`2vbCwx41L":̢~ O%@3yc|"bqɀA'$|tmx"2ФSĖI-$? B*Eq1=ݷ/ i{>N `3lTEyP 1X¢ϡCB?((>RR ϙN>VA/$}ft^B '$[$ GـA'&$ˆ "(b:;n؎Zqr-?wzջw"gytfGp9*j6C!2 X*yr3 r3//3vD*M<>wOL P7|@l8p\tȈ_Wj,1p8n%~7l|gc)dB*9Hۭ N|y/NjpZ\4DX>4)|8K- 4Y%e B"hpor\&3?p8%2N(eVP|hFT,^,Yɣόu@,ʆu|'/z%Xvjp^HLOPKGdJBTtiTuK0׹?W^#Zy@,>jWy>hT,+Dx2KWPK_'?>0A'$Q0<:@Z"(b6H"-)6 r}p;OO%<6.}hjU{(2J.F՘DjJx1⦼^E:$JhUEfǹq#\gk&7 <+ZBc{(> G@%NI;%~9|>5aVJi>rIJ;"X:gferLw! Sa XxX@ˡAt6nܕpB;}v$M\gDUg^ t7BâH- u\4/Δw-+s:ˉwt*NօBn @o1 2!YjcQ GU)[T77.b8ÉcGfvHs5V0Hw 0t @;tϗIL Ʊd.E% +Tҫ}XPu1r0$Vڜ)ܖD5 $dz! Sub #(`X ['a %g*LL<5m@L LӈbJ@h?6"n,ڊtfjp=qJ,ơϰs):^:P? icZ (V2'lzMә)}(˜p)s0 ՜pK^ty25zd:^ G'4_ePl0,/?Ķ8;ٜw|k7GNlh$!+좕l$n9ZZᖂIalNMbn"r׳X~sGz! S]#Q1vQ ţ(,QDW.$tQ͛M})Z񤺿 Kβ~ rpWce胏`qg!S*bu<D :H5Jh{Ky3Y1&1@U+M[˂Ո Xrg`{ZS'iݖH?`v݌0*vݥdVg! I5`.)N|[UJ}s03УmvAƄǾx+9 K8?,i[)])Fݪm2q&! Spܖ#, 8#O<!úpxwLrB4:O·B'tg=w@o!pC U*%1 63_Ng_m 8ipDK2kmlϛ yyO1@ @hvӾ47 #:s9,h|gG>]|7NZhɸl?fVۓ#if-0e3_! SD>QD%h80xm>m( F?XTi|,iGtP+{ X!YCȤgF71,3*ڍ1cgW` P" 1Lqc>݄vwvЈ '" 2Km/rҙk\;OEk߂z`9U#^UURҗEGiS4s3! SEQEr2(EV82S?h<#:ۡALE@$h[h5#fOè5Tn۸CdHphyN70HXBv҂TG jHyAM+!TCa7ŔCfwsc1 X[%i#sŮB+w+Nln\#t@,\Z!E:#y4LJƃQo 6-ij={y޾}:MC! Su&#R(V `Gmv>B ]q\Dgq{Ytvy,<6f/;<'C᯿Tr*P~ʍlm̒^ 7o:@ame;VjMDOR<1/ 7r!(p/h{?*J]rlXS l |^V{3P}W14ʢ I"1g s'Xq%,:r.4QrM 8V -Z zmcYdjf?! Sշ6b@K`!4n1:T]FooKV|K/..#TT (5Ihbe0Vsd/ AFC#enڡ}γjܲ|rзTvDtJgHR =&MD_%)_7BUa5y_`7 ;kϦp>s&Zn J,5qtObYz]Jhj%>56b++X^j$DxwDEȸڒ&aBR%$8TJ'7=CINg|o:C8! S>.ʳ ZT:/Exn^(c(W)Y+|(48qBfyQ6S5NnS!_褵ޖƃ{׺6v1;5#Cl]iXo̽gJ} }I, h}IQox *̀.,t-_}FMq%U "t$"[?DdlJꖀ[-#.+2xŠ:1$]*\@GAǹ\}l?o񈼳$Fj=3A6fh~@ T(XlJu'SKr>hPF=;E AX(*W'*-FLv'XX{Wb%fB:btb)kL u! S>V `RJHBbAĸ]f}%(-\na}] =uK?Z`|x?hJ^ro #5y ^uq FO^Zzʐc 3/='dm4ιO?qQumk6,:Zlā"r>'\9wPH bm8L~1P/uq?~t?gswr8G*ui]"ug^%$8^lV3! S> P, }\3)s3%(Ru;&! Sa!ME+v @ 򝧡䢤b+{YQ,t[iXvssF-wAp+錗ްO!`z׊CF] +OL#7ʖhˣ5|Hn"#nat@f0C{mjw[/ Ն%3;M w6}woDFR@ gWCh9Fvc'k#ڴ|wW)(!)D_mJQ 1nE un+g/ٞSϕT5[ MhEAT{$4~`! S} fP E+X&fT,5_7h& VD{Uϡt)ڜ;ʍS5qE^GNBQe*j>6P@ dDGf1h&coth}oAnV9X`aӐsx_-#uk:`6RlRnTvh%9&LXbk8=EG_lMFrp˼I.FڊM&2FZn+F}6|3ku! SKA9T1 Eu(Fx/HxidYX=!aJzMP ecYxUCɲ |S8e I] # Z9Q`6!`K>% t"@yTJa\b>bu1i,f'ā3KLP.DZMkRs"ҽXA^@t!A*"?dʠ! S '!h\ ²MUNP{t=?l`BB&}quʢUtlڶi`3>ܲ :;$:z#ćt%tkvŅvԲW=aV]=͸=yoECo5tJ~9Y%&[ݸ AC{n(` ƬgRH-s E=07< /xR}`6d&8h@r vhZ"Rk%-YѬC0>! S}*HJjL@m@>[+-8)6(2<ok<ݐADuPkDwzhvN:bqgsͤR233A2|i>5=.ǪM:ɦU9n7.ң wZC) pШ7(qeBDB1J'*2NBe3GpB3kHylӚ[ RZw\aSL&^V68Z""3zA 'QԈ-y@ C RxL";?Ў« m[rx ۈ0a0^-n@Y63jZ|l AɌӟ9_"`4&cb Mo/fpLwƕZ 3bjeP5x-Gb(?T^~x7ww>G!&@3{1zS̩|/AA'? %P%JoasCl f S.Ra|?a G*bp#Wnzd^x$89DZ?ͻO'6Nc]Y*<\E VBf׆$d&"0tf]|vW ۄ۟lr$,DLi- o mœM?}rX,Z@&\y2 sgWjc/7W۾XSܾ9 ^k8|֫/<9Lc&3#VuP5ܪ&SSύ`3b 9Rf++[kPpUk\m3n6?LwHoSKS/]|N1/t@.pdF?$Ny}0H~ʢ߭{ְSƕ;CaqyO]|V29{9 >WVway252zu^7IkX$w`7|M@'@J揄݀τ 2:!+XȼeLPUw2V=גLQgG=v1rP?A' .\ta,9ؖ`&&6;)?Ni^|=WN ~mF|+fəuEt~ |l|QgW⟍8.(0,#=xPQ"OO;N{f,\<0~ED 9+ FZhcRff! s @ 3 A '`?`?&#"*cKYh}JA3lwcG@f󰁃w 4uu/fOgc[kG_O?ܡL:0 X ˡeehI3~Z/ꈤ,uKZ̀A@'#ƹ؝:K169Av?^}U21"Dؕ uL76HX hKY`=138{f 7B5qЮr];Og}f>L7'}EABNR("7g\SK1jW&,rA`'ɀKN8  hxxH. -AǵA,_1w]7°ֶj>?>1=71G%Q#x T,Hmw~oH[c&3zRv4ɀinߘB|1 kevpSE5d#3G#x^HT#铈7?Xgʸ&@3{;`zcoL_$lWud+JA''|O>'|O>'|O>';[-]@i`+t?0tG8Wi84gTPp @ yprG-rax:E L A@T0t< Hg",ObBT3ݞ'8}  , RB=l*a@5ӵX7[IwOƑJ?DfbCWݻt J>"zClfp .6@ހH{k˛ͪD?? xP<(˰`@XtR!L DS%nD@?Fh|!/yL{Z\:Q#x y,q5@0 ~}k0_;SfWc;H'i?<8GML|eȏ??'Y|h|Y_>=ْX! S]*,ɱxp`@n!2!pwc *[q^X(>jc!E|CڨIs/:B d-d%\eCAowW( [ t>c` < <*8D@ep^,8 $/Ƀ(4]Fic*a P1A\F~̼-!gN. ^PFi([ )'VZ\! S}B$! ~bXP^-)8r,QOR3XH||&AF&Iq31,O{z s\-p[w_Z!9Ϭ'p%8#_Ř$h1A(XrcO))0%3m=/R^K|F9@[(R Fi9\g91 7䴂8B֏{y[p)įELKNBYJv5HRSeDЕ<מd̀ul452#H[8U .iC%Rg0:! SpЪ\|aO/71[!OZ]- 㟚@qN̐E6pudp2sA)lyh{K|ݰ]sA>3(nm%1H  㙴?J|})d[̀59C@}ܐI02g|:st|3c5hl PAד3FMŝA00Qei{۱ ;!!ɀ:!0w!*S;#+f -VN|ۆ??}W${wC~$&>?q"l < 1nc=w.>6 ~wO{P@DY{aZ|xyc ~M`U$Hׁ&+qFB6Ӗv^Vv%5J3,lj9CޕP\H#DB -U Q>:&[QAuVÁ0ƹTIAKGqcbjsZ\Sѽ^YaAoJWQֵ;D_0| 1O !bOoiSfhӌ !aXjXa͊v ޕEi0`5uHq\ԐB^:مl@P!T%Bب2]Zʡ*ꥲHtQReR!զk iioDƻ!d3mD2v5֞)%di>IS@/D!9õHYurff=lKtJK&21CE拽,%Z%kʚjnf]tem\|93"$41&.0CEŒ\d>:+պv84_w'IZ BEhq*c* $]. yGMbW];;0(!Tu: AyYM+C4ƒRJˑKH3gk5rmZ໕g/qp\Qso 4IǕɈӣ½@$X~֦d]|xr|X-nj=j [ sՋ5X-ph4 z=CP>!TUb`D gj]jI ~N7NBl{pS~5b366-m=.vj܂F2䆵8wrnmj {F2Wϧ.aPr[Zi\j2hK0Rr?]PόVptTI ¥p@,T_ׁuoŸ̂\M.q(O) mRZ& QFF܄INl]u,G5}~Qm+I8` s"$/©ǺQUEߧ^K80#G!G!T]L" cPE5TKȍ QxYeAsk%K_4dw8ϹzhS!FKe` ;23ߤ]Fcd%o5`x@>P0My0eijt_M?^5m+-t7ToZ*%u͆*t&xp| _G݅Mx07he5]C A!TE mޛ*شX dQ25JVh֨! vN !¢G|xpny{YYMuL1ZxbihAy(.@YUYYE$r`w8HgQ$nxIJw@Kn%=B}b0 ӣ߆~L I?~`o-AA θ#A\YMlՆ1 `jt6W%MiѬ}=@<6?Z(#".0at4ټ!SՎHa9L dz>8D"0`"sqMYshPZ,ISRTS\/ +q˄Ɗ &(RXʪKWfܱڻj*}rcɇz`C#VեXȵ8K]PGM-,5vvMI0%į[|-Ʊ2e Z'0s!Sc!J oL]f]2ŅLT-\xm2^,oUxUe#r+b(~6`m؇؞c~(xd} =.^`&Ԕk3x;Rw5.L82Ң+H`(.l2( 04T$&E)(+Xwt)yA1xTv[oG5D@@qn.\)mģ%;gMgThpB%:蔟7WUF}μ Q^֋tS| v>! SE7DU( Rǥ1LfPU^5 MUeI%%@=Tꑂ׬q+0,htЎv۸;txJI)j~w7^wM}'؀R%o/wh < 8TݘA ׼. *=se-}'`{MF$`8 \^Jvr<Lʇ J Yk!aM U=bp8a@@ A|xKhA M-<6k8/dhJx#yd Pa4kZ',l@ZA'g&4s[}X3&zd@  @,d@dȚ~ Dy!Xf/8`38Mj(We̐o4iA'o-:@x-)kښ{c:4'"אyG(aC_s8]k)"K{ wٟ&{p0?I<lU !Hbӱ(A@3v/\f#l *p? \ l}F|6~ (cW漑ck,_*GiA '#4ނ;Cic@A}B)HJ/XA8;\{f?^1_<?Cx(Q 7r]*<3d 3cΛzS(^ApX5|/A88/Y|&#ux6`F|pQݭlD"I{g0<lY`3d mD@SS`6C6E<|LC1^ĻUO1LĥoPK: 0:i2O^}@fq0#ߖ&jzfbTT6S-f!x1j ~ 'ә6R ? ݍu{/1 woB6lV ^4} Y N/嶻vXM0 xf3(fJlϮ&Tp  /M~YʸdK0>^Z+5sSKAy(! 9#_˹2A'oP!`֓Gao$HZ!NH>Ѧ~w "S2x'͐BO6~6\k#@9W84lOaX$+-B{|.qqX 0EWf&A'$:CQ㉈x0pDx0+B*+Ae?`F| "тXNLg SN`?=Dި?6E+ƑO(PC=14'l6ɀ)L Ц*h9:%l =qtfm~o %lL> 㠞#o*ɯ%UB7[顄^\m'j$X@)8hv*]JS |8x~xz û1\cF>o͡?cPldTD.mdp@ 2_:Mf^@(jdOLJ [*pW97 =Mq48SpM?!6. BHm'b S@U]U%I+/V@gAEDL!?P/(y`9! 8CP6_r h**n Pd{ s\y0Vq [Br)__ fq_` aӐjWQuC7޼XJ f `tMRPc.UPKux}F%XK0MQ-{uJU@,kUnUK0ܟ2`! SՉI1"4P(%D[&Z#5U1fVfɢɱ#N(8Dݻu?ʲu_Zy飯" B8=A +PiuP'sձL=ecnsYBSEꢔ2cʢ'6&w 5` S{@dL.V}G0 wzh(`[(Q#C} z8-<:Ȓ].k+p&Fƞzu#=R}zN%Έ.@B+xKC6n! Si `!h *j[)c"jP ʧ̚I,̨WU{%'K[#\|~s9=~y#'2ޓKBwQAT`uW!^{yZB4%n.(Slu=`.iU#U^hhz]GJm\A JR3™-}ܒ,-n\M 3`TSdQniA*^Jj)xIXR9 `4P,b-1=ww!{쳁NoD`Ue%PD  AU! S2A2A"R 17¥%Yl_hSVn$8B_ TZѧ5L_LqM~%+ E"ܑ^REVf -jLd&wpk.;[5υg[%rL*49fGLTGȍXM+QR@uxE3* ;=ոӤPIy Xm}RM6*Dr!u(B:7JҺV#(rDHCi)MW6;E}uʴk[CD 3E~ݤ;) 荭4{! S8A2d "U5Səcb#i5Y?]Yc> y9xh98ӳ94}KM?"$־O |2. AJiQM`ߙ{-94йMn2(y= S&S!]EvM0B e3/*3,My0(x4OHE*b4 F(-38\(wKb\ ZjR >BDsc+)K~Xdӑ%dl.V! S]1GE sLtb V--qiGP_ ҧSs3s+kMvE߅|j*Y*q&Q&9"es?|$^{'X֦)KR\난6ÚEC8SxV:>!VD(w#ʁY;{8YMEcaQpOQOχCb;}XaڟGCx_b~; v>{g?Ѽ `P c}xI&}#0Ho??-' }݇f ofb<10Ro z`\wwϯri)=D! SU #!аo@ #,FD+ls'<5{

#azшFXy1H?G𱌯} 8CU0|Fxp{iP~UKb$N?g," %PxIV'B-Hk h@&(*<ltUOtVADCyBf%E~l%?"IҬkF-fUjD$UtckGYyx1#e˙?[c]4VKFXS4Ȣr&>wJw$@NE @>ZQ ! SaHQjҌ Y5".q lCI2Wp6MU;mW3 \ka5K%0̧7{ 4 ~>j0jUX*x7o1|Кx5k|ǝe…$Ԁ*fVa @* gZ#1ʆJ ,[jq~\z_w&QRl HW2Bk" \G,SUW)_"q{)˺?w;j <,DOj-*W,a<u)7 / aX!@b*@U6%BH%bG e0V_2ܔ*TOV _! Sa!HV0 #,%@2_'N+̪~uisF3}I8b4:0]7uAr=(¸O{)2'jLtܲuF, {:L:oB7'Eϯ^םa~ІEK= {$'& ~lԒ"Hw[垮Ax)I ړU5.ƶ&iPUV&O Vm=68D@!@7&߹ cyy-S/I(r?K⥰o:|N! SZER!(f @"@2PISvO{W$zzjBP<ӬsiS+qҩ㱊H4n /S@,/ckH `Q~ޕscbTș`o5FJ-{})C^VfmR{H;D`QBCaZ>ӚjӇCvghNVqjGJ Jxe%fJ KY! SJPX(& BR("!J#v0rmrS3ئ)*sq@#+5y9$/xm,2'L.[*[l+,˸x&׀?Xu.^=o2MHr>l{jB&LЕpD*7XU3 >sCFk˂ 81{Յ.U@rm=5-:jXQb\wv8:F}БX^뛵ݟ2NR! Se>f FY VV8NCh+F3\ԷfpQ5Og}dÚ NG)oВ93NٱBf!^J 5~$?tx>yk>D_gj@VӠh!Gwݸ iA81 @8'v6 d¥ISF!RS :DzwxF#}gN! S.E`Xe P(\owivjTJ>%+痗|]BԒQGFɷ(C#.A@@$J_KC?,'ϖH;!YOe*+ux-bf@􌎔;@J0PuI_t"\?4iL_.5g*ٙzk2c]+Ed#Zޑ F68^,D+P823mrgɋlwt#x+@"7VM۾s;sݢ9Խ%41R5J N[)Ĵu9KEK_)?Z,Ơf[p(#2w! S /#ujYJ画Y0NpoLv޸|r8e_}h?ϰQ|mqvaBo nl=PyJ |]tpeExE*[H!^_$kRpVYZ'pZǥԁGxT25c Ex [;Ѡ$0ĠPBe9IRWl_>RK1IXuCׂ IX6( aK\kQ>@D.0 "8g͍k WJm=YuA! S!4` HPp@5Y-;6‹#veML2ԝun.%5Ւ(nW᙭DLJ(c2a NSіUQG-_& )|$5KGN$#_H@odD-F0KCnGeˣ!2ZE+/`"QJ,Aլ-dtFQxCCދU[Z/qj$J ̥jiIQ`Ǡ`Rz it ʘtlQ\pjl/+;Gbg! S$P9d%4-ABVlď: 쑞*gyTVlQϰSZ}>v[@~(q헶J *rNdE?gMEj~&"Ӆg?N4]f쭬5˹ijGБ-p{l41Cab6Y f~!T{(O֢j]\UTI^ >]=@[eĩbպ.Óju4ZдR82y㕑BY |fe1A '$x0 E hpv$DSB"DBī -g . ̰% }R`8C,y/M3%wAe˖eXw*jAc6˚LrVNb0%?ϙD.~ xɀX149[d"{ןI.olDxBCCM3A@nj߿]1~H'[ WtM03EG\F8+]kH)~]w Z?H@gf`g֕@ &_^T+k}w.oK~o Zߛҳjoc]V`])f@A@'[r@`y@@ xUfCio# HS>|*!㱤{!GsS0Xgy<|"81^L6>2;IQeH0lI8z-7ߦ\3o>N }@uC,J$^%(nhV8`A`'W\b1 DA0%lZD)(%S.› 3Sɤɞ%4 yx)O&eMBYfbܤ3c4͢l%Z2f]y23w>_"GA=_JyÏ3I}W{7$ *"Zb}x[L6FLw }"r3A'<[}~|%PyS( 0>&5gɄ!zyy,"O^͈4ɳL9˜4" ֿ͏ܣp'>MH`kZ< ~?"J"sdG3d7?Ua&=6: B>s1!S6Hh dv=щY%[DJ͓ OJ~ڠ y̳N PxLxjerf# +/3.ÑóK A'$e10&7= _k+]!#,#9aٔ)߷kr` q%L?y> 3b W}1USX 5㕇UAh 8`UjW3a9=?{<)D+yn| A}7;sM}:Xxڀ͒ d$mA'L>SPU5Mb< :q _y RCOe hp/mI ؗbGo͏$+@1E9߉.5K},9wtͥ?.so`P+,fDU9 >I很lA 'L>;8%z>k|GĹS7u- ؁087&QlCP™&M&^y BNӕ{0J?f><"siDx癹%@3{<ri.PO@ `0PA@'`B^rGD ]mZ>M 90  TLL;m]&A3lH7ufcՙ4g-^!s`I8$!I7jou)}w@!Zg,^TKlO`uHm"}3d 6'g#DUF3wЎ,GG1L ?'590D)ǿ@@$$_@'C;V H$*T"0{!v'qT/;EuCLK9`2i3wOP8` 'QdJk e/4ugSt` N|?oū/'1 ʊic=`0xa}{7Ov R?|gQ2:R؇c"fBFYaޚ@qΨ IpмHT7 V"0_O>{3cݹA8@E sL8P[͐bR%<J"}vd$n vy~8Q-s T"@ض I,HcBeB=IřwOQVj\c@7Ξ}?R mBaph f# ffM o91%"9/y}}} n\a1(_IɈpENoU,.I)gVpT[_Q?qU m;u%]u]u]u]u\vuc맮뮺뮺뮺뮺뮺뮺뮺5W]L뮸E뮺뮺뮺뮺뮺뮺뮺뮦U]u]u]u]u]u]u]u]u]u]frub뮺뮺뮺뮺뮺뮺뮺뮺뮺u]u]u]u]u]u]u]u]u]0œGu<,90|OM? |_84Qz뮸]u]u]u]u]u]u]u](i,#-TZ!eds1>{e,={kE#S7]uc]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u]u]u]=uw6{ k cX=c-+4$}}|~S,8࠯Pw.@@oA-d2R`nD,3V=?xy XjtՋ}P<!]ؖa|~}߈G ˂ `]u]u J9J @Zq+ I\eJ8X Hְ@a`;Ԁ(wP7ï5" >(RJLMB3 j&M>"q/W*pA.^@> +8LA#BL˘G°aK MOf!:i6;)щHdz)Ly !Kq,v={)?e$a aWoƩh(eC°k&&]^|CJ4 RC @K~Cu̔UBRz%ӟ)#i~XBEraǾL8sBjn|pxVnX٦8Qr("}ʙ NZk9s[`VŊ iߟAW0 @(v/q6 @ta?C3 !r7Q 8%< 5iFp05]R6 ͂_@:?Wc A<ʁrdw %"1+$4nbH0e Xi0HPSրpQ B6 Ȁ!D – ?1!tD2(F1Js^r"&𫸒NUb<\?!6ߨO|:W ײ!'b\v+^ٷ BZpG.-R_a٘@SPoD+j^s~Ȩx*?ˡoc كnx/_~Y VN7Dϼ?jmL>CI^#dL&c hI 7=σ$\' }R('yP "ZhC̞sG5;5 V a(7otw?+6u)/0@(fX~ .[yͦ%ٓNBMB*"Kd Wexy66eoK V s1 % ToO |/_0*xpѲ0:N>toEd$м?\ܿGm  BvXyV%9J._F@:`)"_мٗ]YXu]u]u]u]u]u]=`vT]e]u}}.|Xi}u$̟]u]u]u]u=oY]u]u]u]u]uͭ]u]u]u]uO#0b8dPh[G⯟N‘YLO"ItP@,$ b0=|`7{0cOEytGH sg~pZn-Z ԡ !;P=oBMwA=Gp5DWJi y+(ߌbV{_Jzxg|D`E!+#J;a70B_!& 50Ih Zp$C>@Ę%H! rbHnHos?V=aԄR<R/ 0b.[| TW!) B_L=r8$$ΏQ%|8j9ADDh *qwA[|pYLkRr S5+7<;zܞ0Gd3вY G @A0 @e2-r&} ޾Ia8\2_uLQ 0XMx% m&'0 Lr%|a,*E0CF o<~|zV&/L 9B +-"@}Ҵ/Xd >XIE|2}N" kc|J+Y);yiBg6 Ѧ@S!I^ pi _Lͯbz$)^v Er5˜fi\!4$F*,(dn w$'Uc)f;o`d *Z+AI)/w`c-b*0/hu"ݥ+J-M `LAAj}-XmkVGUؠ]4IƼ;wy )$q64=a#VXh@aw&s]p52M0]@a \s2K~җC(؊+!ydUW<IH\rY| 6, G^Cxōb,H |h {Su:=hVaL&P~f%c" Ywtl߹ow߂!F{C>.Di!bM5_~mP1 3~W*66)w*b?`>cA 24|I4xglH1"v]XXf-߾{&z^-`uT!Hso%jNdFX8%( ־ o"3Cm?aiU *>$XP4'Zm*{RUް s~c+f~,[d<5s[`Mx2RP<nؚ\hudMY[c|@b5{zfy!RaQ| /`c2AA(M}t7D  TN1Ϝ? E/i~\~ N}}q %czŘ{`A+J{w(ž#´Đ3%p1hpw |&}x17oa"h̙!I;V=X5(oG9~9U8*Ph aG0ߖg@;xE_@MW~<9Z uM遘 YN9ۦIU]b7=x~zcP's=G JW3 k'uٰ@gV{1צ c߈ 4FkchQ%#Ф/(dVL.J$ <: sL?%$z/H~  Rn[5^"?kx_nC6p)2"#@T@{ž,>1<ʀ-@-{oѳ:h!$j% }:W+/$D2;"[HDsم 0Lv#-Oc;ll=E]Hg۠]V@2!fJ5V<Ѭ cAH0Μn)"D1 iȗ֧ 7t v53D?(S 8. ۗ K5cl/v(<=C pV~C#.HBt/$cz0A{> tX!d9fXР"h:Da}L7!@P9g]JҌ[4C+ 'zw6 ADcl?&1v@D׿=)h%oꃨYQ^#ͻV@ਸ਼R(L@:#[Dakc>cI.lGc8KY". =P$vNԨ*]" ׃8 'h9W L<@Za=O)q.ah]-10TNU``/~ǀ 5>F6Ts}sȜc vfQ;   5qo<3?|$q _&%X-Y6@ C^pXM^{K7B\PbۡacqE+~NAΘCc[3c 5*E 5Bl*X 5n;^"mdL^h/Akq'~͙PԦ@߻(q_ r.Ґ<þ y Ar0ڃZ%0) -3P/Rz9!̈9L8ke"4Dd|-Φ6g ~AG$8m%<% 1']u~m«2KTgk \Q^s(BJh?Rﺗ:S"Co$wf?u"*}u@nzHOú; LB R`?:Xt|a.abT,c1-p!SHv]u_?hu_ u]u)%c+o߲n%Sf=!QOV0~bδ(׿ tQUĺoC8~)czۭ aQ M9?XE(i9 ̰Y( \rݏWa?? \5G{ڱަBJ&39,?-=J\>i P sNP}y% !A $ϺLEVx`uO]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]t! Sm&"GI@`% ^ 7r>Їly5ZUP!:mRiWM{9I$ꀜ#ѲE|_7;=Å:$B=l_ZC$*\:0?W>7g=@-c* ҚD\zUSdo8H} sr@:я?C&~'v8rCj9]@\?~v]5Yxm7O=DI2:BvHͦ%G<#(wfOARErÝ1{vv$VW! S%He뚼7LȔ,GQ;mlwQX,:L mQ x r߹}oc#edustIJ1?? w`(g鼕6?8N攄},wAϖ!CrAo)3%;u A+JA,(PewnBCS5xT T6Inٝ,'YsrɁg! S]#H`;-vly"֭.DdG% )f6fui{EH [PY`j3wʏjpP w‡Z9q C̩9ȧF!Nx盟EЪ.ߧ"idk{޷* Lw W[C+_{ $X&hLd DӖ&%Οa.wǴn1zԭ`{чRthm&lvHiߍIvH~ߎ:o,7\1hmvw@g`pδ8l9Z{^lJVFܗˇױlH FhNJy,:Nq+R6T,3I%gp*F]y%ba8 Lal%?♿ƅ?+\Ƈm?|M}PmϠsG73A Pb@@ O>>Gh|L/>Z>pOo/3}||>_>Q|vð)*%K|L!L;H2S_o FV#]xʘ-RiL6(øfmu^@FN)ݡc iSkIooy(d{_;ifTa,cA;Ć`_YΈlY:V'h%:0V.3m։L}fmxٌmLHǦr:ZUCFPҚN&s7Lj$?Di)I9_??gvEL&3]<6( ߚTӝuÕIOq6@DDPzQH!jTņ cXQJUJudf6EGQL& ZT9g]nUF4O5w,LDi{뢞W –0_)Qn4Fuӵ;7u>ֻ eU90]TUflRwFygo!+wp#C4 V fU"B0"p'Q_-P+TQJqo5 ݀}C!TAaPHaPh*+@74B 1|6e*'TK, y#:q"/ U)㷾V mƹ+Iם6cm>X>0=65[i„X'I#VR^Re?M:% ܸVs:yFʇw k)#Y@NwLaS\טdCe'~)q}c6(] $#D:-^EHichCuz}ee[SRXjʐxN=ȟ Jo<@3C,FqmS4^oN4!3:E׮DOn5obhds(!TEah0Dj!T˳&A`~7׌7wS;&.4D͌F0چVS"d< d'1bEڪŨD9CV˹ţ$l%uS7%w~T|(1 f,"Ρ2S$E u«:VIhVTf Tb+i 5~MH~;PNAhDRd&(M4,gPw&կ/*KR1_P#2)!@P!Tmǂ!D;TR*Za+O=9, 73@XbPO})ϕ*r Qb1IܽDwֲ]V5;ZҺuj!YƬvw.#V=iJ ~y{Jgq:a'! 6ڍDW;ddLʗ13lL!H ! +5*.*2|B8qAVU|Twhby3">!T=aP$kuK\B6fԯV̧BU8:}MKRAx_Z͏CR˗(S97%$ᾉj銒J@帠#E0 F}1%#&7˧2ưҢ$nS\ 80*wUnא9>UU=EaѺ~MC͝:t!`{:m D=gx0_ jxp["A!SJN㌼-QQY@ E?Qth|aͬ[.n^4iȲH ! ВӲlmR}/4 ԳLPzS=)y_ީҮOVHe^^ݩIE`VML"|% Ws<;*O$ BhD#!'d2VgSw 3{ ʲ^Y '][P 25>E?O6xz&sAp5J0/[E0RTߺs0'9~xL v%&q!S*D1 ޕ Jc )U>Fd)r!h@|\82C?>n#=Q u1ϙ\}qG9?Wa7.n#]邀%xB\(@~oÇIZeN7$_]5f4$$kiRc,"f[Ym 31s!sntfiΆWXQ0lVЬ 8 +/&4禥Ѷ *)6J4o%"V^^i6z\ "VO% ܂PVX*^A ''|O>'|O>'|O>';O3g@? ,; :n/ R4S 3MP{8>V  i@޸ǐ> Vt=!AVH(3n- h4g8;% "nG03x\w6z=xΉ43G3շeŭ'(UV0 iSn.B>1Mn*`>㘤  Ar$h(γQAr^ׁjSZ.lus??OH xP!AX +2xlE8X846~(L<@'g -)omřMI0m B*Gs޿sIWUv+#! N"(~:Uк|% x {ϾH_}G|&tpLjpBOX $P1;^?%ZÏNLi^x?}wx;G6_ɀ5\_ua}"A?'$< rj<׼$A@'wZX3&l@4xL0唀Xɇ"y-0dh4> LQ?~ euh_G`3b1Θw8`eϊ`eъ3lIZ).+)">|s!t:C\b<󃿞d0L?CAWu M ;OѸu-fVho#wXA`'w^7a g;e8B} ڮgD y!C zT%o>\:?ro5"=i گ0 lQ ̙V$]^Y -b}V~8qy?@jfL~fg^ p%aL=3YA'wZ|  5dPubE@x 1H.\)2i40hV3&'%L#>S6[}r/ !Q`@}w-6H>d `FŲ~Ӳ4h[_iIlD%uH (cQL+w0}܋GA9轗_y/p:|~_fD^5> ߁qS9d6B͝q|2! A'w^A?B`̈ǏG0eS5MpΘd=DŽ!#p]3 >7v/,DڗJ?NOfu")vcØq3c3)C ~PCRݖ>?%p{b1cV 3 BC:>u3G{N!֚cb2CPe-19rImA'wZނ|tB,5kG-0imL<0O Iv_}jm8^ O)<?![x %dBr3c hcEwmEI^ )b&( `"'BGx4aON~ O*%AZ2 qcξ<A'w^ lh@0 K Do>O (;)ד(W*5($*TA`'_m:?,@5##?~~F aFx8i'͐phIyc+H0:?;5M Dt{E); t7^O3 %@[@A'h^@ (p-WmxHȇum!}A?;P9u5SPYD6^ި ǸPX gs*~ ?|$(y562#@+_`6bZNgP! SaRP!D)uP%˴=0!rGA?TYN%ܔeMk[Ł-S&Ă)lS0$t;LQ9+Rnf8R "!w}OvfѰFpj<%יBIF4ZHI%eGT V-Xoy zKƿ?#@@ +yd5|UPg\YOLhFr 4eƒ1dR ooQJ1q^q&X%`! S6A #4J(ƻ)T$VD_<SL/U?]4+4 LVZr&Ӣ~k&vTL2m9c̉RNBH 6x_Ů?[A{D IJբ%:qaa ,*oF$/: RSo׎W:g|#&g$ex̄&Jwl㻨0zl X p],(ֵB+O>3RǢ$F/0&)tJD eS! S`7aMԚy"(KŲv"YH?rM$lzIXc <-asot-p@^EM_7'4'LA#40hX˔yCA8ylW>tw@ t2M&AX EһY!k #2E5YNLg |-JDvO{a:M*\vuHUWøAB9 '7O+W+,-u&nX1S`pZ$DS! S>6"M6xQt[*YGc/:뢉IeA8'N三h_mT.Y nO[EM%3X6 K1,U؍_=➥Hpԣ@ݯwt]5x._Hp*ZƧ9_섌B1+YTI( 5,QTUmjDZ0XWl=cr9>@{`2x@,  4wL Xʧ0)E *"{)05)YĂRA/C@! S,C!EB ʘU$~ 0det~(qrv66 FٜI,A Cuzj ?x?Pm&\L78+˥Nh%%6ը[z$@.gx=dS+/}co@T%+m[c6r$T귯 wu9a  eLh}O[hg̏P0Z0U$eL X՛ N_`]些 ɔmbP8w! S]-K@W0 @b ~RjF>kJ܂@dR5-6]"i)ɪ3?$hmTy=1k >F߮mcu,M5WZ?Iuw/ ro:jisp$W. * Us wj2X@8mzºխKEg~xV`NU P]ð-U [tڀhY+ >{pԓnv~]8>}隚ʅ! Sxz̾1(&|rx`e;aR9|ÉPp<κ=!^@ cܜ4fsQ@{e5˘a\??4>`[xCf>tBJtYu߇Q',2bgsͮ.™TÉ/?"^!JP<ᗻယ*Kixz:`S u=! S;rM ހy!CC㟶n?3޻s }1.UI`LqRՌbHMU%}y=&1gwheH<0V(0r`ǿc,7ſOFyě|1'z6G% o; c]ݑpc-53r#ٽ='$UrzO=Mwx)-! SMVB.pɚHf9|_~"І6 #> b% U'{:ڀGagw\Nc0-K*^xb綥a"J& ^:.hn5}>"M׬^-*cq|eHB ,K@Ep^`^Z #/D8ʔ3>Kc-;?rg! S$ Ȋ$)3/79%R?烰QS4.p)+#YǦ0F GlAٜQ?C0pnlІC"ts0A{v!$ ont̀%)>!'GeY^/,BRD 6p Rw@0X /m*hvG,6z9GXxʵ%ɕ{Z0΂ ae_hw]hA$z&t#l&eΝJv! S=YU %XH #HBHH]a}\n= 4RA~y{T{Qp]U̡Yе_ UiIp͹ XLON](¡cs,΀a;S%Kne|#bZ+P \@9 GEͼ*5*d+ Y@/4JX-,'Z#ESij;H‚g1]@z"o~JeUM5 Suj2˭(%1 Vrc W2VI&}X"8! Se>2 *@P @xhջLk+Ej,zkƤߞ@|Wع ״R.y=,x^&Vr|GO؃}kD:Qz |n'㿉Ci <1C7, 抃%o2nS;nXwA`|ǭSe^ހCLD @A*N(XM^vmUc<봵Qۛ~Uep! Sͅ\pX@@T `p|qA׍@oI 2@}6hΉUC:yJUx3KxXU^gX3I6Iq%7o3drz82gwv4WY$o%mJ- u2*Zg~T=Gt\.p;H@Qb  |JRpEA\#u `H3ڊJWѓɢԁB\jCIHR5_?=! SL*eR0p@wZd$N IV#>HD+K猗=m DL[jel״OcS ʈM<+Zvm^= l`>섨@C#Csqگ/~Wr1w5^{[G=O7oF[#Pm㹡+*~ѡ H'j`.Ml]O6^ei-QҭDP7ui?G3d\`C)! S̈́c ߀ TA(p I(?-OK^T͚3pwe5"<^{? ic&pͨio3RҳKQoڿ֒+;_Ii@|ZNK`}>&zaeYO$\2*]k]waEȡJ(,!la&霓#Lxi-^+3HLȓ$B.[?0X*,(.QFH[%5TdLЬ閳! S`M2ZԬ&GX{ BWMJ[?1poTMgSVchXdۺ 'sjT3@͂d%ʕr#P u?e\}"{ @SSEiwQ_͗zcum/|^'w  |Ĩ0l`SYV5}NE!ZJj.ׁBQEZRz`@n 5/8cQgr+UL;*J Iք*h5Deh7}b/W 7+;6Ut&CY!O?H|>WM7p^=*pc"Y=jqdN^A7<0n0\wqNTNR~@EΠ٫2=&R$hV3lXيR |p?L` M U* ɠ{H)Q7 ؠ f U  cU@ !Ԅ>^l=!ÇM=]6D!vo?3%6L g6(h/&J QRJߡG&x xpEY~C0կbk3????y??????????>&? zpBo.a |0I ?LO hnNs 7h2`@)3}ʀ%Xr)k%X@,kj[sePKb#30ʠ f5U*,Nw`PK&]:5~K0` c_qj` c^B^%XԼ&yT'A' [XTXe8 90h=/>GG `:&0VX}@?8R}JZ,뎘fc9Ȳn*pp^GXW<{ w0T_7NB,8'r1\PAe544sH,}I)rr\uܔCT*Z`QsD"bdPN$^̓&c;4sxbx!;pg4_x?0Jtv_ %(yklˈ?m [*0 ~"*  8 9J;l=#)=X ̀߿F_<+ J`Ƽ$q[!`v-H?6 }4꯼iBfE Vfw<@lJEpbVHi'& đU@?=6`D)edpm Ȁ!R-ûbpcCHd Q*.6bA McMxn@WT׉mQ4ѱ7NH H"aP W#P8 u{WI0Ks m>? >K HLn&d t7I0BAL"@ BIASVoD0R3馐93br:$4W*p?:|jU]830L)X1a &# N L"/ @I%>; `)axq6@@$p\v1ý; |z!iRSAI&es|8e!i;'Z3 J852 MڈR!0SЗ8\!fz*q_d0A raL0LyD+#`"gp_[ qnǭWPra x be &P0ْe?8%SZ:5 ؄-=pjЪH`f@8889>"0ޡ=9j0 q0 9G 1pP\bf &&SFX~xx3[G4C$ؼ?[zStL;4Tyq.*_~= L_xJQ>9WP!:>0^BSaN<I"Bedg?)Skqh`I";\ 2 )PѤ"9޹ѠԘv篺L 9B +-"@}Ҵ/Xd >XIE|2}N" kc|J+,txM3QxB̓G@hN&%Al|s?AWRໜ*g)f1YnoOC_C;W{͈H"KaL34U|J#D] `Y1Qɶ w$h@ 5}@ ?(37 $ և-?ytЃ F=wT9M^@Nut`wra _vm%O0(/a@},M,pyuK((_UAn Xa֩]߬y ?pfӔp:@F k^glE@6$Kw[Yncu$q9W@r!! pW5TIlĤ ohʷT=7DŽ4%ؐ(r8-{p)>2# kTY{Ct5H |'(& om̈{PbM?*A h @0CThNrA%Yxf)Zo&rщq? Uv54J_mm/߀p]5%›?|] o`O-b*0/(u"ݥ&Wq+24/]2޿ƌ"~ Lx w5`7IHJ{. " ;>ɱU *Wj_uB "!{v6%ߴ%A,pU6<JUHjزX\F0ND6G.MG@L4>% 8HJ*_@! p b˱կDd@$\BRzR17nVm@PDg6EiTL Jw[D1"BZ@i!2HI8<æSl9AHG>i!bM5_~mP9 3~W*66)w*b?`>cA 24|I4xglH1"v]XXf-߾{&z^-`uT!Hso-Kj+8 vcEHOZF@-b"Eዂhzfd($'Zm*{RUް s}ItfŋlR{P熮`@Z;l 1C J瀍߀^Y]T E/>VY8 @fe_#0v T ]{ɕ Eo]Xt7D  '?N,ӏé =?ȁ{?-|Hhڔ Ð~\Ez -zG)i$"a^БFt`gM Y0夾1St$W_FIhz<'`N i2|0fe|dwrXvcۄ]aH>)Y7$gl}Ұ dȇ (ѬgA]`&F,Pڟ^= 4*07 ӑ/O˃=Ie-tK~J p! XM+6b0 p ul2:0 +IF7c EzHCeM &TFLͦу(3 f.F-jp!{}z;S 젌k" m_1 CN  "ECcu JpU%"<ۿd> ne 4$Y35fv$8x{65%͔xk$RBd_ Wgȃu%!"lSVbc S]j{f\.Ayx؞|@lC +tsPnS@p+3!~raz|03,"?ߤC#AO7B/yq ͉$q } *8$qs݀D&@$$,{a,9)A)Y]tF!2*Ժ`|W[~4"[D{|Ecp(,ob[Mm$lEC>X qcNݰEv- &%@›wjAhF&9)jq%U?đ>R(aXC-yJ$0 n `u19ԖW 9!ſ nN)(U;޺뮺l?«2KJ3\5r[ 'Es(^%s ?_u/C>TN(RH"*?ʒپ dG0 Pvúj87raȅCdp*ŗ u{D0j`,c1.?9j._z)&뮺뮿~"Hk|Dna뮿%c;o߲n%^~32XhSoYV?ua])eΩDypS𖈅$#2`M9? (EGf\,TP(c7aP @ QCmv %*Z&*3),?-=J}J@%w ~Ӕ9NgQ"⍫g0~맮뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺|A '٫ƥ" q) N3AJpP#A2aLGw.6`||%+uHaJk5 ПG@-,ly!a@!l^EJ\yEJ?wwwww)?SǑqR$ht8p )Le% C f<]xƢo&mb^LGZ}r@%n3=&8?&P# x68?թ^_$/] wzwfo~}wZm fwdZ^`Xq/sRxe?خL#| c&A@'xI{G-˘%X @gzP-Y)"SĿ񧦟 exDNh0 ^C8`;LsWoS>p4] dR4(LlQf`O%9<7hG0(?G4k4RgHld@5{cGPA`' Q--K>b_mj ,%|)r<$dSzq.jڨ=陻϶g 0$lT-LHK6D/(^S'<2_ T jܰihSLL#9mpf W͈0t8 '{b^fDعAFiڀ͊l30M 8CgT&&H'G0{} yz 5G:c+3b,u|PA'ࣛ{ "VDL| @%Q~l j0ׯ*/tkI3d<* $fūH-S~$Mbm]2 . W!K~ #o)~ P LJ鮜TFLԩ0٪M> Ϩ hA'L.sorraOM.}JA@f_(_ `#ڝL5̈́+_uƇi0(GεC>e < L`8+;qրfoDv2|%@[@A'`y}16 IQ}- O,F|J%x gl~@Wu ?|n̂ަCh7(GF+x ,u'0w^_y`A 'tK>@LyF~r'$ T_CX.Y!&ŒfpwPpFdS9&!l|t,u`Nx zhvNf:S'c<n9F[OO3*q LQ%̈!R@D6u ! Su"FM, uAR] S yBəvHB)#]h'w݊p6!-4[Y:A\JSAq( 5>Qv_"K*fxCy{  )s4&Z܅rD&Xje(6 Jl'uOaK ؖ"S!𞽪cbQ t '"/]TLT |W(@& ':g*ʥmPQK`Tܙ*! S})!Y )ts?W>6Hx'pBbѵ{94­:I{`r^oj*=} Rˀv|3#, Mի-W PJ3> %1̶C1g\l̶GUGK4UκR JRY Ԧkzwr[FxlH Wv8*B)AX䓩H"YXfQABeUEH|! S+sUY 6RK WS^sȴ֚%8 ]8-pqD& Vj@18cf}&h Bٛۜc!E!2ͫPvr .iِH:$KԢnqwUri vbU$"Z&LDs"MTn]$L(t,% ZY({! Seچ`LfZ–zFU֊&vfaLy^ϖ:-2'uEB%SOajBZH^3ބyN'TtmoޫgF/L$Lg ꍛ-t+W:HpЬ/.T! S]P.zʎj*~ώfSZ Ѯ1x9s"P *0X,D, A DḜY%\2Y)la)v-! ST-alűcy7L#-xڥq#13/B6l`L(|>D?m8$@m1@L!( _+yZ-_}d-;i]n/mYJNWJ+R(d{x ڜo7Ў^u)j &c j2ၜ84"L@! SdLJv0.D;gwB/4rN >sC y&rI RݗQ(5'$k/U9&Of3)d >pEPO$̳B{|0(X> miE)&;ܝRx{CA#̬maC@垊41&6C 3ݱ͕C@ 933Ҡ GM<>r! E}A>!*Sa$Fmn7ea;߇<vcڬw߅wGܑo~Z#pQn c0j>= A(T0AR>x_> ]?Pwl(1  "Gk>1c)e~?3h{F!4K,xxqc`a!LBS1ٛԭU窻\3T L`Z%N[c-KX_~tQ9#|@r-^%te2cnHƶ }倢7wX1zM~j05b?';ʏ~Z C,WPTm?G/cS5VQ) yT޿`:p+|+&t|Ij67ŵf(rZ" [Ƞ$ڿyr. jUVcD ħQL/?mՕ=C=Jc!jTņbD%JR*BPIVPXk֐,;װhv,Jt!= DZ;R Kx:.ڒ*hj7YV,j&LZ 42BEp 1Ln{i3x)m!]FD!6TZN#Jk7jGh!$٢Dmf:*O+̞j$c5./j:Dy;sѻHUQLtT0GYFF52›jX|+7.OT;Ц@ !TBPܷβ*"RRHɈFѴ5pJ 5"{AI,T7e/44e( K o:7(mF9F`$Tf$D-j2&b2ʹ[mP1?wj ]fyblt|Ww}>LpzVFla VBS6D &518zM$LŇ©h6cbE\p% @f7X\Ur릊jîط !-.w&!Tt:bsYҩ\]oMxT0:&IQ$,vb-C*OU leߴjѢI N>aI5+6ܚ>ƶ#xI>EQPfE tT~O~.l c'N82lΣHJrh4"p'7k*ڧI+ylh tSK)MI ߳S#}D!qD .Xn_:=Z@2>!TUbPH2 jU­UA7HЊ؇8wTg53 ѧ5.εm)Rn/Wi/dp I-:ţFo5ټ\_E2ȡE(IKukE@s!+$[Ŷ)Nș32EAA^ZaA6/gqLbR[* /^4 p6-V+gdSۺ`$ßi8oD]mFِV0ϴ9}C!TE B!2cmn*ҜYVQ0I7~tHx.ah<%F3楲^+Ɖ'EM^mMTcȾӞj1H1Ԯ !Ԛ-fNBoNl,5Á7f/cQÆY]Oup l {15& W5Pǭ "SDRi&Q .GWVPE\S7WgؖȂmAP`Ձ@P!T=b^*Q*EgI,l̐I-|צdʱyY{G<̣tlmʺ~mcm[h:atIkb&4b4710)ќI X Zj2tNhʯ':clѨ)"@2 F(Oũ+ 8a8=gs=Xx5PtyfYVh`e֏V(hLcIE(ܪ~ ǒo/}ހ>!Sc"Qވ Ʋ1O(?jT7-v׶]+@ "XHrhѵv+dTZc;{k6Ri~)򢉨|ie(@Ԙ@T !vLl@5&@/ag "X,p#jKv|jzރ%1KFCOV/ A8@p2 :qZ\ a0謮 \!>&,Gm ȒdŚ#K C =א+߭!|]v9TY`1$gRv+lB}534zYȥgizm jFV2` 'g*J ݐ"0Ssm&l`*~P1zp˳E`o_)AT %hv?& . bĜ/W@<Ӗ߀Q<!qaݱ~# '|O>'|O>';w}%ߧ@&x('z0tE';+@@mP#R_@5pU8esU& 4E,ԡ^ 4$2\W-T3Gxur)(G 5/8 %F]C(q`sw_P XH7v0ɳ@>xC,SaZL|8VJ<]!t 2I5;vܗh|< 5%6p??Q(PVD'Le>9 ٔYBF[M2h|!$i%U7ZUWJ?)~HEե bAh$[MDn +z_zyu~([FuG>O~2cm뙈AQ;7 u G5 r[MODmwnSg$!Q*9C A:}7b15t>Ol7;Mm %]gPA].g gPg/WpjΑQ"p J<&[?yW+7{ Iqe|^m3?mTE }}z5sZ/vYe%`1H. c֤.3u?n~MܦLۑv><@\#a%-4'X]F1Z>kOXcFB+z7(.|NP)HomI&Z:||bvA5VlG >H%$/ 5`ruMrLq0#@`CtǹxxFDx6)?5j_d/AVQf|T? !>3B+QPA⨇Մ"b;VA/ʼRK Z=IF1>:XJ$(1Y7xiq4ii ì|TxNbB\)l6d\O!9]'ȴxh{T{ h|NP@"`7?+EDBa'4mU U bSlC_^5nEc1rRY_+ܞ[iS?U^+Ns1> ҲѦ߄6d38|^cB#>cebk*Z8ȍБz!%NFߋDkFt7V7xʐ|b/i&Nz_K i$jEJ /ܼ5A'7dn任yTSz ||)!Ѝh-6V˵|DCQS ||$W1V3Njv?ø(QVp)2!z>lsr{{/{`a#K`z̈́HR* x .6807Zh߉.:4`0 W#XC8.x53C?:'??B)K#xL7]=_fj{(bR|vW`B; 4`A 'g0h@B,6LyDKBAd ͈ښ{`ɜ Dx8ǔHqA^b3b AbR@3t#Ɲ1<lau8iXD`B Wϟ3 eryD*<̘c/iݧo228gH"i3͉)1Xρ?A@'>$ c X%VQYh0,I ;P~<_wp\5D tC aaV0"lE~$u&3 P_ =K~ O*A  t/FOW_vXm+xm;=߱FBH=;x23A`') 0"$j# ,̀2#6$RjL&"t1X0t#>wxb3z&?****" |쾠3- g7 3!(fA'Tפ߃KK|Db8낡%ć,0Hr"$b Vl2d vSGe͚E#ֱKFn &?1~ /u)'&d3l A'$W $6(aMi%0ĉp^EY>ѦN<f|Tl* \ $A^D<㢰U''~W o -i`.,A^ !Sb ATƪ WKF|ktރZYҹAp0 L+GlYhs1EO;@P\F"k\ C+99Xc:y9<PKSk1T+mt~tq&lbж;ζ حJ$2ԛD3-oUh쮋J%(lJ"ut&kAGE!HZ0F (:rQ!>ye\YBԂlTXViaTр^ X! S͉$D2"P IM';:4eżJt0t u{Uو`0m!*,W  [G8"8O ~#o,rF'.2hr8,Q1hcPHqȞp+"c$6jr mVUc2[MB\P$q}Uw J+K0(HxW?P,R+0#ޒo\! Xwc UZ^uZzbV9e }ҚI \FXT):T!Sʼna!&2 YXŲe Pn#;)ZiºSϣ:lIX:J4TLJ.?¿y:C`iqÕ8` D-&AG qbx)J+05gzE nt%idLKU"Š'{Rʞ! SmH@ <)ia8 dkEuȹ c:kxw-D;>jyZw^naCS;$wv3G\O ' zuH-ZK83ݕul+"kT!C+r, b꙳ v,djE~H٥46] gi hna[RԚdUa1N! SB[A h,X?/]b}ǵEW;+3]{R紊JI3t)>--GtV!}#?YЀtRb8=g|%9OLgIQ@bG]n9\IKfob5(]Daq)F e` @Cd=kb3v:ujUzd0u3xʠ)0`R(>wTR\!8Lz8=ߋY=5;'j >! SiP@Q`MU?$#NffDe9#| :VPISS; {L 0$g`%e"(덖Zu$ʻ=Op(V'@Yiʫ-J>vo>aI|k*|P?ܭD5ကkG Qv#ZSOGM^Kϟ"~)7n 8i emx+j| T|`! SmB`c)0_a8lwgf.]kZ\پSOR3 O^k 0cysGCEFfa $p "}0GϜoNW ۫??}e:l#/'Oe׮Mb8)WNĬQ:n(@ Rʣ3"1l2U/B6{-t]4}Jn "8%)\|2NSR7碥nl!rןunGT{f! SK)+uW(X9 AQt_U;cP*Z'{ 1lv 9f=b*)Ӯ1q ٬2UCE8)KbQdCݻOb}  9\Qz'*ff~y4z],^z;ɔ] p uAǗםsLmC-hO;` fhhG=k[>+HH9F&mM{ hzRLt $65J3g:! S!Ȭa(JJ% l͋ ZK-LaL!Fe =@*<$v\+k Uyop%8JDn%֣]  +)VBxQ}ZZ꥚N֩(a3r,Ii*j؄1.u]/(jY>\_?>n&9I0W!Zl5iqSN5I&r P[P$й֨NT#&=GKwֵ1踍eyfĺ<Q[pПz Zʩ_ie,.! STPBE -Tf*P07Ok4g`\v`2mV!āɪҰިI8CmJ|Q]:Pjl4k!br,7J|֗s] ɪgCy+wkL,-8/P\x5;.r|Ԫy,T. 4Pe)T $Ign\V|4jbBݶ[mb'D p1BkP8ZPԊ,+LŢvӮ:Ռxjcmr! S>oFh Pй\7Y5prA2Y Jgq>\[MOtU@\tM6dMXY#VGӟE[o E J={rϤ\7:aG?{xc9'_wO<||qF*k>  8(:V"y@؅,F۫H;K'E)q|JV\1kga@2iN1m! S}> A(-\'եۚ{RmAT $"zm$cΕ{4^gn6oP5yMA<%(ra:C^@SւF89x8:@'uGw]PިèϨLXf+,RgVwhH+Y7萉+LK@RFSNozhiʤt}m⪝4Gw! Sͅ2C18H2VP;VE{=TCSHu["ֆW &{S' JBr肅Vt UK~ު[5 uw^3Q3$,ZOQ.ӿ)vkP.$-)º F׀f1 4iQe'jfˌvӴMWBeF(`VIiF{٫SwL{+-ZQ+PţOҴO! S!!T )@Pp?'v;a"z%/-6pt!/␄o0hJ~{OnvXW>o |}-a); тu6A COlӅP7ANϪYdzA7|ɉ0!?ϗiܮfn6 :R)B 'IWuhjEv){(|o{\Ϋ%k8ʃpCtq*K{op+u*B{gUX.lJ1pw#A'lY&,( DE<0H[ \!# sӐ[o?3$+3h > rreCEv-k/?Ё9< w(y@lĤA'%l.\N#شl`;A%@/g!_w˦g7=&ywn^+*N5.`X C  iX*ǀC@[Dcu=_/!FUAY؇?o_3z6 x} 5k|+5sXD( KM 㠔"0J`C ӎbD@"=C ?{`m&?ro%;v TSr MPݘ*ُ6CK^ U3ɂ xxJl*hziwFO2p̎[4D2֪'DO 13CH;'ׄzS럼/[Aq9B|L%˔(wy0s!nO(<&2q`*%J_áCK]T@ۇ?+kKCWp|Op:t?<???????????????Hp,a2>C$1/~*?R\S_i08=` `,9 f5y  }:%Xt .)A׊˝hWYgK0̘-;<ϦO@,KJeAD0m=?= |w%9uz/S~&UD @  a6z~2zdDFj3p뾩-k'$\L,xxjqR~#6I3]7ts$[jq0Bu'1>/p[O6wZg_Lպ[W_]&:K\?]ۮ۽S7~&`6A 'SXW$ b@t$9ܷxR)0>GbB:E9EyzRF|Dz$$4lD ?fT*O8S$ H9BطpM&>SS D>yPO#\_<@3x=|sr֧ȢB0<.K!zh`8A@'W!jmp !)8Jg) E.=6u1իAM آ T&>Z{5G <x _c$MfɃI ^݀c~60STHELOSKk~$C?L.L%fLSy$<^#>#u#z?G.C {I&q`0"2%icĘ2WA`']kX ~_YDo4`06YhS-?K4h<ɦ ~ |x(QG <x\$M爀͈nr(Ɏ,@gyf@k:M32c #5`O<͂c`4˵~J@3|DA'1PO ղDcM5yH% TG*G.H-]ҬI@gB(~1pycxm:zA'SmK ay"BۓQP?>O<'<BG@% X7P6A\>K 8Y4Hyf V^X 3pk]6l5a@yK"0pZKS^[>cWz~#/ӆf=͈vCW0Յ3bn35dllw]A|T_\8|9+/)ew !ohhfI'?[vb?!Uwv|2҄ _(1"< ~Sx/sf֚7_ @[q`u5: [I.[eUj6'S8ԜW2=S]4ɣH }W$U6V^0ՋQ0-a6'e3] b[7s7- Ѿi?4EdŠx8iw _-|HWnHxHVbW5pjKˌTCF rE iА^kA7zЦf#seA'YYB 6&J/Q3Hq T[-DFDȏQ|`yBp\n6LKp}8QjXwAU02v/&Vcq%lW{VTDX5り\4͊9ŏ@, A'LC/yBqpBk)`OXGzH$yI6b BPM6`&(] 5.P6D4\0@<05t#D#eYXX v#wt'9ee!`pRja7<'O;^ȖxܵA 'M1Cʼ"3lToɤSeprA1|qt?͸?_`3b `AUǰ3w-_*b} :v"$#XOĬ|Jdžs Y CĞYfKHorD,y!~p dH%uQ?! S"+*D^,ˁ8>J+-wIwgcu`0vܖ#{ޱ-N1]~Y9q5BKrΰ]U1hiᙓUe<(( z8JK.a:^)u" 9EކRqQ|jet2# 7RU9.}ê,-[y O2'4f{!*5Ruod@ʅ"ҷ9X8ٙd˖3(WMIBPN֤b#mt>! Sݎ~WP6AJqEX@ذda\PONu+7YUMDʬ"ܤ[XN( *fa=g LVU" YA!uSݧ78}VۂeUrPm'7cTҒW)Oqbh0J:6Ww$%5>/(=PS? 6zF~6]vڤ^RAB6"Jqzdm<pC,NQ,m r%[)=R[> ]^pm.?5! S%(H$ DS;` %Zx@/]+ɬPb6Jl&7|AiCPf=$BNv0zzEcH w2N{os*;⴫(K2kb{(ȹG>] Kٙ#<ڋȴwQXڔ@P h1`C,"+K"uLSiQG )TJv(^:z32_(wh&b/{Ј mاP`14At(SYgB{ qæ˘1%Dv'ϒ:Tˑ*7fzF/zDFFGT~&l>CՀ2hHvGo)kvЙ(iݸ Cn! S) MtUU`"k`VbjZIvA\B:V9z;݆r6RauzN!g4A$^!6'(ZP\!d̜"eq*itTw,}!*@P(pgpPe]JTRֲc۽gK0*64 _ >9iQ8+)B V D,KjDS-A** <|XI* [y4ZvD! SU)!S;LX;hN_`;G7B ³bIĄ4XUCTGfQ acݰT}' +0ArN/BkZi= \"\?l&#72/,PanȥjкN(VxX num|v"+A:݃.Xet)V]Jr]H-(J=(֨җg+R5i[wur! S]+ Q쌠 +q% VTU)§ zl+UQ[ L\3.jZJa!<^RRkpG1!x Rz@JOIrē,L$2sA~eqdymgqXt]1.Z>1lg^l 0,B0+g).HYJJKȨd G`ɐ,/8 |&J'kLN]7ZR ƈz&oY5[B! SETBeb޲Q7 -,h`6l,HkuWc$ Pf@'9( -vbph@)Piy&sR &(aD|vMd^xl[wYPWeHYݻn䉂HܼϛC@,~má\% ɚ2@R: ^K{̜.V݀!*QUFTr&b-}VVT1URS-ɽo ! Sd%Y {\ D G&!D {\Z]JW@2fJ/bRz)R L F>'BQTpPĚoֆػ͹'}3u҃̃ d!3'ZӤxSK޳gadq9)X nC]F?3`{;#w(I줴TRc+B%#!:I$R=v#ooV"4•T1RZ^!y% c$s! SpHf:C,>`K/G9hL.ӕ4 g̜ Saȹ0CKoFr9 Cwl0dh`N_qAh0"*2`yx^!ס oFL1U#OSBzsn9۱O@l09 Yfl@gfӔS1Ǜ84n_!Zg؟m3n!Z7$u! SyP8}CX0oLu M}Cm=3#&Q@;6,>GJO ZhC>Ԇ0=?[sN-.?3{pCu]pގϞ#]\6&/¢-+IWx( F!*S-"AGU,6k3bfyfZov;Du<&ρOY]x,NTmk:"l}ң2UB#iD*iX.lQV.Рf{AI8@1i1}UkJп>::2!Y6Xp ~O]Cc E E*H5:/pB^Hh#n3|ޔ?'e4NqH<|M:K0k9!L9һ-9@,3{}d)L<=-('cYZ@K̟۝ލ#/FM rrC؅ciݿ-ˋqIfG4e;Q'*펮‡3iDVY}8ǿQp[=8sD 1@'4ԴQ)js&#RɭDb|zӞ_83} K0x=ϣxk)۟b>P#߇,}osEczA3_qf6Y!LGBF8 fdFBCa6lfRɗV%%QSʲ˥$/*gH&|c3km: N׬f>;GԃF3nQ\^j;*>ʏ>% Nت(I T,lEQ0|}bjBR];[x=Н;%h5+X31T XvoWtI ":8"=I6TNs>\r @mqȑg-G倠C=JK!jT3 LT sVA-2,鸭8( ~'濈@TH%˶I~ǻAqopk!TACCҐ#.",M#AB HJl%Q"HYliuDžʍ~5Mf-͝|'ݪ*]Fk5sQ$|E+r:&KExwl z.[dev'Jξ6+EeTo)ҪL،+u*?#i]jbЎ>SN-긑ѝa-cO{]}D!`B'!T6aP؈!#*[R,+RJ&ڈ\,W 3FHa!$'[~y9iYN`Rz ̪1q)2'[>ͨ#N$ zjá*ŕ}#t`PڬU Z`ӻlRϱTWƵKtS89{ aZ*٩Tis]KabDT%$(RVD 9[PJmBT̶֬IXsElI!K.A}aA !Tea`L$0R"EEu'mVHbr26. ,:}?5q^Q4Qu$2emվ4NbP)]dI֒t,E] 2F%F _}Vk AqOQ5M2tN# '3_*hmzI[*84?]Egwzr#E[/u?գv.%ܐs e ~ mZXjʌCAYww!T]ǡ0Т5殥еJ+DE)E>9PȤ9HhLX@`6L:JŠ Hj3h+1&Ī;'쎓LKцvsL$-L#ΛD/ͦiw{+R0ҠWS6~x0cCd0}y^[!Np^M,]o Z襝 [kD錄 hrWĔa{v4|iǒa!T5".cTa2UY*ʝRM0elbQ5Y#Foz 5/{c9ODO.J{C`J RkӜ4zp sUE(C!&A@'tK1X峑9$1_OU,:8hZ G i Mݻl 1cB83X_ah y902!>fu/~XcX"1#DO!|##<Ô>C4f^dL3)ue68X\{]+ڽ r0A`'ɀӝg0#C%@@#CD)X /m$8X=<O6R5Pwq wRoGac_m ZF`lm&3I֑CYoj+g ߺ*]dXH )jj}7)~F%X>u JF, Z$Hn&#csHBp>f@OM4gBiqt}'Dy;2\;d Za ǎп V|kaSY:~]/\<]7Irʞ#x%Sd8'dT<oH cOM?#ZRv4 f,`Kw<( p `c-dȏofg8SGW/W-\#!0=G+RːS9%v60VnLRLBaT&-@fo&!<_v>v/ `#;WXBtd3'|O>'|O>';C$}KP@&xϤ4KW!b=j^5aN;+ (Ҁ@ c) q8\axJ<11 Ki,eɸ@ [ 1-ty6 23p|sFp'W> -o_n&Ѫ` \4D}0@$A>l^4PCbpd&fb(%ET8, !&Ur%0@[d:Pвa+j`}nr N??FxP!CK`AEc 1ZJ_ϛmm6őp NX8wDro)lO\ÀxxWGsnF?f#+Z pf??D 9ɛmAtX$Wa2ԑ! r&I`+OhL?nV+`pBՂO~囓w&}~Oi#[Ʌ/ѓ<\%۟?@ۓ @G}<͈$q2jfwKfg t?9?b?sXG~3A@3nLg291f#w S8w=raZA'tqBϴ@"0<6&UK-- iq% A 7myΏ% Dx8|)`Cۚ,l Dy7ax آ &XLū߉WR }D)G.sw#g?8%M7(rGq`J3z(gĔt%&`rx 0" ]pe0$$*LP ?Ԛ 8ʘ☂on G Qy?ÜNR%h9˓#WԌ d_b~y)%A 'oAO)? h"rbۑ>"!xHVXEKΙ)?h 6y͉#nJ,T(K{{+'VO|&"$H;>9{ Bl"I5tLt7@o++jbC/)׶fGC9~W6@RA@'g0e&\"@l&hZ? %J,<~?(O < %lEX7S?3b#'! p>> #ד1}?+ ۷=Uz0eQA`'@b42Ki@Z">#<- I+/@ ,ԡ~[͈ ]x ۃ`6C Ͽ.u3,A Q@Dx(Gg^Laz9Rn_ @fI?a'W)gk  XA'ҁѼ B4{gั<.`J#qA7 <xQo+x 2O S)3a3X-n<xPNbd/+9\)<͂b7=i5 ];ŀhA'ࠄ&&_'G4낦\Xdr»ëlUG-ߚHXil,~ |x%G6fƗ} \ ˕;7\^g떵YPz)o_{NX[/,77spHMkҤhܕEZX Jj7mfp`gasCƜf\f"MG yA"hNV(w\:06Q`3]͛5\4)X'kX(~L`@Zdt#JT%A+/?\W_ҳ0'C6` /+xc^HDp,s`RM?`08A~?mׄ_ ?@!TE bX(B]A~ (' fĔ9 o@K,lP}hXE"~ vn`QR_f,5&;u%"Cғ kIa!TMA2{0Z:5"! R۾Ҵ ~!TCf@XH6vnX)mN^G1vێ̵uĸaK]n}BɃϵjM;>=k^LNQ^:P6ub-g:|Hd1Bx**iGM"ՀRP)ۈ]E-PW磶5O&)H,kFzWq=(F){)r%2Iߨi9W[[x`BEvuFO,\!6vVAACP 9>hT {!SbDop ` z_kͺƶ.в) *ڎ+NYK)mªq3dLZבR ڬIȫkwŢ+1wCdjXQAjiv߂~7o[L8(Zo,NbVjwB' W}াG&ώzfNf' @@X inoOZJqG3)r=2询X e$yޕŊЭ1AsTH, WsDԑ0P:Z7m9tDG'<ʹ7qB۾E^o;-տ3ڃܥfoL Zۻ (! v!eJ$-RMSx0ot&)YE@SZ S!J9OdNj.~&JoON>! Sͅ>&2^Jh Q@Yh-ЁmB/j1աuxA̚t1v9id`nI{! v~A |ֹ.n[R=i[Bv(r )4i<AmT6!KߪF{ s& f)8kְl>R@HuµDlXh :A8e%. ]q~(CC IBv>qUKsh#4e_Ia?*D1$ spNH2 (u(|,NF^6XR [ ]NmkR.bMQbT" ZH}^ML! Se"1*0YPTdp]ehR9MsԩaRMuYкXDcاvmd7G@ `/^.E2*|=[:D̈́߾ !9(-meB- X9&]3m{{8]fUHF{_by=1Ax}e!+fId#>}w0X$fQW/ +̺Hg:R-Ip4{$@SƇ! Sea $ BFB D @dm|c|3jLS{NVP Κ읨o@4u-jNOE謢K5rshGp۠!Qndz% $c, {h弜%) gr)6yBCY+Q8l0ONf|XHOx>= \@sPJ8ҭ"!CV\N$@'#X .Rxl]^(d QJ{ uhq!)$t U_a $y; U,! SZER("b8LDQZܫ;| DwHMeQ ڥ<^IDƕB Hg:"H&q-K`1нiC3T `_]ic%3/*}1 '\k |ǹ sothYZX6EpP`D vj-KtPO(Ӽv.PZ' 1Gf 5)|%}>Z#+Bȕs! Sua(6 `2FX"kC9-]n[e@ a* C\}ӈ lta\[g{܂vP=1]AV'YcQkuGs ,yG m$|J ׃h8fA$0HUi\Z$v!5MC-d 0Q!R5'/$|n;`\XV39IJ BJaسTRQZmZŶB_7ܾ{! SPHfX p@xZd1?/Lc2$c2W!)#;r~mST6[>?{(uJcHB~daTඨm YBiHrңq6|}JêEM =l?v5[yH9Y uЋIHu!0rLﺢyZkx(Z]@T3iyknBddm(ͪLћ׆ W@)pWd0g! S̈́`_ 2A*˗g8@^jbb˫?G+&IK0 nl:bkϕy0Am6n9Qޛgw#InyѡZ=oy|X1oiۄ֘z?Nuݺ>SP7=^, P3bcy.suY!\Z{K%^&eI`'PPpNY%/uteNhO ^iQ҄VԭL !! S}PB2SlP0X8r%|ؐf7IG j!߫ (g;Xj6 su5r}vU퓒5.[VO',5Ǎf "۲\x!scC?t㬴=YOP|pCxJ2ˆD-܍532aEwVwnBPÄn1 KZXG)P$M-D޾S! SXA]3$̕t54-4HVS:ʒ'~Jh]}J۴+ZK\s7ȟ&),w]'X64a?z{1rWuf:39b[@YK)Y8މ2\? 8n7݀lNBX X-Rf 0)=ݰbIRla`ZUt'Bּ+n4-Z(EKXHE-}ywg)2e{3/IQ! Se%WA5Uw(6%Zp~nׇΒ֟Kw=ɫ&bjY<}H')D:H` qY1bb- laԖM u8i: 9^m:Y ƃEzr 8d--%%Dt [&R sLhAgvEk\6MTZW(YՖl9` FF3|yFբި/efh1壨!,aAByz؃uB ,%0BvԿ0Jp ! ScZC0 J0NOy10<|.w$@ԛ˜"ec0},1Hb &yERVc iLk ݌4,Khg❌{(pw|zM@g_G ~ٞi ʼe=!6g7wm=Ads4b!>7ϬN2p2R0F* 3k"T%$0q \8?g\U(S -Z_RƷԺWDܕ`s! S[N`@X-sHP~ 1AwK(%蠨??? A4

`F~BHA;48O75\ IЦ߇ hH9:%$ȓpؔ`_ tϡG ?0ڌp_GFy8x{!ʧ:i5ZD@ȵzhaAp 0Qx K(*hro0Addk7_2V&DO||% ?!i[;O+sM=LA6XpZ'lE4u"%QTTS zrJhOp;v^:gPnhpÇ9G!p ???<< 3B?IqoU???c>PKLZyyGVxO?XT,Ƽ$˟,oLYqp=&?#;6%XAj_` c^LYO` c_tc^N?(,ñ?` cW:KɋpQCNA '$V1E E sM=?xp^d"\.b>bAo#Z 0Hs%Wwx& hQ`ΰ<\yZI`3c psǁuS=ʡʢOH|?~pЏ?G~%?! s$u cnX 05XvиjًW@3yr.,#OB"V֩M?_\Fi[nVCMw֗/`H$|0֟Zﻟ`YMό 7.܌Hwc4w 9!خT.=KA@'Q&| ƽ@t?$hzDŽܷÅ"Z?%&p p^dw,uox_w2R?6*b5Յ 3bm /D٠3o|xN~& lv:ا Lf𘔀H!]zc^+Of@fp9'4kAA`'W܎ RBBmj4$pRQ4H%Sc\FP>>ZKp6K0m m*cr760 y0^BA+ˡ!{.q~rSpBx!? H__ A(`&nEdi}t4(&?| 5A'GI}MW.Ip ,u?P%PF60wɄ!^'6@lכL&SUX&*3/A  ze.)c؉MC̰<H$-'!b:@3x0:1˜g ϪUrffD-Nf0A'7x2/h'b,y 0S˹u/ T Dӏʚ~"FdF|kw$[͸f]lVH mi]b`'͉ %BPa*Nbަ yЃgwgS'#@9>6Ͽ C)ZD *W0|blQppA'Ee7Uf|)iZ24.pU<A& \^@}@J6BpȦMp2VX ${LD} z(Mb k? :_ Mǝ]`20)!@:㢦]qvqWd.}A '1(߀,.$ZJ#~pwyG* \O@f&G+.t @oFb9xNd=Y:dہCG>!pB!y6 {:o #:\9L&ya@3`3"5k8 ! SSY@ԃ|m]Pq UDTϠFlavsF͚{ChJnC d)h&]eF0(@#Ih#߅Rʳ@t=B&Id-BX@5>.іLfH \wT$ 3HH1͓$!mAV|LA) @ 3-0XgQ*|a̱㑍ֿ7eQAeBN9t4p! SA'CAƟlM϶rwg@_`߿w$t7lg/p=h mg >SPwFOp37 vHfh;o- 2|p' 4$RG@s>@0  `O/!;3f{`=!!ր9!0s!0z!0r!0w!0z!0q!0}!0p!0}!*S2LD( ) FR,h><<<p#l<<=p0/ q p!L8Xn6w@g ZIe-]J)p08"GW 0 92_)|BX =g6ubܙǣ\l0g6ew`4 0ɰ}0&dʯv Zi '6%ZǗ)VXQ됤_uݞafHkEW?a nc 5ހ0<ߤf`9nPBky8*?)aw< '9W BT %He/S 'ķGSZ"&%L ~:f/'&QodH|;60b;ѷA $HtD [caA C`K)jQJҖLa|""k\:&<󎇾ARtxhr!LH52ȋU)z%&al=qm+ENhKw&ig$R)"L Ta4e@EӉ6HIځsh0S-"|=!WU̦=c$MD=3~+˃z<4u8FTY̺E1IOpިpkoylz7:1X.:&1m) 0*Ăk%i6FebFY+:nٓ '<4G5.4y*5 2 Vz[K6Fnj:,p08# ݵlB%P;!TBBKJP2,PQ'MC7j#(Dvi( dI e5W:VNFu@>͌M (k{ZwJNT$RXEeU'Uhʻ~94-WBvZTռXsˋmwh6h \"j4#gxLȽt)dF4-"3B*H`u\U~0`č05 Dm=Uum|&/;]'b+ +@v՘A$Y> W*aID =!T:Dب@ T@*ؒڨnfTpskwXd(,j%S:k:"Y4ˑxf$vlX8l)˝Jw jM(+Z"K ZHoŭgڂ@Fa^Uڐ`F/ anftkvNX`VnwգUr `]'uCC훕Jъ\wg~*ajģr[N1/#Mk&J@oi}4Z(Vz{m=n:Jgw[8!T]bp&VCܫPZť٬ymNTSgU&\֥*N5doA18@Y݌fx%&efFZXD4q,eS UFnŅthc[s 2]F~W6U;;lrSawBv.G57Ť&l(&6Η"v+B奮[B8g}C/O&u^u^>>#?&/V'82;2Pѫ?!V! eE [!!=^#D9}}}}}}~OL :TJ+U~O8uR  b1h_? GYN@AW~9998ηuCLIŘ-=z40D΋A?@:dU }}˟&j Pҧ(+62O oǑ;5%*f N,63qO?|6ͩi|G)qrZIb=YBduE~;P h$ 3=7ם T'uâ-3bgO{ۿ aޜtܢ3&%jUTOh^s ,(W?V1H.^@^ o! Ȧ3ր7t!&e`•!a[ Np5c^jqю(dJE6DPC~ !Iq m}v?x 2P )rOkB)01i U` pk  Fl|CJ4C! 8`w- ~͏@P2Q0&$ q#"&Íx+o!b?@+sx Zx g h9$\8a&??JPwu8W\,T @o /C#>fрJ{;o30 .W`P~@Tb\gS5&|nEk38BL S"Ԃ? gU}痘_ @FJճ_@pAؔh!pGw CP\ kZSv 6@@} '_`')|'D2(J8n9A?JFauqמآ.f? ZJ ^Vi`E&$KT|q@4?&k|R ̄ǶꦇY8{x@T ofb\S)-QdB!je^hLUsE\վكnyy#:=LƛNL7UW޸),_ J;̴ pl?r2܀iSiw}2`,o3NgQ4 N!jGzkA,p|j"0r CM{Jn8Jr ]jd+{8Mp)>i7ڑ5p^6f/;ib"[`P 6w{n;+{@z>C&_h'>0?Nތp->V#>ÇCȿû3CD??ppldF_xM"?I2W{Çk'z3 = 9XcV<pe+s__t!Bm,Rpz~_ DOT_м"c[@ @Z'=Cc,C400`}0; ӾS"  CWQ]_,@=0*jOpB{jP( L0 ^3x_a0۫6a[ Za=`D+jB-)|ZeŖ݀Jcޟax J9,@ :d`&Y 2P+؀z;0Lg {0a?8GTBNtbH;4%DxVY 8io-]^?B2Ѧ~~a&LD՚2pkg  `eyUC~VX-ֺ~T:gHͩCUG-8l5Ipg #DXoam pW*2bKM{JU@N}8&*<`81Z%wӅ0+F+me(%Z}_ fq)Nyx ~(&Ҋ<QcD ^:~W`kUR2 ?LN!P )fBȐ&`[ *imuwl"g7H^V5,-upTʚn%×(e1iŇ8KpiJcO>@tPPR8gr</x=7#y=Ӏ cat_FJAgCx= 60{uȐuiv2ICHS Xȃ |3C]@f$ݵ07nniX$BNG>@π c@vcۄUXIkz@^; <T"L&d?FA/ё cSY`&ҍ$,@C@7_7(دˁ $+0oɚ̀%!VH<@mٗ4 a7&W 5lo ݜ0#IEB.@LdɄ1U@tW" D}& ^CwcI`id!@p*- Y"pʗYA;Ĺ+=0ݔ" N_4CZhD]DB/:ޡ: Y%y|t)&t-1ǟ 1/2OEyOeKY".(\倔AN\*;+ 9-!zhҸfJ+<^j{b ߣzd~ DhR9>?=]G9f@\>0S hXd?`4 ~/.;|qU{a _؜Å3y :@8`VH\$rdSȧPJrWFA'abŰçlAQRvngJ(tOپ&lOo I8Vُ)s 6غMm$lE4X$)Gƚ F:WH19-I@R3c))e` (U Gx@cpa²wr߱|wɅ;[(1gр N]@! |Te;w0 XchWg`D>QImK6,/a"DdA|{zij3DH]i5a ,pKT8(Ջ] Q O2H>^zб"wƹ-F0$,@b 917tK(l)~},CfYdh9ޘ wiP1} u_k&T.itŊA hx 6ѫ!hЄ;{̌[o@`,@˷X0 r.Ґ<ƾZ a1FE aͻZHAVjjqUo==fH1Tǀa3i7_Lhe8Wm'|O>'|O>';C$S 38 b`ٞZhT<Ǭk)D*.pg> sp `ڌf;fpyP,aN (`<>X*_6r_ @'WOʋOwQ ^DP 0O:80)@ +l%:N\*<`5clCP3i 4 1;S7@3f0f^??~ >p((0@'Lb<$~̪kH@C!=`=@J#x+u @Љ-8Lܩ1gKH0_xd"w=wެ-D_|oG#x~#S\zL阮Z3u.j0_`clYkK_7?~C ۼbɀ -|=`0#zL}9됀 Л,ٿ0z{1|~ɭ?0!zrBGS='$qP]@8K>A@'L6(V GCȈ@`"a A F>&c'PQPJ#yG@f 3$abxjg`Ƥܷ|l'A~FfPb#'0g_~:C?#ig?yTOM Td\=Lt`@3|A`'L @Px(j|0']ޑF㼤P0J#pR~[E`,dРSp:dLb&7;7~' oS:!7B3?ɺbx"_ucܿy7a wl2sT&C5A'LaA m3 $@%@x YMupki!/CADIxfkhFҨS Բ|MfS]`t n=.#r+L~2scDdL$62$\ITA'ocTE9h\GHtGX;cM!Sy|1)0He2e?cS"E@qkLELN~XfSfX݄"p σ !7wo59U G> 0\=WZY_+iA1'^|NC&4=+M8idVT}NA'oAO?!<30h3?? ԇ+x۳L SfX4t4=x D*ç^@9PR\]grr0G'1_? C8}"?v$~گGo?o$2k5kioEȈ@ A<A'g0f@ @aFiahJʖLGJXa%-v Dy#g$H ؊`4flpJ6+ve1 c6{;KݍG "Uq \#|'7c.T\#o=kZ1/d0Iv 0Ho6G̣z\%WGlcৗ7SA'@Q.К"! } +)Ϛ'G 2fEmWGLb3b*ȧNO]1h| :Dypx?z~ `2"?(rB eBf:A '"jH{$)(*ำ`׀vG,=Q G f,Ba2xD)wf 0;)c`Q"#<z f:x~ <'2!cb!c9@  / !XH dff&hf!T57Ca T(b3 qLԩWrBB]'쮘i'Rjy8jGe`м93Lvr0dD,iKQb=74Qf7QkLKހļ: 5͢51SanHʗA1U`mRTrUɐǟ(3YHߝuexR냕(Ue[3Ö^ܧ+1:V¼ewl9<{^Tx  D(f\N,Qh6DIڽ! SjUBE2@K 8ǺJlŏZBǖ`tLSӈ g[jpyIzu 2-GL ΢KEbXI)__jxIS_4AK![$ %L;ȏ} :=,Iu|+&9cbI 'I Z/kqrZwv$-ڤh3^ !%Q묹֍{E*)Q,F 1J@ c{TЇ}m D}6(9R-Wm( \ Ux|gc! SNV_ A@VYVͲlk0Zp!ipQl;1^O4˨` %8vdXg<`($f%bAc W&0M4:ADZ!&T@0T‡`J rT\d4B8#3W Yb٘*Di).H#}㺩Q 4wv};BP`!B5l=5|o蔑sz,$; 4gRTl.De*^Gg(O֝tA'<b4hشC! SŅ`Y(CYJMPUڛ QUW TV'x{Pk.]X(rA?zf=+XQ?y/>~b?xg ,h):M ;ֳC C]9{poA8=N2sHz(&+%k%ŶyI&AzQeAlKmxhPVj3}0? \/wqɢM3@`}H{<֐_Y(bPĄ}Ā>|NȃkB%pmE_(Rmcq"M=BHE,d S՗Q3*^Q"|\ NBy^]YNI,Tl YlPu@ p (I0 F( KBuB@Kx0s F[5Ͱ0Ο8Kua! Se$"ʕV Si%0EZ2?'z]Uu;E~Jm\&cA: U;F&l6K/0hKSCt$$q2%nIږ|j[p蟗*[UZJe^3#4Ji_۹qEʂ`1GFw[ƝГLWGG<#wTj>~dc0A2?_%-uv%1~×_YʗG&|}ӳ<`RQ$ﵥ혴SuSSK{A.Ͳ]8C^%Xt! Ss($0?Z3G3L;Ӂ3cڮrBs 5%sǶXBj/<whڸlˆ@Km @Yg>P4nCctٻ@/rG1k>o",^, g x-P:(;2X㭄&M/<,evo㾊4[(P@7+HNuP̠8Bau! SR(HP$* h}?};v @#02b7gU>d0v;X`o0O|=x}6ood0'}_?񮥃P0/ R}[H~Tj+o!K>r|Ӑ6eZ`v(@B\,YHʸO\^oI|8! S}-UAXَ@wK0;d+ F7nV۷V[U@u\ aH6{Jk Dǁ2.4. Y.`ݕa P$P`-0Ba5q1(k.&9זG7ٟƘ[=_kL4-3jS]k-#16Y,VFغdM._c,rjV_U\"n^K! SL$ZARiשO=gj|`^ږxuxt0Ry+ $R635߬M!7%$yefЙd c5mfY$Ddp;b`e{ fU HR 4DJ-鎦_\#p_kKq&thF;hlةM h*ڊ;#!'{$YM寪鮟7 O?{G ~GBId HAl@[Oɕ~Ȩ6(]Kah! S}"HF b6غ+.1[;B,K*FGmj%udchuHbScQ%Bo<ƍ>-z&u[?6Y^0cpn O§^2[rnSRux.hE$CXhIJRCX29ƬphX5?SڡT1_n7tgY(!B3·)Bw9G(+3+ʋ L ʿ2^xI*yU~ K3GNLY9mڀ! S8DD@ABYt2O5]rk[aT;M;hdW$X`yg,bcP^J{FJ &_Vov;皍h1N' :%Zw[z;stIhRA5UK}TQ>,?P8 Ï3|~L ySz C1)iA!,)躱C'ptrrkp! Sm$D1(xȡPL=ֳV x*qeY3rcE~K{v/Or)}`%Ѻv+)ʂn4k\l2%%Zbj?I{ccs~5CQ }I7a·Njd9d%'Av`k1&^${gN44$LEgfc Cxa"8L(I5 |dP,Ș 9s<֥%i $o]bZZ]VuEzKN )^8! SJR"(U *&P \lcڧycŮ?1qqO;5]Bf5zmSp{ԍ}W1< 0J{Ö?9޽B*KR+q6tMnΘWӜu' {}L|+Bj3^IgA\HB ر TfQE*;Qի9k-R*5{ ir! SmT"R )"T?>^fE##(o륽Z(vルZ拯qH3er*497kBJTq(Vh(Zʗ&LHs5B,`@`x(;]!!_O:3h6|ʀo0>rYt>^z`؜VrC7.f (خ!LTHz! Mw9ĭJ<.r/zvKnCPp|DW7;Ġb\ vMe]I}դ9nEYot(TF0~&ȉG*# QVz! ScLz Z96V2Tq :E9tH=̃zwYD^G@"xKH# dz+RK"EȰ@˷@k &9gbU%|gFSRdD @H(44Fp0}P#87!"tUuB;ݲǂ[)-xgxۻ 8nTcn)l Fo ?ϼ) LIIڊZ!YV4D1DPX4ٟJime;/Ŧ[ahpA@'Q0ש'?xGpT$X`20 |x(Q#Pp;h(SD!V2fh;$n53aH\_DJ#S pL=Z'g!E7jo zK2 ZݱZY|'PX^U.I>,H SA`'$ł?C=Mb"M=4 cD+k3+挙8f w@fD!W ?g$Ey[c4?3;/O< f\V ~ V"3,LA'%6a㉗ .Z")(0ċpA}?;W݀̀QA@4a0993 O|?PLb~ y ;o "m>k3򁉊Z'G"EgdA'%JDXJ`4GsEjA p^^:NB2Γ;Wwxaq.+] e0x%zI( z$6l &Ry'" a;m ?Cl8q܌RLÇ^Z6FdPf2s0hrBQ=ߡxxcf-HePH4'<8K_:T><"?6_L! -`2Psd]z4U"' $/~T /H?4'%^+ o8OW#G?????G?????}9????~ tL0A C0#  x§1ٍi0E L"n<ShnLL3O)PK=\` adܩqҴJ} f5yۯ.Ve2K0 Jછl r\'?x'?)U| & ~apwSר[uP'igK0` c_.l` aӛc f5$A'%%,a8xWDQ|Fr3!h2 kÐFD-J7\L7ٗxeE`Ib“<(OSM,Gf`h 񌺙!eQqMUU>L8DtϽcy~ O%?%82X"‘48pC`0"aVp0zLwf{>2^(.zVx}tw}ǻ[pVm]#7*w'!$B}'.ޭ!rS7{(ek/S8 FҶx-M 6/,n\oDw.0sk^oBԭ<.X*wU^L$@&MA'T@ X*@@K6+_"8*>F p]2!ͺr< pEԏqл<%>2<'> 2>;^ώ&6k: %7$@H4r¸I&UQb%V ޣ'55Vdƭ|۶9idDGc9{qlǼe1k]SWSZ06Tt*r^XNrSSJK>*RH-5 f;YCtd\T6Vg3o(~*2$:Gjf,̧(Qrys9j" 3(Gx -,03a\l!~ֻį9{蚷%YX ~;ؓ%Q,ZKhya7s3d ) H]Lhm^9YL~IpnMgrf^0H¿x#N E)sk_|T7!Ou|LSLz?;'=_>NCb;.Ǜo5G/D A '=q}tZ\KB06+(K|)o-/@C%ygLZ8" MIXD&:2˘nE1.>&W>&,F<&<pL?Cj@3xJ=k̙xW|wb z>xqGwU3 PA@'.6l ;s x_Z-Ud _9 WGqmLW/JJ3b ;3Jf: `3di2D+W~d%b#N~ >ESV)iƮU\eD`ϗ@fIk#M{$!)2>N.YT 0A`'^[>O

2UC81iT#= ™끟B É`O; |?jhA &O i{A'c%n3Jbt;!|/͘'4 rgw$zs1! .7((!G8N&M}Y&Ք-*Of}y8JZ%):NYkٖ4|1A ЍjH#Xݝ>Jc! S`H`%,Z'ۚoX`/~5yJZz^ngp֙I3HA|x*o?g@h-dҵD^1%z-fҋM-d%:R F- Q+*&$! S"DE* 3_ h:NƚxωbK==Iˬo{FQa-_<1~!݆,ZXqMb%4Gq0"NcsЮ$jlڿbe\u[I8hy(,t2El E6\%8lW g5xyΰja" 0RaL̗(1KPr`x! S})!Ny/ pu;iJ?i:"L/5;Ӷnklm5 YRU2ֹ H5 @t%la!rG 2L}B-LNh;UA#Mr{߾N[ cuGt.5DJTmZJ{kLa*%rGTՂ$a)&W ()Z $(WW[a(֕Ҭ'ջ33! SEgDg QxFzY0tFO> tkxV)~weobRSj|]i:Y3 Ryu4&o]vLXu6Υ}h-? t?Nyi2ĊSb@kBV9`Hętr1tf,#(W|ݶ' g-q*%$II(s\svэBxU: e1OAHE4! S]" %we`@[)Q$:WtܛszoQvMN[d§h׀5ḣ@Q s ğZ!21RAD 5e3(j$FZ5oq O^SqWSGya- Tx+5`<3HwP+ja[],I$&βsߦ_!޶Bncl~GaZVBۨ!iʂp)8ӌnP$wHie-/ *}ý&pON0LcZp! S-yj`, -QȺHcii3VG]v+([>}myo;|F6Q7[u^ ~YiީH/Daժ?kFKVQmkŘ;kMC 5@Tiڽg<$ !w\J;G[R= 'AB\R;Vd;jJISU^S*r,kBҶ`Q! S]'D%n:iúϝ4O_)&Xz1''8SSrה @!&1vDX"YV-&P͡y.y?L1hBi_HȮ6 1V~w(b"! e*%1rSr!`9,xY8LWǪ ZH+cV^ Rh*;vWBdA ڌE]u6Iwgjp! S<lN ? Nu,<>86]]yt%\⌆oR0ࡓ4!Wcpm$'\ 8g@JR&DRQ#%ѧy+wT!;3qYjDDĠm}=Qİ@jDe@>8/_.ɘN0?`wN 97j|N:;R?9h0J2 9Z\j|NVd0؀2kC~ݬ@ ϋ^s͘%h|p!*SD"TA Q@ 41zԏ%Yz(6[1-zqKCRC+ QNK_$z^FlM{Ǻ{L懤*N:2i}b@PFvnEf%qbwnƀ0  űCs]拙; EA˱Yih';^fdJԲ嫃hsyc4i/Xtgk9\K^fϗ#!L;YTipuNo>uwɠfgf8IpoL6':Q#2zt Il=JPԅq߰n_lG]v3X>s_Ȼ>◵y (JQ` s0o'DC{+N"eI'O 91iLql-F t6@3`iDqX6A6}@4S! {Hgug@'>_vr!LG4FpHvÀnHcYd}U%Md0}Ρ.WE|{؂(*(zCd3rAU$m\(ɱ~Wst~܇RkSA |0a˭Bڿ9i`iI_ Te ejvRɊJST#ªYZq<ؓ´|T &C:BM̗T^ v6=4::k =0{Ċhij˪G%~-9l ACBMd00DtdhN!jTŊˁv Z +A@nm]6d]}zeJ`<#?E<f{ @Џ N} F?ZUvQ~ݷՄ:w&=-OOY)m  HK[JA.P A'`Od _o\q R`%@=GŤSf^o8A{D1_~'MRG9?VO69?G A,Ghs y"ԿD{Fb8d|@ E/o@A't><\4ܣvm:ĖQ5_cJk S3dS:(x 9>l0;!c8zcsJ~`rcD<EEcs>? q9ϓ"6y`!`ȀfT)QI= 8"qVA 'ɀ!;]aGK$4 x W_W+ov0#NܟO%b &c83 c>&%#M_BQBdΥ8#E,4 3xlPzǂliHΚ,{#M ;pHf|޸0FL](TzgqUss *Josbq~hnD*y`e- ΩPʽ *@{c挋zF {K1zo0Դc@7Ώi-o)öA0 BHm Ƈ@[a\.= ;~[-o Ns7vB9/#x"8 46XcFD,` 5o y|*3cĜ/W@<Ӗ>'"(zpžM#KtFr )OM?#x8Su@$ p`9u/8'͈T"5͠ey3e͚g ~k>FA<?ءC'>Dyaf2fI̘àE4E|)ɌP#8hOL@A@''|O>'|O>'|O>';BHQg 8'bnvR'(҆f{h@=/* i@@P%NP `* <BIAZH(R&հMFrZ=$@i)ȗqʚKN8}@(1sNz C"& pa6(uJB7W-@xCZ@ CE @hspd ^.)o*!e~:o@3xUKnL??^Z@ V A2RG2V#jhm>$4%fǡp驚ėLRmZ 3Gͱ_ͽ: .<db|pSsŌo&QY : 9;4W&RBǼ=ӿqҏד9R@ A`'t, ]y0\DZ# # OyL\cEL3a2d=S2)Hj'hGbe?.#';,;%"Ha-F~ZmĊO(f;o~0hGPG Dt#?Bx`~1<}r//x"hƩk4;ju<%q/0//gB`[cA'LaAbf,ǀH+" fUnDo o_@C,]%"AiǨ~0{& 3)ν͈ydf/.;ZE2r6>&Qop}501'1ԡCE!CEedG3x?&/3~K \|@3`3"qy21t XA'w4pvG\э@4I C]j M %ՑkǀH,Bs$Iqh~!+:Ef>kLQ)=cfxJ#`)O}2c?; |6Bܻbyum|Rpgs\vk%75ސO07Gg b) ލk`႗3r"QQ~I80-66jښ/fzg߻|Gr_& ۀ-0 ۊR* EFS"}w!_? L>!Gx#3sc*)ЮP?Bor悾&t22_С%}WL^Z)iK8q*T 02WWzsE0N򍛛g/yi>0䗓厜}./Mhj]4᠑]<}Oxzo(51XA'oAO5\4f΁h DBDmL<-|Q!<}/t~8%<C8(QGGf@3`>dt!p2uf̋dr\!EB%Z,#Lb0Ǣ<'4?ᧈ0*w?ՉlE/a4fs0AX Z=É#0~&{ A'g0M0&BЦzi7&b3p%IK $ Dy&Q_QGWI=`6";@sZ,w_m@fɅX #Q:+mPҙfA'!{a+ )2u^WGF4EA '@kjP&GbJ![yx 2fp^"Q}`3d0.)~v %>z#J#J~1&_xͯ[}o?&ˌUPC5{Ŀ4UGPs&_"Bb;4-L`&!TEäL4)+UdVpʅJ*hZ6zWsdx 1sNNJFy[6A#VͺCf05x":м~PRA~PI4Lw(3T\;Eީ"9DLp_Ef48-^3ll%0ѱZQZM( >btd=>~a &WG Z:ZĞb-QWO<,G/( `t!T= aHq +0*uq PRz L.$U6kh*ڱ%T+V#;}KA/jƑF|MLƥ)52iR9f' V$Ù_03iuR3ْeWuEFag mWÛT/@00 !@q?Yzֆ;qHM&10|(wJo0{(bn=+DJWx Q7iPR#;Wui廼@%x}ݙo9*8ק{e]šlWF9v^;ğ@/{EQ>wEHkYmJ)!t-2}@l H AH*IBx D= ~ 1SPssp_Ç]DM eL@|៸dp8Qd~DfkO6Lԥ0ԊUEOT).a1:'m0?d]wGD߃G k?#if~d6ŁzKMp@)6)\s[R:KLլ886]lF]ȸwԉbL7"F{L?Pl` A`#/,P0]Ha2%hRNӜ/*(ä&%`+M,Q>gx! SE2"U)V*^T d@Wvf~Gxn( *aGf8k&$@nl hr D'@;&M}-Ԙ4x-l0h/o+w[-{h~t3A<]YĔw<ʂn64ܑl=,13+Tp( eT\ hxw#EE4IUĈHt>0t g~@5PB`z^L {ArQK, V="VjH,46 t! SK0L,0 * d[&hv]eNv|?G|їǍOPvC u]KT?;?B YDlw R[Мxu"5o{ݮNWa9fZrjtʪlOx5f\QAtD@ŌF`dD`r;9.ȝH%,DK,HP9%޳;,ˎPK+^Q< x! SQ'nr]!WD?}]tP 0fj|&Gwww0\ ­R u5)a Q S_6UKJ~iz;G s7hp[1/` .iog5j1ߖYj7O} ?%ظ|1~/T~q16_v,vE1B dB`ХS4dm'O)rxDD-\ѓ>5]p3c`ZϳKF,غJ Y] :X$yj1|5պU; aQȶ:&Yѐ%{v؍mE8\.&Bt`DG-Z/QY=Zsܜ^mxQ?ȵ؍i+~h]fRg!a6Lܫ"R/V sq4! Sq& P@9: ?WUV. \x ׌wW@`Wf#N(}Agȟ?v1 ϬIrz{ 73),G$0@ixH4Ɓ^ ߌd<.r_/O$~*հ=%16>"Z3Y#"wmψ>\;>}[w?uxpI! SU,b$X^@в:8RJ@٣- C?(ZǎKDYvE%ɵ.Q5XϬ0j0RD'2F\qؘ_0pt C#a[}0m#!l( }>OaC޴>kYpN3˵:6 Z7s!Pgf{0FuLU:įH.?Vz_@! S]`U` e GL9)7S6tWS\yircg<4^k,m?ʇS"$JA %²/ ;A)wKK#w8-וTqa5n6RH0@B.9TY@FM4Y>w(xg cYԬV` 2)LZAyRX«STI8[! S%бQHKd$(EsCU-7~7eFaA>v KWe}FR 0MOȾ>KW1,*wZ*Vz0hд$Ki_Hi C>Һ_^R`t[[6|׊|ww 8.0 b0($JS\*&]6o}2S)g[[C+b+.Β#mo1"e%V ۯYe)! S LwVaMJ]%MUKqSq@MH 0\W{:kRm.[h.-Mtݔ3 d`Jk㏑sU(a t u L6Uɳx}K+yt.4k|7Y(2SDy~݋l $A8х aGd_]C{.7dard'4D`ԌN^#r5, mf:bYj~PdT#uBpyLzֽfs! Sa XT\%K@0 3}{&ܡ΍Ta^\0CÿTf7(RIu Ah *Qz+$LՒEѬP s(zl" ÂO^V]ܟ "l ,[sY&G@q'cZȝfNi񤠤 vM -Ϋ -jl.2R 0e L1"q/[͗J=Nmte[bXKVO"<3u! Sͅ>E Uj@m KS ;GnjZIJ!~S`H2#5:t] TzXg Ujʻx;:dv˩GPb#h6\x}RonW ÄDxdz4kAII:A @°Xp_cP(#>%ۆ! 8#)-8Ĥa ! Sͅ> (DLX@mG|}Lr+EDL6t2J4PVǹ7Xq;d䠜4*L-V`kSCp=B6;?)vMQI`j"YfpyxPjn9,~z˚ܴ ĀQXRJeoT\"EHb48ʉ~5ZU""fnr)꥾TNܮT#u٧zIL! S`ܰ Teictuu(6[7EUy"ɅB5<5doqcŞ#^P Wïڭ_RmUTL{=}EXE1Y<<`#L9=")y9{aѳwA #h?9f| lJh}#%Mf͊ch^"_ VzV)Hbu:`İuN1! SNHP P(mˤZх'\N%[ 1*E/g YT5P#r 0t @3m -m1;1Y`3pO +i1bZo"۟L dj|7{5/OB1^I`I뚀PH 1o4TA'P=0 BA/1XnXr3X7G?!.+̮ ɦqpCpdi l*dX $Ezg9yL0!mML2X 0S !iA',l 1x<`h3Z_}H\W B;}m0y,%c lTA]0)`rrfD?R yGS |쬾x7!wz__ @\v$=ޟECv3q g0LA'$]&, -bbhFdd4= G/c &]U-M|0p6 0@ANX*ǀC0*?ŽIS}B{ 1C !!\M=Oo Rm,i3ߐ=5o=s h 1qCFDO7D%?…g0zt>Z(y-NE;}G????<???????>????r@lX !GC&j /ь 7hQ A30>;T((iӞV0K@J )RdxSg3w`6; m0^HVÏӫR3b;iL} " %$&ay$RAA '48B%낑bimU T,!0_? 9uf҈ \a3dw ׳5^l~ex4Fwy ?2:Q()wGڣ`3"3RLN̹p0A@'q^?AؿN pR(FP1߃-lqpߛ_&t|GBp7i6x%sk& ͈4@&? cƮ~fgûLļBŹT*eSb<); H`ɜQjٔGAlaG2 9!L~ rֵN eE7*e]Ep%wЩ @ګ@3`*D8;LR7ys͊S?T*m@f`짒©2M.i%(c$55k]|OaW}3~pUٸGzE.ꚍ،)/"Eؕ]Eqi?|_+y6.~! Sm>Uu* &'E-R0qK2@Q.-.8<9tg#ݪNyµ {g1hӿJT!Mv4cKJ'xVhDpAo:'=/߂ytD {Ԁ'nhΨ'wq.@b&/s:= \辌7;#ӻ b BXwR\HգB88rxa8kQ"+yt! SaKX UY(JGPPNj䙼DpTSӜS*a./tOI68pWSt[T;XҎ8%`Bqq kX6ibc5F?vLKب2HGWս+?vL_%d7ėBBTkR))Pڇ|LM% ZHḪr^ݟ`88[S5!a{ %2(7GAt.Z 3X޵*ڈtS/BmQмd?! SFP@i=ǚ^%; ĄG8o>8,?f7q!sD*l9! f sGGG`)K|.^?Wyn88lF Zz{kD;(gOfӰڧHc$A](sd ̀T qtvNqQ.$BJ[On-K! SWFo(1*#X@) Y̪ h1ktfW>ہGӃK^Oz(*"6A:  AJ 뒌.SػO4:J6nɀYًVMymlS&B}u=i'v)5+/9F9 Rl" D C#F8V Z ajB +GD[h|GǗ pܻEWZ[5m;Fk`b*QyW j\Rei*! Su#"afR涵@qyj9xABDK)(Uq<)¾_,'Z C$Ł0lY!>Q ,ϝVYv/[! S=I7GYuzS}u %= .>%_fݢ݀-ȯ~r{~:ݑn΢žPuӆB~oHq7!T4PK5 ᛞsM.?"\ӚN1tQ*x7#2nF>Ll, 63gYJM!N-c Y8l`}-\U8`V2vBI!Վ QT%ARJ_M?o ! S]$"U ŨFU(OyөEbKHjiDpPIamaRd3c})()wx5dnv`b,Lٍ_%U_Y9Q7Þ@$USgTf&TJӴrs.P+-ɀ$dQ'Ɩ! S]ADu 颜^cgK  Hڐej Fx9Q^=#S&v! ]5[~SE3C2l ؇!VF8-u&С@Rq> :z&}\ ̉S {∴y{qL T4h)AdP{XOwk ypV6VL #YH 9(Ibe?VZ:>` BaDhח! SK - XdtT4+^42:3ޔ%aO FJP|eoc:$~,g22e-ԋ[ (;02uXVe |IUXZ!(d(2o’|S!uma@0IBg `3ߘ>m]Au,I:,f~wǚv&5 XfBZԆe`3V)Rhaa,ر3n61сS*w%O)z! Sİ,T@7w[?Hȱh`(!/53=9u.bPfs. , ~ӳW *<ZЦV{ / NJhr[`!|J;P` &+40|h{S.`jA0r:Pd\sB>yC݄~Vk|)l\b, _z}HqS!*Sr) \ oR)^,*YPNBb|yt-Lt'B­*eGO!P[r>rydI@˭O҈6aqvF[ԖI?>iǪ>pZ֨E I -&/|sKvH^ jU|֬Bc%W+ اW^|ڋSS،hS݌5Уą؄hf+br.2M ?9p?!L5&[bo*)Aэ3%2%xU!J:Svx3" F/!mx)Qi:@~O#jm]6ٗnYRL5\ql%B`ʄvQbĚkkmb͜f(=P3!jT*ˁ1D$IUY#i*F`̕2IRњHK)Z`NF Tz߷ >ivkpNT]߭\zyg(^M 5E`h|(Kj^VzPwwiEQ<$hݜ=ัP"4P5tif|x?Z jM31(A6wFjFlZC@P!TAaDKV1!uM@JBqE0"Ui>lj=~RlbL5K#R=Α;ba(xNWN֜Tf$b)V''lA'L?H!Ek[Vx%|So#E{TlE siuRc`&{ N(ivQ!?<1Ncr?b/d7?lP)icz!#A'Lh')G0@?#~k*q"\)M_ɕ.C ABQ>6a3b`V.D.'?Gc`P+DIo3 s\1jd0, Ę\U}y #w2Fx A 'GSPQYa30qs~ _b1-@-1vpVS6e) D\T߁(A=b~ 7(sX]4D vs8]jLC!:qf*7уV twڈwR lar R7!bXt+cRl+ǿYgoGxZDoLX##1( edsqN~XJ4i߁g\.0:0֔^#x 1N kבYwG(z B%7s#x<@eIQ 6n]}6*:( r5xΨE6+Gx3s\*aGB;==!nϭ~qsv}ݟ?aO'!: 8*@3{.^K67Ɍ Aj7sr\A`''|O>'|O>'|O>';zI? LN ;h&@p' pX`8P@ V`l)r2@6w[Uwkx# p`& 9 J+C~L(JUgo;L/x!:̩?s*QggD^9a}9L&aC=DH`SW]ψ;( 47qG/Bk1|hE7`vVT7K@"P5Uea-10\\??~( (+= ٔq(22@C H sp7qJ#x/ ' b0} o _9Nf#ja8+ OO;YtD??7: 7<ڏ1||EXmp -o94d-o 2 hJFgB}l&ϝfM$z{ig<#+?#fLZ_O͈#qėA{aMH#q38nc"GG#t~ P CiM`." Z ɝ-ɪaA'y p( h0xBQ$‹(4> 4Y(>+N:sAmx{ Z]1 .Vz)dld?p0A'`0`"eXO怇a?|k|!o<?F7*?߯V:g _V:juntRd|̿7-w>+'LA'LaAn>F=0Yk `k9 4DǫBP(y)ӱw~ P A%(ha 0yd<A 'g0e& <@&yDKB?$I(SkNC>2i(f : Li᰺USEiv=4؉BG,bk|d/^,L\6l0/+d{0 2ސ̖3ʣo9E"0MXcW:M4h4 s>fU_h!TQޯ1/:EZ5Ҫ̒U FELMʌ1|/vmڈ103+q)oX.)1qht6\fvj͗ X\:Pu!TMa lD1S)BUҲY`4 K˻-Zsaf\UA216n~$恬S6qufơD1\_D7>I\>$l0+8z~zjn̴y=&Ld5kOj]$H+DUI-Q#VIJ*"ʒtJ j2$T"yYAG6- XBr:IlǺ8[Qnu\tw< y^Ƕ!TA1T"69tEޯ4C "sxJh}wBxSyy&ԈzƁ4r2Rѧ ;9K2`.X"fV۝ʈHg-qq:@ML$+ErZ]o$1͞h݁г;(A~E蓼# _m5P$g+zK> Fk8%74D !A+(Q!9Jwk{Q@`Q2@b!u?O3R!SՅ`IT b=+e!#tyHYI+ q\s'!W./O\Av,wyB\G/7bZ:-K?+JHCZ53:fYȫш Q[$K޵՚ư@S+Jq^*zD Aj]y !4d*k0k6c?}fNu6%ףA_B`n  @hhHO ޴Jd Z& /'zE4@! SE#FfEt &^KXe ٞ#­W QJ*ņZ h W ʡ{ojR@ZѮisՈQ?ɦ, y@dR$@M#a-KS|ny ^vA H&:"@nST13RY ޣf֒NDle[y =cbe-YukD[C~PywF"K` '`eVU@E"G2=a5Yj(" e;! SŅJd+FEY%+U{,ks?OUGj!b |Ye%Qk di q:7˝.sfPbaܹoN0FN@P ̙42WTpժKwu 媅Ն72Ն0Oa3UB̵DϤ0i^yWra"rZPB#ͭ )t/j8! SQ#)Ě 1JUi$9*t4Ï4B'IsCam3 MI8 xѯ%F \^{ i\GY`Z]LrI"*>Bò[BN{7aȂcJ =^N* }`_jHKcgj qj`Z7."&)zMhnzv f*S[,! SUH' Nho(~VQi+cg}2ܝ4"νO=vۚq/Yc{s 㲃 0) ^iiGguh9{sDH[N"W&1m/ xQ{nTu-?#?좕"8Kk4!g0Nԓ-CzLܤrYh-5_'GO `H&+Tӵ M W3! SmȥLUc`P[+ipGuF<9ML0ЀY;e aa.=^)Ns]֊ڋٗ732G|!&;W]@y|V/%pЪl:ȴ.Dm赋'۫tTRpzV @[$j=Ho<ǁN~3^y\=Wsm\ѼI`,&創(X2iA˂Zz%cɰ%:e9B]Kfe H7wah;\ 4hAz.݋C{L_ w}%>X-ׂFFB !L8 -HrZot 2-@\c^ 7JKWD:B/wr@P, 7_q+~ {Ia0 N7`岄+e:fuO! S","p@4Vr"HrZ<6[QMHonG\"x3뻤 \EyUZЏ7^/( ۣ.W,u{sYR{ý7@&r:hph#o&P ^K%D[]i6KalZ+20)h$"'7ZZW kU8bA}B$9`AHR)ӿAÊ~8zR^_,Kʷ{Y86If+d;A@'[f`,F2p ,D@DmL<,?P0BXu3bLf-fGf/Yqlm dAIzap+OLtJ#{N HSz6/1@a~av~uN_;$dDՁaS/7:A`'kkH  ;3L VYY|$(:ѵ1"+:q ̦%%f!e =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr70"1 QdFN@>?oxM=4>xF蛑x ?y9998ș뮿xS0$*rcjL@1eE@؇c*ALp>j#/t J { |?kr1A1$x:*TA#zAr&ɝ_KJ˱p,ICH1otB?\u."3C}Ao#Ԛ-7ZV4AδgV)u4Q}?}< N/f7-}>s^HlZ~$´PlWXCR_BH.0N5. ̣PA}x/v"Vs:HJC0 k &&% &nMaXdS |i`m $ Y>y(bvHj:Ϲz뮺뮺뮺뮺뮺ᄎ뮞L(C"^ o}Go,##P78"u089;Eل_CUi4ER(`*}Y!P|CjzVSyLKA}T nĝPAAYLJ iALػo뮺뮺뮺뮺뮺뮺+]u]u]u]u]u]u]u]u*]u]qKX뮺뮺뮺뮺뮺뮺뮺뮲j/.뮺]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u_x,&PqpzhjP Š]ITKI-I& "pmUEs1,S8fҙ׾.뮺뮺뮺뮺뮺뮺뮺뮺뮻ᄎ뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺;|qJ|/>2m@Xkl Jr&i`#Z6We@i8 _]u]u]u]u_ +1+,=n҉XrJ_d*+ꌏ%^֤@r5͑ ~:(7-&bqkLp{`X/(*.6.?J]ƕ5rcKS6ɦ6iO興yhgA9}%mJ=hO0K` ז-KVH ً“\RXHhĥd7כ} ˀJ#me{ЎJΠ7_c*^>6@?e:i8L#Lo _x]{a,Fc-MY%em2]?ɧ/ /64Dp}R/g7 ($Ͷ bl. `DBƳXx?%|rk=MJ;?-P@A1 xRF3H@0?-$ukA-rbBkFhϋJ,р%Yao@[m_hgؤ FA&g|q"eN7r/)JzH0{y%(_xD6QB{= 8J3pl}FrİIN>UDBZzI>5'?`'G J7mpqq!SLÇ/rτgAÇ˪ӎf7EhYz뮺e\]u]u]u]u]e|㧲Q{&.D}}]u]L+`{]u9z뮺뮺뮺뮺뮺뮺뮺뮺뮢]x`fɀH8eNU)pº~2$@ij$m z¯9&?ֵF[Ĭ84 ͚ @y6wYj @cuv5xA SVDC@|092!ݫ]d{tOa ^^s2K $!Zȭ6#LCՔpc|*(؞"[ƒA' 6>xQQfV2Bs}Y) )6{& '0{uuik0F`V2 D˿C\6so|o-Q=ɼ?D'O z+"i:mq&挺_$"01t[;=aaL?T(?1Ri"+_ RHڠ* f" iُևuOn}b&ǂM(ف ڜbq @iFY2"FF7P(772A_F#$ @R ^Rges@[|:6Bj}S=rqp$ N|/`k<>WNa49豱D }b'e? [Pc.`՗UN@mz̸#?Qk8"3WʗmDTԀP b.Ofc߲_sA ^<<IWQai>$%$ >D!1.Fw۩ -QJX^WdeV 6(a^Waq 0Xݭ)02~!?6b9`.$[ɥ$h_~iiu~ Q$ ,NR5ЂIL>ǦoͶFq!Eπ 9CE?`eQg)n\L4&a,R} D.Xe$^O&CL? @ |1n_K FNe]|Z1*Ef[ad3J/ \CDBi`!*45>Qo dgu}EKy?w 0=7 7;ŮH=G<1L G6Y^:c9<<^ IY]d>x#=,jhB&=db*>!ӟ=)u4aHHeLUX}Ǝ$ +A,~ ЧQa؋ROƲ7|q%=c_xhx}^Ԡj`NP!K:I %ԣ28^HrT 6;a5fsdؽZ$0X! 4M=# 3?(=:G7Yxׯ7?SF3=q@P@*aSUE\<Fkz.*Քm`k4bg,͜~`7n2Գ{ KXW2EG3F*5!1+XA W1b"L%,w!}wNУ%#N?ukC<$urpzп1#$z7enO\J%^%:n Qx3ʝ#@Yآ $N4wVm8Tlkӝ%@3Ogvz0e+IwU?^ yn݀rI; Vl*NGhE}3AK9#!nucEQ/3nX_PwIž:HQCM݈O=0G3̻gN!&bOX XU/`7er&r-DLK}i|pO[qގL"`% 5ԩ[ձD2la`?!P2h :q3L.H~!Pnb\)hP]QQ 246 h9@`2l1lZ" 4!&Q#(#=D mGAp0:N _4 ^.J@F_AA䡭CxʽB*^@{ 'bqE?Ou>)r?`4\BL|ZĘ*qVD?ѨJ*ѐI#DPy4PTn_ t߉:FB'+;/4z@zop{}?I6I7y@ƚ1'0LA^@"v'8"7ġ<`; a')2-eX8W h]2bUA6k<:KB࣏ϣR Ne;=@1cts $8Ġ L2ìb VCH78%7G0_1FgfjR2&!<=GG$-F|{xi:dT֑^,B sc$l @s] Q L8R@q"kB<-(5mQr1d}K:_}zr!*zķCL,327J z } l 3fH&BmK n0oab%[xVƊׂ c-im3Z+X \'x6gN@QaP }=7")IQH@6%0|PA@m ~i W=o[K7Y Hɳ8 nL4g0JߴrCvP%eO#e/[`]uߛf£3LW"QPBX+8n%5:s&ٿ3)*C`O>>lWE}Ljh5,h%n =$V$:*xG#x;LVR;b-Ud"‘ Mf7 soSw*Ey H4G992R_ ꢄ f/xLVR!C(P ;Eeu^AP0ICI"']j A`'& HňX!%kP['1)- AKђ`=M@ A7 P.5ϧ0Pxj"zb io&4?: f6 xj'VIY?b%I+q>`xpfm>o͡?~z:0'oŀ'bD@:ɿApk MPoB{cÄ>_CCgi  *O Ri%r1JT![<&2Ԋ"Gy?P(4T 2=7^5m@Eb4'8KG97!O _wue{|T~nw0{Z!s>FJ<@F@*%$%X;& AL%L_Axa7Y(#4QGG????c?????ޏ3I?????$KomL0d8U4.3 ZS ʀtL0\l/K0P2 fmB|jШY%+KP?Y% ^Lf~[,(Bq|;LY%5%XvKP9)V1g f5uy_,ƼO,BZ~?Y%4Xד?Wf<< A'$`?VTF+G!hhwHYZRLo #ߝW yk$Xdo@,8R2xѧ& 駽ض˦<`?(}0 xB9x&=`:8^0jհ7V:i&!b4oz[lES^Aڳ 'C5n*&>9^&#60]y93w x߇HoAFAm~ߛ'` 7Z@ CQ]$~`Ϻ{ɄnO_7]MS 3joyy<?`WJyʀA'Wr8ױPb7 o"(SnF Uhø[T g͈٦P .h]p#, rxCy7{"cEsLK.zirMH)H*x r6]8 0l dw@0t'S 3C)G^^k _S z3IwȥGv6WS|sՀʒ `r{˙K+1&ddA'sF˜SbD5Rpɺqr1* %ءP CM-?}G l[M[o|̚enUp`*`JLHl|1A'KSms.`癰IBS#σf)cl wAspXS/dvBffH"&3Lqr@A'wLAyL 5~1;dJ 9k<)L׶S?˲@xz6;fGmMZ͊i2W #xy.̢ZQ#G1% xdx K Uֺݶ`u&k ߅" |?3B4&Ul 8#)KOhg D޸(͒,@w?ˉZa_?gL!"9=h9w7̇?rv}#̇?\".q]ƀt&PGq wvy0&g0֔,! S>֊AĈ= il}n1Z+ uM0ȻZF"3aڳP12:;0?ԩAzͱo8V I0bv5{~fBzuin 'cr8RY$<G^wy Brf~LT"pٗF7Rp6~D BJI[QZ"CJw赊#z ` $DFN$/ TP>! S>7V*nhLRr \Ė(_*? UQQӤ]T]R00i_QYy<=9ȯwyJAѤKIb b͠Nb 8anZ#>S(,s]ϗhZ@: !/dD__EĿ<+wN@B`@ |$FMp.I$7#zhl꜖FPrӻ*I`RT1骙ПZ_3/Js y[fΚYiKd! S>F 1`Xvsπrnb#bp V P>0cPG"u6;7fIEz+:TiI{-axU їmG\Ԁ?pX0Ee tj{IIe)4_!LVU8;.G-sˬ#FwCܫ'wp!h lAc"+[jzo]ZAY]7{Yq% U;Urr+(2dԥi,K*ur~{Ա|_9Bj ! S%a 1tIrs4&(9 PJ*DRƃxL0Ѡ5&odIo`hӈO= 0Ǖ=2:u5>s M;j TZbʢ #*ZRwhY:|pÓf@k<GMSK/_%+CEl Auw - 7e*0c f`C~׀Y׾E )Q(XfȵaeF`QB  %TXJġD WZQٞN0evΛT"XG! SJGR# `1[FğYNZOkR QP]X~YAl08~~F8 n:Q555Tg8fGHq#eP;?d({ú "m![#h z9jv4/<%Va+H0(Ab88 7TP[(ܖ**"pn`|R5TV(IV|DQOA1EЅ%fn E*';3QN{kIfho*dm! Su%!(P(;6.V>>L\3؆3O2t4\!!`@pVEw@YIz# MZJu`SQ-ZS H&Cnn%>Q4|>-* t7P[6\CݫKDwaݸDCYQL`bè k @ǐC` y+&iS%m16=P "$L}R zOE^?lgӤ2)oOi+yc! SL@5YFw{a D`eC;\ap+ ˘AFHCX g;1h ILq"nΤĉ3ԧQHR/|2pyn2K:q^FggȫbnSzs|XV`BKv62 cͺc 5R6l]3!cPL)<`7YG&.32m: P*ѸHzsndʹ9X+A8 Fսt ^@! S$"FR, dΞR= T{ٗZ%-y^60n [WI-hXKQSx42yݿ*e Q`f 7m1j835 h`Ah(ە`V=%YPx 2 Aa%eLBk4!yg-hĢFNG"S N+t^`*H*8@Bw\'d{ p+ě5ъDȀhΝs! S(yM/ .ZT>]^\GRRl+@=“C:*i g.AԶ 8,ZLI#b-" +>HdR]o15-z5RUiŀ8nLtz P6J6M̫lVm~ƙ#]̆j^l)wTVr4bT-"OZ%L$׀*ݮ M .K< S! SMU@H` -.>IѰj5.i<2޻f] 0V0ta~y^LHep`9J& u(R̶c/Gy^8D:Λqfs>4 ]saSUAunqkngY.r@ &`[v Q`/Kk+o0tr -mA[ʑ[)zyQ*Nb4(B72"cUfd64D|HO)Qi] ! S}Y4Ea^`񭆄1 fCr7s}xQ}wԐLĄi!a~Q1h5{ͦ D3W2(" 5Dġ4`ʋB«N/P"><\O"q4#̌SQkl: =om@۝(1n>6NlE շg8 &<2o%ra (Lx*Zy i<L%! SUO1Čs@-@J8Bee2@Jl/Y ֎,*mS4*֗=Ʃ3 sbŴhuq?t4lcksF fϸ :9EI&׍n^ +"XYˤX P1PG/ aXZrcU$ܑF`mƷC#FmES4H%yS"Hkvj %KO.R^Yb7qq t0w8*H\ xLmSK'h;Tp! SEC XPp1H͝1?Sy17 5(V_&S?5|ҩ\tam2fiy-*>Y&#>4'E2KkK qΆ*HZ01?zdIT65ca*4AL-}Wˠa:9&ϏRD^=LK8ak 3k.H!*C8|"@(VkVMT&!L=+57 xL OWW[b@!ȏهCEQN? N2yPcԟv><)6B8'WRx=ZɅas!iD[# <#OI"uN`qd*~Ԧhq= Ektni96f0[vhр"Bb$}APR K58V309rx-۽“~]MLU] kaHok}߻!h#o,D\!LG5V#'4 {J6cThSp), H,*~3 Qt 3F[ze/6ٟl"fubBH?usJu`N!^;] ;)!]iJ[,&We)Uw o5~6v3n6I7uVlKz\+̫ٖp\6ADz)I;Dz!La!zTŊ&ǀf )dYI H/ɯe>XYWF(EzUSTѣle>lp#Hd8%idUM)ޥq,#,`BA֝\t]dq`\Lt\w;<+6/"%^ql^_>4||3N;l*V6zy<2`UFH`AXrY14ɞ[XBt"hʉ}Τ>rݛI5E dDjGp!T")Bc("&c*EȜ,wبSNDGJQӝ BRuu'qඤPnW6dhpШ+]5RZqoU-,4܃`:-9,f*%"&9!SW ؾ++uMnÔ Xy A[e̍)VCjtd]ڍM lYiVbOPcrd:qĕ0BijM )Ux^;p&IUOѼmcV(}CA@'zC$3̰\oo?܆ (cQR̡Le]$=7,(FCH1^J37K`3`0K"͏uLk(W:W=ww^yy݉F>!CxvyccaJXf~z^LOA`'8o?+`%){meRh$ ɧO_D0:Rx :kTCioo3cZcߐTA)?+gȯ?`09#ׯL~%b0A (h4t((| A'LCL+yj.#g˟z ܥÖ 3b093  h l&!nON!1cpq9tx>+s7쬾YA2FG9ff`anA'`>|<`>L̿hƩэEG/ TN- (BD% r78$j`3n7hlhU[͊+@11FOH16W+!2s|O #~Lf$!ylnx2=eAA'LB~ p扃A8F/HBQ\s0 -6HXoG@4tdτ`pKC/:\1\|Wf+ y{̜,y@c#o|+nK=y%!`e9:,DAڼ:365 A'ɀN=q,m h?>#xdn8 m.þ `6BմMi:t8m>Yǥ !XѪy}M6_X`g dHjX?N$ mo1 ZD3 @f{_vph+y̔^ꚛvD$'7){6o - ̨e: X0Bٙ(LƌV\nT|7Q|ve v$")!ZW2a°hk7YnIàw%ncj_ ֿ.:46^rj廧Z'U\?⼸7"c,f`= 68>'H/e Oe{ʠv#>nLwc 8Szm&nFN3FRBD)B(Ms6~#iT1]K;ޠ 8a#x>x#yxO 쬾wg~c$'<? )a<ֿw=|# vK+gC9ܢP U{'̽c >L_y ggɆj/# 5l k3ZDO5UzXdYA ZψMUOM_9t -m7Yg h$iyYHAw+ F<]R Oϭ%-W4jqW980U:=~:|ȣ!ϗ<'eM捝RJa" |tf̃GPP' \DqL Q hW)/*Pį?`s I-m3Nĭ5;T-ZR]^gp3[U204~M7,cQ}Y8[AFPNQ]jf~i1?YZHd:,naIԢ< 2^PXaaFw9Vskx}<EQz3&P3?,57x{Yqn^2mFw NIt0q%16Wåh`>x8A''|O>'|O>'|O>' 1|V??2f6=?@i` ;2K8`pz'TJ h@ N3_SW884ibڗB`Hš@ LrtH`؇t(pj y6FY,S@!B Y@E`+=l0ǘ-BC{G 0K< "̡:¥$?EҠ}sG#^C' 帙Po =8S%>S^ZIL8+ua6$/+#L0 2D??}{k&ny1|et]@K]1m~4<#8[a|+e*IpW2,7y洛CL$-}> .5J??)g6McxS`[6-|_wwiQ!wlGH 钉@=D `k} .kcdM3CR G+(CGDNAB:r%GdzD7#GA:^GaC@),{3gxhx{͗ye1gGA 'o}N 6(V*t< xBQKd}Ox4>(a 0G#MԠ #x A@'`! r,dCH0!o)ϓ@C/Bl2!J#I - />dՋom?U{|V70`yJKhDIY?soq\FP=CS/.8%M AM>zЏ⳴7a.#O52"@qt ~? !T: aPؤ@66K8EMR엘(VW1%`G{w(n84Kͬ6 ƫҵ' s+ ʭKF"IѥlMDw8)A@qiUTbx,udg[,ΚPg ?5߮,1Lti+ze*릴0ʒXxkJ즜5N2 FTbaQ30Yg[zfƪZD;+ByA9 dYxcNol}h=& ?`*W[Tpёtuı\~TeoWA1&ȥD((Z5>`w9GI/&)I1Xd !Iד :!TB,!*^B*H&5d>D2g@'\*KGsXUFddI$4P~+jnumqLU1TEĄ5}=ˆN!U|}4g4-)IWT`͊0&5PX,^sx]UxYo4;V~ @Y&Wt.zV-S՟BbG>)B5^XǙ򜬆RR U"ua#kg*B.%gQ emC 0Ʋ (_粟4 ,V8QG34~! S6#▬"RQ*dS9~,o~mM8|Sw~ \j U n_P͛ymW1<3Ag5T!g9$$*x Lĥ+9(ဌТ(c$S@ &PFpr$ P)0ȅ`#`K&;;^#;bၱXe-6kJ&M&c^uWnX 1` `0.tu#4g6 Bl "SDZ@YE^P{! S0C1 XLFVV]`aMq hɸ2 ¢z[;)#V'gﺌ +zQld,H0RwUn6Y8wb:O)tP4U^˾{\ڱiQʑI鮔B~1]w5VU%)U d -l2%r1P57 4EG 0ձ~pɄC! /+\GMnd 7 Bu^,U-3Vװ: ^5zQfW^O! Sh*@Y4^ModT0kx-q q+[0,[eyhb0uI}o3?8Lp֌4ER@R\eqe1^[y ȹUMi;.N` wȗ4 c["1k·bRX;f+ -5YhM]J!RNlRts]ٍw+IC1KL+bX`C w); 5Ͱ,V)`Pq53)vyz:o\e`܅BlG<p⿳M;}G &BgkQ&3:V{opAx(Jʧ"+'@((9-Cm3B~Vc^"c-3Vv'JLpP:.& +-kz{/Ң"n+}Ơgd57ʪ#+ P@HraОZѸ-arWTBG{",S ""Ѳ!smJ#i yO_?]Blh4%Q#Ғdh0o E_盆j|Ϝ[N*! Su2BC0P@RTߊ1"|nʟXDY %"lRwq1g ^bs+~{(H}m:t v^fPp}!q4CH>{THW!8~FM$PICS+8Fm7Y7d# (M3}n03*;]:`\# BքdBުV5! kZ͕+>e-i*iJBxkb3-,Azʒ}! SMIAAfARZ %iNG&܋'v l; *N#IR0"-(/F .?^sc?Τ%bN7R9ڛtq?%51;:+z }Z yJv*e(.r )om(} ,_5$zCՆדل0y+w;хrܴ˻•P<#X^|g,6sLg>>7! SS(%|{?>o@x}H!->{~"1O6mS76.]d]}a0Hd.A8&hN^ahM *߿f>,a눍 6`P|I~ߞ<08!{Vp? ?X "8aFøFF()C#}C! SmKB+ʇPV-0|?걚L`X)r0W;q1,0dbp%=nr&%h\!=,҃EБbzr5s[T7Lʓ+1T+H`GmOD>UuAo3*^ÊoqaIIUv4 D"aa "7`[0(lۨ?Z,VA8•dUU^QfƐo9]L":‚1#Sa9`k3@@x! S4n)\@ @/(Uw5+"fJΡMrIH(S( m邟y:ʖ#4+Oѵv{h! <+?va7*EC/^L&q>Yd-Y5nP+l~#Sp: #:5mIW Bebbϵ]:au&'!sgv% 3!٘\+:%?9k8DW,@RPz蔥:!D7QD* b_k5 V|,M嗜^'"wcаz3\d y8! S5rfP@%-(^c%6X ?E3d e.#McZK({W&P#0؆'e\I؛Uj䤳*~0 &*p\d{SB?E_әe+彷:'l(ޯ&j3$wr@ $ژR\ Z(*b-pqlz콙E*aZt skҋٹj޸qGX2I)mR J{>ތ;0Sǡ! S> 0hҙ x)Ga%`VDlZ(L$`}/[LU-i(񗖂1IZ.H2ڄ;Ah )*o:hfqOhٝԧy^>kզAzKX}4LT7Aj]tF(;%!S+;{M3mB"Pq^u^оw3d8߰ϛ?gm 53xu?6ZGA'g0eMy@&0m>tO]˩M~_'5cv5cP N#?<?N3j=f>1fh(w=vMv'j wy0EˑL A'@E9AXK0٭K-1aoQ`$1/ݞ~<.3d[ݫװli0{ɏ)Tq q;%|J<bACGA8YEŕ%x^LJb \ ,3 F̣΀A'\PWb9hR@lq`r؎XdAG <x 3Œ@ l@S>W B:T Q 4S_ L̼F#T)*\y\#dtOC?>GD@DDyu#< ?0`܇  ?A2Jd@3`3" IpA 'Q/m\dym x낡$y̎YC_1'$fdp;h FfUc.؅,l,Hd{aYd9ǞrFȇ<%!?G:b {:;)s䍃,<  3ppA@'$=_,H0v oۤ08H ~DB 3؞RH 0U- _"+ȂeR>~(G ƞ$?XC~ BN 2b >k#&ɀ A'%F`$Z1[ $L/-"`2Z$?lOA^9 y=!Z,r^|wrsu:p\a$$C3H| Za ` X)ǀ@?@ fgzf(f`m) dxw#&?H[hSoÉ<eSC%߂DH)z2] \=q$7^?Om k\Puer h  ?lF'`BAMCɀ)L' MO$dH@f$\G@6Qɀ=sC p[NqJ:LJ) MMؒ Q_ߠ8j=&сv cu;) JO$M^ȅ)P|shldT& 1{M!Lᗇ@(jlD80xKn+7c`Sw]6_vܠD)ىfLx9o0Ɓ&P)I)ݴ(dt>hN /CVtOOBT?<????G?????<?????HmWX x!#8xl!4spĘ/)@:L0T|7&d#w0 O&>k +[Wϭ@,kɕ?Y%y~)^*1X'P!- ~}g7X:`\wEl:HBBVOvP})*zϞP=_7_3=kOu+w%4|ě``X>!tߟ|=_[_%xIls_'&V^pCf`3OnA'S6 ֐@k@@=I4=c{Rl}2o3ܬj)u\kv+{)Z?3B͠8/笰ÒNm y ?I,ǟ6yX4KQ _{~ ^y0xn+7mkSl7m"s 7y ˟+1AݡݾN= %/'C65{MNgc]AQWU 0sܡ<8XcV? c:|1^A$o~Rg*Noy/@3xE` vQq3JS_֫Pr{, ^# ݦ&ߊǂw_սqƽ]P&E+`_~c/%mq5hʽ8RvS7T}r]͏o6'(XAR@L8e+2T(jld7U<׻vzu~aA'] ` rsfSۙShx>X _IT,?A'W q$@BPMԦk 낒% 4|K’|L}>1 Y> 3dM \[9Hb*fLė@n:py{ptyS(?g>E) ?!9%@3x)FL-0`."0j]UF57^¾+7uA'Y$ZqqO NAWww렔XynH#f9H҅4 a0kiae&Cr&x ،! S̈́HcpRdTQV >$z߀M]WY9:'C~*Bˡe's$L(N˄t[\ƹ[4t} SGZ2svZ`HxA1웷wLMWzwB4`0؁V&WWkD2(L ^zY"1j5DT$XɁb01*0~3FJlªO9R[ Y~܊1|! S̈́JGd"@RӑtCL]DXwE6A@_a Orjv'ž@<7238QL0*ͰA k,<*$ -4Lr/݊䜊36- ]B5R,a+Jfiآ%RVFfK$Gz>_\9D R:k̅:YER$1݂w{D0J}(/8! S>62` 59&]Ι $5mq)T#($SXHwC,e5NCr`L5 !AAޏ/*zMHA"O.1L{@1h[U3m_Ԉ}Lʉ?P c%WP>wZ'L;?emج Vo֍ CQeq7j 󀕀 B%.ZimTnk@PP! SIŊ*/,-hcXv~.q)Z %aA=j&h31\z~ K.Ge~Nʯa.B+k|sn@r<;w$@ 7Mr1ɶYT$#HY(B:1qܳp^GFKh4u5EzN 4?\z\.F+ ARٰ,)`WC6I?jX *"OIҝWq!9eZR3{RG^.kE/7Pú-nW&cM'i}N! SK0PdnY[P |v!ڈUsݦȨֳEY]4g0s몀% Dzߵg_8| VC'XGH&[cPՍ֔QFTo}ITLNpD&Ԙk$R o AO 0l, pn3{1S~j6dވ(NUo{Nʈo IU JB K͂lHu;9_d[wB!1h^Nfmm~ǟGTR\beǝyh5+WPj+K$=ð5F(\OWl_v!y K3;#aʕ F8Ǡ m frpΌHMh.l Ԍ@300j}H@E0*꾵jbSj崭SZ-;T! S'Hh)aBJoin"x?:"v?:4\!>g 9+881j2:[N}@+bm[bANo*KgoZS=R4Er̈a"ZD,?vATt@3#޹@6w I\R{^{O:ÈΎqEH9w~/d3!ak-FG#0`,7q/ ۬ Pg箋sBMʗw9! SE-3`[t@ gbtUü4BuX6Ki4%~j qt`K` m aKذKlHXސ2Z@\AO&΃:H1BS$`(A0(t7I'K,2'_,$`HI>=$a߮[#ZΡIhBVs+%pH,+<2⟾iS! Sm2QZ1J(P B%_S"VpkiX_nE}H 1,gV_?{rKk#f)OՇ7ja;iiZfJevp2St"1T%CɴE)ӐH3H[0 H[AʂPJbHy}:X ZĜS3դ)rJ!CVQ[lFZ+4%}lyZk_֕JuEݹJk\?:`L! SUL *Vea 4PXY;397on)PؔT 9 HRwa|١g8ʖW9AlAk`^0Q%ثu'{KY?ß/F謸XLeo3`a x'yIxgx hT<\ ǬC~bYKi^ʀ+T5/q[d Ew8ݑJ̫nY9/~/ TUwY-j1! SMFcV0VJ.)FgLO<{0\3}]o1ч^U83,_B{;PBOP9 "i.,SM!7 x(@ #(QmBįNu.jM egIj0}lO5`h,e1qD9f:3`%إX @ȃMr#Ӯ>ׯ=Ȅ%/21&ϑD&Λs22 ^gBfXIC[yFiQ*C( Fq`lb<,qsic_ 2G! CdB2,Q 4WZ*0hV1 e#Own̑]> huqh+bW +WAyBK]A:5QKC$%+_)4w^9nYP},ERIS~^s֙TKIЀSKOk%N9Fe8D,={cP7$Ђ!i_iSˤ9aZVNWwY|[AuQ֬IF΄k]!BP?!*Cj5n*JRK8tEM5 ,$cX)BF ™6Jƺ^s!G@vZM=)&*$C+l Qs9ڙKJ{zLJc))O gZ³h;Ei͊S3~t(B W%r]]/yxz0Jf]F0nzBp3gqt?puJ;8Ɠ40kr69_E=L?pCh)B@]lnÆ6.;zK#!LGM Ɇi8lxX3Xҙ S#Nt~j25b+q_⽅?SWCb|lX*7H)鋤ؒ%:LtKu:{ȕ&r;V4A"ܬ{ w\o)bUL613'ih7vq]e~Ī9<ϛc&ZV}e:yYnxϒ#:n~P }fr =B  )24M!jT͆$Ɂ1PۥxZ2)b  t6Qj~l2v~:-'DhI:048Qmyۙӥrd\&RKPSw;G)(ԚNr}>69jÃ!Ov5=F rk3T&-->6~l=r ia%=T4{{ga cQ]Y^4P,0Rb˥[ k(`E4sȧ.*-tPKZ'$*Dɿ+4[ÈP9A@'|'v*.~Q3d vS?l!"&{mVʁOTfffo`a ?|mg|W0gIO_Ipcɜ":Fyw^A`'|ώ./\ 0sUB%L;%ARKI.#kuE!eƌY@6('&JB+mTט`3bEa&3ص4Ɍ&0E$B?$1|hm Zc)RaI4|pA'7wy.6QUd7&GeWIŃ3iq%8ސBERqX x h %QBg۸9} !>gc%?GB>,͈,+@9Q.`xS(KfBiln=pW`#<|ǽş9_~=9v#x6<<#}^Cy/?T 6z"A'|˂\-SνƵz.cm T9L|ha 4lAŅh0`7G A4WgCA\;>#=.zP}n"DYCZA'|ˁ#PxWF/%)0)-$.2|3x `r@X ;eX2tS|v1s|LFh!#><'* XmP50Z$~A'ɀɧ:~aGKF4 qqqqqqqqqqq8p/v NN$?/~;_{'|O>'|O>'9=`AɍxYq}Xv v`ٗ_ļ) ҩwLN;O@@2p@C1 p PmKQCҩM@MBaVX @c+>C6nvn$,gvxTp}hЖVzLl~`@3oCQJJ|!ƑJA94C,NհBA{vGv&c(UP{F^d=yb???\(PVeBv(p-̪tF,)KK4=ClObD֗(n|'f$M$z{FVҟ?AO]&zjf0eG#?90 {Oğ=~MPaܦAD)ŞUQ>Kߒv0&u0zC$||B hA@'y}T'̸ 8XDt< L<(֟E- `~I.db3fb|L x% KfpJ#jS.'wpǜw°D#(aNS2D(O ]Cfm`גC~4a \̿!;7C5A'|˂xaL(!` VG~9x> fUn ˜oI-$3a?2/17(iB2|V@YCv~G$.JS/\z*dW./35۰CO}GIL\).x!T-Fd@hA"P?@ZP\ R''KeS)<5BcrULC. mX̨@z^O~'횼iiN˯ƿ;Y6H+G rs:K[O 5jpCIԜQUiӯeYG[qi:ٿPWz%" u9Hu|5W,i?A$᫊^-['$NYwWÒ{!T6 D@ j+jƪ@np*.L,_f*OK4p zZ-bLӮeU9C"bd9/ aE(-JAfI&bI7WDBQo.dĴƥH$C1Q%^v8UΫ/d26nq4ڡb S`: \s7GvXҐ8 " N)k>"L.J lR.6p>+; ҦqXHH:>:ܞj2²Rt^NAwER+rԛ[ P\jBG,5[(VtT:TIzWxRE.S $wjؚkY\8"V+&_!TEbbQ6R XBQPL 9XO@sBdW P2WOo Z OH+ҢBT*=ȢS5JD&A$O2T*CMgԴ@г5HGenl#)U8n`椺wΪw:> 1$ #S)ِ>֞fQ@?a۹mꏃq=UeLx_CqcWPJIƚ\?Jz2VPb:,Nq ^ʎύvA!TEbH1 ۴݀$n"U]!9M)=%5hv0X)Yk^c[=o'e}"p$r bHy8P*_aFCHARO &}m[h36l]J Uxһnz䵕Ǣںu{YGS"ɩL3R.<}s&ѩi9W|sŌjy1-m?U0&B<(^+z8WptݾAlE}C!T=b1 , QŖ*LF0%ؘZnX*,*ulh$P~_nh֖kқjN*+ޙJFX,A;X| -hi!,VVq$IaM⸋"1jvflt}Kdm! S턦`E7H[+P*7KvaХ KR?uRGF-,X58I˄Pïly94tw {x,^IrsLH&9@ڔQ%ՇC=Azc&㦻fLҡn{y{װݨAL *V|8mv$t E5|uBBz³˛s/EPH^#7 7%!mSZ#кv/:']%jW;oMSA < ΑL0:qavb9~v! Sb HmإdŲ2q,DE5]]2VZK/'񩌵 LӚize{P!@L:oLdW:*[ͥw@5-VFƷBsн@QSl㕑qJQ} WT =E9Y$weg0TPD>״4cfu(i}uD"ؕiæ*~V "jY8X_Xa-8t1 `")8s@Uc?T7k)HR! SCf",l5Y@L[&ZY)C[d=X]us8A,U^T!PX!V %(F옊|.hj vxҊ^+Ѝj: -}0Xrv4M@g+de]ʜBS6=6#jQpB_.#˲f4)肞h8qK[$#2{A%;,ۡ陯u  l@!ޑ}`BNvV +c.$EĪb! Sb KJʨ@$['[ePbZR,,l6廭bUUCm\Z&5Y7ދ"n51IRaeFu%uN4>Ck@^" Ë-9ߦXr$r sޮx֧Qzt9&| 8#L)-$t%sɕQTݰcM_[.`4P,bF`['[3$ӵUh|-_RJEԠ /^sB q-IyY[kˮ$Vpl㬢s! SeD("K( 6xvҁGPVy:Yl#gJ:Gza:nB|@l ~^&.q5CK +~j5=,Gm*hpBb~5ș df,9.¬1'1I+LMڧf6R_ óϛD% -y4drRo'Q{.3Vس4FXzoST0Zݲ9! Sh&bE6Vģ:^UalF;LLp ;e!) r9L$k3u#v1eezX P3(Ug{͛Qy]QoY5nuqZ*.$X)ȸQ]q eP=8(-R9 ͫ| baXŃA'^cų4NW16xZ5핐RS2~]nbssfQ3)&O'!jAY|~|f-{W6t>`v,m=W^;7 AV_L?Xŷ`w0oIv<$yV;|jLii`ibz6i0 a{_8ėxLW|x! SeNFm-YۂP!(;j!{aշBdfx3U߇TivF6PvWf? iRј|mR#׶y .!2doݏ2~h)`ϐEP0*|k@0c>'K,$lJ mݔ,A _y" e,#< Tشi'"%QtVX~Q Pr MC,ڕ&P1xuy%Y SgyWbY! S}cPc,F D(Ll~?ohBChG^2p`fM<^>O|GnX@1E:B&#J 8ts[haZp0KW K&tu1oS^>S1p#AG>չj11q{JAu3 jY;f2%2ϩmjL(*nF[Fz{+l' PF.aʛm"-M%H$$IQ NIS rmxQ%d^(I/N! S.2HJT.9͗ɭf>h߭kߊ8nKD i:-)L7F/Ӣg7 #;]mڗBz[-q4(4zꎥ([=r t;oMKST K"揜>xd.UǸ&L{1C1p5r):ݜ{ #) _я=v=8.Y8ܹ+J)D$ @W-h !( jk2Ț* :7,{^λ; q(^`]$JVXղq!dۥ{-t@`⺐Z?E:Im̊i@!]EiᎿ,cA'oAO< ~DEzN-{ c$X $6Z !` ؍^x (bEL|B1lA6{(?P,Ha(#|:c(\w.I#_fj]7ܯ37C`0"*# 9`lC5œG /A'g0e&@y 1,6MODF[ÌCy1(<`yÏO2[#ڱHafq 7;Ɏ& D9< A'ObhD)=4M?$+/sfX;LHbܴnb{!Xd{;?L^u#-.#9'F {?f}&>zxJU.+adRՋ<( A 'EVV9hR@ (om.,'n@e("ɑ>/ " `nɠNKK E?a)#y#xNs ty'@[m _]~J j 1 ԤFfA@'Q@`[n=g7茄੗/,1,'F$cbF!G;G3ysg~'kN 506NB ?wx hA`'b@^$1@Oȅ GBRS@0dA2iǛߝ@fB|&6] Ob8Lf A^ ?'EȳJb+3A'$.^A8DD<"YhR(Ė_a`_`"i; L06* F,°9934#@AjOċwwww3'>>ϡt7Ly@+8N` A'%, "(Ŵ |~An7VTX00fX|%0Q0 9!?Ph}h^<$gR`] Աw <>y #u/T/Fַy_@١`/ 8M%E+;brF`pE8Bw7~ڀ \6꿚>%V2%R$hs!hO#l?{PGGVyрU9D@ߠ80*>SsB{GÄ(㰉R`0ҩUO w & >=:ݐ*َ`8z6F6TUϓLJ%MUm!Ddwo?BG5ȀI4'|8Ki@~rX-9Ÿ[Iz) n_%.o*R(R"Q)D%,4 (@UT??hOhpP/EX f5Rmj F׺kh%` cQ؍W Jਛ 9EPKxGUWls> >LY%y2PKZ` c^Nu-ʪ|LA' d[8\EtDQDy|>>$\WwA}WK6T\~hQ`:Idw4F2c4/*;M9iv8|QwOj " wZɎQ~|JĬ|2D2D# _~qRqP^V `RFN2~k@3`2`HoTzwGP7>̀ɀ1V#}o#}\Օ<Lhũ=ZmL? 9/16kE {E[[` ^V_7piH_0~ `?GA'T\X<@@ %wXy#=&xZ@}d#S ,NG Î?1jpܻ}8\&+ sZniH , )޹4&)76[PW1FC"g@0dQ RO4{4H!P )l3kOh # Nr2;g5W%՝sgʰS 0({A:{^\w_iXrv%JHrRbRtNxSJJW! SͅGPCH @pul,WO/=mµ;nPy2s*raaq]53mCkꘂ+sAJ6' phOd9KZ/N]DiPĞINwb{ft7L2-$AU*WYYwM/:@zAd/tqˣ"֬3`#ݐG֌[[E! S} BPU /7ksbP_k{5GR꠬Q! 4Ip)pΊՓjxo'̓yk'נe0v}H~quCa3L68kG`,돱opS{fB1I )$e(6J-v"0( l87 v!ZVlcTꉸMȏEH_U*J ;NԮWKD! Sʼnb!2`#Kl5B);NǻB%@ Miʠ̷ն9<[,k4*O`~X6 |BnBSN':T7ͩhKt/ۏ[7 J{/R]s+6~3 6q9,@eQ2ͣ;ުf"AZD\5b!'QroK̡'if'?ν9mut+t;]K? ͗u[$, };+:P*V`[Pt1º+,O FF`nQ8٬w"*{$1YVtY69 ez`Ιu8-wܠ輪ߤ]~hU{ Zڧ `1-?F IRlT@ab ke{m?F=yVyOL) p %G t|\#8z$XK#9x&^;CG_pe! S$#GΙ U("eQalm!=5I2G0Y%Y $Ed+33'YZ9Իx ms>W45ET~O釱`|oZxUI1A%c/w<sՆ ~;!IS[h6hˇk_7_!=-X;(AWCLHlh!K<ҷ^+clRzgGNHҹfg e5%XJN.d).0#p$(ka*Ԥl! S&"RҘa (o8Q-hKf"s[sr'bц [[IU1]R*p16:l3xOk(@jySv߭"cTg]js$רUnLt6,Kx'Wgv]@Mtf(R ;f߮{;~uc\+=KDU biu֩*וnBƈK-x(-XI֓h/ V@ ȂKWbjz3FO||aJǼ9SH iHQAO Gu<,l aL97Y~("wKe˦12Rs~r6avZ)UD#?vZr ׏7B! S]Ep 6QأceW!Ua*W :) ,x`hD\ d,f͜z~v XtMIRKv, _10(rJӄ?17t>0i"NvI2 ~c/й.d/#e_*LTf,^WUR}(>HǎScr.w! SD,F٧̎,?p*SFlkWPc>b!P%[BvvjBy@`+P|A׹'l)/b| :Fq=;`$~qD~DXwh31P&.ܧ`G`XxC%&R"X!)iw%4ɬ\E-Խv=R)[Sk1P]Noڞ\CT3C! SjD`#9XnSKCk}!!c+֭֩T8OrN6^/H-oՍzO_r#+'$Xs=Kl:  "e,˯c+x *&(` ,|yFdKrx}GD&IœOaϖ|sf~4!L8)7v6FI\qZ)L|~K;a;/ >|z 9>qS:,@Qf~/K ~콦͵7Gߵ#JY"Mۘ7VK("wN 2ECv`(Bl`@4PpVj)c<bS(~#Cc@OC* C0 ??/TP:XzR%I^}LP!LHS7z꒐ .QGK)L 0ci72hVB}@Bҵ²(H&㊔ykuv&9 G}״:4$BgG8xA Ž=*6ע+WXlG|: QDrs9}:sRҞ|D,8edjtFR%%%7|@Cn dz0rݪC @ 2A@'= )+{Z/JA|LAr%뮺뮺뮺뮺뮸+//&?eVU]qO^]?邏K@͆ǣCXq;@J(0ALF-EJWGL'ZZm Lz]CTo\k F|Ƿ@]w{";VsZy{*G.]7 g?{j=LJa|<]5&!T / erG[ZR)).42evAFqU=f AlmQ׮~뮺뮺뮺뮺#a쬫;#=X>뮺]u]u]u]u]u]u]u_) ┢ ]X-?yC#;r.]uO[뮺뮺뮺뮺뮺뮺뮺4}u]u]u]u]u]u]u]u]u]]u]u]u]u]u]u]u]u]u]u]u]q]o]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]>8R:Ue  MY<)"?%?KI.8+U51,S f#G{]u]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u]u]u\Sי뮺뮺뮺뮺 7<.(*"(}@hPYŭ țKfr?93bLJFgB}@sw|֜?aOCK&&R]u]u]u]qO^}@'"bh!nӉrJ }\$e(X  yz Cfȃ#q#\w0\ɓ j*XX+W? Arb?! \ x#BL˘kA!3 h\?J|o0 O^.1@6H8c\w}xW %",(1!n!vlp@7?@P ɁSIhLt[A0B-d` |>@P<ƽWq !/Y-]sE5pUǽu'c?p݄iХ'Ɏ# rc x `@r)`Ƙ%Q|+P&FEW6رЁMP)L! ġAY`3F4; \f@ʬ߿F_0@`Ƽ z&BWSp00JiG?O'{4:[B``׳0`#@W 8đVXgysdQM[RKDib\l2 ~;81,-hW%=1!"$Qta`Q(P8D`]\E5礻(F޿MmJq KI- l0K~ K!=U8P;8|HwfҎfbT9.j,T"[̿Ka0iUk1 bHkf Bm> <_;Ll_O& JZi9-@43SHR |ZV=cDzr$,=HJ`O͆)EHv?-Hڵ""Œ_ށXr tjπ_mp/CЈVSIaD^?͐@r8?%  T<8|^)XxpFUc:7{AȬ$D*6xx'TM8K~rTOy[$1Bx͐pz%~žQ8D Q*I_?w_?h|1/E\G%ĬQ}uYqu]uS>J_ !]u]u]u]u]u]u]qӦb뮺뎛wٔZ뮺뮺뮺뮺뮺뮺뎜q3CCC4:ĸu:o]u]u]u]u]u]u]uH)H(ePhT?^,Gta] y2KAᓈDQ!kLdZ ! he79BHbXps?k_OQ3J}P !c!p${~tp)OV~DUJ\98ߐ DO'l~MN5s] @?ȆY0 8{G߄-|- c(.P4kLǏaǥC# 4`"H6t[䳁0ۦ0b㈿ b-\.S@q)$WoC GYl% bZ $DVL2:xL? !3^:$%HN 2%SJ 4<>{dSFq+`01n8=??}C,Bʺfⳳ_4Lj9&J` 3Lڙa6'?)U|L3{׏2+0bL 0Xe5IR  gz-9a#BF>v8yaxN z!]ӑ` &n7x2+ ɀqCI eP%Vvx&p8$0$0G3xqpR{ɝp[sNߎ,&LsKPE-(`$`b=zLM#$L-,W< 2T`&PdUw O`#O"aq  0d "@}Ұ9+4&p>Hˤ0;- >ĕÀ p= Z;ǎ КC p0N2t4BF) C 0 T]lDc p9-Ed]*{@rTqUŦ` LE ݤ`0V4P0e3X' $ [D0A {QHD f sp* |*  F h` a&JBX^Wo D)bOc- }u ?HC cbfx;ݐA3Km2&u`Z60^Q74#:AgcU[P,g!Dt잕2(]h|SK  xh%re[F*[ ?w ^hIA  +"Xc;`4K62A)\{W @`SWcCv6a KAm('z\Ci\g7 @!Op1 T;ȤXU 6-mdąC16z30P@mKQ+%f~ɠ5U}큔^Lo-b*QmzC ]ԬZ*`w=c·M @L ƌ!<,hJ. pxzmh]4+eNIc< Y#B{>%Q(3`*h`!ºdGp $>fF'p(\;P\>'Btƍ?d+!D%V"ߏcrW߁q 1I[ZSm"7U m0PDOXz5۵lO ch<#DhY P8Z@քiFwH^pyO sz䐣AHV͟$3&7B3X ,?S9D`@ I -1(݀PB$yv.0E%% dvW49A-p^:E]QkԘ@.ml?mm#LrŗCLC}d W͝rrK~OK}JCD=*m2OxOQoiI֭“(< IYmT)./OCo2M{iLo *4 N KR ^b``'p 3NyQ8 >x1$M &ttG`Fso^hz&S18ҥ5mɁu@kxeSxr%acu19ݠ0mr## weA3V JP'w"l^0vX%4^?_hI؉HBE w $wvp2M9uBď@yo O8ڿ$:% 1~\c{C-QLy## Mv]gN'gD{y0AЪ_P0oQtܾ}D-6 upOo[p?GnySƚ(m ,z `9~d2:^B$M&V HSR{@[lf8F^QOQQmwӼ`(7|rɘ`}kL2f%TK‘#(#{o Fs7?"Bm _ߝ䏡w> &Cpdyy XE??Q }pQT\Ǣ$.g_S9?Ң=yNRa:&Uh(=?ݺhx׺erIbe;EUYڣϱaulo~ 6mkp7y@ƚEs LCD b6Ye8 N9J4T+A,b0wٿ  M77lpJyn(t`]DX'hXiJhGC_'i3%|ppV%"QlcodFsě eخeQxr61~eȨ "5a ,@ :)@ F0'`v*$X_,.An>m=X : @S 4"")a;@ Q4SvA-Jч>hoڅ\IhtRÜ9;@- 0Φ6Gi(.A9~7 Mp N뮺6 AkAVt)߯E\ d@∸n%ך!WG7ȥR'TQPs*U>bF~bJ{"1J^kwOA5)9<Ñ/ ;@]q ,MXe([c $ATd뮺W=9MIkLE0]u_C7_ '?[ט:2}m cHX$|R ^˜Ux5lupS7Y(R7l-;ÞR.t Z$ Q^YJ`6oPkTqPGM}Ѕmk>K^ь+qJ PJ*HOÖr?tz33BBb<(M[ᮺ뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺뮺뮺뮺뮺뮺뮟A '{I ih`aRH$9-1zj%RHX0~A <|NUܜGxgɀfwś)֖f0#>\- $ Nx?pswlT-Þ%ys f/&Q\wxb}CaG0? "$( Obsx6ķRܱxw Ro_/A'`9FO?\i7?Z;G%Qy2F2\,ĐFP .kwUO$1wP09fK/Aa{ qT qkb>bLB|)JlWtSx449齃a,&a (m!ǹyic?`@ hIQAVm;=TQY6B#k$tNLJccr!o¿-@F )M, `'3*JmǮH%lvt0[( E?_vph1~#Y҂S{VJS^#lniS +((r ʊSy6>dN6!Qa8.,CΎZ7*|=is۞fR lar 2 e :s=~rmyI`1?íe>_'f9)ڇۮ!Q#x$2rkY;BA.6zi4iDxH sfcA''|O>'|O>'|O>';Zt<YLt=Pp,??Oᥴa͸(*a|QP(4j+)cZO?~'{[9 ?TԎ 68ؚ^JU P4G AC?)!\AG)sXASƛ )[9Meld@bT ;]|iX˜YŇ߭`]͔P=!T}& a,D˕z J)1a vc(EczЕLYŗ LGH/o;ֿXRjT9:0њ!6RًR氢DRr$"qayEFDK'w#Vv?A9'oswlBeiVIԩGvlwjj)\ݣhDirֺ^}eSZk=~M:b&"xa(t!TUaAQ#]]IIJMKI`Y.@`nt+P)Q#T0$ix+gkƲ٢%x#e"NdjJ M-!QmӰ:@j;ɣYǹTY 0pƤ]f>̊5~mjRرs(FyAJ"mKlnO)aL2f(FJT;PƳ%-b^X|8_/MBc>B|v,8۩Kpx>0 !T5 Q!\ӓi%Z$H8Yf|i5/o@e;N6Kp<פl]˂~sG>*k$heRI+Ԑ|A zi6ӓ#s1QE  a*h^l/\GNDckjUOkkSĹǗ@)E|:"Utk !i ^!h&{ W¶J #+ 2:@nDm =F-%glgnN!T=a ,$RA@&H D/aK.u;|sj]d`WX&֊j[LSYganamFMTCmxSEO`<柞8k⷗٢;-@1L$ĴȽpƙLRnvt}jwD횼h`Ns$#+n] iyyCbc嶤TQXo6 K`jeɸ[:fSV|A-Krtx\cam >9j;!T d@XH682V3e8BTP%]Z9<ŻrĹfi!%9+ԐR|':4XhzNuu=9OT׶3I9Dyh ijMj a b귻RƓ^F30˶zZ@ KkCb.%p!哉9)WŜ. .DWIR[JbewԴ)" y ;TW"K9b"8(|08"!T`(f"4s %*0*PHN%W׍b0&1߻>o 䄩qяYw`QXBzȝG&ҏ.-&K@X94 HR‚ڜqRi\zi?05*[)а0*ubm|mA5čuul̠F] P76ϕcCf:K; H0*ȗ׈B5]m'~aO3ǿ@6!Sey|2Jj@\`3!.nҦ:2CdwбpR`jaZܪ>K5f{ ^3PrX&b z{q?e˗Z!4Wѝ騜mW 8uޥZ']&a{1= Q$G)3Ta}=dOeq]I%6(%b`m@[1;j}%EdovJLBْVJS LR0! SBa\eV@JYBT*8_[MLAEF}H`li֪'ڠE)x*ްBİ+u+J#@@hB$bUiƄp PGUdF!vܬĊw1-DF+Fʧ%0w &g}k %78'p6H./=*N%sEn WN_! S̈́`_sw X@P8EDreo 4]"%?-}5'v$p'"fj?#N%MPeD ,rMaWA'jxY*ٴT M^{8?kY?  1PH X1 ĒQ? w^ҚjNvr*Ԟ@X>G{uzRĊ434fKD$X! Sh`(!T@Be, iq|щ쎪(<0ON󼩕)3y^e缾 zsg୘mGЇkX[7s`d}m}C\6%i/h9"0: Җ' n{QߺQ&ҕ F&'ȸ $:V$͐s+^*,Q6ʒp)l{rнg*ԜLwSCJN'Zݮ?! SVK ˰8LC}]^ ӟn-\TPo $?HdpKs;PD%{{2Cب+xaTRU<Ҽ0)"Eol, ^fZ;no3kXE)q5B>1µjDL{#|ZRa`[JQ;$,2$[`$}7e&E #Xׁ煣~6$o6h7!+2 nxe Kb0,` J^@Mk!m.r&FE0Q9&,,@ݷkYmYe˻=! S PH"DB " ol+뙬BsV*6~6[Kx5u1c:wi\@fcN E)ѻtbos|9hDcY&鶄:0 mB52;"(4e#Z;Yq- e75k..5  Q ! @6 BBAN RE{vP8s [\3Ԗ:_ÊH|׿MsN=+- Ql#! SV`h0 e(:J)fJ =޵ Sӯ| n+fD94Xswڥ n6 qMs%iq2<F")ӸK @(`L!v \Xo9ynb@  @@w ׬i )$nHR5 !k-D3X$60Їh4ѫ'빉:{1Y_3NR5 ! S\Da#(P2  #JY: R%Nҩ(/=>]2cvq^öDP;I54/O?5N3Tq§8!y1-1'>C3݇n1VWӁ?e;/?hWiFᥟWZCeiv,|`l~T @ĽVZ ޭ2یIdD_n:PoISR5+gxe%ORy! S̈́Ta CT2yh@'_PF]w_$b;P1AUB[оlDm{^Ң=L^S|7c׷V~2W h:C2&a@1>ʚ,EОFtAFxt_ude)xf7`:1y@XK(Z>6{;VGev@(̺P)IE\f10hu*X3a*Ji9gم. d@! Sa! bҬ[q)l|` TP&䈺bl//Vڲ\D&F2nxpl}|H=lr{Bݿs)Έ-u|;t«wL?Zn =_RՅ: :ќcc:`2>Ⓟt±%Ns&tH@;* Î=?Ȫmu[G@;cAYly;u &ס! S#(VUP3(LwZZe׀+OMai"؞8pU%a^)jfAҞ/h֩o={8%gg2sS*`anbZ9fD{0'$F$ioK] otG` ,A2/~9S겺atA745o|`clsp1  #r UG\ib CCb%uv $)+5@Q 3=}YlrGc̵7%+B)fJsiOУn}ĥA@'ofdF:r=`} `zBط™1hƦp 4˽x%7}Ыg)!H4>o w<~' |mP&QS \ `2^ZZs8 O{a0Sg~ӁCu]#{ 4,=*~?g9^fִZL%%q(o$!yNA`'ˬSkCi~HoI1">" EpeZ= O<<l=;LR6lTSIp޻\HBEPb "9{y‚;C#x?;; X}D <"&U$/A: \Da̎ЃtLݾ ߟhA'g0e#DA%ɢdBXefθ5w(?i$̴iׯhGf >Mlwfaq~dOcG~<4}k'3Zj#q<󃿞f1~'`po1Ho7f=YLɎ WxM`4 A'@޸P:XJ -# 23"[Ƞ<fLM0UpF`feQB߉/7ԯL޸[b8#̄ $#x"M&$`A{S.id[&lo%v6)Kww|ly0X. N1= ٤S" `Ĉ#x''#+x6uDԟɰD0c.fGi@K)H7?!=L-ڌY1 镂HP gҟA{w\UPg揌L (;h%ɝgZ+EPoC9ƿB>OEބ^"gduR39Cc$K5F1S6:`bpVwAPD?jM= 5/uN4 Mݿ [fȁhЗqї5QG ],.~*@P*#\Dd4- 6k_DׅfٖQAqUJ͎g~('dgUy`օSTrYP[gۇU6 9ݮ#Y 1nM(xθ÷c_9F$H3:$Q]c`ɔ,S FCi>t ɷE272Dsk`"jx&7)fVCz+(q/)dUq:\@23UfN &TiDёo"D~Jk]grVTx>?.hA'|+$1  7Rr%"(0BOB* >hɮ<A?{Q+xdTxW[u;LF6#;tπͲH_""rUq =!n+#+;SJ^n06DW(rrf1OΫdo@]:ey]$c\a>n|) FǠ N>Pe@AN` L,c;Qæ|B\TGWѿ3Rp9M gEM-b%0Kl H7f"Օg ޑ>`CK !Go?dl|wf)J6C8~=V0bh 41)ʑp(ZV " #'pۉ Ub' 0½:B XSU4>SiDC\WrxӟoDd H”JW/0NaED<+@ P/=1r?????A<9L?=>4'{???Gy??!>@t???Ȁ"2Ahox|e~` a/=:~_׊)S?;K0%!A,VχiK0Ã$c` cQ0tXJS+D@,k f5ⰑjT>p"q+aMI3=oʀ%V&#o|ۿ4C^K}5דuFoy2 A`'$G`0 b<`|<:hϓ|d;~3Y'`|U)S!~^n3ἳ# $N(1 4` `.6Õ,'0Lm9yL˓*4hjMܝpT^!+g<g? pxNZrTXOp (PV77xSdE? 7Xm}vPԭ"I?^'xeXG7T~,ݎT@M?K Ԛ?wgt)}fEY -x XG~x.,KBN2֭fT0r`V4A'S 6ߔq`|,wc, Ei$a0&bwYW t}x)ݘ}8\V<mY7pl'wb}'21c3a.0qÞ7L~ǟy6 !ZHoq7Ԡnu䀌ׁ0^]AZf_4owѶ'2.oZOA'Wq%M)n~[Mcr˅1vc)!9mRL5PwOCGU-`? 9/Bx -LSCg͎ttP.Ax(aLU̻2\F"?J~!6%@3y0J6AZg. ;gΪ2U{ BΩ/B ! S}Htv 0 _:@ߏ4(OtV"-ų b>8xB-[wL7DJ z|,\{ďVSuzSR| }!ԑ~cX6՝VGfYv~.&xhU3`P^71bQ2u p%0i\f-ݪ87B9+[+Sn߾ryvqTRu,Ms,VŚ9! SCQbE)UD- &X:ڽ,U>61R˦#^>J4>.g%mr pHBF7ݎe-MXC*{RږvO8! SMB dU*R R/,룸l_$بK~EwS'V2enivW R2,3eDWв[ X9 !ByZЏUeI0p3(r^!C`X4m/qtuJ=&>>0T ȇv+wW",'Ayle:/T9R0EzrVn옙m_? nUO{Ɂ ! ST"b,n='>[$I~ PlH-(땎9֖]=ϬVf֣ .nӐ'05~q'CC{oI҈wg8d0e4ӿ ʺ^yT@dN44|+F* xp, 4PP?uՌHF* tV)0=4(#;^ h+w$zۯo<6A6m8B%sٝ! ST ZV P,&eMNCe_0mgt60f8t)U40 sۏ.$a@:a349ЖуY}F=.P4C;V)uvAu,U7s-e{j \<\[AjI=$| Л-qqXaÚ<RsWZcx6Y_on"A(nP?[NOn"e8Fnw1s$! SipƂ$l;42:P6>0Ih g>N0dwN˚&,Z\M5aVlhPU3N4= g? 484|woܝk d0hnPq<X%,xFV h)q;(,P;M'} ӘhoX;3`#s}܍#u 8SGm4w>۔1cp#[>ه,D m)5w20]>Wbnv0"B!(vFG2zC[3UPUP>-l@g0D@il~?;>`aH}:!*S)d )*Zg_q<@PN|qB[ԅDut)9DYd,.xZ|狢ߍIO`I_BJKr-D!mH 2#;^b|eTyU ^b&YŸ,-U8mQo`ΰ:(yyԡ=t6 fzVSç:[u&!7O<]Gy"ƹ& & A"`<Z OS *e?waL6 A'~29 즠%PK`hbՇHfqg!d& e>9T›\ql{(`1r]\9%<^LUG| ~K%Z kiS_ ba0Q+5ṟ̀8A'4Fj~Yi><6R.LF\CU.C' nvRMCL5 :Ii%Ի( BsoPm4VlT 154(FO0.(?Rg:#fa$0)eIAc,m@fkLz7`/$" }nܥJ~)0 oh/3wp@F# Qg\7<V;0ePpE˗ь18N yHA 'ѽ܆ 3@r""drb'ޖ_ _,2`!{Y@ =l\3f,l%R&N`_e4'&?feR]sD 3CdW r=HopUޣMi⣴y{ڀ;A@'L>Sfխb2Z8KZ(0JɈjq#^"TKyx #Lk4͏dGBt9߾V C  8%?ϗϑp #='wx kaN H _C͸…΀f@6U7 N*# n#u FA`' O%?V_yDgȏs ؃΁1E}h B gxb0  䄐ǜmgFC'eiFX?7WjUw-uC7  N_WY3x̀00lA'`?rkRBZ>1&ùhSklrZ [ })91 J_ ^# d$BQ+dKܝ3S G~] 0Q!"RΧ~'}k t~rkNFA7_G{>=\񙾹 nOz6(CH8+vHKbA'``''xg?WF6 S3ojjP&*U/d5 8|n#9TW"8QmM ;ZD2v( Ae˳jx<'fUG U}MvDde/q ̩He: +wlZiJjlljdQ8.,=76@*\c@7Ξ}?R mA0@f6 ccrt+aY.e>[f9)ڇԺ~Mp˚QLrsl65Y<rݟt Z;t90lJm2X*A''|O>'|O>'|O>'WO&3v`4pNb?#K rZ!P,;+ |ɀ%MJv\92 . vV1hX4i0lQKtJ;p!  Lw~)VoA8} Mc8g>OQgg:&;z9 qL9 rI|!ƐB3&>ߨ:X'8ф, CR` cO3 Ay+0O$I䎙 CZ ,???7 (""2e mR%7a<ɦZ Dx8%lByn'6[S%Y{m4)y$Rgxةw#y??ϓ!<* 7<ڏB((6(µ-IJr"dwx\bs 0I t\]֓u '@ rGEWɌm#lmFl!>\la!yML4k~0 w7?`$2s wwv~:?|ap' j|<ּ()a#\a A DqTۖw:P1[ǀA'yX3&Z80e 0<2&c$DMh?\r`o ؉W4u{}0v-w r{Zǜܴ::3JCB A##a<8)V;s~~Cy̼4u,o#=R|A '`,L8h` ed@dhEG3%I Al@:=G\?| y;ѓP g Zdg͊!0 Nz CG*0a꺯~ 3ɀ >^W`ORKZ&oG@3{/Β gWK!LH.< oߎM H9*:®SEЁJd6 | .jGtNHpq2~_UgBODgvEUP bTDeᔖ[DŽx}'㗮jn4@¶ya-0Nw~mf Y_&jjO@i;·R5h\NRutmz?Js)"`t \}ͽ1 bGB CQ7bڳ[w5CRVqiM.nh `=C S'!jTņĄ1bIWy%TD@B%coU$쳥ED&pġQ24LVTh}[  TZ2YI %=^fэ7Tnh|ԤFNy4 Z/%yq_4$J1:o[D)ũh߹AKwoDKAQ Vz3mFS2Y)oۻvjuƒh[숯 RQ k',<(]#2WЮ~K%5ؔb@P!T)CP01F|JJ-P|آK{k6;# JEk{rJ;$weϚ~ X1OIí:B"<lj8LU'ŽTLU"B}1&d4`Hmy97 6kLj;3XZ'y\t[(DWshd`(Ro֙50PrWP=LE8[]tJS0I{~٦Фt+#h bXxz)fƆHӤ/ֶMD)/}I*l.>!T>Cb"s iVUiޮH4sxKF0V2#T6ƈb䊑XLTd3\L텦__mVٲ;U{ S8HKOd}DjDht[:@- dNE6?oGƦ=yZN~29װUCXX׍NShnouyy l| i7vLWKQbr=SQA^^ر|mlŋИPX.9ӊ>!T:F؈A[JԀ6Z͸ >T40S M5=:'7s*m {Vu҇fUw.*\qJƥUU=!4fSQv^ATe!@"b2F&т9fw(VX࿝W(xi׾H`ƫ#8s(.pF\?2Yk)Q` jQ\h#d)qA$)L򗬺MUll*6Zy}C!TUA`B"[;L2JXH_\H2d3'1E{4^3Q)fݹ;(LZHx:mYFN5x*JP6N"[hZxB!*K61l8꽤GIn _3o^:?~[>U6;FbrŇ^ХF͘7kP}fE(h8dS)AR0@p:QJ/LNO\.P]e k>rVpO `D;|/1_ OЦ!ph|B81 A!T6D`l43NͤuݮJv-ͮH'/A~fE2SeC~wPn!lvxTvpYaF,zRMi}Se5Fa!@7..}UFPF)sM )htZD<L=})#\Z"l%& @FL$Á+Nts`\1?pӗmZ<`C"Fkki 6E  לI!]z̀i|?ķvpZuP.ȤbF@M]y0j/uQ8x0 e+I"F"g=p{x{!S퉞XUNWH0B,B̀ `0=0a|U6ѹr+k`{PdkRU4)k -F8Wo@p&S2a~29pHoHKQ"]/*4F$|~hi){ky,e(#[%Y͏vOl~bS(g%ٓ>y-үG)[R?ijw0yf%*Qa͋}Gd~"7&lq&ژ?JcgQ(+'Epy!S!1 *S-K*RbY q}+QSNJo[xǩ֘ ȯ.O ӅyPi'TsFw^3"?hosկzŠ5(YϐItC˚w1%1r%XYHgfRUԜ'PT̂0S[d }[h6k3V#*1t#ZI`!LͣT HD[,@C͗ PIiiQZEܜ /3ŽԳ! ~wQ/TZh!y9!S`U*HTR+ Ke Vh?[3#(5(tSvXB:uU:^`{XA̧%!I.ύABo>m݃*y?~6|=1~T h-2>%O|6qgh!)ܱ^Kq^BEy1&f8 v֖[YT42.G !?ywu@+Al<umY[qO)h$ ZC)kOpB9!&P\V`a<,pz5e! Sc@$Y(d+דȀ$CgӒJrGpEVS(4cS(b ď9\p!;%c3Б╞F%cZuǚJE z?%aܕ B<{MwY9gc5HєWV>܅y妻d+ [)gഅJwbo4*RVJ17!:JBdY{E`τhߋ`1HL,-;SIKi|u ]NqBD*?ѢF%C)j$! Sͅ`梕;7e"*ɏ hgw40bNdy_nV}} n&83o yE7R1zGI7FNomuS5n=+R𼤓)fܑ#P3y υ4 9' y ?+\,s^nӷh@4H3)@exX)lL:sX1K 9"ɲ65_Iak9v[<[sF`lD4%d/bZ f._Z4?1Dt! SH( a@Z#Ԓ!e,(ETc8|zjMM0W9e,Mm ~t S'(za\5q)7 o$k& $Z<^dgm緤yw^/NɶT<7g+o>q=`@; r@Ϫs-G@PѤ/wt,@1 R'-{o!1^IuV&.-v[,p^T#C:[r.Z۫K~jc:! S r9ܨ2UR3C6q5Гn݄%%F۰Xݓ4D AGU*U|=b`$0؞Ip>>[4\4ϨPtvNkֈ< |.c2*a*D>F`?}6ݙ`X=a9! S#,D,szhr" ªU]d*P c!4 N6v*=BQ0ƒĖV8~l]ɪ2wU3UTBn` I e Vq7*B\QM Y8wA/PL%άtIL-Tf,!:fN՝G: &(/־T*,k! b~t&zfi5:Sr-hS1&d@RzDE,<"SBvLд!*.*M{! Sub AX€R-D ['Q$~5sĨKgp!VHB^R3Y2;6N/tlj$GCkb+?5d3ڒviPLp 9R-4P7EG< U}JhlKšo_˃9x22QdE TA4:;7kًM9F+%h펤Z @c@LG%P3C,(Ε#|tA9dյfLQrtӘfAxn);Bz? n qMho%Ri#A@'LaA i_AdtBM+D)[MOM9!8JGLOdD֗?\#Ē  !ׄ@|lqZppe!4Zay1bP))yww11#2&?ϡ9N5 FKens}r@&Aǽ\3 cd?s<A`'oY_pm ȌLĿ9jh~!X &Sy?##"F e $#v{߂ o-64Z&tflt̝,G*"X O 1|!O@V j @GA= ySp$<4p "]_R7^HA'oAO?#@ȐoIDBvZϚii<,` BAߖɥpJ#N~cj6B c*X ؍Vwf3Vy3~$ Ј%?}w q'~ɂFdZ gX e:^Bpc&@hA'g0M0@bXl&B"Zob3{` =f0J#xgD˭AlDvGځƚ"6L3jl~68?D^u ">bby#!_0s{'_~cұ k3^#2;g^L1eLP #(S/A'@li EBƉ$)_-q$i%0,bH9iR>0 <l3ýO@@fAV R%/ό&GA=|w~)?_6} r`6VxLY[ A'h@MiĖG;ގำ`1^,rG;0 $`[4 ?# o%c61WUÊ5KY-0S y<8 c^m <$l:vDu,D!7=H ')M^"ΚȐR"[> ~$TۀxR0_\rP^0P{6Fi # i Lh?|Ц,MY}H$W3`키G|7#/GV 7di4WB'~/.Ucjj)=+v1Lp*0xS f1JT!7P#UcG0Qxx{BdV FfRF4'8Kz9U! "ֿ z. ny%6]:2uI$U$(^ۀauD?EpؿEX9G/xuG?y??_??????????IӀFhA0c m;(?4SFaRcvۓ PD.  'c hhgPCD?~ OPE:B 92 OX e`i`\qw_!$$ t-t(? 8|7^L&mM`S@cRlq0Jٟ6]=\fV_oh?`oL~J?~5Ej;ϥ{S6p-\ف>;A'\ D@"XqNH oq+HrkajLw3;J8F'9;~ޗYpk"F3v? }U'ՙ蔁l 0F@:dIgd T*dV븫(My݉WZ{OԤ5FmP h =cEm #I~TRw~w*y! SmPB(*AU& yCD8C#cy\,{4smae_mOGE;3<,ȗ-8kΩW!;Ϸy$Vf3TO.RK2s?r6zŜ`V7W}tcD[~_ws k[p( LâTBIR ',_)7]?8V?1űX{zBn+af}u9~! S` ehkӽ٨x0] NKy0">nT\lEm9R1M$T5 lWqݐy[h$p1[޹ @ˠ0i{4|`9됃xKm"G ܁CbA<<ң g9;T5~XfJ$:䊓 ~w%iq4"*_XCOAVAj\lM!|%[k~soy! Seb! )T8h'o7j]\gxҥE[H;^<{cCHuR!wJ?qܒT#N˃rD 6#'\pH O(\2$ºł0rTPEZm Բ>7x?^+l-Ѓܧƭǂϱ=" BRM7GjUAXCxD'hv R4K4/3}ѐ*apͦDjmnv! S}G0,n{#w1R H ,zܔ6p7/!FvѺl >ߖ&534No@ Xn ejDv\f(bWwJi^x w2rE2$u (u=2q[ `^,Xd%Q`66#Mj(EA@ (wg='2KҰPVM$tAF-<'yH`Hm+ DnjEUݬHNu! S>^*T eN$p.~fFCVX=[l3wwƠf - L?ʏh?$ܠFL"Joy"Z 耽Q:!s ܃iT =,>g=XN " |_,>g6H 2K*UF DFӂfn 0 /hԊ)"+T}FkAT2e>! S}> 1UI]@pPk3Ŋ zvvp}(°/|A\8Pv&7_=@+:[}d牾 |~ښEI.joIH^#rAMYYhcSA5 :J)-PҲ+-LInIAlm_wr 90b {`>x o"WAmxWC[Z׈._\j. YܝHZVJJEl.'Z(8rM;! S(2WWBY8c1;[w` sGEIsX*ѷoe3K%,=;oCdJ=SzZ1 Qh= ClK09W/1Rި+_}:s[*:;/) /Xb{_hhУ  ;S-Pؠ@htDuW2*WV`q)7ALHSwgPV ZTTCdKI08V)y={uZN?+.! S %hwVU@j0!J"&*iZ{`#K{7ET2DQIyGE\2SmS{#)g?|b06:iFo~"@ 2)EO Vp֐v̄U; (FR@-nx@^fj@"IEw@sB~ Cxp.8JgAO%W|ˮ}sg#X)/8'zbəh5iܝ! S(g6RxXhO4lJPx4Ia|.Ԑe,&3gh:v}Ds#v9ZOx|u Zpf^6? # E[Fqa!긐CoYZtP6/vU [ j⫑ TVzyyf w"<C1`TրBP*/[׫.'ߡ$ *Wbh4J?C :đ|^WR k! SPE@og J uS5Z*E iz%OT0GLYI:~]nVF6S? IȫTktjcc Ov/M1;n6l#vQf͚ 4>S!86';|T [Vp9ʓκy P*w,_'A^9+;ZWFCR0UWg$jH$ kەtӺ/sH%qtlx!vdQ{-*dqFB#! Su"X(P1[uFJ"6gmsH0,+Ƹ~{h J@>Tƿ!]#$@AiMx'J ѭqiP\UdHAIYfڭ)T@riApSOfT`;!J@sx # {2( Rm3}$''(6x7=f)*fkܱ۵Jrg^Ls_t f%1 pFw=3)V4$|af. Lz((! SuPF e;7`k`.d03gDŸ!XSlԩQDoTDtLx7t8ŝg?1>]Mv#{jt:&X-R*\BZjU  &wON\`!Y!,,n(3D.")^9, Yfep67xr^zS_Z=%Y~m4yIR˩Ӽl@[8̃:I  wN&ay l~U'_nxZb9! Se% H()XJ6 P%Q[2ե?ČdƳ0Wy9o Yyx *=J/X"b@_@\L&>w1V>k?REvH"QLg'kkXmC_Rm1p">~nZq(B+)%X"1Hq$Ղ"G2k US#rlgJʑUGjz5oWg=3"mr&dZ^3ѲKq[,߯{';fԍז"! SE)VflP,-(8]5t3:̫̐D*ΧN8$ni=K,vۊrs.k&vj\E`- ,N퐤 ̐.A€lh~)\";I=Ku-OcU&lkFzɮTEl"e TX)ex3MNt ~ l\{WܑczOb+:y`! S5x0TFħ1wш d<ܲ7АBD]njd#;@0J<բ[pIWB_NU1fyGB& *Gi ;2;VXtߠ "wu+@TuJFfy_9SjFgR̰*nbqZp2RŸt#8զR\IqZ9(hGq! S]mYMb5>ʝ;G+ՀA}Oce=mا_'^}0 SOZK[Z'hIN%7LnoTO %>f Ό%$_F_` ,7Sra`ugg\GjUU2i,~u)_=B%JM2#%D!q)ˬ e]ڍ I _ǒo&0?! SE0"HAfx,@@PnDfvMpj/t@Fm EӀ`4?ԁ_?jߵ 1Ћ*4Ybn>՗5*=n]1"rWgblnD7kWQ3L̓ݍBVYQB?TCaZHl@dP)J+M[_R]&R7uӈ^RͰU\d(8hNP~4! Sl%*p=n; VbWVGPUd20ע,d24ƈ*)uRWFdDÆ3񡢋c tA'Ѡ8u*Dž}'>5"1}gev1p%\ 7)jƨk0 wp$[}$Ղ1kt`^J[OAʜlR[)pMU~J>:cLf ZT_*7 9&l A'/w TbȰFϟ'2oAWB[>佳]+ 3c펚M*2Llmco mJ# Dyx)GϦ`PxߧXO"`K yy xAԦI|-lA ''9A2>0)eׂUl 9Hue@,=-Wzde;R 8{ @g4ETkeL .VׂH?e+<`%>ZO e?g"ry>yo$鋓0:2n3B0BEjƯ؁/ >*8 A@' eNiN\1䄐^ _ #@JYfS(SN@k :VԿ霰=( 2J1T^`3lr9{gH.?Ĭp'rG+`G'(~|0LϞ!7(S}? |='oC9 YU{7=}: ؊}v@W5L@A`'` &/ep`C^rCA*'a 0om/X>"\Gl.~"?-n-i1jBM~'+i?3{?ۚ۟T7K*#o$!'5A'L'@x<ڀ<)>Gm#0lF 7K cd1(-;<+?ǮC4'~CgGIyxWGôϽ92s8&L;3T?XA'K'H>;)G>'b|@ `dy Sfy PAgA''|O>'|O>'|O>';վ L(   G▀8mpwWBq | f8=@P8%N@hOU9\@\B&¬`π`sn?M=cࢦCpwg@(w K zE$jG Rt+TD 8 B } &PaZ>|'=/0M&l`P#kb\ jL:q~??2@B0 W1[Ou(#y!=3Z\c#pK,P4"Kq2poMڤЪ04Za<= !v#;IGI|p,??O Gmn> 4\H jٖh6{2K5o yop  T6<d.$7_Iz꧒29nF?A(-n;`2|lqÔ&i ؿ\fS2任wi X#r@ Hty% q<#w~? [#N?/ D{h, x hAKҹj M(;3t"2?7vLA 'o4. ` AY`J)s|S#y!C~4ΏއcQ#y NQk8͈Ÿb1; 6 LY]T @Ä>o_sCC:dG{#>|C5D?ֿo!1Ƅ(ob2\!*SŚ 8nŔf XMHTg n v7m500+L"- M@8i,) j": VdQYU 8C4)++!B ӞͲ`kV/|t\0!JuLak%xgCphJrsK2"V@etB;VVQrY_ҫVq-[jش,jl:A.<^wπ{YJ+ 6 ?sF!LF![v=8*nt*N)!JdzQx'񠏎Zm REq*7.v3Lq?3[W=*zd&f5q,7i8@gvj?2` rcFJ{˜ǢG!TF¡Т$mJPw L(S'_: phSMFd)\ϥy&XXi!K²SK$M]kO<#E&[ɼlPL*MPmCj'}{]Vyk$ r/EbtLT Q65#NM Yn--` RQyXQ/%ƈCPedz;_ݪ&4iڠEҗ@P8!TuUa!EAي"BX@!h~K[%)O>* <[ et'pu6P<s"3N&hL%jjj[ѵ h.\/r(?wSLJݿ; X4YVȫ.n'c M2>!T] a ĩWTY6 %J` |/Mzl¥yL j-O8qB8 fgхNZpzl駒dwzqAi-N˗6M6ny3\Y^9"5ґsn}ejaau+DeRfSYھ5u ʕL2T2a ^k2H&t Ho4uDڸk*ܸ9RM|x>߳ib kSݶ[!TUb@JD*!S5ZeLKRB%3h5QjU "XT;U0y3o:BdbQYإ`f7 mVwֆEpA5p;,Eͼ&mgD*`e9j\Uok "Ys3&n CD68r nK-}/Al[dJWr«k+Q6R˭T WHYpM[UQBڄW8`c@sԨp B`@[$C$ ӂƳpKk c;gC0X(]ЄQ! Sc@fR$U^\[#qB\\z.ں% * 5K\-?eY29Q_P =UopZz25ȫS\w-;m=֟wN*Y)n9f`Z}]}^u߿+ )*"E5irۚJ5_*"{_rL:4%,5DP6 ? dn)jNuJLmkYuZfTZ%bHeMMt ^Nܹp#LRW^U4! SGb ݕL['h'IAS(KEBb(-RZ)s{hYycN{ONpr&04'Jn ?ZBD]^\d6}jfbXFY1[8Bnxt"(>_p*R閈*5 CJHI޿a$ƃr~Vev;sHi)V ƄI V Z*yo{s )e%=%nlq+ qzuE99U%gJW 58! Sbڔ0ib.*%E!#B #|-= Bx 2c OP0x|I>EztpjѬ)t3ܦVHz׾~ @-"oJ-L<~}6+f 2K JyH։t TQ4AH)ޤN/i8 рiK Q>AA7_^:RVSGl&J&UNCQmc} N殪ZӞLc"uˉQ! S!#"^seWx^1alg9m&v]V,4MXC37\X"Bj Q@ kT+٢[j*q?$Xo.H*% Tefey+wϜTٜh"2*JC& ߾ Y9hC=vShm .aĻ3)ݤ 7ON4ZalA#)W'kZBS%3i.tPƒB15ZgkD/S UYk})'GUuV8xFqP)K杯! SaH#&H`:Xs@fٷC/0E3g#CLr5ϠlgX| ܁믘i19J2>3_Ja@*A7ds(46X9tIA̔hK‡FeBHf nßb#Y"71d!>?6aM3~ff&L5 'M;! S[ MPPPLH>"X,l~WQۯz#_Mu }Ԟo_Ϫ-3$0H$чP:u u] :e+m7V io(uaUR~&QդH"%E4?ۿ4Qo󎪰@>ΣRoDP>?QR#hLsꨂOTj d)@1&,;ui3 ^7 :n% ! SM'e2;n0)%HȄx6}t\@"7<A+Y-&A 1oaiqPvX-Y}Y( Lhs FpRLeKd @ 3Y'dbŰAH !(s{)nV̇l)Uuc6#! Su!bעKE-_ Y\hq6z<@1 0ݤ{DC:FQOn##=B>E'%W#?7$L;L{N:Խy %{tR>f_5A`'LaC`eH:<:ZD c4?u䠤"nQ#xI{6#Ut0vPm3c:LEL*b/wbj ,#ߒC䄐8}B3?&@3y! TgW4ffY)$6@wZgՀ!e =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr? HTG8z| 0|WVBw/*@ ~{rrrqo]uš@nLp3Y 23uςxI +Kf YD’D5/ՆՀ]c&F p{H@e}nq=@u{=A)o[(J˷\$Qwʢ.0\DX,w|DYy7Az@H GZhNa]n4⦳y! >>xPc f#BxdbBI"=ʅ:r "3C|d7FRbC%tNH\\I1Mg뾊r@ik+$ADW rckV#V TjX)@/  Nl6,?EVΘRl:Y)NJ2[_y@=0״!axN_GƖxB_$VVV6 0XĆ{/]u]u]u]u]uag\dv0c$,u]=u#<—x-K6k -8R H,&Pb`/4FcMiZDxoB*EqW6+Yr;R~뮞뮺뮺뮺뮺뮺뮺뮺뮻뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺]u]u]u]u]ua/}f> _S+Pp1vy`!"dq;:C@i3Oe.DO_I=/2ҍˮ뮺뮺뮺'2 ĬB\&G$0f[J^*t86l6``n?P,Qcaw3 n*2ôUc5`c,(;%?4&1  0P Q$(3)5΄$̹\8VbKJcO-abi](}a\# NEzK~G@c*cy! 7@P0(mjcMR ()0H0r_sc2Q_ҡR%Ãv3' ؍;L8ˇc _\NNoր O yF{("SV %(ykl]ᷯ W>F?gFLJ;L=t0n32 R*(@X0xW-xAސzLC+`6%(73h3|2=UÔ/C/Ŭ>F LF#J ςIn zڰ_ :%pm qQvbqKB}1?|v 7EFQu;=)θyFS^z;1ƍ?oѷ@?14#" {bi%!x3ew;OF 2GRoH({H-~%Um(lj_cYAy ~$4T/Kكn16ӒIO 67_J;_ fde45OM_x $P itF& S)5'a%)}-6[?%#NghG[r8C8!|ۚR,~ ~r[M]q %/?|+?q)I.k0u\f?L3ˁ,L~)d4Tɿٙ42+҄ir~eT P>ku4$p|Ba m1]?(% 3 '%ٺ %/LEqDn}aX \wwirLQߐ/ S[3 qk)h56Au010k0ʼnQz96_CBo8KU*Տ_pΝ Cwf^F\Ѿ?z@2׉$I$ƯåE8%]+ |v ':~뮺뮺뮺뮺뎈"c뮺뮺N]u]|巚}ɋ뮺뮺뮺뮺뮺뾺뮺뮺?u]u]u^˜2GI T?ZX+$ZTP 8Fa "K}ߌd 6i0AB$~ndO\o`&q2ZnQ@'$w:8o>Zx3FuA( 2 )P||'{z[M6\oɍ]G"0)Ja 6#OBC("KMkXK%iD`/Lb nuX\XH#8a>&dW`)CL7= Y A̬"}` W}cB)M y F1Tm'[=!)`<20 EF@LnAs$ 4O;-1yG#H 3c:Q-@7+\<E~YYQnRO~NaM1o5!?,ބ̇]}T&A@$yWEh=LjbWҌ?k|WmUQBZ YX<2 d 9߁v?xqW_ݘr5Q%_ ݮ$@g hs I+O Ce Hc 64m6_㉀>"0#E ad  2JVNnM-~)H8]d~j?`)Lo7B*B5FTc!ݗj<`3)(&䛦J1=8fyE@!2n{ODËbdЮZ1pZQ|7@'Cbe1+1𤢀mhzI' LP0?cB'0B(h`u5p oOS=ϏA &n# jV[2Eۥj/M/!uK4JAIWjĠhEˤ. E)'\z9':xкCClǗ8aT B7 \)e-n-Rgjy$RŢ[ +/ff)*Y Y `X ɶm $>H4:0ëLZ(#? $ [E,~ݞQC1dUBWd!w4Q",Hy0]_`#`LJI)Hp\# a0`i=XD)@<ݢ X#tNr50Eu%` "PX 4y%U Ќ2 m9[1bc\x;'")(xcOVD)cQJ V Yh҇>jc1nxxO aE 7ތ101r.iNjAV8>e89Ipu Db[e0 [c"LHT$)}y#faC]8 uWaDr߶ o}, TTV .}p f`p3*Ym-1g@+%# hr8[9M @l4 x*2B^ & ?}?usYH޲Db@Ekh5f1Lw` A[QLQ ݴH*Mf-m| 0xû4_eV|q&F[OҘc[cM(d@ GTعe/(oэAC= >//` #hđӯ;ikUfLXlr@1|Ӂ ^bcĶ^n'=@Y>`rQ{oKuu<Ix\9#O -B`Oo5C+m!"2ChmB:X EB_ Y +e%ҏHF=x j@@ *`1'/U B?LPD yM W C>$% >D!c.ElpE m |2&`N_Cf0k{&Z`x`B ִg&dSMߦۀT1 0E߀ *߈a&@2QgAw[A kII{?(!"n,"OA{(K$MvͰ:6}~gxRR[;U>K TIhm10*JDEዂ%D ˭nϒN_K~M~bJ0=7*rߋ#$ RT`%@Y&^1l9(A!7ŖOۃ[O|@bz]ܲ1 >=኉c{ K_ )_NUb6C@9s>3C91(/BM1z/i~?TR{KO([16?)EUe4i -(ڸ8@@r0M.$e8}66' d BH0$tCÔ6}A!Juױ % 3xhd{}ذ:I cȮ.{G CVu E5K#S$xBg,lCU1fc`s=G{ JW3#c[uȕb, Q0=Uy0f~4 伦Zg4, B8P\R5~}838u"l#G~}?;=I9VD/jO3m73 k^ 3QI 'Pfq HJÒՍ6,hУyn;;av^g?)cocÒrB;C\v/T|3na~@v;t}~2T' L&h?CGq挌lp+|ua &ǫR ewKr-[lLx.=GŽ0S Q6_d$5܉Λ{@w|YLod2:0 5A-t~\¥% tXwDkOIgM7B   p9\fl0=F.XeNO!%QjaFlY(~dp02ЇE'FqL'rHoP vod:=EP}].(0?MGYL+oBm\bOF Z<Wwk,R4s@(\Ł逃l]WHB+0k5hҐ44<@VaX{N/YLт^. 18*~eKh~*m}+rkPnf@8 H1fY;IFF(Ve-Wa U|؜ŭ~߿}涛ࢩxrG gB {!{@6MP*_03P9=]Sё!vNkD6"+HX׋,«ٱ ѫ rϞSy+D%dݡj}H޹-F;c< C^E˗9OdH!.([׉C48)dA6|ƶ:3OŚ" ,n;^*mjL8 B2(,x ^̨[zlYOwga9iHjIc]8<S mݰ?FL HÿSAe J?38Η2 dp !0 HI@ xg8L4G0Hi,*|JG=beks@F]uכ  *;;y3PkU$.%o\3YB.D {_Un QPS˫JhHob D5,W?Z ad3,C%C18 uN)y D*=]~~W{!Ɵc ?_=f뮺뮿~ y'b]u]\z?~ɺI7#y Pn)+`H5YJ}5[?x qi__ e(FfnQy)![isٟ hQ~R0_~`=|7G9{`jV1Vf?%0+uERA?4:g=߈WT"„^뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮼JA 'l  ")@—F8= ""LMM6alq$e^Gq)#pK(QUs ^n^3<3yoxC 0X=w~JBd@80?ؠLX:yۿ)@ A Џ~ ?º! Gz~ 90!z.o:& d?Zx0dA`'@jwrɊJ -̈ ||$V#O]rfɁi^ާ`3d0##'fi \fΤ7^ ĈzbW%gK@ɀ /QJ{|oKx2 ̙VHwx{A'|K-!p\YXHrGyG <(1yk~:k@3t0RrZ[so 4k[x #.,A},GS<p@?` Afd͔ĀffD||kLspA'Q0:6ym (쫂%y̜(QGF3bEF 4{r͟!o a(P|b8P~6>> ?䀑\%W}JGi䄎C?XjY 3d ˀA'b@b$P!agebyhOMe4G܇Ӄ{EK  6C X6. dĒ"ݻ/) ˻ D)%: O0v&t }Ek7uu'Eye~3DK.< 1*kڀA'%6[xl|$,d#g6~|@fGtʔ(0q/W|Ϧ y0|ltx) DC 2`A'i atp -wE3شp @(hbp/Y1B/xM@e ! xilxX,y"V8B*z@{!xaR( ??!M=V495v dO|j%$2"2&g ؂f A37~.iqh* m;`I"S0J~v/0K׀F:Kg~m/Bq"#o q":U$FIt ohN ^+RO,Gs|(Ç~Bam#o؆=ER"( $T?' gAEB}|mП _P.GM>MN Bhg??G?????w?????$7&pK1<>ca a5I{$IiL/"nL0ppDOJd +}Sf4gބ=AK0%PHg/'Z @,C 'xj_\K0XE\䪠 f5ֻvן,K0\W=y&%Xד%Pʠ fTxeZ|5yAh!5LNjX}Ҝ8i'7WI/dB{(堀5+pqXZnM!em[{EM׸kA !mGhϭ|eӍ Ɉ"d@{ 'R*x)ox{P\r{QX}.mJ֣#%6d"$SE-L* Roth+x]蜻! S̈́@"eWt6d39BT{KI p3JEt0)'Y9.w-]UzsC(O4[ Ŀll+<₪9- MU[iFacTҢO2]< A Wp 8 wwt 暽Cn P`8")NeThc!$%r!FKVlUX#zD-%A! S},HX( AgwC>@Z|4W 4LWK7)#zc;< 2p1`Ö N%_$njJ. Wf'kJ+۟K#ik2E\}˿F =/:EkÉ뷯w5E GIpQxu4^T &oL"P; 4@zZM*-Fj@F!Tj@iHQ L м8! S>cAL}w׌8^Cs993@PÄWN0,Û Dn;E6@F [HB['.|R`9ǟ,Őauߔ_{_r}翇DTʖrT%eJF#6`\ 5p ((h_?]bGi`$.Y" .3Lr] 8 D 24U/9JG;W! S݅>R@p9ԁһyQL}Ǧ9i\4V؉b84$H[xZ`vbQ1t5 AqwȂER`bk7@4Aw!>NjBPRNv;rGMT mT}00IwyrnN( 8s„wӝ:ƒ*jxY| O jMhp aG78 FZTܭ! S>@Q,[1G n@+*ҮL 펴 0CpɋGg*1vhm8ܹ PDf a$# )]|zt|fCs^e?D4wPo>ET;c']wa T鐐سxz;ܳ$Ek 0%t*+P(3hVWmZ\~h9'JUn! SIXV$k+[rWўXT2# Ҵy@w3czjS jg&4h?X\wmK`Qz5%>|&U'K1&d5GoY=2}1b:N֊%yȈW츱"f9 9&k^[].τIT+hl@2h` J,1d2w E"he ˛] uJ\F(3]4^᪗./8[+!uR8*! S>6/j@ *ҔFRc` xr  :Kцs?<44~e) %}M!}2tSeBc7(C oaHRn"J-$) {4p{3EN!$cj ZB_xv׃:$d+F rFY}3wK|F: &?v$2]iY4"Zi6^ykcV^{ ýJ1ߍ)g(˭"Lv! S"# 2UB(w*bY`*^䟻6*p`U'͐.Tlz=.0-o^K㬑ʍT`u-ƕ&<<ކm,;G@/`0qt>VJd>yR# U(}cHXPs#7osj.Oq^! Bc9 $iCO!ܫo[M̦)p#įQLlW &DJW'bgz|y+Nɣ ~z_G! Su1" %ܪ—/:b5_bi3p?qY[dV"Q"IXk<̶zeUzژB04ϱzRK`ԧ׊I+F{7Ҍ_uޓqN| `_fAi D%/y߄vۧ1iCz4N[ :L`;lˋut\MwATow2p V QEcD(F-tq6)]u14|P8)8l!\?! S!Ve+X(,duœBjMњbΓ1S @:'#Boͥ+qu` 5!BV$·N>)*(}OT 4RߤX-g:lJ!_\oeC=ᠲ:k a{Ef=Dhaj+`&d+>Eɘy&"i=%[DNlrقMDf5l9׽!j?,rұ|a&|3wpZLB#ePvşʿ;j̵! Su[@*F5U(P[2_.2 (fD)`f E q” Eya׆aEoQ OW^j PT-&L<3GںZ[?S \^JA'7(qTͰ׳>W1=wv[1A9XrJBn"LK7a:F jJry^4yX+Ea ={JZj1VF! S* `curP.eNDA)\5A!]yU0tP\Z%UL0P|\l% HCdr޺dzsI^RY>(n[i[] J҅XxB(8MwΨJ=w }}.x% 8#]6llucSjY Bb%K8*$JBJ!2bA!{$LBTUR ,k6I*Hz(DHr! S}"H!LaXLucq:^{  7/:f Ge- l |>:o/ x|cwī8!),=iA@v _l RUC TgސANItiqj䢝0).vZ-H5((d=9@ͨ;G1jTҭl5,˗(wu+UħELQ#2@PYS >JRAl2+! Sm&$"ٹg9R@XP85_TjOF!?x4<("j,P>YnnTǮA(2JKk;EL=OsW5SB>4IU7/sfjCvEfrAa1uVWtO[6 u~JCgHUGKTD:%`VMIP6&aQ"3mG|EBɇPXȕU[B $m6H^:tcA~eAHkk!YFc.Qu;H g>QlE?Od0@х֥SWU! SML$FiQڔZp_ޛ\,̋*L)6q11f? du䳋)yaNH7t];:I)e6r!^$ ^PdQi\dNyotZ!lwc3Kox!]41 ( `< uN!;\bIL /|&Ve Mh`HF5#w#i,^XAB1&!iT;ln]IRqWg:! S=!rME%$MVҒK?nmCOoRzU16a]Y.1e(ʱ(r.D5QWv/ei+#% '!ldC7CKancq R&כ r=My\"DAȵsX` Ke&i+(l/ u `d ̙9v*ѣA%I3#2jD9!?IΫ̎/Zoy3ic9! Sp ɆP{c,'Ublxa )пվ,^! ɆPnxatnV\0ѓv6hGe4VkVxt5bwnb%DJ m9N`4P\lL "ln- ~Ϻv-qw2yx=5!Y"ԉ_mdZ *͕N!A@'Q @ X<*@@ %(xo.Dl(!v5*{)_xd=H<&~7^}@fE7h&#͌9z+N0{oSd͏ |4"h yc_*8$[ԧ-?7Fk~eޥk%E=%P rG?hGp3EcU|A`'%QD):5_ BiLI#3@U>NŸt{™"].x تfy@}z{w|lq tTȼV2eJ#ֳJ+%?  K3Rz?{rt>"\i)mN*s.<&` A'vbj 2^H#Lua=Mpm튶oB Nf <ɦty{vNx զ!&˜> oL׊JV4"$!+s!~$=y!?GC}w` i>4Rg&8RBJA^cA' e De#H<eAit^*|Gy}uAO <x(QG ?Ҝl|fp6wRaݻ}F/.3wx?8 %KY/N*@@úL߲@s@A'$||(F4U\ 8R( i$1)Kj6A`ܙMLP836|pNL_o ?]2?h8SsJ#y3`,C<@AGX1>07 jqO7 2͛M $ Z rJ0]sP6N×T?%  7=/͌ˆP&L4B;)Ү-ߏqV xR1_[)mMf@g?G@k\L<8BS^VBfoY2NIXLo8kcvn:ef 5W qU6U[WR-|gJ{14"f*FNe߲ {.Wі| Np(UUWv#d5b8YJp0<6l<692(xU7}=?Ja$WC cA9'1nvh I#|"dI1c7亖< A'S%koL2~ϙ&exL,6?@=iL)[ ?! M]޿`~)8:w$i2U4"*NQx $R\2n#;3͸ O('2C\5{we1LJcoJ͝99"%+ߥ,uA&y2@h6{ /gY{`@@A '~ % kɈO##1.^KGA"3O `?R;Bۏ ~c61t/62(~]FzrwC:`8al!ρ&}Ukn:|C;#x1a2z6~5z8 A@'`_+{-,&6эf4c_f$%˅3M;$wNFrW>&@ 4Nj* A*b;~o RX+pAn!̖pM,aAz3A>^FϛǰSb 6BH#3 wOI-ؚ 4O;Vϧ y5@(AeK7 6g(OVC tLu i~K6 wo3ϱRFQv!eg e0]cg%"_uI"Sb3bArPZC9-kMXn#dCػ2}=7і KʀngO !1Bar AhȄ'B1kMA6Y6)7!wcۃ7I|OGO|Fl#xo21N+-π߀1(x Bwp52׷Ga $(sdlD@\fсLӑD cm쿃oV 0}0"O>NC!(Z߹ /je/^J@dPac 3ppA''|O>'|O>'|O>';z3x(I` ؁[` ǐà ӐOCP)Bv)J "E 1;\ᔧ:p{uaJL@LGp:L uCNAHnO2 'U>&9% ;׀GD8ī 0O?(q`sw_@KNosQ$hp,p"!CBT.4 N8R"6jd7.P??e@1@W2!, #4s@C >9wwo??xoKz|@ADUÀ 3 Tڞ7=LG{5x\?o3 AhBx4)߁Ee'}!%i#[]zd>ca.pQ$i~.too*m Ȭd!ր8!*SqFBP")Fp#HC O`߇@/ސ+KZ]z~툱B,"}ێkwswsh:gNO9AUTńRW{Cqpsyze >c؏l;?mp91i؁6SW"DD b+>!LE.B:WUxTNsjO+NX$?N+E}w,mf8KRH4zn~:~lg{7ǣ;Xց-ƍq>0h%> O LP D 1)HHؤܹ 6j,%ЊЩ9jU (m"!ҫ%==ATAJdOՂ7!jU )C(T.($ )'J̞]]W4O7&EM|xc9#A[I(E=E2Q}ThB@ t#п6]E|!x%&C | |Hы}0\Zi,Tk!,T7Jz4ɴ `u񼫯U^[owex\:adE<',$8p>{2*uHrmLԤIp^ΔIAPofędZT^{31w#$KtvoCr7R+ jE[R2KHd 1T(Uat`UUINgX~q^TX}f} DX^ KTc2X*^r HRNFɮM]jZDY=X kAbN%L$[ljQanc\)IN-Aɜw4"pu itwZ(Y/,BF!mxL[܎*,2]) )KOePEdMK.,g`SnftF|"vUeOdm@}ΦZo;_Fro6U5 Ԓl"@R*!T: Pb&JVР2YtZHv%-M+忭ʍK/uuK/<Ҿ  UF]{Sm`U+1W-QH^P&WeЪ@TdEke᳔ ZkMU9!E y5RK$ϭ]:贓6wBΠlQaLSSꪢ\J!㡜%%ad2n +9eRE$z\qBh!T=ؤ0bƵE&xYy( p2|bv= 2lVJ}֩ɯ܆Dӡ_e2YgJES1J6Ă|Ḁv*`jlS @51 PnYrCs/?Q\ o8`#&eX{QCjyձWf 1Q!-k⫣O!, Hmd X DRɥcjZ2Xfm^)1Ԃ\4 !zz*vwEߪF2ZiLnQ;td}5t-y7XlRaqSf v'Ry\L<|wG<Ɋ|X痊K><"(u+*̀%sHDA/x )s|@D@qlDI+Sxۅ޻!SՊL Mr;/qCUO2SN`4lᩎ+VӅVʱlktQvF$I:Bt繝#@T+oaGC~By;0*P(&}lpMtexiNuAaLviHt!>k*4($~X)@ @E 0 *Pӎ( pR\5s|ckZ{#E`Ӭ#ӧ=Df! S&^*Lܕt6 oP>\i"oHk7DtWyor:IG8}e!/3P7) M ۷{"-g#hu{_ tαIq[V{gkԍ蔎:%r3g[[ -3 \Y/T C]JcˮPҶ|bдK]zTJ7CD7xVoG*:P7f FB8P {%]cenZ[JGT̀ɓ,Num3tU힠! Sgƙf\ QW* sCLtTTX:CgRΊ$h_/WSdOW<%HM"_I!1LO6m4W%4*y%6D9RS\\g΁  砒"tkaU2 r'@)2`I-5M#b:ϝ+4%1ٝyrBz!=&3D]E>0969g`ppA!DBBNc Q;OV*^-8! SI@szH^Jbq"|85(y<,x;[TB5>Mj}3_i@w'пx:mf!GkO^烮SV/9;|iv˷5I=ߕX%EqDC ;K;Un$论{$f'lvIC^SD)BCssր(߼*>987k{R *lmJ+cUm z0(pvRS ~`6T ?! Sa -UQTp1_?="o3V)R%TgqvEĻ6. ̳,D1L[9?T}IXAb=h5@_-kCiZMW;k{=`>pl͓Fj:xqut{<,TIL`Lv GdCvSW;B }`J+6 (̥)@X dG_꥟5vu !mZNA!/apnL”Ξ*YU֗J:ˆѻ=IO\WUHޜx}^4K#! Sm#QutnP TYll9i[,=u9~O4tdkHl% 6SV%)fX+\ÊPS :[t%4$P_RwBw%}šM] ib8b3eiȀBE7*ֺOXI8V0T猪f0UuD0Hz)`[&@?-GȪ5 h3X(s,_y̸.qiNdT8t|Rq}(wºe! S4 .g"̀`(P" |Ap1v>|~`m{"0F#C5tOXn t$9w'F}eae`)I`$K,V"xz@`|[gFۻamǖbZqF 80;1wwv wbAix۫#g ! Se$ȤoM(XPilpp 93=9 mYn, ..UFNu#`@*L5z:JAcBPN#3}Yy9Յ fĵJ,eznN3 =ѳjZB9~km#wx[s 2Ji~bo4 6Bct1ZvH]>1E Se/z3[q!(YHlA'yliX32 < xBQK--6? 46 2i0J#xWz6 \cxk_Ê!?NB_+X0O7ed1# Čw-ܐQɗﻐG/'e 9"v{_ FI/ԣneiO7 9>r0'`"A'`0 x)Ah[F"@Z#62ig Q#x5X~A| f6wi݅`3bE=j5V+S*h;cG+{<@qLz9Dxdx@WҺG;ܗ2o|ju+4F S%7B8b_mA'LaAq" =fTehe auEY01iq DD"H#cDt~gLwۅ!b|^_v$`F6;1֕_mA 'oֳ2#8`Fe2/[Pv,C#'9'3~ dre #"HL;a1_ ʤ~n0G _mA'@$%L M9P6E@ L ) ؘ_qI>FMwb$@={}pB% A'5{e’ .\Fd 7+G,%"e x(Qyr̥4<l~X1)h TВKBV Z0K hƈ)J?gR7:@*@zİD`@%.A'U~#!e[#l낡%X1y`yDЙK˻W,6HhG> <x(QN䄏ukɻ{r9:1^o{j)_HApGvi%}> 4ՠ'ԂxfQr2b' r(Wc E <9 z-%D‡ }1>NuGw!NV/' |O&P73l&aLqɚ;o$L&Fͩ4{8LdJ: nY݀e9gr5$ xݭqTN\M řAjKKLy:jr9Hz' ѯE OΠO+w2y%%@MaO"C/`668t<'r]p6A'@` BAo   aMb"ȌxH D?"w!Mk/$`f?6IWp]6"1>haXL? `&?ς LńXrtX 7e 0A'P.c ބPP-F^`s ipfAب0%Ɂ±3 $O|fA9@d{u_f ?5\U3ӹN"`=2%V܅אr 7g(0,l m,rud Q%0Kp&36/p/GCЈ0Q{!ʧ4P+h-n,D PО,kZc4R |8vIE.;B!xMllR?(p2(dT` ADDy(@-٢  Q>"|М>%ـ !uo0V\$*{m!^f oЦm<%fv0G"˪0Q{ F̪Lh)O 0Ћ悛@<<=(u0~ v! O"O?????G}?????|O????r-8 <<&[Va!xpXN_@, ý_@,xG/,@ Cj6r f(ǽUW~ҵĕyY%Gb5|<*  R}T,ƽZ[Z f5z%Xy@,;&9z%X /Z2`! SSraA2B^#;PLZ,U}Y~;N@P$jM/e.Ԕ6**jlBǚ)y5*uO=z&bj N ]>[=O\+93w,X;R-ol :qѢϿ;)Ni!0\:p]qx@&)~1Bߙ3i~+! SņPʺݎJAl# Pm3%PBPF3( vgMV]2g:&'jȊzw[{'ARŴ3a00n^-l-O]@C-=s__w{)5 }DUMvKǝJh (G\Ĵ5X՛RҰ/v;`B(n>V w8:_as/ ˆXެb;u(C!R=?%Kд %O `WiHXݢWz\'/go+Jլr0 Ut|({! SJ0Q )Cc P2IUA,X.5b61Na3cWS-EUeǔs/9|)Ńykeke-n%a!ٺ+Bk;˲5#][gV`SHm:;:-4BaM٪ÞV`o/UTB.e*Z,% g1`[DO603cxݔB{(0ؑ.+PBd.R5h7[\8z ~0)|A>*C[p=h١q餠B|8IMg^Ж$ǡk![kp)x @ dW:}Tqߥ7?P{6`@EOTDT+Ӡ]݆!8`Z>f O㫔 VC6\/h)5L(E`Y1j*SQ(%++ ! S}U ϡgf'D7`At+MW;#To_* оm = D#EOЄ4N0 ĉ e ~03SS9gT[ő Aal1p\Dw8צnh;͢%/1'nz"wva0 @,!k㮋wK߫Zʹ )AapPqD!00P! S̈́Ja #* p9 TS ~]cNtS51΢PSɎ!ϕ >o ЦqBNJ\Vϝ"`fn0ﲔ=:[:ijK29j_|~ T! FWD49&/KgYzؽSaO-GǒJem ҝN0"|vxh\! S}a  S<`ds~`RNd-'('WZv`,JB"3&6µ0jJk h:T/_WƷG_>"^h|;q\-5 﫶,o*TxPNG{Qjsy.lsopGH K$T@m]R_%$,w(~ƾC89^!IfB7RR1t!mFhNVBMq5lSZҞ|ci_tLΘWuG! S>6 Rt k `3s;&.RkxW h;X "M@_dn`8K躡;wSeHlV=`sh"04w3K. CxĴu>ߪ`h^OBrXW!F7/;8XofP<o,? ;Ф-JAb#:yi;21 *BV4{P7'U4L2KVK*F{/΍auu;WBjg`^~/]! SLУ(%-E%Y(Y/Q!l )'w>CLpK fC3:mMk-.~=oaІ0 ѱS u*QVa\VDˊ2,CR"|~E#]d??Jcfbg񌯫<귴 s<0t'eey ;,+` GMFgLnL!2^[z k}p'Kd`Oj/|8V0luNdCQ/Qվ4&A! S`"@PEE V'lKYjȷ,։F&VBT='r.ORb]OSI=3(ݞZ "! S`RlU gK\* Fۆu̡EE{ΥR4/keӵ5%k ?bL,s12xqJV@Rd+ng{D嬸LLv3jk nծX#K zHʬK GVO@+3nO657w17-X( g =Y8gT勨.à1ԫO~ ʺnkی'H,3rD9)ѥs%~v<хF<ʬEލT9CD/T`_u̼'S>! S%!(UkUyfW}`{^ey֣Xb,Kf-V aܺ3KD1&; 0cOD(Az40j.bo*Iw1U@OHd"jVwp@+lNaJ֓fSA**9y˿T,d@KjШ ]Y87 hs՜)ӣ\.ywFZòqbaH:GWC! S]b& I`fo$`Rʂ=ݿ:5.,,[h}"-9}(_2X<"zkL1(r3f ebsY̠w oE  ņf"EyZqEJ,%p5B5QwlBrULh 5EM HVbVeܳGj&1JKN8fˠ ) vLH"^t%-4MdMnߎɣ\\r3!7A! Sm $Rgz9ӝ`&D֧9;v-E I0]'ogI~BzRYsuF.Z34n,![۰s/PLq jmj 8-lڿҀyeIRH? (Rr k'UqD4T"kTce86-hX&Mʂ9u&e=?8Pr¦BJpT!DDM%! S]0فgӔ n'24NV2vщGҨ5 W4V&69w6H_Y!LK7W;Zҍe+W93M&,wtm"uLȄB)y;Wm"Bz8EMd\=c\LVqM(+A?CeI(+Hl]:16j# ./1"@ u@ut+P N~YA WR! Sm H jl`BbWh.ϋ 7uUyWClîbr \O{?w/kaSXA5t!o,OcS]e1JT[_WRlԞ{vD4Vdj-Q۪7u,2z 3H(!3AμT_>b9@Y ҺZLDI:^u.XqDQQZT%AK8&Z@l rឤ'u1߻%RK! SUJf(l`JJ)䉦!&g3I+~{xǾ3pZ82EvUQ-Q0^D: @- :HgJWĽ#8e Viڕ 4/l<0Smtg7?dz@2^##k4Al\@,iv,Ч j=k5"HƿڵFn]D{gkMA(H1 a%>L3#eFI1hяeL! S= X|(" X|2#`ClݍӷZY҇SKdi9eVړ x%'Yb8ccn(r'c 7sl|W 93 BN0l*^]N J9';k(c[]  KXX Y9,͌qxnKfyQ^_&2F:>E)>u) |TS( ~?CJ_v?X LHDdT8_e+{ W=eJm@~kR~e4]0f]DS~y7/P'ޏFz~x: }w+Vo#ͻ~Lc)}RcMwBԦߟ$~[_\Eo7 ޷x#V_A`'S(Y@@#\S\< rx"!p>S> ̇+O_qb;°koO1(?G2ܐ&IһbߠGm._)CcSA'W-(AnX@P))j#`낑"x;ps@{+ྂXĸ4lV<~@.>}~gZ`=gLXvKy{]w O';?8< " KNi$cݣ(>Kß`9`A'FbQ3 `C0zB`4ØBeKI$y!^"5a`l@W8{Hp<Ж23c)#^)DXqLQy'7cN>g4`c訾N c. #4`j`ǹ" _P޻$|u|եeA'|53xLB=\´y4lF\3%:-lzn?AqP0ܱC5 dgSS4@9pfAJX4XYoAqq /J"$!g%#yG%#,ߝLU 7׈0JٮD6F1Gʪb@A'?r !ygcEscf%q:6X۔[;-u@fZ5*-r_͸>xw|l^*~#tWs#.>~29;,pfK>}J0wY'5j_޶r`J3!+Ȣ@f@A'辊>f'g}A+[!\.D1L?;o5x[tPɯ)~zׂ ؈z`̘:|lV%yk?|lmcz1ia7G/h;L<>xO ."uH ̨t?ǢssO>yp| _=cn%U?ݷ},}hlI1RQ@3|A`'MB&?y S.lK71)yKC_]-HɐJPkoBK=@pJ1:uok\{ a;7L ۊ-۲@fD\t zwls9G<7?#b~_+xO;>|SL iȸ3OA'tφK  &#H@%Qy'DDiT\, L$H^#sJ5rC 3b5 l fWaSMX^D7"LwwC;C1O'ЉɈG_RpEjC|2I!mM?j`;ЦKki2 ;:Bfo^ )0+A'ɀ\=q,}"-2O\+Ϻas~GS77Û6$lM0[v=]d ;76&;=T1YXf+ZMPGڟ'k2zLX1gm;OMM߻r0YP3"`Nol!RsOU܇Qi>K6 w&@@Έ |PMvP#(ez1vph*b%hùG#&Dx<x$LY5:~-9|^:L\s74|:I`iiAc!Bkhlq|Gfzd>}?%5/: - y*{Z̳ws4  ͽ1\lfƠyf8)Wc\ަu?ufc\  ÐBxB7a=? @t't#v#e t*Q|q3>5v=uyw ">S#\M f<-e>b-n3btbVW;ӗTd0kE>0<~Y 3rsr.7Ӧ YVNt_^6L.aZj0 ^hc;j ƠKc_>Lݧ4xd5XYy;ͤb\+q<^lQ<ݗ:@>NA ?\(`:Tux:! Sy PQ0QvФˇ3ܐĿũq;z_8F/ћSMZEk (Põ%:T!ϑpevFnE/-4VT0PB_%ͩ2B6_m:3 ;ipsN!*S%`"Tm@-5c@Yw82s|(h‚&9%,ǼF ( &dT/J-t<1ܦKE3i )G/ay7~~[t BGZJ^m( %)^~%e/3* 8ݞX{}1:ZYs&9n|XD!~Ɍe?1ӫߒ`@b@>@5c@YsW)Ko'$JE>nWzFpCGM )LY"oBsf8!jU&AaW[ . ֻ5A$1qG>THM 6 2'}X5~,,&w EL?wE> '6id4ϻJzV^~)O:LJ+zp ^9;vs-0aJ )_,Ӌ^H4&5Pϑv< W3k4ܥgs||L !TAa!@Jz6"TUU H2dB[A%9㊀0g6®.}\<%|hDsliaH/ڙ/W A` _tIubɭ&<˳ԋJI~D$Yc]UW`EFRZ7$dAu0O{SpR+ھ˟xtPW]8RSk|;}Ϟ}C!T$ȁ suRP sA1f=]m0Z|\nVlAr$Lr*Qm f+Zp :XVSGP.wh]m5PQGSS*!_XƗ ŅZh]e>!T: #2a\U$v"²jKbʮeC9@!Q1hYI2m^6rv+8Q/ f@931lVU5Ro24SJI%YL҅w==i8Av?@\S}Kei$A%!TAQUSMkJ0@(uG^s5>%h͜5Y9 3h+ŊRX4.&Qǥ=9z2d[^eF@ӏ|$ _}H&KQ'rL*cfX9$E\CP.E0TtL͑n}o]빚Z_~l@* %` QC@(3e#Ԙʹ4.j@ ZS\aQNM xI7VV36yXBo&0@z./b6ms}!Sd KwpVZ. ecq =v]H =,^lU9U]@% I𤩓&Pu&tP%WP>#I\$?#ע1?`bI4xFv +tgPo;_P-Ȝ'ee2p+HYr0'43љ!6yjPl *"(3xAx,T4\j: Pȏ Mi]އ`B0ʞ*=8% \upQ'$Ts \"n! S$E Xj(RhP]T HW`1]A$p$_N?u[4En@B;<E` m$2uND/btfwpiCME_tvp2CVgU s%OA1 +@:7ݔ zYLEIT0,K<3ʱ|^u>,M Dvα2r{jbM .z%ºsV&!:jI (J (FEu%@6YBL! SEPڡ`V eJ*/Cd3ZMqvo{uR@=}WB߾ʭP\d`5)ڿ] ;5&0#C,ЩnEbb)qby$WeV,5Pe\dYV4;Px.jyngi61;-Gns{܉+ 轩ew&26+]-~ e@LJa7K@*&Q6h.IÑ2rB+eQ.*^ղZ1`]H "H !! Sa **0 D2 dpP# Ykb1WmeZP jVO/{ʼnݧ /׿Nₛ#ು׼"V#+ &5[ RfespYD,S"=;|*'Z!i g *%n5"iJl[f . G;`G! J !ed2A~޳/h%jovzu/kd5kMG:LF$"Autt}1QnYeNXJkd',JuLn;2Tm5/f@/#> ]=(xZ0X¾, Ⱥ\m f!ղrF'LNL!krӴ쐬iG8̪]@G`iw#JbuJ ?kģ[q~;?5s"kc$(^+ ?( D:NcJL$]*WQTq`ګ5p{78UFo*]ah.! S]$0RňPkdk. T ⮓ЁEh\~  `SeN8Vuoຖ4: ^†&jh-kJ0U!NNZM̳H 3! ۛ)bdk=^6}bܸSL]g)8Jد3d l735J+)E lYcu %%zQ|Xp%S{kK/3G6d! S*QVPX,u 慧\߻@8xr#B,y),\o%21x_x޲0^9/ 8h>Jj5+;7 ¢h=brݕN2ʦ9xRaz0-"ltX|ۃ2y3OH;8l1/G9B|ϛ!Ĵn>t'+`+;! SD.1@l@]'>cOchTਂIq72?7ND$I E&P8cD$fIr6qWIOYP/C`r?sWEmP}%~ze9<&4u}a]_(o$ðv0,WP=*~ƓQ * v) xc1 bDNi`a#A''|O>'|O>'|O>';Z@&x) I` 8?¬=hNSp<K`>SṚٗiUVѤ,Fb~a m3轗G4!N0}7/<Qk-?1D9Lav xmxR:* `lсPa`!0 #@=C02`T17)ðT x$QWʀe#bJXRp).P??~l SxP<(E;L!,˫vW怇 Ol^M4 DEQ92#^HPОK@ w(SK+Mm50ouU3+LtsD??Y'[ࠣ@Qpjd6 ș%{5xLbs 6&)X(N}<̓6 } '>+,})FLƾ>Dy 4t٨7EX D̦8?Ϡ[%x3j:{<<(#PaGl{[ߣLߛ˄j'w'/T^A1u2}~0#o(}癌.G(60ީ>+oHKCCH>e  .pu0)p&A@'o(m>ȯ` 鏀F Qrh~!g\_֙ޢ M_i.)"FjM2v mu1Ra:Nqm`; g ?A?CS>f60sC:<Ɵ3C /gdM1 T%ny@3/4}q` hA`'oAO?!ꬱ9|5#-2=nF#prz4f^ 92`Ŧ0 R&?sFn1<0A'2@! Vq2!)1jMg4s_DKb6S%S86 &k7Ǔ>3d0da3b %:ԜWAc28~ y0B+ kc3QdGip|a3~_ R` hA'i$Rְ?\qzn5 g},QXH(1l}3d,a0ab Hi ƊÏ&?x>e{:ytIF]f1}e!r1LHldAQƩ眘A'Qi0GXVioX낁%y {S6 #nNx'͸݁Q y͏2!J F(ؖn yyLfqI@ uyE?R,ɒ͈,,DLmA'$:]x *@e;3XF4'^0#7$00d DWnk xND|+/y%?G~ ;_Ga G̈4x &&r` hA 'Y$`  e"ah/ݐ%5{ AÍᴂ+>&!'?s&b>f@W漇'&Bbbɀ-! SM$ KWQ` (X@!5_G/=M=(L{yb8xݻg8a8A) `!si!T`H͔$ZG= ELWBS0M \Yyn=8rLvАVrJ)JlC^H@eG -1'43dP8p/ ,+S+YBݝ>8<4T*KԔgUmYӳlXhؼβ ]y] |1~>! S`ZẀ*T,ARHQߥxw$\ۉ<,!$[-! =3L \k])fa@=R~a2#?X@}&)?Z~ &ZKR`V/izcWˬpB++ٙoj* 0W[e*e-yoxBAe hVtdvIMp:38RUEbQJ0ٹ-*[n:Jsu:! SbZZXUVZJH 8\J6L\RhCH)̉D+#F`gML"P-Xt8M]%ďkV7 iaEztMļt;֭|I)Coڀ4]KXhcs6a͜qTgK\n]5LC38vqf>r"0 $Y+ Ԗw5'd „!:]x ܵjBPEXik?3 531X3=_/^AB61*[=R9@5~E,ۨTR5*?,%j5z9Cq@?cuIhE5BE\(-:'V4%$W61>ho~gQ<ӻ CqFX _+>{YxO"&`$[) JEgp heM S/b(i(_̻Gt! SC$R`"Rʖ3n+ sAޱL?3C{i;3 S`yD=Tڊ9TNd E6Hv.e 6՚*Fzm ~(4#.mBWIuv9v&A Xk|f4WhJbNO\miýw0@l l 8.s^S'{ʉXm#+B_jRH5J# t)UF÷zg,W)/2kA/! SП@@-ZFl V k:dʛ5e :oj㩯Dޛc[%i78N e%ңt(un߳7GrΨ̯h*ZZ:Jy?spL.T%X-.& s⬉Jȗ`hRΞ5).JsCV΅Ww " z^w'<dk*1HR|7=j/p`%){lo!HxKXOdmĕ`CI`A! SͅGIYQEP;zV8m`jjJkzlITP8}(e4]561raS"%zWû}?e^YTs~~=_Uڢ΁c2$5` {~:DU]#ZPI(wA _lX /iUuDIVPH (VEw)PDq! S>fenAHU$z[y V|)E-"<#Y Wd|CP񚑋Y˖[ςӛ(($p~=PU?M;O|s>p{b?>ZD8*Ɗ~W%dÒ.m=2Rwc,,Tl*%Øv P`Y^%/ܥDDeLN9kʦG=/0[j"ޝD'\+*b}(Y&J5tk~ޓ9! S>eLT.2-\nG*2j)khV|ٚO*L%@}7g*G}2wpvZ@ )/Q14ur#oby ߶?yu9[s6fmӦKuWm&59n8:-I.Oz> tո'`;-q:6r@@2`,!6(,_jAs5+S+A ˦HB .LZ#dyMT.e'9Rڣ`*&-{e0! SbFVJJJ$sKy9a)Mma5ġ!;2}-Δ8 s"IRs1jCQ׍$!fjTR~PnЪQ ߧ~LT~L<֋8@(UH9KmH 8S1ANIVV2Lb$^` 4X(6 ,Fl2zުƐǜ-rs/4m Y ΝԸD C )qWNHaR+U zCPP;%HpߝkAJ0! SP@XXK8d x*-euutHB8>Z b1se܀ifT>%x3%ʫ5Xj\,aî1xeiPG+Հw(`uSW>$@_}QbWs@jaOTg( Y^KoΉ/h@lQٴ@z]X}tAw_2}|*ie:IfcC3X#JZ6OXH\!_D+o w}/3J0%Ycx׽9傜;BI3! S}"QNnTMT6PMI6Qn`e_,WR6b+Aj)Ž>ȸ҃~5h5Rq9BD n]g:֚,͚2.X24BW"#oLYR8Y'*-efy5ݼ3 M@@;$FJ1!k[$x]&ηPh"&]0mR](iYNIvfGOs! S5P¨S `^P9, ('N `xKV"@>8\+}=UNY22DZdM4 _fGu lT9wKTyb2/6)_gv{߿yfjĠ}V, (j *^`@1->IjLU޼KD_{dJen! Sm( [x` %G[A{3^2z;;t"nZFZĀI'aڬ莴Xa^YPV5s8lV f5AP50bBl۟_Hi&8`"hpGQ6`́|OX4&9IFؚh˞') pO?űH*Fʶo(Bumg\P/ &=I=N.R#Fߤg! SE,N䡎f ]ds^Rv~>lgb4"`h5 *Dtd_ekm:^OA@'$IFQEȍ-' 8@PMpyC͖kf!@sB\!<ai%0Sv@ L(py娈MÇ`2@,FIڟl& cuCfU[Osd\<<%ݙT!l9?z6LdTE= S -M+$x?0?Q6'B{||%L8+󕊤7`y15| ]w6_x  B7~`s!/&Lmh:_JI…båFOx hpAxD+SG/??G??y????>&>?????~ '3@ǀ 3_&KPګO7јT;ݠ6 Q3Co T",t~`@N&x̞S2 f Z{\_PIOf[@,3sK0J^'_y'B,P* +`W1OPKW%XK0,ƿK_ &A`'$xX- Y0Gh0"ˍ50ezGI#gtL~ X;_|!@Q KX  뀳>RjS>=-EĞv.p6ȃނUy8vOw{뒫8>L?A?\\%?K@a&QVw =I6̎鏇dd2f]jbB6&$wo|zTi׿`?fٮI+u\Oea>l|F-՜-| ԭϮ7` ]-7;vtV}73pT->Lm eE [0 l=v-,'{!f" ~w3HnLp3r H"&:2CȂڐ>/C`V $M%8}WgC17#(XbXz IG@`T@ӗЧ_oK2{?.Ю Lr4C~K"pVi4&S@=dQLB~y պkcS9`| *L}l0߄Xo/"^IU_beB!}]~LEKTq_?yy僗th @E\(#1"{0~aJV# Oym Jʤ]k F۰xOy$~ >:+'(gH9@^c<6m.0pv^~}Ro}WtE"αq);VADSKH(v-뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸u]u]u]u]u]u]u]u]u]uO]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u]u]u\Sי뮺뮺뮺뮺뮺뮺뮺!_v@<(q.  Y:'j\ ?1h>T5+/ `LC 3 Za L"fL &5 @ę(@z @0"C) Ą &eAv0w///Ju"(I0uygBôcbv8-1T AC>>ߝ߶ OO5ĭ LO}B:YBE]n3 ⳳ_! !0&yxl7,OM\:4lL#5S/9Z o0 D@?AĆ.! Grԣv0^W5LhW4v^3 Hg9z83# v+ӑ{ɆA&xK怅~ʄLLc?x,9ĭ̑(̃_?3[zI`"=I;ĸzT> `&-ɧ\a@(ﵜj%NuAԢg@L&A oM1\(v E &vF/x`0i K L_?:=U&/L;B%*bv$Q hr:2OPH)3X ?_o+:)4"}D V6B ИŨLyDŽxLh\,7T Մ%x%h2btI`Xpcz\髻PFb5R¬35(Bib4R=F`Ս1Qɶ վ^-y@A9-{?v Ffb Urqÿ|*  x Wvh` a@&Qxf *A $KKO*/Btox 3t5v YË2nf.L%:B3-߿y>? Zjcw.@ej_i& A/{AiQ E_I>H:Ɨ"`3Ohf=OkiF ^XxsSfZF+ufl L4@QP42Od#ů+{-$&=]g)rԳNZX?}~?10)ͦ hW T#ؾ \R`dB=е_ɦxši!4`@84 peqBU1# fz*$x;Wb\3 Z 钁rFb)‚Z:[*[6k'?@Hn-(~ YQP^QzTt@yn݀R^v@~N\:?cE|I {p/T |VzM8^; <t!&1X~FFƻ'`&Ӎ$4H@P<YU\`DD-ف~6w L:Wq辀iԳ+o.(@R%r/S8+I0}*eBˠ6#0AL 1cTV+]!6m2`$>Z 0V2Lm0Dd? # vMܔb."9D#ӭ#(#;" ^_t֡`:ЇE'~H*%Q@ofJoT\o+Ixmਸ਼P( @fq0ky*=viﷸrKY"B?,L{+RI!#ZAQ  SH@}@DZt:an;|. 5@﵂@Dic578 8Vh׺U58 $00``FhEH>>F8 s./«Ԅ# Eb\e an:8 p/@j@H\$!X 4 R4PQJO!x t>&: qrPaukoIm_q/]A4 oit 0lgb F9:Ztz:psCk.jp\>CjmaA mǝ}o, S!@?FDu`ˁ@4"KK,QcP-l1#0ոm3sFRYTj6'VTʗF+ @ -S١<Ż`PPZD[ ,[&Ύh HPmC=~ҷh@^,.UmEs[dQ,4Gshю T`^{t8[`ud0{Ӂ lkftaٯR(Iar,DwƊׂ c-Sh~B28AKȼ IPL <2 ЈzgH@aM۶ZA)6WZX8~sT awɀ4 "Q&@\v8/ɍՒͧ8$Vp|B6^p N뮺lXYVtJ3\?T$Q[ @@ "7Gj_~}%<:$V1~b !b|C-TUm_>BT9#É; MTݧAujC {@gC% C =Lc.~r#b(*뮺nkHa]u]K4u.b>34eATVИSUbGTUa\)\}5M?A>APިotJBfdGh}9E9\ a6g@w_ %A8k ֿwC0#%_ @a )Wb(̐yb|>i P!?i6];Y_/('p >a&xk뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸^A ''a戈Y J&2M$ S>HoM*FTYe-XqX yS!+:-rly#{XE{ܥs S+zRwq`e7?@C"Ys%4Q|~|Vgęqw~{  ^Hw뉇о88L8 1S0pbe{"7?/;6WpH[7qX&~Hkm]@#a~#A@'DCuID˘%PFAkSF}>ָS}a>~_q 3bĪ ? c(fC@ %i9dv`{韓Zϓ=ֱPKʀ”y\2^C7cM}@ggv S oA`'T'59| e|Gy~܄HE}Btx{$lh rp.:O|roqɃN|t@lֈw3@+$b@.ak @i*7J@0`9qvybvȬv}u7-paylcé笐!$>Ԩ|OSs%Qy4 ~A+ (`&J{ƓHlq 8LI`E(\47ьBgɂ{?pFn 18c"> 8 =ڽ`v܉(d}pk;԰S*֌'UZ=Wkb" +NWwȲZxlj 4KT1Qd?! SK @@GPHj<Y}=HCS"XPLrkƲ:dR`IbDa9bϪ%)K>L,8SU V5̄L}q y)IJѣ#$L.gAB)10,"RC?s?٥)^8/IִXr'[Dyb6Hl>*3g{`0fņPm'hg53:#lx7ka1baBBA>>x/"BG7%(vxʹg}{30>f3CT7>x\ p'~7 tA.\|czwԚƝv?-Dg!L7:ZQX,ӎ\;r^"`Hϋ&LKmIJCCay32a^i9?@},}q?-+d>6!I?`c-ws.y(qHߙl ؏I5~} l*IX.\w,4NJ=aV";J\y5|`5rGӳ%ʵNI)>qV.Tzc ˨ʨ8[ٺ:UYAE1PRF.xp۸Gx!LmMUlf(Dg 10,ˢFx *y"34(iL~s H{3Nn@KNrSI0(GN="4tL-1DJs(*LcMRCDž ٳ.Nպ="nNBNY4KSPs|rg¶)gc_lsHYsk8z;SjP56op2+=z.x~3Dg,Ј\,mZdKr[5(!T|:a ĦJl ! I8fTYOgyIt,K%ɽ5@mBjoc1ǤRi|uyXBTjrxӔ]иn-ԢQqVбu+(h5Jp&BA#SMUan e@tw79ep| R+"1l3zYW++T'1i)Gғ%Т Y_[/Q8 $@  !TuR  H2 j{ ,êv#l5&NbJx*$eT>*K֪9䙞EJcsKL+\ qq5QHʏt$<†&[bXcڷ-~Œ1_l o]Rꎨϧ:M* HKQZ'H*ŅF!װ^oGjh ܤ-F&$y(lb]X5 p:D4!A)!T=bPH1BB1UDJ-IOک2=3&j!nJ_k.;=jÌRMfhFMڡXSB7Alށj*1^6?;0!+nsw q+KUfYFrz`Blm(K2sݶ mj& ih5F|+*ŸR*oPGq2PqGZeP=!T "vYyhJBР(M񇚱 r,A'[(ELJMiǺJS$!}uՉ,F1*=극YN6ge'Hb1:Pf BH[fJ$5 #Ok~ "qp>u.m-M`$h4\gC1'+ca6/H⻷Qd]~WCqS*8{3p@] dl:fxu!S`(& JoI%Tk(@PZͺrјYn*Du-&#jKZM&ɗEI5'*}ʸE.=ZGmG®gt qw:] ]Ѵ5JVNta o'T~F.h(Wr[X}nNi~! YfsћS*O|{HԍI ym(VE&O wz bP)1SzO*=ssn J=sݬ5{bltk3". Ѥx!SH 殝ff]K\6]=g'R\$.9mʮcr"`:rZދ}(,Kke[t=d;lǜ.9'Ɋ%Ա( y K< &[Fќ,*+oV"Ml_n! V݉)OM6{{%CzJzyLy b 53b7oòZbɔJ!,h)$00;vwdR<49.۝TWw@01_ʌ!Ra R! SlWcZ&+T-qwj>9Bt\I9?CQgjG\y>~PK%GkӔ1N L7FE++FE%s -8_l3;3Td[@))*rU,cHCVRA0[BˌIjyX9icLJ7A0_yȓ׍C]-uf,Qk"4c1RwT <;E`B [)~ zR+L8_c%Z)1(" p! S.d%DboL$J-L6(·Q?j|^1 5BFh!;> UlUO$Ёb4 ʬE& nEB eBFZL+NlzuP)DH t3K s( 1=քҧW07kK)ZCl7#uކֿV? r!@@JI,p@:D) NEvUV@S)yS˲iȏYUO\2* hAsgtDeyNVkr:l 0@qRFl^@1Ji=ZX<dz;HT9p! S6A! e-aEނMVST\bGd5m1Ԧ{t5Y_ڊ`4y/:ۍuDғMEQ8=nv~[B[oۂ_hc3#3[#jUm?zPPjdZsxPI% BpXͦ¼0dwIM1#V]zGw" ',$A$@l`+Oz <2!(JE kO:5*@* _9Պ8ȥi! S}b\* ml,a@7Ql$E"^ K=O\+Z Uݠ o`ruZֹ@ e3(b6 ӥ#xJjq- 4gdVU ñ.̂|Z303Z7Zv_ZzQi ۷FbG! SQY&!݀@42:>l~3fj2%T ,|||4Lht|>`wdIF`zɸ, `m>w pWX YDCD@úO$q ?o}}0A;zŸt/&@2sSavgw'y1>Rgt A@'ɀk~aGK脴\h#@6#xqqqqqqq4#`m&7ؠ_betAs0?  90. w@}; f[,h.A@`Y Gw^Fϛǰ 0$BS &RBC|cՌ- dr6OMUdku.8o]X0ܙpaB!q4H+{&fR W`,8+.*ýuyXH ժb#S s -au#fF"E8f@OM+gB*\p0o>-{J;e-pH.Ah3 !`IЭ Vk`ݬ^|;''ܾ#\|DIy ҙoĪ8Bk@4ɀKHPP.akv2Oxqo#x7#x71K0ࠣ@q SX6XMR#FjZ£>=I¥t{C\=#xH0ƈFxP |Qh!D,oqۜv58ESČ>6H#x?>cFy1*{7+*䱇65_@g nA`''|O>'|O>'|O>';ҟ'L@L V`G lH\CR\)P`8x+` 0 [R v)}P p!aN4r ;p! $7 &FQ{NT3w𛗞%~΄H~1g8 V'~P(Be 47=룀| p^P'6VA"xo@`.H UT\1uhZZawz ??~( ()8p*\s+fS]e1g怇aL*GR`? R@113 B x|J?!A0"gC03ô@3{ 5:J@o+ c6$րA'LaAXiFQ^N+fS]eL-i\)KI/!/#=QdDܗt_Q#x_x ؁j̑wzL=3?6>iD/ 4Ne}+6w F4y h A ϶:K6 Ix ԌffDm)ށAA'97(vW\R !_:JB\V,K$<0qÁ|N R[ !R>u5gP+8GMЂMU}r917BLVV5dPsȌh~! Kr>kL)>p 0b3RmmQT&$ U~KI-$4笯^ɃB(|=-/>j<幖5UU1[/QLyUqZޚf>jv2_5uWܜn: "1G!yHI%i }5www6j: dq3_3u%i#I#w%I$_2^E}*ջlC#@ۻwww5OD8וgUilӳg*"f{fZifƼE 7 jʼFK8SI-$&QS10x*mf,?Zfe|aq I?_nS6J=ɽf1c60P *s{v HԸqGE?N ; ؈ u3byZ=XnA3 nIKc ?KłayC O !L6zaP`s28uGrA7P2E' A@'B% TyޢHml I-e1=ʔ@8*͓ 3Gx [z0a2߀͉/qr ԂX| W%}~ O9`D7'$ѵ7ɀkߠ4wՍ_?^#̸%9lf@沟3A`'-=BYhL\5^r* H^dC2 ƍk 3Keee p_!#t:w@_$\ꘂG>E> )}~ "@5bdo?Ҁγ@ E730! Sk @$ DDXP ac}d?.O?aP? ~8^Lj~{ah|~:K>OS#omBO43vZN`|o0>{(x}olGHO @?1Lև`z0<?ϣME:vħ#6O! S-#I(`c36ހ[  - 9⛑%oI^mw(ebz":#WHOT`S4"[XGG[0g c#T~RQ>\CI&p!̩%$:qԕNYALk4_40 Cʬǀ[+a<8ʹ]6"SnYrp3j*7yU,"_2(Ӣ4bXzM *c`Uқmz*57*FtY7z$UEPRe{ePKm _:캖]bߺ|ڣw(Z8Lz-@ sopuRߣ,D|>U S4)RE J4'T_EM(æ Ϡ 竹S@qC@>n)! erw~uX?l~8\`?~,]?v8gs\sI߈ZqjChP:'/_FD`+\ M(hc0P!t@ n Kg5`)lkFxCJ1KVՃq p੿ӼM9YŦЃÔ)2r`t;! S>fֲ5EĮwɫ9("^s#e<NoQnS/$k|> |ʂ'P*DB}WV_Mp-%_%!=iA%K(.;S9NPފЍwŴ+\4suZb%B/V#7 _8Шµi+6('`(  *w'MiU9Ȁ@~{+߭K'&@MN6()I, J9K2m?b O.n^{! Sͅ>v }"ܙ,E UrֺCJ2N _Mxd: [&\#QDYqJAUvT* 薷#) -%ԙvfuC pL "o+%HtbBkJw&NZ[lVEle&stjy]U ~]1uo6J S@YB;^UgGl ӀꅄJ0[HZM<א҆%{8 q*#[.pT"DqJȂv%;D@A d/T2(T` EBԱ4Cq*IHR aglFtRF! S}$E0P2!|wp '/IYo?MӇ /; Q DA; U'0X?WQ?Ko.0$8=/֨o0 = #;O0w.=me < M{'v?f)wZN/FS}ѻna1 B I#~d,Ze`D-%"yPy! S>f ށ4K«pd/!g;o/ Ӱ? ;I!j~àSq} o$G~"]кUC4.Xe镣.xDzcH+/9@q|;sHAGu>Σ<28f-B+8Qg,kfeW(T>ws Ab;* 3T6:L;Bs!UUz(IRBUti! SQPU2̵L [,h'*V͢QZéU|D^~73#P#>ϑ]4Ae>٨FZ!"Mu2$wDT6ecΏjU ܚ{`Nk|])wDVbZO+RݢyO"5c֣ 4h*x-4#T.kjǟ1\C} mv̞o~9\qpڸm\K VB*~а# |U3٦a'+! S,T+`(YV18on\e\+ѷM'W5Ε)~Euԯ1t4gU80H˞INl|ۥnZ1ɳ :Q"LƗ'.EFv5ïC@Yɽ# 턆''v2lnImKB+GWvwoA؄qjəPj5Z1E )PFs/6Dc3M=|5qv3gwj#ID)TDBuxZ& F! S" I(jl b˃rCPw#{dӺDW\&R0^MLXyW_J_z(RjbҔtB7q u#<,VAN}C_;V>?ѻ$AS)# dt7o 0*O'LPV`@xYݼ "^#e}ਢT(J}ާ D r3*B:se(x[,F̮ -3'uXvrgkVՙ}5u=t*Oz! Su("L" =1[AXq%;մv6A/܅ fڔ&S  Wχh9[H0?M0hvz6(eWڥe0͉-ѽ^AsU V¯ͤ j ҽߟ;b+D>AcpP9gqnO eɴlL.8SIR v-HkCSXo$jqIE Aq$4I Â_m6ư6"eivZXt! SuHBV2@X0 ,hxMj6M@~Oypю#r n{h-L "P_X~7ˣXIJ<4 %Ҙ|a \69ݴdnbVB l6UOwBƺ:CfH5[ұ 4`o62-(-B P*1H"ƛ,8! S})!%rfzK\akIŰۦ\ל+݊yBl9 @!GG@+g9Nnz9]~IY(Df~dL(I\G 1)Aܻh72 xHNzIw 7Us %Xo(PW+Bl{˩x( $1`Y;.%~оO^~0PL >xPDc`#K.'ڬSJDеuR<! SU# L@, TrZ>S@% ^ɵb|,dzZMBfvBM +*ew>HSl1DGZ.8: 䡊%*`il䊚Y& н|W~Aj1H`Q\"ð1RGLU$!_frf39gw-VN `3lU Ȗh`u?jb:?WJgl?/* wM#@AP_Cۑ©D0XA'%X]U ZX޺C(uug/(`'5t Uph+?/ss[f~yd>_ h A#!r@0 0x@AG0@8@?ـ3hA|eϛBhlP4> û1-r(񙇿~5'A뫏hSob eϷ$z \,8s4H2d翛hE|Ve[' q X@ >HA;3pM\4)<8K9;6cBK|v`":?Iv>o %f`_V3U85jD ] GSj= &Rv|hOlxphx"YMCW>\d=b)P|xp=#U#u?????\@ xп~0>8H?APu?` `_P2 f5y& %XytိZ~_ד1?Y%< _3H4CVԪ>&6`o>xDR?d_ `pv1&`@f%ē@3 N:{03xLd20,I_ei≔pHO` aWdA'LJ*<*@ [$^"It3>b0^G\f!j%[r oY@: :3eka@8H)prT123c"Ȣe,~MC"C/HLc'3&4^ƉrČ|H)?Sy~ x  0e;I:?lt4\%{~u;:A6wq~^y] =}Q. >Hx1K@ĕ'&u&gM`,qz#+w ZIG`˥mFқ `h?x0}׫ɀҷ}1roRo!t?H|5Lf@A '}׆X'-<X4*@@ %􊇒-DQHo0|b0>#Hj ^2JB׼ `C= 3b p:<ԛտ0 M͊|"`yL&Pa0 kzUG;>U l~ShA@' G$6i%gW%f\ s50)}>>Ĺz@PQP&~ftOwfz]o3c1iܬ:_2@"dXRJ~Db O:< ] E ƍfkBKy_~&ogA`'Fư+K0~tYA%˦KB0%ߐfYR n7[[GShI$i$@C=ygENP eejplv cg@{I|)gjs@_ Bn]m{ȥPL#//:~ǜC&?2e8W~f "u4x@4A'5  FmrϜ2YAG$g^"@- zzd3(B- z]AG]@isZZOfG}ah[pQS7Ln}>OrpQb=wkVetm™nW*P ˀ<0V^*0܄( S+$S2 ݓAs@A'5:pJx\s^ (El@,.: :ך3d/E4,MeZifoGuu-8 ꙻ|/5rZc^Z"v8K䲜@|G=JqMucP!!k)b!L]aT$N`3c5) CCy^lWY2EEߍ!r^}z>!C|Pk,d>oBF? ÏDf')9*> ǀn֮I@^W.@3;/0Bɞ;nڀ͒*-W6nU^q;k$_Z?@|%fw'LnLһop4:~ҳ891%)"so2KR.g[6f+`E3ay'41CpCrlhyCOA'*(6SpA“mͦS%e/h^הq3^((((笰Zwm$ IL$ UB,lfuLH;BRgE1T*rP Ev%Iyz J~~#7)C/Z8ӀʈРJHQA^-A'ɫk<#y.uVBUҩz.OeVez>2\6#KE2@o ȫ;!4,5X++L&Z, 9 F{; >' Zk3t?&1d7?;ho\h & A 'p2xOx }Q}^ {3ЦLI4?x;E.B#7) l-+,}x بF%\>Ϯa(K'sx ACxVR3?0Sě8&@3{Q ^* ?:pC&CA:7! S=I@#T<`P, !5MS7u)DlZXiR:nhhA ؁iȵ2B<8uV]HƬ5ʟˇo Z~kEҼsFB3u 1&hͅ60(k<XWZ@*^?!&YњrEuҬI& 仕Kߎqj'ڝS>8ȳe[9y~Կ>Emꚅ׊1tvsMcm+hF<ɤAh| *VA`AQU# $֗]%tgx}ؐJiT|sB(r\aVD 0aH$PN>6F\y1K\Z|[Fy'*Ɏk;! SM%(!Z(Ay$a.q%ScjT@oU8Si8΃1Q&U ͈I IJQdUu5"%;[R(.*٨uo<γv|y2|.F7f|Vc616 `ء;|~<~-g/d! ~ewjķ: 8 {vZoJ7_kJmndڹvU>;! S; RFudRw__A[lM: V63l>CQ\oAq$`bC`;JO p@: W5lGUA ::f!  횕@^.B2v3~Vo}pS #(~.!L=@mS&;N@ e+kllX-Ks!Ebݥר! GuE=!'`l53hu)ck&AXD;r3}zƱƌ1 qS.*  .Ԉ,=Z2d` 9v,tQf]9*BD:zArEA轝ݝ`a>g{oj1'[?+pw$]gKx%qrokeK`PzKgR!LmHJ.fBj3 F4 GxBTTHҝi7(e &:O O8Y)5lB"CySu[h(ſ1Q4`[a=l M>KlNx8p 4uw1ag$`T9JYuqU)3o=WYUcfvޖ]UçTYiocٌkQ5Bũ[)jiƈ/wRbVB=C:!jTʂ"@ )^7Td7E]lv-哼OE=WmP-fhm۽BoR~RT,V+k]諾7I<eUDnAӦq?.W)ARP917$EJ\-yKjˠ!~>{b} '8oVp.YVplxԶH !TNA!JCJ!+., =&䄢ݒHt&MRRI@,BY%wlLsiR.9+ 36!DRh(&[Md vKjH\TiBJ܄7G3E>d FI(f-$B 8'CRDYy m-IcVS!*Z ,Iʔ޶@vaPvtut%'ˆj<_ KJVY<e٪6 '?{%< HHr!T: a@؈@fb05BJ,BrCZ7N#M>?$+OU_̭#xRI2UdwF o"| J/h8S`1TnQd8BYc%MyîWybLz果XJKYl/<c-[ND" kvb['5?(u1e}c6&6rQwpSo#? 6Zr$T 589jv28!T]ŀ0& XA2ĈX |WjcT16Z_HjMܕd  Rfc{]W'Q9 -\ ɼ"ZdJ1Ɯv-Jb+ջ/./gh!D`Oț/Cc\U 󕈒 }ḏJnOK=ڋAv,CTkdʗB}V ޖжi`R}N(D8++fhKUZB,  QC{_+G_3Yu[]a"RWQ~}fz货GSմj&-կ `cQ%b(EKxkI, |VfYHi楡Ad6mV?wG7ŵNƙbYtYtmUO8-Eԡ;%ЉGp]Z-{M*=SwCc[|ǫ0ܔb&vnˀG}}C!TEb0HsT+xoQ3C80jz>;c4 tαeβ@H&q]"4T 5Գ`:¶ iN@ M*>Z;OjQ D\3"zTdQxs.#{WUʯڅQU.m6%  Ѓr\h)|f| "@&E_.$GFzTA=R8WO>B=N\~x(I.,0xpD@pJ3N0z!T=á`,dIEUV"T Jz+#B*s1}f R(O }$jj;afO|u'f7mHZ-q؍c𲆹fKM0*rH&7GL扡W  ^faOCt-^ހR oSND0x6_k4ֻGxP`p9[]C!T=A1,KS 4lH@(njCs4d24(2 B8̃/[޹鲗wW:Q,Y7˗{;JEzeGE0c_ 7z ##A)J{%k@ &jU'#+wKTx   QmŢsGj`4Dfܶpl38f$]*@o4Bc梖p*/ы[HaJ&]! S̈́aJjX{$cP;#B|HsCB2z$DeCl)L?n;rXS&,aXVA-%P]14S%;(2rLK<#l3W]PmkJ@yLD?'2wg L,ZUwK;e;F rX#LQ ^JYj\F( #hsxUՎ+V1b!Oî[4c^3a-/a߁! SB0P0 zNfRiCV3ܲ +PTՅSjr1Pu{h]&Jxn!d ]| }ꑗL}넜ef7k^HylH1HGH&bp[Lb "(P@F_<8+. zغG"jt6ƞ͝)x'J\t# _-i[,7ӗnq.nA\Ngp-;! SmcX6 * H&.ʕ K|M>ە߾}S\nfjf11YƚSp7VS$ٔ=u]o,۱irC' J# K6;ѐކ#XFU.G8<;Twܧ\] f*MtKihKFpc:`1,IsD#{}I]?=`B`@ޕ\1U^4ՋIi! SmBZ ep`Ux`AE:+u9W`Iv~g;A *6vtRI';Q$ **F%KO$)PzIEM _*.G~3m5#qgdPh%0GECRX#uߖ#825(WiJ iƮi0'5d"v얁V[Y=s5SU31,췽uE|"E4マ<:zs)4KvH{^<+Z8Orz#X>p,;|eVՀ¸<舙1; Bhq쏧60 *^Ks鋳`o\eA]]W'7>H&7'y܌1\QZ- ̨nt2+vd|Ա6csFȇvIř`7ѝ"y㛘|wj" tve v$"(AcXT * VSv:MR}6CS'13^ Bk@p6|ug?6{xPPx穸3bnh آ]}\qcf!h ?F#t*$T$}/wwwxOWnK'|O>'|O>';?@&x@-R{SRk ؍U1HŌ#uB /M0k2L $Tہ3Bźe|GQO05 |'3ֿZc4g utffDD:֘L~CӀ A'oY_G x)MmMx4?׀925SyPlj?G"2EFw~ z :4͸-i& ;t .$T-$`3U>#P<^R?|vx Or E@cwHuƒa-Z;"JWӀA 'oAO?88@ȉIHSo#`! Cռzݘ%?8-貂CX#6K3 _\͎ sk^Iq⫲.U \i18#qaݏݍ~ O$Ā0ho$ OR2"RD7H gA@'g0e&D > 1,6MOʖ;cmXǔx"a,) 2me،Hp\X1^(Q#OGz/7]AF6H1S&h\)TԝO`vR-{ EB@SGNg訯pL#y1}0L_P! ClDALX) s\%@!ۍAGA'V ĊC1eZ~\FbUP%+576ɯA}(:H } t55_6|'.v5B;!^[gG-v5?,m"qLyk5/%h3i4Q@@3n*( j ٣ XSB?Gi<|G$y?W5o:|lR4']T/ͅ-eIm(/q%1 ~Mv3rsZrP9G-1ܜ\N@i,g'D~dj*wN_?ަ HƽVJ 6mYyry67SHM'|7w0H$-@lY\J%!mQDbZ#,/n^e*o0䄵ѡL/! SRaHUDH(9ǝ,AzƍƕxO]FB\s'LL_V'ԫh'WR=^RpMa佗'腨 YLuuX __8S\qs8vi徊/o'^F/ntRy|+狻վknp0Y0! Խ~\E{G[,fpY9uVt;3[*QvQeva>J+W#zؼx%P! S̈́#(7f@((t#Ԍm`9JI,b9mO^Am*P g nYg')Ktx45w,)-21m.$DAoA5;2p&쫔umȮgHj' ]hO{˖٠5l3=j‰h$JSh}(DkJm| t'7C7z44o?u0xhzhCv-p廌3`I؜֟#ֶHP6wj3ryU3fn8-zl8`IN;`}5VC}6&Mn䳥݋8D9;dt?.0ڭ鞐g6l.L:P8-r(D0[Jqd1q B̐ރ2\ '7]:v\ĭ$! SUB$W Lx &x;tQ>QօX" /Ltg\ÑR7t9 3䀀TְuAjbV\Ipg>^0Kޙ)e-4n:d-x%LXr%yp|uvVybՕoz;tYxB'#!ɕU˥rl;tDFMNW#LV O $J%HgXApN81*B0GR~3Eӗ#Z(OY܄Fxt*\eůbk@y! SDR1W=ٲB,ɪn,οp(7n,N:3L"R 7)05,Bpeɑ*{+P+GBp{xWkȄlⳭb\J(3"i3: ޱ 7l50fӳq2gSAF #cU >1ėq4%!٨Y#2~ֲ>=k.˹\Y+>VUF[iI C M VKtPr}݈q $N)VӢG! Sk )ʯ:o( m&fU(R B;kIYAgźd/^`" jL#ČXnVb fecX.ʇY],JZUW'pD^ˆ9ABںBzxMW2Yd(e]ـ2#rX+7iZVR6#3ШP5f,,"˴I%%m( BkzR'CimmFErYN&G?I?>!Nv |e0|"!4' SGhp04 f4YL'hC\ᆲ\sC2d3bi8ԗx%DE;u6tXE^w! E}B>!׀6P{ rҸ-U|%(s~A'缈 1YX)xe"#-&n+!8/ /x ^Y3lTE~hX/0<:JOHiLXX<:c-Rf;ێD$I A'& 1R`4DSb\,vA%QwPix/]@ T/Ӓ/, /zoi!9SpM5T@HA@ʧ(@ x) id߰AC|g0P8U@NlX̻3EATc%DZTKĐRd ~VR@@p9,o͸%`E+c5W'/B}pƫ6O[m MĩB *U7p/1>يRG"oVKt/)YL{80GJ:K@wo<?^49(؂X :DɎ`\LD-TY:Oj &s'?G P^q%^acnw)C`0#Cq6qؼu1P CK\A`Ho2z@o/^: Ҧ߀F7#}ɀ(+60 ~+6fw1R[Lv*p?|FM}$BOmWZ69@J3jo:to_0N4*A@'P⑮O( @%-<&"23d*!㱥 B?UυWvdĿr6" smEl.SVz+6><ޏ e(D'MMϝO"@G"^~^fE@b]c I4lг{RxwA`'FHR 1M")&cV-]hx%S|>RG CD5˜i?ߜkཔz 6H| 0u"mi/̀ L>ɍwJ90`ɓ,|)}gM >?*Lc"AAX `aLd`&<LA'qz\ym T3wDaWЧs/2uoM3r:Gzi ،LѧT?lS9*SCW?̈́2!#00 " ̆Cq NL($ rs-z7cQ@3`3$3A'-$e{{7N _ :$gݨ,$Kt$~i2?Fr\ XKWN}6໦y#2ere. _r寠ǿr hb.Ɗ΂dd:; )A'|g1?cH+BK# н@(\HCfkLzLB[Q̈́ =bPF}0eûLi6?G!9{?ͻO)yr.c1{|NἿo'+r2`3*"[xr;r@A'#g.Bm|'MjY pJ[cLfe om5| į,ZP dm$5V6?2+Lڀ͋7:&~9ϡF$b}1UA/y1FWV} z>kL'uq5o8K6;*+qA'㋂| ᧇY)NR /'FsZ!Lp*i^66#s]e^.o3c ,id#=ciQX}LS/@f%cCʘ }FrB!g ̅g#t"q̅?o{S&<#'#-p!0w!0r!0!0s!0s!*Sa:B~߱Ap 8=F~6S~?Hbm{lý }> "#[qC'0Xt#,hxxzj8 x@&X.'ϫ?:myvFۏ>#n6Ơz OWۀ?m acDvDT V=v0}_!L@+77 x ;%yu蔦@% c} ،LcrUÏзݻ|3=۶\γ2$ߤ8]׶s|¡t=8}8}qDjl|]q 9Ϝ"WdE{uZb #V<"cK/3nj 楶SvbѭpUF>k2 2QitK9<[WޏOKv yEg-\Nyo6`p |&ʼnd ɝLeÔ;ڌ))C7JݤN[c=Яze:(*8g'砏,: pz JdB$C!L7J*C3|SddbXT*l! "ȼT Կ{BJaӮ,Wl_u5Pp#[}ZhqgMQmP('Yi,lıޖEflY\Cv˟}Y6^b:2,ߩ{+Ο;2ߞ59>aMX?|akɺ (y44Mj=J49dصMYƑc%p4?ٸ,(^E9#/%nߴqm&\CmO,řX;-6ی{3@*wsk};;?wQ/yߜ]Wn]O pp`1(E!jTBAUٕ@a*ʩNfUheCcu>71;ekkNC2pnfz)W-a)ȗ>Ѩc;2Tݍ&Flr΋jD IءSޒm\Z\K˼ \BDHs8oIڂސ{95Qb1Ro5KWh@#_KWg \IC3ޜk0EZĝI鷷FYG36bx3gNս]ՙXp4 A2N!T6 DEwH\ubp Ϊ~DNo{hS,I ռEǙo|a Q;,)mYVZLeg|(wUɟBd IkɊF.'e<)iFhO2IpU[dc5T2cYتv&sy]kU<]@\M1kꁡj:ӹ bϻi_ޛcB+!eZ N"OCSƾͤ% kD( lt"nZimv:,ZI2]S!T}:a bQ_6ʕI4ia3${S rpRHiy J, ɯ=j%l`E9Mӹ'^̔fFmr%MTd6%BLL ]άzf)UwGm귯!!Q>,{CszTiJ0/+tZvHȪAf`: pߖGEX@ʽZv5Z&@ >D ]'@Z5ꚟ,3sr A(!Tea(lT {[XW@Ja@]\O]̝:oZ2vjyL;*\3qXiR YzSSi,ʺaddJ6kQP(g.MBStXs2u%ܭQҦSibƈ<+FZv(@:FAӔ7,j{zMx B=SPf%CY ٍՕ)EYgYwb4]MѻyЈ !8F/$\!T= $Ha^j"%DJ4J׵Nc;"lQL-3umz^+0k[ƩS/z:ES`qJxlMJ㾠5Kj7S %i7JIF֔axS稾ԠDo M)&ł7P&2g=>R,8Q633Lb WLz]/6~IIULS A2,2a@KM~!T]£˜Hq Im*eīTM5z7nޗCsݚr-2ާ[Dj2 ZWE*S-,;sCj@|B8G@!S`H"Ԩ* ݥJXK(>*gxيa"Xb,Z: + $.|0zhSOB(I yJVx['Lwo .,']0PPm_ X"^P8BFŗaس,&{w4:WjklIEuv,j*UsժrDk1m?eGDJfx{(*aR2tpz#k.٫HW>=΃ѪfWU3مfqKLW}~֦m*q!Sp^nUk^MrĵIF4Kmߒ˿* VYH'A @/\s]W$PtAGQ%!AG.l.ງ\ԆM|'!O $1M@sEʻC(6 d,_TgY_cZ4"RjJ!@$Ѐ"J:ՉX'I)G. VV eCA@'`OuiT#g c~N~%W|mQ6[ ǣ&6d͊ 8t?@}aGpk#A(B3g$Lz?_HopS-z@Jx 増?mÀA`'L ~x r3|<| k ix,ܜdmk HB\i%[)3TccĜ*W@=[ L?_x BJp62ݿz?G7S!o x1 N x%݈XLp"vJA`rSW\X];p1k#ɇ 8V ɉBbm`15҈_?C) H ,x[@]oUصipfph"`eu!_1)@3C<GwP^`:L,-X\w¸6l!R ! N)hR8qﱀl`xT]p;1 )s<> YyFx]\iS^'*Dh g.u%T֘3 |  n8kR7gn$::{m~T0#,f ېlK n@ڋ"R/cIH&۪@?! lMFQKdd#u˺&aìՓGS_? Yc%@*?VpkZ94vȰl-2J9H 9->nJقH(/j 6RN}C1Ll?A/1(n`Jȿp;R `0Lv<<%dVO  Ç:kN$ xpG+Lnǀ^UΝ~!C?`{ZΌ\h;Vb)$?Kԍ{b^9p;IonV=u|u]e]u]u1u]u]u]u]uN&bf>c!ş{ϫuqV2b ?]u]u]u]u]uJt뮺뮺y.; i]u]u]u]u]u׆,0 #FQULO l'va]e  %b$~spŬsCssuq@ BăC!+:oI6Le83RP̅'%0!Q;9xf̫5@_{Y:笲@}?1YUsq0X^D5ug @50}!o B{jR  -T!Z@1 \aQ8~\mlRa>&}f&IR! ux`&t~w"Қy$ 8f)~F1) ,< t[:uaHEvAȶ` :d&Y *Pd@6~?A?d"^qGB !g2u=@wsߑF[!A+N@,I`S ]#s<>:k`D̝uPT|IkaLQo{?7?~+,V d>40@@OL4[B&59E?b a݇ 8BfDB>&8(L'k a^` &|>{@Pm1⩣!zQcIk!83# F KI q36R?CbUqP-M׌; ?lE<ĭG6le 3@g0V$0BT *o  [sN{#!r&u(>!8TMZ/uL&&9"< Skqj`I &w&_?x6L2S _`L=t0@"3EM}҂o  # j+.!uCֵ1h`]Rl Fh2 t3;3A3-)YDh݇ p= y6xg4a<r`S j{:J \ >We CM~P.sW FbaVb[rT%(K:3 !6rak ah}zE c-?t DlUH/UV ̯}* ^A# wY}* b8a9a PEWAb&yK5E0/ZA1<*50Ou=G sT .60k'=拒nVkB#.a'ύU>Dy~AEh潣2DټPJDJ0IݶU 4[O~Na5XL8kC餀vI`Vn"Ȑo`2F :4hݰs?8f >'UQO#v `? R *k+z%r_`Rv; ?Wf!!R?3k%JCFR9"ABF  cbV[bX|! I`m4: rѮK` @h]];`A>춰h` ˗-'D6y}Gk ~rH~c! :Rwߴѱb U5PAPn"bxXC^)h$l& K Jl4 E|(t2BS@td><&tH!銽dZZ&QZ h|i `XȃpL/5Ce% ~ Sax~zOOpt"8TQk8/,g/FԓpHƗK^\@TϿi- ^[hAN) 'ZF= <Ͻ pS4"Odc_8LX)iuNb3W2 Z~bcHM hW V"0 Y5_`=IAiWǠ܎ -eҒ,+Y4!߀Bh(04 6BZQZq@L`  b Nz EP<]#@BZTt**Ո8eܱ*4t 1|ߨF *uYg둪\A;b"l9u` if8%4ㆻߘ/BNޅ!xE&.?>ߧX9bT%S=0_`~rqBZH /jO{%:n f7D'L=B=o@3 =P|si{kP _5Fp"9~%m\S@ t^H4[Y61,y'a '۫ @1،_`B2^}C {p+>+=[q~@v3t HBr*HQD:L~$h1 gN'gbO@9T/07(ӺnD[X kLx?_ž `>@m4 cDb!@ 6ـ\aŸ ]dԘ]0ްj.gP50036,؊*a3 O. 7B+f_ŋp~O}䮟=NEG%H\$y~%%dr)J.@d#(D**4n}i@JwV:>o2`?S*k|i&I6=[O4QM;he:M`5 j^D"kԸ1V&5p5NU`,\:+$Tw8WnxACOR@1u`G2CSpG肮,Wp( 7.8Y0p3fcTۆ 9%?L*Q!!5@m|$MFӲ04 QFP*3D@]ik90R z1F( z QKz, hDE ;A=1?0idiz=sP /|N뮺hvY?ךj?.* K\Q[ pd J_%\Q7bΨH K"տܴ?}o߇ ud0AT<0f1t fa@ PC >h! ~wQPQa)b%w]u]uَiM7*kG,;~u-Ĵ<fc@FPUa^%Ґ}ݝf5[xr*֧n%rFy4:')Z(+N: K'AՅ:k)U /ﰿ%_ QN@o+DJϓ^d5>X[z+Kb嘠UN w(Gp ;qB{X]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]uuA ''|O>'|O>'|O>'HW&z ;~ b>`#0+!ϕNex`8" 6X92+pܧI]öP%`FpRŠ<#$;x@bWD@1:O  -gp`)!>uGSg4T)ƑL@cx\"1y2^AiﰊÈ*f9*<\8uGg dǀag}Pb??qw7 ! Rg($ge6`N|{im,8"o7%o"!#e##xJJ~c~\W[d-2/i`'⦙f*i jo IS:ho'TϬdveLEN?p?fio&&Oô'&F{[7$:񜰋?Cf¯A@'o'c5X3b` Q L<(?ZZ# >446b@zgX8%d{>gk#qa p,'/ (p(gI &@3{z?{^C5.40s0&o5A'LaAi- !3*YZ!L5prMv!a,L7q# O>[ۻnG͈W#!bx_͌II?I%%-w)X2!#3x(WKNo<͂c ,:* )أ0u$sLy|d|wfi&Ic|۟5ˍ&.`A'o Hǁ AP90[4z8OIŝwcRak’-=4ԛX M臿 )u1Rav6*$T T An6GE1f!1Y9{ d40'|϶ ΙI&AoS@3y BA'ZA?8|4w(2$i&V-1<,?K#kgM$S~pwwwwww Rfb@3`IB;3)l؎BG͈!x#o/.!1p~39g#?A8+G㸞H2 wЏLOS' x1u3 t%>f,\A'g0f `ad2~ D) %IH, %^J#pSGb 3b,p>x{ &f7:h)-Ndw߱쬂9FA#G|?|L?}fcbf'!H7fHq&\|ד0B v: A'P 4 A Zy"#yĔĐE.3d+`+C:fpUP;%Pr]A¶aHyj1b;?<a~ 90s*|{}@fHC 2Vu{ |A 'mDiqDzะbdrC?#x}3d*)"` Ѹ06sepCA(/3~J d`3,Fu`l! SE`$XQlhom ۹N6^oYr4k|Le;Y=sfIl@,.sd2!}& * AG:fʮV2UZ eeSUVwnny K&Z0Udo*qq D4pB|jm*V즨n TJ'p)*=Iaʟ{`'aۇbT3jd&L L٩ s iZ*N! Sp d$ xC3l6`9ɽ?t9%`y2? ńo4 y >!w@@yg 2/#g3?ތ:@C O?0,)b:WM?o&! Sa d$2O m&l >=|8>l~q$`G/1cWL`b<'! S=DP$DAJ7xf H8h50C8k6e!fdY-|ʕpi{yb0*!OGh5+.pkevF\:l%j}wWLǤjå"nZj]>#1h@5F=-ȗFD5s:K wtD, R(`sn $"헱Ԩ7c?{:i.kU݋e:,DS{FK3hPc%tl^7Rs^ gb#iN!,! S}"(&,`U\ 5S(9tXC?.ό7QkxdJܧ8,|͘>h¥^1R؄Phֱ I5!b\{ԠãpuK!bSb $NC J9Gh 6 ~@ 55vP<~1e*ق (,ϕԌKt!_sjjGeIk%P*m'2e'q~7,-3 k;! SRs`E%^['R#+&QQFV*Y |Q Wn0Ti%NԹQn`ocM/ĕ* *}։$w/֠Vz $g6c3Έ ʿU+E ww}Xā;%{yh~tԜ/]܀ld11J[['R#P'ZV3x.`SJnWZ7",HNLZ챥H@*߼`8הkjJŴꡦmUR ! S>*o@lU5 fqK'& u/i>03`&\Am.$ΒlUI]FFZ]c랶1} G2,#$c$9yt cXmOK q;8@ X+*n}M:NIVxgWѶA($HZ*1CANDցO! SIH) !@1,V ]ˎ& ҡWv=.?4hT 45#3}2;D]6yhD4-5SWw/"NλlVܓ6&*wk ʲS/%bSA9&Y]ޭɂo]o}[✴P?Z() "hӒoq;rY!}s :T0LIS";{ к?ZQN6<~i GKƉAUm {îvMsrq`4 ]*$cXV>=A^*V~{B7ߎ>ŕ~r@`EY@ {5}p#^d}ta{K$'@B X9o/EkQT:"q: )"SC# vN! Sec AX 2 A8N `-7 ~悠E^h]7\躙\y>0]F;XPZB r{05C ְ^ 4~( &ݬR-u/Q[ne>blGTݐ_ ZAL"]/bV `֢DT&Γ9Lx ɘ8 646-{}AAH6S /QC6Yi\GS8 E{Ҍs! S̈́aPTe8Et߈L["suA&.UU/r>jdxc,Vt"H30L&!N>刔vY F@`!7XX=r WURs@D9 ;+YU@7KLNs8,P X I "6:Bva^Lq,d\xh{/u )KF! SP?4sNPK!Fv.II$$Q9+H6M>M srDžr^aߐ[B}{eDG0Yq_sF^;]If~yȵJ 'By(,Hxȭ?\&*wv `XUM4@z K|ovBtsf9aSP R$wP[HYj mkK[],-j2! S>*0,#4[%i?n`67'b!j,b-Pe=*LIm^SFnfbv3&*R8[T늗@pLj_M}.),އ9Ż -h sO`YكD 2`*[ [%i?; =Tw@topŵ]b hEQIA,'A8Z_]ɶ]KJݛ_} ! S2Հ@z.47 ZfUR~ӝ=\S!D 4VS~% HC"s$T+ \APEMΖq17 mӾuBPAy.@<렌$RNd}QJS@ SޯnlD`oL DszϏ k W{98\kNHso յNa1:Aaܶ-$6%^0IS6+I;! S!DUe]@ LqȴA!U t[Pq"w ʃeB`*`>A6K? 莎df6^{Ԙ S<ƼyQ÷{qN 4ASxfARe.0>?}v s-<[G1;kym;04tSvGٺ%-rv`! R;g^jZUXH&xy$J\!4$RoGim\|=SUR[$BԚi`z'9! S}!f*hP`P8^USquTh`F@$%T_=U"3w2J&M򤫀PyB<.rn )@UoFH=eNQMGl w&kk6l*fS_1'P?>8v뻀 ;[jbS >rpլn E'9h\SwDWHؤiF֌1 ȣ!tS2xƣuڶ꼻kF/ Nn! S$HHB1UNhap;rzQ{T#Ș/K)7 $z1X;[V1˳wX[5⽆ʸ%tuD_r[:*b^\fkRW'Fqz\_<8P.Q\#OXhL/Fd{R*HXrlQkZ>i5/4}7 Mlzf 74 _dxy8::~A|md^e1)V'*Ğtي⣇ecҞ؝@Pv(V7` )l,!n~#Ou93lT.ġl,2K,@)A)!0H2,Lmk$;4XeܔJq! Se) Ȁ;( 0&XX. /mWدw kJw)$3g6o1!\ 8:Àfa2'Cy"w$ɓrT9|znpз.C==MJ|-ص.Yʆ2t3"V\  =*\NEbɩW(ܯGaIkk`d D}^\rl sHU4Yq)[VӴMIW@X#v-a)Ps! SuJo"{D?W2p<g<`*6JY0}2leK-[@bc;$b|2ɰf_x LA'*M vAQ/PCOȏ0{H;~7^o.9x x ͳD'tG>QB ă.<(Cq|!N>!n 輘 NkpLɀA'! ,$e(:)1KϛmBFAP+/O`~碆x`  c za` Wq@)jhOccݥP`JKO"f8Jy(ROlR/& 7)(E L!LK6aHs0:DRO CK]6_Anh%6  7 f4 HׁT 0?삥DO/P/o??#???????????~ i81cCL_; 0v^&n1 Ґpra.  ~:oS'C ,c|"O8K0_Ur f5{&8羿 ʫds_@,kkZ_,ƣ**&ޔ{˒%X_ f5$:j` c_K0~K0RS|LAA' BN0x !- lB9s_aco' cDkrpTZЮP:Z"CfPE-m;TϨS(σy3&Q2&?ϼS<D+bRV m2@ul 0"imLǫ.Dyuw1$m[0B<Vm{W 7.w{%OO`5l=opkߟ$՛S_~?L "?  de =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr>8R 1 Q! 4 eeĿm|ᴶ-]2b+(T{|b.]^]!`IxJۑΏrWlpo x ua.J0t%8}@h7_@M HB'a#yTJ4`k `+D_)e9+/o{68؍Y2`8R` G44=gDl,`D3 _cxxnEYmS#LpjGڙ|~뮺뮺뮺뮺뮺뮺뮺뮺뮻뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺+뮺뮺뮺뮺D 9ɛ((b*FLIд3L^#[{p8@0 }}aJFgwyE7{$/ *$Yg9mU]u]uN뮺맯^WđU_P+4L-# _( W.@dAߎ.QcaWtdġ1[ .#cA)ʦ R09<032S#X Ɖ%O9h4 yq@PkƁف{eёj B81@?e$2 avOYɁS^(q$3Vd˰?Hi@CH@oCV`rܰok7G<Eu̒CR@`' &r?pSEWc  vO x1<)D9%\8a ZV*g %(Yj滃'Q|+ X]p1J 8 91(P_#019ҞCf@oߞP-3)[]F p06]R ]Y#`=v<Z᤬]~e+pT1k,5ϑ8đ=L^`: 1X kZN+Pm qB"0UO`18Hc~'V) ^Q#tT]p;Pn|}xJ-Rk[1h? ̠<4S1>%xH rRl}?0LJˆ-(G=L%W "B&cb>=e-9{>"Ք2i{~aK Ӛ^q J-bpÇFpZ^c/*/@&D_:01(D>v)?BE{CKC A~:F_k%kU ٰs 0*NWg>HI*M"P~J>'@RD5(j b/{`1/Ei\>Ө;*t?]u'4W]u]w]u]w]u]u]u]u\tICcC߮뮺뮺뮺뮺뮺뮺뮺뮸̎Yz:@~ֿZ %]u]u]u]u]u]u]u]u!$d$\Fphg0Y"0߀,o2IqBI@7v81ٳ̀SC)jna!A5|??}ԌdQI+q.}\ Eg[ Bl8׎(D3oDI˭A &wD\W4pbq0rbdoH9JFd)_:1<':ZDz=\Lq Ip) \0hpZet} F jx0$`ђ AK&}A#L_sqU_G? "^+`!;Q+OK0p•N7<5pRHeVK!&@ς&w` ) dρ ÿ? s3_T =oyɞ8Cz_S-/{șF? j:7א  zi  ,y3 e83j6/3#A^L0 y3\L|J1x2` `g?M(7x L&k__):tRg%IT = ~4<'( riӀ( i|pzpZz κi0H[D,ETLCp\@`"Pa(b w yi|e"XD Ȁ `|b +X`ic /_nBr 0󀂫vUcuL< # ]T )F7Iq D 0l߷cTj'c/c!J`$xrځEo(6Бyq>BE{jj1H0w P "v7dʚ%@iql64D*!Ҝ $7Z<0D wR?PjF휃0 O,B'm XνLA ide &鼰9?B dbut=jT 4l`!p@t:jpI뀺1>i/Ar M{'Btwߴѱbﴺy &~J,+{ A&5!f4n}6@: C _e(IH |yiu c]Ca2pBW|{C%רdϮmуH}-EɧQOd0o4"Nj5˞MF֎"!!> A˰ r!b *cP ld!x>L~iKA, YO IC]YVq&o|0; N\AA%Xͩ'<]D@!(8M.F7 h%I0!. (N  Y"8XurV%h/Mzʖ03JBqbgJ qVp(;׿SiG}#^(ll۴$0#ylF_NRN^yI!]Nd-z@1mxSwSI#-R0)ie.@71 _W=SPSO _XHJj X/ܹZemH4O8 c?X?10 t@{$XEz%1 %83P -"易=HP1N2#${QHV͞H`M?bY.oBGSdI~!;bQX2 Qg+;d}M4A{ZcvAo>]Y>߾ BY'M p3?E@ٿZ`#'Md?6A(@"śC,d@M%߄#Mxʕ/ucdh,RPz;`)fׅG3 )s#! IZz}ufVP'{B椭|Z1+ػ3XC0v \¢@(sߠb=eH58 7p{WY]|0>t #/`# , Уr@g R M-j29d2/TiuH4AHvr`z$ ;{vJ%!Lh`n7O BSUJkG"bTk@y{,-C?A#*\r`kG,b2[X+[5qNw`m.c q^CdaN20c"t_<m0"ӗct~a?B+ L &J >X9g %2\8ZcWa,>bx9MpS01q 3aKhaqt\MBaI_ ѴQNYo\ vؿ'n~ \W/!;?ِǴˎӆV}KpzR"!1w8S2!fb_?~>hc `&򍕄$HC<3C]ew[r-!n X/\/ Mhxۗ=@R%ri&wdV h5C C/$7~)B#n@}FLhPmLCtWT{p N+ 3 (ų`%TP :nQ0NFc" ]g8ٲ>BhC΢,AW~d`)_J@FOSuCZzbfIx*-tIa4y kDTz&vP{u'g4kêvH<  =PdejT]`A[0HvGSH4DiH/h= 0vӁtQaj?+]^q}=ʇ/Ɛ>d_<\0 +4kHnk& -qbLc7pNv̌P0=G  %xD&}HF 1/\7owXOKx` #i$`f!pI 3pK$QTr!R=ķ:b$~4BAIۻ{?պ]WA U~z࠳a:Է~$IMVSu (֌0!h4͚b $`=d2#tJ PǫHzN^P%ǡCl-@jP|4Aw1E?|˵;o_l)tiFDuAFԋ4ӥLd@@'8%Șo&[ >E < Q]D / q'r!̮#"NFN0%6*HY,6͈Ps 1G`E Pql ]B ^o=HX Uhs[mG6@ BXY5myc׉W߬)YdY 7 }ٝ(c;_r(IaR2X^VcKUK:^=n׈}r kpb:Mmy\1 P)lOYA`hDER  T ›wlAJX==zfW^|d/w>&_.hD+i0-6GRm=(=_GA/c[N;w?ܗ:뮺ͳZXTfwJ1ܿ`P(!a@0Kk tSX*K(rxA%#g $D0 ?;j$5,U{%*}PzrF7C.qo̯ B8@`0-3,,"]wQB"٣D0ډ LQտ]u]Ӛ+moD# z뮺Q`M?D ff4ea G *W_0.e7g8oRgu+BFD~_QloF$އ!Q3|%@*pAWaG @=mͿRbR?i Pkl vrg~% }]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]q]{A '׆&"?)낑bndW5EA?9 mXgg~w)& .xXJ`&ׁ9si`y VNO va~+@[@g mPC̩u3c*5߁]/yCםuɃA0Z|jE)'TE M]~ Q]1r$(VP @@YWJrԄyG Z?r`LS#c|~gv3Bo#EV pJў&~o6_oa~|{߫_>_$%a'g }_kA@')>w5z~m *x=  #xB_`K2+s 40/"x e L95q͈?IP 9*|E_X&?rNo@3x SLYA=?ֽ1yVD|A`'1i`Oj߂*kDHQa$Wߛ<mi:)Y 3bLy2<h/NL@%xe(CA%/| }5גBn`;e$~ ZkRA'w<'Tɡ4?JKG6?cxP%r {pA3M<]S|#!k ێi"_{5:j:25J./'3~#:Ĭӫ8ľ }d `3"̹Dw) ƈ,ug4׀A'}|#z W0q3au-vLiO1ɎYP6iٯ~l~\J!ʚC*:pM~% P`7`3 )*??0xuNe͜[I 3f*$Ž="3((! 1UL!EV˛`ƦXI,"X2$]Y^hUE+kLB'oj߸C$:rW~]`E,07i9Yfw. z! S%2$#],\@CDm r Y+ҿ a 07_GU!tDfT.R)zi%eoƒ@&?rHGu<+aJgwr-,T區!ƄUO\ko4jTOl_QLq3W36x|TӘhv3<Ktz\,ۿL ɍ! S3L `x!D:AL1 ;Q{$0@2no\3neM!LY EexȯnJ:M M)A;UiIMIp:%˺ftx)Af@ ev;g o7a<yb qGݤՠ$1 Lļ4g:w]XI^p)i-k QGr[K) KEG²qZiфwcEn 2۩/hKBlOKu<%.>tT u#hl!| ȬlJw/^;Wr -~(`>D0`kmܾw~/Nj [vX ѠZ+ {Vo0ojM' ~Y Rn |Ԋ #w!*SL" @ 9M4oLvc߾WFeYӯS,WBkD#OzxK%fvQ6X}W(ӬR)Z=k"fcC:],T#y_,jrp g˹hTgX2&ar  8C1bJkaże09JUH{ ¼<="V!L;&mV@W\sR2.@ޝ2_h//#S+md_,fZ6G1Yj>}=}5{/ԉ0 #NG+RBAU[qͣL<~^fG _g+=V ՚98e @ISt}QfBMe9"lI'&N/6{2[lHώaK5$Tnd0GIp3:P|j| .Kd /e> =C)Lҙ!L7I5"aUFjD%X6}Se֨G׾*D>Ɔ ׄ6_h@](oC{e f˖+حZ1ԕ@cc-(z@%E(_;>T**05}Ǻds}oCmlil<CZPi%fW\mbd',Mhut\,T( !=!T=a@HS*ӪRh7̫*ruk ʧhbT]Ք>2͍(Q~+8c,YMkJ[9o䬢D:wS_S}MukZZ]~ f5q n:O+,y)ӫ& 581bԨ{W)&c!L.ʌBr:d*l(+U Sݍ`j,?}UV+ rKljtP>!Tt:Dc@0&"JQyDV,((WQ1fN%3YBUgyJZ26]-׳Nz5ɹm΋\ZXRlMdB좂 JJkWॣqO%js1D[l꿕,dNF5Iw䍓8T#f0TX6 nWZB[bǕ7{tٜ*B2/愃OIzM.Q8Iѵ+B\݂fX !1QxюBQB3]#6]L NUfM!DhӵƗA![*XB {YN\$<{F ŸK [ηFF1 ,宿Ze2{#DE}C!Te5B0BSõ\DR.TWz)Q{͊ 1\YJ$`w(J>K-_ʂRշmGj>j|BJb#hxf(4fMModŢ: STO*( Np3Ë]4Zk):}AAe(#G%h"R$!9YʲJw!$CFFo$ivж!jxqV}9 j_ӯB>!T5b1,UVҐ JU@,יqt[ke5EJ%G"O2 M&On\'7P$ z0[,&,\NQ g*_%w;Lڮ H6I,FX ӑU>;}Ru2;䪖w{4;k6-: 5٥iDú!] B: "m4D/MexV=Ҋz#l`B #[}C!Taˎo8 UA]#k*1ob]ճ$3ngk >3W Wx.)јbaۅoN([4̇&28ӈ=0 œU:ZF4Ȕ%F:G/tsz#)63WzOF= [ch,!1K?ͳxfV4ԭyl(愩 3S3^XH[-I!S`U 2(­|\;!"C9U徝#!*mBU%CDuU1>jos[R2i$1]첔h@cֶN`rUAei[ݙWh$K/l҉[grAB9G+stʄ dF=4Lk rܧ۶o­^_,Ms=5R,@F}ћ1sKn$CLElYyq5l> Q[l{\ƭ;! SـRe]-Tũ ߿tb 0ZFx)O76ES ԏ{ThLQE2F H|ƚRC1e» bZr OcӻXOs-]=5S.iB軃_KupO [dZUy9L:q {SKXq;@Pa8ϡGBxZo]!kVp@fhEg/mA`''|O>'|O>'|O>';zH?@&x@$ ^R(vՁ|):%cJr`b 0~ [80}MB]<_f&ʊIcH0R ߥ 1m`dB]2ׄm% xi<EyabF'K809P@7MF:4b~hppt>!a>: KӁ .  cu& ܷ M [!3???o %Le>96Ï# hm ӀM1DǓ#pJ,P3^׃ kȞMJM `)+1Ϊgi?<8cbw> |q\b4.JfIΟ& U(obLA'`0`Atܢ(S.AZ&a> x%QpzGG]dɍS ֧^I=VFX"b<% hA'LAl5dQ@17cS)OM84?/92F|>"!b@ZXl&!- e LPQK2i#p l@.,l~pxׄ6%x >=$bf@s#ϼ1"z6*L~'!f;\8^O#QQ>ȠdA@'B!D E@Q!;u"DyEH$.Of ^kw{-b LE3݁F6C60KΦuQgJ~/&4F%"Hh` X# 3! S"a*oFT&eQQs#+!D]E;8PpN. *!FWw?<cWwa n^O%@AMX"09,e*cJ̯X!U#ڣ?(3wv8lJ, [)`#8(*+P )FC6s*%B5vUxVӸT7@:AU#Mhm~ xi! SeGAPUR@-6J<ܦܳ;IeW~ޕGNhlCls&Pz+U_dqTHxB O2^8/fÜA^iai-yyD65<= 8h۴Y"Q=PD7XtW4s(H1 69 &%쭳Iҗ59ڗzq =^[j#X 7šjڟ?jZ+=>xJ^]ԕo}I9-7ݳWxoVmFק4tmqt\G! Sx$#@ sN` hvN\#@uDՃMh`̱Ώ}`9 di+S, k,n%WoC m|Sՙ_}StsY]eSja pBƆP3-,@[@gh;s%i̴4sH>`@:Cl5rnrk9_ic,sWDY! S< C0U(B/Ȥ5f[ȶ#wA>q<@@6b;>f6tc 1\}}~$0u3`3鏱}>=$HOl#bB@27P#lBPmx?z ٶ';7!Wm;oS?2OJӴTc0ڠ~?~l4NmY! SU%!F%b`TPh%>ワ\:gfH{ {9nl\ @Ԩ-׳~Ο6: d|O+&x1r]\[UjSɝ0{'\6)kGq&C`k C $'G&BS@8dq`M6Džd#šLTn>MX<oE_x,Jr畊ܰu@YI㑸]!cf9H#:~ p! S}HV6,݉uÈAרU|m:Zǁt#L Nh] 8N>iZmy˥,ov>uYcp^SnB9 pN#A?&j]آuDG-VJ_(Ip+@bWe)\>Eyii@I*QG{& B;>WeG>ITQ@V S hE*آ] ^Q_#tA93! Sb IjVm*G4Ry0PHog㥢ܥ-SRmI[mP xlVvJ`ܝ{zlu;0BIr;+Q6xF'H3"`(PQ. SPLi˟$};LԆH S , &5as,. 0R)˩*wH8E ,e"qGr~zgADs QR@N %"]n5}MOS^X7 w/hSФ]ʲ^ ӴnT%FC0~gѨfA8QJ#e\ӱ]6wwPX7@.֒z  0j6b ϰXF(^ld[u5t+/S! Sͅ2B1PeZ@cP;<ن&@(v\ueC Nk ] \ >c99[%hBdlZ}2lDUEA"lp|ޱN6’9))ޡm0׫/0̎E@'N(i@fv|ڱە$p$Fy/O2řqdBeɃ@`7]k .Psil:oVxͻQw[̭9',nx@b XRӭg fNi('\kذ. )* '! Sm>&#q2hFYjw5aNKEڗi׭@{EР+F[ a\nO qe6ZQtFq=2;͓еx (;J8 VAJS n4 V fIj|ES0|vڧ Ғf?%ϝ]\! qP@XwJ.J$R @Hc:IrFfJXz! S݅&G0 V*PFi(.|<=gl<+!$- |{v 3=3->`˴#5z}r8n}[NT}D|&/#u/O1(pc0jF쑳d~d;+O'Ifbh 5 aG`,P|_0 R)eڶ$'eshU8δt8ˀ-'Ės˔k"8! S>dݒŷ/*D/hڴ NUsTGy&#Ii6)9:cm+u&-.We)@[rҦ$$2Sƀ BߏkFd8UN]ȇ;N-B)I{Mu5iJvI>04{WY}p( L&!C`4LH$~xV u B3=x^ SmYҫ#;fD˻SOG8S-$sWu%ҟ`G~s8! S`](*%-Uil(%S[`2ejXf?U ~rO ZGaSf ,ѣQ i"M80 f3O>t OxK AwĐ36C@UNX 諣^ D4_A|{1#=wܹ( 0 kQε^ڒwqF(P,ШUsٙeAHl MrI;~7IYqQ7jUVG(0{ - 6JsZ*6_|G銽(D! S>F Җ[,b"(JK1K}_)@i[/ÖyPAkQ씶Bf/H{0}˅><>Q*FK~E%2M _W5# "Jx2h8Ái\IVp&7\T(*tٺ(pnG-uo^ɮsph˔ P( eL$r/9`qө}(3RڥGCMJE$ILQ$V `^VD5,C2w)yt)Q2gK_Q! Su !@9;PA)%.9S\s\ټYbAi?n6fÏP}WKێrlk r \faHCqHM3|:zdke:XlfZ(} ԉZDtrԷ3B~ޔ* M &{!:zw't~EVeJ( E :{9ErD GT2EQEB) CA))Q(Ko0fO8L*ri̥ks! SuRAPbTBB&ǤTC 2mJtIO fNa+_|tT+T{뎿]܃# j+Bcu' U_t45F $y_o(3=PVt[dvxV_ # EL1``?LAWIN0GIdr$ b"uJZAp}٦qZb۷ vߚ\hdQ8R[x췜w ! Su'ɗV /`@i&K-{\SvRHEQzө0(V~=CxlSr/%,;UgjWY8>r~F3֐erl:ruթ c 1t{ *(A:񮱲Oi-@5RX`8{h T;(*P~7eqBSt3n4Ks\H!p#58kZ<*Ϊo>w36NHXs4$/2M2VTOiEEPH! SmUC7_( :/4ELRЋ@ yĘ7+ZЃcǖ!io}"[ż@k*T)Klcй &.rZ+ZR* ޑ5/ VԆ127l2( C$ag&ճ  W. QQ& =T(ܥ BR#dPmF9!9RV*TXH;Q;jn,I ;Q¨2yXhJnTa! Se$HhdmJ V'G_ױ!1NDʨx(AfE]7X/A*ܖjqbRNl1(VtdbBV0ňw$J&C `*˅Q4SezvRI/y1^-IYVx\HDgpD3;9M ,YYY[7Ygts %e=vQ^d1ljji`N+GHFʵBZUE+ F4* 0B dh A`'C-G9h$7 V凲9`J#y>>= -)di3bLS(gRfH " qx|B8tН\|%w\b|B^Pl'KQXpo+E+C65R0L?8z馽@83c؎'l`@h!]J($ֳx?@6 BE4pxx~pWGVyo>.;;H!sߛ~Ř$ɴ`D'k=#ZQhw[BTx$SL(yNd +0_~o ?zllR?& Te<5\2v,Q'_~'f1.0#~hN-oCNXO׬q {Lh8~SpZO?&c%mØ^b@)*O_A?}:' ǎ~ұMa#Z |y??G??>_????G?????HcB,L(|mU_}` aչefbyH@,*~ui3"sK>,q+-޼VF!w|>w fcA~O]S/,Ƽ)ʀ%XsJ)Jz9PK<n\yc$pj f5e@?_AV,2p#;,c>q9; XA'`P0X\<@ -")aoE\=XW\/8w@s&ZI%(r`Q|L$q~.4C5ˌM +h^: Ȧ)?S' E/@9-T-2Dahfq2G 1[;b=q?[_c[s:^Enz@.$J{&V ־#;V>ݛ|~f8>L(&E)ɀ_w@[jM M?P` ֟ ?_ɀF $E_x-Mwj7=@Z͏r@Ymx @πʀA 'T( ǐxWx0xb@L{{ ;Ǎ A^?͈ӃMn0.7z\B !o|^9:-\U }aL>fa<&TxY]3_jf$f\:&>)֟@3xO=43&]Wn@A@'X1Lb"=$lpRQ1h4 TapSVS>$|OG <f`yI 2xTmwwfƜූ$ƍr?)GGWJ?gwy$/: ,@5nL> /AN#iUx_?5ldy5߸~~YgFh:A`'1\F61Dx&ZA*X= hC\07O matĀ͌1V(Ũ~%YA R[2({xMآ. T x$4|,b< ̠GsNeEET] Lf癘/4ͫ܃Z/33;$Qu\ A'_߁e66ɤJsf IƞrV]>0ܷg3nAIQQD} ŠdwUZ S'>%yxpIؕ%~hC^VFW7+Dp2&2zA'6ꠠ?02Ul :uijh2[{m}@<(?> <x 6.L^s t 95PM5rQE;) )>7'<9%@3y#K2̄P|1VɞsA7`A'$h0qF#zoO7vL>9zgnA8BP5~;<к5PxW .QHV`!~. x tp! {;F>>$:CHB9~3mxH9W#P-fnas$2}C IhuF,0T}ݧpIUUuU_GrUpM|^UνI%q:%x8z,0E5 d/4xuz9a!8$ޅgu ^( mWb)][߈M;e@Fwcޖ "'2h"9 M#bH\̀Ǐ0]*(v:̈́Ȼ E63csA=7k1O0wX?72i\Dbԑw$bawcr7ޜ|qN驇L |[ 9cka?R?1#c\C$SipCV%,QJ8ri@WVl \kԂY%R3Y9*V3w[RWZ Wt ",URq% ?YK=:Ua! SE[C2l OUlT8rqb5V hKs)N= *Ov,Bfx)炊;Gy3u PAAb%*oX0СǛ71xU71{ ~d&ˑl/ֳhB(=EW9@E.܋R\JdwWla3 Ѝ 9LJC`)jϸobe 10b6oC\oȀ/\u:D>! S=B,BXJnͳ/ SfiӂFb3IyxEBr չk E$AOXivJ(dr_r\u1fLB)=k,;G?3aR61c0Y Z@XDP(Y@XԇUlzsKnΧTg?}|\TP 0F.Dœ ׼/XƋV+6O3Ћ*FA~}mG! SyY*#sc nt2}8i! H]VRJ>1o 7.xibw {KcU6%9:ۈorinĀ2RMdtsǭ.,&I8 RleG"g0 q7q$ ͷqzlguZn} rƀ ^rqÑ1D̦ .(U m?ϛ爲7~|,gm{>~h Fcѐ?! E}B>!8!*SJJ'Q@e0xǼ F6~И/ m_nhOHӾCvar~kbPggw>-jxxz@b!]qšQaH,es_)0 aC0{R|E>"5=3`(AVCn38x>a!x8ww-O:2r:O]_O8!L? p򺄦|q ˩.2[JP%@9 $f @`J$>̻=ƒČ\`Ѥϼ[ lX]s|@R~lUR#p>LD:QW9Yd8DC)ufh'(Df=$lVziOO:wl>~m7Rf8Q \ U(F[d̍R n&26fV[,ʙF>b`HWU9̗fijHS2qC9* w2:u `*|\kΚ @&bX{=u?ZЭ^ q-Hk_:j=Cԥ!jT͎6AIY'6\*KhHi՘h qījqR-BtfEA@ jl$ie3b8[TtѠ&u%"&LRb}l3^%X^RG(U`G7d'`zoxS4X696G%x`Âԡu^0p'q>4uZ$pf:hbq)kA(V^-0R"l$4$<5f jU _@P!T:c F\9-WW[` fY'R^_r<ԃHrlaVJ1ԙj-N&FAbZ3O}I6ռf 8Q-zEE&]"jX82MSbh+tLҳO)5U]E׵eu\ٱx,"/H H:EA6(# ڂ|-fȏTR&K3l5DnۀCՐ,FwLѥ|kl*}LbexNtB C!T: h1)XeXD`Fp `kWٹS3x/Ɣ!U FO64&`Raw4d82SMNPV0w-,S3hME4`¸sWBL. 0!Tm: "P3Zs>N>(QobPI IRW>Ƶ*:uEjӗ.Mާ뎊iqh3Zڹ'w^ݲ ڽu$8LGJIeɵ .q('M~"qkץ~0H)#7A1Ϻ*^5,\#S}j/*QG +XStif`FmTK5>K4W˜ݍV<̡E8)-$3uz'Os{O)0Zx^PJddB!TE HpxW4Fq T98›3DidO9*ֱ1`mfc.]tfR֗.RߺNd;mVɣ(h|-$%,lgNߑZn6 >  Z2Qj({Zcwܥ)՘Bw8gгMAʪKTѱx׿D\xghĤQbI4#UVcdp#+5j?2 y ),*y f/wȐw1Sހ>!T=b!{7iLmWuq-rzA}g4½j[yZP=ς5q{&,P0Y"W@kj1q-_AP9! SŅDLA4DYE,D*ab!"~=16PP_~ܧ xvW6`<Ne;-Y,2eβ!=\OwjʆGvrl]C4r9{@>{vN0ogkTPhXK<=p#0rk[kC~P/n^&d+xڇd EM1@X" (lwˆck$RrG,g}$)q)4LKޣ\kL#)HJ1M@$A'o6E Ros'3 m`j/'AB8 SɼDJBC-G"8 E>" 2J.8 R H@q6*Ȣ~$k&R%O(}EoBQ?ɂG'pB"fhb#c~P`)Ng{N|w!3M'y5&A'o FS7r{C (?;X%B>|3KI/x$\{@f`% 4x 3(@6$+۫O0qhaD&:O1Yd7 0A˜|@3`3,F>A '_&OlX0"@3y# `׻^ m+A`'ɀ!v8 vF }|G#x.~w@bHy&md;uh|w>maN&O/%d<&_%b34zp1flqrUm0 YG, ~)K ΡE'8B3pE@,{xmHcAYOW9`o`"FAU=veMdLCw6AC T2KiU7Ƅȇv&dzoP\nT|U|-o;yW;h& 0ѕ c&u )~wl+ǭ:Lx~F[mC^y_ja .h#Ga1痋h ؃#NC0on0<vp L6+{֭71'¼r]LGϤ?7 >ȋN1؟pL_7g,1<@Hdm2PlE`npA''|O>'|O>'|O>';Cğ[*3~Oq;+llv#K4M +]Ap0y=0;.pRmA8נ2~x& Y`T0u<4B@hk~z˨Ox;a1ZH3ݙʡ XyCw,mPp8"&>3+ FZAԒ7Ayhq4Eפa.Z1̜t}sLpnR k_???A xP<&:es):ShClOp<߀Q#x yLrTr™L5b<7 #ZɓQ+S1JG=>#? WY 4\$UÀk,.F~`r&I`?=F̀`߳`@3?-Na/  >+1kdv)y?G<^3dzd ͤwzM`3bgS:JjS8%s^wg>+B#i1B0<&< F<)i#6Lox%<#C 3bӂ->?yfJnf@ ! lp1w|f\g+N!0CC`DO &s u[?S{_}gBPU,V~[bA'LA6Zevrq0"v&bHpVDߘ%#W7 1؅4H$_2KLߵGF}f DtC:#w}s]8s1t;t7Co|`">32zeraP_lPA'o#~9a>r#G4?/B{z>d>`(.Ǜ;xRAMSOM?!+0 >> Ep 6j4lD%HCwcE`T`3bbFwq<S# gCW?@J߻ MdL%)t^LD|A 'oA?4\4f@5<#6L< LDDx578G0%?x (̼g6f6#X1([z68.92Ţدė  q: ^{~ЈX:<~+%@3y2qq4wC/>0-d@x A@'g0e&Yh Dy"%0- 4Ӛ{`yg\LGtq|m3d/̈́ȺJ̅+_aOsa,'0L<̆ 9} *gz`ͦ3@3x!`;|! SͅJ&**T k28 >(JsslY0 bMcS*{ೡLtN|hvSm'R  Ef=$S`%J3ЂE Zo?ݓ-(P t ־4+"yAma"Il.Uk ְi'I6mBqn1gْNSX! SGHPJ@B¬!Q-7jJ7N"mxC ^| =/&7sU@h-J:(}OWC! 4hwt79q8|N 9ǎ1y'l ~鸒G}¶;+>U\PUv$Vz z;zOW$OtD6 l:AY_li>lMu2_yEHIy/]#tZ$%Z-f QrnK9) Rrt! Se%(H!ERQ&^- #-ijsb::]&Ig\ST椁;aNXHpzegy{0 HA p ()ZVQҎ&`:x4̌Z8)M;늱=P$J]%SKЯyݪEvr,BZA|n{YPO:6LJ7͹:̣f<Ro.M\j"Mp~r,JkD4C,jXI7x'Vߥ3}c?! SiTFB\1BmIl2 ( w7Knb[GE ¦93;:3-Gwe2ald+SG]΢SXTSEAQ9T45Yð978 (M8 !!Ld Y3&h@vfH{&|XJaÀ~x]v` 7h{C#ۉВ||s ?9; oC[9O7o rg`}ok0! SJtR #X@3an=]G{ >xs @`{8Hl.iv|q 柟>ϟɌ  @Gkt;ҐRV&?8/[p D1'OpCo _Pi>f=޺#Wp}!x\㳫pJ9m?:~~}]dxI?! SUSCoala^yyc&k.FQ RE49l󎂒 ]`Cb): A`ټ|*YؠAQ_GO9C1F t n5{V48=AJ딃$b&(|#+_?u"2)&wgˈ! ٌE[&`vz|àR-5g]J 꺶@*%"ZM- ʁ{ڍUj3l*33z6)ٷ =+0urKTbD7Y&'D|Kh)PO! Se`ATm@% Y87O>wxZg]X캐Ji]TL /~pd0Nѥh(`%kʂm}hݥ| 1W"GX?U.S>zP4yFQe $\"i?Er@^PJܡ&1͹n@lT@嬊)4`D(8`_ #/k3LfNf>@ |C NyRd+ʷ@R;fp! S} 7u6a J])l TӎL]YThlSH A7zg`IX>`iܹ. 3lP7d2 YQBdz,t1*zmޜ^0Z-oJ5m2Ӛn]#?kjFޠf7m(ӻ&ӯp/AI$J\y.wrJeH"XrX Њ.3^A7 %@ e1SL6B{];^;c.7l"sS0bu-ټ* |! S> D,VeQam ([/%?GB{߾e4M"{Y]N*]WZ5TuB3G%zT(idߧAT:aBtwSz wqà5mۡ=IL ܻ9p1FkxcbDIu¯ᓔˆ̺ 5uqx1_oWDf82 xH0 Q,Z+O/Нt:  &EzK/YgIy ]N'+{jӎ2 vJɯvwWEaᶓ! SʼnaOMAQQj ™B$W-\̴F8!mCT|-bL 0"-eIo=!(򥥉"s^Mwn^ ZUQƕ*ARnfnݫ97'߾鹬_=Uu#bRSQIR;I%Ud2je*$() )m<%p:'^Wp*afV4\"(F>]zΥEuXo!:J̌m&| ~:1! S}> ݂ XP-LE29L 0_ύEܨ0BtLc4bn0ZuvQtȉ "e\*'ԅӴW0rfM |ڪUlINS{Jt hS|e7Ik;_H*/o3+f<=R90 C蚩]݆Ap8)@@G}|^{NO2y{wu,of0i3 hQZDߜrlpXNɮ٨'UtmG",|! S2 VaPR-ȡq@ s)b<螭k4RB$KCN+hmA_hFȯeFQo $ivv9ocON2*@z\ވbiձKol{LEM}}eB~יdȺ ~_ ϰ59$`8a@jYiORLrM.[ uud\&Eu]p:DɄV6N57! S̈́TP @8E?CJ1f>>tϰv(DcO[=ÔqHO y0o>v*2ZF~*W93y:~F.C`H}#$MN+́_VJlJvOtq&H4.3hϢ8!77¥=A/ wt0^b%%Be@U\f>^QM:3wxZqa+<)ͪY$Fo4po1EZy! S&AR@U  ,zh IÖ{dRb|GIm \alמb0$W0zyf!"G2| Q?P;ɽm3G/*O`J|<870</ʹ鵱8  ` ·=UkXp:Ol?sZF2^P e*ID3$ˑqt Fŏy{YœT(5l(:Q:! S D L0Od{'"*&LY!3w@G "tA̲H~#so2)y.n{^= j]Gö#!{>CA2dy'FӀCJyKIyʙE7]?g&B/>]{@$E0,B,A`=|guxrZd!! +b<jP׈(jBc\n|˓z]e7CʾlTFR`HQ! SPȠ jJLb.uDIKnY I޴8U1LA^@ذP$cÂjdW-U]>/H< 3߱]mo[g!-s+'өB4 {UӪ߳o"fWq5Z8wk@1Pܒ; ݼ1aYe( HHd2cFPDb*m \fgRv㤤9FePF:U;RkZ495g]9-W몖lх! S}.(UH@ lPGVъUR)V%|"gbr1Q#ZqҐq` 3EwKj3.9CbP+.~yyq#iR V^$c+ʩ4'_#B'-F<{&46b9K)YJs>p.WTJN+s9ʱ0U i@QC% p5KL#WI޾:r0 7+z'%8'1h5-pDlZBrMo߁+4oZӂԴ! S%vPt7a16QE& L\@.\/" 8 "ez;km H`=˘$t:K }eQ+3V%2,@q֫g?|֪3 9 >0":GYo@h(*߂q SI; qFs@$"%HE%jP/gI)h\Ƕ;H*Z!Цݪ-8E%'$03AyҸB{M;-}Z'GҮtE:B! S} FP qBtc_5rf壑㵳Ƌ'B@|J\k;$[Kb{.gx# Hd çE&1CœوMJavT7¤A7|\Nh.DZꍃSQ ܻNt?UH4^C̻x F,en W3q %ɸ|S'/kԚŸN=dbJdR;ȼc/U N+v- Yi'W#_su:5P)zGߪx! Su%IH" 'm PK gv<]Y#ͷ>.Q: `>,@JVfJ1Q(\b@XN ѲGF Y%9*oRuE"C4yJ=~r^0YƾC)៘S}+qB#dvI]UV-!E!DXH@6;u.UU&E%zrb[#5WJ77 uKL˿٤~A`'@(˔"~CM)>%i0Ey-epL~͐`ɚ'}6C ́8LPkNx`G')wֿ#<? 35QS#dGASItA'OÊUIȇ- I]$.,ki.%"d'9=qwq/GB2_Ԥށ-en#[#<`xO P=:`>>!4 ̓9NfphA'Q0 -&,LE}C/"WL@y%loK^q?> <WU~ <x 3 [24W65Nn:q!>i2Pg.2cؙjz&S$\@y(’%2s86 *#44-fd v nNc‚?rq8[/ZU ifO1 +G7JB $zNW Am@fFKxؿ7vi ' 6@A2 ɺ't3U}?k]J/G_Z#Q^:A'$;K &@奫"+|#GBZ" fe:&5AE3 6mX]!`/d|dal!p!~Qx+)-MfC *'JiDOUU%R (z*wj/v sYoh}sӶ-w@F?Ms];)܃2]vOG7"⻝)Ce -[}^ 8Kdс>40uͽ?-0I>NLtC7@A'&oܴDSl>o-NJScAev+~>j26 TEh@4t?'&r"U`P ta] Z*/(9 Ђ~2p $ 2`A'% 'h -HzbD L8@T^~o brڞ'Vwͼ˦v1ƈ3|S"OI%"$6l &˃@2]XLf]Q*?\8/F*I cBlW"|G">?`p :i6`¿: eO0L[a ? /ޠ fz)K0]__׊Ȉ > fuO&gK0걻5y%~K0xxSE,2I3$fjiY%n^9-y%cY@,kɕ|PK~O` c_S^,Uד rUV8,A '$tB`Fء . - Ei7|Hd"wH0GӘ?Yxl|Y!ɤX\ # 40 &MO6:h"s:'rOPmإȦܸXP|k#?^(v( p܊f6#1~`GXX&PcqS=j Mk+FzqmSM~HږrQ*?]50&m1eN2A@'T`3`{T`:Y7cA[x0muBڏ 2,܏sxr ssOE? Ap~ r=lV=.hJvQf͈Zc@\g&7t ϗ R~ OԚ~ ; G㿠U"Zc~`0#z`%?F?g4{LQ'&'2A'1\kzWa\)Ro))}$ By=`AF<KBY 0L5iL!:yL觧g9DzKh SLtc0 aY`qi3Iwf=@J}#>DxNc('!-?ˑ>~'&3u($fe1)nW62 At`J @WA'_x7A1 ]@CI _9 c# D{fwu˺knW`1YX)+I"`:$C;?GEɂGоDu^K!\O@2A'ǩ|W\`Q͏1XFMևϵ,E8d0?l!N'(hTȘBZc Eֱ;yo;BC,? fn`3WS+g #ʽ|B"0W1٦! Se# (2(WnG hOԛf"`m1趋G4?XTCee]i-pUJ5eR6ѝJ| d^F8 V;BχYquzY!N%=2q+$(MM(4xp؄#$G6S0)dw >dKF! eQhvz&^93N3QΨxy8r + Z ’:@FnL/2rR$O%eZRMCR Gh {@qval@@'Q-1,LJ=@} fZY02\~ V꺝G旅]k@w˾:Oˎ ';+EҪkѮ'bϠ/u]j+j`K;1vjp[USgG^~ѳs`79Ωׇ qa2xCIBъ^6y7cjZ-_C U%b4NO.+L|侔NyvElNND$ B>ƅP! S% fct '{:nܸP*]FLIᢕKl Mi:%MkG q8UXe7^nm(=KɈ yv|]J0$`=xk+ɍD\ NB8nwԖ_Sص9B(nM oPdp z\*8YAB@@Sfd2I` =LK;4l'b7fsqmuQz$:O6lsV<ϗt >f~ϗu=߃)m.`31f>Axs{?yrL!! @;!L81VB~$miP)%%am˩ZGYEH_  {:x3 -k%Kwe+#貢F5ςIR-B. /+H ;)\YQ>CA<:ȟn@?ljY?G$iC]s\`׌hM ИNMw+~b)E*R_8:Ou*0wX| pt`A)I(o҆@zh :5AճP!N񯶲On!LH#n"jDfl,IRA$HV+ )E37G >G-1ehDE1Hߣew/ E;zu,KΘU2K1k1G;Tf͕”S֕Z˔lƮ0 0Sw@K]jIR4biS#=`Ud L2̰ˢz(^x{4Ks(}Ot1 (Ji2La Ez):!jTŊ<ڝEX*@,o]ۂ>Ȫ{A2xJNHmv?~ D]kKk@uF?ky,1h mc✲VA7b$Qj5=a=F/|VF+c;$??qe;6ƫM-x t$h6ZAtf\dZ;8Rl A*COz'v<'?uܠd 3߲ GuLgk  r͉0wwh6bqEQ(!TBCaX(1 oP q*UVcL" Ɓ0zVIM7 J?!=) Fl TgPdėuNo$ 8HgcSNK[=BnH  EDJ16ӔpQs)ج:E^ F&$3LpM$ĉMR ]gu٭KMCX͆R>JDw; dBś:)22pwe۱@s!T:D0, WΘ̀Z۴hF)Zy/KKVZ}DU "ܦ2hC]bmѸR~ڋԳzt>~%7Y{Z( $cJF3DOeW39x(rb]Xya gzdձ.s'C:J!D?+!bOWEӓ淖0KOX̗c4:F"!~]5P &1a\+˺6.~wA/o7XLy@No J]b|c>?܎0ߛ!UH u a# 1fl89-wG-X XOf1wpc |PHy4X87ߧ0)As^ {78e|e*R >HJSVY?Fr4P2UUd#@y2w{T474l{`}f@#4iqt}*h H3&Uc_6=hk7YgGԖ /_Wڇy^}}}}(3pDnc\6ݮ뎝YM]qO[]˜g$WK=9".,h @ (=10|W[0IrKOu`<(CurE5\^OStl66v: R(7C5|DJx^2UoGV0jx%lgckX\`ȤDgt #$H1l}ՅȻ\u]u]u]u]uѲ뮺]u]u]u]u]u]u]u\v{/bʲuCC,%뮺뮺뮺뮺뮺뮺뮺ɋ}u]uu뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺/]q뮺뮺뮺뮺뮺뮺뮺뮺0$zߏ)&r0ҭ(<ɦ~]u^Xz뮺뮺뮺뮺뮺뮺뮺~8Rlqǔ<{ ޚAxC_S.$t}7B^Hf#w?e']u3W]u]u]u]u]u]u]u]w}u]t]u]u]u]u]u]u]u]u]u\WYa;Kw𐠠q k[ҾjOż*R6 ;vπM{8Y!0(?>=I¥t婐X BnߝϾB?!A'ɇZ;]u]u]0r*F-`}($܍>~Icx ~86l6@`^:OWX׿ 8WEF'oOTya1Us1P\@6}D Gc#Zx<`΄$̹:R! \1dMO\fx1P?5^.1@6`io¸?FF2Di@&wؿd0ʀPC3 |"$+:2# 鬘=> O(q ,&>XpXr |wk"L\DhgpLD>M]2_͍y\F~gg''5[@pg$_ym3j"|o~ -n8kBW[`bb4EAjk?FF.;f`G:Q -a2TMPU¸ ,k w?8BL E.&? ՙ6$(\0"|=UגkA %"RZHi'8Ļu90RQX {ZC\l6@@}6*! N-hR/ *26 |%^xUIS^'*Dh4\R&NX> {ba%Ài1'v|c ogS߀ }h?0 lKe J z"/:EX+o?K5bm/r =ZLHq{k5%5ШE4ST*`*)Z94v2hf0Do NA/3eH[rlw *YcnCCdmrcRK|/ ~F~IXA[Z(!ZҜ&eXjB) J~3' +t .QHlpo G} Vqw~4LJiVş,`i-9T lpIrnPT>p^e?'N Z ??pkxw͛z4~bD$AWH_?/ z(tJ?xY kjYa,"c[JPL{C!)vBfp("#i Jү.[mL4c!GHj̇/`C~B Vp1̥7hx@GXŰOSiiSI}1 !I葚!.y|IkLy$ZM*QxX"-ɹ" MLFk6!U5pɖc?b daQɛ#Rg~탂TNMESUy 6ߨ6ЮH1~q#of־aN VޖY`  SɗH=7 `š+ 0a3X~b(&|S&~ǟ[|tˆ%P@@&Es &-˷|JLS̺n|0z θE-(ӦHx IF0;/0Xmx- apLhRS/0L3~=VL_sCxNPf$aC1lD >Z}Y'kd“8Վ@XC t3 3BQJWI%`N=_^rA&sj/A'xx ZW3uD" Ao^fIx~ZI$RǦXS *._R<8b}yإH "ñ00:Vе9@@DBM"ใˋucC%Gf{K\o<3^߶-d@ jDX>@ҽ|(,F`tq kPUX0 )ˮcgה`6.2XmJDW&#;-F5Js'ǚ71yD"tT7T23"M Q,NVA-6B*=nzpP{DĹLHB9Ӕ!;+.Xis_P-^# xPҭk1h4pApP"M,N8C׬PT`, ڨQGs R 4 p)g)`$x2,z&VxQX>ƣW2܆;?d]5U 5㙌/> 1a-iKpeuD { *FWq+t:hZl{hFP8 ~%@l$ +i*8NC <2547wNQ 2h0hwWZ7@I}vF'p(X"׿'BtԿt>8,VB s%Q"MJVC*YnqA"5aqɦ!)b.P/ :S[d:KvH lhq}4 '0keu0V8DHcPƐ W Z0xL{?LMM _ TI+>g[0#.$&'e8<A " f4UJvm(B_@  shVji~OY茿W oIco +Qɭn\S58A2Zp ðP#c s3$yh$`B3<27G +_SOw*,ɑa umCk&gԘ遞Rl(',,`rQ;7w~_Ix_6\w6sv,7|lKzZ#Hx"1tZѐ(~@+ᨵiQ\#)_In)!׍Tj=Oh8Jx!3 ČWSٰ0J3!()~>$!1.Fw͛(Ip; tSrq<~V#f2fL 19Y5RvDB)BBy;C g ִiBd0Y&lc~qtkZ3ЃI 7Mm C?7 ! ,|CEf+^`EɈ(IpBLh +BfAivA޽٠B)$" x{%z^i@$ ɻ; ?F@: ˧ wVDVX1ZF-BEwዃhz6 QM9 '=ȥTƌcDj3oŻdjAjs9EBc(Mm⧆FYy] T3$)[(¢@F= SIC&~IX`; |$g8g8`= E/i{˒Cpc)׷N~Mƀ~?~ř /x|H K @SA;v" h@Nj28}2 @y1.Fށ$TD :ݯn3-e5?BZQv<"&r+i#(?ZKh|..<c28%+˦lEv!pA\Ow/`Q{`QKXW#~b a'}(CF J@'10iAAb@kc}n6 BhIְ%#_nꢀ}=z )/~ڔmh3K8=dMH<%@Byrϖ=Į Ӑ3Gs?Nj^ >iHIZD B0hSхE> p sĠ9k׀:W#/T?Fy'a ͓av^y:aH21e 7rNX߀nv]HOglgE|QANC2?!||k=-:(XGz! Rq,_\~XzAng}`/\e[qވvRn̄{!@ ,& [0P & mW̨@t$` 0ޠj.g.gFadHeH!6" C6d.w48E<P!~CMw FPE^AK?hC͢z4)4S((=ܒ1'NfPmਸ਼L<37ff>|/cH=DŽf}6H? )R"|*+a$-oQiOu/h340OB%7A^*zwH;ŖWF@Ahp(mA@~^H 1c 4T``FhU?*đdbnb8b?]7C$܂0Lr/kw}|oD>u ^\v#ꞽ ;O%01?ҨZ/dz 46>L@ThE0Ct1g}ۑ .tUYLG 6ֺ}?I6ISM+4ScZAA w`p"'8"7E؇GY; kLnqPN |8?cw\~'M/Utlpjin cр]FX'hI섀d@IS ,nqۿ!tPmHC8!?zRL 8g'1:mK/`<߀d1"9Dvh`O#`kc 6*+I^,>Ae HDGr%Ёl  qb)A:~1Z1\sZ0! BpX&\,9͵3N@`ݭ#. 044 ̒O y[gr w'&x`rpX!¥ n0oab%{ yZASdeV*`y8ACl>`(&@ޖ]8J(@\!& Mk Qr×wj ѕ ,=?^/J9!K<|0O@h "Q"G@z2} phDfrrC@'WwVp=kwo]u]LK!hgaQz̔߯EN@P(#(+a ցT#&D xJ`N*TùFRW1gXC^!bվ߹ԔܘJ$ct8wONdʤ<Ù!O ^?Ki< K6 %@k,wQإ#{JH GA]u_?Σ%B&*k hx\>u-`1}o^ta "~bάX~%5{*QYVK?oA?⩽Y]u,"Hɫ$.wp R㺞A*OA8k _e+0#\kBL(@hzu+%BW Asvs^#BB|QjJ]u]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u]u]u]>tA ''|O>'|O>'|O>';>O< I` :v#KIh@+BﮇP%NP`@ Y+>@ƅ.6 lET X Lr  #6 пc?@ce8< yT%N>Gd3gB'$!tOo1`;i(]CbG`h`JiZY7P0|VAMy@zFDgڰ\tH4K???(PVeBtQdmarϤS@K#y2z8Lw8%l/D^>+(Ɍ?OÈy0L.XD֤wm0;-!߬ga%@iLp f>Zy %=3d ^wg$q#0-xQ6|ܧT)ͭp'|GFB(G ^A8&«|~NJf*i81- c@РXDcϛ?P߇7x#}c{&iO>># rx&|L|oC6A@'yX3J ,?ɇ.~)i@0O-mM ~: Dy#p\ l>jְScb(ne_dXyI`6 #~ ̬v=caxNS(b> tGǟBP bsGS'ONe0vS{@3x'N:iIxu؍\1&aL|oC6A`'`0 +e8yjao"G¯C?.f{<|,%8#um;<?3Asq& 8g] ]AA^#6|\yWOH<NA]x#ǒKI~A'LAXiFxXalĤ;YMF+a?qiDx |x(g5- laӊdʡKV?ipq\)J2f}|" 3kP<⺃"s{Nň#F"$42/{>\R7@Pj;Bd@˜ ߆l! Sb@lKDs?A";櫿˒0UOZϖG8qm+@ 4v2}k7ih=D}!L$/Bk-JA]_y3rd:+E$*H1ybGu-}^?U .qjM4e6#h7wq((abcwT>rsbmK R!%I4:%( TTȕHPXV2ܒ#! S͉(3JQċdzDd,0SS&R(P긗Ɗ;)-I~ ZץCl|0 83MvT9iL&um26(*رpVoIOsY9h޻IzXo9z џ T1q w}[) v?km35]P49{a/͟5_c7YH %f,ːF/ u8TI0]L@إ91VlkfZr2 B;VUd(^Ѹ)%5@NjZM4!5pԖWhMj h5٣Te61!XSZyc! SD P@b& T 'T.MYKRf,C{- 'qfXC`9}ut> uK8QMWw;&ӸU%NVa:I-OXϢ'?{/PP\dv^rzssFoq|BіO{246sK#_ JCif4; =˜qg\m2Sއׄ$7J}! S14H"B`@ġxDդ |UU$HaV8 l#]qR?秭ovs,&1 PyMqҫ}5\K/x_hUKmv򈦖}>svN=m9!SU ^OD  a|+{顓`.4ϷqH'Le׈벻N;?X-UHY~罟vt%>!_φpS\;zG#A+Ɠwb""("F1vuf?ad2aUpޔzr&1NwPDTM3h c'ޡk(W\x fTmWG -doS "!!S}! hܬn΁KalKfv?{t`a(`z7/xI{шA/y-@F.&2-C*ؑLM.|oT{G7!nk% 3w#,t}U 9=]H+QC{;.\ U齞r_9L}D#);±o+$<ݫM*_bG+T^Fϩ_Z[r! S4`ȭ" JRH Edr[ˊ,M#ZL4ؕ(yŇ>a{Mt:\P.$jl.P@`Xj^hⶶdh"/o/Ӥ%!E8Ls>4ppd@5ntd1цY}~x_gοAUFFUl J _;_T^%uJSZː*KR!vKуoZ) 'eLEx…m((~$0R1U.UOiIJaVk-8kyFNoRPXl+(U345|'*dzp}:X8 0*ڦT<+}yWz]Sd ?3>swv ;,)|eFq{E-3\*i  bydʝ,CD| W[Ѷ@t#6V\! S݅> UXAE,*({6 >Ղ9)5PY$s+M&%qeM Lc ?EqyӄpX%e ѤH MNlRF*g+r>~oRXER@/aZ1۟mFwu,0 LG )`FNi-L!h}EbeݿQZ+D bVDJc*A8%/M=>Hhy! S>:| fJq">,ª3͈{I8>.oxO x$KP*81m%)2:%vrCR<| 'GtµyEuvpo\U^Iy"S%9+fل. |te4+]MLXb0Uo' =\š`,v\z.'T$4kv>2HiDѽ@_DFEWe5XLĝ,T|! S>V @&$G济Q&Q|701 ػ'3ʏ15Y"h2a)EhDŽ|(TuZ/VTVyRۉw+V^1 diRtS3Ti ˖9!F;QZ ++Ӎ=QqEwqG#6`0DM@+HZB4)=.kU;ڗ^vK!S{ETdZ-xZqVX^-ֶm3['! SM4 RIĎZ8XdT)[q/Q$è:䔙X}j|~dٕЈru:GnFB:&5s{KdDž5bAT形Hkw̹޽dz؄6ɮі}F zpfV\OVPwEs@X`I˵wzgCh+C(bю[À^hҖ?%ɗ`Zcy.#7JΞ?h! SOEL@B Z[j t{_t7u-zn`{oM P$3BP']bmYmqenbw]p[jLAJyM(q uq0/q-AǪ;oDc@ @e]_g_>5!Y bUߧti򅤵vQfj;hRkJD4_δp5f$!j3EVmvYlwզ-g! SaV7TPZf-eF}@g|u F@@P-#Ņȓ>Ԕ`"ݓeS2O$/[z9_B4u~EYBCգ9 8U!M94$ Yʉ\Ef%QsXgIJЬ9):g$mYBճ<hK*3s$3]! S"9Ī1@Q) N2՗ y€ށ$z]j\] xQ0R$T;3EKw@vZJEvZzmP``!c?> TV)Ҥܞ z?q4X dݡxqyiʅ6rq/ ' ta="#Q3 lP.91Ń~h 8.dgiY`Au`*NPb2-T ӌ+Iu*Q8ޖmi|p^_B4-fKXW9! SRDJJI\^3"en"lvi(F|:Grk!u5$yٵgo c iͯ|P9K쌸xǍT,4@gr oKL'{;EǪ Ϛq ŒzcmGۀL Ԧ`wO&t{ߌ]e+ʣjܺHrHS=ܳT՝c'vFM[GjȔaSt-0jB'Y{fUFxBY}N! Sm*!+RXr` `nF)2(xTJ -vG#S)H ?+%ȸTv 1s- DGEͤU2H2ܖ,L RW{Ci^!N9so6)ѹe9x=칎HaNz'w FU3* CL^,{9VקE1'·}^RtF !Xċ۪$MW$ Qr5ex_\yL1 T@(:MCA'g0e#D ,4jɢi<"%LQh~!82i Dx8ǔI6 9x ؋Y@> 9 Fm/3~HG'p dfjYfR  '6[A@'Q[8|yo)"Ү (29`y0Ao|l!9!F*v (ؓ@f//b=נ_  Q{MP Ml992|F~'N'֠~ K"=Wۀ +y@<X ߆l A'$ۀJL@ -=3t@ޥ<#r1wW7!'xy|~Xp)$ <P/,>-0Q0 9!m \,ϔ0L1x WЈ)ZozX_F*F5]Vh>.1v>!H<Q |)5s5Z ~m/=MP*bǀp3@)ӦX&^ k6#<Sd4'x.Ҡ0RDk'd?YGty@փ$Zb9?t=#Zb\·bPM)G6 ߏ.%?!b<2~9a3yd"Ii?gPWldm0j``rE.[2݊^O EUG+׾ĕ(?b?KpK4)o O֫/ &q1Z :c 5s5ښb=U_]W 7q3H m.K0qQ~L)#O~_F iSCXYߜ|U`?Uc%kRcyUԦ_$:ҝo{zɀ `J/oDu^r fѱޫفLQm.nO4L|oC6dA'\QozT XA[#[\wLu}1|pWO󽘱".V^_LxBGD@Bhx.NO䎊7xUy-sro'E:/-L/̼V3b q"Ӝ9-1 x W `fU`㦏,2TGUkwZ]щbAE[%ɻx?!cćP3{' 9@*9|ldBu/Љ2F(z}U ĵK #CZɽs~_n긨}\9d/V02膢ϑhXl2A$?m3ɾ'DN\P>,%}L]Q R9$p/ k^q~`)O$ 뿉:; MO/6#c2o1Mg_[Zp(@hyzQ^1#h͈G&o卞p_{_ʉw_ZHGhqc2,s'{˰u#UA'WS@NPƥHnˆIDcM%RhLFEnzi]8'QIlR}6x V O*ijix ؚQhZzKwY! '_|qbUuOOI)D ߓG&2iz}SC:_9Iwɋ8|1D't.m5F^A 'sN"- cm5HHJnfy~ M@𠋀 HK5?U[I._F8j248|uo2n݀LEzS %͌f]u'm)gA!Y?4pӈ:9#[L詝Lf%A^>{N&t)"k!3s@! S(SUcl3{@\P r;*65lj)RRsy b`^4s(֔1J\>bP#`e [Y#`sLD|dKw*3>zQ:ÓCJSL>d6F<&7Dn B'jk_4ADmZ c@:a˛-tkӵ,K75◼O^ΑT]2RSs !Hڕgo:; ux+?h8! S3t=l( +\ TbOG_SX#}3%P2;  `Y^4)P6yUZח5μ/92jx`\ RXo]y;{/A، d/SG,aG[>XK@@^R·6YUŬʷW8o$.M D ;ء$A~JD]mN ߱`򅭽^<*C4g{IA*1csRbː"i )Ub R"mSbxkx! S}-#HTmK&{ǻc{ۥPBzf>2( ]I?M"ے8J_b4d:Y=}P1ţ"M Bbc3Rgbmjg cKo1nAkBPurt B 6-+Kha`a8rIѕ̹3DZaQM<7" d&R@1BX)0;}uj[E`s?L=! S]*HU<92$+1`{}u_Ew XuKQ ^K!%)@hnwW)ZO5TKS B #0:u'}!5QÞ.&-^< /tJh 631Lc=MSFEd(a-*D:՛UĒo-ƉQNn)twVٙ9bPjnsx,k5\;N8BR؁! SE% I 0`,D`F5QISn7. $ ֵ%ګ*cyL% $ĢU'KY1+ėIGζG^9N;ahs8CĞ[ "(YHr֡wj#cD!xWU,n];=̕缅f{ʹKU.U gaVAU K<RS5%;eeqV[y̸ a^2xc! SM & …`XDnd߾{0' C`(3>5 Fe̔:J$#kJdSƦ4: ;E|9v3 # aX Pg(L 61PgX300ҍyuR>mNTq Fx ENJ aI .Ʊ=IÏH=0]IH"wo! SU%ZXd`(X@rDtt΋8 4F滲F ݈Ghљ4[Jg9tA ,6$36gu`V}] ݩOZ) r~T~ Su,3dBSy@r~(a3aoEeD*YLar v{I dErRГ8箱6Y*Y!3+q1[$`9Svd;`Zё; >! SK3C<P2-5wC 'F䛷;'!$e&C8NkE)_.2:i<1Ëɫ-w=]Yq$m5 1b;oHpLcg3Sۏ~k[J^쯮(i3ƄqZX ߍKԪ*+ ^QV[d`y<8zlKsxYU*ͷmRċp2)@+: _(0*Rc*Dp! Sa uZ5_ʃZl %L۷"4.`% 5+j 0zڭz ĺ-)"1`mԫrލWyZ b֠d 1 !`5%,8ɮfd2_J?k:5B)724}dv|boTa~_ۡ) rڵK蟟Y1 9bŐ|Kƻ夓Pn$!*Sl -U*p CowZ-!G,]Ye&TDIj Ƞׅ$yZq,&N`8R>qDckH..k>jQǹwY𦘉#QJ?*&@"zɰPfUbhhJX)2.euyS<:g=JuX!6d[ k{ޓպp:?uct!L9Ex&%PFԕ@NPRJ>`I{E^)3M8+E^r;F!#qFNW95~ #aZ(-u{ā %'59 >{iՕhȀ$kLgh:7Ae`t4n Te y*&<#左Iw?C^7ZMl\fL6U(PNon+r tAq8̃z(;Y& RJGӑ(̥nl(}}!LGAD=VMLL|wqU9R%{"}x9Hk,nUѥ(:"7=3%rv9{KFlMی tŪSΕS~ Ïu47pW1[¾bB8r5ն͝DǗ.U!{W]Ş0{&r+IqY,G] aˏhEY@` N&X@T 5 gzT D1z;!jTŊš2ld2ճ[eg !? L-^Ce͛R^y3-u;*9Po햋CM4G, nڗe9^Z{4vhÖ6۾IKY& Tȉd+4VRjk7CE5"]:j?g=uMum525!0yXpP;Ej,5"JbcCQ3SB(죅V+P8!TrC!;D IZ @QgQ  SJ:bXpuF5衅Ғ~B/oMh @{hSD7JLC@ei@:6l-Ghn:9N`XJ UX'_,%M%JXdm'9\X$R; 0|nܻnꐯO·:0ӊXwMKLO\ExeU7MG])&[k}o{G_IkNকe:.s9T}C!T: bQʹv3dr"޻,V(Ѵ;B%W nDw\t݊"5hf] \JBщYa `.-[?q 3dFQ6VU䙀bH#qf*0_)DfUL3&bJ:S.%~YT64 3w7v.-3yvsW1=0ܩ+C@^~5,2i|cɎu!Tm:aX("wC*F5D-n&n2LDl mlkQʝA%wtBۻt9nSs*N1-5]7ёE2 H>k"F#;L[{=l1E]G@.2dŚ͍J=vON.ߟ`&Sz@d2xjRGH+qeuEbJ3$'̝IL`u !c ~כ3I+#??cT!TMĢC(0&b"$f f8 I""ge lv[lV Pe$?;pft"M%̐Ml+D<'Ic&2Tg1`D"e)Dh2*v}D rB TLv+Z->*VSTǢ˔E198 ħT ]}N$3#e-S? 辮'2I !T5a@HM♸$KBPSi-kj}WE|Ǯ{jUEp8o>aLAJvᴑM.~$N[R4*#d.)5;[=a(Q@rʃS VziO_JԾ5mm61wq/MU!(ASrZ3U9WdM3"`Yp.h\a; m Z\SϩFD>奐2p<YCEހ>!TU.AP7|<b TY8>T|V:^;9%偎9LJpEƆcxl3UFa\ 2dЛ@9M ]情XAj+dL JIޱ 8(L2aVy1DP@A+>R(i]v4+!t@KL-}l MHB'eH  T'p$U{@{}EX94]A@.ǯ{/ojA#m9G6v{TZJ@V!SD@*f\5R`ʊ.|OlDL$AVDVOPʢ7UJg''`:_ T^l4'3? wBUSZMum]o 9$0R < . +ڕ!!eҐ̬d0emKte# 6'jBIjJHvtԒQJUxKdXn^$@P$=riMDl|^MV IZs1`}fAbR}+t*@Z(yWA`') Oyq<]^]zfx$?fG{P?71r 4Ul\)|i%ć@RkpTD!-8ـāǓ.C(A- I^VSY=]w`ǁ"o7n~')#&' 7U~@ H"?؜aN08XR~JqE0A'LȆ p<%| !O ؂q1xbfEFs'R49ww2  t? :$<◈"U9&~fmXUp@A'M^v 6# =?\R`maQ0\F>ˁ T9LGvsx>4[[6fen8q eBvަwHi~1~ i{v%HoMxkuȖu!{ހA'tK15hzì2UơavG’RKK\K([A-.jX?5cfD5SY-4 N;&B[ct{/ɽͻ~490/[Lj'0`Y_f,xX ȂG5Ω A 'ɀ4{#`3ψ#x5#X5#X5#X5#X5#YHjﶻM}}m QxHfq,`0=`KC :q8gͿܒ0XWFP>GV'hZ)$za㐠#f|mm~&@w7p3%мISkN*I6hKtpvzzow3A<:f6vpl砃KW4)MsnŦZd9LbЍ 1lYjLCcsHp:\Yzo`tiqP UD=@^xL.BE`05Bj" J8CeR[$s-\ncjyG9|F|#x!~'|O>'|O>';? _\ %@4 G6t_K1o@B]r@M aq  *0#]) qyOK |3p` uF23NC?(Fi7 &:yh(C6'W>"yp <$wĵHmN=St J|!? /2 `׍u/X<݇jm}@?C +My# I+F .ATwqTFyMWq-1W??2@B0 Wsqrv `GaSHDǧJ#x}<@8W4T 8LLOT<Àx{d#B;.83 '??<= 7<ڏ1w n-YCdg$&s;;\m•,7~3p `0%i#KR6 ]?G滻^6HvQR|̈́bH)obKi}s0ww{Gwxğ8kϑp9#$bZ)V(+? qG+Nz#q? >}oOx1Tad_Ž("K\=h>PA`'yX=6l < ,0L< 6Z.~""KDH[@C ^Io_z(?pN~6 醌91ŠG1h.A[{uE,lR?p6 ;gbv+XR3`@gd<:)|'07;8?Lak?&'e9JpwΟ${j_J6 A'`0`ES Kg)hyO%'i9 J#E"3RSSLDSjWA'ua~H摚O+xz $I#p} q3;!0K6HtxX hhN*!S|fy1Gx|6o3+ !}"3h~!*H>/G-+gԅ2Ѷc q{KԴ@ÈZ<x(Q.c >o vC ]5|;5UѺ 4+\Wj2)C,5`/%)AunD͛?De3r(Cvg [٘$E;3fzx?i 2gmX25/@sFUi)?{㻆 =']+mDj7SVS9.#&ٞG ]{s)s--V+ dP6K] c>KI/mŨrQ_ جc4A8~Vf͏xFlqLA17ɱ5G PZk6ڀ͈|9FTڻ7Ɔ%HroUks9oF'_( @o+@)#/z8Z4juG!* , w2 NvrkQp-,I:Xt4_2%a!p7OPҩz0>LC,0HH|~"p({8$l|7hsBfH? OgRc p0#G\M4M _``*1"Յ. #Z?2Ʈl빞FQ/IZzoM(R[D~; ۹ ?'v_ILx.HTn\tx9H2 )-$y |t<'.1; d`2r(U9k \'=C3!Xz/f z䙛%"O=!~f 94&z ! S8T@3@@/`ZE0HʴLWI.{M1<+MV4 c6BǪ yI7_S?:(tӖ5MdiEw+F B겋0D'[ 2 NpU*e|h *pEB' $sf;P! [曹Pp #[³ pd%T`̓ch$L,Ćh Y3չX/!+12+7Js B/02‘Hb-^P]K/zd7Ă@wZ$BzX! S0J4*3\ .N%_(8>K-k߿ݓLD|KRzF vGZ rk[$Ѯ{њs\EW0@e>o2+I4zpvXc@nU%{&4< 6նWdTQ(IM2DˍfHW{hp`KKu0o2& 03B&j$yEF`pe1& R0‘\I V\*pJJZ*L! Sb!YVTHJ°_)e:HgQTܝ yz !'1;#ȒE!'jD M04HL$1X(+(@cwzܤBe%HdܕEtfyA斂6/"LdT 616h$)y71!ZV'}1e2Vl%h`ʽz$ դRp`YNe-" ~JE8P r"Gr7TakQ KY&D.FR%;T! S} NloU-dD*lA̖ڋg8 Dh[TBP¯JVhWAoi/,P;tjo'A(G9[ ÁJh9dEO+j~MA1ZU5&ۼat:@;wW^tNUq8bR! S$APp-2u?0|Ɵ i}rF5g9g,[p;rp>q>z-z] K-=LG\|}0(!WT FNBX QdY'IH aR/;$9ŀ2vH䍿([%Q!5u ԇYDhee0Dip!@BkFWidp1q! S# Hs꩙SYe챗+ dDXT'aw7FEXm<ϒ$JRE)7ʄӓd(ws0 %n_rcwIgd.lv+vh0y07!`-KEil3VdU~&NRJ*Zjwk3@AFrql(" ,Y]D",,,Ph쌘ݲOE,]~w@ȥe&YbK[T{JnjSzJDYEt{fX(nq! SL/-n+P ldP.bDɡ煡 &fijekB~ydsdh&`G>P5̇H{+{CŜ!mȦВ` 2 ϴ됻(f> !냘 p3 wBS9DvVdx›"z2|=ɇUѐ C>C!l9ۄy9! S3'C @<;7GImN w;asFD?Ls?_? h;@^Xi `xX-l{,بF"3(>d)E t x>m-l3G[ӿϘ}1ca@P0{0MڝMav f.$bddxI]:a?ϣTSi:Ox! SEI @ tJvvQ„Q_?-HOg52JJg˟j3A/R ;#`85 (j>T}T0#'#q˖!ewػ?DIиa5\;v1Kux֎2aYe}Gs; aX(=[=x`7f^.I]sT[Pm tgs.OG??poR24 '/ @"~)4L@SJp#VѦJVgIN¯)! S"2RPH(.H.Ƕ5)؉`M$&1o>LasYEw@Xfj\9ʾ\0.ALu̿W$ßmA,WҐhlB.GaL<"abЭL.w=v;v_[BȯE]$F(`&20TBeV7#z{֚t qr鰡۹uj_*轧&U1,.~BCҒ׼5qf:Lj+b% )d=aL ݒ6[ɡt\+ֳ.! VȖ́HEoŷN6"(pQ\L0(@-("Ί"Rm])"`FSuIP C`(1tzk_*c⼈L6M8Q3VJ~DO! Sm6C0`,"ܪ \j~zZ4? y%fr^jIo?Kh}W8:s~7Z$c{1T& _Z㡦fhe>݆*Ɲ j7td}jQ܌t ~~t}_K!ʍ$9l.qyJN/yuꤶ}NB"PT8 Z1&}݆Xό?ˏM5w q&󎯊÷܇|U f']wD+h w&PWfG K1e9*A2Yexة4Z$)9 [-]e@.^խQV !F߂ڮ]G-_wv!P *H! \c rIJB5Q;ZʂԓEd K-j! S݅>F((TqY؄q|ܛDT ȶC[F1j{k^V,{w}2Ij,f`6XP +qo"*5Fa OP؀3ܓ\ _#D۬S+e5ŴgDqR}AU./IW.4Ihڕ)XH- @2y2rZ$7cCXT^/;m\*\h4gkX/@h:! S>V JB );HeLޣە9H6ko[umh䨤D',ȣ7[J z/!Ks&  > fV!)$Eo*0ALfiqM^KE5p3 @589Up^;VrIu԰ |.qkcwwu`Q Y,-SZ|6h?s tG, =,nm(v7K@Vj𥄳\aHxVݒ]FUN10_9\0Q&M6O-n(dt3PL_2YoǻE&9Hi3Q{*ΚM~/J=پ$ ̂ߚ<&t[51g9f;L J +g:;Y9@0,2yﳟ2 J-""6VB)Z ZҌ 1&bv0׭&~! S}>J,RT W>#PQ^],!]e~Lwˢag{ft>vua;?u~+B#8"r.d}PSj\CHǦz%gfK/ϧ# 5WpV`+|:܌Q5h 8Pˁws@   ]Q#Bu6'Q)3 s:unMi1픎"WNHh8SLѴe`-Bw΢1? NP3癜8011X\W _@2?Vvwy 5|]I D*fMHGA '@Q1@\r,CE~v<-B@rv6B&kIa O-N>A`'UQP)OOP<勢( 8[1mW̕}/X ٤x$:b>^L#T+k3+FqĽTlBo`}ɲDW k\Τx(Oر / ?w LaYPa2( zA'$%ru8vx(<jzA W`ː\< (@x)S <p \,՗}a>]kI-f8k7p"q u^VhOqC~MO\?ntxܪ@VRX;Ҙ&<<%Q+@8+ZGC<SdDFY9 Tip\ B' %G0W8xKE^f`@fA-4o~X?=?&|=@sBv60NSt[dɰ`T>LG%h㱊n{7~>7v{^QdkR pAqKB3D|Y~#;uorUО.j~sc4?PWh4~9$2'ߛh ykWy0)|`xc^R?”JW5h$rv~f" )%"r4&\KCV vPDZ^??#???????g????rMf ad< a|`d%ZpU?1d7h0PD<}>lbeaSy3yOʀ%X+=~n` c_wY%~˞?Y%Gd¥X`!JVÄÞ<'` a~` aӏ^Lmn f9z~| f5Yϭ@,<[+UU\lA'&0hpvDQDgɄ|>$\upYȄ-Z7 s\ρL {'P8B%,"^62S]R %R A ~&\a%lȦ|f1cV55c_Spt#11C%`Op9Kx8SdAoo22 ]CFgSE}&?*[1zMBM?WS}q ^j%W?w'&7>EV) &?P2yr @0/̈́.V _-Z eIov?zn'Kn'l#ɇ$jA 'W%jZa~ SaR!OW"Dap5u*%$C’y d4 v2Gp6Lir>c 8d͏$<)ܤꇂȾIv!v]w OpJ"plmpկֿMO'gwGq/Ά`DaAZch6dӒ&QZ@A@']hFqf&R%# J%™o"2 J= ڑ@o^ˀ)5!' -3u`H ؁*4dgp|  fMآ 3PL?b. `A>O:s)Ix~^ F{3I?Ʈ}U_@3`3, ! Su#IMy6 #huh@idOJ362FщC+:1w5fvz %t2;٫ZqFW<0QM<*>j2KF@gktȔ1`٨yeR^\Dygv;zj7IqIU7 ] (#,p+l  :S!= ¢h(K$*]J-w=넢ĚTxԽwKT-A% /dUN?Z}%{& RuސJAN8! S}"$D)1z%*jzǪYN}">f)EmjZ=rM0a~42p$8СJh /t/99JgN$ Jvrpr0Yl[r.yEk[ΝE-+`?cúRe%T/qv|+TtX&[7Vm`J,G".> tգYђ[aEQ 擽[q_r^.9G%ߵAN{>"3I~cg x R$k/x[cAC! S"![VM %%d|gʇU9innV?ꨬ0P^PB$I4>ԧ68Ya P z438YQT| y)4*RZ{[?Vˤ;xp:VgـZm _F_V*kZJ rbCuاv)6HfR AlBe0ŏ/2țRQEw%pݚzY鑾)Fx zYs(oYxT`iJOTD_p %2ҘѶ0ƲBA! S}'TvE h+[8ܙ`u-d%9#EXNĬH#[mzF䄓&TZ:h#%ԅ8y23+'wVv~/֭P~l%u bRW)F8iJ 4`\bbPc]ń ӴIMJZygK˭|Ǝ5,)  < (`.O$WgO%y$ %+ޘ`N%FսlFSNs2YnN7R1kX׳g =USQkyL56s/5-LpE>0/! Sm qӺ,6d\+e<"pob<ԅCY*CHDi%Ğ2bϡKMv*: Qj%wsE;&1H&EfVa+?NՏ,$KM*7Pg )=o*c (`5LS*R/=rU S%+GSF0-$v䬕T8sO=x%OAjS8?Xu6nJ?:.JEͫޞ8! Sm Eb] y:j5H%LiTR>HgUX:[=V)57ŨD!uаŬDI^"@%A(B4eo>tIrƢlRmdx&^44LhJF7{wy@lH+ h6 :%['~(Cԏޘ/iCYN@hc.eKD+:l Ÿtgc[4%yÔګojhv;! S=-#yxQ/`Pi6ӥ"e+aa\°/djSrݫGL5l{jûgF,?UR9S[(}VIpĜOgY0ֺ ɴ͌tC4X%S2A_6G>orz_ s?{̣fdBr ci*@L0aNnAW{3h ̒qB35=u>p8! E}B>! Ѐ?!L7B%қ \5`7qN]TY(qqHNwCL*C7k@Ze:)\5/l ̤N9#L.ys8R0*oF(H8 "ob)v$4aK{I0Hㄠǒ1u/t5 7ajhO{_?MK"y f S9@ n9v+%^/\]9@&QRrEW T^ GlRduTIӚ(WԄ>BnL WQإjǫ!LHL&fq 6-5(k5!uaתAa [!1GX%g؄.7FlULl-c;U}N!Y:8i6cwBg#L88eYssG]E !,-WNtYe04nsm>wCYb_.P7ɮmӱ˴—Nܔ 6XfXyiPBYfD!Te>Cb! AW ,#-j@yx 5bTez@HjȒÊn+}*ɹTW3mI9dUL &n]]2aN%1Ωeju!QA 25n9'B^śժUJ:UL\M܋2,UH"PB:Kslpuq:8 3;JLf(zWk Y}&L^jC8(0$;`".@ !TM cOY`b"E:61vf-{FzQщQr,{|# qbGθ#U[Owr(!`Mr{X@"I_SN#!iIJ)RJCHIj -஋)tQlW߮=ɻlVn} R. M42Y1l =2HTY@AKEH>nZgw06@L*yIb9oD2JCN+80 Є !Ta(04HzsRR1i}ߤ]{qg#˚V򪧠lʝj9TZΰ7BY7VΘ1*:}vW AIUCQ$P)EX{%HM1 7ir.d% DuF:gjGy4'b4+KʜEQ@Tcꭇq'fa1I~=-v*U''#2ld>9k_ۣ0w,;C_" 9]'^S8|B8Vbq!Tb0h% ڪ[jeԔ\.ïZ^AV>G*^~4K"I! fEIPR7Y 55rGnkZvȞ:I%(I7/@)6'@ dQr9@0w:$hkXK+LV$ID0$猄0K;_r Ka0CRHEb>7sTPe'.Znr-9݆~ u1% NZzS2 !(gBFW6熭~A`'SꞚ}lA1*9o\bv7cA *!bh! \(=Yuxz61ʧL 4Y1OQB71(0#OTqQGGϱN ==^*kI(~_!o<@@/A'A( b2*D: ~:Fx)QG <x(rxl+͒ 3/|l!ipkQw|}!s !T_b9Ape#j63NMIBF7%U$[P`DEG\ܿ?~WC+ B?$_>%x Ć^f?v?͌[sS\4;J;;6:hn0rkLzq%ͬZ͒ q˫v/k#3U/$~nl`|®ICL>1q9T*Df~lր%P 6ժF@2t 'ˍTݕkmq3H H/Z! r$CCw)wZ5>4 3i:#gYQ41|h@/2(W NuZ)Mm lDMYz˘A' B0OUU&fȉ 3g,é#H&q{*I}I ,Ct&!ڀZm a=V7ɘ&a1˽(q&2/2bY zǮ~;㪍Qd4ckp> ̂>U{ q^l@MA'L!?t.| Jjd=O,ͳQhS>CfqE{G0 R_7gw<>GΦ~qxl:+-t6Xq)N@3`6A' H9? ? ?#F(?lL?8%llA>-U@f y_͏RB1*:rΥOV GB9xLS:Rs!Q77m\?nf(xv]aR<A '/w5:pP}0&\?/9%Q~l).)H) 3du yDb_ xu×㩖߾<`񄿉2o2NyeV_?C>?OΤi&":7ѹxQ9|A,6:3 rA@'ɀ!;]aGKBdBL RF ȒŲ>600 Hd8H 5Rz~2vsIߺ%g" MݟcTsZD=kK[x=[q Xg2^#@p26>`_P=:\Yzo`zV@7ΏIhwQ Ȋ@o1CDrt.Zo" `(ݰu|6dZ(tyG#xM8;duf 80;yraO A[E5R;J,*G@IˈhI M/@Lk?!A@ 29/"zix1 4?@f,4(ɊhR Bp3Җ}ߞAY 3o0M/2(G.Op!G?p ȺIxYFLG&mɄ[Aj6H1{|A`''|O>'|O>'|O>';=v{9}Lh; c=01G&](:!)%`WpǸ p PC9QT. .#840l*u(`T<|B`4hOE= %ec8g?F 艁 zeI0QP7V@$>EH@s¯ `#F'9L-!_Gp-g@%ANzTH z 8ɞ???7a pElOm!L_ghF#2ŒeZG#^A` (w$,ÏA562xS@OM?9a<8Dx??'Any Q4L) vǀfi`/#ٸ[w\g]pad}_C$Hh^ Dv~ P A2EY}`30HX`úL=lA'td+LD@ &km- `z~KI/Gm>~ֱf(yc b8!O#tLb MNt<5%؍r s @U@A'`0`2"ˏGpr>s# XVw QxDxu@!jL fLw&sLlA+FFA*˻_gGXb;*ƿk17Pqa)A(}l3a_];GD-onĢnV܎2mbB=RX"&_@;OLe9R$N,)b%F<44O|rn{A !F  F'_ A"| HNC2!E,eIj7zY! Sd @( eɡDɍ@ S5wxz'^;L}*,ŀXIީ^ʗ. \5n, W,:>;妮\Fء;8#BҀ4CZ*aކfƆZUtU188pWZZ7Jq)EkݯC+轪%w>3l,z:ҎC pzit}UJ nbW(ɋ|IBc%`Y(lMӉ! S}<x Ʃ(3_ _P/*+?eâAAr#W\ug?jSp}f @p`Qҝ][_&ۣ/YٻB5!֖<\ib"|i𘇺Llf,$XNg8oբ@. 4#E%d*zh25{& @QXVJsiN@ $}i+}%oA8>G.05ޞhWʴAOL]! SmqH6 %AJ@P8M# oBdFڋ՟ǯ ht:hja[WWUx]x$4׆dN5:],`'ae ҉BAk:a)3NbPj ьF u)"[“<WEUEo1ݱ]؞}y/OsW?;pmHŷ< ޵2^ VtF?J|Cqn٣۟9 qQ~ csbV]|pI"(߬mgE=fjϬN! S$C1PlDPāU,T8L;jkZN ݮ1s(׽м>?x/nx"~qt(,8J H,H*Ȳ,:imh6{lko٣#[pm&TLPQ@Z q IRR"WI7 ЅDssgw P+$X_@ R],!J&BZ')[F!R*>FJ S/=uL3OHVΒPe0! Sl`YP)(ŪY};vu+k |T9*l3+J ?]˨1' _7Vjg-Itl cEdaֆRzyTET#f3aEU2pztkYUr /iJD$bz-xD /LqTh螸f&'GsUfA3&wj7Q}:̌u*r=G!e !C# YKYΓ t8SDmՎ ?;V! SHa!$& `+d2RB|#j֤bnKm6?ʘZT_&3M34GϪ:xxMM4"jjhk:8Z H&NkJ$4 gk=-q-S&)}s,WЈU 5{a$՜'%?M^ׄOj@8d Ìk!Kc#-ԭ#;~짍]63 s !pL:u\.`o؇E*.K:rʔg4y! SbA#%/t@BT(\ob:y2 j%^,=RGQ󕰈t(R94c?'jw`%QyR&aG.cZt}!7SS\ܧ@[F;`XN1Or*+Rİ3"*QRPfs|zs>2 -;DB$` JM-E]kv miO%f~u=kU{Qu 1cСB8Xnn?*+@! ST" + @ 8Lגtͻ_1b-ʔI\St4DI ~D EzX8ޘYNJL{Ohʾ19>P$Xp$Hq2uMq itC_G/z͜b$iJ,[7%%Vt+Jf6KCm=ne؄ @ˆ"kAauzb(ČZӯ ĭHFZѥ4u%a50)OO-螘`*RW Z16uobK&8hVXMc4! SR!(eBp@nBtytR6վw0X!4ϜY8 F7K9ԳuSY$k/')4[ރ%O?ƉSA! S̈́`(GPJJ%A%W/sүV,=W !{о^+27…hWYJ-kn?#  RΤ%˾zS Cj Isekh! BV4 *[3_:nY)A*Ww0P.8{Rɦx:j0ì,N55Ͳ :b#YfiMG6X޾  Ͼ9I! Sb!YEBDE6p@D_}FM |_2\GwVO2Z:@@(`[#i G㦼`V.N)u\$Ӝ.t` Ex EOC]DxN8WaDfC! S`ب& IY2Y@\`pqTM_JSa?Ǟ8UAb`/ oK)Mb=} 'f3d3YCOנHP@'Fԑ- R4CBTܱ@ns00Ng`$fB"AN !U[@U{!y[?1FSJ Y3;x c%od7~2ϫw9p 3y'P̺QF}"Ќ\,;u}\G'wؑQZ@xgȴdwOzKq;BP r鉰6f5Mܲ^z쳱deH%Ǵ<ؽ (zmSЏG>GR3;_Vkq[^V>4r -"߄A *SAB0Lc^;dگp0@X-ˁU@ M3X! b|B:`+4{,^ru0l3@H!A'oZ3W4^L]U0mp1h#OZ m6>ha0f:+% ׸@db,sJ~ afݦR}Ix CA 'g0eF@ <`&yDKB$I$J#6<%"Chr0AlD̊G"P;H:-͸@o3a2]1CBA@'K2QP*I%a/k -5&?m3d,@ kN6C61FwKTPwR p keE(H??06_ɀ"b@3{ﱴ^#crZ e tZ/΀A`'`bbveIlIt1Uqc^(Q#yG <(<l`*{c4#-[{te,lIϛ,fE0}gw|`0&?Gȸ}e4^4єt 7fCòL3`!e =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr8P|`#/ )T~-@/XD?#w1X =iA2 K¨`cq"i2ϨO.!` -/ODAH@EX`I@NpqѤ5/LS5ex7! wn}ʇxܢ:( 0[, )F:ml%wTU~>G|2Lr*0nk X?|'oPhDbBk`)Wp#V0FX5QA2V4CM2m}UI@?'!pgn)gqGf7,Y]٦&tEwGvTD:<~}nq|;ržsr@ijo!DR-AD;6%-3]U"t7)Bׄ+G GxZk + *êxB*~|@9VJL61D|+'Y;I/AHVf",s)=6]u]u]u]u]u}u]u_?1+ϣJZz(JE>?0Hޑ @FtPeaDb00|Sž?40ˆE0o3looE%lt@ 3حnη5YA9 0??׸^ .? Cd}<#:A _[ID^+:ƆS(TR$D lvb2M]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]d]u]u]u]u]u]u]u]u]u]u]u]q]ya뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺!o] TgA$3)oy4g&t! B*Gs1;$#i矮맮뮺뮺뮺뮺뮺뮺뮺뾺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺;|it\$W@5md2BdY5o >?o߿bC9hd-W?DId3y)7u]u]u]u]=0C^@+Qu%/a° K2j J^ `O6D 0/DtTn4g+:iCZY/x?` /5r?aHN^@_?`r)EpIs kcDn MOfphzC0CeeщHe% fa [#`v={bX@(* p-5 L- xDYv {Oqnီ[m9Y@n\D>Q`'ur#N7`n$&Fï'fxN$68amu8 .Pƿ]pm!PMpAġC|aҞ`e1H\Mz82t_<+ -xAߨ_V Ej N @Fvz_@_>G8đ_υ<&(ex jڐ OR ;_wm uB"')nj!BLHF f%5?MG]ĕ5٪#@Ɨ6ft :[#d K! w&s-` %DoUqmpk0-<秆a Q! f/%XHx# JolA5Wn0%N#me{\}G%I/ْ@:Z`K}}MOA#+NpT܂83txm{a,)y0WQ%^-dېG[?$50 t|\&݌7K{6Xefo~&I4%(%. `D #Ƹxx~h z?cvI%3ᾡ eS,F9åf ?*^܀25{8H@/AlER%ySD>|W9l<.Y[?mqt1jHQIp_˴)!62S/K%69\\;U;`Idh?IW2ɮ\w҈2]p3S9,7=K,>Pi?6_sc%B ^UKd8w/'Ê6_O 8\HŮ^V?xzz`l,vtlnu)qyu]u]u]u]u]u]e:艹ho\ɏɏ>>ᄎ뮺V5SH]u]u]u]u]u]u]u]u]uQk B`&"Q^>x WjS̠q\Zq@Iξ k?HrﻻpCBLD4`S8 Ϟ:ⲐZM7SG M/ |L#2 {Iߋ8?L~E\j0;#,XJ`Bi3 nh|Ѝ\\:JW& ݰC'+A3¦^N"p *kL ^ä`hde>4a,qWzr>8sl&?# F?PgF3;d`9Ji  DiV3 a `EbU(I(\XiV?7?KdcN>IȰ!(t8b SHc^[|zɗ1c<ĺ|` R[ ^;@0Wb J qFy\| L#?9 3Qq"+@F[{ ێٴdg0;i>d!$@G/Vkd#J`y0<,,yL^Xzvh5b[2G`i_LZ"PE&tJ " t2[6fQ WYR0"+D wH8.4s;ZHr&/@E*!4(q;e:[z$)?[Ѥv($XE34F}K@tpZ`0!BJEdp?H -Aկp:(0e3X' $ և-?raT0 p3"*^' B*8 A'ta@+h` aHaV X~,z ctBkrXс+F( }~ ׿Lо~ X,yG kE)5U.5 GRaP'?opc/C!JBEܞ ET2]ZTEl^:4 h~J*_@7rkIZHB0$:3So ` 8p{_68j,#{F4r&I/41g 0KOz@B`]^أNrZAeQ#C9]@@"*13]a3((@o<u%OX7,!`@Fۻ 7ArjjXA.s4s1~Ȅ (1?-b8 KX|i*aw=a g!BeAba1 L@m4fvG8zc;z )$*od~`dQSAc UQW.&@I}F'pqv@8 1)t;^ ' >j$™ $Q嫸^ZSƒA'惛Fgh8.c"&SD@WMs/8! t&IU!) Xp̻5уƊM q %:77|'N!3\t0MgMFvwD&B|'D !Ǭ42zhUzƪ@ e%!KAg 3ߠi%0$7nk8 Ji ˘Ca58ҳ fK@` N"61ABȃ拿2$bd@Y(Js(2ld1%8"y Uv&%N? x3eH# CcU[?|=&)<. rΈ#b {?]N~3zZ9rrн*,A8~`#[dN3œaAv4(xZ/H ƓuZ$!~;F`!+`z!v4W5aQ@r0|8HJ( |HC=c\-}W@ 7 onw5\c? VL"Ci=Y(±90iC҇w giZUӐ!2H^`io9%*4~+tkZ7&dSU1=)|e MYGCA `M1).O錈4w{ N{^,27wp Y'3NA Y# YxPj_b3!llP PT1&>!#o#8>I^߄鴏{RSް1MlR!@ |@Ia.yxu&xFR{CMlo$3LVt%2KdaQ"=q& ʲf 93 9!/( :kߠBP xN9?_ +%$Y~MƁ[:bMz/uiin!pJg$ ->C_@r0M-׸3<_ML r+,J4 $D;n9Cg uҍwv  m)'qgS yG *l.4`W@}9π|<F=[ k%1ڲmɂ$=XYmrc)?*Nwau.̨?D8 kq Z, KX@'ylWENX}@vw yMi*cbp&=+;ZZr$+;pgcꄪbG~wC$'rW0Y>t -3mnZQI_q2@ I#(fz0֠Ke _[1ӛ ,JÒ:T*v$BI-sܝw"H06B1? @e\c o!/7^Al=ER&s |S=[3Т(}) 7ȇ /u?~3hccYW`& vq^X txjs wi/?2~.b&vxo*`ͦ6hfD@j ݜ PLzÛp3*^ UP1Aը\.Eg6e5dED2@2>6 n h|0X.@%f}DK1A!&atw~AI?&L80L_@ 2@ i32}K12:^"In͗QmWKRh  g$8o\bʙ!x.>Ľ#d_{@(TH^X9dVAP|e( hǍ~M)GyfRuawkP=;@,$F>br}:ف;C +2kHnP8dab@F"Hd]dw҇"sA| v{ Rf E}Ež\=R"!z}K0 HIRXN`J)EPzy1-΋ţOŰ@(?W"Q>bw,"]nȌWk]k}Mm$f`B)P)I a]+\+>tXpנ簑 8WC8~* f4b^ |f@0Q 'G"kK Ybpdc*Fcb iV$PHO,g0\I_2˱\ʢ92 \9Bpӛ@"V7}f ,AC@60NСl*E"OKB_Cւ`sZ\d0$,Esӗ}}/ɾ =1-QwifP2%d `zp aۿ 7kGQRmK5nւ -0YLh/Ag"_t {`n B, (.,g r.Ұ<Ƽ<p .@r ){vM @QSzfWZXX3d$y>/p`(@xFxG)BV&˾z{@N8뮺6 A塝Fg}4yeN@l$02( {`W7pjUPAGf5DDaANjY!Yܲ+,W}g,z1@t.Wy{["`3rt e`f >YvCo6wQM) LQgu]uӍI4"xDk iu-bK^4#ޢ'm9*{ t>\ʳF MS|sJ `^cE@A|%@vN7?7a"I?yo.=Tmi>MTȣ2-=]&H1 ~  Ad=_wPR 3؏ 2Vx`u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u^DA '' TĂBB% 4P`GɄ|>>" f"-}A5?<@#$|#h }n \圔4|3_]|Wdit # eLĿ2x=` diM?d:e%xG#V:Ej.:C>>bK` F4:⦙`⦙anmk!p׷f@񢣠xdæoeɂ}<qP7_PA@'FH,IP( 0Rd"B|b/ /8 T)24FX\A5wU27#Ss'?t7 `eMOEPX|J$ %A`'$@Ǣ"Iiibܖ@f@-@xSsslܼYրa#HQAbh t0 px0ja` <_( s㜶a0Y3j4`aeڨa1Rp0U u.)DT"f6F`p_k`Ꮗ0Mh`CeA#25h1p݌^8hOlx8+RB3!? zdq=6=$ ¡m~]⠰5o96c=j00{ ZRRJ7>? 肫;K*~y?"[! Xl7pMNAPvuL0B=Y%)K0'4֯e^L&` aÏckZ;T,ɪw$k` avL8+UJ~9Y%s]j?Y%J>y7@,wkZȃ^H_,^O@,nE}R0A'8L0 <)n&_a B܂BSKY68<]2`xjT & KBk3y62U1 Xɸ?e6537< 8D*g655c$7)xw?B9O§;t?b<+p)2;A `DEA5 }ppb*QNfؐ7)]Qj@6#So~{mmQu+5g$7p}TߏbV&cz~|cݸ3L//ropI˝A'lTlPT21m-DQHŸoFp^GYuV`W "^c=;Sp~:jp#X ?aL٠3cR .!&f}Ϭ''~ zyv!9?N H{ .܏j+IVe0w-y hR-dR-oAeA0o~ļݾfI2{݀ QW޵A')|یDD)i7-;L낑bgL)̅@2Ч&Ǽ- Z<7ԜlF6ml l6<򘲊)Iru̸rg>(<'. Ey'Jx?{cHD .Fߠ2ɀZn_D OjeA Ȍ!o_&"~\tt!}:<dd|XB`)@J*Br;5F1#%N{,EIBK9p]H=n`E,b{<n_@˷x]ǰ r:a#FO\`}J~Z g!L6PM1-#7:E՘nZbZI[@RC^ƄM׃%Kc%bmJxX`֞7TyA0έ.QuEUsI*9El(D sϫOOuœO9芲E &itb4y'FLdA.!)hڹ7`a㣯/)L;KIėC!a RYP{ӱ6-A>A%ޜW仝>;9^vF@0)p đX Y&y5SA?H V@t3OA.ՕrT棴IE3/&.Bo%͢31 D$ /O >L,Kc,tcͤpL 8ב X&)( ʒ !1Z.4RI?SgCzWN:~WZ t 9j8Y~żk.#_?_h:>pX &b%I%Yt!jTB(06@V BUXZ $LnRmVJmuڷ?+Z,њʼnue_rKiruIhUL|q!]!%S \!T: ! S*jQd˜Z Eqvڶ(m};DZX*KSb:?.7αFl(eqy)R8E9wMd/kXUl摫U;Tm/iO6htHa|U@6ξiAANVtJ8+ rD>;W%-OdΏ CCeA s߭]gsZ=V]gZ#!,{xC.$PCsC.r= A}!TuBA)U*6)UlcCA< \nkȦ$I\9-V=3O I*~]=FK͵dUJ bNfhu(ɼ){2a k65LC(L"L@UME䀞긧e7&E xu";yZz'wx‰x2"MUĝ!f .L@$ @6P-\KULeZPȐc!TU ad沨+BɖRH ,I`ƦuӬ:r`H1[oJ dRli½?WN?M7}~[!b |-t76̪EŬm`6e$AdTpQDH+ѣS#okh_czieءFd/ȴetvl)p%6axQ CKhY]Sϧwt\p$30p/B]nƍn12оisA'D7 L\ pv(F`‘Jiy!^d/7h ،{LLL챵h{"ald]in|ж3t'R fl?pwCWƊqƠj78Gdm@3`3@jzgA'.ʠ? )MM{mp ě%|*a|Gzq"6d;V ؈N,孇f骃@wRb'ѽOGbH#~NA1x?7 ? &$d`i'G`d-y3/4A 'xS-6`oZ2scLwf 3 Bc*<š&+Uvڊèۉ\%j3u1zfx|ʘۻ#φi?Fc|rZw#bkE_] fuy|?$6@1L"x ʉbu[ރzyb<$A@';68%?YxO#6VOd\REԇᴴ)e{i%JR !$9k)f_p m'i`3cΚ hNY ʤoF6>QQAzS[F𕖈b2SpUJ(qDd%q{ԡ +dRx e`Fp7mLXalec{H5}hT]~'1 ~s3kq'7'!T7K:`Da#CI$ַ]_6f0A'~ .P4K#{HO{͈3దQI`3ct9e U9<& qOrGNLd Ip|{@4 D8-td+Aأ6oZ،UœcԪL̀A'`(n?GM&M|f\M%R+'{ Ѩz.}M6j8, ᧢"7XgPU!RsO9^E$`,{#f@`2 c-ꧩF]56At I۾kI%"bwVr(r`̩Pt#!f5d-pӽU267Yz{`t tXiqP Zcl H 0Hy0%N)7°ulݰu}71;#_p*R%JT$!yIo#Ah m#9]a 0־YG#xaw}`P15#>80; #yb ?R:/z#>kCR)CNߙR@!@3{So[J S{dSj6H\u 7tMSB.Egaϻ_>6oM`#x 6wUy|\@ԃs#-]$a^&Aܐh!8#&<":z̡KO= fX ~/584QxѿFquM k-#CVJ 叏2Cޯ̭Qyh'|O>'|O>'^ɀ=W^5@&x@Xv V ` ?^P= @8Du@E1p )EX}ΔŇaM~ucIcX0Cnf| U~iC3ЖQ@!BX?p!)%M; ظ,m* dF( u Wx K&04k}{%E'=*+ ҟ?? `v7a @#߱R0o}pLRQt:i?[Dp~Q$GnFM䍽8s $6‚ f( ێ$q3R\s~ 3Ӧ08dƟ9X?^c^#>0d^#l$~?QL? }|wK-ho& Oeu:A&{$v䜳q]F0A 't,F ߚ Bl@ ɏw4DHDH3茹4>)l0 #J#yZq m'Pf Q\T?<Ww62Gy^bAn5鍌|QXV}O*C#<zF¢]fs ` w|@3x05VS;}y1U'i7S0A@'`0`T%LauAe# a ~(x17Op5BR806u:W`6*E<[߉QGnc`0? x+!)<@`v&06 0#M[߯{iùzBUY`5n!Te hdwHBAk]Hl=k hVM s13v;̧Od1pJ˜ɗi͎ٲa`Pt,txc\t%4mbMrIB\]r$w<O:r>aMobY\vݭ$lMas ųIoQ ff[Z뒠售&" ÓLYEu+WHU0khYQ"ZfCpku &%zi$j7VJ t:@ H Y*mHK !@10X91* A(8&sKŴ@Lѿ+.3=! Se(@ RJD!~)Szr,IV1qĘ^ ߢC8 6߾_YOs Q6btUWᱤs"퉨+}̄!ܷ Z,K=GC2!3m[%+,-9ᯍfb +TvrifcM8^DY8pʶ%'o\'eF1 N(޺1鎊/LU I1 A4s+updMTˎjµ]er! SbdUڒ$̺['C %Ơ|ᆺ^/H)iJdQ j|ߠu[n2`R&Q&&zl/F((x5m~Q~ԯ 5 mT(A^ 0|jdJHgK+T!v ehqHU)'f 'laUidS.]*M2z`b闩J”H%&XG! SE imJ-ݦ_?ۨ1LSN Ig!c H_aZ#RjniQs+( C˴'0??o` 1^k2X%G͠961$`(5:9C4=ylmx;T%9l\+晨M&UY6v >;_*wu!E AB0V#pZ7./ҙ]ӬS)/z楥8`(Ri,Ddѹs|TP  ! S}cfH8!xDŲE>nxFklƉ_|0?5 XIjvĺ? ZکP/ܹlW֤w)*ة܈.{V,Ng2~;)dޝؼtU1%J-*ʐV #a(nhGe&^Dx& cIf d+YNI*N oT[]0*ҰXAlh8!Wu+YBIRv StZ1/nhEtbrVkR ֳ!m5Qt5! Sa$ Z*lXOO,YXm?_Xo1+'@rMthh9t[tt6ں|S$ZG$> 2vlUe3F(Kum"bdfA)A&\hq찗.a-ӕ\^4nY(6P _?)DHh! nmIҿa~هO7u^;O*)aC) JW2geaD zK!,AT˧: X0 B1 -=`d` HԄ8rWrmH-y.7+K0*C|Zfm6mx! SmNDS0P2Զ0 PbR8lQ ~m):$On>T : XlmK̆EtH1%ipF1yQGy{Lpx(q𰉌ڷ*i"tF5#0ço8PBΨ"[ x~u%Tra$+zc  y! S>3oqtweQlDH* Q<_bztӺ"r S7myplZ ^ܤEbzprtѰ l+c[hxj Qt4[M}V{^lAIx;ZK;*dN˥YSJ򃻘 Mv0[#Q)09!dBsL5k>P AQ\'|ڒЩi'[uj'/ծ' ukuU^ Fu%dM&iQ:! S0CF* pϕ*ϡph+^pK!\Kpfbjdd/,=Y-%Q hh=!ozw!tt]/Ӡ0buBF\[~`> _" %08m,U@,ְ]TQ@jm4_JpB@45TUeyө+HҜlFd-iÄ)4U`! S>& t P &PgvDgCF_n[Y̍XS09D4a5d- xғUx5H aTŞ L\Ah_z#d\ 'kh$NBdW\3R0SZ M|5zE)Gzh.!|Ust^ MQLCbB3;+BhB>ȸ@^ %$HHH@P*D+4ndDUU$cVȪd [klॏ! S̈́$$@*(8E, 0%7l&$ u|)7|3 4ѳL Uk7fvl~VX`Z: = Di-յvGqI*ĹWA\4xIDy|e}das<}Eo :lu^Rwu` .PNWqzNjvcv@&P 97v=Wu6KM-! Se>FX Hi >LiorՆv C_"7M#k/-"b]}8ITbSԋLZ.iS̵e7@otT#~b';Rt4o0K4$QaGDqX\HIR5%MȑH+g߁cID H X, "&^pty4mإK[eIiI&yN! Su>T@-]`;A y=<E5rw4ths22?>-'c4[xJdÇoKŨ'=^ X2 @J M{n`SY`Wxu_ ' RBKA("L! S>F Kt*2ҩ*VR SS^s;{|m*|';\t3Zʾ d{J͂uaロ=nVRFf " "l`S#: 3rtg~U ];  pȣiZ/j$U.B]}qB c:mWcB ~t,r߉xN5FK bP/o4@a% Md54yj;ىFA`'LADjk@,ths ˜6MN#=&ؽZ)B&68Ǔ j_.1,HB _@{°cxS8_< b~짆Q31L2fX3B'22"_@?+kM w_dx A'g0M0@ɢdBЦ\5(SnCha=iQ& T#' <x(lDv z=L"r_(x @nR_/w/7w~ ֡AܜB|GX1@X L@%?@nu@"=0E4/7ð n ɀ%=I^WGA"ٞK4 A' 2@cdh*O;!|8{Fh2 H-"J?B86 G7O;mgV;,l+# ~RΦu#v+=G 0` ?|Wf2W2LxL^;i:A'Ѣ y)Z"Aq\5_؎X{#M MGx 3Ib,Ͳ0Co!G Gq<PH*****# SAx?Ni_++L_f2 ĀffYvR6A 'Q6M>6YlD peO*\X`e pSGp'O?s}iaВ:qFEZ '!?/NC~ih<2|i0 ?'9ogAAH;3^H9-L 8 \A@'b@+h T@ 揸zB[F#CBZD5|&<  ͐@ <2~ ~~"8(? n7e{AwgB/3lE{p A`'B@cq@q `R |Q>a >d"w6r " V'&`G`H''cx'?r O.%Dg RpLɀA'$j2` Z#E0~l`4#J'/@#P7  ` L<` lx?"2 kQc&<<=!@`r)bP80]#"4'JP.t>!XAf4b#2?>WZàmue)F|009<`(&kKX?&Pk x-ABc{E0!A(J>L& eYcl$'1O4px*{0*NZ|M >>'V`ADv`J1v~8xz k\QdÇѲ0 QV80-0MЀxcj"$f1̮@>hN,!`½?cv<o0!\zl?D3Noh/fvdl76(=+*4{ kTRJ60C"@m@_`ǀpE\c0%/rH?GG?y??;?????z?????\&p<xo#,6Q_ ?'1SLBIi6L'al N&csY Fy_PEON\.t9PKɀPl ʧ˕T,%y%c` ay2( f Ǭuy/c` aQuK00A'aQ<Ł `Kt&_ Eil$6#=uRlr 7:'=L;BO6S6Y wNYSu=۝|o̢>v"J?)?G{~c=@d@ Jp-2a?<]ހffDhx/P^e@&z_?(/o.O\NM<./&|6;$GOwUwW?0,sל0\D^p2A'tU@ `{*P n$|: ,LF!0lg +B*"~wǀ8. ytQBW8Јsd'CQ{:^hГ|@!g7dXAtj!H@@Ԩ䓸ɺILuUUU_-krk_u$jq%A1Jo?t;yr644dG [GoZyqZy~r+kt+ckKk^l7)k@Z=4m6=5͸?\HaT F%;ü;(_wnJ}; B׺O'B/wÃl\Ogg 8r+,r'OB:3Nww\A_ܞfKGn|i0&q){>OL$9?{Af{? zǿA &U`~sUZ/}x#z7`E ~*$jSYW JCwɇu¹m_$hTGZs++vTn b p-P~.퇡]ɟQq !  cx̠|5MTjp(W48(ƣj(`-,Æ0*P!qPR@dPhcaZ%%(wbNlm*y*a*dBO^^Pd^j|RMZ,[bhD h i OZGDG$' 7/=fւ:4B ƯcDŽn䙾N#Y8! S ^)f" |mN|+z: MOCC8NpESg0C 7!y%,!i$155gŀteVG-ܺ\g:B"ZCﲄl]9׮Z,F: ך_[T 9w9,n=07@ +1s}KYolzE8Dztvv YeSL+R#KW54O>34^+_AiFv̫N'! S ndQp~JJTt3݆N˘> AIǤY0hDRK <?8i%bPuݤS erQ>Cr&rz{]K? QL/ϖ8DD'7O:;OF1W˜~[ / DzF=|d!0RaX)ݲS}6@{RX["d1ޢvA !YK\L O<ղZ^y6wc5rG_Xu`F{DVpO[\q! S!%%BduQ~F2=wK,r F?EpV҃ BxfvD Vәt^;;@rxXE_ٽչըͮW */GKo 9]/gQ\n逍U+"YuL,%$Z6[<)ӂJ P zJf/ S%!lW LrLN*5FGKt*GħNO}KD/j4FzO!W3 oG.` Uo=67mR'HmϯLU"IC,/a- PvRB KI@eSP@ hCJ;! S&iBS(BU2uu2&]ua2ZN9׊je0(sBIM \I./`@&X8~ -\Zez4]|PF8;wm Z!L9Ja][n(ܵk"?RI@ncPnX-E~aE"dC+ Aɓ.s;7 EuV/4J A`$Voj6R HG{tmF -z! S+!Hf!S ˘V1U;kJq~9;ñZOF18TB4;l8aV]6z783lƲگiB|a3aCNħ.3MݱSi4'G=|t6;ݛL/,^"vuv;tva1[|e=AR*B֊ʣ+\|Մ 9OHaELR<^ZM7VYD-/! Se$@C6ABӴ^^VԓHU[4K0<%U{DO7xf/U_.JU{˷D) $`H*S1$D8֪F_h` +qCHKBa[ ͏ZV+YGjD/uk6ada,Pߊ0̰*˸1W('2z;瓍zWq9aq ^&weLfgh\K$%5[3 ԥ+'0 3! S=-fjh&Z%Kk_AOMMGj0<؉ ւ*,ԷO..Lz>JHPuPXȚHR,xrdӫ)po9.{IЎ'9Wηdcs SC ”Wa@ $xَV˄ KiZqڂ$VRK5-e @ y'!"X ʄvD]KGG# rKk! S[\ Bx㍁;,7#scʊܠPUZ"Ca|O,6.{6svWg_>#hR런ݎ\mg݆ibbL>+4D`2օQkJ:Lk4}p\Yʨ4x/5לW̋y%*[*B-g;|㗄0w6Q*Rko&t Nt{ri&2 rap`J|^u[%:b j䭮X`l0"B2g&XP%i/]'Tg1aNRBZ QbmK}1dByI N,ma=ZvW4Pڦd:s % yҗuΒ6!*S+)AtqO=Kq}H1*_|_Z2΀>gaUOp9VxEB(Z[\@cnS_Zł8.WJ f1ؼN>\F  l M"TkpZP d7пof;jB֊eQjҹ]R1sr uS:?$g'NJ@=2P}al-!L<ṿG)uI^+>b S4zKq`RI@k e&C?7b!T}@QO}dt+l~>%-Oً>i 9rȚ)Y cF 0:4]t&!kɝJ,`Y")^$Y@R7Ԗg&#u͓I9PjEfqlÖ@1 Dk5oA%= P` 3Kg @c=A4' //gzepդ$wωCʟxTQg!LG.@.o0T@[4WZʗRP΋KC`FXiԉs*$HOȽʩ "X$gMn̞ -(}ˑKhnIZ`Ǡ'$_, @,J +˯:-CO.E9"WboziQUj&ɏwi}՜8qCsw%R1gr"r܀z c:ߥP>7[%}!w`֒uua݅0ߵ1LD+ bIvsqZ!3I#Hp+*[@ڰѰ'im! WlP$0)6{o iHWJm\ZkR,f: f5튊# B.|T7禐fP9%ֆ`DYtXay3 |W3>y5 A'sCsɩY}m4낓]Jo 7 HK6OFb1Hz;ڔ 3b* cDWRcpA4h ؈Lj݌'5WWG&?2_n17A^~I]`9`A '9f$GATQQ7U>BͩmHQA$iO{X ؈ o)XwfAy2kǐwJfx^a,S()߁J= ;g^H; {,boj&iX2Pʧ [A@'?WqIDoP& &͒ A?l|LNh zgDEk1OSNd'=J+4yL8)I2JyyT7܌&uw{2~1 qxK*cc7,00A`'}?ղy@/3`DFMm#.LY4r 69vyD_jfS7+[j6>hu_|0"|#E'8^|E?7p*A"̦}0Lb@\7G:e^Lt r@vπA'l^.S6FM $: _y#,a)I="D'͐dBz멬lfi1pcRQbc62 f\3{8yˢ!#Cz/CE$0Oֿ l:>y*`$=i MY2;XI>}8q ^m{ A'LEm@Ǘ̀L*$Lmm4>%r$|wwc1UXL&46].TƄE?c 92IW>O?1tOA/z>M!O@dPO־ ;} f\SC 8O`8 L|o@A'`?!K’sX;sPom4LB T^Kò)#O?#J_bc P6{żl\TAsnZfgXv*b#: :Z'?EBH|-P>Ўs'~ ,~<'<䄐_p +OHژ[)! "k{A'-ӦgHdm@ K@1#x2#x@8Y"gHxC ņT!pWt@k.@M&ԃ(!PsmW=`D [ h'ËqͿpki??d?5H~Mh-J@]B$;2=nBBd5 "0}4z~Z@ ΥBΡOaTnhIzBW!PHy4X8?߷pA}DYfw+]a6VlʤYA_w,H *R{LC֠(s0fTg: ބHV Æh4dCػFe?e%@7ΏY{WE f7!P[M6ir{c`t{ccty_LO#x Ale7tl@"rO<i\ G'bp$ m)-ǁgF=-xP80?Y87#x7#x7#xM;s1((lYI@.pn>tE/>D,x#[ey xjrsA8$;FkF!'|O>'|O>';1_[ L߀KpN @A< :[nV; )ii@=œX`P90;L yCpqw** >Bi06eu!2$tR~AEЃ.@!B:`)z,xGLtTi`.D\bR}@?C0G<;0l+k\ x$Q\c؉ ?V qA9?? xP<&„"͔` 8uL(S!$y!߀&pp"kKQ#x y &[&y>g B*Es󴟞t|p,??O|ϓ7<ڏ/\$WÀ k,j`#KJ2ˠ|+.@i d囆S,C,_MDyi>̦}GiRᅁAVP N%^33b S0b3q?$ œqgnݻa>a.>~=(>zg"Ya#( MDbl^]nͪVvvMqWQHHMDNͥH-M(Hdc0' 1,hR\E&s@Q h~}6YrJ1K e5VG xD!V.؛p߼L0UvMȎb(kP) wy$YGvbbI OW]dr5b4xnR$l  \~Iՠ e -ٲ؆!T=d{Qy-K\I-#CI0R;Ҝq2+dljIxך o5>-sHQQddF!VV̸ePjUъĈ~-t%箬bIn(iXV6T}p5!cN8kX%lzk !2LLT@ ;=&!I6ʪrtvȁs-ќ`.X)oSvσo7}K2r~0(b cli姸uL}}o 5=(ì09! S͍> ],K,/sfJVo(*swsUM67nKpJ"H;! S8t @E+Z7 Q?s߸O+yjULڞZj.*B7JE% 鹝'qKTz??j"d |b1Yhq<\B Y+wxlAݢA$)[£SdV6[. Z$dH.&J z2@ J-2U14Z\Yzi Y=uZ2=aaL|+ %ҮK8G}єX) دu\! S HH'GR6,(E!<:׮ugBœ Q dê|y5:orG\m;+‚buW_~x4Z`"Zny`ÑJL)d]GZILJR Y."j***>#]N7U8#D#A6CBڋl]K$=5ap͍֒;n;Y7x0@ iO=oVQب b UR()`!Jd Р2 Ѧ3&H)\1V! Sb,f] @[*o pPlvk#oiQ>cu@+>ճ Ik*U `]UYQܕhv`K(E,FƟ]@-@kxJlF`Vbymaغ\+|-I{wT.;':FE{%AF\ˌ&EN;g#3 ,kgb:ـ@qLXT@Ey›ezWxCdJE5H\VEK jBq WX%}T! S"F(s TRi ۆ0PO}2ph(- ໩/ /V͚sX +#ȸ:{%&"|y)^0^F:♞x(I[r9Ȩ{7ߝhW^nb^ tJ[@/ RafZͤCLi8рQ0 X 6 L Z쾍ݡ˯Tk$f$Ew8|JYX#&@~/B'! Su؜, _T|puXr8ҧ?},^Ymd3'Z 1_`m;{@vq`3 ˣAVG?-y*:Wެ7)t5QUk7Jgn -7:]%IrK^8u.BQd <"P8`@Gd&V`@o5Bub?2|$N6+a)!-\-3NەX! S=ʡL@V-9$b6@#*BTm@U‹g$[Vq ],$YD*)BvYOLYEU6sL$L4ԹU _0r.'{3$nڮ)9 Μ6Y- 8TQ5a7>A nH8m{<,)޲Oϗ|ȊYMhQK;(F)G<2` 4A13 A$^$aiJgj͵2+Wk#ha)[! SaHK@1H}n&.͑y36|H:ͣ1w/>^ruL!:Y3+6~f34fjgC 'tLƳ.ϡ0'f8cLNxLhXFayï3>`24IQ-ccaŏw)v^q!38|K0fٝgú6\$qa:{B72'x O$! SD DP"A)63H0 0C|Q.<':5}f]0P(^34adf]ܷW6l-b6 l TiiHy<BM QgJӜ-Ӆ!8LM^*Ս*` !mW:ND>ǝʣZEl#l:%-&y3z"`p! S]#wX6%-1~JVķ% {7sqD-CY "[dzR@SVwx06y^TiU*V ']#7[ #5N}:MH jf"0=Tu BA9>l붢 W'`[(_(K3 wfu~ڔ_n$nÀ-B'rhW=!̵0 n~ؐ03",{Yxת! S!PZ(Kc{ZhGB[Oau138Q7 [7{GuE9ketDsxR| Oߡ'`1@dnW]Q#*+*=u-L%u+řvURNdV=nxD(p3i1p4kG+!_CSI 斨 EcG6` x'VAn_B)`y\1)c]&Y$ԱDUi\"0#k:ABӓ Eԍ)a8! Sc32MdE҅% T*~ JO~^&MG]宊+&u˦ pę|eOv],bW^÷ Mz)_Xc3[rE5x9d*ˇzN avö %ƲRGmi:W%L0ު|QL{( .@(`E-proSϲ!ãꃲ ꨸I47R!kBUG}x!(N'! S}>f d\WBϘHߐ0Ch$F`2^z6k]Zu?LƯa*TXC^2Agb} vdc(DPyk{ZOxi޾frP? GnM MpFyKJ+[?LFN;K, G<c`!y`@#5m,x`AuR2>SM~t! Sͅ>PdP%@PeY/}gNse#KP TpրtD-foTmx{VΧZv{0o5#eX0A'Kp%x\z{UΟ6]ѳh Yi̷_i#oؼ² w$ R{O ,+ tMq[? { 9?4O@[ezLxQ+%o~Q9@a \DY^قiTI4-NE32ź!? *pA`'`0`Atܢ(o#1#k4>gy0~ٖJ/< z `QI怇!)kLM<> Ex"O~+' ;6H3R_ldZ 2bSuֻc(Ј͌G{+}1?'5Cf>`>4!`&?A= J1hr= X@3`3,2A'8͕X!lcƁ2N/8~?Ց_A:cr#?){M3A)8fwoofNH}% KM< ܞ{(LDN//07T-^J뒜8O?Oi5'#׮auNb d%)6:֘0*fwN!.4pQ;T±ZCNaa1'>G!0NLʋ#9Em$`nU>L{˽~hZ#ΡW}} .'nu9X|'q#X*mݼO;H?oJ@3{WYiW̓+Oq˼r ؎U;17Jujɕ _./ǐ Uk..QI~_,=p~6yc|ݍ# rhhdxB]&P[l]cj3ƤL>+25u?ˍHU ΦnO}. X xK@ZHDsۺtT#7ޔmgq˗2O-]𕕴Nj}d6;nX@ɕ|0 A'oA??F33a @-H-e7qJ?/!] g-7wwwwP`f'^t߈H>eM{[KLJZ )43#~ 1~ A+;hG#xoGpS }kSc]pWHr ..kHqQ9h\xϼ_|W!GkMbA'g0M `!p@bh?D)oZIDaZh~!pinQ*$xׅy{V 0lD̃fQQ3 ۈp_F 1Kˀ͉&R8ݻ\4C3Qo{>眾y'!VWa5c>0u_/גM#78Pihڠ[ A'@,C!I`Ri!H)rtĖ(G+.n=G; : &Xm͈p_):cN nKFkm3d1YLOD̝L'EedC)> zO'!"IHb#abݲ6xk2d-"xo Ldp~ZLv0PA '6=̇CԈϕq`u`pak?#~6A-L46&`RqxdG?:*++**++ L?c?Fg0o?} w /@3`<,"jhfA@'QP]h#eD#3ӧ%낡%y r$8)QG%smf<lD 70-d$ l3b;v*8RQ^#y_sJ?3pL>+?t8$o</fc-&KG^H C3-ˀA`'$?1`EAܰo}0?B`dA$4i/(!$̅3m $Et'6?X%?rlv?;)Ƚk~x? u H2oh/eaY4S2 A'6tD p=Y3)Ұ.rְQb+9L[dg(*Pk^Xx'?GzpG ۠? zUyT 2akK] ɦF;dA'' $G1H4 Psyz(`#h.|// swQ\n+P.@L 8x) <mk>RN0+H_{@E {b8X1~>7/Y\g_9gU:.v>!YBLƌL_B[#@]-FasxM?Qq++ÄNM` Ȑ&M ¡q?nNjpj\bOО,y9Ay@p`B&G=W?/$Wk- |Ç؊|GP-㇇]JH9B< ~?/c x Y6 zhOo&qD5*Ps?#}k`!L+kHݯM-v=6F2Ԫ*yo8K6 VY$fDOUpW1`GDɡ=]~rCv=f 8J8Ew Y?4#ky0Mxz'L/1lR%s~k"@AUO@48{#0KCV"c ; k O\  N5YZRL_`WOQ"pN( <2t?c`3pI" /ޛt->3h;r[TTF‡z%?s'8`Op" g!yuq]?Gؓ!jSo~F*Izo;oկ/䎲]M?tm\_F?ߣ+gm&cMkkW)wE)SpV7t`즿$c8 (! Su TU*@u Vq{up 0<nW1{7SSɐ~&}0xr4>c \k/ ~|rlP!TZ+[脄zr87@{*;e$s(XXDZ.ԡ Cep@)o5NYnX'=T6GZr4׬z8/7>ҶNe! S>QX-J%?&ɺIpnc|wi8CBU3ڐ9Uq.\0xWׁ#ư ѽۧ" ,# ©"@pEfX#J"|^Uδ"] >(@Zʄ㥾oP:QLyR?֮eoWBP*΅ax۠I!o\رgclR ]qfyCV.\<ҕjRa! S>&  (,ot}>4GF3Dqt6Gn+}Ì/OHI}^"Jޭ_9V7o^eXr4' /a2!DFfeNa8޽ ߨD5ؒ@g^X~%%Ѧ>QhљtZU/JYDeڨh6}{$[L$n.voB0IQtϪb涢Җx"AWީLZ=@gJa\ Tuqhn7*ͫ- >2LѿpJmj؈yj Us -ժ 1_,7tj*54#bN?sb/izpԿSi,(N@0<uYݼn겲 ^V{SQݦkX>h.&mW[9Mg& cb`ȥlx8aڟ,] T^yT IVο&wtA];aK! S%(S(Wex`Z*g5+ˆ~iI xf)2&uHm|Z M,Z=-gZqar+o7h 6%3]}mI:ҳm|i O%iԭZPnwfb]ۀP(ĐPxXSwwRɤ2eߊAn9,TjhAeF fjo֍/45bCq>Y'jJ31HB  0ڤ#DXHy $! SIP$^ٳ@(䠙agBJvm-;&$m^Dw4ؤ' <=yyn*QjG7/8ڭV7~sͅW A=f] b"ؘxg"I_;ˢfN!zdG[\u xTxC*&5#f˻x l+r 6cF Q1iA5 61l3kj|FW|SƖElu:GE'+ ʋtԺ{ .V C:U3SS2>rept+"! S}&̝Ҙڀ-B -hrӪ}*K4 m5*Fv-l)}K779N R= CJG!C`TDopXL5RYj {O㖘71vJԈ313'B~DJpWwVo#8XϪ>\f,db|2wV#͛! S5 m[(Q$p]UHw5$j43'<j2مRH-Ko@Hߧ|W.ҍFsd5"-Z'3;JNgk(RW+Ox$ry(j =ir;J e(8&+rye;^ĜL3B%gJc.JvR?Ԛ6~D YB`@ x%w[ҽtWVj_FZp! Sx#" 2cy!eG `y^0t:  5pPɝf6nfbSR 7 `|7'Ag>Nß.pQT@L8_ -2_۹#&I2MKePKptIC^,2 %WS/8_Ks?_œ!! !L؀Vi/@J*NVH@7|euxal]\SN^8l0\sy譒7Վ )oNE|ì=zG7鑭?O<=*csҚ& 3oe\aXbwro<%bjk@* xγ S$õ{8D_3y~qN |z@6׍m ?l7yzϼoi_& J ^J90K̳{i+.;`U0ٜxڿ9v!LI16[3}Rr*0AV8;qYCI`2 G86m"٧` í0 xBϧA{7K+]|bPJD-?|>)*AXP^e8]8b@פ/W5~޼3i΢I_{B r%HH%P濈taG>);c2OtUu"W# ^⡄>soPؒ7x|$']f{}^)7B:1{ńz*FA(i,CZ!jTUc!. rj=ג[)+j[";"]Kyr/5sh[ZC,حDF4&g26ʛ:NxmM^xRKk5~|;QWNЫմ5}CCGM_PԥD(QcqR6,K]zz_B q[zE2YM8?b@zbVd (O܉Ux?\^)V?SQhe Ypי@P!T")A1P2+fUUpZ/HI2i%  Nyr(f; sD- iԹӜ\;]`њ8Q('XɌK3FA) 0h RTѲXmSr©ck'(# *VUX5t"}i]겥52UҒp]U H-08pZ7RI]{^uKL "785;-?|ʳMd*iV>A'R?P,J@@ K , o͈<k;Fam+!!1*+$l!{nۛ{]S-q8O+ >~2Ω1c)|EJeιza_@AP-g&Aޓ/ V߀A`'7M%P& NF#GP&: |(Ql ;{.ZbP+Dnrg^wiKLze%?|MkZۻB:Nb3:}Y%9BswOT6&Knxn71`nLc$`DA[il¢ĈoH eE [)0 HT4P忱&~Wb+ +;\u efPQNøu2 y`'b ] 2xВۅ!0 P{h?X rK 9l>Ae'1$ 0], 60flAs,YWoʊǼ/)068lFAf#|BHOXy4 uXit\0oV{({9nL~npd`끊 .4>TʥaCԚx}`g@CxW%; _ XlG44gK/ o@̃0D7hf3SnH-T ½YeϠ|rZ42^D+U#U1)ʁjsjPaq@Dm`_8B}Lk_d*](7}X,Rå!^B>뮺뮺뮺뮺뮸6Ll!d쨿WA:뮸u0V=H?,{HG 2($F#3'7 VCxJi #b9 oM(OkwDNη5ѷs\#d?ׁ7))L|>I`0˳1a|xMggNT7_i4QɄg] ' kD@H&t8Y_]u]u]u]u\w4LED㲩辊]uO]u]u]u]u]u]u]u]uAPGۊVOXL/{#|뮸z]u]u]u]u]u]u]u]ŏ&뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺 a뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺뮺뮺뮺 @V@ edr2 YK[[ێWVb+Wf^g1'3N^]u]u]u]u]u]u]u]u]u}]t]u]u]u]u]u]u]u]u]u]=u]u]u]u]uAYQPwY!j`kk"F<f0__oKg<7*(`OY/̓>_/rBV[I3 ]u]u]u]uO_ 9@3p>JÒTW}jb@5Yhezb`aׂ6l6@ /CT_0 dġ-[|Ӑ!2+LcƮU\ T/0P Q$E! Jc0hg3.Q xVbĩ%| f@ 4g)@bq0 {19Pg!B?bRAvec'Ҁ 0ʀ!!0`uoR`cT׀4 hPKB ΚI >$4s}n9C\,$m"`I!fxK8㬄ZLH `YE$$~<<+ 3 (rJ8'mYdO !C`QxPM>85V da(P_#0*9҈W"? vʤw,& 8%45˷ ?F!`0J?ºxtm-Xl0V !°\@7 ቜbH~tυ<&Ie=mX/#rCZma'9OcǼB`F診0auq׉wQƍdH/ii?S]3F/: ‹Q7g@^%tuq?UK pIdj <% Ût1 -A$?❺*?.;kpNKh r6c3 2 'L˶VefD@43[h0Wo B[k9 +e$aQVyhxpRhi%Q$J"O!?37V J68zݯ] u1Y`*so 1b!)=I JU*J?pHZz5LEyE7k8~=6F6E_CK  E4ȏ#>q xpV:܃Ç5햎FO" 2 7ݽ6Xеd$] 242I,º߾"̠q\zjbDTc Ѥ_9`汐ӊ72L@Y <֘/t)h#&dRs ZxI#B2ԯpg&5U*PL{"<,`@Pu3T"{Êͧ4g|q0wW@@ PXzQlfB{#M]0^re !& d\Wp!& Bu+vn)ea?Ő9'Cw&<1e3@lb 3_Jɀ5_f&~_BW_-3Dq` &M ؊y%l  ${? ,ayF!)0@&v^W0h:X"d0p2g$f49Z L _13#k_?\a2<'k K(ݯ0>wW5LhW$v`f@8 9_0'|DaCq.*;%-9,t3x%˜1hjT%wbf4t NEQa%l7j<:8&~[|tcrpT/̀#!r&M Sn8\"_YˣF i `i^VCI|>ܖ"ɂV_X*oCQvzf"t-YPX]@7IF \#9s#jG$(NH`1lvw?\vׁP %v,,ochѕmrz!3D}DDb@!\-9'%N8𠔬}|E -j+h 4MXlBiF ;1^р%m@B`]&>HNrA%2LWc9^6LHS"'# ?*']F: %j 5 CނRMN19 Ζ(`%@pLƮ`OM*%P 9`CDנuOoKT;.\]px;xDA,R#!]G+Am!h3œCG"MlL=x j@A?o} _$!~_RdЋ@/ c+.G!(h!Xc\~n=Di)ER;yy6 3?10i: =aXeAJc9)02*S:N5pZe)"C, jcL yGܦ9nr~+t~6zi!fi{& 5fͿ?< 6>Cpd`eOL(K`BdAi4|I8o~OC Y61+ <=PI2 V\p/h0-SнCp/ pK@D Tb4f[LaZF@%B^`z_a`q6|r["==/*G 0T($5@q sQ1)U ǜ9haW+lee* O2Ss>a=oB+.õFHRQDp{se0{2]X}x3;1!(N{`%Sv@O[U'wz~m GjY4x|p>Ӡ#- 3 ,MP1d$L~A*\d߀5yu6H}x3<_iMa QlDhH~੒A! J7`LkiKq"?pzX`rـxE_MlW:%HXgjؠaSmLӮ"8堏f2>f6;x7\L 2sɖs5` $wEьdY;>߄m0"ӗr5 GO`JGkB#pxINh+ r</Hr6?9|blZu+`l9i"1JP:|ekH#(f!qTZ4h H`G6`@E!8[/ ^[`䝄5z܋-]hUE-<<9'$#m2`^7R/kO9L8S'ȇ "_4Oo=pL[>Q_@]507(ӻ%-6O}`0i'pt~1Wݓ04 a5&W 1lm3!D0#I:/ {&SV{/,V$(.~0 uL`waib9aH1l!" vB`Deoc;#R#9?d Cn ;p L]_ ^=)2 }% 骮Fo+I4m\C\tπRɘD`Έєf>c>q?JdZf̀`~" ]Q  9'ug;0$-o uxG':@`Ū+N3cקۋSs|_wi#SNX{Ŗ_ C08v 8V6֖(Z0 H eY;25̌p G L|'hY?X eIQK7,]J$cgK9xRVڂO <~ 06򟀙B83nX ?}D*ffZDlie0_ta _{C&m)Lh:_nN$B}rbۻ?A꤄7g'13E[ JJQet+M3f*i*sVG{P:%~4jU@?\Ip0p!S?oh;0V>=@Tx7~S_oϗG ?(w2ϛP8@9<8oyeA@'KG ?3+y1%WNHKzzhBh'8"y)V 1P)Յ͏ ||&?2&?ϡPň'0cF$cC챋0 VZq-|) A`'`BF?WnCȌQe#R0l1 K.xxǔz#9wb4t'("y)n9x ۃʹ?M.m?Lhl;4cR dB{GZep4Es wwPo<@eL  āF޶rג 6 ەPL)M#c)>zA'tK119hT.4T0J)#E4m4_\@<<ڀ͒ #y3xl6?ЀMxIolkX0?G{?$F#zy~ P Cx=@52;)EfC V5xb|}ݕkmA'ɀӝg0#C%4F>#xؠp @>@8Av@b>GǞGjX &.SbpiSw7z m=6E40pΰ0fxƂ|g\oo :󀀍&)u!>pG!!21cX^a`¿M@NP3x$RΡOaTNc1B!r {g @ø*H>VN^8)z2kUz'{"i%JOw&!^g'pd9LfTe: ބHkNVH!][2o 3rG)hCv!0H $d MP-M}Vɝrts-\bI󘞞I.1Pq#xh%Sd8gig8 ?-4@GgHY?!@W_\JK3:I$I$G#xFg3PRL$4u1Le_ q?`9?9ok蔰#컺}qG__}?{әM i?ƫגPL͈~6A''|O>'|O>'|O>';Co:3~$@>x~YN8l0/>LhO2P 8 >K2CB=iʊPg46e+00xC(C l ҔJX]3@!BuP! !,@4X ? hxG4 IHݚ* с6 bj""z@$0Ln#ci@3 zI?? xP<&ȈS09@0Y-{jU_o骅<-DV/2=& LDZX2ScTYd_oUcM*@+&*dC|QM )ěMj&KMiY-,({dhB!Tu: ET 9"R xݞ\`ȭppW8|i)ƅ9g.mqOыj,F iMng+bu4m'JL/-:w, T Sk# GeTǓZ@|@a&B 6u$ $QbэmrR^iey`R$3kɴ:bn4p%~S-\1wMۏ{E5 K7ۮǿ65&_J癗ْ іz!TUc1H`^T2ꤒ0"`D\R,$5܋T2 ȶڲ~`;k" `ZbS#ݱFe(Kv4H.)gTFm#j5gjVިsܯj̈䉰_EcM)%ڪ5[N NUV}CM.VXR( O7'}UԴ,#}ގVEVD{aj3 h#b0iT πgX`F,?Ua28Ys0o(!T=a©M` rNnJ%7$)9S]b]%e0S߷Sg0?2#nٻt4%̝ 6ҦiwA]) ǯjK1`nta,JTM:5-8 ,B@ߣ uQt `QUW'3BNJ͉ƿe|`Tŭ'w@-N!:/5 3gsϾ2Eм^0pUTFaW^9'דur>%rǮ ԂnB0 !gZ!TEb@X˵U$eq%ʖCD,-n]3.dqFgJRqrJf¦/&?Ӹk2!@BRh~ !S͍`Ak_A%)tR8#,hbt^oeگiƂ4yhdZEs+H)^(A S*[{q#7>TE-e}%BZeΡ=pM&~e_u. НT'i-#VП+'FX׋P Byc/d;[ԬJAOI1u{ HR@E 🚗T  5Y\^Z-3AldqPI$N~ۺ<ύnڌVw;2]mLGo]ЕT+! SŅFJXO8Ir 1,IL Xk^.-@ uy 0T6CaLU469側X(vRD4 NQ:M/!JXgdQvd7PXت0G6 'c; Ut#baMig^b'QQm2^twS#d&ׅv ttZ'ڧ"\kY$$\rZgy"Rklvb$JYYgeN מRWC"g`"Iv \hR&2|;! S}iJR&AW2l~8J@N+z}W^MNcƐDw>p_ ˚/Q #ɟE M#[NoSڣ*EiGtEAibEm/}P8 rɞ|wwDʠ\0[j(U73kx$ƲD+Q(MzWE2Ϫ:䏆 {Ѷjl '[oh;C %uW6q RR `! Ft$62$Ȼ 3! Si K/.D)h3texєIZ[BxQt\PDu/]uTd*KiBAFV 883&S2wfOiTBny+,3Qe˕al%fJ|O a 1J5"i.{*7)„:Þz-?-uA5T1~,iDN7qXt=DI|Z{b{9MI[j*K)Ov:vi[wu8 ~R!ϵe5޻SoK<;V,$Gz! S`X(ѻsdXR+.['S$%Tψ4'n4!l{Nbm:'=x^c!Yz&~ f``= z_BQ?5^4N_Z~Qo;C3A+{y[zz&K 2%^@fKWcP|* / }daBYXN+04Z;C,fl,0,~ ZR)@p#c<_2)+k W{N!V> ! S`@U ,1e^T=qCl^62j9&WҒ]zEtj,Vб-W_Й+ݒC5k ^fyy8 ѓosso(~п }ߐH- :Ur"MH}X,pű8x4bUD֜ _vN;Z&Y>)±T)Ζ/zxss!.լwxWsGw! S"F t[*jA~Ptu{mRYeEz$"usnhH:DLI.ay:9_WP JЕzP=wurPh^'uԍmpp E-b_# \r rb" c?g(nEZ;,3y%2HȠ4#-T3ZBWc24Kkq,+!A%߬-:[vY z(wVhX}! S)Uq.lx带62U嬞쵗F/I'4?DlȨmjElB[Q[/qa.jpx (2 {kA f/'|=t`<Hd2vT\2oofTySh8|YT|a)aJEUSZƊ R#sLqJOFcߺe܋+>i', "bDn|ҫ/J7ZTx9?/[S=b|BG! SQIP@Np7:3~|fu)rg =3|ه` xs )LXA)A|| v͟'^L| BP|f+͝@; a3{/ysܴg(_@_0o@_da̐ ￿|f|?g59 f܀8ΘG~r|fk6@:! S=&HT!@@ a%F>`x<Y;b}"- 0£F}10}a`dbH֐ }r8=[T<&MIzP[utA77&z 業Plo`lP wgOwƟLk` iw +I;ӾC 'x|M$higIUfIM5̏oH?hNw=Ц&`Gv '*FE0huNTk\lb8[*AAwK_>Y;թ¤xvs1<eVbf\b8CPV(;z?^y2z07v 0xsQG<€ ؀I=B-(_T8ꡈ-?#C:քmƿ-(ƼJZP/[% Jf^8œVn)3lYCz|qs)d! S}b bR,aVl&itMD0@x>o'IsϼX C˭T^dlye&E!="U-oڃ}UE*4a˚ ТK۷OXu9Z 6ZbFu*.` 1@CKLNmHLVvW Y@;xcFg+vC}Ԑ5"8,3Z:ͥPKSZ^2tl,{,OUf3ut e*NlҶ(HLM1\q! S}cC&#-,UT]PVo{ůԓ_ N l4,Ocw`ha(z G"T4۷XZZ\;G]=.c@@ME|G,QǙ, H@R|m* Q"f'4!d9WRP!gބ̌Pe^av,l]T.ua_o;d # K /ro-,ًX%XcFmy7qu.'k‰o@^BdNaC|%,(&kE;V F6v! S8AC5U  -ZBIjy@+*-/“ԯo >_&/o]\Aq<(_Uv!T)L),D I168ddA:-A Q3"HG2<׆]]J:8n"#@zY3Ѧ1Юw=j.W%`p+0~,䍁$k9(:3 r%F),mk)NؕU6%,r6\b! SN`(PB'`!YBՅ2, \&mf% Pf wE %2~w d .A P01~tlg w/{zq? תRY#uEoylut(4r|(Y}/ ;o/ہ ,F >{>0JH"ԕp;*_toDV-[P T+cf˪ZA(}4A'o4X. ` t<`,&.\!$F-Dy!b|&yn Dx8 as&jFOf`S aap3Ϗ|(IP}d ӥx;9~ < PP &~h1 G9ry6#+<Z8Q ')>L7 U0A'KxP<&tܢ(xH]$jrZ ! .);@|A 'LAi_e0 >HvQy!/`JEo Zc7q%e_Hf̃ E&Cɞuۿ\ c((g"_w8~*y~(%~ 8OOZ@7'lΆ`DY]kN?~__рA'g0M0#İ4L!-hh~! ̍3Q"$1i3"Ap5l&\ T׎Yq @:4@TЧ7w!'2yO!CӝpҟHox8 6^zgWFTLA'@L ZrI a@pehR#Mm5x["` IV_|3#> lAxeQ %={)d͊3dds~RǓG G7ؗ|WKq?{t_`#6L׻emM< 3".&%Y/d7韀΀A',USQ)!H?Cqc^(drXaG /UpJpÐE{?24+4_wXfl^0K!oqpL?pL_f)$*)̀fA'TlQ`&;dŖb#zi+%y̜G> <x(Q-2 |B\;'\Z&n:!=(uo.@3`"nfX = lI`3qpcqx GA?bF>F$b?Gyzg]rl1Iʀf# `LvQ@fA9qQdƓ*+<'_LW-w-u x ^YPcJ-H㫒6+`/4nu _N41?D &`lMegm7`sgDR?!a ~^aNk'= Y뗜'i\~A'$? H,P` x~X= DW1ao`uFϱL<5!Uh^]6 IS}`GF#;)?Iؐ7AD/`NfWf&A ' > _X9KPP>Z"*7G|HL_|e>׿/ "S3fD*"wz,wɓHx) ilx5vFf5"lN0@>C"D 9֛|H8/G"IО.K1v>!YE؈_`?!^`yQt96iՕg!bq?&)`95V Za(.lp?<h)BÚ>%V8CJRDE_q8 }邧xxJ">h_=sb9?:0+C㏇w\ع,J9LRcLU SlО?,`Ca'~>%G"( _7Q@*X0M+1) H4wy0)ΐsmJ ǰŰ~)%_E3m:?O a/EM<u]???????????????Hnl L?BA( Y%T6k^O_!wzy1q[3@,:I xc-4K0` gz%XrK_,oLYqpҘbL mM?K0/Wy)` c^J f5V8@,>-۫2`! S̈́`ШVjD2XIWe/qwR/gsc\<[gTFMw(MhYDQǦZ I)yP7AzzޓXv$ҫ5ONl Weq L`6| <{Y< 0RgAq{Dqq< [0<Cn.!$cֶZKF |VURs[$6ϒ{*薅Z-! SuD`@u?/glU]B64[aw(nt;$eI+2Ђ &FFqM(18_=SABh2wDI3eWѻJj 0[$_4BC;>h͛>*(n2xS(Д$P4 ҡ` 6>eJ;/Rթl6v_qoo@)iohCQpD1%En_I%h'!%*!JյN2ūQ! SFcJFV\TX1ۥ,^ ]5B/R"?f!Piy4vuSSwH8]L ~S)+^ݡkؙL)/ D?u%H},}Q_%&4<$;q=X5hQꆹ`w?/.}|C R @ Cd ˷(KʫhΑJlŧ4N ΰ w+"YJN\%-^oHnP"-;Ʃ! S> 1jaS.1bek4ij`Q2V vbL 5HENいH_O+Q>ٺK0|UG@5yd<ctH[<LIgMk[WgrAbfsmɶ+f eٻH|:-+|f' (x+,tZQ\)(9(t`e5BR6$]ɧy䋄 ip;YASRqH#e5Spqh>/1=R3S#sWruNźa;w_Êڶ=l>C uCns=αz+pEWQi&9.o.`6IlS e,#[ d?CU]$@d,tSxr0bCBc!.yrOi9'*?.ܺE+~ ӢgKS! S`ATQ( 'k<{3l[Gdҫ|8_ay}DT t+v }\#z<ʪ9*@ߗDžrlSF~l.SW▉^!cB,\ˬL/Mi_{_̤v&a꩷(8bw:cJfSK,\`R'S@Y(*H~e*^$Sd8^:)\ Ŗ_ +ͩJvL;! S}!HP; 0]q^^->Q=.0xn4 Ϫuا=2b^`kH$dKZ9}ZPX/* l9=K6ߘޅ0Mz"Mv_o"S\zIj W+@w,ɤeNhK;]L㌔`y1--4i*:[N5~I.YB&\/: gM4+M:™xBc ZS4>ne 6~Nwq! SPCs @A1ЏqbZ'y?S$B33zq8­:KS%ȡ4W@+GOUdtYEUV>dilE1*:Ö5 &cҀal:˺ fx[Ӂ  LE v%rݼ CS `, %rbhTҘ!&ؑZl~ iU'EԊS >^. ]y^zT`FB~1/,rB2;ןR>! S$# Esؔ%)=as7u! ejOO ;5|r;'0"՝G (>u|%o1xIXN*'-wt9!ɩrja^i"J/%C hPTBՑBX6g]܀p0ܙuXa( (`U+eD;Z:1\؞[>%A%D0ߡidοZO&z~5OVv2,ھ9o]jf˜C! S) h!w9x`eM>l{1i;"QUiN4Pݎ\d٩b.󜰲jeg[BǷD\a’+KW^ɝ.?8~ `0wrs .f¾+LmsɽI@ݨ Bf3XFPS3p<$eyb)]5*>3ФjpƎȇt`+Y B(cP1n%kOP! S}*!7N@/]Za1vBrцbӬs0dRx܅7@$ú֦$P 0v @e [>"S36íѳ!Oݪ'+,qhl,;[J6Ư59}pu\ c"{K;{Ն J8$SԼR4Qq<0eSBЂdKX; Y(z^DTx#9&"T1kJ,Bc! SU*!21B85ȘRqf\%Ue2v 7a&F[Žqs~eQ2lT)O $!NCBߥ64ـ lJ$3$4"'jֹp R5\ 9ڸ Ȓf&5@b2@XDyJ~kjZ "틋*4y-2`:^? ŵ.+% A!"{;:Je 4<YΫ; 6 hIpgxU#S9: *S-Vxma\u<X+ ),q#)B1D$Drv|` e$mU Vn6mH'+B N.?Oħ;%)=QƾԄ?! S]K3TnXK!X=-syMjsI>ȦtqCpKK`Yɷ즗6P782tO쭫?l!xpo,Z FUj|5r̩D&b=q#SS*i&i2f4%yVd] <*ii*3V 蒧[_^cEn+|e 8y6$v)*`Jz/ >I(lpcv׈! SM P"5 *MŞ_S~fu}IG<"K|Bov{`ea,KuIL?$U%X'Yw (M΄eT( X|.tErzAU UF`8rX a23VY|J> 5K":~h|t3faҕ4cp \:b%KmPהsm$7*V@<^6dPUzΖD7y>oG;"i\k ! Ss5# w NM_xm[dV'\ $JִhNWLHx-M{lҮR`lؠe8IXIF7ն9#vY#iԛmE"HE} ~P2#s3nޮe߳NpW}fl?YS3FCL:%26[gkV[xySy_5ySJb:=Gi=N9Z/o7t}N!S]DmI(( dY-Yf[YHz V aNΛ#ޠzcz0((+*d?ŊJbgI CFD }ԯaz>i'9Eq492u1dιU'.B[NI) >XZF1TQgH-)p/D* \5f!lةPKzȰ! =@ M@ +["AH ]0 HH"&qmV-r$J5YG.$^@_mn KhB[x-Z^25͝%M]$${0B@Hk&,x|P)eLLokR~[YO!LF> QoT)Ԅ%eZT2)L"(BaX# F#&X|hpAAlx mNCQ&S t{2Թ\nYCΒ +|aO3rZvl _9+ٙYGssC4ӖBۜNe6͎J^BM՞DWp\PE |(3fA>b|Y[bek$x!B@@2af{P-{!Gp} }A]<<``LX09@ B- wYIf@N =Xhc7=-)nς\'Ot?S?~ x2X' p>?d~ELzpGa|X|.F@\X =[X=~כeG@oRߝXVDH!a8WW!߀%x@nwE[ׯZm]YiL?\L Zfd-rpGL ?`O[ԛ3~?ʝ]//&Cn>*cw=w);7}.{0f`Os;ʀA'PpkP\0zc0ď<$esnB?s׌ -;Ԏ%=%8:|3Ga&RAeu⢲@fsG&No{z~cȤϷ?o t~u/}y0<^f-Xq6i‘ ZIzpRQ.f T#~AK}s`6*R=Za{~www3`3xA{L@˵IaėLZQEw/C'0|<@-iJx䞀kiΆ`D`G uTi l2m߸aW&|LA'M dl,^4?{m/4BzALu`)) _B|<=\̛xĀ͈U610CRO"3N¸@x3B01v?j0ϊ:jH$~ `iE"f0.%.A'3>MILeY[@%|('܏c5)l]-oxi`$lL3]ʪڀ͏E\l~'Qq@"?P?Oþ?'#H~ 5u2' 댸93)-R0 A'||;L''C T p(/lACR#.T /SGx ;ɐ/6&br#Nޫv'bwz "d7! 0I#|K3d&/A@'~ )p%S9Lˈ )MRHȈJ@fT2l wߍ`3c0 N`ޕ,G`Jcb|u/33Ł?ϝpbxy'0zO w|Op.?'vb:Ƃܗv:P!0`ؔA] A`'LH%|6iL2mGN18(0FgSbKa0u&͌걨~B%bk L~#G )"?(]9=o 9 'x+5I=̀p@A'`>?ƤfBa0n#>.0 ]}h`)w,W4wqE 3cJ(Fu)XO~<lO˒@pGqgJ# 'TKub@~Lm?$7k4)d7A'tKC/Cيƚe%Pj;'%"RA$_QZAoAK\c7ɩj6#wcɄ?62:S;̼x>\#.^#>C|ШOׯײ6g !_\sFnA'ɀɧu8  h۟mQᵲ[d+?&4R |g3==FP3aSM߾e 93]Bo`:¨B B-"i0e۟{L@ûq. —%#l|e|kL T^Uzsz=, *R{1KYprŠ s Љ#žѐD=2zo[P[\.1ҠOW$C{h@o2XB1uD Qղgvֲ3f9FB?#xi??6?2W5o-ŰJ$,@h.ag4=/|^ƀ )ѷgE=<(ƴf\G:Qh|2S }F鶫 J9G-G: +P^ wN5C8Q7!Z:^+ 9!LTUڦ5Ԁ9:?4 .։ p]?ԟߑ9V?~)n.b,;4 ppYwv###U۰ג>*: (8Az#P8! (WrC_>5Ѐ֧S8Y!k̎b8KY.>F#8eZ՛|QZo8`nT?Gw~=yo]T"d/I㗸p%P~χk!jT&Ac@X1^]V.2H=CͲ>QLi/)ax#SȤ7"ɂUSM8e!tCF4L@DaiWl2,՞=Č_E.KpO8k2L٫qj5iِ&XKkڤ%BuDŐm7'r5;*1I~2oǐgJzٱL_- xJ!T"Ǡh3!LFUoK yjV!;ݒZj}C2AF[%4жGŒ뭐F"QTXQ(f긖b]] 3V;ܚ;t*/o=UuKleo%g|($yl Hըk}D@jVRUJ-$Wf4,H5`s=6iWP3[f-^13 X 5o m=y!T-D0&U!RVk*xB1/LzCң+j3T*_uڇ\/ggbY* UKń E#ݹrBhmg"HbIjEJ4/^lfrotRi;>,2Ԯti47 T,CnG'.DtZ4V )P!Bf)-et-alr|mueV4C !TmBĠPD0+1QjJ$@6 n}V_  UAtj׷W5´4#Q" ȥ ́mYp-$s5תeǯϻkZ#4 + 06v).4ohՏbIIC[g+Ѳؼ54ܳ}hnIl/zT@u  &y0w";E{ĒA\XRp-Dg6o\}C!TEapIj EԀ*{mx>pQVo@j8=JVmNI/HmWhY4fAn+$RȒ=6WI>B#x!f?ͧJ0aD"wh*L/J*T>uoodk#pNhNekWD ȸ#EBR-@CH3GF~ Rp޵R1hsU&#!TMC(,40xݫhҖ]Ezw<-_Weﭳ&P"b-3t^y->y\DП6SR ~;GB)Ia+yR)xĊ8J}"DHh&Ix.zq: 5d~QeS.VV]~{7T mITi37\Y-V﹫{b]3R>U׮WCm(KQ@P!Ted"^VܘeGhDle"_zc=ن3Oì\eQL+`\zY Cf3i+PqINj/UXr= TQScFepII;gpa+ei|)¦+n1R)fĤBpPݩ+"y%$ TC30;jRIHd_f:<ٿ|F:$,[TawW4?F_DQ1 ~n?-!*Of [&YH!SŘF0QLQE) A [&Yq-"%qI/Hq'2!GC鷴0^$ޫdپ ,vKw,`iV 5E!۴3u%;U^MIT(UatMH^!C( ;V~mnc9*#hoJRFnJ־"tv83X8R I4ʫlmH_sN,(B'eMp͝9ut3^/xŀ 'Hdl4^kXlNF'Gäڨ3odܴ~] ه+I/ $y^@s! S"E * ˁ&[)K5RLʏ^JIпZfVaZDpqrv4tnB\A2JU]aC\;.T-34GTu4_j "3RdC{"5u!k Q2,nE71+KӂRd9WRwx `H ^al tD S/z'Xv5vI+k-AYpc4-B0RrR! Sd YtR[*r@ݳfg簬ߣ撂0?GsW<̐?\Ajܙ?ȟ"2]1PO'V֤ZnPc}lriʓhHnIIyCӗ N;`!ECQ%tsgeEuV5CMvŖ[:<2BxRZ  - @-9wsZBZϢ ?DnA9RbjWOc %"i"-$L! Se D2֢V%2PŰ kegCTkO53UF0%ccYmsBl|")ǘǫ l iPʶ?Hbнuދ,ڥb RLqEnQar)@JIJVXTUu4KcB櫞woVDp"!+YnC7ʝvr#X?;*f\/8 re还G>. @B C ( `2TWFۭ[R_k5fVR"YiUnո! S`fQ12\BTUQ֞O2لG ,rk4Z `n!ג*%~WBX5mp|jqD#,ʘ|m@aWU9f551͏h7UfzhnNq'E|'~ sМ?[r9"_9@\׉;XɌY<0NelAXqj1g)g{Ij\&*iFbFGx(}4j{ܛ 殬*U0r Ab-ԥc;O6]!@5TS@Մ;RiF! SLwsC J&F!Ĥ'`MB=ޫpIb`"mPbG%Xa1n|ǷZ73jΗ+'lb_0\eGksn3'9#;g۽vBڿMgpaa$2 P"~3!=O`1bw awh˦A@&([$bFE!z_zR?m*\!0l."anbe72.NS1P! S= &@zI͠LQlA# #~ضM?F1E|5`׸(+58+Rots:uGAjL]H:J~-.T]yIβx!U$f1~9TY&{ܢ]~ĕIJ{i`vBzzDeIM6\?z2gt]IkB ֲu "'BmM7mLtkM'JBUD߄) ! S`,aa/!dGxALA݇1||&c8K@|: C30C&wA h>ͣh'GН{G RP, >d{:^wrY{CXNPVV ýtY+>6Ї@n6` 97C?Y  h;p>a 0;! SD# `R@Q{Pn1B$Gv TqvE":{oFK oU. '>&Au3K45LZpfH*شAT}8a&1>P'PDq!(7bO}J7ACWPWqrښ(i1NEU `}PgpH]^~ Ro}݌&>߁Ҕ. ?vxxm4y! SU%I2`6@d pD(?tW=| On]C@{r]ly}*VVk{_ѷ!vl*3<]:Q9O S_k<$׈2~H/Yyx`#̬R0v0Pl&[ce?^[~>7"l$KL#(S᷿Nz!؎TPM(L`D*b\7JhTǹQ~f쨸᭳y! S_VJ3y(#mT"DF/J2ڒ'2oUT_mKQY <@!4 Ug&CU}\[…EU3(umDqǍ_-okiJfO 0ǃndqM9! S!hRT *i gƝI]4+s]A@8@9ĘdCzsf_a7I9%ZZ>VrQ͔6Hv5'4'~hO7ME +Y ow$NBXx-Kw*]i"z:Q fF2XwYT#D˖.j9k \zё55#KYcdW1wtdyG-lX@ ڄ?'BuǖTڥ#VpS H&LHg! S` (  *W;byWݎ5{nMP# $vDI.%e:|R5/aZt NwRgZ-X|{E:E\iruV@q*UW♅^aVQnO[ 2W8sx#z^ŧyKȝ;@h@sQ0.Ð$e V"*RD}P&Uh AX鄞8Uŗ+$چ$ 9d\t0A''|O>'|O>'|O>';[|3~$@Q=E 4 p)J 2׸ 0*2Vt|TU/tQC84`l*F23 X+JHx Wv]ZIeP03-g<1LQQgL/F0 kГ kd ˯p L;X0C;@n!SHhȇk>7_>I5S9/я)?G\ܵ\. ޙ!@ྞN9]͎"i/LW ΢<.&>|hG0a#U37*B?(?Ý>=@?/xUHoW|?!6>_fXvL" t2 Y3ܪ749iӅQA'yX3b`H 8y xBQKm-6?s{e#4>(a?ZfJ#x1 >QeHx6#@k@.L+pA-tQ64akXXGp4L|!b8}0K%!6g߀n=x ï{dA@'LWc1"ZatÇYھBqM4aDeɠ!iQ1$ȏr`ߛP Pp%"nMe TCNy;aJgFG0nOS x2&P{s`Co~47:h_ffq @úLPL< Ž?A`'oh}#?  ȩ{M0Ρ$z )#Ho tOĖwٟ'~ O6"Y&QS-׷fPRrwӲfS%!` Ќyn~sϷ?opW-2S7*P11ѩ$xKɽW@A'oAO?i6\,2$ ^{DA(a"B^;SiǺ?)GaX(QG)^lO ͈!x2IcX-߲$#C 4#x"30x9\(#CT7N"#91.2]a3hA' %ȧ~DaGy`ɯYJVx=H%A? <+/̏(^\lq`ɛ^80r3@3t~ 9\mM{qW 8׊?',}7||DA '$[L1`` }ߐ$Mb")|#G 5;Lrp% h 4A^")~SަPQGV!|3pJ?}pEAo%`@OH?+B:*fAe.v A*"(&=03 CLG+~ y RTM[6 /͌qi# H'&@d! S}\PD7eނPZuU[^61ľ}q $vGOұBQvxMuQX+p(-/Xb &h!:>?@wbz~x}tL߿ݽTTN"Ö}L^n5R5JÙrQ| Ыf^JhvEebupTs%]4@/ B*v8xTo(c-ɷa+һM1p `hWۗ7;8HV,qY@A 2w#BqH*,!IZi&?Ha&T%'d{ݐ! Sma(T (pbVe{ðiJKyL}u*ǿ([cfGnh(t:ꮀ#v5j~?zE^^WTT;u~:@`ߡ5{i n1:|⌑ָ o>VĶhůHJxXw@`!(6Dap% "W{`Ln"UD@F=VnQ)Yk! S>&2Zx*e"Ql-XL`5d2zYt=Ԑ{X t=5/K Imۆ!EK^@,փ[!>x +PE1S Sf;Hs˘Ţǔ-N`1RvW U.C=%n@\%Ø~{& ǀǡk+NK"^-t'=LwjNi*v8whlXk! S>V p**P%''3Z:4hޫelSrNA1eaw6PaP((9.'e-0Vd5ΰ\>)dǰnkV+_þ1N!)6M{tS9!QHU4*(*BO}kW+X }Kb>\afV+]Dib ځ[)+ԭ& "W{d):+ +rGedR:uc:{@Jܳ&S r! S7`` T-HNX5Dk+}8ܵrqt49F_$qzƅ{β#Ԫcg]X[ig@ygΧ">PAnmZ`\:%qh٠O =:p >{Kt=Uŵؗ0(uCfA1"ݼD ّX 0ϤV55 y,Ďr+3pB*OEoh:ֈEKBmFB<{M+k"5@ADoH! SNAHR1 X! . P }"p_ِݝÓ)|d535m*1w[h^Ajgvud/>e06Rҳjiz$**4njoRy~:a( 3RR5YxOo7Bso Ayw> o= 4baA@h/7v4FތUuZ{ΪmT"$&^eEaao13[BB9x~,q|9jd~#~x%wH.<|! S&"QXق^BZ;޽ Vl0QHh^ SJ03c,^ 8sn2x&#H#]m"i.Gb+sV`Ρ,W,"A@RK޺j2]6sJc+J+>Ў/Vww}g*3i!)J]DŽ ˌᕃ_Ǥ*dA"!r4L+Z'ʪ{&'9+("Az! S}(!J o`%̂Ug#8]-Eyj 5g$^^˃Gq J E=NXEla`ԅ(F{`uU [Xz}6́vQ>ֲ49cK/'d fC^bgEV^F\똄EU$Hq@u_bm$3Z;(e-?,bÕp[kfגHS 5HjQ:! S}OΘն0-X(J (gJR\ $ƽI/o3~XÐ 2 J-P:ԩ׌.hQFN-m2 a6R)?2tc~Y܇$֯y+P E9`N&iDp46SMo.oa}rhL\ #1XRQQ΀W"ʮ.+!R~b4r޵"*{! S]ʍNܜt)qe(HsG=')0hrq@>qL҈oeT-XZm,2SM7AN ה?ԌtV6!:޺ʌkIcBUTFgI;I/:[mi9=k隅he@{NK(1X$rd  ƲdɲxiJYky9hx%i3]6gޝh_T\.ǔU1n~;K6 /+VQRg\{! Sh̢!ղc1EG߃%`οFaB4 ﻠ>팔t:Y ; 2 } g}l'þ&@qGFhDӫ@Sm;o|l6ʂB |7s9O|@ H jE-0$3/ts{AדDd%6(!>ð&`}ISDtՠ,N!!S `!(G_?˴>TFw h͡>ɘ[8>@6G;0l"g22n7۲ |3Fgm$)xJ@?oT|~}@e0mAIh!SM-Fa"(S$Xz7`@X ڶ5gM(u`st"4S6YȤ/ '[M@9Js^zО?-0ƕ-R@I웦x!k2ԘPB ͈8Da|F&<=Sh] ,J r߈|x%` MO{aDŽ&(5U%Kf?3s! Yde|?7@*EH0M pt:E{ @0y^8hN- !%C tɑe֡HNKExL<9mɓ|%5$ s Z(*SjB2?-_QxD/oa F?!?????&r@=( ,уp gwOj%0S `r`%| M `Z )o`Q' D'(aPKk]uZ׈cuAO` avk@,͞F^ôϝM,Æ!uQ,+]GdR*\FOz%X~2yw}S5[=y/>5U@,:Q_&T,~^I[Y@&k6(,Ưdn]A'F\Lhp)mK"Avm|>>$[@f -Eox/_ Lm`M pA`+BvY֦gf@?=8 -ЀȢ~{MMkX&?ϝ%?:*@?Uz"C5\IeqzzxJH/ԛ뉜0xq|WiZFA7̣U)gV>OPKbӽLVߪc5<3ZoH97w.`֬&KT۝}w5oE| h A'\P ÷JX{& !f#P iqu#ǩܴBc/5t3\G*3sNA GV|;7uB-ǁ%wXL빿楃8 ج%Òl0ݍr Y3fȽݪ\~qw̥$xgWS8|`/|15Nk㦋|YAxh$Ș&?Ϧ NA!@U?m Lt]4zI̧^K9dKLXB6#srsQW{OCSkc#֫[v9=icc_'-d2~OLkڼ1QrO9/:4^NIdy6k n'Lu ? ':2TQ r6Wydo|'R~:XCL|~Ee /A?%\C'k\^#M A'W"8 a\cR Dzढa@v-S!"S!"l;*G <x 7͒DЎ.6"xS80Ll$OworC J|# eNoR|%<fB5{܇ K~!0<iHmƊ&oOcpC\^Lh |!a݌rA's}w7U`jPN+-Gh){ 9~hm:nlO@flj =fE2ӥxm 9*1XYXYcΒ?|fqH}c4OLh|jUb0A'7w2\gq3C1x  E@#3_r>.Jx׿ z^xf26?CSf@H:ܣ2~\i~BS@GG۟ė~6~ yנd+{VGZ|wI}d@Pvԃ& A '|&O%^ۚUl $Z"1DoP%3P> vm.fa.>:'&SL#w+G֍,S=y ZkJ+@#Gf0p+]|wP J F@( ")_7U['iPk(A@'oSgʪ#%8<2[r?C*w`x9`u"#f[6z۵| w!Wi/!͟p<`ۍ׎|lUU-@f;` a'>|' z^"ohy;ׯ&P@aVͨD23oA`'`mMDy'F>CWn -j2"UWœCN*#>T[H- T8,ԧ͓q&\J,lF&Lp;BRfwDS<`%?Gq#"Nʱ11͛UkÊF,Lb P9*P1,<͆h'T?WNa_ik3Cðq713i3q}lA'`$'ND?{Ewy$Pb_ -$6`O+e `Φ.BKnOL3n(,m5D 6}kkx =' sz{? @Dbx<' lv&} &^H \ @2A/S?~췸 A'aD)?N*``A@^2R0XK#)~/@ƈHYP x h5n}Gt|LJ 5*'G̩3 ZkB~k>7? 2. uw߃Ww^B7`m??`S4@#'rgv!*T*Q205VRŗ<5<ǬdCC3blPS @ @HA&Yt@+-.*mƝ-bDb4984K*VM&"$WJ覻xSg~%toZ\9O"58( osoGUOTL~[$$^jÊDwpuBb.i2=r%/F{}s )_6|a n3NĘJH>Q(X`%e*!LF5HKT{wҖP/$\֊ձRX)L&uF`\4E`+3mm gc(8 3\ &gfʆV ņ,3417<BK=.aKp&8JAEuo nj[H7X}h̆ٲp f1`/p,-$Ҳ#O\(;%^y/%`0Q9X~Sqā3t@_pվKSO}׎K`e(؟gѓ"Z1\Ɏ+4*lMvၰ!uoT"C!TbyEKG:EdviU>WPX#\Y)R!":TLmwEV$54FjO$H$"soaaڪe.`PI-Z P$(h&7L1 JCYIakmj߶ȯSd|hcIEgxFY(<'|y FZRw[ j?5JZh "dD*?.IVQo!TlKh2T璩ZI "U\&3ϯ.sxQXVd9pFqs-k;Aڨf3/\Q''i/]i2jejvi BhR ^W-kel%SZKUuE1gԳD=SzawT̢RKN+*e͆$3^I.hgkejL;hIGqS\֊%^=(XwE[F=`)U{S-@iP!3!TEHmULELD,  ,T¥!CPתTg\"RMb;JxMF~N_iu9>L66̎VwG@zOBM8a@mxSk+`e"DB KB -G&CHTڗi 5sU {t5K9AٰuzmZT#&\EXRB$%VLx56),z]g $|Gi|\Hl*lrfSs$>HXEKhMJ!ôQܬtLzL5sKҤeO=Y ޳ 2X)-8$LtqYd+t׳Y dσȈ3抈dP 0@dyA+ƱJ;H3e, R ^>([(Q$]!SݕFQdJUR`X:@s&Rua,K7kI9D%[\:bWWW*;3pΜ@}\oƎ4(˜q6kJoJU@@TQvj5Կ͓߂;Eo;&RB -?nϷzԆDqe(/BPWӣiD ?=v v&3+ԓn mXu!S*Bŭx"JReʐ ĵ1sطByr~[Av Y+kl8 XY FJļcdLo1r o9vcbkb$#A+Bߕ ED=JQe3 &J H&KMwY ne#j[袖\i䣻&Ftc4ۥ- n&m;DZޥ@p)@@ӫ !f޻_jJxB"g{! SHVa)Vk,%kў<(e~m7ƃdmW ]ןomGg@}=\MLvkr#@N68׮)[bh +vg-YC]:Wg.; bjTstidKY4\6-rr->=#D-,2R? J (a~/ݣ8Ӈ !^e:I+e*WwBZS T@! SC0PP ]$ ˩i܂RL7PIbl ܔ޹ d# ?qW%LLt:R2$i9 NaJ-~@SW?j6A8CV;# 䖽8YBO`@̀dw,6ws)*!-/'~˙ fk( n{mJ `L-BrhwѧE&i& ^t4C9HוK VtSF A| ΖTid4~NB.ɴQÅC! SP R2ḑn%UU)JQ*I+[$`[_FER΍F{vEA0HO4ZwRs9D(l'b獡{+$:Jip%N$N| R@Z(1#]*$3*ϥsm H7NruȀ͗ԛ*,܃Fu^剘0( *P V e)h.Rjj•rFxd*\ZD g""6lF fEENg RUq"! S>6*3@" [B%]B/Sf'9Z+{DrZ89(VY ,W 6!OZzݧR`R%x]f:U4+36bX(W':;)h2y$ІUњd"wPz ԹuFr@׌3Gw$JiVńх,1#JƘ<R4uy"x!i..nA! S@PiJJb3RNol$߳~~@U:L(@덧#ĕ3Us֎E; 3qLUY9(Y\Y&ʿ niq)3mω}i4?> *<G[My㿅&J3վߊ_b2 DJ6`[a`L8!Tlfm/O^ڄYA='5檧Da3%20 0XL J@ת}i걋}=R'! S]&"V;dP (->"&X]Z@ac#Ӛ=-_¦:jgO-W%MD*xvl%PYy^W#IZiܫ\R?xmnxiT/DɎP*2Q2Ot iXm"j`6CSA/ ~&|hǍS"kѽݨ ec]] l`cCT'8$t\(HjYVƙROC/Gyb ;PXWհ6X .&wF~ܵSmJ \#O/?' -$+,9! Sa|(@aƀeO4zσ:39799МKt?tl%AŻ 8ڀ*wɒݪM+34$lL*yEd3*Е: Jİ*,h'efwmЂ r[ի&K3~^c1+U@ݹ\Nu-;NgѴ ,m' 0 ~-r XW2pN,\גvWfn&VLk!! SD $Uc!PpD=D|Gy?lb L;=r|ǀ I{Ο@!71};$ޓȨ`ۄ1b}LRoƝ34A 1l>_7[eq<107mt { p0HwðT<1>|q|1W~WIumq?! Se% h0b V"FД d!OoM: &w-HT0~=/31pvFmYgeh+H>T`jj7w1i:S7k_g7pL+߱jOd4ު7f=Q[/"n}Q\́b@^e,'Xq62lKn*lT73Og`[\o09{! ޓP[ \=* RSrC>U$쵯KG9<7;F0M/! SmFGY-+$gg'ȸ d%&2) )A'J/+ЩuE*CwpRmCaˉvNevyaxIe3E\ _p@9+3T'>t5FA\}!m3_=~WLѿ- EPj 'w3,X0;"w(^lUiSNDx:LK4 $A C*)M)Wk~U"Q FQN r_0A'ɀ6->#`x~/_4H.DPabX|bM6dgvֲ7GK 71;[{yЏ|FG#x _\k0"oFBQ#xhۓvMdS@3]jNaν3ox0ĈeOoƮRky_H? B@GP'1S2RoAZLtPGW} A''|O>'|O>'|O>';zt< i`'bmv r+tuɈ Vp PJLNN@w{1(gd_uќi06e r@ `hEj`F/=/p ( upcG׀ D[%U!$H/z tD< x0)A#aV8m.qH3| E1/x=V Xt<]2Gf|@<,\E9}??Q(PV+s<ݭ1qh|!/L;.7%FMXt>w?uͽq) f6L ؂L ^Ij6pEa )ͻ'σ yw$roy@G'5+o!`r2àΈ=kZuTK! 0A 'tqD ̄,?XɇB,$4j"& -h|!%` Q?"qPOu\ 1A@3:yW:(6 u3wNW|%cr rrbLz[@3{\A@'`0 Tp-gLXGKIGom怇 =%'Q "'8+.(3ASp1̭ZDTt L )`b%U q ]S\%7BL@$zLj&K u(165X{TA*L}K ?] F;B_-Ku85 U XdIw}rq)*G+ vt^?b2(Cc-Qy -B @avQ?A[KX'BRv-xBSx*`sbϣ^s{cYԮgyb k\<Ua7iV 'Y;I p,E5`]nv?Bdi뮺뮺뮺뮺뮺/.뮺Zu0I$ aG*svQߞ|?(pg#qpqm7~va/!+/ߎ3Ҁt;Fv\k Ab7[lw6z ;':n55襲,|gIOL HG^)[} "Y((x'#LTC~_G-TR*"3k:8db'A6G k뮺뮺뮺뮺?&:xr̀h?omC5]zg]u]u]u]u]u]u]u]u]uPGE]u]u]u]u]u]u]u]u]un2뮺뮺뮺뮺뮺뮺뮺뮺뮺ᄎ뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺,%뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮿@)]/!pR/M YIac wU\K= ճs;뮺z뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺뮺뮺맮뮺뮺 e]u]q!Z࠱M] ̺hm^>o"d<f?q%rlJFg}喊.߭=~}I4YGo%}3fo%&u]u]u]u]=@œрNNXap+N5a* 2:2H0t ͑ 6ZLC\ j*/;EPF:^qW*@* p $&ɏ0o JcFh $̹jk`.&eO\f$}) XX{ŁQUO |bR)IXIF>GƼv={w 2(^00;-p[hE65M$X B8 +Y0;tp O(,P:!ۊ,D9ra ~v6H ,6 dt`L,jX {C r".sA fBd"?O xNo N8Q 2JLA/m8kƗ|+ H6 `oDX1*X3&>hb#(~0H\@&D@TfA  lkMtg!*o^TȔ_t#f@œ,6kv\Xd)X!|'bH ?a^6`ekVzA;!` 2 n;CbpH 11vfdD2(J|W@/[)oQg.f?]p`=0Jz#" {g8RLM%K𔹆\).*LGf<3 U a j1b,v(Լo4@ZUW?plԀ6 )|lm0_;% fde '9B )VkG&H[ XkO KHy؀$\?%`#L?,% []BJHn0Bq8ԍh~u}pxM/PDg"u 2VJp!s?m60. f/+t .QG~; sBIs MwR5K=bKϰL ~p?,wޝ4~%فFJyNAU UqhG/@6+?\ P ZAf0C0E])0nǜ:0Ů>%X+?y-oyso{ J(R$@?j !/{XpG X?%b ;B{+}25WxҾ뮻﮺뮺뮺뮺뮺뮺x/뮺뾺zW}/}|}C뮺뮺)z뮺뮺뮻﮺뮺뮺뮺Mu]u]t`&"QV |u>?~Z хuaLE @iL 9\GÌ? tӊM|d,NoeisfX”`3fy :7ߪ8Bh Q9DLkq(pH }gqYS@:?o3xҚĮ 8|f߄'yW~$I(88 L2 @1S;CL}Z@(x&( Cz)Ut~,m8f;0' OO9d t$Y"4Ƞ\5P yϧTTG)RьKN;@  s%5w@8K5c@,` L@ALz;#~NH)oLs ?0gLBE]˅"P7o,z~0 K\m/Y #5SFUAvs>}ڻh4̀-q\P"LyÊ Xn% C ֆzb? ЎH+Bc.|^c`o|$Zb{",g5CCB3O5ɀIS_g+KlQ2rF<HZbtL`!O@ɯw|@ Qv]DϨN[|r bdGONtT_o6@&|O+jv LX.(3C޾a\"_}9!&a ˜)2Z+Cvi0A ppKa3 ʑD ` L"޿@L,ҾA"H8HJH_@!Xc=.\#_:XD<OqOR$~30l oz#x6c^^òEs? P ~ Hdi(!2H^piOx鰻$g wsg %0LIPb!b7&G(67@Ew/b=2@RCJhh`7y]bdpHS`2h3;gxR2 `^ZPK@Z6P|-4:4)U6 "yFO#8>BN_K~z]{HoXh9Q龱푪_x(]6 C$Yf0.yxuQ5YmEHQqA6XH &A+gA\FXc5& n&=p!Cọ A7` b0n,sP@9!A稜C8:);?ށERߡ;N~iā[y}3T<>8i^@ Qb@+^QiPH iYqd27 ep$-6?=:AFZ ))F"|f06R4l=Bn {9>tDG`qݖ =3}T#@BVTtUM!g<9I vqAf69ܢ07 %5yAtrބc q#֍uHٴXaOv\az3`PDWAfA6f`E=) B;Vrp%hZ ⟻@ Yêh/_ d>9(qܷN|U,>bxns?FpD5-N(f2@#b@3 Jތ+/l _O}6-"Ais y"}RK9[`䝄+6/?t@@"{;XV6z[t(EOHP4C~h8%-0:(GdCǘsB}@Kxh?\@e t`_X/\L|2{&v`n;6܉\{@ s"`G8R}+@I+90^HnZ0R ~}e0 CwUʓ[ ql-8X\X`fd,4XM!k}wsj`Nl.Q̄8oӁc& )2z }*'ΩP}><_QmwLj& fgox%5΅ң>p)h ^X L;+R㓠 1D(9-1ҸѠ,@01)ts~Ӵ]uטG,r"9@f h zFˀ/0&chT`0#,"=ߤDbhsC4A}%_Kq?Bou3xr {W`|B&z,A+'ҨR!ĵF^@8;wx">'D͗"fʨ{8= @Im_q,w P);"+,lgb(0 9- Ԭֿs$1XȜ:5GP|6C5~wakx6PK>4i$Ly_*";Ewd$072l(7g;$oP&kGhf!8)Q'1:mK>X`:mUљǻ`(3E@ei%5a ,p j;ĂZCqH _m谰D^hxzъ,qaSXXY{e@'?}OWMkkĀÆo^%;e\AJ$0A;!~bonk&TPf"U ;^*bʌdނ-C7"^kFnGYkz@YC@߳& R.Ұa%OA|UaKd!H95 ش`1!,!@4 "~ ; | 8FAb]Vqf_h]u^m£2K475rK@ K5:* JqcUUKqpigV4CT7*s+%x'} !FÉTtAs{[*>dX+|1M 1 up=hQ#뮺^? QK[Г ]u]V=u-zX~ut\hL!:,J_|TQcT3œU7=%P"!;& aMZ a5s|%TN*QN# @Ft )RגfH~%V'Ԭb _xp+` ۩wܼPA&}jY uO]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]uuoA '`Ta *Y>{&@E"F#<<^,)ris8`?NB'lVojblPJin>?nO@?⻃F' ;)(đ#m߉.`<1H!gT!#xH1x1#Gh%?W'jpt8S`Hޯ{wxWt_3b'< S,/.ef[0#7Of{>1s~C > (A@' =H^S܅7a!ϓCl+pkL[N|#p F*Ղ |l@0|M0D׽AXfɃLD~6ȩ1JH/ Y}_xR x G#yu"J?|: j`bk@3# |cx;reހfSA`'GSΑV,aHFk" L;0c(x y$v7ADqG04?L };$ZA{w9T?􆟹/׸7K(ɎD ?? U~_WdӃBA'p("Kt) /[Cr07qbx';#%"ɑ';$@&,AvZ`vTpbtzn^Ved>#$ OL?NH~|_: W3o᪗ހf!5 # A'Q0ݫ~O-ꖾ" ?MmzIpdNYC\ |g@(`3d"@=7:7̾f,%?-_=_k){"~4X%0l#֐~ 3@@A'70 łH1 8O&E3G<e:4iǗS3d!WhqaX DWlLW&,Sņ^A8(0 "$‚:?S?o'ċ)`." bR7)3! S #42́˼u*-P[c5"ԍ+;0~J<5šTѡ*ʉ7uS7w^kg_vC|+;BnlY7Z6vBj{#8Ya& n;> tq_2"Q.ozpvR5'xR:p3i_Rͤ܈XUVw)Lb>T`FlhSÛcOg,e2&.[7NժDIvKTx(%)26FɚFJ{~u[>UMV6! Sm>& V]xcKN =&Ti?|IXp{|YFH4эNfͿL0vu鯇1鸏^6KCk\MzSp21?(gj/Gj"#|VS#Gao(Tԇi/r(`J箥uD*uUJwPX! @p s4(UؒJfv +ZT.EcYv]R8y[L1T;! Sͅ>F(Uu*BP;\0=YUD|p)j !{$;X j/}79Cy4It?܈$|~[we@ ~xiΉ9UL(i7sEK 4m%/Qzn$`tЙ9_,j@Iҥ!^/pHg[VU0v@``P'_+@KO$g#VTЎ~E PI! Sͅ>F }1`@P;DG%z\*Z89Ã0jP! Jv/|o֫N^VPFSQXgNp.$ϛQBkYӳB\"8T(WI-'7Thse~ (>z?xNnaNfuR4T#tRmum&+ʔV]BԓmXAk'=NEqm~2MxJDypDS?2#f@ Cɾ@*cS_g}5^U5d*q.0C-So?\6HSMyS JC]-cBt ,8Fe-t@@,R3}̣O %UO#()(-""R2$M6LE'[:EEo=U! TAɑVT!iQ{xG=meΆՆE!'rYB9{xo{[ J;; N6z ­( Q^/K@ܰAtl4P걘M0^JRr,{i@DWY)Puy tJZ@h6m]/єF'u-Љ{ I`%6!oNzi $ԨE/zӞٴ#}R$gKR~UUك#! S>S&V XĚ 4TNZ5l~9;LVJRϜGksFݨk SE.Ʈ5]spѴ.ӱ:MiJXx0٢z7W{ qŒ] ޹oӣ B~hOwy/qEV-Tg_PXE)@ ){e;uTd#ٗ`K42Y5kt1ñoÔ#+eX"cQ -;R:WxF{*F{05By|R! SDa%RFLU["*cAv &#,ڃz.9K&̲p\t-`aiT#eBq. @#t tLժC[&ck#.OT~u8Su~Vk 9tmtK7k}!GՖÙKaV+;R`,@VGq nl'>yBZ x4ij-MJ@XBH".y1u֥Я*#f ݲR! S "b7Ksk.EhaL Ќƶ5`-Ԁb6.֕.^, h R,JCأ&0e+^e^#M&e7|HL)ï3)cli{P0gd3%شV]tN%yp쁃~ܴg { (*:H 6 r4'Bv;Ÿm*:aPDS?>b}`u0%̐2&i?SXu!ph+Gl.iQ*Xs! S͉GH8 ݅Q@!Io;ڲiU.elb% AϳUR'xڞs 3T en|2۷X0 '^- % Ͱ ߞxO\XߺEN0"mbт@ +BlF4-|HSc{-vV)OD$ Uaib"9))! S' j̵@p 8lV3>BV8$AIF5r2_j{jOoaym~j GN?us :  OFl1G[!; [N{H:HVbPk8=?mb ԁ<?;VDA2Nª9.om8Hhm  -zɓ!uo{x`[4=Zм m(یD !% B!8akIH;87_nuV%&ԃ|u`G=! S(!FJ5M:me2*'5C1L8 Au̕,7jI22,x! Su&EU.J` ļZL YeN@@ӑ+ܔ* j咃Ї;EwPj.?*ABe604A#ӥZ Lʁ i{fnWw04umbѲ&Kn8~I}~Q acQSf+&Z@,4M5S aʞ]SNyGb)lntI@ag'x،%ͥhV![XzZl+1U{Ԁ/tai#Vi޽`p! Se(ȁCVzGFN(XMZ/z|A6iS6Y6Vŝ=" ppGqIRDpõ3`?ps? ^+@h {uk\#**xN1b)xLm!<4sT9 uA$ AKZ^m7uR_@_كqKLVERD`Ľҍ"&h’Oҷ5H@nJvF7J^΋/i7Ju.;! S})\w@hlL:&k Ť:hPۯ}F}ᯇ`{I<R8~k 6K]sy*J7Zz=O]h{Pm8M|v*f/#uxfxN6pMe`l!PðuN ZQ%Di/:}5H1 9\i;# wڊ&S1+"/;a#-~Gͬ! S-XuQ]f9v 6Zl5Tձ( e3BlrdFSOrwU AQ;ɃrOg`2JRܐcBRY1ؓ`q=/OmAf"N 4 Ϣ-p^s&4QM3|s0dl 0Jra@=2[Gz=D%hHE4i; >D,-܊-h(řERa5y%Bb#! S] ' ڪTx i/kD9=f2W*式2IW YC#HMM% z/SV׼.X C5ԁ|jX$HBš锟~@{_C5#R;@{?"˂WWeN*v( (Lp:)l]RRRFj! ȑvFDakWJpOst|oMYS`?'ǩ`D$η9%I8! SE5$q2)\ц/% uiu竫k PْkIs^:KeEpvU --M./i:egavCR1WLP;' :F'̰d'P)0sVv@P0(l5腛(Zݣ =6fQ |XArus,cN@u\) VӍ䗽aJ C D Z&Udb?-lBwǟC! S5!i$Hg; { h%'ҢM/9,+3B{-Vb7[gIey̦̩"M KnF.…h|˴/ōCek8i7eSEL6c8Vځv<pS%̆c^iuP&j@t{+>ٸx+sǑm[^ƒp` JJU|?!bەE$& 翵L ;gnST)fE\ 0o@^GvYlԕKwja6Hyn`=>9A'$n" -he !(0!fnr0;_l/b+.A%LADeawF>>vba>&?ϕNf1E;x\/ LɀA'$ؘ!([A@A%(@/X7ܜe8n/@: 40eS0 0x@ÀAO&ǀw`- r0L?+p`@c^؎8pC<>oOLW0sBq$t.1v.!H!h%rG!z[0>9r+/YJr1tV|&=Ch KGTЮqix`YS]ET>4'|xK-`JHZl+^"!=;0fn fǛC~uP/ġO&0йM'9S~/ ͣ$?<%Lrhx"ػX5URo?<&\CNAfk>xp#Uc&LjfCEj",͛{O3JOxQTSע|ОK~r!>~eO'tDRo&iɀ_ym?JT^o@?J|55>'0 d<16I ???y??G??????????r 6e! aÄɕ0"1K03_P2 fXM %X׈W` aǴbL5O'[` cAW(xֹ@,> `^lRU&^uK0޼` `G W=PK]q~?Y$ʤWNx7̟,1WdA ''% P%<)OO#"1`[SK/ㆠ?W KM%s] >TF;X-_;׻}_pR4ͩS|1L~ O@`P_ ≄lE?Vr/,[=.;@ `VH-/(ɀ0m7SZ7u InvzL碧A,_"ޫ~pdkթ[(?km]$z#301[_O~?69@fѱoM]Gg`luAԞ䍗]`) A@'tTl= `x{oaG]{oǿ;݌e !i-fI ^3nqQ2Ox /TD}ME6:h]OT#{|&?*IpF`7"x v'ZhU=CS7P"~1\׼G/&VA`'W q%@Hj#z$$RJ*%}5FL€͓ꓥhi͏$<)%j)X㋎\ʧ螹pKA'dzy }cKLQ~F@Aq~ A']N62ˆR1 p]P)<oZj̚`)QG <x(Q ؁0yYc͌FQYDf"lcO,~儰\51??GnO0L?Coz zQ2IEM #`OA'x qPS4 ^BfHLکPaL]'͸.陻v3cL{X`^Nz6-5tl>1J?$W?U 5ē'A=k7]8%M/EW_@3{;eu⠕N `RddN~A'x`Q͏EcWޠMyŧO3di)fτ rz`FNgwS)v}w!<d?G>~K,~ϻo'8JzV ;>A'4}i]sS@Oe/T#y񋚋¢\ d0ưpcKB56^aR9Ycҳ!wt_~\z܄cl['-|*O 1V' 눾|:~n`7HF\p=E~e GKK Z{`M'xF/0f~0rvO.*^7IXeŸ J*/'t/%嶵F;kɍ+K}3/bFx=wFI@R"0cLUS`bǮL3 UU}IiW0M~ZCKci5diR/iJӯ"upHA<؞kHzh&5(mYP`nBt2 Sdp`EC!v _GKg. )q$I_| ؂d;0T)Lޖ6]0n]a8xG 9 GsqG{?2|Lі pkTh'7œxc@^A@'S_k< 0%aWa0j#?\%-$F~/7pZ|mM1IXN`3.;N/V2@g<-JN <, @&`!SE G ) HEsAـ:ajnjQSatĤ"SSà5м~OPyB(O&QҊUud}>zӏW>8Y݊"@tMl(}3y=p*K6rN"7m(~ǶrvڐkR#S>IP,Ո>x80{뵠+[ruIEoJSvڥY(hw-˛g`Ω.R}OoTk؊?p؎7̯MQRv;ӹ!*SB3&3 dKdXvŃ=o[ '3GNZe }"B`ztN6<`ӄ]>Gle_= :usqi;3a;"'E5V k-S&93Cęlu;(a+fEZ%fpI;PD recw (Cq˕Iߙvw|lά9t.Ax ;)oK*M߿Ub;J [ N #6v}8 ^es>@=j`sn.Z.!4A'vA41VsVq.D$0tP_FL$H"iqqfPn߀Fu6mz$@S1O;!jT&ˀ$C%ɺTIVj^*kSca.JI}4']wsV+(n~ #\XT24Qx9K4u LFY51oPCS6UUEr4)WJr P)/5ɥD8Q;\J6',&Q4gH(;!g]{ip:~-唜^?U%}:;&'R4d?  bjSoֹϊV%^ŀFu#8Gl(P:!TFA,ԩoL. q2ȔE[nQYF\i i+v2t JJQa6UAQJNUߜRdK{ AM*1EN1"1(#"Sq/ HaR&d@Qip&>-K]g]ۈJDЯRuUL$dByCȈA$KAD/XzhzSZ#UoQϗsUCN0͑#`hy@P!T}Z Ca`"wC.ЫOG)l+>5Jڢ:G(/veTY/+z n$v! HphD]ezG-lk%YE5Ѧ:IKD8EYR ^LM4YN=ISPLL*%7ylRj$⑮Y?I5\+"U-#;mO񚀒YWSB 4R񚯗0= &R@jsXHltF0أx"ޤr6UmUB{Æ\bʌS%|54Ub;zmUBz`k1j[Da(vW +YTwÌ =fMj{>!T%H`L${U-WEˏ>E|sZ gGoPbYz 7Ϭtwu %O $6.FQLV%S1dSOȂ DDr>ҮMGWι3*iȮij+lzZڅG6C54NJ(׆G4qb=ݦCcAGYQ/ ުw*g3Hy@9fFçUAfy@P!Tc L$*n^*eZ 6 dX+ȭ)CĴoJph۵gN@9 E!&H+S^pJ0Nك\ChmeYqP)ʿ:g4"j8WڷT0cU%Uj? `f{+ PqCqW s,'!]0B.y3f7.3V!F!%3==wWqސ"2W(́ _V ^pF-N!t!T% e@T$* B-UYQ K)%UXXݺ;Slʒrtޠic@SFQQ&JI)%`&U f0c!n% IN5m+ki$wkaQojfuד(6-gXuΚ']}=nTuAK mĿOa@=D[+zQB4`vjcU,RIdNnI]Sk;,-%K ͹I؃~7"KI@D@pE]wB,!SA1LdxҲ$ȹ)uJ&VӬ#&;7~Y$J&ZPC;麵J.9ڑg \h9 t@YW`B1)DZr! Sm,E!#, vL(kLiO}TJޮ=wBIn_yӯ9AejiGmh%5hD wCKy%ԾPkDLX`l40XGepp(;5~ 39ZnzM;#@^=NSQ|Ku)8"0wx[QfH?' λ@QB S#,tѦ/26[e¼V-XC*K_hAIZJڮzܓ2! SRQ%H!`ݪ!PBYNȱ|z\!I]lo('ִh{G+|-H2$n*Gkwz^;b\D'\ѷ$E_%CjE<xZ'ƽG5 );5+o3dLW%b/[;K(B`ӡh~ "65Bnv2$jm&HMkP[n'փP1j 'WI*>! Su$G0PXJZܵ;%FJ4k`G`='vD-V0d3P^P>̬ck" } ^˟8[^m6>~aP: |Ez/XJp?$gJ!u=|bXkIX.:B-` ̉)p[q[j*BT1gtĴi-w) aE *J;! Sfa!DUXR Je'(E,\;EŦ7nkrA"~DZnt> U~9Zkqnső*$~>7P􃐡"DcH=`r=Z|9L $ UK=mnkOJD"YԿ4VNƑl4(Msyǻ`RҦ#ZYŧBeY$uV\bOȠL>z#BSX촘-0j00DUQzحI! SmXa#X(`dUÄ"u7jIVlatykŒz2ZgUm2֋ń 'uǬwSFO}Ka-n_? *'M@zv\fϨxI͏R=(7E VB՜b(6gwtD 1pөRhjJT ܘ ;w*ɮx|J]OmZ#.-5F~! SeBP40XshQ W(i 7P, F\WP/wt3d0]EanA={Ƒpu߅]LcQO6_7Tsv;^#Kd5b ЂE}Ɠo N?4Xt`^8 ;h> !h,Y\"鲻 ؽ:LJީr2XDEiaܫ[hA`'t*l'V.4H #\̤$#,UB w\3XwBX y8}ٌDrat844:λ̘'La#?a?럅d.$|9q~1|G7ʹ֣ZpüurbA'ɀNu8  hhFhFhFxKGP¨O*Nm]!PH47ۣb8 @c=[+ы&ýuNeT^'7>| *".R2zAe~AH F zl_#cuD=dx_*\cC|u|D= x %+Zo" `(3`Y3IӘjqB?xH0lA`L0hS(>lT 0=&Cv(ҋ4lWZϊ ry9<'|O>'|O>';Z<.` >#{X)*SpB6à Y)Ntz%cls U@:ѤG,ԡ@ EG<6tp{p3? @8 '@ ճs'#x@,dǀ@N~ (46b4gQ?.EO'jR͈p;H]:S}ϊQ"=FcA֧S"MXNax> 2!~ύ 8E?/a$GZmM`2!z~=ɌQ@3|f A'`0&DV9J.KI[DGa̟'%bˑ'LjC&00\+߰g! _Yw}+߈0AG'> |~S~;_H_}Ͽ ߧ~f\\tAыʋKՓA5A'LC` 5dQӀ*c 0#D/e!o4?CeLSLMzKŃDx1L?F7@k̄#t0DPE5d|c͎II (4"3S a #o #G(Gpv1e׀!ro iofĦ x D3m0,Aajm8 Oۋ+͓h -A|lqh>g .8=Lgz\;l(LJ j?F?cQs\Ql?4Rm%SlDFpFA84`A`'g0R00 -,6M'DKB8gJ, ,0~X%8)QGE`3b=C`;7Cu #ŧLv@!UkOG0#rlw8A9cs1'?pG?|7ɍ"tf(8eüp/F+ uX'Z-SFcN 9IA'@T,ސE^ahbHr'?s63fɃ0x y3͊3c P1mŷ)` ad< %#x0K!kLv&Fm&*Vl?afwLQ퓚q'ɵ1HɗnN9һk\Y|oxq}ˏ#\f>Bn@j]4ltJYX< c.Kez4vjZ?5+` Ka=;n͊2R4*~K(j6iHB?F4Hd?^=5uqj~@dUWGNCzN/־+t$'0KEDxV;+&!4bC3ʟ|kay^v83[pg=S\W?w@lɞ>i{|%(P,!6nh^l! I cPpBRUɽUf }Ά61?TjS8iF -&S`jcfA#GfꟸW `AA6a)u=X;a#7 HVdH XOV!ȆNEXS}uSGD6& <j%";Zw\p|%\<#&S ִnɛk:|#J"rf?>0CB^+{U`:f9).@e-U#c?28g1-TI?pQ'lن148ߌeE% 0'm<> ! SP`lXP`J(ω [Z^&6*0W'͋gMPS+ :vw14T8u7W ҵNi|6szOal&cg*?Vć-3~x[<4N'&Ps4Wހ"cPxZBaH㻘,  ]_d'nUթJcބVx)NDj:5 ];m̼{6ת>.RR_o=! Sm:B1@T&L/VCZDL` aW%1/vkEUy>^~Sȧjm8>~)}75$DUU%Nm̉"@U.R[<cE< Q{dj + -(2\vS*ĤaNusQ>u[OЧя~R+òʉ)Ne:)JZލv5Ռ2PKTGSx!9C|tL! Sm:PvԬlAQw;"nOh̉-%3Pl~;B,ЍIm\#u[񁹗 0̢є ;"'ex$jem&6fӐ7('%M-gSLZ @ jHiP@Ųie J4B$AZSa(Vo"#P%T-cU$3ۧ(lRu%^6PKRLTk2eiV~y:yXJZ8_;s4\ty'{! SՉ8€!BR^E6JXFT_aFޅ*d;( EđBW 3{T\!wao mH|#=Fs$w5aXgc%9,`GP3 H |}lNYtWh\t=}ZI &i/ pɖmk 90`lS|oOP>`cW>Q& -(pНOT;Vv .$QzڠX9I5:2ƦQ?q! Sm##9bQ,YZgXM}@DH%|딼B]qaEr]ʙ;t;=m񻩊YY ;~ Ѥi[oDU:/,{Jz@ޡ-?Trv j':Y3. N|ckT@Y/?%nZ\-C&W0"F; ~^ɨ:dRN4X '7<ChuHT&;!|̶p3D! _±ңawi-MC&.ݪN#! S%k;%^ -Fi5EԴ,XDvTH3i/wӜ%WlgQDb>i#b_!yF{*J@XQ TXOwÏ'Dli0l0E{53Z.Sb!ϒQ{7$nx 0@CH%Ud ѢJ_vb]OagpoQϨw._3P.uo/: wyv{}73\?k殕+9'<VRJ_mRb_$c! Su'T*!H 8$+3WU#9&1ȧ{xC˖2Rք,>Þ`gh." Ȓ"*!g? KvztERdz\&͙`"EIbpc'KGv ,6 +uF@Xe"_Sd"PtIhCZ}!e.' k&G"N$O6ޱoZS߁x?hh;DP-KqjW!GZ?jMR! Se&EfO,6ƽ̯.^C҉(q> !Z^Yљzv姠0~ >kUbH-ؿ[ Y֙3`ow,9##r"׭kqyܙ;G{,RЍG`7 ae1!pJmpIUV&qi`Ict9G.l I]6a{-h7w~ P x,H)=#$+KPHŹO%StڑPK伓;~e :'Tp! S= (H凾`K X˕Hd'Nf&i4_y*of\+s4GZJjɘm1ȘRph ,Q 18i{#`jRF|--fc蔅,$f;<`$Q"E*b+hS 0wnJLqT,FZϲꗵ?j=3&J+c,eo+\ߑT]OBg! S4FvD:i.q0eR~rdԣzWtxJ O][el8Hɓ ws@B8>w͠>-0m0԰8uü)ߘC*g7Au9?A~::ٖAM ]ݙ^:=r@~5^M'jGVɇl,mEUӪވZ m0lV]֐ Օ WTȍuc E 04f1ǛG#! Oh@ H21LR -*@Tc8UG9V?rG6o{AQ*K!!>!0p!0x!0r!0v!0s!0y!0wA'aP/ L0@@,@--Mno4s8p k3)FL<`O`UjPP5w];}h1rW/ksrJg/7mrW˕{Ra7of8 7h귊EeȾ>LmA'$tQm "<&\Gq%f+Uq17uS/RgbN߀͈ȼra +&&6ލ>&߂oG%䀛^ kY@aw[W͔LfA<'b$M|˸ 8MA '$q&\,KDE3س\f@R'~|r̽?zO./e<ʱ^h('\|L;:`"& C p_ģ> u3,Js7?̦-m&B{'%ZkJ_? _ۀc=z B Y ÏøzldTU8-E)?>#]ـ ك ]%i؟,9تCr eϭ@,>S_,߯׾V?Y%y1ZY f5|&|A@'k3~ d$2[p,GDWN#y}ċHW!}(qx +P ڼ?^).-y4XDW ƃ4Q{Rj6:?\Xd2O襈D'0+_~~ O?? G&V8:8bݥ-ykݭm0P_,g5E[dse^s(U4G%Nq>x 8W _5\FwEj7$YLÈou'v>#]&x;}@M06x-Mpֺ{-Y'vJÄ5 srIA`'tTנHz8`_exe#4im`{!a{zN@AG =)/Xaz|] {Z3nLs6y6+Dr&!Af͈^n yA1 <|8'&{| Wm1=q !1?P:LNx#X}0z+vc2C hA'ӈ0"6)iM6޸) LVL 5(|>m oȆe!ɉqcl6|= 3b.)6٠6lA LԊ] l˕d;.z4]3{ՈgW8%?$T7Ts.Ý`,"3 8:0q/(y/P0Y hA'C}7&#~g1SxP<(! @ (E$w0;nF@Co '42ia25-3͌](c;S6)J#̠DȌ< ˞rS"Lfi])MCuUr̀̈ckpe hA''iekw'W&駦)$~2JA|io˲.ܕlry{͸5u6*"~{]'T-y7I/̀X*k[6Le땴״w|!h9ιXXws9}cy"<'<\ra /`,j8Ϊ@y22"ur;(03O~iϨ hA'w ۄܶtT^ T y jBS9Lu~?,28g TT2`6+ F5𪙷:bGu8瘫{~C3 ;(ׁɰpc^lFԁ3r-}S>^-A@'q.q9ߙ~ N♀0>rm%l e8#H@D$@P}Fyc) -Z؇># c&?gN'ۿòN Le{d6BL40 = QQ J1 !Sd 0dS@ p\׍t ]ֱHA^tHA.'~GP̒)pٚ<nbfU46m%M++ RVs+9w>|C;ϡ-.@rz?;?gL gX2V+JOW6Srt!s!<$ 6i¤>W@#y޼V@DQUB;ŗo0!*Sf.b}ӭlh(Qɘcu1$w;rۅ :S.e08)2glvPjvbbt*eLU a6% [>uD(S $] aZTRirKX,RP@@3cܙXPWW^k}SQ\E3\,q\cΠ `N"]n'0A, dX4~fQO7c&ee_E/,>cfQ˗\ =!LA:(Mxrz+{؋"Y%-)LO>?g9=PˎA`{#9=+GdHfC?5vImBH#KsFCUZw~ o6㇫Eb-=`CK\xZai $: .{"|5n1!7A۴89 |)"c`f$['ڵ†DuBo&fk@B<){fae?Bܶ({kbnF~dXS0=C@І Kg S !jTF AR 7(UY`8mhu֪d;U,+4(gOx 5 6fhNOWR%5KHhWV]Γ^qI%()M K-8HF9qxe:#ƛ4lUĩ ưѵSM-u4S󚡀ѣ 3(SI.mK5>>ji/<^/H2V~xϋ[]VJrzGŦ( : Wc"t+Au*/%gUP>!T-CP1 *zR )tI&1ZUYlm_Դլ̤UTSЖ#ż/C`[MԆ+3R:H>M-^K֗h&fʕ)m}{Qʉ>2MU%*܋b}D%%vU\n8lɔ ҡDž='"ZK;ȔqF9G6fco7a~]_Gr&y;?ϑR\I]L>hIddvB z`Kt'L˕m=bgzYa,`!T:Pb mSb"@q=pX:3RS J- >ǹpAQD] c*Uw@bXJOa9w%T.-Tl&E۪y[ 27Y\ Sdk.+Vتͫ ZqmX[Q,(JGbC.J khًBl1oTh.P/[j:&b_KrhHMN*$!P:Ş70@+ҲeU ƭL7 \p< 5ؿavg/ހ 2! T!QȀOnYk^V~OHhFkqO\.B9%&ˤSTM! Sᶘ E(Kd@p 9]kڂ_ZK]. ߝM+Xu9GW|ىY,CTŋ\YТ `0N8C6/38A&\0ݙh\XqE0i4dRR jZӢB MV J_f L돴E e"LD= ,%›J[)|u˟X5D`81(Ht_ ,p7VXJx(; JR!! SgJD ԝKzˆګN.UΤOƚXY,f`FrpSAL^KBir[*) )$6d=ݩxo-7}NSTuEܫ.',S$H-,DVJҒHg`d\Vmg2V ^ctk"" yw ( @['_*>L9<{&(ᔠğ68,KDDHMKZ X)PPh F$&xnoSU! S`XUl3ؼYeilD.?LP) N8]EsF#w˰_N{ۇo5+;gCj0jCzyv\[Fժ,LvO '\j\ 'j:V{qXD,ں&i3`!41hwyfh)%+6mi,SYfHFKUI*%{|}RRJ]gËm*'P7kcz! U{U*Ԩ("T3hck"sλ*sfxx,$HEykί*{S"vΊ p- RCGGl=uR 1/(;]tNъ!"zA1Ç?Hr! SMdC,AF([$CHU¡ɩ27V3C9O4^H#VvZU4,ZʰWhZ \ 6/IoJ12ea BX]R@drDz]7 lFlt\Fpھ|r8gsK[J+y¤G|kg߽TN]mo J+Kh t:䋻)%Fz` 57`}lgBi>䒋c%f\fDpMy/Y˥D af8?X=2euE`~! S|j2@Ë+UOP:Kt)wh21taI8=8Jb9RI%NWvg=3b1'-ooC+̳?kDL j8t: O;،[7I(p*J]d 0Sh/<ٓi70Ȉ|!9FsuD8ޔîzыsj = =am8 w$մz"f,iG}.}j OCXA`'Lsox pK7?vF|}UrY/%L=k6}JZ ǭpE̬{$lT@Wb D$&1OȰa8?!~#D<@v&kHopBKג{I;l_@h`иA'LB~ p&Q;6~!AFmFj F6 IOM?}E1,hT`wqvOƵ` OfGh2dS7_!y~?T7Bwe^a|p#?ڇ826GrA+A'ɀZw8 9oȆO87#x\%w9X`76apd>AJT0tVW+OnyiD5õ ]0!Qibfϲ=b @5P)|HԍݞMw=_Yc͒W$agMԀ8K+y7>`|+MQ>BF<"扃cdLfI@D"&,+M+g ߺAZj+rIIM)1K {\ (Hg2^#@P205$t l{`≘#;GUIh{̇?ӶBar 酉lп ؿ@VLF탭e>_AI>6`0_H0Î:8o!xyw9h NUys)i|F`VĻꯒ@\G2zͻrrYL;5jr ?|iȳ昂62 O56]ߎa 0ƴ{M&PpJfhA''|O>'|O>'|O>' x+CkJL߁XnC▀84r GV'e`S`@V4 ( U8e)@@bHC4~~uѤ z X:0c :XjGX%G*h8K ^@?Cn4HA@V.H;Pn-C)TOvZS??xL!AX +C$='!}#F@Cl!=ɜ&>5M[]<6x  0I@.;ʼ'0!$G@d?s/<>#z/ztӞgox؎r|Ԡj0E hA'Pu 7afxqHAd;eX -ob$J#y!ؾ9w(|8d &n>L:݅`3bS&XʑЄd%7H?/Hj?fG[?By#W PA 'LAWm6$W4d  c1V#}S#&]A;"8%?ЌUww|_w{M3d+P8:e1Q:Xr0Gd'b9`P#Niױ<3! a`(ws~UH~<&/ 8kaL3LZ&%? hA@'ojȯ @9F+*H4ՙgOM?#!)$T`17w¢n ?03n1@m ةXP m:@o7 !A A&:ؽ hoo<-` Hr`>ӗ?0d r ZW fL 0h5 3c?|X`LiyPm+t80^y=p. rOyaS#՜]Wgܐh` S: \Dc;Sy3PA'g0 `!d4BЦ\>|FC AJ##'޽#%NX<%w.YfGh\xa.6++3ÊeRI?G1cGw `y߈GX4ay+> 9WHoq-{YV@3{~ A' (JY Y!LZƝe2m2?S ,TXݟ9 t7? oQ|2H؏<. a}>|!!=4Ɲ?<.øv|'ϤF0><#v|0鏲F !_?gyx]! SU$!T/ D p6ޅVC\زL0ffr>qM=xj#[Ɛx|K#?``,Sme ͵}ȵ~)r#=*~lâJ$5 v`d&[c-={:<dT f߾D|Pghf0;CAVX;Xlxۑ,& 4KXޢ_U%3_h)ʵ7 $ +MEcDwJYm"X2ta%V|*'0>! SbHәo(UP&(ҹ0c?젷pT0.<_ӯ&,Y,;=6^^`JEʼpMc[4ՖDHfس;tD'ΖP9F]cHgHsDg᧍UJ( t$$Ur|()IUՅM (:yin&X!!FYAew d@;Vh6i8ٹ`V`ޱ\a'ۉupJ*bGRPAؗC@l*mtshk% ** ZV4aY\,AXOeԸ{-(YE+=vp7J~;|cE,ՉY%0CX7O!yC]={^I@nge!ȠDqHj$ A't܏/;  [0{dd.--Pa[dVA IA8bG8+\eJb-ApIБdǑ! S̈́P`GAFYR( o'4% 8VloGB1Wl+8*;X5mli`NQ]A?y!V]aQ 8mLԓ3ݲ@Nw.ePS<γw.@` B \EQGA9BrAJg*SiH/ [LR)IW-Pbi^w[*Irh! Sma `u,' = !AhB  GLFrV*aqf?E܍W5}tBѝ! Sͅ^F0QCYPJ ".T0aLεkUGϸjuߒE+g3*R"Kk+'Tsp6i[D RT fvRIe7y_(?KXwҕ;&ߩj AK!1w~ch\1Ց6|_W3,(o mLDѲڜ ՟1Y7L$*3&Hx cnK,#~:-B,! S̈́Z( PH"7@Oڔic`뛏>&mٰ2^s dU|Ԓӫ$y4c]=[:0?TrR<2]vz-yzGlo Qtju|tI 0vD|qsbl[j#Rށo~Vs_;@a|jq g8&G$':nJ7NJsM YFm^_#s! S̈́`p *ÄPo4jX4d"N)t:SUoEXWHzؘg5;Ch S } Š.zC>cܿ˜0got$ʒ }"o'lg̟Fdtu%  *h>M;';G, ^P G%Ca/5&* N5/FF=4xb'*# rӚv1,v/K= ?c! S>F"HUP{.ơ*pV>SJK\V~-Xju,3{D^gw8MӪJIG! S$0l̺%\ ]ҩ^'(M5§ɱ߿m. qÜ(v,sSkVH$BPi@TrZʱRTvp9Y5#HYViQt~+Je8e}4r)fBD+VM%%! S%|.֬HdҾd!qsé6򔑳\^~T>aVTڦޤj^nB &Vi,~׍T!&A&oAgdS.Zm-ݸ LeİibŇ"է8Ѝ8d1=8ԆETR0 ƴ%r ½0ؖtRO*սdDNצnLi5Fg ^-O! S}QCf% z&q95T;f58VpQn1&ElUu >$vcE a@[֨@TxLM rC,ni9 iըZܝ#wJC%"4Ջz!,4ݤg/; x& xq D|DR9|B0^EYksxR^3`3lT,L #ɘ%9`&3i9Fy5L^AbTpLaj#ݖd)`-A@'$v.`Ih\Gэ ;A% E޵#%Ar3ܰjxmjn~q[@.\ Be  L<` ia7riƨ~_4QNu~#PT2]|K]q"1 \'`Xr oͣf_: 4~?馣V*pg?`5UY8Y\Ay@EI+wx _Z/P3u`\xM%&Q# e ]qs:60Ncn[$h;S'Y MD%!U* xJH=6s^Qd 7=#Uc7례T:") oxs"rU4'6K~rCr w6O@i Ew Z+3~mGO\m pTU$~j^ n$x_xKb^⻠<? ??<?<???x)??????????r 4EaxBd&Y+ }XJrnI("_yM `f;}D8$ŃC;<7_niu) h deE [TłBF(jeN[c=4qm B:#6Upsc<#>N1)^@ kJ;rEBsZF#_;O!Pf Y=Hq679"l`Ц 4\5`:8/82ϾDDdd5T` `:{)q?~V^LU=ȫ^[zEcVJQv  >\zۄJ8ӪP_JTNan}⧟6dݔ4 >n.4(t,, !|.| pzO%wt1CΧ a?mIwKv|$Ur6Ap"VRhlnerm|AB11_q/h-`o̐fIsP6c\hւ-Ĵ @tr!- e(Qbϱ{l ; VWG"A/[_y@9Y(zaqϷF" `y#;K WǺIWN 5G[D,Wxq!^Ar]u]u]u]u]u}u\W[]?`]/\Y]P!+,icR^}8H)X(LhOpykOqz'5$z{N3crU|]u]u]u]u3W0_@ croհ"՜7!g{_= ֣+@43X[Gx`r` ð 訿|8Kn8iP~bp1Q(D;#ׯ 3u Pw2 /󎇣xe] 0Nc! ]'+sü??^949](`ҕ>p }hs\YD  UcLxK  Vd"Y&@Ɨ/b X_?h28~ֲ 21Y}6aQ"SĢv/ͼ4^RTJI?5m"@AU Q%m+;QYk{뮺! u]u]u]u}u]u]u]u]uDK]Le+B]u]u]u]u]u]u]u]u]qӅ뮺뮺뮺뮺뮺뮺뮺뮺뮺 XF$XT2dO,Gta]YLO2FIqhiӒ{T1|CJ]ݯpiz`#$)[HGҺ6@D20jF2`3p70 (gտ0C9-@ I6| &`#ReED!&~v;8CW*h.5u]03@ p LH @ H1br< ̉h#8he5F120uaBቷ&  C"0!LL)i3!4J;?p'ZfO(3LC_Zxy%, !d8x)&$g<޾e,BE]n6/|`  8e&L,OL\24j>Q<N-Ә>eH"?#;4LNv2ĩ #0+0ЮH1zLs=aopgL7f+t/&!j!{5\ 107a؊,9FGPBg/g `IL0L?yqpT/`Rg^=Z"`ޠ0pPBpXNu)E~ӧx @i!)3+IE SKEcР:PPgE; ?iT`(Ff9/OS#GDε401 kPrVHt, 4t4Eܦ- hi L:{UDFR%DH03? PsN?\pr- t0^C\E  1 Aoճ^&%2oqH$UՆfGPV}o>\)Wa.@w$>H0ZS5wY `i D#~#y0\ipsX@﫚Oc!ixAB Z",'Q*p>Fp` icnK+_.BU[;E.zfs'Y8pd IU`w\玜ZL%;4B32 K;7ǚOc*Saq~ 'H N龶V;/.+n=OlX[OL(Uzc^i9L~ТHTR. 4 \KR1V6I67V?Jom01X|JY&&~|at@!@ޙؿO끅 ss" R/vDIN :@JUiDr~ ۥ9Dؾ*b+.I (=:O7Z k)#0P EG*ċD/o|@R0Phn`W@\r+yVscY@@yuZ,p3uMhUj̗]0"e1gfc+~U119 (bc cVM:ji[r1:z^jnp*AIyK)CbpM 6{)^"! Z~}pe V!}^~ zU\{I\ 9i RpRnv=>[DP)a\>18>[.Z:!9õ_vqn+$>-ڰNlW>NXrD /0RNXFFao.^6 -h7[0t(*ewIž*Hq"L&l?FDOn&1`fF-F'h%g(k0De_6|AˠHllyyXh HR(E\5/`- nV@ਸ਼(bhoMPQɝ ͍IwJL_R6H< vP *VEjT9 ^V\sZC?:@@}A*+ctQ7(_kw_\OSN=U`.~ǀתj@NŠ̚#4QD*]pdwNF(sC|qPsk~}9#?|\^\ =}RX _h9$S%BoHTohJ.& `@(=?պŢ[pw):*S-Ue Qt* Gt(jFR0ί(XHCn+n|dTE\ 鯯;C\Q^O/RV1gS2^'Y ftA?#^ ,|+1G$T6h/AkqG#^7!lTށ򂎸>}=gǀa9iHz 0Z clK a˻Z=)Ti Hbftk$@I28 iaYvX!?(B1cv_uu]uq)OXbɆ뮺p`M${3m 1Ď4?K!su=[x?A>⡽Qfy?{ eP3"w"414h F\-UFR0 9#;fBJULS}y)Fe>[+CEV ]( ??{ $>>(޶y맮뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸cA 'P‘45Fr pRQ2*)[ĸ;M4CO</̀37\?|n^M3\\90^0I(3B{ԣT>V6A`')71+>1 T)’UUMGPfjS5 `* ؈_䘟(mftcy؟=)mS@>L B|Gy x_&U$>]P<˻}!2ؓsLW62YuHna @k@A'W? T (OZ>o>`3ƛcf`uɜ>.ha=/qWL+]jf36{T&tZU$ ZkF#Ǣ4S?r(2yx~Szb^"`dK#\L5 @k@A'|7''w {=3눍BF[ouxs*elw-ܝOPL&\ft`;;cO'RlIwZw@Tq0Zzv ɐT`*$[hLϟJw? A'L`e7'DL2# - %Qy! SX%,* WI4C.g1(p FJ"FTС:ŕwh|Vu.YE QD\a5uN^24II7A qYM q9LJ r0!aOpVv-}89bYjNWC,V[II/Nme xZ:hA.(>I>xHCpT+y}`t! KdD@ A@}n^cɼǧJykSp@`>v䡊~<%c؈0H@v+X5GIAr)€`p3Ra?Plx @y \ZlB?_b???jO ƒ:@] .'22#)TQ !TLH+,(, TQ^_O1w! S{'I@Q^/ @ R q-paȢ l '0@ҚPeZGølc\}8t3Pg:X{uAG'L$uwA2'WdIع/JBS[4Jhd`@>>X+_XAT J~QK3s .N\UT"-ȶ~4i7-Wݽt cT>jo  ž !S1# (f #~G/\䌔VJ-s`[HV7rz4N8UWQAu~? xrg\4"=l_FR_XOP#$ɀڦ>HNKǿvsb$x!k$|y tB(wtFP aK`+;a;C"U}*bWĐR`8,,r2Hro/) bel\ȹAE-0rCri3YGN7NgTW<"b%ǰj}C2^c }fZzs& y 92IoͺvҞ"F.Bj=C!jT cABgj Z[$X%R$}8b/>)j`$,`?U0YeUI pTݶsPe걲jq!зԍ RPaEln"'6 nX姪łRoЪ #)T,߿Si@4}(L•eá_u_;fQ/FѦ /ҬS屯C_l`!TDf@H2 WqDFBVOZU[ T~'vzFѿXT,Vȑgiސc "~kS;v e5gKyltTs-E4~繷M~ھ޼J`\z$Łbo'ʺ??ۭV\lPE"TY_FaYAEkNZAAȂ|/r*-jDӭӐRӁ7Ms1>`(!T:Ā0& TUR Ehۖ`H0EGOHC|ķ&uKSj٬M2*t䞡/MVlƜC)CtGmoT35d'| tnc%7ؔJAS9 V?<"*f %PZaXE=U$TlFN~cHC-RA્DzL_`ےŬz[^lVZ˜D,"iI_0Jy!P8!T]B ZQZFK.e\q`W׍v4غ,Ъ0&jWRk?WAds;%dq+XU+|4Ha0K ZaD \5Q| : eI'XIDUUn{7Cv% PxF|/*w #5MY J#a8IQneF\Uӄ6tXG-)Tn>;B/HtKyo".a(ƹf1{}C!T]aX&)YY2]YaOL$/KY?8& oT< WRH&Dŋ"rIMj jT EMfŤ_49ӌ=tNy0I:V0hcҹ Z(=]t x ^VN*Z Tglִ%1:о.0QȡԶ=+9[劷<"VA[T1 Bc{!S Da(! m!`*@R@-x*ObÓޥ|}dLݷ蒂,&?csUY -\}nK-**l@l 1̿(g)2TsKG%oOI{"M0qEYCl^* 0R&V7@A#OԺx@XP)xxQTϵD7v=#f l|8#ֳzFӡRFY_+x: e#XS=_n3]!(9G$ "cLVjp:Ҹ[ESPG0B6Hd.*$(EJt\)! S.n2@\~-0A_| T ?'/*AZuB)`CƑ{6[LcfrhD7SpkBIfEEƁl$͞83E O{%V7:*(TȬ [.FE̦$ )ZqBOfcw,ge<@hzs霏sbUsY*8L]v(R 1H gjE9( Nq@.UiƔfX.-@! Sͅd-ELL2837y@j׵*;A{V~̫oqSg|[ U߱;Or篋}xwOA'6,XFvY*ffHer,VV̧e{cFuu BUA@"O m͎(v&qy;jښq܆ZJl5"5A[D Q DbTG NB8! SŅc-/j)"[ (/a]T)N/z3xjM,!ì|1A;IEE7Cs57dfEI¹52mM[MH V# ʔj睇'|m{( Estr-vo #>1&ZYY{RfƧ8XJP*L4”wD0[\շB/@72B-**6CATV*ŦU5ф5CF  0[1 @)ko Zd52:q-.7+rqt[yYR7$ ! S%UW݀gEet K(Y7r{;3{YG_3@J%G2qNeOEmUSdK35 qwYsf͡oN93F@AɦȆQD>=9lޔ |YIo4\?jCK *o[A-4m?HEIb RD?_MdВ*NfC"DS=8A'Lφ=>|\&&& e?o>^ T ToJLw)Gl~w{WD ،+AC&zsnvό).r>=xaZB)Pq9EU'xxc7OЌB3Bǟd7-S-Tٿ@3`7,A U$|8)5A'MCW瑌}6bFk2#)&5a3YJ2 ޅ==mA6ȕdGQ`ww-Ȗ6?_3b}8\Gu-HA`WR`Ўt#- k#LG߽7ov}xJ,?4vSMKZA 't1\nl?`pw"HF E䎠Pձ$BDzbe# Y`XDv !5߀@lbP,pn ʴc>U* 309 W5:t酹/q{f mzŁE|d=DJW4!;ͨ hA@'ɀ!Nv8 ?Hh?#x$Rm~nA~ѻO~ w駧J#x0wTO~ 8@?6V@d3bdZDUȦlo&q{L%R'?!(~'/by{ֱ3{Nc6D&(+q&rVXm˨!`-`A`''|O>'|O>'|O>';lzLI` 1tnvgpN*T A@*% J(eÓ 8|Nm XSFBH0E ? r`@11Zԅ]; TBTXvx\p'0=tLl01@] 4 PEg}n*0BAN @U C@ap/!58Z\be6Ji^Nq+J???o xN\e~Ac>h|!/2]"&G% UnЋ%Mz 0'W)0ZY vOϏR9Y???xoKeoY|A pobi߀&i`#=Լ.m_  V .<ߵ3su ''0SFcrT'?6H,ɀ^vo͎$qDȾL\Ipkv30l0gzԼVq>U* 0? @T#!7 36,2VJ A[DgS1&w3ޠ52A't,Bt<`YelL<!(M0d"< M3Q?.EL@x4>l\^gkI{w@fc*5ML^>Lh 0Tv.-}&`` 4& FoCht0*.War` dBa5aI&!ЌD76?i!Ӝs2R^xb;G> )){GC>, Ee8LYAG ȯSQ\A'`,6  <"@1,6FAd) ӥh|!I_&7~ DE2yG|!:-`8b6`3n%R?@]]`6(+Jf;wlk5*?'!0w|<+??G3?:I&Hop0X^IFA'LAc YxChs l怇 e#iQ `$xbIJ~C4x ،\qa ؘ2`ߓ̯1Lt \c. Jn A'oA?>@o:nB kX %#QS<$WjCՖ=jn۳%?l˭C3P0iܘ { 0ݦSLR;%72Ԧ6"}%8}<#GB"I<~ Dyy=>~aCwbvɰ\t̝"21?.:sœA 'g0e&@|#4M?B"Z##6 ]gv7%gp[(]ue;nBqsgt:Cq'7;FnΦ,#>Lى'wB >>nf'߽-fZ w5V*nJhE4)ݸ_8 34d$>9L<jsF%оCG @F Kft8StGla4됺x@yȣ>lo ! SK*%E @YRHci ~}!C~qp/?.}=5\$OQ#<& ?'M@xE%=ܜߟu]1Қ$~hb'l2??eMHi:߾F6Xi#&xm/'|^NK^3H< oI ټy ooLg=5i17du=ۺ;<;! SELA)j{ [+aVB,zP[iKh&'.!f^&ubNY$jZS;V$DrZuvl` JijplFvU¬Tx!, BZ,;dz[ k됂#5#N(Lh6V(baأ3BPc -ln2*}yցC?lCxLXc}jK 4l`G{(Fyoҁǫm8+^d0ʕ$PC9!3h9Ba߼! Se`Xe1X@C0Y, d-Vj;BJYOd_/d,.%Ҭ;ǎ,1:JN*~esUé̓j1ϳBE{Sl߮Hz$D[#t0$/PXv9=(w-ndTG)uE Y=,2g``"  0$@]ilZ@h! xcېX5]q|=* 5P@|F`9KB1`i#/ "M)hi ]]7$u^H@JҩR! SQ#&(IB*d2CU#FNj,3j~kerSR]WY=ɠTuOf ^ (VXe|WeJJ JѮ:/ =c=+G"!ZU=Wp3󡇷Վ W3&/JkrۈZ9Tnk\c9͝8Q LJ܅wj<Zk1%r5D"b!2U/b !T0&aX,! S>ҀX@ BP?ƚXWJ~3k]lN]'Wz_‰ԿQJ5ګMpZh+Sk<ېt1i;sFhSM :urg>0~jVSOq6-]K]Ji<`UN 0OUVҲZһ5P46졿 _Ν݆`1FSb%\7MIZ`[Me%Ԋ ;TDBG) ! S̈́MIPmU A(uWCPxjlۭ`acNg3}!)I9U M hE9 ' b=5Uc+A|./e<5.t.qRN:<IJCE'Mаq.NwZS4;"VV>^4R,Zr,{؆p.C^nͬ8ԥ/eNG! Sͅc܉̘JtX72m65iEf֏Ox5/2I>NңmM9T6\ZP}nP 0z(q' `1,ca(,O_Qzw+52]mҲZl5QoGziVK]XeZ?! Sa"(6joAHpe!? K:M3v3yEUVbc7m^ z7p~QQS r%E  5:.Gf>+{klQ t?:dchh.]M<[%D̤6, Kb&9&{jF}G b zY$ڙӈ䲧BI_)oHTɵ iɦ6#T1! SJ(1j x-\%ݣq,#>Fް/{Ǻ*kӜX`it]] sU`lPzntw@Q Jd,@-"ګ{,7_z9O`;֣410tlؾ=qX$m@6&/s;m  ,\0! b*Rr_ӷIQIbTC@s 9qL9;&! SM*@%}?Im:#ò&@junnG|`h}Lxp߽jDnlԩE>S:6y)nss:Kzm/=Zu]bmGp V A(s=fm;v&Ab^tAn3 xV&2@ P PZ5?e_g1ˬeC]6(s.J`N-i"J ٤B<>۪'?mѦ"(LJy>uh?#[.i_ ksE(.S:'bA c,Zm2!!FpX (w FxO(ux A :q? CQIv8{DҢl`͑&i&#*%dr$܉OWf%nQ;M Z%Z)\fN! Sw+F&jspps?;%I sS $iZӑدA^l % L rƀi^uaٺnm:)j⒩Umz(L4> @5 hɻZ;^ ^oh%%':ݸEpK(u@l" JwU@lM4r9:Dy$ʽ]1%xVz4Ua]gj}YJ_#}JT/^񭗕$ko ! S`M`Q)pmi_7_~p[Dt {|]i?BUDںA4}ρ8sΉ sVa)gQ*.rT/鏋H5iSңa%{PzAѳr'O7 yf6`ʥ]@`oSo@ ot8߂b:' J%:nd$q[pyaNiVۢsDlp};3wbv r[le1Q}c9L3Q! S$F0/*_tY*P[kq%6oQρ~. Xr6CI`JzrJpb} b-5Yg5M5Dsʪ:vsKd)80G/6P|>]KlbtN;;pχ|/ v7*U@BWKν¢h 'q\羅5nmmu u#(k ֡䠚ck{p]h*)ohXv! S$"Od#* XT0#pR`5?WX"j67וG,Mޙ⍖+5Ӗ.R xl%]>\,E׃)|k 0āwjyiێj`;Jdz_4f>H;rn+(4>^ON>J! S'ȪRjUX"@Fve'ʹͽlۂEDJ GRV@F/ XkHûƧDŽQwk1@ aJWptTYc]~2r߆x|_~!<1dBFY,T8s/qKUH06)V +fo[YcS9+'Zw{,fʭ (4f%x HIҗt]g8~_k񥼱SVbK Vj_t!#I! Se$qLR, X-auLQ*q\B LLeSGӥ, XfER49\BTewx T!=h12*޴&BII,̬V[C, K9{?J;Wtn^[` ;1bJTGlJ)=E⒰gjT7;/IZ9p[U+XJf۲ +lliNrB;qIHc' ks-8`nڝ! SeH`-[, pQ%\X~JT0!<ӏkdpElکZ$ yӒ+0{WsZ&MX֙Virͮy^sQ$}htU1>vBsEn/Ia@ `p2Jv²`uo˛,P[.5&QQd65&BY= +rIV!XwAH ]BIx(h;+ +O]m[Z:F9N4MC_cA`'u`.C'.) x9`vG, Dx<6x`,0̈A2Ic ?|lIvCL7j4p@a/E]Л6$i['ֹ?????}?????}?????bkz pEPeh뿮a` a}>e@,=+Hl׈Ws` aʃ'ϑ%Xc'ό4T,oLYqpҘbLE5SO@,k--UF?Y%~PKuP=y,;k?Y%y:YBV"Xo@A'Ex+ `Kip##𐶀{!f#טBԩ&+/'P?ysx?}|)@6EOs^X 4܊n6:2DIJ-_7L'|xD1)%?GyI)'wBe`4n\2"WA'x2"5b<Q 戌`a{&x mi$K)t|m B3P%C@g BV[Kؙ 32A UUO7=fE7$k: dmLVp5wĤLEv= /f|l4&5 %yim2S9L,L$faGLh;kveUZpc}˜xeQ"sVm[M7_y|Ff@r9 #~ַ=6x ثb9KPfN-Q#ޣ $qB؈|GqY"XA'`0-m1" ;ww0޸юg&a '*Sɗ~8q;$hGx.D6|]gG&Da;T'3ZyT+Њ~9{YX nr]3Xf֮k9H@t9#]Bl†SՂM Cꃑw*Wb@fP5U*\B51l0 o* 7WZfrL&7y6G2滱aĔ# 'Jdȼ4L7woG2ܠU JkÀTq6Xð|L]@SfB \L|rZ3Mf 1WhGuDnЏ=q3M057Cc B>1E5={ϟ'u 1,M: u0 .['&Mha~X 7 yzs[Uv|R}es%:s&:8Js6 XXq %cVA0>&X!*<~QйgnRn6Ϊ GxҁhQ!W ;k!v AYKJczѪ&OxxcN/ݱ6:ࡄAk @$SUzI9%rʶ8IxP>H4pPP~L! S]&Gf Q->ʌ6uSD$hi&w~)̬!#fyAZ7RRcoԃ 2â`9L+"H}:iwcU! S̖ e^*Ey@X:C#C!d'm>l!p !qp fq9AOa[I v Iy=g’1}9N>{x na$Ӧ8Ǔ /FO1쾈⧄y2>|dy"R3{J`<< dhރ4/0 !7e4uc Ht6g1!!>!0{!*S<H3eDPnt? < #m>mon kn{b*1ۇDE#g-H|C7u, ULȶ切wi(P  |b[0PqcPJ0(Xc۶H=>~x<= "!}*'DC`17lx{h}HaIs0={!LяY'"t,n%T]5#%骰MvJNMgʗ̩¼p03  NvDG8s-B;xĕTiPd",Bf)U6BCK-bC7A^R@ ܰ0%r>a}ݦ#Z%LJ"HshYECw =C! -!jT2ȡ1`CusPL7%,wժPt4Rַ!4b(QP#.Ke[z!Tu!d`6-E.A+5 uih^y[#\R,˺HN"J3zv,yctFjy&LvQ bV2VK-6xoORKQƅd*4)!HNIF*k 2ɆI_n_~ʬ> OdslZ8Ԓ`"[RkTsnpKi76鐆[@|*<>bz!TMa`LDsYr"BY*/>{ȱN1V7 / WqK/~~*{8_UUkIEP#\{$pﮤl`~59#%I4`xHqߎU$5NMhg\U/HҺr>VSk ppt7f:w)51<[h)ㄎh$SMVMrN␁]}_hxf~&Woyર5=! SŅ$B1,qZˉHI%P%tdq8%sAt׽l?Oo1[<.ͫF+P;("?4_rS0}ގKJ3 aETBKU\:H긻% > pO^qڍ3༌O,Qۻ.ۄ1I m S[j"M)4\yȳ'!@_ƫC 2wKafb#q U궐>opo[jq E#\̂zwKj $ Ƀw . -(8ˋ"c7 0"*-@Ȭea'Ea!2QH~mG! Sa+urp RdD,^ E:&crvTH-sg,e nM :^[N]ok%[KC^qE"\J_%Ar1*$A @o8D8g.,&&'zg=%pzr4Igr*D UiULu5Y έ(\)TNJY\SlXVFQ) wxE1h8:]KU2rRGG'i**c-S Tyh05T P! S>V Ke% e <  & E\4(Q|*YyW $W +(/_AƸ6Y ܕ?=ɢ#zv9<Nx:?.iӞβ/P(`M/ǣ'{Cu;_J}3B0>(cn(6-,p@RrL KB'-0<**pgkVҶ$mC^8u3~oA'+L|g) v%!|)o T^M"G )FޚG@/"GKso3"9ty&Ƶ˄Ma."0:(m%~@cNx XX0BD瘾~:(SpJ~(?GGM??~ ĎXu6_ojqhA@'|@ `?\iV } xFy|%Qy6YH- ƚA ie(̀o$ umȹ^'gĬ1R(Mk)O:zX!KC@ i6W7rg $I`cgy7ל w9͆鎈>K :{oi ; *Hf`36CN Gcg%#|^}IRzP.6dd9Ll U7! 6v@z!0>3 a@7ΏWv<H. -0ю cMPhмg]t-ֲn^/=9WiyˮDsxƵ 3b8q\ۓ :y,l~k5']&NoֿZϦ?>ϻy\" &x&C@Y 3dh@B@A''|O>'|O>'|O>';C8@@;fZ) \ Eێ=hg+ |J( Y@`hnR@j y80BX0R bdyft1FˎlTX}O  {=w2D9 Ư`ǡ(9@SOt>6'DŽIx@xCn+Eg;0D̃Fo{@~ w1^! #?16wɂ3>Ό;9|/$3C xA'LAXi&,; r FBP7oa;!]Qɞ'h%+:cRЊf 5C_>C ;t&|F|FB}ϟg؁*6~{0;ɔE2R7A3G*xUApA '|4cz CYc6v 夬X%I,!8k=0J[u`Hm` 2!2N>7JaLˈ_G#uB:F"$1 /<@O) VN|n-067a gΆ`DiPcWKe;Ax>FA@'g0e&y 1,6MOD)?JI$ #1 C =|#p l@1\qX8dSOd8`=C::7Î>.0S%?G$<_̣`p&z`K=5oٖ3;qHx X! SaXIj-ID-080듫&U_TUL UNI>¤<:wxqo k3[A,@~#Sl秈IyuDwhgJj ~}_?3N6 x?gmG?qȤ٠b[pv3 t(=Sb^a`0%-,ɦ~/0GP ^'Ojm;֭x8AI$(Tx EYD< 8I]F! S8eAƮp D dkE::հ}.]K2*g ̾rGE⑊>t eRݬ6 [UX 5dbkUy zǓ_#QNR5x*W@S^g",[@_oo My`®DҤPdeݽfP^`!lhG^?Tu=vr"1-Oц Zz,G7fe\3#ZX~ӂJʟ<^w0 2 [W}H 1W(/Mɉw@! Sa|"@`2@)d74vofCOBs3 >3D?hwZڦY 1|WF@3` @ t>`r '%H P@{Y{sf{ܲ$aL? !#>vc$Y|'BY>> ᴓ3;:7{߼?ٽёx@! SR,H@Pf7-CAψb2La%{b {mX@]ڰ>ֱ?}*q`<{gLJO??#}Ob{|^+  PxBB(lxxzFx `<8)KgfݧP 5HBaZGj d<.\dVZ@Zo(GcI>wѾLji@~U]__+|"# ? 6JInRK*3!#GJ#+%(c"B:KpA-0j%u̩|Q$ݚ+BWV B ! Sm$HT1WQQV WxcKq;u i%D*[IVd)* M ιcDUJH?l^M\_W(iyHR=\ɠ"T>J- .WI\`5wע8.]Y l HTK' &." $s @Bh5wK0gAG$8l|V &4(&|G"|d_G]a 8폏̷Y֙ފAs01#ѽd~@~p)#S ϔIo"kF:I''?Z㢣Ȍޮ\MgF%t~h4{|"MQ0ccp-断YY(+l3@ߙ@%)*PR7/,1{4o3F~+%Ѫ4ͤ! Sͅ:DC[$ҕT"wJ0GiPfUGŐV ay(S^{urIy]X ̒`r-OW5϶sZ@TM'p!;.Th;:o%.=,"gFC$5>@0"[qL5 {T a'gJ!֣,IiJ\z! S>F"X2ʀ 2;tLg}Td9zNdґIJe*]CCy QЫ޿3ME o%nVxx U  %Z;Rq#)X2 T'VQbTUS@h ,,?w@ D !x % Xk-ND[XNb ^ͺ7R԰@n,_ ѿR[ ! SFQ R JK@T,Ɵ{טA\+:'QFa:^aNu#aEn~knsm ܷk"ݤ)~9[vo$N#M:~-8)qLm<~D+kٷOLRܣiGw$z (d 9dDh"PN[R) ;J-"lZcY@ !. 9>b `biV\&`q! S PBVE8ON8s%ؠ _s'k_`] }fJe;L .o0Ii gSa;jё?6m+DB,ΰc*9gG@DyfZˀiH&F'׈tK\C9tL{" HH kV7f0,JN"F@%R.n̈́8^B]3"F(X[ThN(.E&q_}X"̌U)u9CZ"2_Z*! SaM9%Y((LB4+DMu Mj^7-oENNYsX$Izq*Q~(=!gݿu$C* {jJ"*vOD\'YݳT-U[?M(C_(\e`/5 H3|VA0D;N,*BK׺oF9᭒ر  ɿ׳>cJ.Rfd+cr-IQ{ZC"Py:|m<-l^-ڗJXbFߵ! SEI([YAuBXmR,]Xa'}z麇h2dpT~*-E^2zta7!c3 V9k}B(GIBE^QJSO<+SbWU#Uy *6Q`! SBPCj;EP%H<#5u^ಭm>tDzKM.y&ả]Clk)i @elf%  4tb+VP铴>x>X(7}u狺8,ǝwLO;˲%h,U]՞( 5Vy f4sڠ _ι7xcŞiH_N7%RoҖ/!hHBnO+dq8TeA)yW 0  rM(i*vA`'@v"J؁zBϓ c$T` IT_~mM!`xf pSԇn6(͌&0zΤ><ɜ}燆00b8FN|%;@gO0?$Zi2΀A'W.'- F!ั-rˮXAG <xf68L fE'#&q@3n I3ʝ eƓ D=ϰQCbG nCo7䀁ғ5+ӈ'K@xA'WOMy -UEm#A  D$XS>Vyqu)QU8#WXq<~^]͓BnrB4|lD+`o?!6f 8c&$l[?A*{3߄L3 `j6s .WBN.!bNjNS;-_%iF;=Zd܀ͽqZ *?/U 5<|@`B8K͒'..AyV%}˹XSzq9_+?N\=sA'ob$ e_~qDV?De #"ZkX^4dA=.v08< 0ǰLpv^ϟ/[eL&.ŌT6')SG LJ1dh9T%4'K-qDN Jp$g$`CH,=6F6TD<`tcnt,R 3d}7t`e(*-'=HpV*Վ?Z94@Ew Y?&{Z{;0M8J0 =-C *ocCIṀ~&x`%|&%P]+0 :  #<????? ax????&;?????zaeGxcusC`H@V@i=BLd7u90(;pKq` c o* f *zM'+@,8R_Z^K 7$` af`RtXR'@,k^6y~ f+hOa{ydxlz ?Y%ɶ@,kIA '8z g hxwb<> pȃ{/l#=7\L"!GbHGANр2R<.o<lDEw͏Vl[|?b0L?Cϡd7<d}SogQ99W\A`'W!CZZYE sXh낑bRpc5*1J$;9gX&x &P2 gE@-x͎zN-C~'s jfY`hq螏~)N&/uW~_0o~`ux}\?2c[LI<cYS#~A'\Lm)jZIW*04VVǚ4L$ iAi${~aϐ<_V@3`$P0_4E}m&=/ a852Daf@w6ZidSlQ`pG?c,Q~ "f5ZcLt^N@3xf00fGA'_߁ E+OeޠE9VG!C$a(]}b-xo;ef@q%3n6*V!mnw]-R. 05x<$?gNv Gr'af =o(r`3A'9%w`x0h)ZJ8uf 4k4Dh@<(Q NQw`3b;GARĢwOo6zxj8K׬z23;H_s/3;s[s'nc'5n~@`Q+> "Gji-m~N``@FG  Z g2*X vy=U}/:f! S}I@eaRq57sS q01xμ.]Eefv_@K + ; Y'0ГU%4jK(zqy_9ǐ;ytګ,"''$ SwtgUZ;q0dJ Դ+t-7'+)Ub" r HeȚuEdmsh("Ft~ܫ/;P ^ ]pF AzDl"R^G#jԯr! Su H]Qي;Ī[mnΫq:34q$zؗҥ'-e%Lr6_TY-PV[n E-WfssȒ{~֗f#Uڵ aZrN~x,?kM `a2`Ѻ4)5.V^(uyx9ski2U½++Lq4D"[FQfVdfݩR*5%eLJ ;! SE+,ڴAԏ<\|i*e2l{\rK5dkK6rt3߾T`s'Qf! I 䑞@ma9W;*xy&fCۢ705ct,u!~ub tTvx`+]E8m##!MMe϶J[jt@{/2k<{#V TKxQZV4U-ۖvYdT\U',ǯNl[h|! S|1 G0olA9V?ȊO ɚ2mUjV>,j_*9LաOpKx"%CFi?X30LRNP9ίV`AO@ NDD5|p3h"HR-f9ұ,w2dbVCC*cl T._q|J\EJ $$(<>ۖƳ*UvVJtrl9L2xmj!F6R7 ya5O ӵ=i_~XIo3&b&/tg|fJ`z! S5 *e+` f$Hs2en;@?7Ԟ%ca1Է|bE#ְ׬ew>9褿2\ 肗'ca|:f޴x/S|S 86 ;a e@srr譋lݻ)zEc6.45 bV t,%1R S,"ÒV7z!1E"i-*;/+s׹a! SK!9@nf@B/ \+Dȍӹu.DbyP@:˒xCj2t _TFYQ*_gC:hMGw܅tzQghWj'*HtSo&}WdV82oiݞMmۗo :!L|28 F&.$!C` &_=]D¶䒇3s*^D3pmƤ8mM[! SYa@ĹjJ!ϑN_j%hbCr0"o1I-!! b5i Cggl'9XK3ƿlGr;sCRj̤X2]V vfpgmrrfYUGg5d5l5])!:å>k[SdK-pf( 1*;%E)m _ig٣WŴנR@uAm05=Kl8)쥹l F;R+te!*S[MFN@`ʄ>0n(G 'D"괔YB5NY8RG:ZZM9‰_8Y J,;B[G]FEQXI Fuyt(Z_J H B @_jJ~U )Dab>՞Gx#AD ] C]@M UFp */as((y&5E*gFQ4'*>գz^!Lq)|gN}< /ؾKE$eΑ(Bl(D'?wILxtw^N5+u'6yUU ,5[EwO~B{q';""ى7.0<-V>pަN*u+ﴖ;Bļl73\>!Q`CmEyY fVS粻g:9[6`g /ɦ! X& IRu܀K󪛩 4LŴ=|[_NÆScRͰ)bXK}c5~XB=CR@~!jT:ɀlRo@=qpԼ싟ޒ$9 ;,8$Ltut3o3˔v!T.#A!h ,$]4Sk daZ\Kiԟ()ah€,Ԋx+Qb׷jK'=Qa04L "tLŒ&#j"2,"CAET?'56-*E(P"K-ܖYR<7? RNGn>j*# ) I4.V l Me|r*ckoo o{F!_i쨎\ʪnUz`I\@PVEv|k*C[%U3U@KUAԉ#H}|E¬"cHF ktkʵ6! M b>ӤOa::NNX gx:> t;+zǧr-u3;Y ~?cOQNۋ;9(ZgG fYwS=4br!3w,KJA&qFjR- (ϼ`|'bеB+Q+[UNURH]3! SHCk$|FWi-/KHp^ƙ.w6І'q"C<1_f;L/gQx~'sͯJ?EXu|9J*=)ED>OqcC0/ Ls1H!iZ\iVgY+me:JB' &Y19LܢPi<­B`P6{21D+!r-H8E `FkP @ @L^#Z0_,!Sa!2%JT ynloK[ #LwXJ;j1| 6,X:L3;^]اJb1V+ik߹,hpNSt"us,Ls.xjg 9 6]قyUAX ]@f ^f8d/˭!;ex HA'?M3&%F JqL# g4J6CIPYL¿-rHy2IH*_.8wkؙ`"<#s?#yN87րf@񢣠]8 :@h&;HA 'L\ 'Zk;%B> rI4i K! AK@f`pnL\ ŜF7a8ký] 7I#H~sC+/Yu9O<ɂNC QMڛ *^B3ҪLS61Up@A@'MwU1N?) wȌJF + ^B`SS񧦟Gwǔx1sJ a쵀̀0`_ד ly*q\k#@:vR.~L>K%#+Nﯯ} (⠛0?R$K9&zA`'L O?+cc߀<' UFcTpo#9)~/"*Ѡ$ u3̀߉F %7.3͎u2QhgfcAs] w,~7Jf桐 Q̲&tYKr!e =)nrpVɦ#`?}ށ}}}}z7z8@$DQ<(p}U¥B1'ZD@+!Ϊ̢NNNN30[e6i'((~0kBDU YuҠUIgQp\) 6G_v M9-A frQeE41GQauTͤku8J? l#; :zL-McCH}M堄4[7y"RΡE75MB>/ᰊD ӟ>ۿ ;A#"0G0B%nǧ+]8+^&;_ss՝`i%)bG7RD jQTzS@'aE)Xk21JqjH 0%c\%^% l]r%c$W;EyA.Xcgd[nu(>ydty O(~3?IxAoU,HU OOʔ%`d]~뮺뮺뮺뮻멍㪸뮺뮺뮺뮺뮺뮺뮺뮺:B^^$GH뮺뮺뮺뮺뮺뮺뮺뮺뮺k+ k]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]F:뮺뮺뮺뮺뮺뮺뮺뮺뮿aN*AhD(4?/? F,&]u]u]u]u]u]u]u]u]u (z'@6;hza@~B8ƀRT# vi_v(_}]u]u]u]u]u]u]u]u]u}u]u]u]u]u]u]u]u]u]u]u]u]qo?A@͌-w{wGÌ~ 4l]DU$'#q8,,` f?Fp1N+U|zpŷK.va^{}~!˂ 죉M?z뮺뮺N̪@bVn:+k H,{V^j " :(7_yp@8eq5_Ox\{ + ʤkHɺbC<;$̹5ep'&`(7lA#gZ…0I/ $a8CdQB G> ʑT  /ºS`cT@_x=#B`6]üq C|8`+~^e]s$5,@;9fTa0,qb!T# ¸'7G-AIӀ]~ Kbf?!qY27-/^ºձb"b/&5 Bblhb#(v ?CcR*8 QF\gS lkMwc!{X5\J4#dÁ˙~B`i+\@G9R2 xVS0MkV ^[L\l6@@1T]O+▅ <̀"$bÃ2ݼ%WT׉Q\h~4 4M5 J6ҤE 4P<gaxiv[afr aM~bюQlAYyqz 0q)H?7_f l4:[@.?p[M,w*`w֎'`,k `f;K?%ِ\<>[=v87?*\.5$4'H6D~,ƖTƦPo -|kKzQ ~ L4e51[' VPT E 1q]<wFqACYCܲOo%ADvJS?P=~x%AEoe%'Zk~#[j(>X.-k]q~C]u]u]u]u3chn?]u]w˞x']L+z뮺뮺뮺뮺̠L$$Y 245nS)pчve`(e*8@4p[>0= ^0FA*eo!2L@K@fDq~@PQemyhnl/'Am(&Ӂ`)Q݀PP$ cC@\;ȄXL(r j $\y ?AGbju%OfYH$ ߀3\ډV s] Lw"T1('f)!Tt; ]Ԭ_>4rŐxrg0 <(J/>`W9Ґ6[M,̻pli57G' NaU)ۂFBDC@| ¹dGj8'߀vFb׿N_KP?@[~?~+! " 2 #,!Į$TGsKfLG61e%44 Oyܱ'?mђ@AxӝOH HCRCbdUnˆW|i ``q5ƊKU #ޝ T I]ޕ#H=XO\!$.v>AS (kjYj1bad!x,̀%ցOa4'HK\^`óUʖV8yMnA>%J`,`sf v /LdB .EI|\>F h(|_4VZ$F&KC)n +_EA;yLurWWtmr:w Y,rCpJ,LA.*Ss8uȷG߯IO܎AMo91bvt/'d ޗw qAwTYPşrGV?qT q]%ة#im I^ eˉ]@$!~y -|4%y`z C{/O]g.)A m`L@k-`d1 R1R ®N(틀X P@Rh!W揉/e:Έy,# 7w i'fN? 0-+S`:._Z&0%P hFҬi Ibɡ"zKl&߄k}EKްьs|΍]dj9᫐ gheX,8rGGO}3r-bh6o/b,bFapQQ(aQ ltc(bGM)+y g@qJg8`!(/BME/iyؒI6Ô~&{w}C{X@ \Ő1Gܲ2 ߠ3{fs/AcpCEeFai "!ڳT; a:F  o)/2r_v )op*$7ÑXγαj0Z.n锖cdҜrLpa=c8mlkՇgcasZ7 5y +9F C;Ym!1+eV=DN)LPLxp"KYƃ_a8kld@`JGkB>./=> SJZ$z@~t2@L.)&lɳ W|3mnT֓4 I L5.`t]`-}hٝ4ݔ% ÿt-M;V! Ih\,@#/9Hm0圱߀ǿ]aR, |S=-vQH(?!MT&D>D~.+hs3Wd }FHgHbJKoQ-' 2TB}n&~|GS86 IhjL@rM@"1,?!Ѐ" &TrFJMT L.X]N$8.ɸ-TC*D >`i>Cŵ[&atwK' x{3@CM•# "AY5>̄8D.PH4Δe}뒆TSY{'#?+ @}.TՌ 35eԢΆ|U(4S!ipH4D逃ԸTt|e(㖘𛔃 @ UbtzXqLNٗ߼¦Z+#K\x !pehp(ɯu!.vH 1FMJeEZ wW5̌P <1O7B@}<˻242Y#|\)ro>Bgj= _1 SAFG-G|MdUۼ`EOh?ۗ2LR?{`P[ kemo}m$i&`b!: oi"*,f1Շ%0(6#0 S$o@(~ Q w Í3.|ndM4 cAUQWp$^ 3 ct $8ƾFc"ʋaLf:Lj_ p8~y\Uѡ<M0(tȨ "Zx^)n 61DO~ PxK ~ se9/-,}H帮v QG=Eߋ&?Nlfv]~ . enb gLy6ٝg<7kTj&T@kq.Jf4VDdʙQ 2Ћ D(?1bRbS]gD ERbª<Qr0Pc+Xz+(k*<:)] Cᜀ ̱േ߾ QhDM;#J)X.J[&@^ 뮺ͳZXTfwTfˇ=ĠDQWs.T!"??T?p!(/@œ{:4gQ b|f%QT G(g ׭q?N8S* *pvV,0-$)Yl_(Q@~bޥ@XE#m.tPY: Qv5a[o0O`HOЅ}+>O^JQA?%ǩQԫI!vD)GkoP Ak\ck]u]u]u]u]u]u]u]u]u]u]uu]u]u]u]u]u]u]u]u]u]tA ''|O>'|O>'|O>';=m.ubL߀?(21l?0e-|9ZAn 8+ Р  ǰ6X=7qD}AuǏhvX0I0hqP_ y+>:NΣ6g3Ncة,gvx\p6Sɳp ~82gulz~OD߅ B Wa'/_0ZI<89Tߣ ;X<]r!6go#))rtGGD9??YpRcxP<&e!}FZ#-&C>M3\%)zibw@O-`N}Mm5Z hài\'ǀ+S1'33,#xk,d~ R#x8l J[GEtGǏHLܘ yVu|g/]%ɭ"kk<ǻ>*\t|[~?͈$ˤkݸy1NIpg:SO'#"xTNx H'wb:Џ=Zot8q6bZf)4T33 3t߻q1Ź[:gRf4$OQjf mg:'!`x?!jXG˼|A@'yX3&v@q")&<%.&怇oyLtJ#x8?Gl@e%ɍx?x 0<3sp$\On9<' q?8g ` D>Z(1?Q+b9Dx>%C˥?4{<87CILlpcRf?`&`A`'`0`EeGgɠ!CyL7?Q#xf~awP6"/iSپ6B >f13. < bCR>Z!` -2#;CfuxKSniƃ$yҎ`Ry!9&G2ZK@A'LAXi":C>9i4?Or6T=x&D|p`3d2d|P62 L̢`P. ̣ T볻hArrWG/@9?g1| mHpظ=2 EeFLYBA'o(#Xi_AdBt0\C r21M0@/I$&Dy$X ~J?# 3`,}8Z084t (N)x+p-oWjnZh!B:@( UdS]'L|EQEh)Zis8%?3d*5BV`3b uQbT!G\$#D$p GXC~ڮ78'/Z,WB0ԗuG4`!SU*LH;,lwPgkKK.dϒv W}k-i!Do_.zKt*;)d Ddڃ= t<2 +Vb_+e&DH`9 qig,.(%2HFf$C(vTB !Y z#gI)sCXVHdu5nΦ^=j,yԊ5x2),Z -1"^lUxA`DGHcW {KQuI(W"1V! S8DUM*[&_I]d 2 (*?UwE5nwnJPQr`_r@Xv '3UT=֤Ehڂ@Z RkEUhk$y\Z ]&"' - pofNQ{0 $z‡x`;1zՒQšN ! !Bc,-/ +Ko3CE6HG$q/RmK=44';M"sڜ+ g! S|ҽ>pbf^JIyV\%5@r!*XtN@Z iO! SU(D+7*@`СBŲ"%u U^p\{+Qvz?hN>>7b3&vnc>!bq;ATpaNdV i} pax"*Ǘ>z)y^U\r+i&oWE#p1QxY䡃T@h V!Kmn5_3,B-/=E3u3H! S}%  |fny?GBvG>ft1.hVl& A8ۙ0>:o2r<@ge91MF>GŔeLjy}a\DD @Pѓ\opbYZO3YnxoпJE -'JFtPJY㿓  fs` }mm?0# O .1Y2<~`&;;Itޝ?;xI! S] 1DdCJx^yɚ=D>;AzrCW4`tZN'a_|m[xn~(0X>%kgQS!4<[EI% lGP˧Z}FuY Z"N5h3 7rOP% OY `[%hSpw}Zs-SYFbjI,6']vP@hLMJ!Gk!<9S@]P!:+[>YmrN qunzv.%7ѼE! S`7C,PJ2U9ÍLxdj@x$Zۘ |^cCotWRc%MH |pb/bJ6L`HVU)1h,1 q(jp0sx a&CrR+AUUEV WRC@-B`vUq1*zG*莿Ne7]JJ5H==m-łelp0*i"Mڋ8ůwKZ}پgb;)h "il_ MWB`*kP%ۻ-W[<,`D +f·Mo)@PWbƥ fkj+Ϸz^zӴ)-&0($ml~#cҲ!0R)pbv! Sub ²(**TUq)h]4:%Ž>55[f:շΔA۪h}?:u lFX q>b1ʜ`SuuU]dN+= 1|$Ij6se:J!ˣ5PfX9" gi]{GQߜ1fxwZ4/>l%j׎! S}>J @T >cdA"kp{9]ɍ}etwn=j"IH(d4mNUJС+(";XW'1 _}X>O[ -!8 H=%8:^'gi30=C|rCN"ҿKEwwA 0aP Om2,ޗ+Պq\}&C@A U D@E[}grODQ! S>ƀ*ĘF`eƄ, ^$Yz,F0]MXOp:mGd)^Xv31 OWPSa^rrsDoAr"[/ڂ׮;Jݏ@ `%91c:^OMOuLPI\B芦$$b,U^۰vׄVӅ.(SNyD֣! S> !P*KĖ:k۾u-,+& \[ @cQJOvA~bb\np'C?]ƣvNssb J\𸝼>'_&-i%0T)mPϼ (zR?&N]Mip=Ǿ~*PYkʻHpI:ȎpoFY ' !]]AYXU+ JvdꊰQw J%6)i! SFL!Ҧ^]f*"RԌy&;WF_3ɜ 1޾}G.GvtXhm&W4yЫG]>9dC-:@!B.oWdbDy.~EwdW(tp_܍kdtTSTJ "WhsH#2)@ΚiQ; ׄV)m11+^ Sh!Z ϴ msRZto*/InkmH|{ƴX6*(V @ \ Og_|F"@O -I% GJOoAL"P߇ * @ǶiH8P|!PW,uB^|XCr3eU$ˡo{mGjI .tggIcb Y 68F`@{?#-{)A̩Lؼr_ORA=Qv 2ob{cDNJNT6h$rS9! SIH `d\5g?oKzSͫ$51!˕t "hS(PVj@lҡ+G0hJb<#e_e~y.KM7ܱe*]XW]2PyKI/LNϽ3.wuMI OFHydV8! SEFV`!E,պ9Qv?Id BX+(QI y:0'3sϢ\`(9jy|4Mn/Tʝo߉NAʏ7~޸B%nF #6e6)@gz[ wqfM@ KyzzNPk4[s,rntqUJ= jVN$U 1^VFhqh#H Z%4Qk& ߄y'! S%!G90 P-Íp }Lh !c 2w`")xv p\N>b/lEҚ}$7FoY3W>P<~"s3 ˠh kxl-s1d{Nl9y1{@lت )$LRsfs(T_5auqsйPU$%Z2 d6Z0INԬ3]V jT,*Bf! S}*W8AD`f9Tt5ʌ",!m=x骨==REXv}ĆE%:xOe72O^ˡD& ۩$ ,̳̀x 1op6b\9A@'Q :N`帔{Ll޸*\X`D6 <x(m5X!H%P ۊ"'f~3pJ~~hM<hM<}k~ OUIK$q\y0BwˀA`'!Z 3DaI L#%uN@@@AMf ~H m~Eo,<~u'%>~ ;ap~f@uhzʊb+ۀdA'$!x-ހ- #y|GpƯ; ;4E~hhV'&`TP?S0ϕ@%=_}p,(gίA8 0(Dr&@dA'!@jL %&xL.yxظٸ`5#`| CSja` WqF!Q7-r("@_0 x|I(*b9=%{PوOAzJ@ @]-FYs~mάRF+ NN0 P%] 7OהF4J`̿hĂK}J-2ghY>Ѐ|Ƅz I}sLa6P~q"0|0Mxxz u.Vl%Ё97>`2ɴ`T4'Fh x;74FYo @0B ӛ(J$|G&[ Z$EH}#y%QNމB{~%`~rHN4e?????G?????H/( a ?`pȳ?LSCrRra(wZoRhnL Q 9O%XR>AD@kC;3z%X{k*P;gôʀ%Xא'K0X^zUytK0u]Vd? fW?OT@,kU f5%甞 f5|L8A'  3zMz^٤_/7Q!q9L< K`Ap2o$qlEꑼ0G~ϟc|~ O?Ql_p"C0 x9[L=m3 Ay;401͞|M6ckL^EGxڷ:bM~zߏɁ X]{e'k]w~}wm&Zo>*e =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr>8RV@ VVi 7K1X6_~#{!f"k {}''''o>"^:8)[E釟( ,"pf!0 +X,ՁtJ>\ti \'WR1Ƒ Rܢ:?I<26f@UTq>ZB38+rWo4B0ICX8eQ"爃H = e='YV*mM2({,mkx@} P؉>CEL>&ǽ  B7MZItpJP1]x{/`94]"EmATkxxWIZyE+gŠIo|v{&){9[KUAdRʹ4˞Ʌpj׃EpBvB#B9LOќ!YBس^1R :I xB'Bw7*C L& ǒ8B>4$ Y؂qQp~Ar]u]u]u]u]u~뮺(gJZ𖬭ECX1<7 QrVFCWݿrAA.TA% V$b5AS_KQA{B";Vu3ASet1} ndWPů? FX |4, *pc erGTO򭛈(?9JW湧% Co]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u\W^Xz뮺뮺뮺뮺뮺뮺뮺뮺뮺g뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺i뮺뮺뮺뮺뮺뮺뮺뮺뮺}pwV@x,&P u4za<?-SOWV!G.^+Y9yR~뮺뮺뮺뮺뮺뮺뮺뮺뮻ᄎ뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺;Oj 4 W@b䥢LG=ռ&ϱ>v #J@i3??&jy_>$O$|VYrd8_].뮺뮺뮺뮿WT1m4W 8V2X -YfCPllw㢨"+Pg#&%jMDROx\{ t? ʤ $`#_p%51k 3.S|_bBbD,R$haׂ  M$X8/¸d';YlJ=3RAv={w! e@P@(?8W\MSIhc  ɀ0 `! }n+CrܰoX`J Gȱ`'y3"0FhR=65_2? p x '  w" L8"+&US|+RCr@5|+ [+0 "*"bW?~FL% u͡t2 OÂ) ߨ p L5< 5 8DFS$8B0Jh'u ZaX2T@7 ቜbH^I# ֭` 8ȃd E! N)hRx?H!hB"@8F}QkFC??K\p.QOxDhIqn{,S("v^N'e)ծEjFalBM$eL"N^k uh=LHjaޟ+ j}&^;~<"r=y~S{g)?MGSQy &|7{^n V aRVuLy P8[]\ PX nj4B0gP^,wlhKjg !zV"X*_ m ֜& yLعAmhЊ"\~@Ğ)zcތ`Gi˜W0Q>DqAEh ^э fA$ $QBM߫ :0`1r& ? _K/M1 .R , *-ؘr*!CO󀇨~ GSo``y [Sق(^l7!ZvTx8Kpe8/>0D w?PR0~C0 KހPq2[BVw`=ɘHVmlA4FUMPc  oԩޏ!x2;m.bj`I?;# 1VXo8HC7﷣b(~&|,VB *o/ r+"ADw, HlcKsp16{XӃ6:nJACϼe-9zChPiVؘ͇Mk) Xȃ &j@ֺ0w)*:'頩<ɼ?@'OgxYl4ՌHT wzH,c&cЪLFVS D/x (JN}p Y{"20OvvR U3kad<xmN18 @E;@|\>/K>/.blѵpHDZ`l UIK @^_qtZXpl(+D$i0@9 p8oc6^4±</vK2֠;$0ij%5#VNrx@] \Y!Yƙ "<)tb#n1SR@6q@$!CO,-|倰AAxhEb? c+ Äy|,1 K!wz ' 5G]n )R;2V _H"cj 9b=oMmGR`d!܎X -d)bd^!߀a8ל[O2}LbHVp}8Wg!fM5- ?G~lno?SpeX(^ϖCL qx~,H3w9p Y'; (#-W-f1|/&@dȆ !{ۆ[߅I@m 0c) 6GB&)*$7Xγγ(#xVEe \z`½TX" IqÐ?$[ -3Y>| ig&Uan$k 2clݜ Lü`B`?!Ѐ2 7" DȬ2# ,hP]>Jnyi > $p9XW@Kd0J1rCAQ s}h9NN FPFz3AK?`{Bm _WҐqL/?% 'UNaf ۹|t%H/:#{Fak58vG )y󇥬Hh ^h T"* >B+KLroID[h821Xq~ǔ9m&ӾҔ t57U|v(25  wWzp =ΐ z.7BW0|ȿt_'}q%?"{)_8(p~o.2]`OİTz4iJz2 |kFЀAqQi>'?Ae 6߮CQ  һ?@1rpuˡcR/{-\wйGPs]]]g3cN@`Nzbz ef00yӁ\>ٯR(IaR f*WYVZeL/}/e/E(Acȼ~x ;"7=ax8A`?B r6Ґ4< IraMX= +xڅ\G)v !ᜀw_aC4 "Q&w3Q߱`ж6+-o@ +}뮺6J:XTfw޳J3CkU$Q~7?BD*D ?R TP*aܢJqD.~:$oڄ5-B*g4ݿ]s9Ly[[!_obʡ 40h l.~r#a)m]u]=9(ښz2k g-Ĵ3hˇV˜bά$_|R{./G[6yg3œD7"wXE['9d;K_%@val9γWC0o÷ @BLܯW1V1UY)Fdߠb*V! 朠AKo/(bQka8ږ-뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸Xz뮺뮺뮺뮺뮺뮺뮺뮺뮺뮟'A 'EXJG)ID&%K io0υ2fg4=/}Դ)euy!+w%x|/ zHrʎ oT߀͌$<)UU#/KiU QE0%C){qG(OXK]< [dOW5\nIQ"]}.0qNLV #z|ՇXC7xg7?/pFn3'a#s71w 9)A@'_mqPKm @Yj)S Ii%e#4?{aCoq 3cwZe?؞S9*U?62ow"i鉰/;$= <H%~ 9?'7^nL;jb S0A`'4PO,%ll˕pRK"FdFBR/ Lv3|lDWë́ajerie'>+RX7z<1vЏ>eϼq@ZzȍjXDƪ;^i%׈`D=H3ϲC cs@! Su)ȂVR]fhigmŲnF8wՄݥPSrУoJYV X0]ͩLO ֥ (;Mp- pS1(YR,pR5=E難ISMyWqs7(aL ٛ9-qEОHda#l% ,lr<= YdJbCmYB@8VZKws p.Ka3~! SmHF abˍ=/"⟎ T!7~aGC-RBqVPCgވiӓ\zR(/aLZtO84T0 )kawNMYR]b2-GaJc@rMtrح%hZCW!Q) .Ztfxp!e` @ (iފ Ңj,J !CPnN*|! S4QSr=Qp 2y#\X4_E (SDD!G[/ wJNrɎ:FLIpwyI<ΒF\2 # mZf\cakuV+wvXky`+C@WIW 0ˉ͆ @"e@qdY| A1u K+~/^\h8&XA 950Ɩ*O%-Jo=섗yBű˙k4;7a5dj<;ڐ! S]$ Dڹ<.¸nlؙ*$*NO]AyN hX .:Ęͮʅb Mkb34u\6a1>):Rg{#3{Z `ӯu):r2ɁAC՝gV{o 0ՕHȎ1$ϕVՍRyYq'FPN,kXQ[&!"U`DmVb$KNee/Z! S=̩Mƒ Ks>;|}B7%FGnS0!6*m^E b:qo["17}堬K脔(#Kґ6r}p ' ֣\`JSs/:pΑ );(x $#xP coPڴVPU9*atHآ)Hh"9A6+>tXi_0 fU/ =DY ! S]B -&SӘ wU_+H%.i?.R$TwA^dmX!VctIO}mdeo~Z- Kvfl e2PJ:Y`i(`L<F:U5뱆L!Ln܃6V(9 UV':+7&E|HY_U>])H,\h1N•Mk]$u*.C1?2~! S5#I*0;@ՖPܐO8GN_Llܩ,꺁9/E/;`aڠ6iΕK|dWؤNiYmkq$dmĎ|{9Z H;8"$5+"c8bAS ݝIj0G% RT'S6xP,Q6)|G:+}Fz6;S^L =1| $.$0U*샌D:I؆qWR$ut_$^.E*ΛٯUɕ! Sy}@8:EfKfp1-=a59àf(pG4;!9F ^r_'9DAukC(9 + ỳBjD.&UF}0HKaRx Q@&f.-XQتrTk襳; Ns<q964EN:YqeL^ }<%AЙLMs\#hč+?l`2s! Ni~@Qj:bcE-0[s|=ѓKd Lt<`Jрs(( @ (=`zz|sUX'2| +wdպ>U'r|\JE y!*Sa jC @=<7ɂ_1(EZj?R3{n kwq qҒ10  m_>'<Ga?3 >6Ն58a>{ )  | >;E?m̗`0 x[`{nwrAC;?:ϸ @+) ?*`<-w~>!!L;J;0hɾPbrmx3Jdݭ)0aAdKRT0Y6ϬPL2Uܭ;ے4Rq'As# L9UQ=JB -m -|m\k VRNFF~+}̧A 2o$@?>W<>h~Jڏ=ҳvZ烀bA9P#8$lbK"((1>:1DvяsnzTORX #h*x(HM(k|Ju F[FA& 2ߕjT]ɞڕL=OI1Rw(=U%|!jT)Gc؈P Q)VpLZv: Zhb9<+% V+bg<,UL2t.xPWk_.Cyﷶ~ݗp r6ξo­YWui^MO#|*}&'qd||J__kXm6(Qv'22A_2+P qR]jr*֊{ڪ"G8k=}C!TAb@vW`BV 7BSC,ABMȥM02<2&I\ںuQ @zv9:o .V~_ώɲz\w%4}i'؛[Y20QI4e֡9̀58dgRbmS*eLjAeE\|Bv2ӱgLSSLV ]ب)ĖiLZ!՝^AILc|Zv)yYаp).KP=!Tch1  %]I2E*lD*KWя'ɂLSr2!짫Lk1\*,,sץWPVc8bMrB5! XYy*E G\RMe B)gWq@ /4ym2|JLUA$H*V.  Voƙ0l ;_ta6x]U:3V< z2=\&Bp!Tm B`$0^+p#-Sm&laZI FH- ŵFڏ?MbqD9tșݴ)Y9QS%CbB$! $žItQ^UX>*mwːCk ㌢ u/- A2c5Tr,v7%^늕i92@(60ًq~*\7۸dcկKkz s C%Փ>('ڽP6NBڣG —XFO\,C!Te7AΎs2EcZ*Qk[K/}3. =gRK/HIox*Kuo!n$]i8xam3%LJCMjRp) .Q T>RdGRh&% ԁ6>T8riwշb!TC1 $Ն.SY`@6-OkeWX68'}VCd~Ӏy"lUZc<4*[ȌrPgqwW$ʀB9͔#o:q~`&5s`j#q}}ldB(Y_B;Wό#lH8<"֔W5<: 4-Bd˜%/֕DYIfPFl]y~x!S !^ Te75 3 GSuO:K<^ Uyr`zY΢&Z;;4uI-sgeO}-JLа#@b ×jfgA!A'#G h/Ul 8R̰az^K g6AajerenXS.ltR"vt6w\u2œ 0*/D[nQB?ZI~FA p6 r.lE=#.VPV3bE/?M(LNN / }Ѝ\L/Ʉwdߨ|2cxK`2dUy,~LU3>6"(­k0 L;Wi͉" T``8G1O؃*h~S~:qϱN_AO7=wVpyi{ud7A 'ty \Xֻ羱u:^* 7%XAi(1&dHfuC#>P Wb{Y`}ȌɘStKڈ҈ڈɑ#xIK9!RSOc6E#3mF a4bH}[n a* M۾[VTo2 RM_$Dy0(H3*RN!Wwo-bC!ߪTXn#i&dFx+ ->qo;e v$ pK uMA=fsdZ_AMe _uױC"߄*e<=|!= ??G~H yB.NSLI^Ksb2nnA`''|O>'|O>'|O>';t~PO ` s`htHl@2+f : @ MeZad;) thw  )PR!(@aDv믶gCTY4\h!,gpq:6Fp~L3L+aܙch }>/AP7׽J?ZI<xCEFX@mr;ű<]qc?ӗc#l͙pl*???o P W0BY[qh|!y3f&=Q#E"x%, T 6[.CC9NgÀxxU磍.GI{ʓ,??&WY|@> e\m@xӨũ D,x#٨[?3|+q5(L`Wra,7{SϏnn|'$O$z{Oe8_]O?;f0u= !΁oH0/.4-σ G[Fin##n|2='@3y9& u(+8ԙN3A'yX3&Vd &YHpDYѨW怆ClYw_E(eOR(oR"cğO]3n|(_ ;_sg z L a6րA'LaAi- heV `KI(@Cl')JˊiIQ$ȏx(?|,lGS A /~6iPN!B3Lj: /N`3ֲXDpW? >eK'hXmLHldAZa6~VA'$yþ&j u>mn%@^P A63 ;FeVg>0&@>g  5}2?:fN\#o5$N5=7BLlY_@ 2dGyXה L$/"5$g voEu\' w o".:^'i ~]0<լ'˭H\ƫvUݽ+UU|!V޵/ ^u氈 ͭk1켱{ijWlxl˹su]i^jXZ=oZ. 썌3x)n2k^wwxS>m5nʚO%8uAx!b yo/q{M1iN# x7[5Q.2(")lnaO#cyVlEf&ּveWnyce_T⩆Edhؾ68"/wـ͊Tp2#<5Tg62T3ՠrUuqO%GafJΝ8X N@d@~{6 ETtH &)V6ՠN!_sxqp^M]qSKPp &$p͎U2P#c]|KV~p5e:t@F;5ZG Nָj5Nt `01yJ~; {W@5>!GJE xxB00-+`ll?KZ'3!M 3MPjB|l|F<勖@(Dprxv_etV\/|!.ihh?s7ᤄߟʔ0O-֎'JuD6_(`1~J NtPOFONidK0XOmÁV! SB0LL f.*J- 5Ѕ|{4?ʯt;L-c Z1y@@ B&yZy7O/ Є+\Iz%y'z*XfI5wy! Sb ٢X-uJڪ]TRɖHEێgʿ WmN+pcġVCB>C#'kz1X`c a936(E9GB at#X5h4)!rNJaSZx5Ak[I(' .C/rB@`KV1HrN[WtH ^F-i(;Z|՞h2b\dRDH Q֊OCdUU\ Sz)(4>y&q! Sc(Y\b-DpyO`QS]9G}%:#o}8Yy Ήךޤ.+1I}A:j^!:?AjQeBwjkCV?V,/nk:.缑+ t(#+I JTdT#BYoQ>ˆ0F34]0< `1 ftG_9шpG)xTWdk!RyVJer1E**I@Jw! SL@6h.T[(XD鸓Ve O^(X|&@w4Cb E TNj qQRΈ2^%ZsHC]B g/$IQ >+pY` . [8 ՜W(P'hKo~""үĸ@:gPv迅lS1L,([+U^97v֠o⃽nf(ȼW |,RUl+5RAvcѢni! S<%oT^X +A+c! |AA`{J \Lhb#=$X}Bڗ .V..*޼Ijehx;0e}"T(nQpB(@\Ӱ5=$@ \@D)+-֖OgR.!0 J(e5 fY @XPR+AxuV ]AJ$k+@SF)A֑UaX,cXFtM{a8VbR ֳh! S]E$ lDO;k^»6kj-Rhg%;J*׆$yf" Y/̂evdL6 -@|4w})E`Fн,D1/zJљjWh2\1ɚkU )!:YQR! 環MfcdSTrX@Ȕut[ߝM{5$w$Y%E(Z1͖I8M˖Yj-XF7òW-7̳*ZQ9EB ~,9x#?! Sh"BR} ɻB_<[>t i2d3i v6N {g ͌C`fi|h!F<^L[ҝmAM5SMUvj ; .H)+#l*wm?BqHd33hɹ?:}L ht ÑyL0O}ܹA&d<ٽC3|/';gÜwC ! SQĬ" (B9dsy x}P/o~{&??]hVϘ`{W5oՃ t??&{}b<6|-?0}6H_j@ D#GşF޻iQ/ 9}o@f|ϡ4.yci>{_>q'o]Rc?.o :`h \ݟ9! SMPo:S)c(-dm /tTug/7hUj?:[EGVm PcG(Pw~#Fcru*1ԋzkDN䀹]ɩrj{;kJ b"p:YHfE;@A $D u MTv\, u'&d+6RQjdI!H8S:}a@P` _ iyZx! SH)U vPMxL]wny7M)D[J@N2:x'fEїC v[ș6ǣM-p 4Tנ6YD>W#(pP# .ҍ4@H法%+[ݶyŕѓ84%}!XbCk%)FƺkK`[`;$lBEnR|NW}U<V;[bDg;)$R6CZZĤCዔpQ#j)h! SuPF7V8jjT.ިO@^Р@"[`sB񥍀`]WEj@aH5cTgЌZ+%Ѣ[FMLԱZdJRWs^zT3;! SJ0PĐ*(.@f3γlC84h#V J~2ݨgVشX4g޲EPoqu*̩YTz&=j/ZS;tMȂ.$d~>AK' Kߠ\L 1ڰ ֿKƃ^b`eOZ6 j[ƿ jxWyFÑ` XƯ^a~";)\ vHB2D\BޞUZW),!-7ϗ-KpQ"@y"l.q̒%! S>`ݪ J.Z2(#PwâSF^=o> ݨ^$fWB*n=d qeP`aE=1V[4kЖfـp׍ kmcf1~hOXVm& *m#T].@>G)%>ѯ!hQ ` 87˫I"!edžѕwKR#+KG9˱ um o! SmTE*] Wx?{!],yIbd=G8ʟR?Ĵ?c߾-& +.TP% [m<-ƀ`X}-?=rSPXcWH.^ZB9}!G/Jx(W.o~}` WFDbT!P;v p ۻ8:Բo} 8slЊlZLvo >B KoT-bwfzOq̤GTQZ !PP3V{MZ @4*D: %)Dt_KQ9! S>&2*̀P)=ajvVZ`){ Ȭաnη |Fcbtvjt_! i:yJ?Ѱu]B`$6mQDP}MT"6sFce%8'/H^bEWZu:` S@_5dB2BxC;08pT@Y)Eao( OU93+dYZEiR&*TY|6$-Y)ہ4hޢj8Q%J7cǓ=5l+!3! S>F,*JV BԢ[VT C$m֫+뮝Khe !::?a06PPaذΫx. B\7k}VszpWQƉ,:ߡ֜_`>Qԥ`j E,4!A7N!XxyNx'w0Hh@,)􍿮XM 㲟.:-Q*EM!F^Es ;ʮnTZhѶsIwUxmT֎1! S} ^,tiP JP\j) JHW (3VYF+;?dın,, PWnO(cHcbH䍽~Tl$4.tfKX8Xɧbz=ؔ5]9 F_:C-'xK2cf-V+%Ck;kel;IB [=4vPdƿt`߷_uoSOl&Ap>mfN6``HoAtqpZ{2s/y ƭt:'Ji&kV٦qO TʤɞT bE1! 6T;Ύo ktj[;! S J#.ؖpNsчN[ 7&E`7EGO F+lDxxB7C*ݡ dʲr#r&w02CUiHi1͈ExmGbYtGK-!&8n;8:ŮXSz l*:h 9i*t!Q0kx[XD&M.nσՂS~X?U ,+fGp#O8 0:zF͈!yqg~$[e^*CeN#x c; ]W ">u&='% <Òq0ܟ=M5UY 28 ߒ^L:> 8^9TU#3bʼBBB1Ҹ hA 'g0e#D <@&,$"S%J#=AH,Q#xp 5`׏&tfKŌשN6L('-%! RG'כ#0 |W1Qrndw)3">ƠFi3Ɇ(8_ |A@'FD C0Xs!-Gmx$eׂ lLѥ-`3d03IGDõH%n ty 'od|J}L~c#0L 4cxb_΀A`'CX s!!DHF%ำ`X(\ ,$q2te63k!AS#z^ݰL?c'!.H }LAL =ԤTg#TA'QH /IO-\DB lzIpdr#٘&O <xg<͸:4)p`~0l (;cNZ?X'P oy g|*f#OF7O7 ?@>uU:F A'$=,H0 A](&E s@ >$UL9y}A?;/'w1^ 3d0>PCfplj$Ex3ZZş>ڽR_C~wpL~2%h Ĉ5 4f( A'r4x:$/<.Z#<>/ JAWjSk\<@fG&`ɞZ *, +_+WN?K@0s/ͨ ?^P6&R2SrrdLaA'%XT!Dx`vK{8<-f\3ik_Xe\|/V>;4 4B 0 x@AW1G@0{lftAA{ֲff xxU Nd*3F!8u1APn#eM8Ȉ)j2[> q aw6hjx͍R'/ឰV]yNM =G8{FT榮(Eva!сPr|&K s. U?7S= Rُ zd` J,pQ}(=CB Qy@(j؉B{c%¿9Hu!398p rh="B"|Оm-1HFrdFX2DۊIRDBZAdS/];2h!pZP'e9z9<#?<?<??~y?????????? LX\<"H,~y5ь7hIɆ8`g|Shnӱ6`he ʸh<|n |n#;@Ld4] }Oߧ?Ur@,z\OPK,%Iwxpў;` aҠs%VYe@,v"®)I&4@,j_Rn~PK\%X&1'*N fz^O"Y%8UWA')u N PKm&_b\Gq"jd@%^DBֳAe)`/+$b񓑫K wLk7P8DX-;Blk9R3c # Cgt >\r)߉.TZ <'&:~~)?xG+-@ ( ~/̌(&vPEYHe&z [@_@oRo%q]ц`#L$io}Cj7+jH7_}òRCl  ~_IHLcwBSob;k7 ua/[ԛJ>4c]o=[z8 A 'RWPF< rEC-0 cN@׾϶WK8!t{`&etΠ3b 4W^6+e7AyvQ/;#-=r}F ɂ~<~>8XA#,D OɁ#K"^fؽ t!]ˀA@'U cϺ D,Q;^Gs$%wx*'o "aKp3d ;8 HxS1UoQ^^ 9{^e{ gG3Z#y%@o5K"_.}faHyL y_~"u0A`'GupH>ڛ%7‚ ̀D#*LEzM0?[Pd:(Mm͈™5b&_ ؈.:f)h9Z1yNCw  rdݓ2GzaɎ7:r {ͭ@! S:1UY{PjYl r*S*?-bB[pV 1$$>.,ܙ9K1v*Aspi?YZMФtqd>f*",MrAmγ$\-Jz\@u`g8D$O*9X5MGҶxۻ㑘9?U*w'gI%+,;uS$4)Rq~pt.S{)8kBȬW2+Qpd"d,N腩۠UnPI934 ! S'!!(̕]PI%YZ>՜+DC(0GS!MKpgّ4mXTyj1L2"@~}n+Cq_sTrVT~ Rvxvʆ̺ikWYykkם 偁e"8P4BVƿՎÈ 8%E`9x&,L! S5 ,V[&Q@q^!#Ejtj,R`jK3o5{ua I9){>wڅ  ܌:"(qKT1 /39:8W3=>oF93"򙊜-@z~^8Jc33,ɔPrL(*T1PBɣ:;pşFFeƳAvz+5ak"<2r1D-DÚ0|[! `[fSF_wBᡸF&\N1P! S5E a[6 ,¹@'0Vsp wЭ>˧DzׅGGewp6i]6υLAHb '1P͠Kn4SR[/Pq#%z#a3, 2? +F)  ,#ҤY]%BaM[3"sZAX%*bZ;FX9 -b;2 },HXq! SE&H42ueoa*`#2SPdA5"s]Ql⢊JI;ýGMة]'B9^k\iA2:Zq/u2Uz(Vly^O;.wFndWK AT󻰑#@B `AZ}N'A ΦME&``o''yj֍|[JFKJ3܌Ndt$=! S5U t pei Ş!*SK 傀nff(-Wy@bsyYc`0"5SeHr^Vضwuލ``G}SF be`$]"bj- +5&\Тa!Э S~)bN*FL)by3wEj! H5( #M`wX3YV"mvWTABBk:d$NᦣԠ`!L9SlH|!$RVI.}g{(\FYO<T^7 A~(C|L~Ķ'%?aAn>PZߒZ(Z 'сS@$Å `f<ıF F?kWNs=H H&! cj!L7JZ6R(L,śjɪNjƪRX 3і_5Aaw9*J Wwq09Ű29 tMym)l:KDMHu<Q. Z-ꯟ6A+\]߸lsGPE5O-P|+wjM"{>`T]A5VAKeO(z  zeM2!\Qx7rK\执5"g[5pH\!(m@ڧ^QA~ AM={ 3ACf|nͧYkݵٻ€vOYiDJƢ5VhG[RfN4-$u>鞧VbT9rb<@b/"]ʰ&&*Ai/s&d,jŅd7B6=0rEZ|!T˂!UM)iP@8Ld#|:6q&-$I /ϲ]Mƽ|s8O$>C&WɲBgk攼ghyƜ{;edmI֖ʕ?>9dNw} \B_ Al!T:DlC2bTTD" P4ӗIЏ+roD3)c^Kc{g5ߵܝ{I!J"Ǽt\8gͶibI`(ME ]0NKIzүMu>p&n6H`2L-:h]s ="7zu)u!FkW!% :ߜ̕ d5X%vI#LCN3#0P(l&bfWѳ$PCCb/pO#ciP!TmaP`L$ DZUm܈  &^hS~S.y"d֣Wh=Ǖoߪ-H"FȳFE,SrK9w!71T0U`~Fچ *(#IEXIOH1āe-.OcPɱNMQC%O갤R}m*[5mf#=Gu[C+š[Io~Iq*%otqηN >!Tm cP`hB)v#U2-V XOӨS`ߣU # e!9h͑u(!c^E6`eśh[jç\b#N"ߵ+3Ry5L[Idfcƭ`5r$K+ZCy%_؅ՅSQiHم#%jBY&QJ (5 A-MJ.[IW;D1o̵+ȕ[iX2;H0N!T-c"!U7i[TyZgp =9ѩ[(։6 1c]tr|MApΡ)U]>-*1UPkg,: v%RV2L&KС*,.Zq$UFD6)8Gj+"G!y$JAgi1U)r fQڊ =WGˡXE‚OICnfgJ6C5H pLS!Tã`,T+{5ayR.PnNj^sF m^3"GVM hKJnʱ Cvb~t|2vr)Iet̎1ڶuu}p"LgH_ΘY&XP,AwhRqLFfIgY.}65vmŝrQ;rZ6(1ޖ^9=" BB{ :7hR-K\1+;ȘCO@ 殒rjgA'uPM Ì64OAp!VH`JPS/K7Gg [zX ب=2<6'BuW~'o(>P!90w$ySBxG?ȝwzdy!AY2=2d <rA'x9}*.y8CDa@<(QGx #ɒ#f`3a9k` nޫVhS/^flw0Q?w'3_ =ЏC18=er`OϕR aL̈ #}}ZySuN$A'}5'S|WC&cG #~R, ) ~_j/$dׂ{ y<=?SYcd \Obcj6"'&JDH$zAx '@n`4A3ck0w^us&qC`NLȠE"C9|:_5t%BW{*{?r.J=a⹈c~7k%m5O jX2f]Z͈6yHLsFS#c'[V]5ɭY'@e~X|5\"93֋p@9wM G$hOHA'~ 2&X^<Ji b™.G~A. 0l@3cP@D[WؤqE|zu0-Wǟ~=$^0}GB#G1>a1^+T7R<JX Ȃp?0M^A`'ɀ!;]aGKBdBaŀvo# oDǛCЇg !E `=XaÏJ89f~ov$~}y5 /{>O! yj7 &NBS8 3q 4ޡ)/Nl85m&`)?b, 4T Z,K]ڳV $n A9`- ̨e:U/iX6Bh^&И.qf OM;`:}:h{!\;d&  9u͉ L~dk&dȨ閠3d=mA''|O>'|O>'|O>';ZIOx1@3yIA'`0 x"SCh@[oH3W4>et~ӟ%dUz31߉%y ]r ė<OB;?gxb`|_xBz\u3맪:LH!$mA'LaAhՑߎAhd$U،FF2@CR27qJ"$;3~6"lDWG-;<0LzCL];{)_G4u/>9)f }BQx&^C ̙6 ;..$|l|gd=a֓*Հ!T5ɀ,ƕӕ'u&.U$pbBcUI^muKd 1 ~FbyKkjarf`]4e`U5#V+zwFހ> ]V Q/\oJL2) pg@hFA&z[Q)EҨz iv/`!ҡ$ 6PJBWYc{%-橆)5jftB -! SՊ c"X(&  vd+Y(^-FIH_eq4q'SRc&;eR<qeNY "@t c[3S3=l鮛; =W:ݝUoBGos#s.}:*<*e_ OxkHO̸4[Ҟ^6N?rEU*',@oHx bKQ |KmVw?Hjk7w1$0XxT>h7'e^WpJ"G_uPZ{mj"-! S}DdY@eLai@*.ݟi SDl\pCjmح3] _2="7-V9[Sb 1sI(f#f6*T>[Ū&CF,Mit~~xVJw]9֡\!k mj4g49,qI_$YYYatwjQAδ`%hjRoalAnA(x_ޔQbW┓5sܗ?o58Q;P_EhuMrevo.D)1; H dc 0V/{8ۃN&ECcqmJU{ E)ib􅈮Wx 7id#kkkF둆)P'!6 +FڨqDD T1\bP EdV3 P^hU+_;Hչd( Ԧ˰! Sͅ>&8* @T*"ݜTj>Y&vRc25 + 󿤮k9X@@C$LJCEmP= %atB6k3jk:C{Zc,ijڦoGY6+id`+9CAA)5SއZR x^‰؊uQ+XՋ6VW[_ؑlZ" !D RRXߪy*U-K'' +fV4E}}2*7}X1 qFE \]^{pzF':hiNP03F@!#DrI[e&͊xVNZ|+T)IY| .\nw Y,#D@}dtZ7[lzv%9dkjZcE7.p؟Z?%w''PjR,gWJN^ ui^8c! Sl`(P"@  N,PQUSsK\RkU}6sdEf}& KQ-G>7񴥸\|L83t#F-p(Z[{/yY*ݱ8s핁GPhL ٮבlp)9^YP1n~ta~L#]"P(`@ {-`$q@騋 ?U;e9 N +헝ƒݧBu~g8ʷ>! SuH`Uց5F w_$0ɇD\`H#[b^T"$IP Jˈ3?Dΰrk|ܷyR9E st)A/kt=Rql œEJm +sB^;yklJI@vD D/Q oU4V%t9F1J}\g)q:Ҧo5S! S.GFXbʅUXMFV/K-;?i\l;T匸tG%vYb_! h hu>/fsa{ތXes@uFXd=;i%wb(WD1#xfhm8_ߪ>> /uEb+ٚl@AS,`^`p`S3 |hrD/)*iHe'c{2vB߀Sͺ6zqI#uXK\`aC! S>EMTS,@" (w/q kFWV[|dZ |4HWH3 tyH# hj%7G[cSSro63CͷS"-7nj?5@)-eF '~+Ŏ}%ad]@hlP``.ܘ~ƒZ=*T$ȲzӒ V2ZH8{eJkt_%~Fp$KE-+FRٜagh q! SEIs M@V8wXxQ7SsEQz*2S@NfBHwO"MV6zx֖V [g`n}P rfр4ĩ.tml-;[zX p&'."537e+>aZTg\Ab"ƅPUl0Yxrnۦ ]["1P̠uhVwYKlRdK'L~VO4}KjMW;JwF´I*~V5E/-~\{! S$ʭ^ eGEUb[5Yb{ SZEڢcG4C0P/ ,zƐN(Bi$SK.Dkmc:Qpww^t4`oprOr )Ħ5Fbb~q$fc<eNfIYsJNs3xiub%mWuaFs8z6SGYIB:-kw! Sm"HRo c %2`Wt`,t|T3X˞r-PC`eihsV4F)9xb $؍=#i^G I? J°*f*z,?ڷt:q֕5i{@3ʶ_y*s.޲4NC( ݰ<;/d\$%9[\ܫmL?k3Ѓ[SV`!Xy)Aḑt0zJ80QwCi6\?YOTUJVH! SU)!yT< lH}‚ߊ]cu'R46pYOkiZiW2t;(ѹ2m>:㭫$Iyp!I,#dեHuI}#BϤD5%' s?VՑ]3d> gc7 Ñf69g}aHϺx 4S!gSw͑-f`{!A'ofd I?84?/@4'zkLf MCF(?#_Fr ߇,&?X3b :֘KL/k3bAJ7vh ٠v yWگl6( ؉x(X3c`#gxXzuhy 3Ffe!?Ϗ&A(`rXKs!pIxfz@3xfx;ɇ,)2f+TQtwA`'<$iI,y(hHE m%)#@HeұMA)lAxzs0c&V|/(]L%͊00`k]^ }cK'\__Gۄ2C1Y^Ĭc2tA'L,i H|F 6 xhNXlc?hWܵ*@:wߏ n 6 줆(SʚV\ L"Q՟s;"=Ec1 DxzG1rL hʓ ~jMUU^ <x(?>g!6|?ͭDrw,G.G9XSW\FO/,w-v ˭|XksY;W7URo3o͎ \v\G4l`O\|x`]5܇|{q*!LZn}>{27s:1WdN=ԽJle5 lzi[[kfTR178 ة0j(",lF g2W9)?#x9 S=/c϶N(ٟZz9X\EwGT\xSveF}E݃`he눼 qMB +\MnUdwalipwqFrfH:Ĕhe򩿄!d Uw>I!]HWGKh&^˿ۖģd3bnP;b0Ozcb4!gd| o2R H8SV*닱HȶYXZhu!zExsXWUօ&QfSPNǗP[VH~3B odqeZ#Kڰ<~gZt;ܬZ XM+]457ԴK_LUq \%!c$qV63(yF6~#Ť{#ˢ\ѡ2 ?U{?u77Xt`@?F68dc)`˫iyvhCP@|"_%Iݢfx8K3o vpA'T=_,=`@ xnXv,琉|DSDe>%^EXW!ѓ'<jgY)^fNFc 2l"lT31'UrFwa5u7gN#{}L]UU~?@;77niT^/ J@r%̉5DWNw|W-ɭA'wA'$%puJlMC @-ao$-{ ʽr >j6H(I_Dag!{Ŏ,8 `ϡ#7+E4$)IauìObA'%!Z")Ob4v%h Prݨq]jrQ/.~ȡ6nm2t)//Ͷ:(M@n 4P3c` L< ilxC':?E#ɏ0PK?Twf-*}Fc-`BlCM*hĈ)j?o?Ʈ'`j@'Fɀ e#>ɡʭp" #$e  :ERFb' ۀ~sTz U]4KASD!x@+^`2P)pTܮ'`S)ES"{Py&_]T]x>a q(8tJ_~7Ÿ 68ME <:@ [Kx0@y\a RX>j^FkXG_ ɀn`CLc3R9D/62\C:mͽ4ywb|,?Q{~$? ۟?b<*_nb`@"@紅Y&&><`0^`D }.;s/Q6aa/R="0k Va<uY2G,21N@AG޿$D]H^>j`ዧ^J׀͸?\O,lbjz?e(4ۓ{Aß<f+ccė''g Lf𘙔 :r3׊V`0csyop&ߋ 1|΋ydǖN/4HA`'W ql8o D3ۈr EriEH+༘ 0L5™}JNy?K$l#Aoww] Rbܟ} /\\3<'7yZ47Y1L/}1ǭo>>$!ɀ:!0~!0v!0v!0{!0|!0q!0p!0t!0|!0w!0r!0!*Sh*CZ4/> CLJzq Q!O_(7Sgo_9khGq Xp0=yw<<<j@@ b`)3 H?HmFۏ?>a 0 LJ{ =0aǟ0 ;Zۻb ;0} F|@釸!L8o(o˨}}\#Nȥ2?9&KL:9fV/gբ#uuMw{@[#VL[|5Fx˛wꭗeo<ŹN NdBm+ڨ/FPA3DGz{ܮ8Y'6xt4(c+kw`9ps6c 3z:߽zCi>Qb>ҼsTaLi3V>ן\pŐ <^$p N)xJNrb0 $[؋xu _n=|nA5 ( {9tzE)U WXȇ`/ DR…m")]*gr`8lGh!LH$jtMEV9ԥ]ST)KKR6ϱ&JW[\V{1S[);J+Uf$td9M+02[$ꭖ5} 7:T٧R֩l"\bLe_Rm-^R:jM`K&hCa!-U6W4Qp] c69uX,z qQE$87ImR8tkǪSE[KOa(aWmOZ佝>_McXM&?~J͑ Wa8-7!Tma`l$0VsH1Ru"KEbj .W6I;VSԬj&R7j5b,[ʉtK#iOslԽ&2F]%'B5h%PmKti B@xNe&4Qa<[+ru-Osgb~f$!ȏ 慚읔zLɠk,11>f0Q%kA'te !%Ve2?+G~}%R(i%>#ՔL*P3a|ɮ9UTDMGqLN#||~ 0AG ~{GGn~ ;p:y zM$XeBE5`A' WYX$=rZo^3dCrC\:@ A'd{W+Zr12B2y=hdU~JF0A)< h'Zdžߖ;fBn7X HrLT~ߔr1suV?GGΑT7Guʈ&"A̝jk F;WpA 'L |>O*K||G^a5'͎)J`֨i3= `DwM^fA¯~8;3`d(?y}?^qi20N&(;}̀%NLfddA@'`w1c#~I%!UM6YXܚ):V&FAyZ3n$?|l;JLɎdU #G sbIgs`\12 $0Ly $B7A`'KZ9 ΤO\iq"{D/w#T7ܗ1iD4rZĒhU@76Har 36.'%3 Gͽ9 (@ tx [\%̲լz=Bz֚!1eE [!1=[Gn往L8}}}}}{(p7`*Db!RвaN꡼t }~ǬuCL_oN-C.<#0SLb|v Bjg;UHhQf.+6a)l=i,y0^vpbf8T` ό1=?؎`!& qÓܩ8{=,a㉠!Ɠ_%MݨWee`Q SxSW y뿡R-"`o7 ;KA.[}/M8$e=޼A oIݟvD $n~3M-8QYAC!C/!B4X6G-Hnh*< qf@с KF@O}g[A<H. 2%YЯA8ݸYSy=0lڇBN^cx 2n3ǥB<<662!nIR33s)膎뮞뮺뮺뮺뮺뮺뮺뮺﮺E,=u]u]u]u]uN뮺뮺뮺뮺맮K@-hzW}? ~B,[Ds&vacÍvÀ&I`ErߌQlp`=[ L?^Ԇ> mk߼(>>?8blIA lu]u]t@ '2ĴB ҉TrJW0X HXBPܰZ@ U? @dAqF ;7=~bPᖭEUJt*1QyE1Y~ Ar@p0b7'1Fx|3f\pz(_ j%Ss )YRBi@v!NJDu). p{7@P!@`aum)01k)0eAtLLtC,?D?Êp[m[ (ϥBH.}藈E3Ç'b4hY0>7/Pp#lxQ ~ ۠C,ǃu,5-5-8 h3' CP .Qќ;hxÊ9hG cSfp8/T?[#0YXeEIq"I@KX-]8ӟP=8!#$ 3O|}>X˜'&jd9 @F_6@7@ vc?ψgt@ -3}e N6?SZ],ˡ("2A@y 8xgۈz}R"О8x, P4U@XՀxtL$Ml\@^ S3U!gluXxxS !#Қ?= 9чf,=zrRCd`&Ye @ic #&CI[H&2^q$ !Bg_g!1VhKZⓖ L@AD @7m_KCz0$Sj42wPkg 2 ߠw?<)H,PX"_S]51>6 !JX8z2uLv>rE‚a6L8MGSTv LCzU`F&|_5:83# W&/&A&oS-Tc0@912@ća?xQa%l7j<>30KoژaؙkB? % &^ . p2eX[py NE5(3 GL;˜)2Z):&!3am3 "!~0 !07˜ߟT L܌L ;BFbPD ?,>&/M-TD=c(8Wj2 tOǘ E)HK<0"#D7ܐp= ڋ Ϗ33\ki`iCAWR4PCw>H,1[|I3-Rs߱ V)cSk+ \!t̀'(!Uv)gG/a6ȀH|YqsЏ(`gOxH֊r-(#\U5{4߻"(nwDF7 ` #P ,[ pi_W?'P8=[K* *wѽqbYwUo|j: 1" kb)\**U"pt_h]\7ߕzBUbuzl(zi'&ЁLB NPLQ80;*F`Ƅ+~_`{\_  j$#m%H |'iE ;i>iEɠ:~W`kbpx.D1 kfB̖SdąC̈́Kz3fa9`5O+U>h%aDg@9?m|2/f)-HpCkECU&Wa+"O //cB/?CJ.xxd@ݗ AVw y!H #B|J636d 0#et @NvOp4]>ʁ3{rK $!JH6#1_]O*%[lO r+- ha}aqɁ>{]A)g@/*, 1Y)]ᵣ\@!И5:LDAեp>V<=)!d{{]:k.~FCh2Bdd7 (:)%vyY`3~dBjecdH6 " v=2f1BQ~S D/x_WE)G$VL|nj} +;I UwC,q&Pf Ufhx5(&Fy  ʛ4(EbaF}x (gQ|}^"F#%(u@ b ݊ves2N6xBkV]SzBxT8N{4 N|s!Y]k> 9xzM=s"G R6s-`Bm>~4Nj˃):-CkH~ B_-ńy piM"uF4- ΁*@3Qk8!4%,=9w^<,ikfO)bQPQ42O1~qoeˣMS[-rԱk\ك~~bcX#L>x]& T])0?Rmr}`Yo&a] Viuz(d&C i'' ybHVh> #&$GπA}w+ My0E04 ,>cA 2N7~?vA=٠B)o5C,l`F?3)xP{橉bjh/-=I Tњ<[ iX A"śCL%\GG^z[+=.IT}=cE>7Tnߋ#$½FQĦ`~1;Ђ^ؚŖO2m2oCT1-(^'n֌EC `?aQ|#1A@/ G.f+g }rS :kߜ$/B^'R#~ s"n$GP_1fdw)Or9@SA>().P܃rz dry k| Kc$5ew/&P72!N6 $w?gTC߀q9i@2VwB {$5X\YHbu/mE jtl&q. 2vb2,^^A`@l51-F 6-`^ɐqߨF *ZAb, a1D9UbѷG xU :zr:P'T xIO|W,R&$zK"nԛ&J~|3pg_gO@\@2KB$^}:_0GsBSZBwLʊ wU-^gݻ$E-&^?Fo? 1،o0圱ۿِۄ]ȴvvP5q~@v;p%' x!$CZ8O=ߛ콀gN7WbGݏT AhU2hMeˁB5mX^gc h )ݝB|6 a7&V5[`ۀ!k " #I:/!'LM&]Aաs< 3X;Act-a@3@+ ߠ2f,4hD/]y" ^_1C6cBmpLb?@ &M0S(% '*B{7 /!40*-9tF6:V&ƒ\_IE/](\逃 Y;WAQ`g"%HvvM!SURcקӋ7E8v}ֿC}=Ŷ3#;=f5ͤ75e?;&y[`>Ќ't~}P O bqo<*|G_lNxp߿'}:8$p}hH\4x%`!PUndV|Dض>X7{fq!7cNr?2"&oJ~{X)ֺ&Mmz "h@ cM A;7{M19:tZtzG_ "{z2ɒm[ Q k}]AYi$]A6, S)B рDh'hP d$i˗%((K_)Fa1cnpB-iCF1D'u6ԾA01%phGFyZNFP` hΙuUf E [gE(F(Ath\'Сltz~ sZ:@R/yhs[m~Q$,@œ;U~c^9B\a{ev1g+,_NHyӁ;lkft a/ŚF.5.n*^*&0 /E+B2(=ȼ3{,? (za`?HJCT Ir )vRkX=:%1*KâZv>̙'H3O+;PiW aќZM#~id.;g>^ƶo]uߛ ΂:Kh rIqk0JdE@\ޟU*Ծ'>!d[fx  O f%I_qV,nt/TE2;0ke*=oàE+.c R6:P娾=o ]u]u{sE7[Y1]u]Vh=r/߲nW34#ZhL)H,sT{.rc?~8|(JmMP##CB+Jb8ڮ: _/ d +0it05`Z9(BJQ y?%NJqy P%$朠}Nr; )QE5?]t]u]u]u]u]u]u]u]u]u]=u]u]u]u]u]u]u]u]u]u?A ''|O>'|O>'|O>';CkE@&x?Xv V`؏/'1ᡜ۠ p JA!p p Pô[}%T\B80 L Au!R$t+m2N*e?Ą@ w ?p!8` Mv΄H hSף4IrDȤF( uQX"OCvA n*a H>~M$Gdhp f=3b6l`#???`sxP<(-JJ%k1G{nZ"C)6oh|!>f_5J"$`#^Hmp`-)g} c[oma<<7 B:"U8o)#}??&W6y/ U@jFvr$b-[epx?]·0*I _­宮~xJM`TI,($3nTOܰ}?{#-\GA!$S^6B&xK/sLaH28?a G+)1#x?G(Cx6 $x[d-0WX44Ri_7 ʊh?߀MF/3~Lm22tX jcD<;H6(*gBՁvP ? AՁp"|&mi䀁~ gdwA@'q0r(e@ GCA6Y`2a aisy- H qtb!Oy?59'cM0G|6 .3cr ]s0a(0ŸP pr r[@A`'|< (+$2a {3#5Gϓ@C<πG8`@‹* "`: f6"\UAҰGM"\ :^ (c9bDxdlO#f'0ӼzuxJqBX?!T=b` UT@RI R&-?\ֲ٧ar-З6Of|u=)%u|4ؐ3򭴷Tw6*&|JK>7[m2t){9sf7W{,`qAMڧA<$=`!6YEwp_i@)Œ-*1ō)>ڪ%E@@UTfPo5hƂN|ZK&4 -X12_Y&$kdh !+i**,$Tb|݈ B~q4 HB0 5`E?=/6~z_Dv͝AN2Z`F`GT! SՉa![5DW@(E ILBȦ2?p_DAC@8aK4)~;E~c =t!h\mC^& S#Za 8/ӧmb@֋MJ_w\~.F7̛gx<1/gt}#w,$BqFVT*PKNʗP_:H_"b`qIJW.y! SFAATdD*!@6ur f g Z+Eƒ6atY-wRKJ:f*;kj.ńZPW5ĚKSݠT eAuV6U>bsDB UbW -ZQ)exzY+£U bD[Pj|3zzFIA37UW@"EkiIs is?o9仮.n>u*W֤,J@jE Lq! S`XQeo@TddX"0!l+ SH} LKX,&*U]P1㚯ԋVVҠ7 x.5QO4/"p8`Tp1cĆ@X%oҠO]Zdtu̥RM|+@̘Xp3eU%PN }?$o}wǾ;Wik-h{u4Ɯ~t Ԫwy,I@S{ qX_ jci[`N3~pu".Īhֽ] 9J]Hbk! SD1PmLH*deMY~wx`|,Ӡ(rb CŠ}gQvqϠ>8E!\ sIXZHdxkJ [[ uxf8`ǀfr-]NUG {'2SQkZikԻZ/ڤ02 1HGWz3!v@IdXr@TMnQIu;僚+!@Al/Lޕk "YU/O dA=̥-B@e\LE HҶ! SP].֠A՛ʺJ7wYS W:#U_UDtl rjq% MjPz>NM6eTHFKr.w %OS/h{BNkcBF ,?ӏܟN@ b{;  ebijDێ(Hb(}j.x)Ft(P-. -IH*iԮ,mm! S}$DL$Uec@8* 2ꤒa*~":_m88evKD^H (6Dz0?~]KD𫟀eAPmC QeO\Т++Χ7$:LZw<7SH50eAAR5yQKPٓWD]U% w$3u*#GU['h vӷ&nP/z}Yxk[7}€H.`%8V֨p$H 1FHO! Se# HN* "4/|wZ IRx|5i_$`ܒ2wo1&&Wij׳ˇa[Mpy0{ =}u`PޕGy=RFra.5*䌮FA&UP%6ڛFbG[ 01‰am` Ԉ6Юr $H46CXR#5D(MEV)ԩ6'2,81ѧH˕I6*y&NGmޜ! SD,lH1nrEsPY9Hp9ȁpaiu#L FSMjhC!*22}QlTx%]eKEl,.(Ms DyOR"'Er@6[[3%He|0B )#Tz Q5hlūGNC#gδNe kr,qq02-LLLB^If'J b~>B3GAC3E ǽس~y! SpD)íNF޷+EZS|lܧ0WbSޓFeo<-AUWM\Mh0եHlemgƴR}ʅNn4mI % v7Poe:g,.E{,F-=! SEDH-#5bZllߐE0^<EF&ҵk8?i_FX{+ 5_5ƠC_I9]ஓ?"ZJANp3;{EJe]8 \P|{@4@4(ȔS+` "JY" Zq͹h|@m5(hVcHnsBűѝg%B]jaF ,,B6Z*n7FŁiPtjE8;_u7,uti1#?Q`oM7);X:馟CΌ{DW~W(*dY/~]H$˦v`guʏ%9@_UޅvG.LX ZQU@z 7|_)ݢ8܉< b0#`']{` CNv8jXD"F?! S݄ZEEE&APSQW$sT3Oc)柘fr4h;lHQ՛.O:a|+2r<1; QծNDM'hV`o2#e_adPeN,}WZ/䅁PeG(X(IݖPJR8D<8%h.cu$-H&/DJ-6UlcerVD-ar+)t! SeB,  ` 8N`ҭi$LG\ NlX$9^HPkg Cn۲DZT@j`_辏 !<,Ip~Pas݌]*j+Po>ykө'`v71)Y (2!}S2gPN<! -?F˃P L @1\NB?{L|!$d V:!`~⥄/щ2jPnKi:6YUS'oGy! SͅEb!UUAQ % w)Ԣ)BW Lqs$()idtS GtМB^h>ǰ@)zېuC3Mڻ#YFn=c k1Ju53s똸!jC)sKxwl34qlti2p9oE7;LG μ!@B02jq*SK, :# kIW5ojsl|V齷$^m:! S݅aH*`&L^mx:! S>F Ŕ@ -LHאrIFW)‹ b[Ϟ]kOne2q2j!_#ϐV&J9˺&&j{ ^ZgVN>D b-~s)©]IFH`$`O݃DM@AQbM #P,{H0|Mi {~;n/\!Y@{MUV P & ģ: nK#A'|sxaL(+M͒c9e>A, ab!/r6TiZ\zQ#x]lfmi c'ΰ3cuɐ{šK Ǐ 7|fa\_7wqNf$=cC訃'&# aB&?A>a|g!-_tN@3{IWpPkL#X1lG*T|A'oAO>@0#B#(F{܌D%x$E r%?ΰ8N6 O1g/6_g:߉.2Y85G𸎄qyUf@??3]0|;ɞ7`1 A'g0e#H@|@RXl&B"ZK$ $4 =^)8'G_}Tx(Q"4a 6?&\4mW&.^i3Ҿ(GpAI\|#b!:n&LgS7<aG ]> $q]cv? x U_m|??1J˾s.7ofvggX ȍ-fL߲EEg@A 'krH˂YhR@[ĖQ.,'l,9`J#qZbx(QG@nT<lb ? o%k`u)3 E=\x؎x^Swynn:<éA<' `I|(_prT)+`̙Hle &`lA@'Th@pYg.x| %e^%1)QG@fAR#6B! Q#ϛ1'&?cO6SB~ 9b|"f 5 (ZcJX! 3ppA`'$^ Ň*#P!kdH&VK#G0 ? =B*.deqx8 NX ;_~ 1vhef'Ex(Oذ^\_ WHDz:dYz`3o>;^ A'achG(DEw>!bd#- ^NW%fDFY0rk(o  65Ў4ws݈'ENC A'$TB@$)ZIbbPXo  ̹w7#㸮#( 0XP/Nx) <{2 EL`xp9,vcXa鿟A+,4)Z4i_5_AKQ0K[4H2Q?3~m.|3͍V92`i֐r 7L`/FAԉ,x D%?D`n*KfsoqFX"sX QUdߠ u5a`2ɴ`T|0Bql6㰉S|U/sp>?6M=j\w#B1~ed@*EhF SCʉ=ФFGvDP:ȟfL B<[a &L"Y%~yCʀ%X$d@z|^K0{WMOw,W̢>o_,o$H=&H- ) 6>[1U|(90a۟293%ROxj"f%XדۥύPK f kK0UUZw'BUWW&A'$`t`-/D)hb<>bwWbw0!Jg1t 3kw/>8EP8ph-sX X 9:2SKdJ)`iv-2S}rjvA"AwnՊX ?&C!>?9%8+q@<sKxlO/38B"P"$\ 1vvzkM[[u֔8 kD%u`-,yw4])ߟ$Tuu[Wpk^@=?xW}gC})tHj|2=ֿ ^LE>\?sG_0Jٿx#TUIrPA'V86Q T(KgZĉKI-/0>Gbр B*"b[YOz*01!tB\,g~jy;aD{ݟa_7'-. r훓?.P!"m0C}lU@rV0`nv^٠3oM(']o>H^OOCԲ<&o=@fGZon//Jn*+u{yz9R#`/K4'L1ⵢ30lm>FN嗿6802yST [o`7Lw5Sp !rLxPZyjGΣ@KF"hr7ܹ^ 0K16>Yn)pVDqtn"]3Z>_>$LWh_%58`! SMU,@ULr~c76m}0 OeVg𱢪Pj]_?;}R; ssF2P|!"@IWbQˤ&? =p#V"29u &9J{q\.!By pї20~|̸6EFFP`/V"ڏ7fe#H|i [Z]\O6 PdJIMZ ֚Lál͉T5,nmm:lHG! ST(n )t(\SF>2B9)HM!Ed 4q$9՜l0'mCn GNZ:(D_}#Ad׬A>>t+ E{KUl̐#0/.W.`Gh"n6t+ p)35QNK@[ 6TȦlDņw_lQ-5ΕA{&l6-lPdyJQ&%0)KtXR 9 HtTaBSItQeJw! S%  ڭAf.%\ &F sa,0BEE v3HFCs1`~֋&Vtn^'|]2tB<`WΦW 'IAl !g _;}~E6R2 /"&#^ @PNk~k2e /i- ?ڐ@"|swEFӕۅ?9-6ۤ`VQm)Y(φ^d#&Ai*j%{T;HEG:W! Su"#@V&0h,@p6c/+LX(kD:$DsSy=b붘b[9HKբlz¿ȵ"kRMx5MzBM e{zѭQj 3™LkEóvYelS<0u4R+| ׽ -zuA2|wq3 J0l a`LE NUAisꜿEE"̵+YE׾# @p8d~@J t, XJ{(Yte* P( 4bϠӞڦ-$ϬDP(+\ggZ'}x|jCd[*@l"i"U ǧo!Jf !3!pYXa %$[u ws2)m0 _NZ/mH l̔,hœ }2)9ܲ|` dfk1r͖^rԴ7^%%Jyc9̂$<Z`%qC! SuRDL>b@`3%px[WLǹ0G-eieTo.=.1QM5JTΥA`%.@C4`08(> tR90`q 8N+(W :9+ F2_+kI=2S[ݸMm6E]P(T)}L0슏2p0-M/&.1 ܢLDP,R⢥#:#6U5:*ۄ%T7cjF̬}w! S(!ƕMll8Cɓ2q&1 LT-Z[<LW[RC:9w%INlE2eS4Wmİ6g;. ·H4fùOvt#˃m\g&mn Otp 樠4} Wl|d.[ZZWgrc{0X7>tB *KqmwJE*rsc&^N+^72AxӜZMT>2uO u*! SE%P$P{QgꩯjkcdEm;"GxS"_RCK3B}4׋5a|c E#zE-nl2XҢRrcp$#d Z@lQc2`` d~r{Պ$+O|6\uM P*NJ&ՍV} 'W6fE ?kKu~:8fy6! SUDS*Q߻X kV9jOAqɢQT|I&ӧ+RhUX,NWZ^N/Jw~KX5•6oЗ_qMeSuvIZl5֣<Ϣ}5-!'Z( (BmlӬY}*$c k$z[ ŰXJ3W5w9*0`SzvҋAt.{Zb |! SL3$mQx ,uǡa+,uvI}ǃm1ڲaoNdz ;2’.PJ(N1#\SA<@q„1W(+Ѭ``.޶( D4F41\ERp~lN@'ˇ1sm_,R!'_jWnjVAGgKRxk+ Z(]-7TE(fjqOVziҍ/'c! S\ .P@ mIVly!rB@UyŒUِBE%ڲї,o#v_a9܄'_ݣ @@fTY 7} ,Û9 ;&a`),?&1=K?!l > ه[3}MлEsNswD.~^kutp!L8i+W,"<+StIb] ͐&Os?!ʀqab Uҹ%bPE$SoÔѩ1R_dPA4Ho9}rq"#=}.tBr1ϵ1gS6^[BKExJڊDZ=m9ZaÖ@@ZzP1 ܕ`s K}دˤhـV%1}v| !LFD=UfRh,LԊKBVd- E4jә QLP2!M4Yq`GſuvU[s[*Wu|YlXhsrc[afG_AļdnU =^Z5ne2+DL>Kdc)Ts]2"\* )uQ\xiaa-yD:"7(Cy䪿3mB(i$L> grB]"x=C HQ҂8 #!jT͆ ˀЀU3Ʋ2UԈ<**c*ږ-ڢ@BS4ݍkml򎄜X Rn8X`%m42QS w9}zZ׃62 Іz3EzfH!=`Vï)xTziTI'oJ!Re@@( 3a$m3b*;ɫ { ָ6*lHP56Ӌ6y!T=B(PB22*rp[5WU d z%kX(g9eHzOVLY+(V<1\~f5_e߆}Sӆ.EHzh<;eI&D$k`SM9`CP~i 2qqlЛk[(PmMbrv&-MTQy^;zߴO:72mRn "{k8JxbWPj fOgB7!@P!T|GQ<e@.([cĸ)ga6pijk 9Ա2 ! W'A9;ѧ(FKX'̃GoK$./*G-._c[jXD8D'ܘDUC5PYjyU빟f)ԤyR2 9lc3,NuV=QgW:P~/چ r P@qhyPGD]/^^o' A'W1#,d5G낒3 @KLlS>zcH)h .@WT &3c)э&}+ˏ&L:3KN!_ֿ>E/0so}vp=/_ LG6DzN O4^SL9LEq yy!\A 'PU"A]pS;L @+` <,*[?pQ.#y!4|q 3b/$fϡ)Ӛ(6&׶s7b,}彩Dg_ ԅ$/y!$;'1-y}9AGr}WMHoQ W}Y-t/*P @wa.0A@'7wWЏN K"c\\u$0 u&3+G!A I}> ( f7ڀ͈(E)JZ{> >Q"?G*\ABPt#!/_ek}Ͽ AWKL\"#UWA`'||ޟUl 9<+h_1#ήbܧ͒"5vKƙx 9s@.RZfrOD3DOw3\SMZY|'<*/xQ<?rOB~ P C^:\E\hvybbԠp A'JmeSzgDh )Jأ~ẟGi^LA'|>|B p<34yU>N=%|4x ،+@fG`ū gtә㙸0?l|Qn:2(30CT#>{?͢/rB'^/@t#hp`E|{ݠE&v6kA'|HXƩ>#IK){mhBzy Gwi;s: 3n bc`6?+CƼ߉;aH(gE _/``ƞ$? 0 EK7>E_SrRYKX;Ԓ`H?rjT`=0ZֶɄn`A'`Q&K139#>D~<V*7D)i%%bT2/Tɩ.yt3d ?EE@0aQ[;ǃ})=NטF|'2k-1F_-cxOC䄐%/3~*0ݕ!mLכ(4EʽA 'ɀ!M9#`@ CBV~駦r?7Fp1N +Ӗ9'$x BnTB]=45#X5Cx(w\dN 8 8aHBQ@LY 3an:Q!B~˻e 1GGo |/듻+y 8BְLfBv 2a%x+^J D%ؼ8e1 A@''|O>'|O>'|O>';Zt~pKpN8fZp09[pK |( G} 80}%DP-aN أԡnDA(A|oqz2s|11VZO ~ލğ@>3B q*pU[s zè70`Idz, QnA#???U|xP!AX+_meVLBAD5 #y![Q#x y''f  ʭF80ynu^1.G ɘG?گmC/ +NKA9 Xf"ռ&lͷҀ&m&x4'~#E.M6 ~Q$GeiȯrRot?AB@A`0b꺯͈$q2ds~$=А،6#i+0gXCc$6) sGGw~y%`2Z X Ȉ_*7H4yG]y<rdA`'M5` >D@,J)s|DIhF%ɠ!OyLG-@fcj[aq[ˉƘ֥b=ɴB%>xV}4 Ft0L!B:=!GyO1 G?sxN`}X{#1cQ8߫~@3xx I>Nho>jKp'f%`!T]ƒbQUUEdQd-{^6[JlD~LT)+4CnHJiJysll<'1ma:PKMߜPabE5ɺ1)tPhEkUm$HPr6%e1E֥Bu4'Bׁ lZjLz5IcҝU[faWmYZ^ڮm44H6HP_[-ߴ!BPеL'uR Dh 9*'[!TEB0PbPv7urzDXejVIn/Qc{NYQIU!̟/s*r` x'納-%\lSShAlA E4$h#HjZ5 2r["Kf&"u![=ӡT/TᑌSqWVCw6zRAMb{c<:u)SmZPԲ-ZrLbqK ]rS -[[tQ0H!T%b!Tߤ](jYKYֶ:`bNNx]UKgYKW'G3jXXM^o&$\{$t۫)IZF5 9J6o]1FKBRu#Da^ 7ȡ$' jR7_"@ΒuL$ d[ !*5I!BhlUUwuX!tvCTM#X=ne3.nY2:޵1zU0%!TɀQ`ߒ ] eBz Ę:9JB,FƔgr"HtflkQMʑO^)Vp!2V7aJ6KJ2s[Dyi`ay)G0W5JŞGrfB".ۉKBT?֍efX"{oo3Nj 0_n|'@=Tc+nُ5ӥ%uP@ Bʄ1 *?T ]ѐ:]_)sÑgHJ@-|ۚQl!SBPlÁWĪRd-񢽵*t1$J;FUH~St\[Kw-O끀ވm d"F/?aK{섥V4 Q 43Xw0DVQ.!'ƌq eXJv,ٕM W4A!.YWJƦx&xp&{^뾕,nnMb9k=dP  B`.C ;Fֆs,H iO,ةHXUL*W\ %{Eq{@‘ y! Se@s["T͙? 'aݾⒷSkq3HYq` 0 .j& U#BnXB7% ֩@ 54_s}6>p['{]'3@+ }I "t'8橥jR0,hfLqժ[,ґ/ ˶Jҙ$ MW 1Cާ7<`a  0B(cB@qw2;BkX!]|W\ |!{N9HTc9`! SŅb!rЊX V!QlL3\B檊Zm=*(?^W9(bKuz5t#@ZWM)ަfY@ ÓTjTXU@>/"Vgs0FZ(}z |4',r%EvV II;/އD_NI+ۡb|-ø겁n$c%6P? Hl[+R( 1'm]|9.%W,g,-vw8Tt"J&)TCYW! SD2AZd%/"d"Ab!Ѡ2?siܯdw~=,@ IJ2ɔD,C?2|t~4'DttJ2z- bnش{:,;G<5}px{;M~&n{*Ԙ+RLkBu[[~mB-֥ xO;PP `V KڔcEpPX] h,m @%PP X0O sFHrZ!! SK,eB( {bSfe k*3ce1#b:M&;@пǥ@`f|`h+U'ݢCornnL+s X|&~%NF@t @%Oq3C+pi?9(Ukº@EsQq8[<;BLy'-0<()0E٨,KS>Ӊ(bcT;)P2 n¼v&>+K |5ҏ ϱ lq`Ok۬!o;{Z僈8dLԓJJkIHUU悪>WJϟxc=(_C!^zLwJ"+<@U! S%"CT`̀cr6z jrxZ1ۆ [t exvxJ5 Py wwV{tSѪOYps"1N \ +xf`tg_1XpN_Tf>A|1G$(9q"q Y@3RC]DZ熲+3.6R SmPujf_q#nJΟ[Lf"uӝق)%! SՆ CG֩EfHKBrL߀ғO.ȳirB&A$|Iנ&.6|-uqJ-JaeU$RΎ7dFrY=F$U\/gSlǔ(+x ;3/ps|'S-c"M0El)f?V1$N1m\,D^\m> w"(;bnJzq;0dSwKdwlp! S>6 Lݘ^2%E E*Qzh,rCtI~'EG'*ve%Ӈ8ZTr!ሹբf׍&ɏMe `56GtK^>o @Q! ~~\6^헚!wdƛϞܛfu)<ϻ^ES fEB#)5g0YD-Aq.G[٩78$ ?9LSYlKsu؈* (xPRWϵ5@H"M!S oMc0c@ @ !Ίiœ5¨d-I;FL(Đ* w~tm \O߂yE^! T>8"P VXk\%6~ ޏBʁD8$PCaoEQ1X2ZrDoуMMkzB5S#}!0k0iiiu'a1JU%`}WPM>L|ԖJ))sba Gj7 +zE'nPw: KT. m-r\`N5+ (10FX/^+* Qe#ZƮsbST,C! Sͅ>e@X8E mVrBrѡLYLrW4H%`\ϹE;5 zk@ࠝvYV5a|_,D°\Z) b M⻠OgA]4UjDYƈ⃅|*&,蔂 .Suοtgp?PpD`D;֗衫 K|*bCeۼ$i%gh2G 2FJ*公! S̈́ޙpT,RRU@jkhԽ_gf,/ mxioY{j E3Of+ ~ԘӶJAugM*^ˉ4Vd젇krv>lZ3r~%tu}ʲ&=Aخ$An}B/KM1f/"[,!_ٓ!ސ1V`#Z^JBV w| 9{!-I״A'MSxP<&D)(~ș!oDSeO2ClO-3g#p /i ۃy]6(3I eP#a\f?@1ϯp57.A׎( d=To)JЀA'LaAE>pB25iġLK[MqH3@Cr3{iM{PJ#x)wuﻄ^6H>d7֘ɊoEG1ǞL`Dc2?i#y&?A<9M} =dH . ɓ̲̀ :d@$V[RA'o Qcǚx'gFQ@7B6#Q?h/!S>qh~!^hK=LpJo?|1)0D0齥spW| :'K'涨w@8G>byWlrc)_k}U&.<׶2~p uqU[MxG֤)H˜iݩT5G;Mn:4}ۯfXu"4e[ D{KU.O~0$S$:wBpDŽ a8CF˾ĉl6X++b>KH/<>%|W>S~V+FD8Uvo뉌v*JGvW~ENG_eczsOHn# Zgc--U8ScIsdL)UyX5Rz{fϒaX9Z7c91k[' f17#(뎏40=X/FIIZ"qNCއ?Drex"s2/wBo.A77Քk]QDE 5 C6dZ ,ՎG<x*%Hޗf 屺Q*"yz`?݀F  A'o48M? Bic6<")tel $Ǻ?'1Uy?Sw Mo鿧$h $W&O!3c^P8;)Ip/v  S;Ilb D~Ga/w @fK#>j2626+2 (x .4^0#~BH|\z߭~d1@Ĉ DZNLŽ(`ZA'% O|F@=IG <x(QGʦ?\X W.jXsse, b>o0@˰.`/,>x) `p\)ſBU" K&~>`B: r./4)&V>H)z2Z \H7Bn &! V3jKJ^m!{H]y'q< n#51w:h mp9:%dآHZ&I||4L@͐3]:MROߛm k_`xJ 85v":U- `xT2)DRμߡC~ -KCVt7lxq??<?<??w????ޏ?????zKab<|/5 8A4kJCnL0P$*/T,&F . fe{O$u޼%܊& fD%޼RPQP%]:]OG` c7+ N"dː @D.Fk6&^6'?1E#i"Kuآ#Ng?-*?]` c_,ƿ_'?` a[nj= fY$g}t==h(A'`^_b%C_#hG="%{Agྋ> NZ?Bj%ծdŠgDgޖ#܌;,p"3!-/ZJ{$T&f׿=ޟTLJnOczW?#SpMOM~}wPy3=e@! S> m*b&,JU[,h$B-8 lfbS2-(QӼ qw@ wv]+H?"<~ͤұ2TY9yym cqwjrA:}c > Z'SY};Lma~"s/!?{gG?P8(Zo?Z|埗 p?\a g@@`EApSZɠ#u.A[z6JRPV5I! S`BյEԩWj8%j]/,-ױW5tVf&!Q^i?n Q 9{p-pTՎ`UC{q|?(q1yOu|͆,N]Bce(cksKa}㻈 <0`F9%:o #7?>izE,g8ok[NxW/{ ^[nM`=EGҢΨ^խwVO;! S`YAUZծ ԕfdf~ <^Äȝ7as#d}Go*:<4]}dϹtgޞD@*}~!)ÄPR_ޱ7}h3`Sp V>~Hiqs:ǭj*+ۇ^&*^ ,JX@ϊ:1 \Z_z,%(>=}`OݺQ̄B^9~kXc:l7Kn OOt^yu8! S e 7/vKS t :% 9 (k EѧVOT|K1x Mu?hw L[Km0`|) r % kܳ3daPNˋ,:䈇*) 6w9l҂/i'z~8PGY!jR^f\t]@;dXcd" J 0R>١KitVT|;V ٻ! Sd ɨ)( e*}jMV5u%UdΥa;H_Afe4phxeO 6C ᦹK%ݏ:dD = qXVZ«x'y^$w;9pjsgB`-TM>T UM8BM)Q sx(u5 erbW6lDpm맧jVyv-Iߵ "DFd!kEfsX?R cI"|*T-J$! SSC͇"1zu"IZ-+'d:RD&a'렐.!xOL;-lܣeZ&Ej|l?y7rP?{xgrU+ K~ -R5`5S@߄Wx-|)xFT@1qx w@PLޘژLYѥuufO7 &+PgP2+uJMrnA9haQx^UiU%Sj(i/2 6iW+^yL0N2[! Su&€F eRB%գl'ӄч+J{ا3@#Kω]80ਃȑեG&7 "7)K)c@%Q>-Z#ƳD`[)x[[}z8g2d`z`Z %ȻU Rs$!Ú,h\*$nUJ $BA=FCmbB)Nv8! STCswyG9P@]h3#vE^"gRM@a'6P A뤮:3L L2!i'愁j)VYkH;:#4'; 1h"K*S{AaFXl >ն"3w2h,wiBPc5o3  yAZ$欒tADIΉZWOCJߡ kVr]HOXEl! SHtt9 P~^'~gvRgmާ>:T"[]kZdO# ڮi[,,t& g头CvFi3b˷<%,TVLcxP5b^4V<(d[7 HQʊ@ LjF_zU. +#H 78lB"`/hiҢ2+N 'ܑц | q975C;! Ow`"@|=ot_f9.s5˚skemsOh?ۜP!|sP*U,`OX/`(B@"8ވ3+\g^vɄnfwϹw>VsZ(|TV69`@!!SC XMP :KCýǬ|'N9 r31́Ǒ#qw]=<=c=ݜ ( F"(3ϻx~ 9a1c|Bp>[ XBhx{p}s'!*S\DlP %"@̲ )8Ɏ}0.y.Z؇<$1AS<̈~_wV" X5Q!Ű>"2 CID +F϶[g L6/ Pm)K=쎕11\· dz0p@ ɆK<8<ꅞe K-DW#-$y2ɳ:DYJig𬑷j[xiѦc9`lKBv=!L8 7Y ^Y%TSxGT|Ty}$ƴɰcVs5v;cc˥2 tM8L9e.j1=x z‡Z#1 0Azmբ-D3 }[Pu+zm ֊kZI_.|`iYQܒؗxzHP}!jT=b@'|-Wu!eHԗ9Qc̸3H8r! IOd|vu>6]VƗKBu`+TtST~l-Ϭ<.=S4,]Ǎ+{Raȯ#⇃5MPBv,K޷ܳVZ`%u6XeۻL+LHlwYI~Ȅ}^ki"mMRM7(eKD8!T6cAHaեS}$WR*)UY: a:i.IxG{ K1H_:Vr"^ѶH ^Q{;W5^3[d|!YU5YVҐS3Q 8#JYW $ WB:x$fQIa޾2/t%3m3%Tt3Rxr}oٯ9|=D󢼪MtY{ɚBg=@PA'Pu@y T`,W=CÅo#gɄPVg4/AɆ}佚6峀xy7fJA 'W UR7ФC$iPeoma0"ffd+༓]=X~aXJO4;}5a.j3d.؈ FX 8C{3`3tXCcK5zO1^KT U(+[tSh'wW73Tez }x 2bp$nfdxA@'F,)3m|Fep RA\<Ykio1`K|IixS>07Fw`Yb^o 5M1j˜U&Mf@0T:jcRB1~ ! y$<| }{HoGaI7f0A`'Lmm´z]c4YV+G!_ #=^Ņ` e+UJ^U بZc/>l.Or. yFIm,%y!>!$w]iy7`#u~:9A'x%/%(Li sϵ nLLG2`7f@q2:\AnWg7Ɖzge%zeU{#Џ9眜?ͻqY hs!Fi#O?T7p@&W&rJ,DDClBzA'jpLͦ$l&BO#,KSMtc"J|w*0eUq %2- | r6uAbA0?ˇ\wwc". m^_eeCNiN8de o#[}oS!&o{C,!eI3=j\ MAGab{C 9`IkǂJA܋: 7m撰H.b IUp/CCUM܀ C#*>*8P?}@N憄R)y ?'^q#|ˣ7_xe)p ,|fFOlZJ'$#Ǝ駃K6{S\uGmMmTw3AD/A"puD7ZpTY[UL%cxIò?v`6sWA'GSP$n6`)K`^IsHcЦrI%I]p p,#w^̈́ +@Aߍ9KNzĈɈFL GEG)0yWz$H{ w}/7Ȣdx`Hb$wƊ~zA ' ܔ|qh Oa\?x8z T^M" d$h$i_b(:{ @dy0SӲЋҚr(nA_OCCLCR7 ы @ L:}87v tu3!UnU]wA@'ɀ!ֹq, h|G#x@8a]2 }2k @ &6\;6\77Xz`V|a0H#/gHmn6h_0ʧ6[d?%d*4 R ]=Y  If ﶅ \pG4蝏*Ƙi|,tn —-deze…ExwsY)kA"ָ`J֫&AnE9`d9̰fTe:V#@ NVF p:N,=7Vhܨ *i,WA ( fG@u Ŵ㰣+:w|7k-}tAIz s}I5#xH0eJc? Ζ#6p'*!kkL F#1dRv4C%hB$-Lk?@W_\ f#`7#x77KI/7#x7o<BŔ$UR-x9klp ب@{LvdIPE]lGX1y` 1>L'9iOZ 2`+<ϡ{=|T4 =LuBW(?Es?2A`''|O>'|O>'|O>';[$?g 31lt/W84NZ):%ar`` 8Rf.7=P%`)0lQ!CW*;6 2 ' p;7@1WǘV2px6R& 4 `.i{p9B^ hL| "!T% HÕRh"BZULrkۅcWobIZP"mDvrI;lbN-trX#%JS2k9Bl&ݭBL1tim`R@݄[XӉ"tI EVv;ܻb嗖ss5FjCWۅrT-x^%(qIZŷ CiN95ué6Ðd 2sN v0Íz!S΀lScw$!RUTExxQC(cU>⿾{11s)$o3q`,VIjE3+[%ݵEyk ˌ&ݲ㲕ďw= *#mh?̉[,5A!)A:Գ}LVPr%#\g>ǏkoZT )S7{u^Lx3T\ @jSk}2"@ 4 "QǃЗ !S݅rc\*親5[dN2ĉ@$mCY֓:̆CHq $wQD(X=M̄<f)" 1 *4)uĈv*mnmy#5g7:0~R("5F0았x@ *@}i0vK<8‘]fӦY[\F:X;t;d"F.5bԧ( IYki6/\N a` W-@Z*DB* Z[Fr.  b G1! S`e_*-tQZTPVD %s>̙X il:0Xקhݻn+O‚"0XݨT_a}q^iz8ϯ^RqCɷEj,EƖge|S&9߼՚Kwqڸs`՟2W( eX=D25h7ףYejHW< TDNNEEF6|)XyQ}d?Hg`!6@RH,X(=D -@R4i :LP~E}D^E! Sa(F *tW eGj 2šyeȊ혩wW ׾h'+O@ ;Y frĆScÌJIygMغ As03sqs g}TP ;0"Z/{~t 8gbs35mwx @S9b^ ekDjs T-uڊkʧO#n Q:Ij,H )rIZ[J3#&rӁ! SK(n*c:mp]-Mq]Qvep#/zΨ}|FۉL䢄i)>$(CaLE=]CHΣ_Y29z;a D(lW X6_+[lH7㠤c k`X d@skdqo5^!CpX ꂅWkԃ<"YZ}k! SE*QXV̀/mMwMb.ɜMlme5U5'C9f04*;kZxD0<2ph"-/?'KN)d|WocDY^I7bܩ1X՗źqV-SCi%%d6iYՄW9$󽻫nu"4!#APu 鲭%ogdM3p;,Z{R^sՠJLewnV%m9$qcXi&B>79wo:V{ə\CB! SE" UPP:kO lo?LJ`#9=0Job{n3źKdץ3fAlr||l/XjQ1TD`Ǩpp@x>)w.=#z/(R`2O&>` ’n}"ș_H OJ@jF:*;~'I=H#C,@Z oC < i}`v!T `AҹoJdž#_υj L9GiE@\-޵! Se"ʬSfD -%[^K^Tl&Xl[X (P˥|CcAKy֜JdPjwIC8C_+s-\ތmL`q=9?>UL߂Z$Y^!. ]B;gSJB:k5irzWpҷf{g Zl>! S%X(#JT;,"My?g>j<RxjT5ϒkU;ȿn%{_j+nw }z#}5՞X1L'bƽ9V^5Vu [K@I;.(kX9-(Pr2%FfޑB]F j RP@da]ѫUtU.ćٷ#˂ȾRI-m-pao͉hu<~uYZj$* r#zċWW|3qFYsRZ>ñ6 MwmXPk?A$u%40M!{*oq)FqսBn_e;"j?Ӯ4hf` X {IVTnuWdY[ , U\8EisK^A&C);((Zz6Vj8iÏ~! S>BQ;nN mtMGs;>.a6bIW1pT+iDJ"j,A:ؑsCМ`*ۯD .՞5xos륹+08}vW vw ,MţQסF8㻰! emG Bf/ibkӅ!Do\ &x$+m$s 8윌y *dNcA'gLd   ahf[MG2mNu {Go)u ؋ͼNw>?s9hȄol&@sֱZlfd|'(v]kZ|-:_#&uwwxb:?fgy/f2es)Ak߰Ԡ_ ?H+!1YR@A'`0 x'LJqfLxGc$>Do4>(a?|0G.Dx470A {pD̡/φt:Xn??\Q~8'Zu־ɇ6P c1&4L~ 92_&Dzzov\@x*)/ͤ$A'LaAZ3ZPS@Sh65kZ} =27q"I#gL?C$́3Spvf@&F4jŭ޹)b|޾1ADŽӮq00yG |S?a{6?7&ǿHo$7 &T&26B E 8&05`A'o"5DU#1)t/+\$9h*ݚ> 8A'oAO?!z*`eڴ\eQ4kiahKE(EZN=S̈́u=b֫3c=X$ο9 }w  ]=kDd"8!#Dsqg/O_fGaZZeN 5ɞLрA 'g0e#D@&DKM?S駦C \L`G etVs t,LڦGh@A@'<$e}2&C` ~օ"s43x[||$Q@1$9Y}1!Q3eq '٩|6(͌&p2+ub;'9iOZ0gw|3(? zJ?'&fw?~ɀ1ZTff5323I$T\tA`' CďZaG_zO 1ะcxxr؇, Dx,Ow6*i0%}w| _w68èyX0|GLH0Ly,O9eZk(NrӮ"2`DFrG \ru˻oXI_LeL,@3`8"`XZ>87Ĉ)C#!ne =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrrH$*T QFɗ;YG%kg}?᷉,7D܏ 9m'''o]uœYK¨pGVa0OOI@,،>.C(~NW"Y=H.*,`$Npi iPe}xhM7x738ϴ\>v2gE`: Z `*oQ;Uls̖V䦷 c0hQ! ;PyqnOXeR6Ф'N泾ϔ *ސ،QЀc}lu $/Mj .oу$[plPH!m:I{ȌG7JM޿Jxs"//6ȃBq.p ٹc8P5J(,9"4ߣ@d+?R]Jp/s!-#;Bp6A͋>y![<W>K K+dݧoV G;IЗ J0Ղt2 ÷?ڏ#^뮺뮺뮺뮺뮺﮺zQz(g+G%-SKgxX= Ys5 ϋ8׍_;f~UxJ4ÿW? <T=7?P ybD).}T"΄}DKn&Sc-k]>-ga1)b, TA ${in"FgX:/UQ?+p+1ǭ`}G]뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺뮺뮺嫮뮺뮺뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺뮺뮺{뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺!dge-H45gK=$p-EYz6ծ~`uyO]u]=u]u]u]u]u]u]u]u}u]uO]u]u]u]u]u]u]u]u]u]u]u]u]u]u]q_E|ABBEt 6` kjhye6 O$R4N3! 3b9C(aӭJ0O7*b#kpN#mezЏaK3)(j4@VIfx~待Ve<2 #.G,K@?0KlEY%^Ƃ1틜h3 6}M=5b6U$%E^,e^>iJ.1t*3x3O*I0}l zԻ&_^^43a(hS@f f>TKfIG% %vþp#Y⸫a6F K(vwTE5F.eE †.pfqOkh|?W#bE&%xVto u;{u ]uY뮺뮺뮺뮺뮲뮸?+(-L:tӀIɘ맭}u*뮺뾲cυϏc{>>﮺뮺많1Yz뮺뮺뮺뮺뮺뮺뮺뮺뮺?%aa&"Qd\OπH'taH߀,n%L@p LP&ꢜQ<$@t<8@b$8Ɇ%`Zf_pSE톿XzxSjYAFL%kx[ {ܤw?:YI<s qJ&)}窏4>hM @?%~q)`@%0}y23> ~jP !00VC[=p=0Ĕ ? .$ԕq-Ɉ T 9mUHyS3>?" YjoSGax\f+XBFNO2 I0'IRXRKO(20J;OeyPm=};`B\n t$NQ;|eki0"J gn! Af_C`.!ߟ0D]*kBZ0$BҏR Zp L` y8 2 q@ЀQ$7{8||I@n$ C 3hZa; KiY' Cc瀔` "V a|DƷS1B0i #g`FxxR]čUN%?F`6a]`8 )#2#GW@PHLP~""UF "`icttX2ԫpr ,| aR=cd ?Bp! NQڿ@u`60 OvWs YoYϼjg:!D"vM h<)\rJn@<_%`[( 8Vь$n{aH@  L`Ko|1};!c4!\%+|~)C VʳcBV6om('v1>kC"h{7EWG gr^E BQm-mXNBa #h~V WQD l[RW .Ao"ׁ "f!,\*p^P0D wRhli)?A]X峐|м6ٙ,B&%@6x,G*J͔5=U M2{t]u<dA4F$Aճa.Z .!2 ܾam/[Q<ɐ`ޓ'\ Q=5#qiU [per[ZcЪD*vLT6 A[QJQ0Kւk8i~O02F@[ BT{2/L!c0E.0ɩ&2l  7XcxP(ndXb拿"F#$ e}AT ʼ\匀:/Ck&e֘pl!8Ny4Lx' p8/~Py4!DnE& 59=$0i^K;$7v^$tPuIA{N7 T!mp`<(ybޔd*@h/-z XIhWd3JD$^%/Lh '˫^Mް s }*Vfoŋ,{,g0 %@RU C L4e!5OR(T=az=ki-daA `wO/`c,p2@ b0(u Ow WpA8,8YaB);@/y?"mߍe;;>~mĀv,L>~ `A+SܨNP! ;LIHԡ4fwyjn$52:WILɢ,ۺA(HurvRVFAJ9~n=#2X0H^z * cMW%iP^b`VU]@#*H10D}b z͌E??| lsZ 䵀{Bts/B18 eCFXa(a:z>L5pp"77"gz[Pu Hhw/ukL \J AOGজx:1ڼ{ d>;y.m 0| %MjLsF}t3fd"C0H(>1p:[03w! Hs|?WqeNCERKG v&Ȫgb21"|ỸUjS7z$wh I™r:HQ!fG>k^Y#9t }$MJ )- ]|2h¿Z`DD-S;5>/> :LG w1 4 a5&W 1qSx%8<-L:$l2 2] Hz)R2@[dUmegeB?tywi?a@p%3 (.; D<Mox2G~#(#qͨ~fF8myX1~W@ DW8Q䡽B|PToTDI|H/~Fਸ਼P(,Pl_tF) |^ˌIg@iZgH? D.,z+R> ;n~M[4>@Va{np](}ef cp]_#ӿip%@;| (ѯu!.b"%6fF=SN7 0ZCOh|!{B_)}[8p]ViŸ|\^d` l0 HIL9(C*!Jr5 'У@(۟Z)oV<\Z/ J^/}wm$i&CMu (֌`Cifa]v!HgF蔱CլLf=P0$<65 8|0]Aa;xn@ͅ:kV}=UevD07N2Y8ƠXH& VIv|cs@=!?GQj]`|I :d0\ʢ92!\Ӑu@|gL/kdi0R܀KT((CkwB§)?y|I{,}ʟW;ܙ.QU9EȲq݇t}_|!(V;KY/H0Y0W465+ Q5*E 5l*X 5nƊׂ -T RsqK8΁# ȿyT=倣0SsuSᰰ!O,"")IQf<\0ڃPZ2 WmB$9*7w8Qxk|Ljy HH`O z鍘2r7= 9!Ž(5#j3ez뮺ͳqY AFg}4w`Pˆ. @@ oټ_TC_ O.Т%HoH",Ro%%%پ v9#?^́⛹O0mdB0C=Yt:>a]a#@Ao:GGKH++뮺뮿~ %ޱ_ u]uOI;~7_ &?[נj pl) Gԁ%^%Ґ}lcg8o\{S}tKJB3|9Ns)u\t2_? h@UF2f5 G_״0 J-p BBlU5Z*3$~a lRY((B sLP'_']bJڜ"b]t]u]u]u]u]u]u]u]u]u]=u]u]u]u]u]u]u]u]u]u3`AA ');v`$* dm F?Gy}Dp=lkqF8׀Az3o,^`X5]kL8)3&OH-30=X $Ey^.sřO Ⱥ]UA8cȸē/Uw! G#b8o?)'D,VBwy^kN L]M&nR ]q|@@ެC`0,3,H'䀅m㌼&~ A@'$ {hl4q2-|oo0B*GqF&~[KA$2JA38~NWB##a@y8EW.HwC2h7p;bm'->SSB{~%lے !?y0)̑/LJS4U"j QTߡC `NaRuO@OxpAxr'/i??????y?????G????r@y76}B 0;~CPMC`0泰BnM)E'aq8tK0#!e/1Nye@,9,* qu @vSg g۟sPKd:ọAϚK0j7|*RK0&agɕK0"՛5|L! S̈́`s,@9 mvt;ߣdÕʨh 嶗-R:L mߒ#:YBC`x!}j(o8Bo CC6uc`,&҄HRsR8;{0@Sm:ߏwASwvI5Ħ?IRkdwt/:o5^qI)..FVt"*V[~%#]Yf'RX z! Sͅ>F(ФRe@ PW^,SfO$A^&؃ )x??x9?eݖm92bwEvc1cetR1$,YU^|f'҅so' Tѐj]Ee-Z"Z!67fٲۢq7 .@$"@,dX*N쟘 kY-/8.Y`:!G16:_\ڍ#! S̈́`GYe@ T%T@} -)ڀ|rZNqy95nT(%9Ycn"]4qҞ=-)^?J[@nbK0PQ٘_Q5{v8<ݏ8ܥITT>DK?9e#xK%M0@B`T@;!k㒈wWItqWBk?}*B|! S}>@&|xm|x_F_SXWg+BU4 {ۢ Hr-h _ 3cԲIwjtjQT .q Z~n2Ę -}x(x*sB6vT4۫m< |ZYTiOww4a oß .=.\-F4 $ lu"{! SMUC!PE%@kr#7^r:2nc:Y]}BdpH\2; Tu,/<8a@1~lCĠDH4Yot0VX˿o ^,O Nq:-l;5w 9A5?LOD0Ic!@l` k@[`7Vp 4 =I2NZXp!ƒ@64ڡ)vYF&CBk*o! S46n)`@/' ;D#?TA"B5`ee,|}\> }جޛ( %nEq06ɫ*J1of!"۳035`_L/V)vNmXSǓ̺ʧ/A|շH7\SOMNg98j'ZLg tD.ݧ eFʦeS~BK9M FHdW-$m&Ru eE{DPT:`K [āq' _];R~pFLbTqw! S}#( P璢 7vqt%M#?,jCr/f8bJ9CYՋ“eY`LeGkLaCylLN>w ^m<0~u&/WO{aS0v&RphsOGhxOkR 5  ]evyL6ŧT (dU.վ%զ)Z1VzVE(\iuJͲZHlwrpk"! S}& 9l+,P7~$ڸaL.;p-<ɔviʃqJ(sXQ 3$L|>a71 ؜l[}&\[KXag+ԅ yn nPFF)GjՎ(ahU EZ66u%9ַ-.pƉ}L{u< d0RD)$t'8*Z$F!.撊H ۱$J! S}$ Ij(*-@iZ\($klDiOiQ8Ax$=Z4>*3Knsƹ'UlH%으nSYx@! S) H1(`*X2ަEldUiOv }F) #PWc г" CC2dix)H%foq.Ң~ !ܙ3!'f22B1^LXh(yn+: .` Yj(ζF IWu` s^tw0Beik1hM36$)(4!N>! SuT@Rl&ZTA!ZchBsZd qB;fCpRP͠ Xs:Dd?ٚ^AOlˡ 'rX<3>".b X*,K/a{dʦw>,L' BFB7QN@2"qZA,I:z%kI?30Nm3\)xI9Mӽ(X|_T((Ĭj) Dygĸ/uBNu~6ְ9! SE40Co XQ3h~_bҶ.͊ Z~0–$p J;kF-%KdמlɱEtrk Nq]d%4Ӯwnx!:s8{<[ 5DNsIj|OӐs2@?6Hi&2hnϕ9_07grr ۓ0|s|6ѓ!!:!0s! 0x!L;ضװ VW JdĨ!S=HW ^Lʻr zl1 R].o-mTf,^'ro^q~e fݧe&)3A,_&tEMZ@Σ.;8qBVwNn:[+}H# WPdGDTz~ 傒HE6*M,r` J$)@O`7FLf+\KpC lȷ+X(J}Lt!LG.H*MPizmm !I`$W \УVH+]K'3{h]Υs Ebo䮝vMύL7U+h}KȒNNu&p WKbYAσX&E~fU~վ{| ^^1 };c<׳V9-a9|cuh&6jW,&`Hsmn|WTy!Ӊ8f嗟R-!{+w} ,4>КCЂ ` RX3x.b?aA'$d[8^F G p>Vb9þ/;,&p伞;0_ @Xqp0[y* vr%#Xt?&X'Bq~$ΙaC?~ OxQ@:8q}o }_X ʉN ={&\E}T7V0}#wf&})& vVzc"}gð?:-HW#~{&Ox&&y+g&Զ3 A'Q8(=`:Zh<eqLF%ɄC;R\/*x9dZ6"A";UL0ߞ*,mb롂o7yb LIr:㉋zJ|'0bg~Gy$fvo&C%}Ze1ӆ5 ɛ0A'qm5x;MZiJ= ЧM?Aama~Ȭj6"W41D3e4i wܽAe2 0 [5&<'0NS[Bmߤ73Uj)W*P ȁt@A'7UρQ),6vMjK\(ft>"HE΅?1 6cFڀ͏`r6h˾ſT!& ?o|W>_? o>W ?.#w6^?눧n ߒ~ S!L̈*}Fg0yT3~?A@''*/Oۈ㧐J[fP$,<- c($0 SM=p_x6' iwlGI(e+"ڀ̈́1N/ɼ|N#? A'''7}pOq%aZdh^E4?Op0U !)ϟ?Gs? yG,!}M68w,@( X FV Щ9RŤ`,{{&f8 $`!eFf1+e 4)LXoɟ+ e2rV HZ[2 qQa8zo<薍ʀ8g=U!WglAr @4abX4S Qvֲ7GKঞȇAݎ71ILomMm50g[!e^>U 'O%| mML5!OZ | J$ cOx4_S'!=ɀ/=-oHPP6!0ޱRdȏ3G#xF'& ^#^#` `A6<q]wr1&]Biӧ;;)|,+;MAVX ؝=\+&@6, Aj6#ǗⰢ0̢ɹl9XCZ#d@?NtXfqL2UG,l7-ͯ$Fޥ~H%>-'5uT$N-yg &Z: ?fݯd"Ia1 RZ&Rdcn.jvUHTV\LX[ȪO!s'!1}1,Pp;cq SCqX|/Ua¬3d.D\lfaHBjr:!Tec`lE sǾBȊH*+lZn_{$^)r-և\^a.fJQtcxmT/k!~rU[ܵTF!EϻG{Es\d98H*cʟhO'$UE2"L)]B3gKOa^:QXo& dr壋(:UxӚmx-,RJ{C.u*y bQ!@S <b1X zp;Si4@XJ%GSS( !T=b s" Bki1ܥV)V>a`s %6ʙ MMN31 |Ud.><]wQWKDx@9*bhNnb2+yɺ5 S]m̙?U 7( l¶֧ (]k[,'D;LȺtm#_5X#+!T gCNt) @SYHc#C(]6jiᒵu"3R똓.}=7R-E71[@dacf)ys ?l&U&B` laQVwH Tm*^K<+ @ٱČf$a%pB4Ĺ+,ye 'AJKr~kHG <5Ľg-)en9b(&xd޳ѸkHozB<$k)}b C55~y!Sݑ$DEB \AJXm=A*vTi-N7J_Amv&V]y{ed҈D=9JTu.IsKL&=R]U8Eaⳗ{tni`pUo]U O#44=VƊi0KEK`T&sy2tM ӻ 8B,X7_` , leXZy}Z_"Bc@J1f4AuRѲüX*hn~8N [V|$! SՉ APp2[dfU ]&Z:S7{Fj-a&+ڌP%%@9GaDkpSi,E倯 UWf[z'jEtWiyK 2}jPQPI|Z⣮a0хW#9ݟv i-0%YK; RZj5 1/Q% 7@jFh (B$JiT[LZbX$Pgĸ2ʨEq Nj8jp! SbXH޳C10u vyW-3 F+\,C|VR4 )#UJ7BBissnd݃ԑu[ =}E~0>2 v~#~rRӚ'0D82DF C5l$,fܱz5xdeWgR)[DjLOx <0*PVݷ+.p~Н:`P(J/A&QnU/j\WROyq%HAJ0 d UbSOdAFyR,,eO! Sc AV&EHb3Hl+֥b“E5<ԉ/RHt1UT"iTF*p_,¯>Ⱦ,l?>·AYHW:OKoTyrz,'9 *f!D;ԯUr""*oJwYV}|^J1tZ'WwbʚApA.A&}`JC\lW"1 ҙ#p' di"@ ^(b&IJ!?! Sa8ҒE)ɋdBg4|4JZmHY%dD׋r!}U񯾌 ^ ;M3It(6 \uAgBvփ=^:kh pBN@#ǽWDz( EɛLRR*͌:NWiƞ u-#$WQjAwq6XV`lXE$tI;KpirOOB7MvEbAk%I2B 9JDJ$miXZ{a8|Ҧc! S,E1 J P)ԃwcy ?PJ@GoZ%1`*4zD?]˥N\}v}%pu|)pNK5L&~eߑYs*[OiXWU2b4 -UAS"+rYgS9J$Sy so#lX\4[|v~/bIΕE1vY,9'ϥy)Jw)q ^Xu'! S"kvnR*L\k,b2E{`p_|- ŀ4n~Y{N|0$M:l'+1©^=\xNe*>Xizt +8QQ1odBjX)IL/lޔ@|'͐3nOI(qL3:ӰՁ͎t+!u9ГO 0 eϠ627Y ;x9؟,6s aəS73⚅OQQR*kIPؗC%wr1DXV5*fn̝ڣPdX'?(rtGknLd ! Ne) Um 0(UoL>UsnrjZ0:l3 `0! Rtw\'}L@ D~ɃSxPJe}ž#!SS$B~k ci ; c7awͽ\ns#[{e#~,E)Ď[w(ȖR2HinW|ms`߇Wi ; L#vmB| bØ\qI@E^}E={`H#hb1cn˶Ke.] #NHYڼ1\{=nW%gM'< l}LUX<@S'!S&"IUYlGp#H׋7z>Zz{E6ƵenaQ@}>GGL~0~5y<Ա]4evKK'^#t4GZLt]-v`v_@ EܪKtS߶(1$޾o1b&TtMLA( f}AS-N@AR?7]?KܤA6ՉIV5Yr TẀ h#VXe1hc^XՊx ʲSȦ'B^>YJuĻK@! S`(C>*ehՌ#q=1 cwg*՘ j# ۈUǙpka+):UE)`)t̩ AUEɀJsc%ߴt\%ӵ5(w 8rYB*ԝ-r!Xf< V^~3P6-9SKLIjE\(ML`hhQo:vh*L! Sa EJ["J#UE8D+^16^%,,>!T+״F ސI|45&1?kO.W  `[xy:bpDfaZ(DNG%s F]rp4>Rd4#Q3sklV2C6ˤeząFSwz Թ˻:#uhalH,E&k缐4 8n^ ^ҷaA!I~F)gvcTA=-Ty4"ɔV! S>h TPGq-xG|<9&w<^:=#̉g_10w凴߹H ˸ިgt/f3`(=X~& Fw*K7`̀I|ipRӑ[17-AͤKoz_"1A @@XMR>,œ JœYreA!; lȴ)hFSnLQ Xք.Hذ9%A''|O>'|O>'|O>';zO ;%PN+l0x< >Qoʁ p 0T XLvX2@@u7fu p:& )` pA!IR:3C0Ò*h(S88N8}ᾴ ʏOcpW?[C@jG5Ey *n@%A>F( uH:RūY(! ӘXA`5,.< P?@ш`;L|p˿H4#?q=<&9??Q(PV.\M,m ٔ{e  OyLip#J#J$Fi,ohxFeÀxxo!f#!F?2G?گx[ YU k\2B5ș%q|p(RQЗ@<2|_>*!YO._j5o?>YPy<>>]=ӝcOG@iPvo%lq ܙ-S=߉.B91`G3<'hϑpЮ,?Or'wb3QfQ2L,~C clv=ej:|'BD(ob0ަ y/ٻi'8Tk/A@'w^7a 'M""51ߢ7mRwGh/>$bfy?CxS,d%>0a~3S|T|!+Njn6C608`{ּxL_Wq~sagku {sAAeΣ"ЮCEA'49[qqf<XZrЏ2p@! S̈́V`JD@e@VûV30~OF\S|&k,v}^rBFp\1/gJܟlPS({ м2Np &x.ޠ}voo~KʴŊoeⅼ&In1Z*[jkSzmڊǻ,D@+mR'68= U_ rG)هc%(NhM4?#,eO .YF4B/> +>! Sb ITݲ$ ,V\-zkWQ:%Z9!ث2`3A{9ЇkZrj59ӵN!Vߤc|!G՘HoHHѭޔcrȻ$xFRbdkСI+8\1f/|xR_-Lrmd$kޛ(% EX[#i%,:3:>+|mΑ LiJҕK/P59& ^DN,8KFմeS۝s! SU(e@e U/0 $好iEdaL#)rfm7^"XT-yƤ A r=`@Ob2vh?S'n\|1R?X$SLG K]J|ROﴊ/ U8пk;ѣl@4_JdTEQf& -(2ӗ$ńYڤ1ZFd~e0)v.qMqLZ)z˓%! SEf3JF@//s9D)"G؊%;,mxU/E'-V@cUm?=/M-LĹk-:A2zRNiGU͸Z"%LM| ^,xgXl6"4π3y?+)r5#?C62\)/I_܄7T{CE[! S`e `P $#MfiƧl4*{t@G"~hqxL23m?7dbU5 vsNlz6 <VF-+'Y{h&æV^b|1M*Vы p5k;P mIh^=,wpz V DL"&Hj -|Lǚ9a⬷Uܚ.Eo4-KD؆oWu^~h >֡³.سf/)[Y9! S}$" J@%L8yE޾Kmee{2+*t[,1Eb)b^Z}\[!7JAS./T\uR뎒؉z?F*󞂪j@PHWPe@_1kP0Gl3Ew,DVڏ0[[-4j&HRJ:ME~xBZが k:Mjtd{W2 Ƒ#4ae9/.?Leb:! S&K9(Pl/@Įm$Gp;_FI h*Q;P迁DJfA3H$\[~vZI@w\,R`AZ:8̪J=n8ƱRֻz|p ؤϟLj̣5TM/0QYd(5L ȂFxQU&0wVu6Er#v##i*xD5 Tޓ@RK ly$JLO޹޶hQ(|mI[׷S8S'[Fcy! SGP[^2`/ Q=_#>(!!QwJ5-8X?]#8!\'h[ ¬G^S5o `§T'ID-Rlb0 Ùa Z@Vc&m҂}PMD]!QÊ%[ny UL$א4(b0ɛ)47ZQaL)J021kh^%&W*)P{W\^;[_E(P)r^ɒLYq'! SE- FNg_b,+ ,\e"+@&JsC}gfҢEaM@]:AeLw8`$γ {s2-J>6ס:,PeDZg'UnZ1d<1 }((Ewxg]ga$J {.񄸸O9 x(6?耞6Ô7c="*/5ӊEBU<.V!ʋ.VuLzj9! SMCb + g^j1eX3hpZ;{ t|Թ 1e7Je#F7!+M@>}H bd޼~ dۜ Z9'692ee|[UAx!!S<"QX(X<_t"zn#Hai`>>|%$ø NFXm3"K0{@ۣNۏ#.}gWJ-zKP+0xGxD7<@l]E DH CYT @0ُ]BW~46ρK#041if-_xnX .fouIp< #PwVr!koGtU 13g`W A'$j^$eH:#|anAx_^ny|r|VXr4 ` L< )aq,h{wм8 fWf9E"Z? /LVrJhRMPY/!/FKŸW?/a/ wk\f|39q>`x-gyy' ~090 R]G4)|8KTrudπPWrd%Otdu|oKǐQ(+ģ2dFTSWؑ ;o{ &Pr\О cI&a=K UaO$/l/̅+!xO=#T"ƊbrdFi"H)Q/ U ?,i[?!CG.ooxpwH.b.&L?x- [!0Q_JÀ#AUdOTU$7]| # 68_ z8tJA0~ z= ?????;?????z?????\@ٜ @@hclac'`ŧz%Xub%Xr4>5rT,Ƽ` `Maj=nm&M/>w*` `NRS,+V׸WQ,oLyD+#`"gE"fsp4]bqnǭWe7 RgQc?-֫ד?Y$5OI` `GtyZ_7Y%A0N^!v#zI1}~yy7֠C5G KX  -"]ˎ&fAΦ_{M117'&71#"wI3cE?9%?ϱ/pA *x y%Vz @sDGD`1Ӱ ߋA!\ ZZV;oߟP9M0C#/Ճ_ @ ީ﮸v zju )ZɀNR tWpGz<SO}w"ޤߟɇhZԦߟ$mMjּ˯Qm~zh9I1-A'Vo( Ǽ@ ǑrEF&!p>]FΓUw򐈲D|WYF:g_-c@2wmqww Aǭ\0+W+B^uL5>K8&| q@fEFNf`rZb@$lӲfW';A{8 O*&OJ'6O O$xum~Kۮ?E#N4 0i &uأq' -=bNMqXf:uhŮ$?68@\ fvΤ@5DBIbb\cVV3 tJM|)&L5 LK_/}@3gO% f n}H)`3b [L1ė2ɓ.0eʲ`@~z7w,<\%?sb ͢)!@3y,vD;\mcUq$4&#Ɏ}eූfp0A'~#er5۩^/CJ 0 ypP)|Ii$)LgtmNg@CN4-O͞$0 tΜھ&> aYjrh0 ~fpޙHCBs6F(Cc3xak%;>O?opF@3xww@3`3GbA ' #z5 Q5F^rADpXA0%ɩupx T i>7_ y iR ;ANww\Ϛ$0Mɼ2ճiZ3aw$ UUw>b"NLL w6(ZϦ yw@3{S SL7:3s]A@'w^^'xOc-?U³™smK.wǚ0 Xf$I mwߟQ2anAɮ #??NSñy]zcF'&!>韂KA'w^ ~ 2S.2s9̜Ge)1ڂUɄHH=mY3qI!hSDqwwwwy!e0x !<%i.3c8,k=)==,ia'U_3pJ~? #yDsG˳7?oΆ`D x=DyI &98`A'wZ?.ʺP/J,[M|y<6#ԐiuITEm06-,2 ?owqgn h>[v͒ +pw ?\FӕX+-cd).bV%w{G?d9ȡkwssnw{,Ï9ry* !8+?% Z- $8iyFL_n@!*S!&"նE?9>/۫mwNHT$*6g*^d f(Bk΋@1@e)>*߉2J)t)= d"r׍竁m@W{[Uy&oE< MuI: B]є'v+%8;@c`]^TH\obx\LA8Q^ UMk{o:i^ȹ'UulӴLUM~N t];]:cFa}Jvqekrj&˒'qG, CE%6eI涍q]F{k>Hd?%zIjS"!jTQc -\mT[4&Z`XJY,c:tEn,lʓK #,,թKK}b6!kFX 2g5!H7I8N2b%I\Ýwu镕e5<,h,,O0;+([NE}.nړĉU ox+XedsBY$wUll`HGBwR%1c,Y"__6<+YbƒH6P}L ׈mE}C!T|,4(f[X ث@tZ=eϑ.W@/4=M >}*aj#IZ2xW9( :hKeYZ1J&MQUHϊUZJ1ȾQ~ Zs{{c~yO$Ŧu%gY4l !#q$ N ^9nRy iЈ&߰n+Yz*oF K=Z4m-L{Y }!T: lD ILs*iZn,6Slik35drPM rq~-:݌:$.! c3)L#L3wsTmF..h:^cVW3h[Fn-$PXQTKap>IZZ;YUẫ$@#efNyQVaqMx8#cMKL#`7HWܻ)j n0HRO褠޽q}C!T= E`l$Cfg6$AE((-(PC~sݲ9/1ؙ%8Y)cUehop0𥒨 -S&v"muS1joI6ȍlʨF0: yk7T7SIf[GGGIeJ.yc"vXn\'t*X M&?[~ʂ |! IRSֻ>!T-cڍ(^]lB"az0R?[5f[ YTٴҌ0e y.Qs"DxTPJ'"JCpU *kTfB^w#P@DG10,ȳTs 5`dy)f7IJ &U*WQ!GMeʵ-}WkGTعYݱakx3ӕ>LP 8pX}cL #Wi"lixd< ?hJjs;!S8D,,HyljZvBjʡZi2)D_*(N$ sId|<::{7Q>ip Exa!0tb6 zK ظҍV9Nm1Um[䁌7/" \~jB~WZ߇;_tg:yT7wxLE@ D5@q%`vNvwUxW 4i2i^##86Sކ:3j4DV*NDkj>k(%uv! Sad ) nd.)uCڒZYζ;umG /Z+ 2S+LCZՍmM %0Ijޒ6~[|nafft'~+SǙ5bI?$70.^ ed%S al/K;1 K qJ d `:N?S)-~Pjt &_xLb\= $A fQ%e7K! SŅ*C0$Ш-QURT&V0,ݻu&81-Wy } vd(8"3LXbJ@H]XgBA^΄cG]V:ءЛK .d*Ԩl羧/ú~*ߜٸ^s雘5',}/|Ȇ3T$%2$t@bwy @ ΰO֦@w1BQk_EJyYxZ١kKc.RSQ}[|(),"$XBU2iU,y! SPv9Bn%R] 46%Ԩ9>O}O~]6:w.E `,_|1ߧnE@mc<@{@hJ%XYIp'n~G(:_y2Kjy  ',/e<׋*eg:4ELxWOmr"OFRR#@.;ܩU1 >4i<)Z^%.&q&/_{L! S`(bT)űWv/_Ƕy1avr3>x"azSւaC3rf+>5iOr9-?weOYwS1WC L݂>$n:H$+vn7F]2[K:. #8TP[ Zy<(h!S81ua#d麗$//Bg4ŒL,VbZ3KcqBKIrȘ6zͦ-4`g߷E4MiZͧ[еh_N `hӧɽ[}1N ^! S:#Ȃ2(`X*|(*6p7=?B_0~|V)_ca=ܦ3| beb>l@c{4ßc)'Ci'44(:F ŀU||܆37_h nc$|y42 Uѐ΀MdCC3eg{®$tPPR&w .)aRq{! S4#H": md%oc7iI0/~Y `<;=6_^ۯ }_c*|̀hvp ۿ%c-N D=ݨ^M@pT`W rjf쁼GF0؅>Gp 0? OVda=Ӵ| mX}pmgMiw}i5ah.! SDLDZ]*غLua⪫pfQջm/@=%݁C>Bu&+,>> !tu1uM{DhDJ] k\I:yY~IW[aeUe?&|Kݜ'{yHfVeu-wm2(1  e,Ge}Tv}lbAY^]}3#'fKNBH F1V+EYQ>ʌ+hQVTtg^1DDbep! S!P$`0 XJx7|[|KW.5v\\LFu.>u d2\6NupytDTnwd(ud..yuMKbMtYoEmѨԒo Ո]~|!q^fY*~:;9wMn( x7VS!`;c3̓&KPP'1{Ex5EY$^*h K?],vP %_sSh :N$9|#ǙA':ŧw8 dZ Dx˩;!>S3G !XÍ'`ˠ7.P3=7k^VIͼiبE` {o1h#)yD妤U-W̻8Pz̤ ;gɰI%IU {̟hÊP29_Bh+-C( b)lVK -}lE o0,xu ũ6탭dmGKট1;Θ݉##6Dx'|O>'|O>';b ;:veq/ ŽŨfjp0T>h̀p{@ y@8e9@홢i` ˷T& &!N 4 : Ebԡx%BٜH<' ĩ,g \p+mE8M<$!a LU5P PO: $X)n [P8yKhn4VT78\JA\Mٮ¦gρ*}i%u8?? xP<(2:E('-eV DmMXc!7%Ȟ y 6A4ʀ% lMm58u؎ޒ)o?Z?'f*(..+Pv$=&f"df5o {9 ;M8)P(DhKpykO&ci6 83`q$GeFY1?/ww _$u -,͈$q2@O|K#H69{N)${62il̜x Qq4q،_w9+ x0x{gX,$?\{<'1{dQ #yJ*/33;!!jA'#O4rK&[c Κ}*wa!t_]"RݑCU4*&N#D~LhFߖvP3(j;4Gh Ck+)#ln=!yN$-Hl%㗸y *a"3 #0IUοw?%CaU#PJ A[XXN:UXc򫱡W@$l|rjQBȈ%Il3=hZN píCFy/55iĐwӈx=/:d\ť1Et;&ԿE\ ߊN[G˗=wc| A'!9G=9cp>#<-̔nM.n?V a^O"{: "6L`D"`f̋A\um߉.2J?S_T0y~*g\  =L&768s^Nfsk2o&{b^\p!A'g0e#"p0 Vd2~ D)-i$qVv@G$ypi @fEs2҉x6? J%za˽Ea\hrjg~hM$yʼ e IxSs~( F@^Y$Zזɠ00V@3xnp=i LcЀA';idOSZ#\GxZ==# h ؃ }?m(wr^6C fLb+u3:S~x<[Nmt;׿Q;$Ix !l׊&_H!zn^:A 'Thvԓ=ФZzkebะvu`%n 6TL 8w›v)6$i&2</ D zili낡%X1,E p ހf@@s l" Z(Mk#+&N<' 5!\|v`1<Ev?( A {SyU)20ɋfYCp>&! S2t%JTa oY{r_ϏʂjV!3TѽГ.CE\e&&.Vi)Ml ?a\W=BPKT} U$cU]>tnuEW fpsc5W?֞i_AzO~r zKduӹ|Qz wq@!(فCGG(nAN7l׿O <;$-draRd)v}(W[z|X+w37-N2.Kuly! S>Q6`V "Z[D%.]vОo @XE/¶([F ,ȋZ^dt?em'g]]MZĥUQH|#+X-"Ҹ>ʠwZD(:nC9_j,m D)V*0Eӵy? w,vUP ^1H5, *g- Ր̗ɫdrcQhʕGZ+dpyH5oBHJ"R s1[;-h;[%)iA ]}o,'+t^3! S݅>v }A-D!mK=Exyp5Ee_]+Z{EK (Ԯ\S`^Y0o[@v%yMmDvH3k#R# 9^:WRN'@lH;=+*.yj+hpJ-\f8sڊRJ98h `X{^$A^ S/"U)Xя} %(NɁQ=7OYEX!7Pb-ĖPcYJ! SmM!`(jw5T[M&{o]Y)K7dZl \.]X4PrW 3g#gS ӡfZt>,,RJ[tKoz$t7g XB U>Qxݗ2g[ZoEvʷ2 #/'G0,(C{]fzߵ66 M@b)&T1h%`%<[bi惊! Sͅ>fEB(bBP;.֚BQ'@vR 8RtߨsƖWͥ^\DrJqr5/c t;|ƴ#?70zC''wI/ kŰ>_zuekt+ա>ܻlM+?SȐ-r']U_ 1ӔZ*I4L !`o=+$cS'e%*^6 ĖfޢSRv! S>, I-랅cH59 nH}*@ G |5! s/K,ڜFs{Oڷ&e¯D'é >>lr|fd.b,$hl )hs$~>^Lӻ=  ;2bJNv? @ 1ĀYt'-P1BXT~! SHV mS| `s?KAdWpR kimBm.D$ow[=MAJrp$H ?mP(JXE:Sfveg2gq7L 0LLxfތ.iߏ҄*:&rK錆U.#rnR} sqDl; @-Ih젔N.ۜ4^VoH8$HVw#eunA R%uwmhTdb͕! S>& (@R):;qdAuEg=/腙e ";νQyͫm#hG$Rx? ~Tҋ`[]ɣ Bx=gVdMZ<["xs^&gQu4 rgAKd QdzS ~hdEA5\igOBcST-<754Va&Prkb6^ws˭KDʲkά`1>NJ#S! SgvJ#.e p#\3'XJ  )\~߷u3- ?+`&$t:=*J׷HZblyPM_ *Oφȭ?dr'ƛsY7 ;-M0e9}O*>c0oǵyVN̠:̓u>|gw-n -4L,DO?pZOX%$տZtrHq(ĤȌ2{~Byj:̪_Ǧצؙ:! SPةy`^ w|ξ:acQI er/|<9b4&LR;#3ҡ0 $e"3IV"< =ՠ1\#èD*c`Ff&>q L Ukb$)Vi `O\r"@@?Mn)` m)H;b{ B2 qE)4{0j Q[ZDv! Su#"\llыer@ USEMUK*u@.!ּA^d o ;8, Uܦ?æ2~I-#1P6iMfRy@ָus\bƖ[A:@nȦg5xQ*|ݴbo;P |%^˯#UֵʅJ":|(mH4ptN O)?)մqQЂԤ%-ԍU! S'+a`LPeyӇVҩfk ' SawÁ,mnS\6x" 7 o z`B~E \b0}Cc[m*";R#> 7gq4'{)'v%7 ۑ0K1,=~F~)WMGX$QG8x.fq, LgHnkLV ;sRR^F$BA'Y=$ed ! SRDXza ql(mt Wje=Te-7R#"Y8TD'eihJ<%p2DO'ҁNH#my&3D͙u3Xѐ둔;?UU+e(e@9>WW%Gb8)-^6Xdd܂GDQV0hbh$©7T5L~_۸ B͆5.5$Rs'/yA<0GT)G&$0Ė<ۍc>PD2V< \q4Gt?A6bo6y>_X1Ru֌=>Cb0d5:7]@@<><%W(btˆ\/P!(T -bPĄ&cƌx2 5r.wK._?剑hd! S0+#-Do 6B;GC:.jsIIwᶆ㷠dDpd?>Opc<&6:t fXR2e=| Q2ibp`f̜$C$d:,DH(OͲv,0*2qۭPmX@}g:1a|oC :2ss1h0h_,w;ţA0";ltsm>ox! E}B>!:A'$;1ADA@@?꣬F@ JMo ?&nGGF_b|F#%qHeS4XEt2*8P~?  mj 1hOlxp/aUUOo)XXwf)J6 7z6F2T"gɂxxJepM*i(^ͨ` 5'z1>a 7G9 7! F㿛) N/z.".[Q%looÆd H’*WKهI(AD68zpEL`ck3bG??y??;????;<????r@EDp\<l_Y(0 8go,Ƈ_ג{(\NVs%Xw7W)@|;LY%,}y%ɂ3?Y%GdWx l ,Ưz^ǟ f5@,=7*~PK_uK0 WdfA'W5L,`|<@ ҟrQaoVB;a1Lox1BZfRC S5P9 4 F^3p? Ȩ--ړ-W%=lw|=߿3>Xq~ O%&U`d)%&?CK^K~0< ,nQ6ZOr.z5`c|E~k]]#yɇжwmOs@^Xm7]J|Y{W~oϮ ]&ߛ;WɎ A'S)p þ$: Y#‘]A  D>i !v1\(S+q r~, X kpkp/_o&اd7+_^L#p^fu&k>>.LvVA'W纸o)g"A}\K%%U>JT {X5?lx 0TЂ~6# d׼&odMT t1$|!~ OFLcCZ-x)$L}_$n<\Gtw~Y!i3e/A '3PL*pv4_)BF+zЁ.S` <ʥ)i%T.ƞ|GB<M3VĀ͈ d a[J eTX .-37r{LSfKB3IG" p<1#sG5'S5?OM>Kyt#LAZo!Lwsf͊&K0/:_AX=8F| row:FVO`EhӠ: ~ QP^3vv78΁Q*` E9➻ܔUK+(rW!'2O a.W9iTDYƊAn@mLA?=87-| TޠЈ݊:0>'sW!VB}s $MU]އʅua8> ; !xUSd YŖհ3.%r!ehuFHF28,}QŰj4߲B+޲ =dW&;]zsvK5 Nl3}[f;H1 t AsP$6Ɇ L}aX'$bs>4Q]m $ HUYF>2+nĆy}]u]u]u]u]u\wc#1]u׿?Fycx%mae`U(75}J ,Ab0lEAJd<%^a?r;IX:wG7*J2Ң OE}aPwsPL?;V>4y ` . &?%10л'݈! og{nE"EoY.Y7%S͞3Mf뮺뮺뮺뮺뮺㲩v:뮺z뮺뮺뮺뮺뮺뮺뮺|(<f$f Bӷc{C!ߨ~]u]=u]u]u]u]u]u]u]u]u]uO]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u]u]u\S=hu]u]u]u]u]u]u]uC  H,"TH,: WA$qhyrmkU Z +⹦'i??1%3)?뮺z뮺뮺뮺뮺뮺뮺뮺뮻뮺뮞뮺뮺뮺뮺뮺뮺뮺뮺뮺맮뮺뮺뮺뮺D&{ |Et 6%٨HzR{8Y2~߻ /ٰ*HpW9ZjN= ~F*! YOIˮ뮺뮺뮺m1k4`ZQ+IUɁk+ CQ`X֭ ^fٲ xDҘ; /Ea¸3&%jUdhtTc9kB5s` T@6D k`r)AgBfX/2!Bf%52sj(\bm<`q-ýyA<_ (v1AߑaKq5jv? $T |0;-p[pl jcL- Æ i0 ihy@C?D>n+R0r߭4?8E.y?5}!cr5^3oc2 ' ؍:L8ϏP11+sx ŴRx0  wb ipDR_AFP&]pjرY12ag#&% n>hbk= F rʤoO_u~3s5~!``2-I},g?z\=S`_  |ĤUF%`0bb I8x!Iei@<#JG_ D ~>LT'_8- @x?Ea&"̠QgoPߣpº~ yd@zb{ z8ퟆ W [C9d`&{{?}MQU\F"[#KZ +51-H8Q?o;oߟOU0p2IU!& S4<I,:c\&_2`ܞ!%A[%22 GTGk fyBg7KŽ?20ȗbyA8pg!?@i)8•NM2gL\f/~0<&~{Y*3y+^XNx"dܻxi2=L"i/[1U@LV#׏b3!UE냊1&D? Kܵ ݯ0&w Z1\bA(H1q0gČ7F+^5`y0>_ Z)U'fL Peه=?P( ǥFGxpJL[˜Con#ԙq<_[@rd{a9h b'bl&_P'SVa0x!D&xE[0q\Za( a3Wl4 dR(-,ABʭ%Lk?OʠNɋ`n!;Bed!ZԣCd @z@y dO0C8OPa:JF HBc6w<d (Iݻ`L^b\Ӱn@@ X;k83ӝZE 2fK)[x4ąC1ycC')uyM̶m F >K.?c]^; ?М %TuD wK%FV"C0 _7Ai%`P094 VK#6\ Cx;CCPaH #S %'Ԙ#e ɢ<:6@I}̌'p(X"׽8HBJ{M? ULRnbxXC^|"I‚A&=!qfx '4 n|VG6/kE)-#C L`&&Aճa&Z !L5cdW aCe6r2SAQ=ɐ`q|<*T@9 xf7?Gǃ4Iqp)ϵe`bGzXܓ-PP#V\ ׆.Zѐ{qUT 4 (<)tcJ| Rc׀?f3`_@: nߴ6i4%y`z C/M Ud fa #BBRS@sߠbH/BM1z/b/{JB3`Dh Gj,}}^ =ʄ'ĔGe.@N8@@d 4:cP׸1 s,x] o2d !;mh18G~6f~Xz4jS?V(GaSFKD!0\0eHk!X\s7Zx; r?&ڮ tNXeC[casZmrɐ:9F 25A#V < a@}jȝ*0#Wf`Dӗ\7c4(XHO;uj^EJz )7~Eqԅ= 2Xpl^ ^Þ \ӣ\1wN zY#p)+aA=@5\o-:k{)$% L@ʝ+I w*a=&.+Dm!'B# @dfo6  ۄ]aXHKp H]NːRB8ja3A[t=pLklaq8:|xf) ]ǁF.@E[] /IW] Bt,_s[B4+p C`God2:_p@ӈ1aը2 ."7޿Bls hp]Zt:A H@RfH0kWޅRO8zZvPꀃdKGQzЋ& D i /h= 01iE7E8[B0޷юN1:QeJd:@G ShZ)@(=U.iF;3B,Ap̌P ~k\Ff _͉?}# ק48}$.g_QT{%T^K!W%MD EQ% 6O-7ۑqS7J pղž&Mmz "hp) A\P֮;H`=5j1G(=XF+8% ՖkrA zoo l)!7?0u  !Han.d8::!-1(jZ!V8mf$|?ci  Pj_;ĭ+TGF$Ӑӌ F]ZDjl,?Aem| "-^ME0QA(X~9 d[@{ ?5o9w)ߟ ޞ'!BWY&k\P"/c[' BNP  n` JVcE%fTș|ނ-Nј E(A ȿzGdP7 pX8,"") Q3\D },0ڃ|d% ^jq%]WNIB1ܐ HIV ;A?cf~c)BOAG$8j2T\]uכf%V9)~g-B .(-߿ nk ts[/+_ S>N\Q 7o1g;QԱV|C,E(3!jwOGd)" Rߡ`;?Et:>a_ wC 0T 6:Zyuz)d뮺뮿f9$&*k EM?>CA.m s# 绛/ AY+Wcwu,#Nr7s XE#KGCFV@* t~5û%js 7 +ՒfAa o$zMP5OÖs~tv% !AH(jb,(M[]t]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u\W5_A 'L(`e7T!2#ku@JxAlWV# @@ &n?x 3`K@~_`6"h弤:}gLf./{{~X0xd|ϑ#pxZòpp-2Ax0!z2f*i8~LnԦ0 k2$:*e\6?/p+`?$U2LD{#x E77p"FVJ&\Vdh䣅y3|lA@'L2#/2.| %SqV+0-p@f$6ԕVvO9}FV#k1 , ty˄?Gn]yo,EcRì25A`'MB&>?FŸm8L+|J% q{-]hc/!BlmĪ[Ϗܭw$c=Nu;w{ow88".j h-WQaAuAxIy!/ ȅ!H2sUrsUp! 0x!L8oTT4)H:%nj;AǤiluD_F?$"u_y@ ?ߡvtq>U tv Rn Ai[ 7'?R }5 DBǞN :%`"&sdgHR5(&P{,V%u S6n$yz0BA',ħ@č-#!J%N.U"z15x ^\C@8mZL]Zjp[),s!LG<1D*Q7'#Ob7<\ Z-oeE 9 4CVd:6hSWn @u05nC2`.Yů̗}qqOW)b9lY?Jd~#*Kc6`)3?7Zf)?L@&T},7ɴfoF,ͨ$DR`5|WԚ,5]k+'fK3ös#f>qk$kY\Yߔb-0U办sqvz)?!jTՆ;; 'Lo2ԸGj)ȩLW3*95EzXjaAJ\h7a#H܋Eq::@,yIJb ,~)]Ms*`xZ]vvGNJ5?NnVs*jSpJ,3Vѳ˺L5gfMIڝI\:f[Uqj!~!bM!V IʝFVtQcJ7JڥjF̌$VȬ$#.~7W"^^ôAQWlM,0mH~ƬTY !T!bQ1+^Z%[zZ u1F^:c_PkQכ?2lvU7˿V~"6ɳ"bɍ CSm'EF-1mB!x(UT -q5ꠜxsbWMekql* =+ݖ(BLl>4fSO:HMrH}We1,,q{kM(\n>V? &k vWi+XS;UʼnqK7ҸAvEK^M;4!T{aCHALT$rtܢ"?^0.Әs|S,7Bo5Z%g68>rn'& |"i_"QD(X<*SRxEX"2IEi%k]6/bDmq6€O+?5!5F: ;EخDhBTRB9 @92b?BqiEĖhq!3ſZ(c]Z$ *X4!0y!Tub$啴*DSN.bj.?)fu:օT٩|}J%>Ti}}fGk)Ye*ct J"74XHL^ew"fh8 ␨)(#Kfk: /bMtۛUbpf.(O(vf5^TͺRjXrSe CHD!*g︠rNN,h~}C3~}; 'rln'=&ذزGQh #ɆD 1xN!TEcP`l43FC *"\!(-hqn۬Bƿ'&c"kdzXd-Z0nFA.. 7L}Og lYThJLob-:%NV? %*TiYt$fzHˢKR^եy*WDΊ9u'֙qr2vu{ZwU!TC0P`eգr `E}W^jl=3N[SLLĹ)B^6*ڪܪEj-Ⱥ"[[Z l"'@51KhG6l'@pWUi5,}ܠ4z9.[Z‡cSVb˓օ!TE&ŀ,4j!U[TĤ$ABfS+Un Dڪk4{Kke7\ 0$ t\ącylK > Ґ`_yu( S݆X5 B c<+ ])m N[0^2+/ն~l&wi+2M[''7Vg"4Й) %[P t+r|aT(=k]^x?)ETAD&NC[IU&%[9Fj0I` `p#;HZj[BiI~l!T (V2*GS+@@#meDžͭVV+_Ԗ2 uta Z-  Uk2@?_=Ӣ I:¡2ꠁ}tV!XS|Y 8n~r ,3 L&;%GΩ'rI[8R -ePAbRgS5Uq4}NZ<^flt"@]D 1 D//*3XausrPJ6;)6ٯD! Mf! S d u%`)WG8>f^I~u~=H{o XkS8w9A)j>xPŭ@PV VŢIVp׍w%gͲ|6 ,vHijYy$3" uĐ$a$Zd NRjH4p-ݦ{CY^ r  Ā!L9@ExRB6J^*L̘09 1 BgnCPPYpB*ÑLW F0! S`(PFD *ZK9SbV20-XH+4gRfq *uѪ(/{]bm| ψa:aT[Ȃ3tBHc.)+%9A z*ח]Eܫ42J3_ ?tl|$WEOAqoMV2lU/Pg!w0!./}Ǿ=ɟ""sLL nHITK]1H%Ot-`Gw܁d0(f=Vz$S*K3- 4XEۿhIiF֛y-wŹ-gY+mS[|lw^_|! SmB(Pl$+ R[z7* OF=rERsR~1F>jf{+AMZ!BkE%_|uҏh5a гR=Ww>[ 4jʀ9g:r6ot~Vޟ`v}Wr"O[Jǐ"Bjsy?@9pRȕ/FHs[LG! ݡe^G\-qGޔWz;yT6-XeCQV˳ݔ4! S$BPL,b E@2*͎PZ#[ 5>_xT޹@8>}qQk UݒHRH.JÔS\ҚcjQc 0 1`ީub~JX&ۨ,E )~p‡m " >`kcS sv ᨳ9fqP|KS>g^Y=wrȈ0@V )pԎ/%"j})u!@+Lv콙8;>,}p5sppOiu& ONFh#]g w~! SZEa!X(&2AKRT(6*Mj)6{4peW\d3ǞwNj`r(Jpbo"G?uA7E_NkC# trp22IhA J(Ĥc@^&7$  {1}{w΀SJ,#< M6'_]O`Qk6U;HUkK~1,xưJ?$uVe#4[S EJ^ $A?T|;w-gvMxA't{Ndx8#KA T^M !b2dF|gFLФIP ؊ $b3 U ((/|DdA2fEE،iIC~rmDad~͕fف?:L|+R &0`x;/S.ZA'ɀ!ֹq, h|G#xƦ"0GJo. w@Cw.4O@m @GXU(]BS1 !Ɠ_}:m}5 h|8 y ]" dLøu?C $3/%@cl"3n~2vpVVr)hϻV`rJZ'7)~Ac9mH8s,3He4Ј`_3H),4cdCػ2}=73#-pTJo=x j" svAvV Cy f-PI/oAgSn#dC]/=4nLG#xן=4N_Mm5'|O>'|O>';zIh4J603-!iAߠfqĬ0U$F(x0%JP Pډ'N:œ$$Pö@&!PcAc1S@ ˜:w?2{XgDKM &xh\m5⦛@$A>5n1p+ 748>!'X:'.{+pTd`6@P%>Y<@XpVF<k??FxP!AX )DQd[U8l{)qhm6߀M3Miq?(B1pKO'@0 w.p 11^b;qf|7)|e>??'AY|)\$W@5jt妃fI`+=e0 ()X(LpW-ߵ3su '0 TI4YGzH?:[͒ 1f09b+Ž 9;-ƈ1#16G?X,qc"=:kgVfQ#eD@pn'>2H} A't, ;D (y00?Dm 4h| P27pJ#x1h ؁i wp1X=RSD9B wxx?L+-jDwxW=䋧Ცf^&\ss1YA'`, #B=< 004M?D)@C q3;G#IyEDP u+尻pD46ȄfcYw} o;{zLGt?~ }(Xu-kvqHfBW/N( (A 'LaAm3+ "B<VfSge aaemͦ[{m™iS@C,_re95dz%G9"L滻oxI3dh7 |dL\qOAؽ@,#r3`| yy@W`wK3 cSH,Ɗh̀̈" *LHsG[A@'o1Ċ:#dXGC;O)4|LقSyP3|)"NiFEw[ GŁ ?kL1|֊5~6?i0,lvałoG#x1?&i7\i2ɋ޼/OqpA`'oAO?# ʲxf@lMc(BIt<_H0-oq=tJ?.|Ž`;7p͎ :߉.}q &HG 40O/yJf`5) ꀳ3LX A'g0e&00 P6M|!- aI4 uc)̀̈6xrx6A'U6Ly[akHck'x1<<IJ(kr@IM#jPxqi|ٝ#[MZ6Rf_}͂* YWJZ͚0go;^{9$$/LGDy\GN%svX#/ߟڽ55W}r&;tƗ?08JWp@RlA1+YJϓK+Hd~@(6, 2VɤF^ܬ0p'xɺJJD wWt'=?ˌ?ɞjq*˓Oc2Bi q1#0@-GsyLi ?H2Q/h mѸC/{ة{lf4/⥲\s2'e~h꽟ܭѡ%̽:hW5:v XH&Z ]N< ! Sm\g @VoNh\[.}%TAJzo&o|9gb4j+ T(311Y9IH0wBA Nh UQIAdhgkM Ld 2He$u !ڰ(PJ ZE-"t[Ʈ"iPEBirX| J@93Q6nzv{ #(;{4D}jJ>!7/ YePԛ1U_|7I+5WdGSd:웒Reڭx'#! Sͅ4FF@QM;g4эbS*zB`'H J eIcjӸdN WW7Qbe;o}_)N*n`>+94vL`?^E^/Qj|00$ǿ]<\gnӏ ;?i~Q{;XbHǠKLN9^$l̰`kR%]8l.p sb͖!~iNMW;)4-|{N 5#! S4B XJU?. #~ދzΠ81J =/*-< )YqjǢt|zTxFNXgWkESu FjpjKə {L '[H 0adBEnDfk.lK{SpAQ@`6@wU@7{Ṱ@EQPX,SqoEnFYG! S6TQY@>x7,ubNrLWwM\@KC+v*;clѲYKIBZh=2x9' %իOdsIYSoi,_4 .fXwZ9;zbm<$WVGEtgZKp! Sm' #+@ DŋPM׬?Xrjl AVq fI!i*Ė/e;#GRuڢWk9R8t%fsg 9;'! S! G$p @1(|gr3(Fnm!np[۲mj79 4&u4fCM2s2*H"WRs G4wQ 0G6aR4 (򏇣z2.|19Zbr25[iƳhlsĠ99Mss sm?ɝ w3mZ']Zi9ϛFo9!'.|PLLp>!!@/$>2!Π4d宀A?oAP_n.$xfUɊŗ>:o/QA'1O)42?Zt7/O`Q'ivW/NQA '4wTK,PE 7!e [bcGZYx `3`0lTEz1r`rrfp'GBr1nH63`FN =txi@,G[d._7 9 ,;A@'%2T]"CZ\DX-P`.l~Zz+isVwuDžq*x }xcan^N^?5e ` >` L,@C߄@- Q6?X(/?x|8m0 mʦ"ܕD5???ǒeN!*"7Y%6r_BK0*XOAj\@,k%X* A~%XBݮ u` aNWQ,@@uN)[>NcR LuDŽG93\/9'Ԁ 'P8q`ĴFz ?\4Æ7(G~-\&/3c6)eSL;Tʼn/6-@`1@60`oS "Ė^WC}-J`3#,!lE7G]qfW?벀r \M0 R \*ǩd` @[O8?fVH`?\u#f@*_0 |Vߟ$SW_~L n&z? fgϤ3_&қ~}wI|TA'S@2u X AK& y~"+Kxط:Gqot )sF$v7(_ܚe[leݙr`9rR㎦4moA)cU3 `HSm?HoUECG쾹 ~ɂWځ7@{ hA'IF" N[MmaO_&"L;\(S/>"j/sO5>$pfcdG4N4L䁭z*fy߉.S\o XML12$2G!I"w@\{>_I*O\F{K&gh1]߉M&~3`2A')"% >[ "BR)0;#( -;R$Mt,@CL5$g];8hd"bX۾6"יӯPep [|9I: #V)A`{<` k_8Cg|yg/ͿL:HoA e+W^fhH"f7r<A'4.7U!eЖ0g tHG!R.| A{eviuZ @cQd͊i25.#|a^(0ߩpD}~ 2@x{JW1$qX};ɛH7b)`A'|Dx={} T (LAA1#)*6WZ%Q(|ig͒ 즢?6;qc^N`3ɧnJۓb_#pc!sEdGbG*%/ /2;3*A<`B,8=dVA 'o om4 ;Z*o!$&dC3(S9$$A /g,"Ull.n6`^ yqS(DgSa ~$ ?7@o$72?'ӽ(KI8Ƃn4A@'ύ&n V0ŧ[MDoR Jt"C)KI>*O!ô)eX A)u¼gU*ZIR5MU0J~Mjc̦Ȑ+&BgGhIhfOD3PQ}~R<&6*9(!0y!0w!E}B>!*L|aufB"*6@k,$x|PA_Tg,^ܳVyP;]_s a qW!JgxwH?؎3pᆘDvfnxA B.w -@-Z>,|kX4i!EcDHhѸ #wxxzwƼl}F2"ҌF4l횧ȧo\gnM-;"7Pi`\a&]GCm푢!LFGcU3~9d&z#![ܶjJdO߲vz@KWϸubg[_ i4 +v?BV@'ǝ/o^GI}/d 6 tYg3ӽM s6BdqTYJż>؋z[h᝾UEnҨAhxMpɌRDBr#v, zKWBL>VΊ֕STWjLY!ŭoMhBbV6cfĒRUQ᱋$d;$70ũ%ecJ 'SͯDHT)I!lP7+4VY6!=Prΐc9]K6#]!TĊ3Bx3ZRK x\rzGX+5 WSa}k#!FEl:Mq;^e{R'k"plE[\d3mhjUeF:{Re\Gb4n`%MI2Kf7M@i3׼ m<-[١q%K`K(~n(wX)ե7c6Br458\cC(Z̼ET!ꊚґLqlF!h4;:7wjo|7@].T.+8UN@P!TBT B]rݤ.D9-M ArDZ\GQ[5uLܗVQTPqARyb!XFb0g#\ye6^8$H/+)2WSxbMAO2Fԃd+YQ%XW`B1aBU3y\sUwYk ƚfGyܴ"[)#'TT٣5| 5V.!Tt:Dh2nT]YF7b:EɎTQeX̕V\.F-m~4qx5ԲPj\eUtU'ÛJ( g _%p̚{:9S [QɰCPo+; 8^DE('dءy/o tn!yũ*J 1fnV$|0d|V& Hoqij%TC<>MWr+BN(!T: HR7UvB{+.sW2~T)zx2jnk~I85t?- }a Bfu=ߚ}՗սS<}pla@ڑf@zrLӋ5 1D] t"*ɸ zq)hRWv2Nj ?3^j0NZEegDԥ뤠"~Wev%MҖ'fsR]K6T:FC6)5Tv&xYz|l% p!T5b!l\ @5 iZAfoQ!eMD$)i,iWG/B2lwT용;.(RL&p>Btmb)eWK.ށ%&hxD:݆Y"RA»#^67Uo1 `5b(: '/\Tc|]$h4k&02`6 zq`R;;iX@cC@lãm/\*]5<$ǚ0mh46!T=b0,$  A7u"oQI2ZHYgM^Țs{\Fٿ:vQsvQfkڳ[=ʪ6%Xd*W,[*`[djfgqEdP8L9Mޤv%Q2@,DnZ uB!~z,N.LExw͸rL|vcJP+kGuByw>yݻfqO`9k9W>$E^NVKJO=Dyjãw ejI"6q!S刎IP +Lg :̯LHhh|,۳٫ͻn)jJ|7"ZgNCbp*o{Ȝ&KF2L-)X +zAů{ҒP*v< Z&|@FK%%9#Wk.W`6^, .#HQIerxT!f֪pp(g{_l ]}݇p(XI$%r:ٜRcs9tdOpWb+#а` exx5+G> oia`& m@;a L:XyD9! Sb !ujUyeqp;IQk,Yxt'>R;תZvlJ&I9Ϸ=5P }kD@^5O({ r_3$KRO %sYG3{f)j3*[b4/q̂|9{@,(TPG"tr 2*V2?/9..u~Pp~tevcd)-\5#Z*b<` NXQH*V a#! SCQc2)tt.mlxWqzvj2-I&SG-]L.pv{l@3r~6,>GGTtO}ȯXXsهT]Am`NRht@+;uZl6,OVA\%pj1%\bzJ+m7D=6HVoS}Gd ,X>I{J)[S>m_h V Ldеgx(Dv)ezuZs"[at8Q3! Sa`S:r.eмŲ2@%xiхXMZIo_b鯩H"Nrϻk١*UWn2:9/2vvxY!K^*x x(OHQ^ba5t߿X4>m( FN eHQx94Ɋ)gƹF2l/Js$@cPXdh۽vn:5]nYtˌ%$+a.&~HYLԄ"۶o./5G""܉;uT*JT! Sm"E0Q (! -Q6(}'"&ty]/05Q;FV-pd@ݔ0B@9RA[RZ\"4)Ѝ;sޗo4Hy;3Wx! S}%hro, ^([+j"Ur) [Fw5;?P@,9jS,lg0aj شziW`mZt^0l'8Uq.!3޴6 `DӺߡπ0a(j1lDk^jÿ ycz>FBCvCr"̣cO@gsg ]ζ*j˄BȜ"1 K .$"葮*A~F*B$D$ҍƹ" 5! SU'Hh S~a  e!"Q%qK*U.Fl6 <-#ݤ QuP6\2/|fBɭ3ihR;c󸆅f Jk{t!՞ShЎ.{QSc=$#Z,?*X- 3]t/B_g𗋢Clz̴O Gbik|WJu;e5b5[-{r R LQ_8[W_1! SQ}@e'@ 0 }c'D"C H +;93gw02}x_l??@;a9`} g:20PNpDѢ DJR5/Y{M;BWAEYV{M9+? b04VQ4 `Th.dwCqpG@#Nt9ހ@%:O?9$lXAA'F?\ vBQ= vz3x6 ,dlA9lA\8t}H|!O`4GGS`GJcws`0O@3{q$ܷ,&AǤ}=~ZA'L~ pB܊oxUiiT,0^Z JX*dILYH .kx "SÅ4I&I&MfDLaNCY#k&b B/-0`M,bR]g 2VU_J+Q6[d/ [D:ki .?'dr ?So}:ro֠ /$>>Fs܅I>zlD,X77M ;iC0@Dl;H!88+ϞSfJν(%77>YTsb]rLqYs,XRᐫ"搴fb674l}`|3 F!X*\c@7ΞnD@[(L.&o2,Tu -~vl+ [Zɺ>_AIyi'13ty_3G#x8ɧ;Gt~ro^NlQ8NC6qLqƮ&&B hrjeD1,Fr^luB8n%;TGfCŽ7w! &NfxXm >N$ C02rgQ"x/O taPMppW~ 4ztp0|xy^ZՀ-d "[sA~#A''|O>'|O>'|O>';Z.x̀p{0Tt{i`6u[ p`& )`:2:8 g#Q\J%m?܇M c8g| )m|gDKM Vs$;ډ^ʲI|!4 `uM)% CkD߀D&FmFm.#&瀕@`a >I/IX>`@?? z (+$"Zye=Ģ1Q ~4"nG#^A`P\N` a Ѳ~uQ7w1 ?%߈Џ>SJ~? s ZE-!%k6uy෉,x* HA' '$RFd04?t2z DyDI2''rj 9oxJ6"^!&7 g͊|6JDsU& w'cO3,H_`8=$`G ;Fi_jIx0d6'z:flh@A'C$,L' 6Z" <X!VXĺ_9GfX= ]^fL!X3&HIgIRb_ (TÊA.t󟇏#`z__]Q1V^}pr! 3"( Lb~juǀA'b8$ueIDI$)ۮ V~drC>>2(}H<)E:Z f1A` ;y~ϻ`tp,."I\3F}dG|Ć=B>q.0O???A@I=ki7gMG?3Ia3. :{#O9t+ Og9! SUD7*9Ub)l }W1cP>=|$n3kvH 6>bA~ޡ?qBO4^, ;̻|q^ʹI~B{,vhE)0[8E.Փ*`mU] ,9etiI@2 N p!wiͯ _0gN ⲕ(m P-pUʻӷܚ)vUG%(4njj8<a9LAQ*h]לLioN [ 4GsLAIHbqZuz(dF8N! Sc2͊sbafI#+^2"*FyDI-ij<L- ;#@8-2(hU\F8MOׄo8a,65P E+Nع-+&Z `^Ψx|7dr]iHAH Hr3 $"%ׁAhw[ J1ҜyF7 *1x(`(/#RF*t%˫0%"z, DؿkbZik '+9 NBO! ScƤʌE]uW d@Ĵ 1υIbvFFc< ) 3n׮{ܫj!XT@6Ƴgg A_†^Ģ``b} Βf yD uf M q: "L[~?o@D/Hj=ݲ>`nSI{mN9_4ϐIk]TW-/5S~Tܧ@/="o-'KL/b:p n?\"+P&E&g[ W;fr|}T?! S}Mq(,>ʄ$v!pkC#v$t{źKz8V-W8*p1mW/ij')XYFCaCϤ`CK,}>?i Y{+έ#-??2z.feŽ@:N3 6n.!:v uapMԹp]E"ETDC_ \(pYބ:YH9! S̈́E0Q,Je7VqV*7T7e8HI/$.CFM$; ]4fԕttUf!WsNVZ,5̩l)nHhpe{̝AÍoI:'JC'{DIQҸfmr*i Qw*v<iHJ:`A`҂()wljF1&‚_*أa"Ep݋D'#! SV`]XTT3J2)N?Mt$/ZwUՊ wqmi&{7d?cHSGh8RQ)WK zYf} 5YKyu<'j࣋*Cz:7Q2 xwBzw|VEƹ~Uɚ+H*V4IVcߐ YAkc g,\ZU޲:n1p%Ұ;! SJc(VRBE*fň&(+TJ$~dwb *k : GLsa`ߌtS˯_Zd˚#^okCjjx$4).b' kVٕ /nגmk('uN\H!/)YX+)`BR{'AnٳJvF;lkL,m(9[ؗw0` !@B,qiD 9d%)d9/?#n=of/WI]Vqp?u7 yfuc˻ 7b P ,D,:7_UDHj&h ߅`1T0qrUQ _]iU{*8˼-Y>ߊP;! Sd C,* H(ʬ^ [9=hz,j'V֨ˆn#j Ds~IwmM+hqtVn^oq1m.P5%3jM)g`ABw:BB ق`y`$JSSk&A%+ Xyl`BX0L-@%2GTJӊ[fh\Y-0v 7)L1pFe$0 rs/>z! GpBy` [%`# D Fx=+p>"m1V=tg4gFaŪNπn-f!. #w}kƾ6SSGnaK=K#Fpt5)m~]Rh.%DSwgLhm/쏞$,#b :׋.'Y †acfHq(Es~6UKkϬ{#\ ME3 (&Zݽ$kBN&! SLGe`Djѽ@W@R~ߕnG})nl[)gʵyIT/-1溹R DXh9M)y{9+,#?-=a9E. aM$Y"ƶ/{^ߦ$Yc3 Y EˢP9Me0`iA`_N x vƶ:s4鉨D` [IhL4pZScΩHEI-]_lF),wל! S5 d+u()VV-,phC%Vپ9=E5 ni-"bHz\+ּHrM$P G~ ,"U) ]<.T1o8b-4z>m{a%LD>.BCrþ`;{çӮŸdɫAكEL[9,X_u佽R)xaL?m]{(.8HxM4)\‰#' LJf Ը2Qow> Cz҆[!~n! Su"eJV0\ļRy\ءڡʻ(nWK2+4f4W¸EԾ 0Fh!zn&pU l'v'Y^n3J+ebN9 %{8b%UIiĜ?4r&AZJA;Z2іbLlLYáy#{֐"J*|ϟ,W8RZ֬! S#!h(sBk-]Bf_ÇYCN!'Gh zO#խ(Z îlipXfnWMn0\8sG;=iaϼ1+yI up`\zo=p1?כn;f?qHl!:H4d>gK<;Wk!n(XJ)-ؠo:,)̥<%mV5檚V_*VJs&6E–]kFxЕ0ۧRFMqM( Vmh7G! S&(Hc0bX w4ID]_WTIx2 Woc&wTv<خ!z[┡ ک5QP?sfss&{-ĥD1l]UEjgM Pԋɑ|.dQ?G|bzWBNѹwnBQbW|l 5250IRdytWz/06mẘ<2iI[+ww1iEb@ .aSSԡv1%uZK\W"!niOv9/@gfD! SMJ$Cl91J(Xg hccfMUc%aE 3)~/ʬHcw2։5_E$g!s5pnnښJnmqR{ `r_|~=-AEd1 ,5yy[! S]I$Re2QFx[)QKbHtcrQ9rSCҰ^^`}>q0Q]B }r/ic0+!k8řS0\I Jξ_{u3UE'bY1܋ӏXkNwtR މj0q- 9SjP 8uAmRuU4E_xo}Bi[ g aRQ*VVT!8 Jy,i79[0JKChn{col<\ig̪A'Q K-HO\ -@"3:<,lɡ8 آ 8ܡ*a[%}˳uYϱcy0L#'! _3dWS`2$j,*\A '$^ ĂIHvXkX$."+|ϓgdAW!FFN< K9^lDlBn~.ipHx;';GœBfC6#howG x?Rx-,ed3,MA@'r6V1YU N\<p-q&B`B*EpؼP-br* P T"992FjΪ%\,Pu,1̂Se{/<6 0 W 1*d9921A`'$0h"#(/b = ͡C+'47K eF`+,>-0Q0 L,s@C 5FL/ơ 0{#K7,/F"NE >%;y8{AKђSj%6P|ߛxx~uerHj)ق>KC]׀{H.y#ɀ 0Fo4^6KTdN۶ ?$??I9M?j8z 7pʧd" .d_7?5dh;V0f>p;P`4Xn 8p܌R lͿPlQV>#o%MUdBS2=~YDHLJ x\+R1!zhntAn'ٵ˲&x1o@/2%?@IO8xK!@a>sByGÇ8%]+ a1_C???#?z>U????;?????z86( ,hC@o wo TYNU0<<K0H%@ZU P%PK^_PmQ!MR+C)PK>vJઝ Rϊ@,=5B׹cO^]k>@,kɶS%Xw~_^PK_ ͔u_OxOS!O)8%?"^*MX% G@* wL X[ىϺ"(nAcbΣ]$~ ^VKBa~pKߘ }Uk5`&m`oI{\FR?Jٞ?H!mm`[*gKqwB Q& [B]wO m@S6 -?D:e@kA'tT6  =8VHu4}PSdu21KSW~ #wO~3 lyc '剘0fO ͎uxOVziTZ DSM5UWZ9lA'{ͷ}>6q<pD=C|Y2_\}}ͅ尊Ƹ> |rK]ǫWGY4~'9&?^#o ۍ& WX/L(@?2Bi3f͖(|Vs"Aw|3 ga?'-w1'>{iϟc2wIpLO gQDq2*О1 P }]lp=y# !c5Lmg'%-Ho y.mJ oi͚^KOؗ}qP>YC8 p` { Bkz1#J^RV_+rv?xL2ļe$y/ ~hI)ym Q׮lV<Оiȱv/2l,xNv;OG̴ð@(՞Jovo1{f+~:2 P&FC}~l~u\uE$XT7k 4O`qA&Nuf].^(u9ACvPnLa{1_ qxZh`+&уCdUeC+[ZhC0 墶uT:s Mݿ[V+'f~]fm$9ܠW+Dw!$X]k9M*lgFܡAam~Z$U4 _s1"${!Z8\WrO<\  A'ULLu"e" X J%4EU?P-~4s`d&ExWҟ `Mm5gP8AQQ`Kr瘆r`!Ixo?1MfɃ^ c{f|laXcI A]2x(>Ou(ɓ A6c?0b:Ih)OC5 #_NXAr[܅88H\P/w\wA'3VHS>Y6-< U"fjWeޠAF%L8Jkm#hmF6oo >a;`5ro"$f~TΦ=3=cP/l|Lc+z{ט_@L|>NC 00@y6, @ke2 fP:>0,fBr=psL%2-]w*zۣ*v3bse o+> A1/pA<X94JXfOR!|'|A`'w% Мe18S;j#`Kǚp%oy)7 l=m=40Z |H\Pl2w`+MI"1Mߔ^eGL?\'7_~؉1ps7C2xMN1GxmAx h&(8n}8D6Lְ! S<K",9 4Q&TqbM33%6s} y ,;-|ЍޏN,C 3ٳȓP 11CϠ DŽގ-*6u0>}~ ȍ?ZIRsSF1(}l6VCxҺ!סNoBe#bK! ̷z2ll9:P JJYS#lNv&#Q*Ji /$2a#y! SQDQ( tYXɑJ/\?o!|)"d̘D9Șrf|fKNԐt'߷G 4L!$GlB L#Ɋ/ ,9RT 3=g /`t=܀vh|`ـ9->N~o~>>`2|s||0YL.p!!!SS+CP0A/{C`| Ywǟq0<=x??0?`pp [#p 0=h{` a0h{n<<<v@<> <=> 8xxx|w!Sd@"qTk`D{(m.VSD,[9"qY+L9 ĩ/JI@)}c=CopJ7\!i{:xCz3z/ a$~?QoU<~ۤmeR\rl9%^ڙM7ɖ ߁R7\L ?MX~8$BYyw^yWXFWD!7H克ydt7#GMۦֱu92JU[*+/S4rD(;;edOVuYt*N!*S-e,;sy(E#Y;8 X;W_c|>#o \$5^[3l -mrzeVTi<$+Z,~*c&\9"Ei]V"F u$rim e84[g;920~_s"64Wmsh# urZ>opwjmL'v 9R:1^u*%.eJ=1(Nj5Ƭ'$ӣ^ƒ G| f2}RYXy漋I\$8zlIRBf(:uY kxfjb)[~f3cQ dcih+`g]]TS3 &?hxG:B+ʸe•l9P:!T.Ł,)`y&\޳Ep=7!/놚GI诳l!S+WB'UEɵ5N7xv!QmC5 QB2 1D"!7l7H?/S. J̔>pԠ!}Uҧd6a扮J7 ̳ J?3)]P |2M]c 7\KkPj<^ԆPE@<@CtƇ[ ]Ztd}Zb2}kB>!TrQWyxf_I"%5ωbjv~3:[}F\,ɹŸcL\jbʬRMTxW:V3MꟚFL0ѭIzZHhXmQYR* & FxQ fxjo~+z, ؍Kiʚi0q)/Ѿ ۜB+c1q[wċl$=B*%̐.(0!nօ(Eda2H0 !Tt2 aČbuΊT}E󙢝 w]e{c8JԽT/+bVLJleJ3 fEۙ.MF]M+8, 1['Rb1gBQ=h W^u槝Wkbشԉd,! <!T] bRCuUXժY@8Jf$٘z֌(Il5].^Zа,3$ʫ28PEq^.Tpbz4HMT۩j +=jmyPYjĒ6$K' `68RZCR\I_*yW$+p&GYn̖.!aU~"!d;`xu[pb/l*{'°)mLEz}­[nP"C IC"KDƩ$<!T=cRR9@ UYv5Z~;HkP(UvXlxR9CֲӼ5E>&iVYxP;Ps F^ߏI51TE!%c"/NE9 ! &L*(I-{ W;Y.F/J|nrg*Ho8WU"= i/]nkDŷs֊;&)b- x{-͢ #%IËs3cۓ}C!TMb@Xq کiQ PTI$$`ŭlg#f\DpB% @MqvBҴr(0ڍj'(ˢI9IWM 'xCxlm\tPE+5ׄ[%5]3,eo<NNm]&?6 (x66X3ue.ɤ;0$X-ym`BЏj2p_D=V: ۬=H;;ԫʸPԶTI$!Sř P@PcC$,  @xhCk 1t?25ɆSa, k#'f?Q(k-y?'&dyzO̷3"tni*.i~Q_BPLkuM?M~yb{ASKء1]˭T6<_Vi%ûi@d X5@AVғd]̠tJbGp^  N)`׳o/%~@_\)g s3Zm{Wy"ڥq! S[q-1E\wUL_F-MslyCau< z?Nc84zQ#K?pDI\:7kx3iĕ-pw@ {iY[;᧣'DM%HХ^t 8 ^Im\KOSZid,EP@<\_yTH2`.8#7 !gMF Rhq{=Z2ܟ7tq!R! S1T!Z,s ",l? [3#+#;qXٖ+^t16՗DV W4O}*Fa ψ=xCחIF=o@٭wFs sob hL!1#S`԰g^^Aev*X!uc :_*d<>XuZD)( cl8Ke{rcٙκ5&@P m@F%4}KYa['*wuىP) %ym. *+M&s! Sa"@ nYT-$[%h#<3=6TS bf3GҶ7T=t!}Ww Жf3Ůrut&xcO"jJ~hW%(~\*ׄ>]>Dj~ n셦aeRER+R"J ŭCX-TZ)l;x4^&=,Ht[|s Je@¹ 4++@V@PEV8K~X;zfQ[[uHܭZ݋ D " " ! S}`بS{i[4ac.-?-< |@uDe') fFé/ CT(38~˦ V+g>՗ S(OSu>Y!o:PLkjá㜨DϗV6b2o%#IC6Kf퍟m\Q Jk.}@o#=2~(@g w bz1-_*<21ʝH>A'L>ox?LV J#omK 3b(r= ˜Ҧ0X9@ b_ʆ?F jfy(s N#`mpQ]mF?M}. ӃZgT²x̀|g6 A'L{9}l7&DcOcF5э|rb@A Ue {m؛m$OOM?%~q%㢕][<lD,- ՗;v `3c+~q<;1NO%1pG7>V0"sJ> Aʁx?g™YFJpJ%[|Pn/gF'` ͒ h(: gO4/2sG4J6f:0~9i$bhv1/w~s'~ZOQ+sE3#5w-ww~z@3y I ;0~e3+q,g/͸ %O`a#Rpc>pPA'ɀ!;]aGK$4 x 9$a,q>Y0&QeRia.x9n{uSovƐkr~~W%r U /{>Oob[|o,o~ 8;&\zK\"K p1B&*Ȥ@8iLQM ;eI0B(,Բ~=_Y…YXwI҂SSs;E7jdЂ/H(Hg1Pd*hv-au#lhL='bt KGsK;y *ZApa*jNx_ VFu}%3p=)57-#_",`~a u`-1 DxZIx.ޭ ;Vp *ܘQh 1l G3bc @q<8O{?XLm;=X~#,?'?´ȭWdO4 +`{+8!xtv?cç/A''|O>'|O>'|O>'9>M#&JKh;:Jڑ `*qRJ  ݀{ǐ N@w8LwFSjt9AN 47#m@@ @s/ǁ m2e (N8}9Md:tDXHGxE~ *J'сFɻͤpa4n+`yGADsւƺ|\S'b &R`ɟ7e???o 'L2=@BY[# 2i& Dx8%WXZ=  c}omɶ_xޒFLltu>#? W6y +n>;M{8[e_lٷfn4 +H ߾ɑSlM~MAI2B1'#kƼu k͒0ߨmπ͎$q3W-53R ED!o"8S9xC@@xD9D 'MyKIf|&fczdsDѕbANZ#9hmؿXG8anP 7!oLǰ`:VClaZjK^uۋaqތ?M [ sPj/̄;H l fb68 s$6Y ۄgsD7(1}*X+$1]8σ)(xbv|RR> ~?d7)) `S9 -3 wm< A@'`0 A]ee8ޗBy@&t DxdF{?FNq&l7#MdHAW]oX [uLMip6dȏ1pd™m:kLdlAc]t\X41_w|0d}FoFy'w$4|0_fͥ3$|@3`3"LDyQ!e =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr?;   g?Kox{B/N@ANNNNNN . JfWձ5z kC1e/m31ƥPRrë+DCpCD?d5X  Ys}?YP88e( 0[, 6 H38%U~=d4( ؍20 G t$XXn::iGc"TX>A?PlD77l4 0;A_耨۽Ht1*?α <,gWJ' w瓐-Y? f5 k (5wK^@ +y?)dcq0H4P7H(*x 1և\oj(tI 7lV2>ũ<JljʸY21b05/L˄wiV W=CߑW$3_JQbMЩߪ,QGd'Kcd%VnL^ 0/i0L}w` _wK+~)bC)SdG%|L}UQݶ[뮺뮺뮺뮺뮿! XhՑ߃r*cw euu]=u]u]u]u]u]u]u]uLrg܇ ,#$]u=lu]u]u]u]u]u]u]uL]u]uc]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u]u]u\WYa,=u]u]u]u]u]u]u]u]u]uO]u]u]u]u]u]u]u]uH  6XAxC\Z ς Et 69MLG~KqBe~| 6ARQdI&Ϛ_>IdHVѱ_]u]u]u]u_ +̪@+~4C8W ڶu'`CPllb__0+PgL(eQuQ~h^r)wʫ $c3ր f\,U \1d32$.1@6H8eF%"6DQ=3 R\C8{ 7{BB`Tc9-E&5Mx@Eleǘp AY02= (qS x_2Xy| -6 ]X԰ fE8niޅ 7.6?c `¸No[@, au!+k_.A^py 8ӿ4W?g##>ͣw:[G.U p~x 1\g lkMwȩO#$!]jAZ3h_yWc @FJ@՞!JEP ĬO LA#/ pM& c,5H‘9! D n>DU1k?V N)hR0$yD1awbR !o*鐂_®JyM"4338~`aiwc:yVhmK-tu(ZF=j "?*6f/ nAKF;E 5m)ECl &`ט6 3Ӏ{%w0 -$\^(z/g4S)}L]Mhq;`42[Ԡo `>r_Mp o+2_JkqpgZLR y#O`>E;٤IB_9¥.eHqSi٤W3NBMR_m5?׀pJ;Hwxrco.@hᖡ P48ve }#Q 51z$eX{pW10K@ݯSKg;f[hK =a %H1* QjsաL4In~W8ܐ0NJ>%/g ٘ȏco?8K~rT{w? _C #xxKְ=-o~`HGR",$JDм>׊f%]u]u\te뮺뮺뮺뮺뮺뮦?뮺뮺 `,%Ph:+π Wk_ )[$(89_jkM-M@FK@ oyܥ/x0^L ɜL '(Xe>)6YC#AOyDFFwA( "Ap;کd$;n׏MM\ayWW0r5?=P_> '&XɾHR!Syˣ'7τ#YEoZ20s$ 2iH7p!`wu!b^03-p0IO* 2 ̘,E@@ʂ=ԃI|f `&D A8D ~[!Q ?HhKM[\,FA:,xT\5_0x3,BETC\.@ $8*0gg % zxx@DH* @霼hwhaxNuhp :<: ZL 9ܾ Mz?8>LC1pn:A0SR <;LlaI_xN 8tA?_P@ }~05WO}Ep!h$$:q !v~{z~0YhL%0(a!7cz2!QAL?M[z)` bdC? %ovCa)>%&ٙv5 Д&!11j 1~S5֊PL E&A>O"pm3 ݢbRɀ <]p(˜P ș&p0֡fY('jQKl`{B=A0bP$ <f4 C8OZK0ܐ8m4:o8;({_Zv`8"eaJK QX7e ۮ@-l'(!Ze/Z{ Fb5V|J#D]j@!K bm@H-U - 0 Y  ā=9CD҈"xfHr5!8g f/~Qp@o>/ U)xsU)gXBXV1^~U2BGn5_ u:s MNiu§&Fr%.2^*OpyC?HQ=+- E\a6͡"qI[ޘm4d/hHR@B/ TMEqW0a61A)\dG氒-hƂOh7 |'(&Ҋon8hciM CФ"ڨqWsWXĢES62+ B8p¨[|aExdU0Ynz@c8s SAϛ QNlAtoQdJakCǼ-#@ l`MAճa.Z ha#0Ռ|T`4SwD@>IMMg_jg 6="V13T H7c " v=2f1EIU}*X^}_0R]s>.%gE20҃ϽWCUI _N[_a,x%oXɩ'<Iox2#yzxnpr1aB hȉ(Ih:+HDZT ^i!XC_q!DZ!aU  s4 , @<pX_} a4ϒg7`CGvI`j՞qS-t:׈ږ)o4:4  Z FTSr$o`u#5 Af/@$!~o[Ez8xp=S c١u|iu>$)% ̄>crgl9ti x"&3ӽ?ᬈeUEoiՈplg"p9I &nG,2aI< wf;L0L )NcAwKh>VִoHa=4/< q?4|C/E (K()]2 kbI}9dH4gE k4I>pMI.ܝ4w ?3G O @cBa]|*_&06P Ś3CaF@%bJěDC}d6M%}1/ FM׾VTWO4b(Tm2Ouz }ˌ5ZC~Ymd+-\_̝-7T9;/K_n#P/ DQDC/`c._aH eX`0 w8H'pq\ϔ'=D$~e ЧMށ_JR})\ /dj?a{RWPr A*u$L? ܜ\fN!ۋ 0& TewmD؜Zɒ0^dI :{8߅LѠtPx_ C9˜)6Go CPRop*$5X\YY7`-C7@\ֻ`.$."U@C32Yh!~z1A9A%|+̙1;[:j`2 -aݩQt` b9/)o9m/Bϵ) GڠȡxIO|Ϸ rJ|H/_2\Je㐭$x;W`9gn"=iR#Ӡ 2aKhSтAhpU s"H#Jʝ;I"Z"sf< rvIK{'@Фf "Y`^4T |VzM,a#!wi' xC!fb9|FF .FӉ$,IB . Nr5$[&vxnϋB!qoR _sYH=@O 1b!@ "SIF Ѐ2P $Lr# C7x .r"?DE樂cunk(<`7̐@_`{lh*Z f8{ o;(#;)8|ڇf|Bք<"`_ 8QPrPޡ-UNafg$x/~E@}]2 JDa -+65(v{*dOȂ.h ^h?|0TD[סrwW4UWTzu p zw |@zx]&f@ጒaj)TN~w#s/5q<*|0YyKL-_?o5"=ࢫ"gC,\BL< !~Riވ <@d *2vl0""8u0x;UXX)ֺ}?I6I7y@ƚ0 LAZD bbgP 5NU(mev5gP|<8GmPChW[pm St#?AWQ +L  X:\ fDYbpɌFa1Mᴀ3sK` ]F /PFq$phc6{*#`?SL"2*I/YƒHUA6tRF/!q +E. y`yrmm6@Maaoy ?#w2[ڦ;ˆ՚= ~. d*@>ƶgA3Fc͚@IM`  m78P܇[ 6Z<zyj%Y,~yF}7}:G8{һ q_@MȻJCL$ y@K`j Dfm Biz[srhfd#a5`i ;A=+ΘٞKY,޿ ]YNp ﮺뮼7%vҙ?).ea ցP)Y?RUR}T;)`Q4R,~FY݉7nY ]J3!jq?Gb.)ه"kfB9t EW {%Oq0?1,?ei;o뮺$~9%Dka뮿%7"\dfgPhʃ00<Ċ4_|R)X1]lw?A/⩽YYMQBFDmJrJ΃cR =Z$: dzǏWC(}vmP cЅm>&+iFl|\=JV.A1o`OCrj/{>"#BQmG=*\W^Xz뮺뮺뮺뮺뮺뮺뮺뮺뮺)c뮺뮺뮺뮺뮺뮺뮺뮺뮺뮟A '6h @hKTAXYhR |KOM3 AKF`?C 1`f~'0??\Tw- S3?;]JiWLt@7|lq WuԿ] ȣ"\Џ6'XGQ1#Sq`?xO'0޿;."wGnp-0WqSLM37p 0!y0w9.2g(p`0zqVzfJR;wp#{o '?ɀMJD>>NKx(ɇPA@' j$R{k=mo)/f篂Q# bxM_[O/w fK,O^6lUi6 wrş]|#˓[XϾkPxO ?1'&@3xÈn9wy01ToTLGXCS +[@A`'@;#JP < G2`EerF#Y).$2>g7"fX0Reզ/csiX܃`6Cs==NԈ??X ?§/ V* P;]2\ e$7~pp! Su%HADd (0J,ek?z yVOG](NAj?Ş/w"FqV4v8:Yxm -&A, WIū0dzj;ӟĩ+XSA j-,=JN Kݯn'bdڔU#bBom`t[!Z>2e)kyF{NoԵx;S㮽}7Wa "VQbrhA 6m[E}uՊk˄wڈB?{Bi?}t)YJ/Ӥ! Sh% HP/ rC&fo(i9Zp͐οMqwA>g3k79 I%U9ѯOa[QVIzSVO*t_\2XVU̠T4b⬍T*RWj xؖ#@  E0Ֆ^'x.q "d}Gssß@!rg }lqB6;~w#@dlhj%;wȷB4 [7)"ѻ<99! SC$!f[@_v7UUIQ iv^j$p[DuH*M *60?SWZ4 0$2KFdouw#oc|0q-ho9%E*VWeON~o$'xH6Avޕ_gV L>qa1/_}4 6Ȱ:IҬL|֨ 7SF] zNB3F! SD$ªr`PHb ]vHUmʌhK-&m/f]HGHpuޥ HrA$Ye]x4"8@ H4ӺXJPHpACndg ׽mce[̺лp&w 'cE[S]bk@3aqc dl$F^<z-i!_@5iFUUQ?0h`d c,k7{V*OI.DgOy2c$q+`ò\fǑ_L|_iF2-`! SMAJe0 -FZP+4h1^.;vʉ(qĪz9NmaRECJ ؈YڧG9@%{l#+]j@JsXasCRKi77]}Ud`+uOǮT&}M712rcqN*ӶΦ}bJ-?Dzz9QU6hC083帇4;:27&3r6` BHWm҂M=]v ﷉%WB=B]lhW[=\4糜)'Ѵj[O~GdwZEU Va ~( "'Z@(T(\Io]|muhx'lNyيj-ҥ NƹzNs 8D9SBHn '(uB[/T"@p")7u|iW[FX^֢WONcgaJ.rR~t#{=@>;{rwaHT%Oƙ9 մqD!Z3hh.@V"^3 7YZ! S݄ 9@  C B L.UնZͲ 3%-2 RzՈEՁdQD#CZ lD"7Tp5zՉ"#p~.o  ȤӢ,. rI@Ej B0pQN+$~P(IL>hgؼףf0b¸Z2MrM5 [R 8ZibWFw$KuR2xE! Sͅ0GBU`@, )rϩoh>ҧI]G;P¯1\P-&3EO; pYwU:yS:O|mv`o6o%'Kw`_ (8aܸ?ggq]>kOKp%ͺ w? D!X@HJƐR@BIUFZ4SV[J!fq[Ts! SEGcJ R*U W(y48E%~-luȪJ}-hTp'onִ0:J %;17YCMv<kJI6|?ca a<ۏUq,\ZqL\g/#W+?WqNibn̐$ P CjBЏ8P`'PQ^EVF zъ F<㧎2l:q! S̈́Ga߀WCP8JpG:Y(%aTAnhu+BBo`qEKb~QjZf=2:Z`s=}qg#ϨrLTsm1 XJFRc?R?. P|~aG&a GV[dX#!tDŽs܏fSURRm+-={'$PDbH֙r|I~{x]VN~V?c{/켳3l(qS,lXg8<}9x|/ 3dVq* ʫbI{ IjR a,9މ_O ᵮWmNaJ! S%UY A RdAB]`>F ZCB9RK\f#m[ U"us6%Tڛ MAeg6R:(y0J{O/ |1L#4r,뿔OOXB9tu詶6͌pG;1ߍNTG4`V< Ab5ۢ4n~F' Ԕp.DPRBJrv( Z*)M(Z :oukS:íSmho:Zheex! SQ ɕV p}~3_)}+$j&@j(lHEó(m:ʵ4EVzN S*@~0ΓNSF1>Eq*,RF#BEg@ۈ^нûD/千 9(nC Zje0Qкw=p0HyPZ&WeD (a$R@=<*ݟvgN^RHNQ^ղRk調CD㢴! SQeC" ikBstkv{XrC 1+3TVvm!2KG} mzw}4-RjuT]^I-MhILm)CNE 05k3$ C0J{0|EcAip=c숻アl@JmN߽Pv;f\mg$zcEuaL2ŻL0iMu;V4 d+hW[zfHUTIڍ*CM+NB;@g7viNh)iU! S'"8zVXA.IIBqYw߯\mD (-] AM0dy^}uG2фɄz6udž .&dD+k=6g;/_Vvk^m|pr3hzT++Mh @KRJîALf&$Ze/!,Bf4('xl֞rq7|^)'sM}ܜ1+_'fTڶ嘬ȑXp! S]'"E6t0 +Nͯjo̤^fY5&2pæhA4&BB$1* #C~B \e3+"tVT9S+߲.Ӿ&5 6lBZi*{rU9V\V[*%HdLIqҖΖm^qJEP$"8SZtçJ4BEZ+ %, s\ F?[ֶa-zJݗDf$'h! SMF 6 L f,eaÉn6P>elKk#G+w4l9Uě Wy֬W;?p{\kebyk3kg<. "h\dzJ"Ci5d?` f8²c9 Q@ @dBFBE}oQY}3$!cj@eofHV M~, *I ۀQ|a9YO9`pf퟽bzA'rfJ.SR@T*I0Qś凱%2E"|/̀X-:պIy6Cx ؍8AY SP ;!~6 R&BI4BL!#i> "<.?7-5C53IzhY03)A'Tpl8C J F-,eu1{f`2`A'$<]@=LC x-d"#}{}Au?)Ph'pF@*HdF4DojD Ub|0g[p_?!˖1 Bkm<) Y)/\ߟoA&MER#) "%?00R.%v1~Eⳡ<0@ W+????<?~0v????? ~????r´ H [~00x0 8m` aƧQSY%ό\u` aʁy1G׈ևϜ{ޠk%XvL,*W+`MT,ƿ_$~/K0` `W[-Xֻ׈SaY%zxzsJ@2'1+|'ywUA ')P^NEpInLE#9ao B*Gr aS97 VfoEp9 F:a \fP9pRזG/bf~2Gf {~+C ?b_~~ O?8QA8p <2:EL:<-3Ӏʎ` [8eoN8 =[ 1V@=s"yFF\FW3n,HiLZ`K߻&}z}w=:lu@ X$z` `Ҷe+z~}w-u6 礙7w;o_뺳?A@'[@F@ [@@ x*bN 9E_~ 9 3c/n; ;j~q|T=G$$t֥2A`'W >8‘k)Ӯ J%H*?>$? {X5\/vP~o_`*x ج 3P7| ^~6<51Gȣ{.u P07#>(Mժpu-6*W&PjlFW fE?C$7L#Nt?0(d? HFNzF Z}+[6&8A'xy|*.Fl@<6Q؅fi-L<# ͘[ 雪bt^ Ew?NL B~ K0N ϗZ2"K_[fy;LeIKtL)A'ڮ#)Ye50K+; *(QhQA)G: +"{3At3)] ,ЕH|Fe\ XeFKD@#˗2ٹyv+_^MX4A8 >4)iM&2v;w@=DHS(whkijoKp!E ةYj G黻Ի`m;r<>t}ZğH"JC |O9p:ɾx5xi&xBxoe= #[bG 'ԝsL!)-_Ht+x WN Pd{55p8@! S]NP**T M(\5/'|1 .|NFcU`N6 F b:, =- N~'Qu:ǃ"E3PUťZi]Su"qkp+Xec] ikš-̤Zdp ؈,UX(h eFW*M0&lalVEm( xRzGwZ󑇛)tˌԜee5* - I7cSc)w+ ! Su!_F29 l[h9 [):L?*hWچ=Ua Z^xB:۶UJ*:Q*'*XYʐE&~ '< AН(9)U1[=xGB@i1Qelz 5e>σBLk'tznGE ƪh\^YIE{*y˜κk DujIyU e܎! SLBdD!ᱰ leڲ@-)5Abtvk6\$0%N7Nw)E,*NwZjpޒib`MM[}1jI:UʧqkN(lg5)HkGo3=/;dE fD(uo'45wŃKE{`V&vыJzz]WiN}9Gfq mkjQž &4L8i|ÉH8L}!JW)FRQ8! Sq|" *JFpBvd}϶ےP;Ά2N{A}s@upfϸ@Oہs4a/М3-^ A&%4w"~vᅼ/'G-ѱAF hL,% F,w')6f9[ns4}Jq8?[lz)>V gw(s\whuYZ'>Z??3BK F',dʳrT! S*X%HЕA6<xZ3{"\b޸|@b|5iB6mVEs딽 0 DiG.umvBq_ 80ܫMqbkt mHa!ib=>HC#809;ǤQ1銖1L,!Thwȧ\М_kLnV!NQy~)r gR h25{Bx,u!>O`8!*Saa J7נ5)y-[)bǞy K J<yxgeQ>j~bw. ,]>XQr+KTu lAmW"XyBsJ4[MQ:w$qU9T:$elSinp @+@h؞|瞚>K5Sg7v/ڭ2BYOLBxDزb6'i?'&dBRp- *uqԢXU潯oF5>˃w$4D1tVͶ!jT ˀd Uu79Uxڲ<֣ZڑGi OLoK e7x_UiCekZ=ek4-ZbK7`PET}{Ո#%'V+- Hm{%J8wevwIzHܼͧ,Q Qɢ) Jf1N۔>N =O635ﺼ$ pCl;Uyꕨ)59iJgYQÙHI)IT$H>!Tȁ27Y!`~dG&s6d. P5vYj;TbZxMy aqKg 8MfmqHC3;GZO/wX4Q 6̻ʉa-HWj/I2WWTg`b؇4Lzr `A&\+zgAtdYsv;~լF$fڐL;pz<(,JVi&k*@Ȅp!TQH2 sƗQ2ZU$nLSRKov\ۤlPa*Qj2%I򧺝 FUEN9(| NlZ R·EqPV֌H&*`i'>Cn(!)O<( 'KS-RO^V4`hGz)B2[=4Y]lG6nVJ[g rX8Vljo٨ s $L_!Tt:cP`L4( b$8Tq6'f%WA"ҒT F0 j[hRfڸBɓ5^*7 HЄ l3mY r7_X$UT۫O༝6CeβN^O:4ڤE$IKuŲk,P be @6}io Ucc AZpxRjWF6^nS3!,8!TU b āmƄDJIMDllUą r 0i Hp &WS8)sbWtiVU9 (0&>ae)r'eW0ȖDY"hA*LIM T/3[_ovJ|͒1^T9U#tFy<,H.XP {AI9aYjxOuMGmjMݮ*5|Al{\X2!!TmB00&!WtڌJ]\,&x8641Jv~BDߴh[?KaofH'-)nڴ d𰕵bJ$EzK@]QN(0X>)T?مJPxJYPܪAR_K۰(Y1k'cQUb%0ʪnW>w[%li86I&:%B _bh UݐI8a O3oyҨݯ:(Lr Hz!TMc L$ qꬔ/,Z/TI$`-7 lS3XetnM}ͷEΚ~ˢ{H!3`Bęx̑cB/a;Rsm,i! S FP% 2`xY*@qOg"fp?H]WnBSxpQkϦyR~Ak cz[Z.w$0fst\a24OfaA %EN7j)f̢ɐE=攍,h!*a93J}Q-0<`w{  dSvm/ A-ɬh4-g΂ X\Lm'>RmޔTFkT3 R֢4D8! S0@ (#& 9T;4S^j۴G{$M07la||0Qc?ϥ^7jX$ҁ2'~3Wh4@j бªXu%lX D)@ug"GV{"V#YL6JdtKYDdCSt/3+ f7OV4xY_PA7>nmU0_K;ׯm UC@ SZIKm{9^<@1/%#"uR6U@$fFC ArX p! S:P%eV[(XV~n9lԍ].-eUH? 2kNC= -$/t JAi`1Y` w?T B:x 3i\lFuLMģtEf?M<\qMe!P`3ɩ9#k8 a.oU@>ej9@1`A 'L K LR_?FR5>6 85&d;Sh8%d,#EՍE(PA_?Lϭ ן4$?y˓̆ @'{Y׈W^<M#A`'tK12/9@FCHhf$)$ g$Ae43ʯl`j`w\C_Z7X9e#ft=u ?G3pfBLb;?Ϸ? @Pa#c8ϰ x|;xmrf l d;h"0ZffYU ^{7OWiA'ɀbiy#ci ^#x"0P*NƁMh &qY=/K?!A@ ,e#x@ ] ҪD !6<5o :o cĜ.W@=-~7/:7aP {;9hFfȏ0@$(dž;L |k@3t?nfJa24JJ.~*q'|O>'|O>';-䞯~L߁w4@؏N@h4pi X`8(, H >JJp `՝Ut SBi0lq!Ԇ etBzPRǐto9ȅL 3:w7))g',#ׂf8~J-g6*uPOqx0)S__ؑ?5( DnS7Nai 8KFX< 4O8q7a! H_u@$yiPqq8C???o h~̃e=b1H|_;;&"n DxzDK:Cy&!8\[Mm52ÀxxUwUOfpZfs;??3G0\0PTPH@ mM Z=m9 gxLn·(6&m"x4+~ɉe&ϟ7\0} Y&z{1}<~y{͒ 2`,LV68ߎ..%* snЏiY70vE,)X .2j`%)ZI'| A'spg+h xBU.~ Q b4ӈ@Cl!~̍3^cQ#0>n͈LO%@gOMxw:[F? _&1&1 )iht:ZZ 5*s !3Z? ?G +2̼ GL8vH:Tի!|e<րf A'`0`0Gװn š>s@C '|s%W}6?'p|  @]ô,tnp0A`'g0e&D <  K Dy"%0r#=A.M3Q"$1:~m4`H ؈ @Coޓ'\l}p6e}T CA2*LLBЯ @k%L?NHu`B5#a`2bEH6lp}oտ.1! S>V Z@PD ~KVXKCˡ kҞxj#ÝOnyV1ʉ^`/gB0U5@|C}`k8/-IhOq2^+An7S('^kۑ]n(81{.?_EbSfd|Bkݝ_ph.htK7Xp%`s%)xOQ2ЂS @.Nh $`"Qh^\-:)n8! S `F@P%UжNJq1A*ǞW 7 q3/}@}OFpxNj^J WTǣN!s0&Oj/ˤ:SHfN0<&Fspm)Z/owtzh̟B ?gu?;s۵<;p " jP0tV:π'Q\=`[Xs!Ś- *B"nQ԰2D NVR39Rҷb8)[sRibNJF^! S5OAEDJUlAKcs^bd!"[⑑%:QsIK4ݜcST3„?#b@Ud%{ima7 {rǣuMY3Gj¤^u{Rz.kZ3șF.g՞n4qgJS0T  ɩ`@Gtw4Vb% @jRgm EH#wk'(O(VH'K6z΂~لeaJ[Fua.ضP! SaHQ2`pox~m3AgtC2'a2@@f27}|fsϠ3s>f2A2I>q|| +>'qDtYeh#ЄCX H(A0X?|||d?Û>@|Щd ã<)@Qױph(5x)xж4 A<-0C4dan1zoXopiG! S[ZϜc;!o0}??m=a/ ݛ` %/1-hZ$4`}`~4 6a?5ቓ6o]nFD@ v>| xbalM6 w~jKcц.|7av>c>{LJ@mOݟ?FO! SE$2xBa VH:7{[x5aT2|眷BX'Y`<}2c8Ew];IRkl2:4$*A͋\ʯVNZߔ]@2TIVo^nxj0/OϬ7(5b><;(A@ZCH<Akd#Cqx$ba-p#HG _Hx?^+a0މ) -vDa,[yUWʍ.GObBn'G_8! SuHXv2 mtŪTy\#Uw&&wO#־4Ա- $jfw8lX{S~RRv槱wZ:eཟ[ݔbY^#Ac>WNzҐFO(+{!VP{`b}]u#f_hʰOD2E1e]7X T͹';yw&nɝ]T(6g#c>{0h:RŃB6KJ>ܯl+%FX h8p8I *k-ZR8! S} + Vp)lhr'DҁM~#E8V2Cf#eуZJ&vb*]ǔp&vNm#G҇}gr##I/U$ A+x&6~Mƾ< -[zPNuD϶}-ڇ\+ܮK̚HK g S3>Mp>i}3Qlel @FAjQ(e" y+R6酛kWPX#b{fſ0:n.dchR!lBZ(?j >GF~gÊբ8urRo3dJ]pz'QWׇ_E~F`xW6zTI0`,C]1X_klﴪ#P.-)t&[]訲ḃܮ[,! Sm"Bj )(1u`RpwD׻1BRAĤB "f<O"Ģ`x:t]ط0֩rX̦gnmQSMy\P*9ЦO80uS&QYZ40jrxߓ$mi2D+Fb=,rkUSpƹ x}|(.Dk G72@ ` Z:)a]ժEҮ${Җ9.pڑk%! S!fvR`JJ6o3F1d{ p}A%/A#[qaHr8 [qʤBV.W˗_c'pܿ aiK)ϰIő%G١3 sP 41=ѡq뻸l  lL"0fpqu}bdc2`%D kH7H kJ㠈C:[E Y=UQ мs! S} ;C B"`K[CY!fDLcjmHh%ZSTm̘ eu{)L N싡0Q* OΏwS&O/v̄Yņzx'[A՝9 Hg8X/7K~j |@"tj(*0l;TT\6ܵ0yڎ?NI%Pw/ ;M?VQ:[fkLlhR:C)&Aø .xdžgϞ ,XC*! S#"(RSp1H%xRbפ.Ԧ%-jC.-xu.%kjZjGS(|s<oGg*I@ʼ!l[ܙNE8X BEPq(*^_Z+:&eٟٹ3%G4EHۨ=2A'A 9D$JDBZ#<-+@#ᳫ1!Vh 0d7fܴv/ɀ͂=!eBeO΢<Qy%?G~ ;8Cg #) 3$R ɛlT\tA'F4:#G- H o0Iuqfb#[dW[Rg#'/$!M S$lDmP~/,LQڀ̈́dQ"`A#G!X)LG?)>N>/f nwG;//ˈ4f!Zيp?Fͩ"yLWpW+}>Lf`ܛϞIwpܛn;24/N;f!刞MH =ݤ5͚&w w?mFA'$ I1` 6`?؀HfQ]80ĉHW|W0&GN@A4rRB;)ƞ7HY|&QPI[nZ' aX|+} ﱿ뗚7 $hߜc}ߓdDɿЋG`険7>7̹T+Xџb .,hu~# NPdd^Rh/ˍDh5 h.owl~$rr3)\D@$thMZKkN$k^A'$¸ax Dx0Xd#W}b8 ͈dl">P 5-$*݀Gq+++ 5czWHop2bѨy2 Ɲ=T"` A '$*&*Z#yX ,/p 8e˻k;E= 5k\ԜڼGle C 8<-0S͏~`fid}3)a8{"¥&O"qqIMGL2D¿W?&xs4H7P}0pxxf_: 2cO([G% ]'~B bxyL)."u>4)K,xHLOt"I?\Op/#X=Ʀ_D U צxc`2d0">SsB{GÄɡvho *To.ɲ`RdC懙CKoiѲ` J4|G(<<%CLԴ8pADdߡxx~^v٢  Q:' nhp[:)S<*Ӯ˖ ! t͡?cB\Ƕg0 hDO T<ߡCLt4: -zp/ a%Q??<??~?????Gy????? a!!de,6YG` aӨ׋,Ʈ}Ѝ\Y%2֮@, @e Mz(H \dPKQ0^BWf'` c]k޿?Y%4}xv2 f U f5;,ƯɀA@'&d,F PKDE%>.+pBJW%Ə-yjx؂ X9b@Q<AIhS`l&1ڏ62Uî@drMΦ9foe.;O(b~φ)<|K⠰0s WU0ke2 eة=VvL&4_6벀ǩ["K~ar` _Jio#e~wR$2l?w ~]}}wBM9Zpu~0> ['=@I3jo]kgzY}w1M&00A`'QO(@"X* -G}G҂?.o.47_gA-1:\DaHAmEL$aLA'MC^izZ| y3vTIӂU `\H9- dζA ښel֟ׄ K3b05M1+z}&>)-Ʈld1fTTWP> '7w֠\?b =!>Cio)ʪ?A'.7KI-4Ӯ !h7 c󐦾zK0K$ψ>   zg5@f@۔ɾ8ˡH>|OACҰT;vq#&sMiiu7ް3`(u9[ᔷZ EEAt8CZ4`&LDdԝd0A7S h2mFhR+;CUwR ƿ?a ?>! S}UBz))*7ˢhDYpw7f3N4J()G<i NWjs(x6Ϝ -$Ȥ!*PdLN_D<ܙ'Zy,yvqU3@!AV㚈yqUf-b>@^vJti+Û@Ztbq)bCּc<5E$HÞ`Z8;a %( +| MB!(ֲQ9-y8PЏ{ӿM;B9z9M/#! SE#Iz B9ik7+sGIHY.[MEr\T2>X:`ҩִr N5'QkC,;Kcy<(*('4TTJ{͌ \l-} 3]4``XeJA[TUu eg% D`qhwBe'^BW'U}ctyЪuX:T' q(wa! S5Pb SgQM@(+N09Xs?mӿT7A-7=S Z0hmUk-P.%J )N8XR]5ֳKBYt=*8 X6Q̉FW|@r:<>7ݺm-w` 87j=ې@icI1Jl>0#nbIt']/XB֨jI3ن~K9* gį$KbdsJ d pK t8g!EgnIW%''5?CSUjb8Hlxۢeto4uQݛm^Zb\19o`V( bU8)PQ=-ʅƅr#Tu@uyaЇaSjuCrf! ST!W(8遚4a%`HOI6jؗPW3 x; 3JNy,fn:1\(0@YRet+9ť9s&i%ΟcL1L(7EP=[D#$+rGA~7 =f <3d6-2jb4я4fS̽0'49BiC*^<|yg5V.4C 6v:5[ǝZ9aaQ!S4 ash)`;>yvj% -jc9E?Ff$B2&A߇t `_UI9i0Mh8սt 'Wq}V~⥎jGvs$$nE 6ALOBLsNquɖ=HJ5Z|WOmOH[^  *|g7MJKBR 7~)u-Lq y9]@kHA@'{2@,K`'JRZ2ym)㍅F '[ȯ|Ko(yG-ߜmOgL E7YA#V㕢82 p#_zY)6$/Xa@ ~#fs~~+W>E?l딞o2VL /z!jT&ƀPD1QdAV?q5z&#@!yak!UmI'TKSB¶!lAL_^WW'|'}c_Ɲaeˇhd ֭- %_4&2γ+i ɦlhfk7,R+/$t )S%Dpz~ WM[QSF (!TAbiRVg%]HRHJ}(["Uc5 Hj T<1`ao6fI§ӡ)~k9&.`EێEfMٛ넽]>}!w V]NsPU;!TE@h` lTZTJW*@6)|3Ae2:{qRduyDjFȱˀfvv:3ymmx쭒aZdRR"eeSuTx-ݭ2TaŊc5(rA< ;:9Ȕ ]jkj&$V=ɪvrj S?{CTU AAVo-{M`}C!T: h"QAZ *"mg -SF24I&jlg|Q}{6]*鞘sP)SUSYg b,FԜ`\ByOH|>aRXSԋO ]d ̥qm3ukJ& "@벥v^^) ,6%E\o]SW]_5u n}CcKK?Rz27v Pb6nal'!TȀ@ꨶ-BH)keJI"U]8|Ė!#ա,e,#!51TR X}ӡq^vYSةc"ՓrVfJpxnI **, ;$wlj/+˨jm!Nцiԥ|FY794o-ZX$;xӉr<*J:Y ek9h v7cT)\4dڭS~HA)%< pf??p\4|? Rٶ xᳵ哽xoI5HQ&<m5 Gjy]{zĸ3H[>! S>&2y9K2[(z 4 jLTxc{SY$0ewrM{Ŗ׬FCi7w`97(Bcp.X?˛/"b tR#M`rC LMbN]C#,8j2=p8^7Li]=!)4I2؎PkNWSܙӿs1E=8W[[}̖CK]vhl,%SK[Yd f4ì/\? ewwr "Hch V>Y81:M]L?cUY0!)qZZA bQ@`A.A'ZQ};00FbPznUC#Re2pfr )I-$=>>.h^`3l<0U;G;lTFS =zڀ̈́xVpE=3OL?ݻvJh=ww|s|5>?6.:&^Ā%Ni^HE-?Jhoeڀ͈POmltbA '#l &50ZsG5Kǚ(AN dӁ daFrS@B xpJ6Bp@y"j!-WH;)1 S6+߉.ؑrzL981ç>KOF&K6]>^A@'L`a׋FgK.Lثw/&$ T# wo$,͈<:Lþ &uppr]7E.BN`XЁ0?tceYBsOeehA48qMO0ޘ 4bZfS63A`'`DͥSG8_g^ǔx eYers"}Nw:?GFnp i?ʼnJ+xqf&c> {cV7E0 TG¯ހA'tK11 8+Z>o TnILr 2Ф45>ՉF9dt ͒ a h/̀ϴ>&v{ʍ1-rjp)4>*QR%>^3ǜ#ww^+ 8#xoîM[kr d3."dۨac_zȤ@9X2wɷtL1 D2| @`)m8zB*Շz9҂ǴNJ$dn[i ,32+v#I, 6D=qD̀>vx+ .7*tz_4WA 6 BXTu -~rl+㩫vZɵS_AIfrS%1Yz_G#xG#x|'s''' ! ~Z S"[P _i9d[&.A %Sd<@g/p ,mkz[ߘB| ke.#x3;i--bS8}n8N-NG;G)2wXmkisg;=z\̓X 6!j1WI{Z͊q+?~lzA>LM>4Kt)8L߆i^Byܰ+reJ2xw]V!.k>˧+JfA]M[ L!Ϻ[W!'q3с,^pVƣ8J&^m\U/bBieB.UU"ʙ" "K M|Nν?&:pO\N\¡x)KoDXK\Un3^&+_0]U:mj`ED)ZtrZ^Px>oR!heUGg_5`F|S!gɔpxenQU` \Nt:ɾJ4;?$,A ]%%?$ӆŵP uXH Jq Ɲ$KI늻سRal>#(+31G()\e5 xvFkcrQ1LL}?! _'`mSp32/5B!Fchr(˲(~/a n#HHB'ټOqMt~3óI|]r!,KsN)PAV45mFr\ v? rcFX-К `A''|O>'|O>'|O>'9>MJ&~w%PO*`:)hbbqÈ:=pX`8@{1]) tlK?3fj pi,vT v} ߙ~4|Fpwg@߻}@tM޼0 A& `F|/ 0OnÍ# `Dhppt|R\%C#d [<\BPT y{:|Xxq< ???3z,/:O@No ToV̧#>Dy!O`y3nG!hO-@ r?o}w8VI+,tȟ??ޗ7@>ʸ(4%BCJwxX g$&_s_o|_{8`i3_pZߚn|'05[#)?Ga Cy0 CƒP9}Ď&li=3}voė)lNLE|y+Zq9y~(E0\=gS, A: \D` /{Fjv=G=ʩ' bn`QA'LGՐab\2ErPNoA‚0 u \QC"<Cmdú0ǂQ?~S_ j ؉xղ&uR^>+5+'0AmȦE+rW:1a>kG#IE>Ma+fv 3b1B@=vNc[wJ^7N <' w;ⷽ Q=n}K&0}{gxu:LP$\B:Ȗ|~ZA 'LaAI l 2 Y+D)5ks@C#eLm2"kKk.#g w5͒ ď[a9` dTZ)ܝ0lQ =aXs!FoQ<a:=FmGA0yo!ӑp|/338 FLSDtx XA@'o}_et"1\F\ ـ<%VGSy orDy&߂x('|50O&QS(p\fJ;( _P وxPGo ߟ5ɑ|}A'! Aܮ{5&ѵQ3{bLE-@fUr/nY!j cPA`'oAO? U&[B2VCH{}0,q\kKx%? }\ &g]Wg]|Ipe:" W/w'/w@@G`~x1>ha.~ O!Hz?x WMN`3~H. {`&:6l=?-Fsnڗ=!9 I/ޘ@-;W1ˈ0P n]@iA ['a#[ Q_&p:QÃm?d3u A%ZNYV+ -z'b#~6pX! SMUCR6iA0ku"%tnjb 3\]]Ck2;<]t ^A:K0wχr|ʕ>u(PģBsT8DÅoP-n̊|֝q5z,6PT2V{C:l {3$IVo,ZlAI|;1 ni^Vhs?n# lD]" tJjUBZ Q}8萼T^16ǑPQIQRPr`! Sp" H` \o+CCaTfہC6ps6Ob883MY:t"|Srg㰀v-2_kù1xnVX*e͇4-n|ͺ@Q9$3s ;."sg}'D L`эL2x"2bd j<ɌX֙}Lw\^\`杶ޅ2Bs7s75h;g爴A1UNt! S=_ Bف@ p|w;~ i 3~i0ME7I>.kNWqj x0G &^dgp8x-zb a~! v a#X n! Se%e]B &!y"paiwWۡ^B#Z3K-DjOJ{̿\ * R1`-y 9]!n$Iؘș>#~U2o/Cv|? c-]~'#e"@i%+ĽW1+w5qDq/)&,[*i9:ؤ{5u˱mǙUG3ާHڧ' x[[gGyY`)@Z(a^˩'^)Z=Ibo{!l418G}[[Jo?! S}M2L7 PxROZz[63ˡ$Ii^"WVVRAx~D͙g3N @81ԁymʓa:ҼudS&'ʵQeߣ_No)`:1D'@~\ 1HF8$ zH L#dG p0^7О2ίouK fw*>h"%(ZY+H]v4F8&Ҿ:3ߎjg 4! Sa #*e(%8IÀl-O} 㩺wTF/*ل\rI.VV>^ 4_SA~7Xdn Vɕ 3EUpE)@e]W"!4&AEx aܠ C)}Jgg;ws1#r.` XOPV4MX{)Mj ki-b1AYJ9A%IAx@!eu"&$oII/wxu=2+cN;Ӎ9a2! S7f(-8BbU@?x9I+,вLBdת=.<k8$o&4HtNAi6U*}PI.PX*Qt~bSN x}~PD:ֆ#9Cks85=vY>] !;[@@hH`;`Iy* 5M/oXv#(RtI9^(a=9ԍLeKr(ďEQ"BX! SMK *0pG 5^h6"YWIUvj%dVWYVmiOe(rr<݇bdKCM*NəvG\#mMjC8҆{ʛJl\Öp|dg\,D3L+U xZ+Y2q)Iu^)aJQJh1A"Кg<1ɝxBԧxO! SHa"(@ 0p@Shҕ̛hxoqa/"+}ʹz糨ơXd\:RgPM$M8-5W, Ŵ-LY[+} +;S`puc)r*ӽ2Fs9=ڸ10D q  Q!<"`^գU+P6M4)hZg Y! S̈́Vb  pLgtIEn58f5VR:L.dw+h=AmBr06TۢWo]}egYgM%cJ4P c7eLPጉN-u +NbR`";`A0K?Q|Fxrn`HbН1/@ZܪJ«S-!_,YƲtVᗃBKe7K|t^Mlmgd:! S}>6 F" ώ [ 4#5W>s6!l@>(x"I{ߝ.F L^@Pİ$Njad_K[ +i>Qimےx5Ai :HTCK $\Iƶ:fhz:C-=nDWwL~nQ@*n9.E߾g SƽA! S>F"K)Z)U] VY=`cԼ\?_`H7l])jʇsऍz?OccÀS|Al?C^!A$`q'N0Tq]POr v"uQ*-).raCjPwv: cJ@?qKJ a 066£k8 Y<3mҒ흒&!s\6,6*8! S`*2` % \ҴUMI=@MdV\̑bY[gj_L/2T2Knx#"ʖ36 p#|$ei" nBODը@ 5jbf4BK>pw=̂Fq60S+Jź9T#AQ{{Ϩ;GZ 9` ]LDTc;hUQKBH 6 rPx%bbi~N4|JlTs]K[ud2f2p)Z1P! SDQE*UgN{+H ^1G&jꉺȗ: V`UdiJp+9)K;3L! S!qPw@(PqtmSẉ5a1$nhW֤|_Sw>>;ۙl4B,Hu4Zwc r+ťyL⫒=OԚ:Zkw!7C,*CSp'|zˆaZ+TQwp@ 6(bd!hj^^8S86ʢ|X}f١8硤m Ei}b:'ɧRRjh\c,W2Cg13C@! S}# HfZTw@0D ^!FM] BQe#IFn!.nK[7.<~;(kωև3;O:Oa! Ѷ0q7eBM:y lg_n8`jZ90;6ܣ+VB*,3 JWM@P(n[%`6 oks_|j&9d-`C==SXQM%B13z F.%td EJ 2Y'Is +Wnp ;! SGBDQ(c %`%.-&Z%L)R1bϺ9hF\)k]C:0fwkՙ\tG` y rz3t`.f7ma#)@.T(1s*'wMXK ?9N|} (G<'§3><+> #(@O@!^MWDpB p 1j9wi=bpA'@J4iY!kz~Gk#<,$mV0L?@fX<8`3n(ll`; ln~y~ };wr@@^O`H?T6v<ʄlSA'(ڟDHBY9-ddp\Y:(B\K{L <˜@eеف.=<7:ce{GB<lD% 0m˓ U]0c܇Uw|oyy?Gd7ni^IS2`3f@#2A'$~ ,@|` <;-4b?S]2 Fw28r :AO1<LHɘb` yHhGx`3b9pJ?G<7 \'09sWb30%rFA '$8xh% p0 0ak{! ipfP +)4F b993(d`@yCJ`'?|?+'?^L#N3a( .$yWy'i2`A@'$f>k #x08! d@ 8x/I3͡LW-?E||чҭ`ROYd݀6Bo+̀q\` 5bb _GMh^<p=Wmr?ⶠ㱊fUS Cw͔֠ӱ* ro̡?-zlb 41NjZVG0"ypP U>LJ hp_9e O"u~l=CzzAq9R|7(ƓJm5 7\hDETכ."W]O%èFul=!P2^#?##<?<?~?????G?????CD'F<}|p>} Cc$0S J˜DCt. E<7ls?|mM]4}z?J5z \gƀ eE [^YHT(T!ie?b}8ϑ|<6,! e}AU?;~؏sJNNNN34fƜLٟ A32~ ,M_] E `iw@ԬCr4CE&OVgPzpYs5qFd_`Yi> )]WZ4ui&` LuI- 4NONCbN3Φt(0M=|X>Cb#|4`}86l!?)!VB;ȖDFVE]/P(벓O00ր/"H1* ZG-'+ uL?!d|f1g‡@ig] , =dckZ(4/VG :;`sbΘ6u̕+zAE^bd )ͺPAiϷBCl+,:wƓ ;$Uo?GQp$ar]u]u]u]u]}u]=u#N?0VΥb ? Ap }N!_mX2)3+u Qm^ADqJʯ }'뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸u]u]u]u]u]u]u]undœ]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]uC ـH,&P6E/M YIrhڶM7^[+̄UEq+TnNf#w>oK?뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺]u]u]u]u`"ou)O7?qP[_} "0/UJJ8XGqBitԺo}b&us$|N 42}]u]u]u]u_ 9@#p+N%a*5z}B!Čez@6D007DlT-~3FӐBtTc=g'S5r?bT@^H2CML5Єr'Ŀ! &a%SS`zxPkŁʑ<+da(Cdcߑ30%81c{ae$aCw߄g4V)01hk)0L!Zр0 ozzC7|!JK/p|"lɌ!3  QtacpEzhTv`ƕ5vFqg.6׀`08AlB$ĐPi|;l`(3@xBzw }QQ@%9=Q"GhpH$J"OvG=p{r tj?̡?_Go qI"d~: JrPXb8KCMs.RUx<F)J40: F{#CS?Z' "V&B{G%!(a_U!Tg /_ κOH.f]8V.B d΍R1GR"+(KС%t!8xp_At8y kk,?뮸?EE u]u]]u]u]u]u]u]uRB뮦2]u]u]u]u]u]u]u]u]N:u]u]u]u]u]u]u]u]u"yb8dPhХRA; ~˜n%ĈP L|#L~L3i.hg4|$Gpm 55Vk5Rc6 ѥm7_h @O ~ɉBsK KC5_"&`#Bgw릍 fιD\*F& P&MϧH ǭ&"&2CE/75tz#-Ih 9GnSV/4.qL &1 jaa~!)_)0Q0f9cx)i382јdK1|Pɸ}?ߨ-F`PX`&ss=}BpR$Uq|Tk!nL0@BeogdO_ktD/& Eh\e5*Rck/yWDŽ#S HL )jnטRf "7*; ^3qMQ-uψkqi0L0 O&QF0bPbqf8!p0aP%<[ ڏ!3)<˜CoI7L U&YÌKʓ~</mŁ ri@@4ɎbB }C Д])Up΀L<')c)5(S$&|={v1fA"b} < |<1}`o [+-#@mҴ/ td >] L2T 7_oٍ֥p= ڋ͞gP)oh^`\8w4AuK7ě %)/evH$Mdj O}BDhd;X)'G/D;&c^p ë/ӟ j h gcLA1XT/z _`M` o>+ 4B2> 1^,?O)D ,p{H(_R) -<)! *U~_0OEc-ͯyY4۠.HQ} ;"Np nowV< bґPaPufGpW:+XA.6.[FUbZ~1 QL`YrX;x B?/Uv0 .j *潣2SDټK>< >Pv$jXb]?݀/Ш`$ fŊ1ꀨVH$+5$ILȯą4/]]_~pBD F: p8msx<ժzq@LD`ix@BhN,eR~?ߠ7z!i\!x FoP1ve? -gY0t BW:Ǐᠵi(3œAQv*I6u#5 A|'p" A! z~ hS%y-SS4:\͂M+ .F E? |'bWajO@4ntS,g{O_פe6(a^5=Xw+v?A="aߵSH32!4Atg{e+ZB $0LIͷAD~㇂]Tl^_~!Sp:D80~CJxL=~BI.hB)dd(M$ymP` [CXũ|Peah/q1F}l6P HE 6XP4'23iW7R~=xh9S}ߋ[$dso Jl =Oƭ&P6oY>܋Cm^s [4һgA|D aQl#{-R(ER 瘪 ی|#RC=F0Y/BM1^_j)יu"N v>/jPJXˍZ2Qb\3Ԣ ~i /_xb5ԉ<ű jb2B3?!рd$! /$aa͗.F_!Rd&`Ԩ6;W0ynZh@`ۀKbP>F-'Y_;+`"^gxPfB&Bm b  pN}CzU U%"`T]t( ɾ e΅/?zZvP倕@A{J= cG%1ɿ4 4<@Va{ ﬦQ/5a}.y q2uPp񥈠~Mǀת&nCF纠_\̀?>. =S: π'tW0dC| v,O4?_"aRrG g`ߩ` $. !&v%0:+: 7N5ਕ|6Fz!xQu~`8=?nh{7AXJE 7ҽ =78?Mm$lE=8F[Lo]u]oY C+ iL.%Q[ @@+ox)*T8wQEo:"$7*)\}a=C-%IsB^ߍ2S8Ȅ-t~ Rik~O>'jLQ7fB ~Ip,lA<>13\}rNLs}Q^y%>];{\QD^Tx <3.u`clSL˹N <ހLkS7/6Zտ7p|a~|GxS,)ᄞX}(`A@'nS+ hDݚO)UpNMGh:Bx`CZ 8p f6pRP6h#Wt(b_c*)acS_)a?S@|n|1NfvVT: ip5f5S%OP_U`(A`' ^O&.Dv%7OƞM&o' ī JS]= J#9+elFplxSd@f@wzf8v'CޛRLQ'VgD7[/%} @AK I!; puɛqvG )X:'! S%Ȩa.)( vBk.Uo-ŴWMS:QTTU!ߍV)$~y!A ]Sռ\%+c9go e=R­W,v@Y?sP UkSq .! hAX܀PFHy2ت9c%rN"LNnuq}5\5W,Y̍a9NDb$8PA!%m*֡T 9 ڐCS"MK! S}VC"^3N@Yr}c`bE-Jj֎Dkxc⎱0PLPh,J=]`̵ԉАr0fZX)LJ:C-3.yI.4i+X죢q uȊSwmBcL|ۑ@YA!*\s2JTz`p2҅bY[ą` ]Ս3 gT]DC4H,X<7)a! S}X@Λ7JM0%şh*ҿE71Z۔$DbHWJo⦆{y(u4%X(qHM lb* -gjֵtzxX)$@nv `NsN`,L՚8LOКæ/a@F'!#;xiPGi%24l x)c;0k(5[샺$! M&z! Sm(Hj/ mf,+w'պ.P~k<,ȧHr&F^'l--wM2o(TљN5eףKi,Vs P#Xg;< "T[3"6DE+ Ypz<6 `i2Gƪ#|O``=&a%퇚Q\ ۢӽi0L,:@( XVVKvO#<+ahΰJ7pXVut?! SUEUC;P((ƇN26\TOM.4-‚IF#,|2ɮ]!X^P 5i!Rbe`㮑,rvLrNK?ԶG튭|A#RLuk+GX<5aDJVmH@LڝV"yP)K%9cTo `{V%@UIb6 > (6u̪N䷏pT.YHG! SEDcWJdWfR@U+pxU o )`vQ剀3lwW8B M/[;Eø\ 8 2܆:S Ր%!NbKIhV.Jx'k~zk>bU ;WO%XVŬJL! S-2# A@dܦ%@%l{ Rp^kVOF[_C/!ZĔktM~gϦA6w&/RA}z^i= 0N0? `s ztB $xѫ+X kBfaUl @!?P?tK KZ>M;c!Rp2tc՗3). 8'/ _9ڒLweRrXc,uxv\2JZu !9! S$  C:zdGChiEK;3D^Cc҅K 3maڰlm rBٛ}G噜b'ٸܽ+mG@ ܪX҅YvRݣEJkBU-HjxR;DmnՍױ%b9 h7~pz74SOSp`19|'i+<0z11BO! S= Gcz) -563&uyŗJhF{rU1cFqҸ/#I>o3u%@Y iZIq{'^oeL!Uc8y!s Mʉu$ft.{UƹL)LxecL'c! 皟@9asa>FզGhXE{׃Ѻáij4M\Zu’'[q[:Q`[\_Ɏˆss!*S}aXPYPfdYs+\A06ӭ vLP@3n+/Br)Xbħ^wR4!8[#+ GR_D1=F=K{۸pSy MuV/{+Nu`^$W[{{!*e'$p+u$xX: YS/'m k@BB}p v,.@SϨ(T^Nh dLub"NmV"nt&6Z,(M5ʭ$̅`:jCSXݟhkR T&|+! ӭro]P uD޷M/)<('!pMUdHEW :LA^@DzĹn"̧Pz@6x]]H9) ֝xsQ051*#;jvAֵo=FDcM-a@ ShFH* tYxހ>!T> B )F.(U(KG`EHG +֦͡HM_v``fH:N*#\YDl4̈́)(5R4bH,'`,#!TUa0& *fExnXA!g=3+ΞPC%}(Ig"B$sӾ]tcmuVM)jJo}4$# Q+(PgZ(&xKTYiqAUM?cn3dJs׶˳ve  c_*ށy{\\Д#bhdMtËƮ{2#{M}wJL-D֫,I6(B(9wtJ{$v, <|B8!T= H"MbUR",ީ:;oJ̣-V*KI'L5bSR.VږJag)䆄k'R&CT kʅ"iI DRDB c ;ia$+Y12(;]%UeI!S4H"t נuJS&!.RofJV֒fѥ7msh2݅QMI`\I/+ ZNbhTBEa XJ}TŬ^`Fwta̓$P$[!D,Sfũ3l=mWj]s>= 6tDI gyQLd 03}2̻J>!SաCL* ]  k*@<'9@yՒP`f`T t2PA NL`oLڭ HM,-="~GI)//™d*ͨJw׬hW\)4$r%r",x)U|ǝsڱ?yf[HxF}A~j߄aE  ^T xQS͠Z~i@b[R.Sro?ͭ] )v>Vַ }6Q㞐ۘ7 V] !S݅K]*&5U{L%`.|9`Z9mfqnt YTSBRj^skkz*M 1 C}F o[U22Yo7jN *n褚Z\@0EH!ږe# )Nv9a("0hRЋLqPbKtٓXv;S9lhl|\e=r˕2C1cKFs%MlMYWN(E[B,ۮSYb/^/H&a0(V 2 tBVNr}eZL  A'$\"<'|$0WPJ 7e0G.%xbf S'?𕝴(@0 waL-Lc Bc0癪gBc >M33O҈uN K ߒq+(3/s0rdZkdI޵A'Դ1Ɛ^ T ZڙIh;}x%,<%,VXy/̀8N9W?j`3be ̊elҥ#L!5p%w~Qys yzN$,忥ɔùʹ"໒A'(tL:DL~RuLģ!(S=4L2&oT3d:p]x 3l83%xn86$3) y7@~ Go%TX SQܙZQ͐| QpA'LW_NFJq~U+$4⸌}#*%YK 3b I :g `ucb6-Fώ cpL?-kF(t8oowx(G.'&6zw$͖2̀<v$ٰQA'L Ϙ|O琊+}68) `[}`@@ ވJ#$,6 E_Csef&KD7G=@/[#s}܇(@3{:?p!r@7A '`F Ⰰ]<@#L\Ps>D~4Mw*%S/S-L_^q@76H012BvZS i091v]I w www_~?|2~)I0rWL,ҎrA@'ɀɧ:~aGKF4 qqqqqqt`|+#Հ.Pp>PO}^Tzwt3X8Q&b@8@"/Jjx~ ;xP+6eYץMϵļNI)bo2 R#۶Q\6QYACbd+htF :I4l7!]}=7ц KF@O}gڑ·o)^;d& ZHhZ^1됃aXM[:M O7񩍋?uG9|F|#x^Ap`]gY>' (f$}=f&bdTIyo gaRa'eh4NA`''|O>'|O>'|O>'9>MT_h@Kqv U`G8l 8`&*g+ |  (|RiZI] HœIG,RvL@-F|1]S@ c8;@S|(x HGXhI;@$>4P.Xlُ 8xOu'+f4LBcցlߍt VZ{߂|??2@BC휢)μ$RGL02-$2Rhq2ēM3{?wDy??&WfqP] "607W=p0&G=Ւ/yoh28)X8LhSr2,7~dn '0Q$F8\0#6?3dm2Qh2;,!3d '5R )ͻO(/' OFwww6 gȸJ\$*&+/A"BC&tIR$/A't, %Z@,? E.~F N%m4J#x9 .em:6#LMLGϏzA]1rGܿܙߖíAXNCb%&.Mϟ*Čqe癌8Gpu~ =3J8ęjV{E3u%T4r|A'`0 +g=?"BF@C |0k Dx8`4Q𕎰A-fǒt .;1ɎB0ahoN @a*>2m瑊y  m|)%='I䚣 ۋql]'-/o͍-s-Bo r|G,ߐ0&<#?4pZuJC<#93d˾Y@پ NLf0q|!{8:Y>+4ˡO } 37O2@! SBmTUWY(LK%EYθZ/OzNpF Qe p4e @ ir,Q>D K@1V_y"X5 ,$M1r[!؂95[ V5 N5-fbx%jihbۛ<)%o | 55aȮgUX,r3k9R I\Uvj~C!cDP@H !AC0/a @X+qibs@SYAr1L#! SF0Q/:Θ*DY|@T^+4KX?Caw|}*=l ~C5-֒ &೯rSSa:t ^#FM'i M"#s;#nGNC2߸n̅Qh*gOuݸ !L([l^C-=f>@V-['uz(,Q:Ֆ0CZm+Pj~VJ! S}%H$ L :lg@?ʪrUP V4,pŃ%꺫N*i8X嬾im]O>?z F%9rF۩&@ H YmjxJn"r! Sq}K!V&l !c͏w@_3;>ə07f?h gm#>7'@X;7? H> b1`OpO7L $?2t'GgyA$Z`2|ܛwܝ}|?3þ0~x_6r3oFz& w! SbPKA @|@=D)0ױNX0$oB!!\$7`}b_fCLJ|@> aP0@B+#A0x}o쟞c=ۃ>Z8Sd^QgfL>% ۘ"1y>8~po&xؤp$! Se$"DJ) ABe, ~@/HvEd mǗ/_Xbχ0V>K#iFfI_l!V[bsX1Z-C/SX{QYҴ$Jv#bh7*3ZweX%_ *!wA3zr @] dO[B(m?jW~Dz23S6iRSQ:R_˾xצ aBlO W>^Fe==xR5Iєs! SI0P ";@Y .ͷ.UcI:f n)[T@U (b-ZfHeܾUtqåe&=dO'}B0V0eQQ#O^G~XdnZ`ālhTuirM+𺯹ԝ1/#^~pbJIX(: *K%esbAՎ曇DueryG\=7&t떴TOq!bYou4~}zTK$w!sPiw+vMX}iR8nrM5D|ݼ% @BT)(.`{hY7k@q 3 l~bg2jBfb Ĵ> %. <&z-g%ylgN! SP"( ^KUouemͻDdʕt[ХKDM2?˛LUŠ𵑝3Qo7z 2)(tni@o] 廯@^%^ gr,P1U(Q]mOȿ@ F BQV4g}Z&OS9:b%%דH镢*$Қ|2Eӆe͖d! S>F" !(ZF\b~UG_];ô&e~D ԋ/H.Ձћ=` !l! S}> P3]d'J$)DHOCJdF2D0k8Y@ e-@N`pSq*huȆPQGK_V=X09 5F6KxXw|_!Z#н U8ke!KmYbiڛbd?jKe `X!(WRIkd))ĆC$ݍvJ),ZCG4xy20dt! Se>6"Ee xiN0IJXEDy}ej]wlB[%wp 6#> .d9peSz/] O΢ksC hՊ(DCdkPޮ.B5T XHR.%#{nw@a# U/8O 3\ b7I+ rG˒E 䄪!v#zr! SuP& x#,\2[ QEjw.](Q^Q~=t09?w3P>4>jTVK/vTñ( rך$O_3R|n1DN.eܤ#s;Wv^#c/cV ь @%BzĎa@A} - o_n,qĶbv=}Jj oDq~]Y'(|$FCԙ/ |p>+=!m_s@/ [r{4dr!f@N2]Kl4 RםM!bBS)϶ԾQ6@-7 ?-?4ZK|m./x+2D"%ehIHL!'k)³/i臜W! S0EC)R8Ib_˹ڃиB x\q%ĩ>U(`1Ueg6H4JA$͇ >ES`xZh~|OCK%ؓЇ<<$/h4w 5 o@`#oT@VʎOa^ߤP :b`@ =%pctfhЂ)gª:ݣ>*W&" I*LJ-DB>@ Aw[(׶`Bwpd~l Va2zrO{_hzu` ~ ܔUaV}ݯ RQz3Z~צ*zny1@Z IA"g[.ѩH;ĭh J @>R.юKFn+alX60 x\Z50s]pbm0L QP֔JP,B~}n2-"S|oƾn<E6AWUb4K ӮĆEPӝ! S ݩ%oL(Ŵl,:Sc-D_iTeѮ6{18ͪ!W =!UXj)*U|$Tk%Ϩ8X} 4JQۧC!/_-[#i[Gxp6YpSw")w04tD6@@Xe,6Ŗ,QeÎvPL2%ɨȴwIJ2W( =HJ2C:, HWňaC\hQSDӍ쿞=Qbh5! S % Ȩpܰ%I_/s/B,;Dr!B)fr.G _g;+rȭ]PxnzssEZSV죻[]gAT6ǍD]XSٟ9h~xq3a3{IU*%Ժh פn;ÕPEYLbhO_[2CuRFHEDXk}g.u-.Z TjהJdbUF$o^FM7M0ZNZ% n1ZH(犄(A'Mz M)c*DX~ ȿ|C"*s |<$XR=Yc֡qH?ePLl/b=Q̈́qm"w$nutBV%cQH0;}8O~/_ 1g}θ,OXWWw}$t;VCNN|Q|d'4`A 'g0e#"ph Dy"%A6&h7|#p 0-LXu E3d ŀ͌ n?3^űJ.Oωo~cB^Aw߈2HOSث @E|O5/hSV=ݿH&ho;A@'A)֐>K騀 ^jn[K{k; ʙz:Se T#|#뻾s~_~_?ڬ59|y&o x'/ )A`'ctNZ"@- b\I-$ัW,Xb `}d#Z.v26DW*QX Fu.*'ZJvA9ϱhCn Ă }ԐNLA|j)A'&dih@ q[evW떇/^SouþY (vcܰ+ $|0+0 px Za` `ܸ@I~m o%' û l!s?\ z`4: C-ORd0Kg d& jк ii # 49 uqp|?/ QrudR)]'b4]:KwMGB#jDɂөoNtwPM?Çxb 9`D\ȴО߇ hpJpDX0joh`͓p r h'pR 7JʀCY=po̾)k'x38^+R_,GO_w:tD! ߆8K*Jفrϓ& 7Z @2uUI+…?åED2K:b Â6???<??~?????^?????- A( ЇB|&Np_|?/q vۓ 0&~퀇~|yL" NQ04Y3fGO)PKO4>hFT,ƼmK0&3W` c^%Xx풌xxS,'8 .E\z HM4@,jHu԰h;@,;3^MO` c_׊|` aӍR%XynWL,0wA',l _@ "AG!ezȁS"!j}AU;Lpyz Iq <: KX X 3_͈Nɺ*aM0XW/=w!S>?N~ 9 ^K~864|_7#̈~6○ Jٚ W(WIf_$fyHm}]7nYm~?S5_w;lv %l@ f&i[^}w"ޤߟgb߸Tt0aɀ-t~oF~*A 'V':ƽ@PrC o@@6\d͊i, ݁ײ@f֠9;cL?cNCòz@3{vڻi{g[y_A@'Ԡa"oNIDPI%S#% 0O%*͎$ m3dTV;%;u.dpK'UC$3X1O/8:?Ɂ3X˥tX ]NcY@;Mzzڸ$(  A`'AF(k‘/Le JH#s9- Mm5mL!9n̚a~ X ؈`M3jMAPAywƩ^) Ge _*}BaWR )5.U(RsfrXmO\rMEw,ve9ف ߳ŸTOVu%\ž&%-QE2@ ߕo-Xq:%U3 Us\긾lTK0! Sm((Pf ʌØ?:mIf& r`az?oB ckSiI3j<*OTfalLw!c aǃ~gz*#ғl9u$F]hDͲeQ$UM-K5_n?6OP8(t)+/D"-^s^ʢoߪ4ҽmz׸$HjREcߥ|fHe!K/)UtҪFHF~ekr;! SeSCNٽ zs]%cFLf~@IhW}e  Kh !B7kإ8!l=#RqdvDDSJq=IUpŐ0 75QYz U7PO;4ʏEMn(Znf0 վOT%L)g.* e]QUP0d̵B˦URv(EzS]Hӧk[qx%ӳID-OHZIa! S))HgP9 0<2A.vxC-_#i^`B\RRJԻ`=pؠ!"S E!@`P'PVϹG05V-`, !1(RЁ`@51ˡKs'w7=!+mP8K7)r6,I;[:CruS2l(D.p6{Γr 6QE$t  9s!QO\To4Z  MA1+$ևQIzu+|cqOd-IKS-! S}TC6V*;Q@^ư#B3EDb%$ԨX 㷫SF]i9XqvD k3bqB4 ކsTh/B#` qc\V=oeAƭF@RV]#R=yEb{1 h[2,_u BF%fCX?d9 U1Z=EЋ!6&)@v)\Ͳۣw| .q nl O(9F]"'}+/sNt(4!;w(y,{cOѾCU0fZzlu! SM$#2i",{3d>+јݑbɠ[3H E0Rh o;jv^Oih,>ȒɕchCGH)Cu9g1?q8D;u*H R\[(R@Ɠ:qUc n-2%5bb#AxXJ u x UBE[bV!nܠ/ tռˌuB4JO6̰ڑ͑I}^! S<"H6cT&C$]}I?уK)mXmcYd maHl?itk4[G?Y>mQQVO%1ǟ gIcC:2ifD)dT]d$ ,Bp6r(ac±Z3;` `p&Ep ^f9{|=^aBl4ٟ [ CnHAgNS>2|';Ќ` g pgϡ怃M@H& h08! S9̎&z~5yr+ ~`xνI᧪緎#?v6 70D0v t: յ8I6<0xd!p:ڝh' *a'ϧPiV@ۛ0? w`;ta!_m1< wbpW>݄Iup݁u!}OOfq!S=$" W7Њ[*-@_L'!?nt(>-6Φ qÏGn!=o`9n`6QMkz Qr't)8w`c%NHчQlXÅL}wrCىn{/KGFEkwu5H`2`(  eE 9?mlU{Õ@S>5*7$; N+SbP(Cȴ KRG,x?C!*T%-A3Z|^1wjRJO@+MJ7dNgDpbWD fcvH`e tEMYjmWm(9l" GmI#F`bもY z|\oC fZ Jqā&egf籗3N찠52'seEb5Ws+T5qdF,˪>cew: ƄB2+˾{eNti1+4WW1 B=JO@ ~;Nܷ^u!LmI,f(@jHPr{J}S yժw^'G]6`JQ}5H3&2}2ӂ9Js>F薸DjԗyGHOIAbX̌L tQfF۫h|p_Bv x/Do>+e$ηIYIx}3 }^ Kqk8FAK5HX`CvK)>mYu1[PY,g?q?]"ziL_!jTņ̠PD@ R7bTM˩32bj\U:!T)DeE^ Q9>DSt lVel3D5|\9'?wk\ k1XWceIFIcTӣ.5rn2O*-ŵ}yϵ)lb+p˙ /ʜV[BAbhSJus~~Hjm{CQ=hMZH+ seÅ)r dBO!TU#!O ZRB,g+L4sM7jKÒS@[ZMF:ӑme!z`aP@d܋wK t7Rb݈ґ?q{PZI-U')W\Ηw+cxyLhy5--qE/_9կYoŒk鐴M]KQ+B砜ym=*zyvϐM @P!TUBQ08Ȳ"Pe*cW1S;ܡƌN 4Iߢ~X_7پXl9HmsVB޼p3Wպ0N-$"j(05YIYקtܴ %Q"P!T5 ĀJV%a%h]ӵ[jMP-LJ9[+|mU*h T޽񸍌T$B)+IYIJ X^0b)b^蒛Qn%^Ǵ%a( ZѪixVOk8W[ ~?x$ş~nڬ"m^ #x־kD jįf/Β)Q>vk=7yԳF ˃-BzBޠA7\#AC`A'-WPJMSx=[#!fYA+G!AY~#=Kc5-3+_#>6?ueC`}^#y$>lb? (7a@wzg^HtSS7d=MZA'|yQ‘Cs9jhIp 0@fn2qWdۉ0;dn|ҙ*ױ Oyc#%2[&2bj _'5a5)/w~Dryj @ɐeL8A@'tK;q NpY9/1cKP ،8qQ +E,2τ`zd<-,j3뻫â9~?ָ|ֹo*ui2FidANt?Y_cݳj@/`A`'CNHd4fs4#`4#`3>ui^J+͚00|6~_J胬8נoRMTǧ9BSͿai@ڐ`EzW@ ^2D|Fs%Iq)/N|8wo3@2$3~P@-I4pVS6r)+҂ssVՀ"J)1K`Z\eZAQPt ݥ`3gjX&6D>>3 ar'>zhvC -4N fZ^1k됃aXM[:M5o|n"f6,##6Dx7?v_߼-~4o`c 6PRb `Ůj6#h|hpA''|O>'|O>'|O>'9>M Ud@ @ [@;2I8:aHVj|gex`8J)r+p,>ڋ ! `Fœ4lQu(`ny|R e\m@it ᒬfmfA'&7 Pv@PaDXd@s|LcOFZM62i]A(ydrh!&{tnl%,Le@rC/1Yhpi ^NMqФeϞdCc1g`x㾜_2#$ SW@Rb*u3$ͪ蜽eo#U 0iNx{띆)GxP@uO;Ղ!TAPP:n7eB\RJ3ʐO3 &߽tZ I((CUz{ɑC@,>2J\ɇY \9&_|滋F"+)¦yY>W Qz.^C3UUSu4Z= #28 THqX ьjKۣ &;*1"3Ԫiu|]nʉAk ٷ .U 6l$^-,{>-"E mQ*#$~!SKE@e63Ys!St: &,Ub_vJ)Zphc)*p yrӍe%mt C )a%mrXKltdLU{`o sV+gt,F br0b zAtcPuFm;eLjY( ||3pH4 >gf@\Vꤢ5?O<2BzH)OŐx|p{KI)Zȝh( /b0u P/P4\\Rt/y_wqF]:L԰+mz)A$(4.Q"&l.%$ݞ! Se4A0Plp* DAަ@.<:CeWG+m`?KnqEaf.wC E RJB+]6cud C\Tv !̠Jd_6]D;tKAq/k¦"+cP)A%J@u R[Z$wR)Y}qDTW @!PL@7C'lU9F4-_ UioY2a- !'xb~oHP! SZa!E2**T(. ikVDxc%̔sv[~ҵ.6]cƛY7뻣N@{INDck*NJi_%=>bM@$=$ɑWgAr.!kk  mxԕ1i yӽy -ϩ@B%X(CRiœ,!%[D*6ȁa P`pr:EmUR˙e˻! S QH"P ( \'oQ["'݅>6.f ub?[CƝ@S#sw|)h%%M, #dm(*7 ()ܥ Xט*pd# ҈eUhyeƤFQ5 r=Hk ! ޲f@V:/ix},N63p21^-5;H+- Ql#! SV`h0 e(:J)fJ =޵ Sӯ| n+fD94Xswڥ n6 qMs%iq2<F")ӸK @(`L!v \Xo9ynb8" H`XJIBZ vLL3X$60Їh4ѫ'빉:{1Y_3NR5 ! SDa#(PT@@J W?G..t<7HNDA|X~/lt9-fI{c8we6 ۰j#K'׈~3Tq§8!x)m ?~Xֺ;w  &SiHH9F M:pY2Ceiv,|=7_.1/x9.uhk #-ĞU%;Do3h"TԍJ&8fSԼ3! Sh`XH!rʰQzE Xe$nv|1Xv]+08z5ѨGtOnYp!P@\a]HكhJm8q?,9#t\1ap l@jQ4ݎRHܓ0U)-(,as4#S )ߎ!b.BDL*-кzީ,"nPY钍yBe9'5/%ϲ{tiu;ql2p! SuC0Q8Mh7͍sQ ޽&8pxB x,3-Q`e =ZGl+ZϙAz=ߺK 2iӵCsNWZ - Ng=r^8cqQxB52jӻ`ZD@9%KڮRR#]P[ॺY('rΨ&yZڿv! SmBPl8n$% pw3Qyi͟?Yy Wݮ&;]6-K)Ts^r" 8z[V Q7n5)@ )p3圲J !&aJjF¡F41MTiMCX@$-ӊHԿH-u3 OC+ShJMjJ7ʗ(+u 854!6A*VgL4K@ YA@py JrpBMlqp<ɞlSÒޙJ1! S̈́J$ @JQ%IPFUZ9j \== vy%bӉU?/,6Uzގwzw. 2o%  uh94Ow0۱M]/yʁ&&Nf[FW(` Mٜ՚7LwHwt, 7=/HQEdL *]3,}.mݖ7?ܾI-x#.! S>E nRuX BVTdN"q}ǹg{c-?É 'c~"{k!CԂdDzGfKWfwTX2C-3q[jf.9l4U΅qọz A)w$.o74Kew,SG'bnl d]DȡJ tke,#@b";Ͼ S=H."!iDy א7*=?0 ] A[8TrJilb! S&# AV L+I Yl&؅rW%-\ID(3-;z&^! T/p携81s!0{ cTQx)9CT0^P' A( Ħt 5Ȕv#һd"`ff. v .PXM=?+}sL*iÖmgzt,E5]FT,Lg+,g'R F+ۿIvF?)G*Bqj8`! SeD@uL(bbԌ;X|td׿-&aY"L bX$cVT߾/ۅd|PM:{ ~+LQLĀSgU|ikg2:| vh`.Up㨁6>i*<0=Mݼ CEg(hJ(8%! SuA$$I %U+``R X@xx"sL?"E85f vWXvV\W[%pbƐyCO:=@^'&'>1{pib k{ԍSwlXMKP*@.VbBڈ8%ݰ A9r6@)EK+ǖ@h3moƋU __=}z:V&g@0!Onײ|)#y/$XD[O%?,PL;<lUh峘g͏~,B386S}3 $1\]Pvds!=~FA@'g0e& . P6MO!- e%)S%3y߀Zg=5Υ.=Z?7sifeR# /K9xj2,DNln . Mu?˥ :W0CXGU#%nWQ-k(}wN|]67S]PP; lqա񝀆iߣ;1Hjt~ԊWzx,[v#|#Pl'6?XV; *OA+6G*Mt R"Z \!=m-3sha6/Y\RF\O(_H܅א! 7~7pjZbp.vTf68KTdNMتWqIK3/aȁn>xLaO??(xxCe @mȡy§!ٍi0E Lj` c<K0+Q <Ϻ fÎ׊N\,a|jrY%վ^## f Z;& âl%*4|YEPwK@,ke@,~^IKY@,k _z(K[A 'j8J5GXp%‘LS[M7G2w!}x (_f^e˦A8a* G5)|W.j-E3_xZs4 GB^.1ҮEA9 Rn /@Ó?3`  ?iQ>('~<̳pc-8Àl t x"v|`2"c0?]Go"磾A+ZWĭo0V9#ߟ :0r/#zV/|ݥ1p&ںk}Gi&KKoI65]_}~ɀ+;[ԛLdk>-tߟV}}' ^z |\̀A@'S3 XAbhcY"16m !2FTEԏ/g,&SĊ˅JRLB6Y&?c|}A1s 9%4fG\msoCZj'ǥ9<e+κ*j0Z?n@A`'WƐ0 DiKI.#=+%S |)'zd;S c[nΞ6*t6=Q vwwfǒhj),boėl (т# peeV^ Ey7OĘ;Lr#ysa9lll~G/4Du0 /Nw!8M |_$y`! SS0@5, .fZ7-FUa f- $pQo9R,SP f2|YLktg%ZV L?~] ނoO^DBG:3]gW&,.$ШewT 嚚Q+ +`“;9L´6+rZG!c*k/e&թ;_Εˁ$0Q욿+g? 6/SR\! SSA *Xw݁;9oh:j9X w҄SAjȽ( ol@XBT T(CP * ʛ=9y(.UYu8'szuQ\ޛ@B3o3q,ɳwF~?NYP+w~hgWh%uG9?"Q%bnZF&EH 0HC9J&tkQtrRِ 4~S)gZr6#9Mj {˭~%,/?! Si`E0@@76 =fwd3{g aH4dl qNf'02'ܾ}0 2{͟/x8xxy`f>-akno~ V`='my񇇤baPa*=n=~!LBc7K"=+k$JS4@.9t ^C]@Ggț>4Hq@D7 T_? \Tk_9zbwtbU\??Fӷi h`I.* <QvFzc|qgk=ߒ9Ԛs{* ܶ["fl|C8Sq?18K~>H+.4rBIE~E mM:d&C= *S *Yo!jTŦǃP`r9l'ܙ9%ZRǤB 1!NiTG)#JoPUǓ0$:V\C~\_{$K5/#knk)K /\uEhar(l ),ZX-lplLHo:Đb.Ƚ* Q}eqemA*55EuMtF2%#>i6zɘVaERW%~NէDf^+wu6'ڙ\qATMWK%4n}C!T: 1b2۪6ܸF ˘ &3m `}6RpaYtt0u' 'ZngOÿs(l%Tm#@Zpd#fFzSS 3*5)"T6&.tɒHFdb:VY)JG<8EHvJܑNyV97_Ȇ?K=WȎ)eB^1GmS#qv7llVQ\n5om):&:g2XHp6 SdP_FqQ,9P;!T: Pn3I(kvY  YRdpY"{rI$efS?-| M''TvUU' Han|Î'JRX yOS!qPg&S;j0 :!TUa0РaʶV{Ȅg,~ 5F1?5l_uߡ9uedCYSɑy?b2 L"Pv)aZaOff`: A'&bco܅?}>58$A*!p2o HQi%l]YL׀[!+孫~f^7u]͏4zbj7?SLJ#-'* 51#ϓϝ@!?9_MdP 7 EǷyx}PxhA'|RdG P*J_KQ͏XGaq҃j6HahXE1?ֶ2>:s@wmnyS=z?Cb񿉕Dch6w:1tLe(@_ߗ&az}hVcfgDG1rC$A'1'pomOO T b_,n? %1܃<]2Ԉm/l!Lz54ojN6c5 و*(;.bq, ty癰gOOxU~ ؈ NᅻL$OD2;L$l">A'wnD^r. _y2h3II/S>@~ 6(t+ *y3psQS8sQ'GhL5N$7- :fpQfq;Tx(A 'L>O3hWbJ u A,)g9~b =y:QF̀B08505W>`6ldPX~$vfUʤ{{ Pj 8) #Ĭ|J%?AI+(N` u/t_H1Gt2IRhlA@'`>|? wȌWK1& HA'H=˾LH)̿7WYm֯ lMxKqqq+nǓ~'6!AĈd'xgYŧCXȆw@ (LF'G =yA+Е\-?0&X0PR9v*jmStFksM lY{*FNqv6N\U_`/Mť.^D&o}WGT9ubRg ?bV Qmou]u]u]u]ueQRÏl!lw xW]u<ײ]u]u]u]u]u]u]uX,i Ŏ.cc맮뮺뮺뮺뮺뮺뮺뮺j뮺)z뮺뮺뮺뮺뮺뮺뮺뮺먂) ϙ뮺뮺뮺뮺뮺뮺뮺뮺뮺맮뮺뮺뮺뮺뮺뮺뮺 H1Z 뮺뮞!8m̪ +ĕʀiJ@0A̎ $2H1O6yluB/a¸B&(eQu]?0CG5g0wʫ $`3 ׀ e^:qBBƉXS3@:5 *H\bm=H;ёk; f -wˈ1Иpr20ˁBބ`pm5 zA/x "#`6]Hozji@!/C69b\n[[?XpJ{U@` @:4eBF2aloeHMq x9m<`@r!`?8Q\ݦ'ːI ^p q(b+ձbvρQ(0X3bmfс19de!rV3 8%< 5ތOC/iZv<<1O6l;S E6{vp c A )@3CH<3#$(5>c,-oH(2Eµ" ?_D&(u18J1L) n  PzFauq%xD<+hٛ~:44%5ښ6A wbi$#hÇ ~r%$=tu([o|`C_^arUlKnAMD]EV/ÿ~?9$ͽ_UO6Q8Zώ f4;M[QQmUת?k|@ 2ѢgdH&Z`w(<>M7wـ"o&?a x{ A:UfH,?/xqXzȡu\'}X^뮺뮸뮺뮺뮺뮞:$vO쬾8뮺{8/\tGQ}u]u]u]u]t#4_En뮺]u]]u1{u]u]u]u]t`:7`,E lpwB kaLǸ=1==^0?dYq-oq#IMn£Z'񯙍!P( ̙ vK#.6PAMk.D ӗȾP=@K~iX U2ES&H2Ȃ >䰟=Sp1{…Yg;8CWhBO_:=hHK]T'CHS ˻ZlAs^8q ':/0oITOSu>@FUe!5B*3*2xŦ@dƌ3i"W& o7m.n%gmB@kó5q.?x1_kxkqMEq4uޜ"@B"!\]aBQ$g Y] b ^L 2CoJݣ _'՗Za`F ? ii<&)<.?.ttXlQ6x_m }~W x$.yepj^W Dckq_ [ +`қHԀǴA~PHC3 =H!۠xY4#5u cM+.GaI)hd%1 .w-r6qoRRf7-P*BP0G}:5R`e!Oj b9`~3 I Y53LC a#$G }LrJh>) A uU> F Ѕ<75 MI "X(z X@iAK1^>$nL7`: noݺL,# % dY;-ٰ#._Z5P Ś孳a0+ZD/\CDg߉&1RU{zD1"M+-FIyC J}&uxDz w<fMI -jE74^(Tg.TH^𽁏o /0?`1~00@) C=D,Es@ ЧL >JHۿ s߿~MĈ GkbM)= W`\NP!N,*=q\29?_!:nRw83JqtVD 2aKX N/`2Ke gӚ@3J`o7TZHSe׸a{ܝW"&¬?)cg$w~C" ƲRga# O$(Oa3Cd[pFFs1!U tQ;8=yg* 4KS?D-l&ie;,Г{ۚ&J-($-a{0!W$a3*^Au$aaT3]!6e2̰ !vOՂR`24MgF+ ߠd`{\-AS-wQrWst`;gDi'!lpU2z2i4؃e}ےczEW%O 7 O/s/?RIfYΈk58tQ'x /՟ k$RQ aȤA@vW^ `2S5'  SJn_`y̳ tǔKX_mW.Y*~>,r"0 @΃@N5Τ7EԦ@\[| e`;+BHՙ Ȱ>k ž*!y'}&x~'Ÿ|\^\ *@X$8XEPJȇ5AJR2q+o肃~* ;sfq!7b5="eׄ@*⏿lp>xZbҾ}wm$i& 34P)&L0XMd3#|Z݀ ; HyA7Xu`jlh~BF\?|RxVۅo'X2AL ࣏]X~]-!TLF@%8FC4f(: jif$A3 ~VsTڗ51 ě]Uђ8ǻ`JtȈ "=f,>Ae:!N!R` g)|c\<(X~3EEs[m~QTCP W0u?7+Ha(CzķGYf Ye$ -Fƶg@O_PT!6[e0ZAUlmh@\j]h#-b\&g pQ==g4"#ob ;Z@.@Y ]ܨ5 ,;?Æ'ZV- %zYb<O{DV tCƌEjI!b67kXUe_{q'yk뮻lB£3QeN`P.(_\3YӘ @UO7O*?R}8wJy*S!T,DC_}%.POÉvA⚩s B0/t E0/V uc (B?\;!hN뮺_8D a뮿)4![Jvf9#.$sĊqPj\eWV?#m m͟? jPLּ̚Nr7sx LWLb:;C\VT`AGc7'a QA>kVd2߯>X\+uv"J@G('p B{Xu]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u׿A ''|O>'|O>'|O>';-&`U?Ol. :0l /_J+{ޠYp 0U@eK Y+>(ac_f_@:80IbX0 1>A |2O{n=Kh:yMc;C݆7YQi rGzUBtT q`Rw_5`/6g>'=*Z@"/=aQ) k8 nddpaE!???+a`G@Bxe[9F!@4ՙQ#'}Bes"nߎ Dx8%R821$7x<@@D|ŸA4 c.3ˌSWc+H+b~7n3s;~1,??O|ɳnBADUÀ [,.ș=ռ/·(5ՂO#07{$7_>`?IdY/`<|O?̀`]8&txֹOLL阋}Dp%5{y %ͿP ~꾸 e6K#eb2fx@j0xuP9? r MZ#֏0 ^c8;RAU?Զ ,VO|MJٿxGxz z /Տ|_d' Z3&<0xA@'yX3/iD@yelL<!(6Feq3ǽKђQjhAOZeRaR`|}0C؏甹?ҟA? ^ } Gc@F%v7@Ӟy>?}A`'`0 Tp|=@[oZ"CJh| P}L Dx?8L"VU`3n\Ac#(˝L#[?AЎ63~'&2R}_uN@^H= #Mv3FhD - wQ9xXad)ffcRTiI -je\ 'fBDd`2`qpP2LJ@.f|›P* o7Z}DU[w!S`ZL,(D(A}Aɠ3 bǐFN,zšdyzPSATy vdj}Gh-u{ִ7RPnx7]D)i oAAbbGCsФw QhA9]h>%xz#L;A-|f0?CtkKnhgF˻,V`@YA@ƐNA؛muxdFjmjVš~d/iA~G!SŕhK,6ZIJ%-,yXU*肈%qdex5$Bv^ep+xC[>F\=0흋e. x#@KN?|ԾK~ A0QsMGf?MT B:P XHjk g_S ֿ/JD} @coo>ё￴'`UaW2 DM w.ʯōg1x^B80LBVLZ \-%̥YAu<0 QDDk!d1 /t! Se䭪AMŪ%%sQlcO]Q3xôń#63cJW$]I jfj&;Sﶋ}ؾT[QSѾW~+h*sB6掶4f ?E'p/qzk9%r&X%b*y"5Pw"Ef|/YsH5ێG01 %)NZ/3*: K3jD!HweS427a Q_v1 RPH iozJQY5ZtkVie΍U% WIHTT! Sc eX !l#e ẹoVM`eOh,@~X}ߡ?χ/ff 1]~x^A=\D}J2ONWW̹U~d癡0=.^[5CNL?"_ԯ.]2Od!bנaVJ([+S 3' 1uVVwC8%& QlU(G]*7i6$PX #֚G9 (rh ^$D [ ! SJ1Z%FSJ+TR X:Ha:T PYǮq>W刨UТ_VgEq;,amu!$b@AGBo:iPQZh%8Hڞ&i.Pѿ$(k5y硺'Vx J_=ʀZզ)*8}dd W.y"@]N3B-1LKs;14JJruɛ8{ ˞'y  '(hܭs42` >}Nl2 3xs4sY~+ Bx$%+J !ftth g}[ 3;r1D1,8!h3Ÿ}ld0>Ah͟܃ڱ.Ϛ~5|`NCNxOtr%!]C@r@-B  ! Ŵ1 ?3DJCFg9:%`$}b? !X>8`|39OxJ#)'N aݣ5 ~=! S]%!#Kʹ@y{['a' f1m NGhs!1[ñE篶a.f r+ĺ8;` R`;'~,7m,ITz4iw<ϏG՟+m{{xbD%<_|!:)kB[Ҍ,kD%Θg_[du%@,E~Q)EcI( mC-mHR׬Fm+ގп3-F0h1=Z6{}Q>! S}CQ $bx,R H`.noB&G#QE.~9p U>ScK<-?V=c19 EJ2gjDIx{l}H j;FH(4=5Ѫ˞;MUeOŽG(@FH'rv7QQ[ G*=\=3XEOgpEJQ;;P&3aBTH9a,fOHWѯb'8"`&Jޤ[ AeHrq\) eK$! SbC/XVM{jb^IE?ʩbLԆϡ T#jY )JXNy7g 5@zXK9 ޣڴF:ASBTQQ P4$IcG^ca/g^kO |,g,n_Vܳ;ٕ܊;ST-V$NljkPskX2C@:wGz/q=̱Lw;*HEQ+T;@C.MNrp1L{Z v!(0~|~ jx)x!H!R+īf@LJr "}Z%z! S̈́NGWt([-(l8 ¶^J(6* 9"!JJ;pM#=(WIÙ6*nN r4&„m?EUo.nD Se\E 6Q: I(\V~S.D CGpnh L~cS4(P ǬVߙ(YD S?TLY@LV&%fE *@E(np! SPPT!P8Ld 4 7 4~?Yx|s ɺYZ*?Cv㊥ɠAxt2$)DI_Q[&<HV:w6K2 +TyR )@wFvyXGFo遺h`W.kԨ6\=<3:@Qf] F@VJ"VbF'DUҌ¨8Xzs"+^'8`Ns }! SV`BfUWR8L[PWmW Z'Ur Pg۩JR-b~c!w^uc .: XWIw_6838,tt TcH5Ff0F[ۀsJ(2q &]ҍ|_v^|`0b,d:cFjl dѝA?~zF4>%v[n IwQJM-r;! Sa(f XE ;&{E 9i.Y6LR6Le\LЮXwj{q䤦Df@ 'Q'ƺ-9̖Z:.^B1 B վ³YWc @"qwXiƠpnHHB&*`kqȯSw 0X2@йkN@ JI3bPҕ5kͽDv}-#a;wBoxųz<\_h#;Cl+ yX+7gt? VEnPW aLbn#9&u'3pDJ ]CV0F nj(xA?Ã]b8@ LO|TbjO=T'2,0Fe䭐RlwN[_-\A'LaAi#-24ʮ+DFFz9HM1DM4^ Dxx <]ܻn6H᪃B6ĚII3?;ɔT+jwNj<7)3(0b <x(|n͈@3PۡDzǥ͊{$|Ǔ=&#POߒ_EE<`wΦ~ Ȧ~ #(MüɄL97h@A' '19/] S0$0+{eJ~2 l|=]#@+2 YV:A 'rDF| 6r;QX$SG滻3b1 A2 M)M)/6 }v Eb0 $2"+?g/[e⃦(Lza4qrHrFGyoxA@'Qmm[|IJ"bG %ZY&O <x>a:'͸2S )f5(@Ɓ%yid͚E(a<9|sL  %f3113tA?odKy6 P A`'! i ,Qc+- M?M&ĖFQȝ}?Fo d}͖$b/ =>@q;?X6 M,}xl^ A' ќ<hOlxp \;)CJS>?9di1JT!Z{H`QV>#oV60Thzo4)j@T"4'<8KB ! yW3Opi˺l;m 17|7/€`2`TܫpU # hD )ERJ7 H;u? XEiXOj y??#?Gޏ?????z?y?????bkEE@41 ba~)ȯPK,Ʒֺe?Y%2W%u~W5'^ş,u֣`⮡zJ vl9I}P!3n…$2&gY%~PK f5~PK }y y^&(A'#.“A$@›>cG,fDΒT`/Fp9 ɀm0Rz 8- ؉W@0 Դu-&7f75kSJ~ O4V&"(p-0="&k:(؋ɀ~#/o>[,>0}鋼~fLlw=@[]Ï 0G6䄗S}w4Gˏ`"חoϮ˃ #jͩm"*e =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr>8R@,*1,ꃰ+3*q]C` .+B:E;t".tu凮N)ɘ-xUqJ B.L 3V|C0$l Z: tpA}{ i b80X x5fp+ pqFA: 0[Xu#O}>CtSrVOiWq.5$i0lsz@/?ʏKD4OONCX u4!}xeW 86};HU'xuRQE/~ʅKq}sՠ#D\iv~p +IBƥ7{ xBt<*@1gL|ȅH:J~x=\-yudAi!ax=9/A7,?F ÷?CP>뮺뮺뮺뮺뮺ᄎ뮸e뮿j0R")hYeAAkC;ՠo @AYL`\8 =y_A-jxJ)~YRguC]5**60nײhsVl|gHqvbNX{V0K\a1(ҐϢ^P!_RH.52E 7_ҽO26ݭ-m]u]u]u]u]u]u]u]u]u]u]u]u]u]u]bxu]u]=u]u]u]u]u]u]u]uxˮ뮸3뮺뮺뮺뮺뮺뮺뮺뮺뮺zQz뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺뮺뮺맮뮺뮺뮺뮺뮺뮺뮺}^]*(9cM*=BIxD<C#-zi.8{!f3'粜t<ז?]uO]u]u]u]u]u]u]u]u}]uu뮺뮺뮺뮺뮺뮺뮺뮺뮺맮뮺뮺뮺뮺7:sn> E "E\lKVÅa~i7Py4Nx\7e;oeƒpAjF'B}l7{$p~耩)#K8Ѧݿ]u]u]u]u0T1-4@W %Q*+ҕxQ!Z@ {AqF bpEAt<  ՟xW*@* ()_p%1#^x8~ ,b M4L ?q 9ЪxX{Łcgv_)\# Ev"Cx3B;cJ#{ARFP/}HH 0W|I c^,+Xzra "#`6]Hozji@yPk 0e?"l\D_Ҡ~!X̋v#N 7cXSV/4|16 @@Fc=/?.?JUbQ @idfλCa3*/Uv}Fa/80Iw;?R OO5 Le=;?tz"3[f/B?  93>)A_1P "f @H4 p!0_ C138b aIz4@x :pj#0Qcɟ#~z83##;^5L0L0bXbqd &\ʥB?x Oq+aQ L8=:˜CoDv&y|CNOQ@bd~U "`ؚ{@4 ɚ_P껁U4]H]MhFw,T4k,1x9!D"tԤS߼:P96r+MM@>ĤX{FhI F[l -TāLB-1h/wi˜+|bUҎ E0rvэQ6 I601@z@_Ш`$ QuQn *X*M`2+`!q ֺxB?8xxQX>ʸ>1i?Km;wfh% 򧲭؉p!^; ?/[JaGpAV'bhws9l:$& Y ĶĨַ>#3 vK#hAӒkTR1Ivx  3@;PH/Ym^3Bd `ޓ'AZ}6e Tf$wH4Ϙ/0?qٴCk h RH.Rg 3Zp" ,ǃւvŔ>ƓdgLߓ[l 0q"1SN+<eM@ޜeʔ@np0| (_W$|_4fI$ pHDk`wi2, +v6x<֬S5oHQW DHN)^7WU i\93gԍekQ}ROKz^*-ዠ66&ᠵidN0JzJF45 A1O(/րu<)~ZK,Dv DžBWXcM+B>,)5? >D!1 . Qp;)F)1ɘ5&[ci zÕ .+ݭ)0CG[Ʌ$H_~1Dg~ GIIS+џ4qu4~ox)UA) {C~.+?0"504@[c" 67~;݀PB$蠛ϻWfKBY% gd,9@cza<mEQ1Uj筦d02JI."!@p ˅,m^cESߋ#$’(bc`c rP^,Mꌤ\UÛT~PUuw1C `? {|P/ &.6`) TJ!DU%S@/p’?5"n$lsسg=^x= QJ2N УŔ? C-@V @4)#e&`B2^l(̆=E;m2|i@@v;t' x!$C͏ɑw?4d`iR*:q8>% A`U`%`oQ"d~@dD-~7~.2ыae2k0W#Ӳh a5&V9b22BM2/be7"k<e5M `w*!&&EЄm0?!@re`}\GASيO_)6s RW FPF;e" ^g6~"f8\!b/̀@dibF_AAޡZXp|]ʵ$. Ik" Fp* y`z` g0TDxG^ #oH4L._`yʳ wӏWif 5+Ɩ(@i HF׺\b,83nd 6fUS$kP _.7¡Wh0YP5~O}Yz}pSxrG }p.BL\ZİTUPR@!_ၢBð d x|n߉ 5T/ tkg=ke|$IMf "i^%p;1h4kXMd3#|Z@vVYCUՁ:A_ k^r][p@2I0?рX~]).Han.\?dPcnrJm\:D'`jR2& y&rC#\Of?NC N0(:dT֐-f [5ΊP,A|%!Q]  , ^OZ +n *k {P;Fu~}L~J?V\Q%8]`l@,9 ޜtlkfta5*E 9t.\ 5|3  Y62-xeP \~qO\)߳&@mCLiP\H0ڃPZA S.^'^$1OX_LԵS"c ! $%$tՄ[)1I.~Vݔ/zp}{뮺͆oZ«0zS4߯EEQ `.([ @@t Mb}T9/%jr g7ahԫi{J1~%´;+: J Ck )(?ZBRadxkz뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺+! S̈́R}̈X((ERF<~1Hru=pHpONq8^;s?P2 4AaX/ Ԍs.sx5oaڟ>$40 oöer1G݊~̈d=z&߇OJd>$0Ybd.Tm$ [͠V6))ZSZ& N觉'5y%lw.B'hQ#3$+e! S>v  E$o@^-4)vH0\G[iO CѧPrNӜ =ڣMiQiTm̰P4 #Ϩז\K8z>!nҝOB,Q څ!ofGo~_~UT?w3t^ēGeAtpF PZCIakOѹw5g>xUɖ҂@ IE+pmuax N˶Mnj$UE! S`klFR1iһ8-Oz-R yB'Ox0$bsB>34^3nEo/~Җ@ GpJ)=ZlDX4UPX3hEDnԾx $qmGK7{A 0a[r;=S $NH^JReV)! S f (UIhlg~{/۪~M-/z:EG}BMԴK{/Ao@|'`/ՖAE}71F, rך8瀪1bfv^SaѿsjH?U$OxE%]ncuB#)#wFû H$V"Xy ҮY$v x -;)_PMtC`;G͛tk:[U- %'#>s(lVw! S"#Q(\a T=3cE3rLuU߆RsZVs2,5,y{]xvt o)Nڥb끬#LK,#DP+[j@K+i9=챧wi2CJ?X?>'Vc<ޙ yDp?-}vWsws3GM 6wD5YҾT(81bvxnH <^9 2 DH8aba{Bif ;S]آgA1l8 R$[)WDG/c-mS?߯6>}qvӠP ``/ʤoN!m}BBl x #QX xBk9T(#6#Q֭Ed :d[E;/ پD̥ʱ]K{ETt{^ьKDI6v I+FJp.h4`=! S% bFհ`fpc[θ+H1ӲH*Kk),=Tي4 }} 7rQ13W'aR+6Qdt8Xf&DW:q?bc2ss HRPžo\~2.ÇJ,C/N(BqW[żz锪ZlۀP(/5(,&hSUa$CN=SF[NGmJV1wKoFTI,KLO+H!@יt-;^ />! Se([UU\KE>`a L:q^X$[B3&BXa ؀MUaԊC=`iToDV]6Qz̏)&Z?c7i,EpWlfd^TKn0_*@yJi/ԅ lI;(q*ɁguuQi*t$Q"K]2xs%UE$ڲ? WJꕩD"?(Z(_ŒNP2>V_$Bjɿhʕ%Xr~~/2,/;EXƏnW! Su+*lxQ"z`9Ū%j+]*<L;2Ṗ v_AፇC]%u,)Z/)I3{1ky44rRb. 1 ldHI"P5(pk1vRŸŐj BU0riG1*M|^4Ye'A ^-rzwWn"S:n7B6ě Jj{^kd#Ct~C۩Q2v,D'hmlٰTrFa,[FdDF^e! Ss3+`@z[%PeּۧH9oƊb>F>rÇe- Wf}Kv Upjc`J 6_Thқ =ɽ$`o7Nk GuU0lihRPÐESXCOPMz^,*G}ƙKQ2U6ğWJdBh(Gy8j;~5g~Ƥg*鋇\Y8|'֘~(S! S5A$4=n  Uڅ mz MӢ ];*`p*YP IJB3!bs8T b!a-4uCWFgc&G(wuϸ]Ḭ;VD> ӇlF(r^voɁKzŠ/RihUwTJ_UmȂd=S~FiYcaL(. hsZP! Sd*C.UsJuȖU}{  R?q9QpMB!E%~z0+AK*+Dԯjz!L7J%,Qv2Q(P<4iYt~>۬")gK3&y)^FTa86at@%.2#)LMkfRsQ$U2zSI[;RgP1~'KUuN .#gN[tZkwޫBa*S!4*9fIu vlWyUrFتt8]gFۧZGCK!(Ԉp0mI ~#밾otQ@zL!jT̡1Pu3F`k  /lTj,U!HE9E*{޻;)ㆪ,q4Mo7ەtH<܂^>KN+* o/ n3sF=jНetJСԫ  @Kݪ-Y'O| 4Lv]X 8et(khVвUf$uPx>!T>A1PF5қ̷4" Hy Jךbl[Be5eC2edQ K"j} >}Z &tlޞѼ=$mnuTԡ: h^^ީ0a|)GfAB0 R`J:,Vm ]k6(릹xPy!T: (ۦTPUqȜ|{>kW xPJ$&O%8㔹,Ιi"IPDEؚsCz-d֊a/4 D1D!!2At 0TwQQPz*9{:mvS[kR;>mX[)rspڷU$`^Pk;P瞪RZ&dq%Y*6 9+ZFy$<7ezuA ' g[Š%.d*$IKxZɈ&SJi37>lv?|g57,˧$L|?CY?63 KVN@+=+3c05d=s/C߉ṕםqI/'w ͱA3cc' pT8[g|*u8{~˝`/# w{2^rqSLM3A?;#| /gL;BH{=w7`{]|ُQwyG'$^U@1́+y1FA@'qX,59<PM0߃Y7H[4qe|<=& ɜs OP`R63 dP$G˜;E5SAKi`IN^k_~ y?d0L?Cot5uIq]Pz t@A`'''\"wR 1+-F|C.0JSH}|)'S[Medr!e(WB6 etod͊i2 S͉fzC16دC ,g7?22"ʤ?q5| ΘNA'?Ϧ T y [FfS"321 H&oF}x Yb&`<kw&6rre8WÍk;:w~DIDInaZ͊q?@-<~<2~ wdw2/pD1kV]A'L>\Ge)v CN HH$A 78<5\K3b`-6<8g@܌+,FrğN>Z3xȑL۟HG%@3yƇP?N t6(8`A'L'.lDQm 7n6?`2끏$AFTʤxi`(_; 2?G/!Y7}v7Z`Kϓ\T& Yn*m̀A '_Ø)? K7`ì)ZIDoF`E"%<Q[>e@́O/pj,++j ˀyx>[Sәv7f]pcP=+yj }_ww:9?gc⻻~t"_7eoC5?0[ ,dA3!^e?!]A@'ɀ!&Hd}` C@ůqq2 = F F ~DRޏFRJhlzTHy6 {ydLú&Y(2 58 8P+Ձ^MϽ[+E7|d_<щ9` X3*R C!XnX6ewDa2$Cް.h(7ў9|=NH}:o*lAr"3r,{Tu z7 VgVuϧ3p=k n[=!H0$Q? T? gڜ# L^#ύ~'_ |~Lɯ} #3'.ׯ%dƨͦY`3ndMA`''|O>'|O>'|O>';|{7E0vH t4(Б[Arf4-RzQHs??e@ ĠA3e4_XV):ZISmma,&uk0"kKgLn> E lS^p!794d?\(5ՂO>ɉe6|!@C>+)Oё|价#SE$ `}`,鵀ͱQϿ\o_C"Q<#8#N¼{D pNfp0{"?8Re8xs]A't,Bg A , ɇ%km- aEZI4C`/bQ#xf5[͈)OLd}.΀f,|^FhX6LY cBpa?/~Gptc8PsFP y@$<ֽ8ִ71"dOBǼ:|V~eo؀!T}>Ca ĮUu]Մ,X`.4(H=q]ITL)%T隋Iy'rSb,34S0ga:V,@NKfT#޻CF5DlCV,]q@P!T}a(0&(ƣjr J䮙sSۄrf":3/t`>oe5;2͎)1,Y)D_~tOYlхK2HSu س39(7k4Ĭ JV,lu%2Ba(!T-2€U3lo]YLE ǥT>[lDn쪟"1HW^\WJ52I+Dpurj"i4QhGb$SHhs7e7kt|\Ԑoڠɤ͋mB \!T>c7wsh9taB'p3Į+ E {K{< {ꮏgxԟ%2-K%Oͼ"a ^ˋW! SC0l$X8n+Fk /@c陥&5SMH';݆\B]+u~뺾)9ߙ/={2bbhp9JA8REbm GM*^ch?M~8=uT8 ΰ0j'L6hrH1IbQwW07ho[A oo/@'&Ҹ=2"0(B% F db1}Ӡbx0 'UP:MLp~#f\WxD b G$#~c>oeȥQNz`-! SōAQ,c7,+:UjD ;3!a'|tSA&JFyܒQ(k.y1y 5 !)L[fbiMUU$(,$/8m/@v$ANSe8~!}A|_A?ԡYmguW~_yA2 G!WQ t!UaT4mG2 5-uY'~ PAJb?≀ePYlAiTTS!PT$U esP\J$+RwREťf e hOt4dT%kV]!<8! S a"(S&DcZBRVX$7OTHjg!a0Q.81QR)xdTDV.BE_چc&cpѹ3hI hɩR7%.+ YQffXf$7cs ֆvGI$bfujaa8l`*"h5mcJ:5%p/ @Q`FB oO3t!;m@^HYPZV!]Y؜b2bNmșn ùl 'J! S}%!g7w)L%% ?O֑\G0nfRAvYO8'e,BoEb=0-d`YϏ,T[kGeq>8fx,<3>LieRQ β⿛CsUS6"XȚfʥmAh<X]-Xj[ OUعWuݤ'b!(,-e?0s۟7;`Z/[emDt @mR}pVEEB_ KX(/ @) ])6)gv4} +m*2hyJ{%s#?@jf !8}YϹ$}=F$4 n,CXx;+U+~p'k9kBb/ Dsֽ r=ȒI!8Sxn 6P3ysBm 5 Nw=aPp+>N~_ C(Ps(j5LL/=crC! S4 ,&`@=K !,[Ï?>3:1#A6I9dwo\|c>kpo 1{w;? >{v`Qjb~q #6@vnRpm3J#LKG Ona'ȗ3fpD?jf[fvVA;W'*}<] i|k&! S=# H2!*@AYoG!P8n]h #$+@tǧ1oJ`qJ$kufZtÎJʷ_[ ڐAIȦW yLvJSb3.XP23+agA5.]ݚ"Iy#-8hzNF+$JtIuZY zTVJ!+Y YNsï]ua J6b8#z cҐeYtjx:j_(! S]LFfA3`2 =Zey{aۛdK , d-S|Hsѧ/U$P+0c5@'GO+"U}z!F'0Cp6_Sc C)tJ|ʥ LTe6 HP\!!S; ^㔂# %^Cj-,ʐ#>}`~%.䶰V<`>TVd X͛ #x[Ϧʤ]]u! S"@PXQY $dLv/w+*d^)2*(YmKb{mvP*JUJ8,#i_~PWL|io!q2Za*]+\7<Y d?/2`N;XZM% E|:7( YNq2;hQVevP H,^RHaJxbhF[[ɚHq*/PP!xШX@aQj(qX򚽪PyIvdvq! S-Jd &!^ } nw5EZ )(*q!$2٤`P림 ~(킛 ԋB[~oRvJvD0~TQa38.9u$uAa4x-;[UCe._ST*+.\* *sz1щjKN4f7w fI*)*Pr;~k(>0eI`[^%LBsC zwRRa.ѓ5^E RӳmgOLAIεގ|Jjm+_e5ȶkf!|R@Mm{/TCM /r=@"nGqO63*P^U)&A JsRZ!HS ,߉Qݳ'zŇ|w߶ @7NXj bLmZ]Yd&H! SeC@ %$pcB@0XtasTKI^L".=SA[D+j. Ib{(y@aܼsoQ8f-.H_ʳ߇jb?yg}֤"gMVNh"LPΫXlk$%&Z12sEX+|ٮ̪k&BA cKsjZ솼iK1>Q5GjY v'5A'`0`'LO uSÈڈh| 2imQ?J ғ'@3t"sڼpD0|@۷G 1x0$G yDͽx{~I2 \_$? 7NH<С4A'LaAi#~9a 42<CzciZ\(Hx+ Yp'fۍ dβ"-k͎LFq6g9A1r.OQMȼq{v~滻 2X 1̸|wůU|p@3x=/K ,6^e Jʤ XA'5KHbSQDuL%+}/,` @^g\q?B`(AC9c?ϱ#{kVP:ZwKCO?V?KGEw A/+#~^e1xB2ڽ;NGߋTپ]UH%D>0UU_x :ܮG =\EmPˮ'DTLa 0xU-M⯋Q ܚ&+`Cѫ0c\W0D4kcY8e5"k5uMj~/v=d40G,x@]GqwqTsH#%˨vN[|%|kg|#-jBӣr~SYA'w.rނ~FʳGx  DUĖԏVFGhRn^6J4tA&-j3b;)%Q12EV}@^/A(G$n(G#V'G)&}ܜ+ܟ Ltf^+Y#,4`A 'g0e&@|@ZXl&OLG{a?c)kLG#fDK^Yx ؊bA;ɉZ`"t6`3lR+>^nn;_1C4a^}C!A11Y O!< Sz6} DOu<-3]B^mKxWGi6x A@'E 9Cl!ޝ2a %}4p5ɀ"-Մq@fs2`jcw.'i,zΤpϡ0xpb]^u)?'s¼D}N?~ûPߥ}O&AFៀH) A`'~xS$h޸.,k.`J#xm  `GF@v\_:/?*@ b5A>`5| #xg `rgEA FP k0F,;I06A'Q0o]KD#BK6NX(ӘKBX(?p;Haޠg+n !' 3qb>/>F(C4q:Nc|NA =^` j~h&\Ôn @̾X ["D7O!opG"A'@0 Ň*eW[%DEnAG$% ^dC2yz\gAP!WdX $E~Qg砜Fv,c_Gμ?o&F3)"b+3A'$$r| Ǝ&<e<)IiH[GYymp26DWɘe%)T }B xx"N#9@p_۹i^`0$O$ 2`A'$v1b tpy|} _x0jz,;xe&P`al>x' lx"5bfW/6 *r#XߦRn#|4)Y3/y49& RdƮagm0"ՕOA5]ۉɓ ǯ lU~Fok(~͐3bP|*BGÄT<$DO&%?\"IL6> <'nVрeM'?ؑ(N x m'O sa`J0DZ6_>يR06zlRsI/muM,&HBqh !y NXO?tlBa>^TP`2Psd੹]ɂB J ?\!ξc70oqm^e(;pqSL͘>L\XO̜ӟSsʆB1X'Th HlEZ㥟!=[NĀϤ$v&Z$poY4` ^S69o?~ҽi)~w%;TW_o7I@57w~`ek` G3:oR}p.@gfkmk_ WR7߯?r *À! S̈́THނ, < n38<Ĝk2é1y VihJQB NuG/1Ix@f%r]D4`[ތ]d.(ǪorY0BdQEnrppq_vM'/*} & &4=_*O`A@XFg|cp @6ܴ{mgM;\8;Pbq#! SM@U)a(Al̖[dz?~*IR0 dP#? z%mZ戭Y+~1DɬE2QL9S`#{5GQ}˕i(]/*7UKm cآSwNOs# >j~HL0-_ #N`JAo\L>\>hg_V ߺwuAO\F:Ә" Z^XYw^ӊLy*! S!HDn bV,V\>7/I-&t̀:m)sf ?Nj, Y<9Vp0؉AttWNWE`X a ]zpK^S/Xs Eؽ onA-J8N>w% 1#%P@ (JfzOYڬo)s+EX fdZdj;zQM-Xq"NsEptcM~3Z WMAIOJlvW1qSn`Ϗ5NRűxi$xƔCLR 㧎"ٸ:;.|F.eDzYhyfjb%]OJu#CnrQn}z.vojHCsw 0023Je0 ؏I?8j`-IQzI/T\! Sa%;uL0AF h'֣*b9$@Cf&t@O&{GU~s7Y#2BGUA*)I,ٽj_߆Wu?X4uU'y"A{?a/Jl)pW֓HEu<3؎\rHdP tYg[I&.1,Y9OOE` AjyVeH %P : 1MZT$LK )`@ϚAG! SHf%+v{@85#|vr2sQ&kHx:)\*$gHbrosv B% c-uF( VToXTc%R~WS .To8>D݈PbE2c&PEn"BMUZkH qC & zZdvs?R6p͸xJIfwv"Q 7 &pZ] 4)Q@Ȭ)A [e4*ɤVl/ `fj8 Qg *ԭ╠VB= s 2&N! SUEd$@*P0b+v*2Q s{m0204P6DH)!k$btwm# l`( Di Oά@8D3IUaXvj:E1`t$dGbGp%:}2-yGF|8,#9Jo&%(z`lhƧ)bP2%!$Qc,XBNb@x\mXMmVa*-i. 2y}F)zpuQ)[Kozu^53o!.Yc@ p祌4?3N\x! S`ئ( ˍ%$RP1a1G^/ be_-~`|ʀ$#>@k"(}$ヌ=tho I8w/?1|filg/|n8 Dt, @7C.kV{w=݄ϘCϠ; c#N|n/^{<8aĜ'3a0 '}Θs)ـ1{>mBaG3]h('ʂ 20!*SrDp p&B@P pϸx{a`y @ CۀšOc^of0m0gpppQq}<<<<<=ݤIha yvo>e0H1kp(x{{<!-0(x{L?#a1`{^m?g)3!L< +ES}ѓz*%yѴ{xf7Tshi~Εh[ +@su|;qNM<]J:.xw)/7a'2O<47XnN AW3_zQl W-^Lo@ġr8UVӱD=~T3`MWOg [!ri}~3ٌA7J$O^ݲKxXde#tg{~8^oմ/$]%~S>nB=Cpp!L7J%1BTBMe )nywVĤ[8_5/Y"w%"ǥc@i#io.H>63Q]x ͍|@dv >=M1٢xSکg]5i*pQ(>^ _T{'o2\vG[t*) I.[TfN)u"UimivvUEllȒ$ r ./gggITBDzRX!jTņ&Ƞ`9sOM"T@<6EkIm&m5 R,UZhP:r&Zkg [-66bClg8s%}vxLhk]]'b"ZڱI`}=}Vurx'Yץ,y?Ge/i0&5c`Ssv1Sf~g$O`3az^xL3a CۇOL'{&4^Ɖ&?~ ?`CeHox -jkwx*C֙3WA@'WLiD0q5ID f T4}5l! <R3a m߷| %ه%H/i(ɏItAa6|(#e??6OMR7AyRΆ`D`<& ɏcquɟA`'=~ut}*6H!`n:k dom A S>ma־[y!{y@f h KL,=J<)ngfS<~E6 & 4| kLMMwɷ'ZqS`Og&3Z^>L#7\Gc3d?F4?K#_fE`f^ .r}-&9X(b5A'%qvD"?=9]~:tx)ʥڠO6Ewባ_(8?B3;*22l  )/퍟tc`+ h >/ YFJ>.0ǂ pV_5 < ^.,c`aN*9XQxO"k׉蘥/%^ ?QsCQL #p%TRy{ ^?uuu~ ȉ$.O/]@05ǀ_.x˭a>iB WmS?-p@ԝYf!Ҽz^ f \36|O+Wur(5˵|=U֝qv2 Z9+x꿈5{?ˇ%re?$MxFN|i1Z3h,B͍&6ri25?~0pXU*ӪATl~ _~uR87"$Ia\G<:p(Iq[<]q|"Y!S) Kңf?~yP{r/x ~К>@3{ww?ρ|A#آEU13ϛT;t]4%%ZOD6SN Πw]=q0LQ*-x@:v!!lu+8_No`ʴN7!}n*4)+:>0lOw\r䖔"uu᧐˨m(,K|%.X]XTS#BƼh B<#@8pAj;5 )LUL67P#%-hljHy3pb1`M I]NU-U-rr\L~v#x)$S>yNߺ#Æ2 x]A'LK͟0wwȏ/?+?FLz><ϐ@C24/ɴ6#ZbMQ  tw;@N +g~` "_*ntbA '`oֿ^?@ _7fL :?H~|pJ r; hz |k!v), dhz6⭱= ب058;ɐ<İ m:4(Voֵ3%2Ek:?8Guk v$/u} =z@MLh A@'t>/K`3`6n%`BOA(?#!xN~b?sXCPܴcQPcn2&EGu2}=7с rс%@g3xj" ^DQ Ȉ6;-8ЮgX:ɺ>[-6 ʹ:|Tz#" TܿCILcЌg17Lc@p4#k <1n FoFo o_oFo)ny? bŠg ?kZ[o$i`+=e0)Tc$_]k~hJoC?5DP vce}Dh6q8F#g0d}c<02֟3bmɊC^e-@f9Z~ @ΨS0c琬HzGxOcw$  m`_<x #Z*j@7J Ae͈uTpA''|O>'|O>'|O>';zSrL@v V`E/Pאc ^)TJ |%3n&}YC2@:a zU@:Ѥ, |A *tǨni-TYPP3xN8`=?E~1(gŇ& 6 `.|&۔8;V`}+âÅ)@ǚ<ˎP .~l(_Ecg??FxP!C +G XrM#e怇o6log=a4 Dy#Uye$e4-yMxy뱜+b~w+/0>#y?Y|w<)\$WA@jH@e+C#KX{[B~S7 L)P(LhNEnMMׄ!*$HՔmtdƬys`w`O@B\CbE$ .L#~`/lA!2tSS<wJSwxZk80byNHVזNm3xDN̫*& S,-kFPԇ݃; !T(RBU^jXJE8:@$HF=l hBOzsmJB ]95*q γPeW q N!i9e R#9^4)Iĕu]y"EK$DR\ uZ{b%~] 7 ~:9yae"IzX+!ٕ8C%8ˆVj%`:| ܔ!BM;@wp*1VsxPw bYp!T}FCbEa96ZY13 .$3.{KdN>W2G7:%KjCðZ !L6sBӃ ¡GG4"馤U{(Y풞O\ qxfJfؾ,*U$aQf)s ڸcR& !FBs]}XUBTjjO>vmJģ4)\ v5$^yJ"sH%gles5&ꩢG]]'W?s񡔠p!TC0Ъ@]hb@qO F̑r.I_GmI^G!Љi 9i9MOщ98al GWJd zGs`?R(D> mFyv5IOɟ:_MɆvdfHS3!ScXRbVj)l%e0 FD]S#WqX"BI'"-:*}g,@%xgxӡxlAG_;9O^l5MD]0`ρ)(b^I%)X X#JVXߺ[oښj{)p*I `)BuE@^LjS5!(XR ƻ/p6%DŒJX! Sd2E .LZPc zSfbbs;3m4C^2a \ 9L=m_1δ)})L8Fp yt_ݧ+i;LZuАȶ( /@(H+1MsEmgދ+X5r[Ֆ}{ܪ^ԋ|yXt Al U8w'0B\kNm|T)d*#XT (H BYGh V! Sc6l]3*t[*|ZYp5'UBS7/"819;@58RN"u]ښDڧ4D!,I xM= H3h[5D䢋DԨAaVg״lk8koyQb-GqjC+Қ^k&A#K޳{Ŏ"ƢNY c0G4$T'E^@<}mhh ;؅0|yK ~`E!UY)2-0[FTfڥin! S`X($^ PKXfH~q⑍0>8`ֽ !"$1HڜlPAc/"z@~1~a[APF. lHm 2C|nSirU-85y:OC kH YlD _R (}ι;!L^@BJs猙B64ٓ,V{3{gV. ꩛i8,wp! S$Hh"!f)-؝v}A=.nzi3LmAgdl@B`wgFWmU^ԹM!Mow8:~tE6Ch"W3 2νnY@9 :1ΚU@Pݜ5ݰ"H݆sAYA[$J%YI!@.], 8e\?$?ÓM^xVl_O[c3Dˬ/L4e.cv\әYwfӀG3ܵ L1Z?Zm8! SD$r`Zɚ9"%=f].wtcL'2@1  ~s'tOE O5 34<]0NF[!BUz7_Rrs/3\#WȳT̲ݨND!!YO`7=$G1]uqW#P&J_muz0U~'XW-kĒm9A++ҮkZ!m1z LhPoIs6aL'@! SIԨܚ{>>X/-G+:p|:b$U)Ta*GFnò\-Tb;% h}ѫفG-3v*STRe*D-FW3WM e,yG-#;8?)UT w׳%Ry 1s]ϭv Y-Y+%*Eф- =bUmaR!;~v:WF[.w! S'"TXXUMGUэ@7[<rf^PQ#<j|Kݑ?*sϫzG,D0@y|kodm!`@90v!`T!5\,TǨXk-&\&(LH F`dWRtRL 5|Su{ŵTNwiֆl돣)fc! Sm" \tQHR%β cl8#T~-IW o|Ҟ1! œW@3jnQ.3\[}@xj: ˗ó*;?:Cb#50_{L4)QXB Rhɒ.'Jֱ9Hpn=2P"OrehPlkt.iVX{"_cmr+%TɽCh~*6DrYi4 @().!Q!X /.V: 3CB !Q&]l%K}eR-z:/D*Gt ,,:e%QwFcUjtM ";k9!+kDKȴ$"J:81h <0 tZQ{(yWLު.rsKH5XW슅ZŗSHu?uAzC jiL!(om! S&!(B`jlH $}SCogL:'R 6-lk/a9~+U{8a)'tr$LS{^x-2C],Ҩ1ucJ UkRs~4*4XwʧLK")u!Қ-RZ26}!@,TRd_ɠf&x*W姮#Dcn/#!4s%wsA't, iD@yelL<!(2KBHX\oxȃR탽&tM J A'`, 8с!e04.T)-$>'+9;瞟-<#paa_m>A P_滻oxM`3;!`3n)ڐ}3b,c@-o~'F6n#(<JHkGdRZA'LaAXi&tfʣbQYF\b!J2eDMirt;F c 3Ǔ*5`A'o-x8BC&8 >#?`4'"֘ MCjлgO$9#/ pLHA\t]y#]!sTXe(dS?ZD᎐ hA 'oAOgCi 9k%o D\F`HzSh?Q 5O%pjex$L3)5*Կ)C4FL hGGBb"I0*O'DE >g*% p2"oj/0A@'g0e&D >@ZXl&B*Z##zF.xedYQ#x$ yn6̏ڂx1 ؍k7L{;yiYo}+C}9$"rD_%w؏#d0L~x>`(;gt0WwLP #"p4*q/OBA`'@QL2K|DBZ#<-1$9k)ݞ bRV`3b7p0m3!^u;V͊3d_KDLCLA^#&NnD"%?gH:WV~H !6x%CDi3~ɔztA'z߅- ? b\l6H %2x` !3 fJd }' 6 7 vx0?,"2D.95>ǡc< >C,P2 2Ju`3`NA'Q03aE^" Ģ=pT$1,(k^.Ul9X G~l?%W"? Qg>X?|@Š1;4ajfQFL 'w'\ KgU9h pianI |_|VҨ\O< 1du{/bl.&79P;e6"̙@3y}>?iRʹ#[r]65+X-VRF7Rvhmx`@xB.1/7",밨#A'@X׀1`EC(icS=!Yh##HIȃY5N@A7{ ޺B\'͐I` $Et؂[<)"a(~1ǷpL~H&@3yD ,C`0" :q]x (LA')M "!0pGG.1"р B*GqR8oY@l ^0م`ׁdyA?'ňqLNfAe:/ Xrd9-}VA'$GLpZ.ض:A%QAӼSi8B0k޹kiLa/.YS@0$ S>` L8|É Qs)L\kTx| P7y6 gPipH-F}Y@ K 7L1/YJRO(Pa@CgN}x7P&`h6KAՒ_H¸ }_``mm z@E?ɓb"rkDD ] MAD mj _94;.`0ԕ*040fˆpݘt!s~e-r+d``*DX0Q8 XԴ<`$`?LrlZ?4' k !؋8p Νw6_ސ377ڃPTݯo\JʤMwaJ%JW/aRuO@ xLKàV" P?4ty??G???????????r ?g:!! !2P` "PK T,JgCW*T,Ñ}"YSʀ%XteדyT!*r| _,bqvJ: 1ό]@,kدדy@,;)Xד#gl f5xP|#,ûЫɛf !PKqh`y2`! Se:BB((*d`@ zi;||O~ Hͺ',=_n @t\;WƝLrfw`qD Du B}}W t^'Ƚm-PV kOh?j8l/rVQ)d[2;RW\f,ئTyYs_,b@IA@PVr)I5eh2o4{! S`($@@ . q b[WeWy󬬙6E~< Yt8Ars.Suku*DwKӠ]C!|dWKT#"lO=^b5 EV D""-f/?lzRc!#=mr's0Dc᧽+K !uuy;! S̈́R`Vo@ 4 (?R^s0!Œ&,]8/" 9S\Q{u)qj_V%c5 ԟoK:m:jm_[Ьτ'A9NrCo0ZK&wf%jN r; Q((@y6 n8<(Ҧk8˩)jKaq)FUnO ΰf}! S}JAT, U`v W>aLg]逨 DYPٸ*qpjc< ,'e jHgwNZ^~Q/tPL, N9.\(;%ԻJ?xkIID,d48 鈞4 iXܒ=R̵Ǜ<؜S_i3 M@/CwO-GhA&]nfU*;v\`.9;Xx7oPxtj$}v/6Ul< k̓HL )@\xYS@/#Ҁ0a_]}-Ρ- U:53-$[UtD~HA}jvF܌PYz}"]# HgM`N4! S`!Txf.A'Q_P11 `HDv% $ 7Gv5F, pZ 5~1^5θx :dF` }<9YvIDsЀPa|_y_1;X]!5*X+9Qs^:^tVf>|`J6.ĝMW9DOUMk'ì! S͆# P>:LP5 i&ȟL>uut&`h9aX}ڈ]Ŝcq.-.vȼ$Ce b$&XT )6 O*ȪY~y*2\(%Kjsj:0At:VS\i 7)fgpz;ÕʺdyEFE떲Qu|4ݒ*P!RjRZX/55pdGu'['MjatI{ cYؼjs|5VhDq! S""ZR.O[paeb5Х_Z K͖qΚ2Pau["v;+_s%xvMW͉Ck`.bzFcÊQD,69MiAxS \s(WYDĮsVq=Tb1l6t3`Р~XX5]~a#~tC1 6 A%m»WZԀ`ԟXqQ^ uW^5F4}E>]! SeSC 4URkI;Yl#V֑rhn/C57"Rh\̏+"*V8`\q:{ͳ M!5!.DMEn.R7뜺qhZFQX*V&d`A$w倥oP:/ %"I!Q 2 :<%e*@P%/ Bu=2cfKF0"R1g.aCmp9:wELt4k2FsK~myjHUw㖑]&O 񝡖;! Sm*(bUV^XJj1Mrx#za" ^U hE]s4-S9誅q{ߌ `Rec; aZc Fܗ5JHBi\¦BǗjnnf"B /Jjd=Caz  0ĔaNlX|Z%1 ܨiJ>t岂fiǏ&sn!m-J{4~-:آf3/:l?jfa:A=9#@3aTKPWƁ8+o@&Y3$! SU!YEU% -)R<,3\Յ-Abw!a\ Yٗnh^nvĀ& ${:" Ar  ARq cBpH3,YHk7 uF B ۱V*PXb9$ѯ^ww)OEE{lXbI`e"GZIV酱'nUٖE{+ԵD έrIUώ'.3?DE":! S;!AX r)cɑ^,>@1Fs<>.5"< )_De{~C%0zR9}_(b )Q`<˃,% g֒6DcN A /F\㇝"EOXq) Xqy52$8ajD4xI{)d x]4<17Pʖ }'X!!!*E}AdD)}@:!L8/7)T=é, Rʸ MErHXLD0GP4Յ9J^u|xLU/Zt|=U ԮNY؁2$j DMi)&a 9e~;Âg/Upn @EQԠ>F=O 6/䯪`lG\j[P-61-2y\mf'%V ^2\6 l1*A@'P';U@`8 `ď<&eb"A:IiT6aGqSw3]zx.n6:d6@'~l1i' -TVH ؚ~JhpL?pI$7^I: 1|X|+ɆӻlP #Bۗ,4A`'VD0Ha-I/\IU ۀOKqzKq`<H*Oh!`0f 8hts'roĕ\ Rs0,NL Yb~ O<'5sJxx 3Ww?Ir_ t{_\ki4;8uw3 A'J\_.UŖ\%r T/èj?Izh4< 2}p:EfCER7ro /,Rz˙'& 7o?>iߞd0L`ڧWt7}8A'䦫}ρng z#'{lK?KH1e?Găg9&hɉ̀;Ən'U%2UUQg] NE\r`90:~`G.1?!ʀf%:e/ۃHLwRd%D.s@A'JĬkOAt@ClD)!kQ#/܂L:l!ܙ*y7|.1a90z?]}$fNmep7V6ypMQ֙x-xHA'} qi]C.; "#FPP"˨$<]HKr'`3`,nݦd/\,lGU2+P )zfQ90?z }H!@a͈ta.hT)巧(E?sΏaE0={Ԃc ̞Pb<##N}d2y3ϠV A@'`KêHBsi2}U~?)6I*wl|c'͸;}͊!adOE=Zt C:7ϱ/0wxy'G?\>Hop$72L^H ?k^_vHhd7A`'tKxROal!Pw"r@E1Bdo/![12h$J{fjCp׃M3c!Owkx8447r/w{; 9_Nj0G9 $oa`Iッ!,eE [!&8 Ȅ}}}}}}8HEdI}‡R  P8zи?FVtEYܨbU^xNNNN!f ~^fK=h]~0 մAmV”Pbҧ ^.s7pih2?o%sAL;xn =ʉ4` F p:3A>߮Ctai00|6,T'ƻZF t`߼{vPfbQ ᱍen~4:1vql;6Aa]jjx?1"9R}qpFj! +((rLT2 C#ֈcBfhܸ̀`IPk:o$glEpK5B_ QgvnMRވtaQK2}}}(3$ Fb|:]cBiu]u_QLȊZYtKHpE}(p#"b=``,qi7Jl/UT pv.4I]Cy?rC5x=1Z^)zzy=9xR(k1:e0Zv6Nx{V~hƿ0?QPJT/D}*t1$ynQH`($?, 7!**۔6R]u]u]u]u]u]u]uu]u]u]u]u]u]u]u]uR뮺뮺뮺뮺뮺뮺뮺뮺Su0묝u]u]u]u]u]u]u]u]u}gru]u]u]u]u]u]u]u]u]u]c]u]q]o]u]u]u]u]u]u]u]u|8PVAo2kk!#t!fO`e`rs9ty9u]=u]u]u]u]u]u]u]u}]uO]u]u]u]u]u]u]u]u]u]u]qͫu`0NTԲFoyhow{qG0Ō. ;ad6H]"f[a];F>^C$Zr=8 O1(x B[G09yq}8LA'<] 뮺뮞!8_1)@#p*Q+IU1F/~2LX `  ] x!fȃ#qߏ,3LJ2ը&iv1/- \byl@h1v=c`rs5 3.cE+/Ć4L〔o'^j,|bm4`a!Y_e;¸d%81+XP4bG$7@P &1a\Ʃ4 \b0`0.>"o!nR a/[Y` ( xcUdPp݄i_$&b,c9bx-$zl,½p+V&$c([j]_ lxXM`gd~ ΌJ;L=ΖB2TM4Np%0Ic^xk!SL!#k)%x6dOPCD<6{ ;a|+f% |'&q#*WS%e@/5h"KBG0HIbÌjs-=J9U#@8ѱ7i>Ng9XVe E4wWgh,yQu?%50 #-{f>&Pl_MCХ;E AxCM Ú|?W5!v[%&4փ;S1AZjߺ<*ex}4C_֍& $ C-=L)H>r>}=oys8^G t?5.dh_~ͫi' `7ޅot m`VNpYya &mm05fbB a濆=X66uQ JV,mu{a%ɠbTX*RD-o`NBcDpP/E:U>to F[KY/ <:kN$f{/ b 5'eW:j=4t!R/.Bd=2THм<%Nt]x<%L%]+ Ok#VJֺh]u}ǵ]˥8]u뮺뮺뮺뮺뮞.뮻7X:ϋWˮ뮺뮺뮺뮺zu]uYu]w]wS ]u]u]u]u]>dIH8u)R$0j-P8.+@he4ɀ!`k.k ="`uL08z`,gL>Xi4MD !b`3u=)@nA5iNgLkq(PH Dd29惘L~?>[nW1? . ]Gu"#L;}/B[RĀ)%A8LB  NE`H=??|?"6_ !r_ę櫐!nL@Bi&w8ߋpUcHH_3h&< ,=@5 θ9HE INd$Y "f#ݭJ%pKG(KL/(|@y ڝD?= rܭ,0bu0"ESA=~x;-AT _a0IБ~C_^* t {/۟8aqDG |(6Bԓ?`׎v_D@b_TL8H"?.A02LpW-nט<` `@hgw+ ΩSӑD`L08H_0e+ ɀ&[~ÜJnx&}Lظ^L3 `$0é2g %P=ɿ`1`B勗y@@3Ci7XN/!9uL&(Dy^AQ9^э DټK>dH0I޺Lnt)asv B!&vE׳r=IPuq&Y|Ce0 [c-ɋG_4uU=F@}]FW6udh.AMU_@$R?k!溼vx_?f!-=3w@u+%# h+[9 `M5QĶ޽̹ ilɚ'dsƙUA CL]`;!u@ %vɸ'dF'pqwP~^/ 1$;SFpMWA|*([M ʢ;[u ~Jh9h;x8܀X5/mHH |hxLt l12-a&SZ HJ7˿C\4ro|?{}'!/NT=S(`Z2wB%c1IP2 Ǭ43]ɘD &Olj^ {6%#OF !c =xη}Yj5$ `/ "@blx%(2jq d.n E[7.F7 `$l_4guF16h)\H"Ծ ʽ,ɟK +ߪݣ7Mj˭15P@rɤ sS8(Yuڟ^׃4o?vS`jWε˾n3atZ׍>h;cj-"RQ,-n`ҏHR1SR?I6L/uP=OhS%yz!Lx{<*5_l l4>*< B Or)b;{gd^zFrRfZz> _z:*CP5#Iԍz'ZT&<"]G!}֐5P1LD&C 6r䐧Gk\A m*?]~!"`gO@$Odֽ<&$7"Όyb ׀PIvNCL?;u c"l \R&0n>[C\?aHҰ@IT1tmC&\FI`ND_*US4c!MIhX#$PxNs9hz3׏k w!@rutQo;,7Ūbږ޲1 A& n? {|`aEh’[غ JLa!A穸 >qߠB$O &w$\oDH O)?_/"5?a/jPJ2YmY@SA>83X8`z@wȹ@ST sGczR#=hVjqm`*ՈE^zC)0wç;x7 ڥ/{G8xS5 5DNL>;W`9/)/$~k~dw H¹<Ar/Z~}x)e/hm{ p~!<9 j4kND?j\_?!M,?{# .yd"WSх7e+DHbPFԈΝZ:w! "Z)][ DQy {'@ǣB&;a9c!nu:X _p_Pwi' x!B&D:L~+QGёc»&L3+Ih^ Aઞk`oAwpz%D-]ﭩz;<}v\"?F TLN0Wݓ04 a7"W`1lm3*D0#Y C"eOCt &UdjF7"*Ezk!Y'&!" p6 M@`Kd0>F-w+"Z fiwM d{mL03 "]_8QC!ֈy8&3~_hL.b)eI93}΢$$B?C۠>@% :#z2jqBt9i(K#jp,ik$R2. `zy{+R;VzB? 9i"4 4<@VQ{^ ģjw'zwԐ-Um\ϸB M93E3 `5OXM3BSX21@@'~iˎdB>`ξ,M0x>l}R" 7 B H\BL\S_iڋ3Y|h60&@fTdz@(7-YQDa6Է~ 6I6IlEAem@Б  VM@ \1:._Cւ,Knkl1mQcr1\}{eue %Kzyp1fq+-ע lkb+ 6kTk&T@ksf"~f˨bPn.QK>X ;# szSx6<]ra1-<\ۻPj M5i?Bƙ*KÔZPm=`P{i28 :@`Θܡ]`(ZwW3nv뮺6 A塕dNiFh.9%!X fG\?j_'>NeZ(Sŝ3nXߡԔYdHl; r LE0{k1S0 @~V(:>a_ wC 0T l.=`6E4ݷu]u[l'a1?]u]|z f^V&\zXٙ36iŝP=|R-`luoG3V7"? \ Ҋxs0Jb%΃FtJV)~R wo Z=Bm_7BjU5Ed,?-L=J̨]*!"SL@P?]bX\Q,[뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸k{!jT D`lD {J3)JDuchVKAnAP̻bg`.j])(#6e(N]FҬάJ,Tz^88QuX"u Я[( TL +ųnV52 ιSSL(d|+Tkx&T!/ cކ<` 3rl.QQ57K}RF%h*T\O'_U63=1Q`=U17SYzB_: ko+Xg q )d:!TJFb@PoV H$Q F2$'֊T*(mj k>?[0EdJ(@ep*Qϼ7%j'*o\|H$Q\) k&6rp5ذZrŪ}CbH)U"TKƐK}vFRz!Cdu3KH\zYVuG<:h<&g>i ZUUadp\"Ɛr_!iqE5Kx}zs0sᒦVR ݨ%"zC:SkUgU q$;9u5yPngzZܬwcRG\j>~ޙ8(bBq2s+k@ !١ZNmw|W> !TmiA0BAueKm&VW$AHUslCBD|B8!TM dAndFeʕWZ(+'UMjS}ʹcR5܏ èdLNm]ldl5'Tjb<](᳙یi$5txx"~lCʪ-&LpD`dqrjmCI,ѣF[GrФhmBJlϰ ]V^ώYT@FI լ(Q X]/xjԫ:zHƜQŦswJ+n)څeJ-kꕄpAO'0=rP;!T5à(@Qt,a*i5ƙQrԙ H܉̙1&bpZȻeIQV‰q됎]Ω6(O/TS:CGv" -gR,ݶōs(jH.dX)/r$Ĉ ˶mƐV)'@jBO,LE=(lI)"%'PZ_۶~h‘ k;pImMD}>D7d(!T` *5("k(P ^UUTYWel]jjJ˂J~r$ؠ94W K: [щ[QR/@,a;j)oړLUR J|Ҋ^N=2Cma;&5u/}ߛ(z-ܝB-J5aBono>@4&/{ƅNW\DAij-_؅R64!SE0PiF%"VKP pRii&c~Kj}:}h+APr4gWet%t;6?yUbb.v~btΆ&l PWr!UVP)\jVaFcQכ2Q\VXG@KJUO4]4Rb j6U\ D[E4^BPB@p/`0hϭ+(5k-KB XQI$;Ue 5-`ED ^b2qfYXu! Sd ڤ%"a'%*K&v DwD @>5"AR(icƍdn@ѵ8tF¯z[S?~<ʊ0B'r%yv9Qs %oJO}beS 1كD3^ J9Spnwe&ץ@\$&MNYX :쾒1 j1 jDrTMT'YBI "GhBQ`! Sp.RT`E-):Hn V ߸.7M H: V]-zSJFg2WL6ƩzڸʈSM=Hhh`VKZ*uW$JD1@qՋQMEjҾb zd{na+€)d)dF)Sdvo5U±˚ѬָߌLrscݕP; xqtPm 1ʵ]u$=G/]qJLR;Q"Y #@-"| ڳJBPk\P!Of f/eWБ$N}lJňkJh! Se F#\Pʴ Q7iENx!`bXwHt36 jȉu/:JJO +]0}V1- X TmMsL[lgGUU @fGWm֡H²*r5;  _I f`UTw܎7]{ZU*ibDrzP+GDJpu4h݅a H0$i~~?R͹Y aDS0[)g~@^ 8CBZ ӃDG[9P 7-3 ׯnMe^f2g- :]\9P6*׭rD B+\f=`9Cc,Π/{V:&{swC@l 8R4!_ϋ+dF'P'ͯy>B>r>rql]k:@{%~3?m'! SeQDS9XPHsFP+J*TL8Q,cYL2y uű ,ZE`$R<68^?e 2;ÜrV蛦<}@Ac##UBZԒ˟Ά|t[m"/bi}HD}ʳ5fp%Y7v)5C" TOۊZez3\ =yPj,ļžZ@-%oB2 ?ȶZprRǒiO4X(ݭR~;iN[w! ST nE@[PE@7OLJo Ѯ(VsDbMKS%f;mu-CHjT0Cpz7{Z'Pu냁&s^߄rЈR{κ0 iQ@ UWq4cwYRβs;cHr>2dC#xמ9gN舒Z},A$Θ9vJCG(WssPk3JR{bc}gs>fH+v! Sawi@f}Fu@';#~vWweo},a $bH vQ'݇Hр$,{ }# ? |zacmH}ğ1\FKPP`~q(=ڼ>fA'x;`H;>cC䨁Of 8hoڇ >0 ~>1IAt &?ta״ &akK:! S]#5Lnl"E4Bp+.VrD5hi[=qQTsǯ0r#h|sW s12U&Cyv | $iҭt2gIxdqUJ*!p]_< QYXC2Y 5 $u͘Ý~HT^ CG߉--d&#*`oau;;0T݆Xy+0߳ 幌EP!!xA~g]l26+"p! Se`oyyBX!\}>9]m,0IہW1]@ EvXoES LA ?]JIwA'Fh3s-^H$ aa:1R 3*5TL#.SI /m*T&8^G*!5u83r܌9 /,YMÿnL> Xe"-R !X:p!xõj@ s hpiQomd\TgʋLMIw>! SQ+p6^+H#oٰ:7NA)/N wʃUWk:lA UC`4x܀\PZ*jwPJ] ]3,Ȣؔj$@kYW߷`]勔ea_˿*[Sۦ.3ЮnBPt :z&okAO;uS,ȢZkj^4M H))"*I ՚oR-D˒[v77T:y#rG! SfG2%T 0%OSfiUmQMå,N?]LzSX.xnHyPuRR0O  2sUIn(+%P-GpQDl͹k1SHm?3hM2[VZ{ZiH):.t+\ΫKi>7XK仹DIL9 P \~k6iOsVסTіhY-'|O>'|O>';V@i` ؁[ ( 褠 }@8D0TTK`&@P*' 80D0WL7}@:Ѥ,C^!(:+Pgr]h1"K*B7N8ğq?e DPWzoCTX֏eh%80)@P ᗆPAgiQj}`8:s H>}P𾸩6pu T x <*8(26"\ ,P .nIܺ\ 3???+] @BoPYhOuuh|!kLr%x0K3T"Ia+<@ ›iWf]9naL\8^GYW:yOώLvLtGsxO]\;y~w/ou8 &s;p ܥV7_pv}LnVM:wuֻ c$^690HN>H{NMnyyHA@'wZL 8X(@PaDXd@\$)8K怇o<3#pL?)/弽 -={1/͈v)ǀ&3v&%Dx uvO>?OQ#x5X fAO fǑ"egQWRP$gg?N 00r tn3!U&yNop5$A'w^!0ȟi %@*cBqvdj#?l.,|֙(%7"3BfF_’N_FjM,pb?i831pvM0pRgKܼǍޙL½xߟDt#xWϱS} I$l?v| s&U&('um:eex5"@f)A'!}B7 eVh,(H2'%$VV_|5=8%?x *S9knM ؋(1<Hל.K "a?q4#t~ O1R 4~CmpS6+#dٔ ?P:A'w^ lh@d4EKDfȏ4?WM1;#$o@J <xxR6"fA (']^fɁSBq\{G z EYzVB2#x&?GowPoP6ג#9s@ԁ+A'0wBjPyHf$ @1DDF>ah>*q S#c-\@fy$ÏSLfaVFZ.u3h\xi¿z͐@og/ ]?U wW!S'?o %?`1,$Wf&{A'$t`"[0OX^Z#<> `Y0^ËPG ؁R/]ɗl?% M'v>|~ 輂 x992&! SJ1T QI@8Lh^D`+J{- 3"+epUJM-)0r܍t2(y11t➧5+SD"]%Y;ZcNJƘV"h/r^*iR s2+d Rc;t*Hz .A4$_I0Ć%j Cҡ6 !ɖHhEyPZkǞ`W=)lc!ʻڹQȊ Wش( 0KLp04bo)|KL>ڇ\~v!\)(dYP_ZFwZ5tN/ M@Ez/}VN;L_N% Nԗ;i^^=߃Y#{i[!B)qlc! S̈́$*ePJ" [Ow_dBr&*oU9ݶ`q`d$Aaj@G@wv)ōC)|=s]T.=5[XLr]*Πb@ (aG$Z@@MS/s,"]$݈PK!wUΓ➵9%dG! SqG@@eᇴ˱7 ^VN}9R(^^Bİl܉G Q6-$;! S`J o"X-[UK{sJ{/wp<+Q#,VW;!J9%Z)׻^1+eou)-%z˥k)PZl LV6Ձ4_•,SwjHY@{C 418pD-5Lz-Q gw$9,JBŁ)=[fW~N N}y &&)WEr-e/d^5(߂q^I2}mYÌ2H{ƏLk! Sō"]V[eм*]Z}ȼ}XIXT3i]"BΤC,QQ cЖjIi`|mEЏVuCQM;Oꁷ6Z?D4׌婗I,-mh6?c Si[UX,=?6526€X.W-uQC;!3;1GDs"{K6zߎo>/;)zSagg {s݆c! Sm%#{@E ^ @yRMD˝1"~A@bH(M[wZ[Ky O''Gp\[^^t=W0n;Cdv+am-Nf?^VU/S&}8|)P/ pl-(udiJf”<  G >Ws(粋VL6 Ȍ:&sAK&c; $!.rp]SjŒY¹4Y;;~}ٻ=! Sm$Hz˪aLq u"lO'H TcϹШ_MX#MN5#}ci ^_Oc{Xe`ŜZ,9гՏ-VEX xBWkD%mp +9Tl5[c'Ji~(s 9M$j7BL2rn+RSè#}{DZ4+`RM:aEpr,8! Se(Gem@oh`wưȺ243h=Dz@#8Av|A_qJ:< v @ ̥J_T'68i_]٠j⚭fWD^Mz%tXq@.N"(i9U?@f)7^z.̱1TyLoc|Hh+<# Jp2EGĝ 5ѨXsV_"ZN[FN1Br%駾iۑuY˯4v"W_3\8NvS ahP! Su #P# ' LaIl2K`J~725ttWh=w l [%g{MWL`Qi)v:580Z X[ œ&WhXڃ`e 5xT+ 欏>*,f+Ec[Pmcr0,mmȝq}Q-@*Ѱ'q +MMJK̮;gE+5UiT7Q+>! SWA%[.F&ҟ/il)Jf<-H;A%󮹆ioMyI(rSx oqKz!DU2OpztH4EkZ޹!78yޅI %ӆX5 P\U[|LK1Fp UtVC c)OA7-uUHڐ*];ap%Yu=)bnљ[˽BNڳV>!H# -k#fv^aK_oSQ.! S%*f (0Mø_goE<|(nOxvBCBZ¹d@\Rv (!dNIȧ-b FtӡACr Pyj3_va=w֕$>9PX3 5cxl'5UZ@z5ha(-`*4k$DQ| -L/(`m򰄈Zj񽐩! S]f+m](c'sRDa\"30ۈH\pk;NPoΩNpu'ʲkXq( E_Rdoyc'vBK Hflt[K,ު7*%4IqtP଑X PEm*nzq0OBK x,dg`]vH8JY0]<hB!u!A (,R?B2! SIB >cwLsp^.cj zsKvXM¾v>Iܳh⃼A}y41'F$zϐw`[U]i()Y즮jIv.Xrj!ֳi ǭxG{bLK(yoO.(2t Az x)V'<6e=eX{eLHv"HD$E*qKOpvt(~@! S8^J 9lO>K0 Y0޹:=q= NgDӜۃ9 s!ͻ.w! sn\ !r;fUs>i p|0<G_2'+A9@sr&>Ydk9!x2B@ˏ.<㻧& z1ǗLYk{aN}=O<O! SQ%Cp2` }?ca0~P1`.pڧ|Lϝ EL/J'0À=K  xx}0vx"D3) # O`ip?aw0a% _mN!*Sk3@^@8BBU;f-a$`:c MwÓD{\e"I*'eAWL}] -K!ddc{cyt߈]^_߼wa}2q+@ }s"9*d"] ~5_]'NγXo[g'[8i=q #„L+VTG] c7S!W |$PdkÿY}xg|A'%A!hR)ki $  /CD?-WytQݟU!T89QA0X 0 Lxx<`ÀAO0ޓ3-j#Ogeh[#e SK+7ժp_ATK4)^Rhz.I/F?ƮC 8shnzLϛm/Uh8WVWc)ß/qo=.7`]U`L4wPMZ NŃ$TI?ę`bt&3sxM/q~%\?(<=qpʮjt*o~?/j-0*NhOop\}vl/(jTqM!Ç?/)P|xp U*`xEꨒ AL &s(==?Q4 H0`Bia} p@(uA7piNo_g?????<~'&O?????????^ a<!23_|&J<2;ߚ|n!&2Js ȿ:0(?;7-hjG0 Qg:~')~PI5sU\Y%g?Y%0G6/ fU6O]k^_,oaLDvc `D3 f5q/UxmMsωoPWo9j0A^L0P%Vv4p13)I@2 ~ŷ>~^bדxT'0yA'%$Y0h0)hFr >.*3+]l#L7\=sP /$Ck2pC'hAȽWycVBʢZ?Vl\E*i/{(?G S)?u@`or63֡;e/c=q=.wR`%k\MBjVߟM3Lu5 qyoTy wezPTi7`o1])?%;0uc'pֹO{2Y w6ٞɀ!jSoxGap0A'tW$qz"XvGZ*#yCGbu[~Fz㞲(y#Uw~b(86LPw`w sNHP6pnu|]0Yϵ| _e͈Ċ@`͊ GLe63fyTGRJ7-qWU}6 wu 1Q\FC>jMK.'C EÐO !~O xu]X`ϼpO^P &Wǒ27'uUY,,_ X)d$w]23SJ~jorrP"i#-0 S $?ݵo導Zɛ,6/-&! }U37è|hg5V⢶de̽WyN)j`Y12>o$srk[k؞k#$.yVk7_Ga{*3C8m?#A'EސƥHI-$ Ex|pJpSKxSfTsTh)LS%3Z2X_7P0z^d_\GA\ly!3CT|ĕ9臓#ɗ9 >www c;c{^ O')*ɘ lacj>$S?]Q0A 'DA#QcbNAyi 塝Sx!@_V%aLikqS@CMdiVĀ͈2@?FLB 3ck ]k 4#y%?\QyyJ`%<r?oJL{lu@DA@'LexAk57=BA 9 &b$fD{R0&>͈Ν4M6*8`Ixx% @Ϗ&Aʼn-ߟfN CJ_4>hFQ 3/˯&aq5!L$t8#=%!>R+A`'θsP K | 9ǚ4~# s<@͐XvJ`ЦrF4cT%ц4c_͎dT2`l5IL׿-k~z+9慔'?k!|ow\MLL}!k,a <~A'oSנB?ϡz%P.0@kjd?N o32 ֨|0APTg¢qX ns8co$u10Mam'mO?r?V?t͏c=D㴂aƄS_CZt0L#“?G>yU! Fe7"&ܗ@3`6F*࿔I?cA'wZ?\7S쵲[/L_I4K U8'|>B!hz|2@`7}w+Z3n%' `wۆE`}ܼ~#>?Bc9Uz$߆6ip=Ic73˄Dр]An%5c_ϗ`9?C l cphKtckɡ&h,qApVAqfXߜ2hl8y`p B:c/!LG27oSfUj ,d%7=)E <+C*,SA?0`DF+W` @OcGX8dA)cmPtѕB@ ݔ10bS j{7K:?;" 減KLĽˎ$.cV5hBUtŜсM|r-ɔrƷ&ɔ43}J=hxιgvdFhg%O4d+8@jvvuq#gI8{V4 =CRA!jT:ȁXrR,@v Uc]l^s*3Lj8IPɘa%:~y$YVeADa]:)wOy[^꒺V=nN7_yuW 7%clZLFyM]?5ҘNE3C:TtJ!TA`РL$"*UwE,%>јđM?@j)I$Pl%; Mh`TYgk:pfwΜR_te ξ1"dKZp :ӫ(nzRRaJ'15R#%@QNc?zySRQDORN]ƦcM"o5KgfעFuaD+4Igwck Gx4h=nѷ, ]b^+ٖ$$!\!TmB¡0Є0*hEJ;9f 妙q0X$%@ 0+.~Ҕ#p'u+xm)NjaR}w0T豑&*!:Q]F05Za+6#z,т֣=s K;%pT [ `fk? owTt% Lr & I4Vl뢂j/WEh3U^_颧mk |>8y!TMǠЄ#oWH)" )*TdjJhht9 =.9id+Kd(;R4ճp^W#JH:̓'fιCMwhuDzn_=`ڛU:Yf'5ϰpnv\.MՅ7:cS檒v%8*^BIoZHdAJsQ)ߑq_pTv@M Nh5&Hijk_|Eh'{04!T-4D]2*ڤuk!P(*{(Xm5-͞nۛ|TT~N4`P⮥/gTGdS`) 8#-0ф @ÓSJZBI [f0&9 USek"vߔ~sitY.k;d5XI6K)Q3cmfEA)dz߽Yyw ZF RKD_Z Ocf<bI1z!T B2C[MMnVƲq @ <%6pzz8B8KZJo9 PiI'G{V^/CGBoiiXc* 89}$3NlO Hi(t5r #,O$ h@ \@\!UTU{B9Wbd_KYZ4& /<ɤ]/hwG9`ҥuA B% dAPyxChkp6-cO0!S͍b!H6"W  (Y2( dCl+'} j'Qm rsםwQKnN/:|;(1VW(ғx'Nc ÈQx/b@{FsWeG"{YAu=Fita`&wP^kRW\zGFsb&d%eɐ R˕TbiB+oxJDz2x(VOmhGe,]]S*Nu h!aXB!ES^m!5 n'Ng! S//̖2Z?F_9F6!tg+#1'N ݇&vjUߴ$ð{x]H4|zy0G۳~`0Etv1vx7w`! SURDJ@[fD-q6{sY{:Z.Wd`T BbPPtkY 剖<Xټ04 _4|W_>#1m`ڞ8=G30i.{9x| | ljK=-f{:0`ʃAfϛ 9N SBմjԀ}OVl=RP]>mG:^#q SE,&`cTƥE"sqFM ;fQ?ԟ5Tm?vp+)z̔Qꩺގ֑IM9&pȆ 9`s^Q@Q=2ӛ0;l|ӽ*ֈcBcdCř;3!Yp#ѫwڑ;y +e4A*ƚ}/o `8dk[ ܦ_PRܶ{*=|Fl#x A@''|O>'|O>'|O>';f n@&x4t%@@;PxNPT?ځ/ X`0H0`, LK;`:lCE נ`Lp`&p YFbC*Pad,Uu;,`CEW>tL9(3Mw]օJ|gF( {< Pf 8 9-!70BT=nP3h `*gt=F_u*Y??Q(PVtSNBY[0ZIDy!ؿvvwF`"n_QfN0#^Hqq(\?oleә9v#8V1^1jN4 fs9R "+(9r2cm?仰|l0:y Hr ?~$q(CA'FsB0b1{>#DwciĈnݻpLf TZfyu^7KkHp6`A`'t, ] (00 \!ih@駦A6 46 6Q8%?}^[w-/-)&KZ.>><u+gBN}'s~3<_g q>cb{< ﺾ}97E FCHNR_&t3<(ԠbA'`0 *e8a~S8?Կ8RC|Gm /\?0J#B aE=`3n drQ jy'~s-u 23N i+^ K=x^Hzuq 5A'LaAi_e鏍[1hPd̄G e 3|G)H0Q}ϙ ;3&Jd#CLLcA'q?T{c^ ,U屲 >.f xp(wцP=1 !&La"p!S048bpi M$zfV’M6{7%_=%?N-|Үf1\ͽ&V! =ڻ()ۍ\䦌]bQ]ɏ'M wcɪiiheE&J2ex=3bG@wϚ ۄ3BdY{a `2㉐h8 Ŀfb| )ɔn*P3"|!kOnҟ4:7{<7DqiBԀby#r!L-g8*}1<:݉HcJ%G![~IFTW+7ء=e^:y{cnn8pjhw@7$ɃrHSZ(BN/&<8Փ+&S ?)<&?qo$e}~N<=!x_íU @mp\'|/޴mҽ<hg/3Ouˬr*H_iwJP ;2NI%Nuq㟴+@A'|(0 ނ~2&!rфx 0W683y3_. tEQ& 0A9 #J?:%@3yÛpx2#de  A'oT"L,b{4LWz~h~! ̎G$0H ؉x!2>fɃxY7e#B8K+7ט 4G}k$$&?/0NC Rѵ5f7T_1qòhl^ WldExGSvy&1OA 'D Y>"!feyVUu}&?p lhQfwgC 3d00le8o?S:ϡ5a^xp q`N~ yiP{_\7 k S/W3A@'#t.D bำa(L -wp' fc-`eI!o ب@;ZcR/C҉L\!] xN`x?ϝ< ?φTL_ \(,ҫ 0ڿ4>|h&/SwA`'Q0 KO-x爈j#J*\ yaNY x&gI&A5&-fp (2!?VUWv'c%@3yǥ[Yt> Ո+;f`2`! S`(" fʪ[*Y Znǁ89$$I SsXA4Kl&_ )?u[K:."@}PV'=YF/wnfPLQBrNG:&I<F/V/~ ms- I$uj_&uĪ{줵"ڇEuJ՝@yrPT@OHܜtm,!~ƙFiDY!"]RNIgExZX(FC9! S(!P2\| XV8:.JCμ sh]pAP\]+ٛw3{宐C>qDsHi r[W*vPY81 1#]==??f z_Li{k{Llp\Q[M`$Ee FW ct݋e3%ԩ;)Ue֔! SHa%Xh5AQ (΁x ,'fs<[x ,xשѧ4vz#́ߎam;t瞗&N 93o]1V|a[#*V4HDeA>6:TfZN\g3JD}_ ~Jd$h@@V$LfSNK–Uy,<eZ.g&q܌xgn9TOݒ{~[! Sͅ C#XņEB pz牻Y0bRhIB$B㋥xU+-~8Dڸ_z`c| 'o̿if \"LU)fg#b*ډJDSE'¢`J-"cB.mI=5i89똊Ӆ@UZ/ k^'X"q= Rb<,J*b W|>"8*QXbR[8EǍŶiTk#! S̈́p* A(a ;5=OD+qƧ )LF}me. qۮt1Y`FT5+2,=qh})UwBjP?Xy5/8dy,*7lU8}Kmb,F+d`iRZr,P 2}Zw[gdL8̝-^kŐy.$g5wldF,+߾< -! Se>V AET *8h;^ēPړ9t?:0`nT|? V/l0T\oMU;4K+W4r|dT@STJg:˻L|#]|rύpV@ߚWm%rԿH/}`cOIUENmFxmd,j.&zs0eǼf^8= !Nӌd ²N( &BhȬOX~3! S>cQX)B)l,,eE=_i z$Fڹ]Y];feF8r6Q]Yl܁m6LXЈ7 dW8p7/:P!JR. p03vŕSրM! S4cwV yp>{8Pccu$Zk ȯ22Nr_31i]!wSMhv^[ɹDB<#*; o|V ˩,>f]ډ f3ї])4'@D|XC@ǺsEcFyU jFfԲq<WMFW1B2`3$F4βB~0s DV 3/5Q4BVݡy4Cs_{-;5CD.5(:! S"#G*7@T"zB,q}O {bro"؁.qcƕxEӶ,e27,KFxvn;>@%f".IteuBށ=TvpBXv陻L5[>"`?$˨ _c ;Q[AXr ,(eV\XiNB n:6VAsT&eJh f"'ZCa1-~Pӓ Jy(, -BsT! S) $Ph-$Y!d.MGf\=:yؓ,7]G5I^Xr6oͫcM`3idY#[ASkĘ\ʠnPj".f"./.1tC҂a`)ϜkCׂlG[4h#}R&j'u?qP FAS׋?lߌW;c0\Z.-a0l=:]yf(M9,*9F>?-%Zy;utS֢i! S(0] 0)YTaBHE~v؛z6TqZgj\fOV =F_vAmعl gfy4YjlR<0E!7^ .@QM|ԜљhGťo4 7⃽\Sr^Jzw0H8qԭ9l @ZΣFN. jo6 Y9'{we{\^fֺ6#y̒!e\UOYI*Q+ ˾&0 JZiwuλ! S}$! n)sLpT3;d)a*bm܂6d|8]ZeuJWy#IP*$u{֛\hysQ2n-hx%uaby^}6rۈ1Mм}$J_NLaS߀ɛ &Y@f:g#Kl- 7 )0=B n\P`#$2ŝx(`IiF] bN37%tg9L]Z'i2a[2|hjQ_u'_ ʹcUu~2(Bw/$^k@%\cؔzϼ䴣^Ka O"yyJLEӒ鏌jt?=e9! S&IK]w͇%q"h0i% adЦ“;R;ABB+XCJiҷ&% SXжJA8'Rc gsA2 Hd,h , ԫ_‰KٙȼꢜݠdSVF;h&G)hhX9ae%ZU[ϥy!AUJaӊ+k&j,+.AMb()U=2{@@М mqF-v! SMV@IJz(B6?tegIz?:Myi_$D۟$:o:ӡd`A9^+Ʌ&% V"מ*ôB@#S.ȢH;фsow 3biOgU|R<@-fP\<*S$ӅyUO}]3,+%冻nN1Pρ\QepIH9 R2*!9Z7ĵHQa2a+$Vԗ޼}1Rt ;! SM,,R6 %AӪ,q$D?W|*lSN8eeHqCsJ΀@iU$9-̩xV2pb󰟨Dv Fv*p66xLڰI^C]wV3<2y-@" 0,EJ e2@^qH% :rlB:Zo*6T#f^?! SC/$ !J@4z%}+(s\)_l|T4=^_ZKX*E !nvtK@x@nyVx'`1EUC>[Dg  BFKlH6 `>YpVV!|o0'ãWF3)K0nǏ .1g`rA'"Ab lV 0X(( 1\>EY\^d^O-PeyJ `3lTEyRP +IO&` a1pN?NfTD$ J-%A'$8U&.Ih#zb<@AА 9`^'! ,@ANX)ǀ Ff5"'ni/Tj78/ADBhxhX ^yM m3rUo _:R 0P J+wz?Au yViqx\Ц-F@D,)"RI$v\fm|sh?? 7 XN59wb"PG hO<%A|<o>Li ????;?????z?????r m6EB-0P` ~yp:PĘ-9a LWi•hnL 4g~O*bT,Ǒ8d_P8>Ƶ{z%XAWT=0rfi/x%(X'fPKɀJh ` cWnuJ,qy+>K0'&+%Xד:Kόb fbVUdA'$ Q lp +@ Z")Ĺ0c-ENf })c^WKF;>lK\"%[2@GX--`0`>|ldt̰4m͡KC [;"32ϞJ8Q@JSK,gWwRuL  fOvPF.ڦ~k!jߟ`#7ރ 0ﺱ}wJ4GQcJg:/3wپp~LLڛ7pUԶ!@ Cw&Қ[_7p.~4)߫ /Uo묽=_$zx^J8nyi15A'Q G6P,Jj4zǁa[R+O].a|_fO*t. #*6 jW[%cZWcDA@')!4eƢ&ۈK,ssKBiADH$@C=iɜ@f 6u?I҅0;ޔ3c"dVc 1l D'W3HX))?kPOUucOf|CbyB+ 鋉&cY,8)A'JQbc  z6X%QG QC{#>X G*`I _{TjRgD,+!w %?4svNNeDvJhۇ"x "ϫoCcIxHA'W&P"3Q}=S L&'ڶ|UCZ瘂 ̡MU4o RW(̨L=iYrqܾ0zk;By% 36\Gh@fT\'3ҀfHX,8ETۀ͓8]5$cO@s<޻HxiP'Qc= v8zF#G>-G^#4?#r(>".iy|\Wv3 T`v2PTd5h-@f^<_m6q~~M_ﻓзЗxn f/lݙ%alwiW/?ywɑ4x.X/-|U>*yRLVQ^nx{/5٨h7sU~+Q`W>p#0jt6ho$RܕK'u(  A'5֏\ ;kGS[MDgRh\ T^K(Kh$F|sTr8`m:t3df#*b*3KIQP`0V+xLoė 'cjD)ETXOgn 2r wu\6~(FyDm3s9}U>B$Q~ٳ_榞 A'Z)?\&&Mm5m@OGw4w> ؂ܙcx`,Q͌,#ѕK݌(@Sɬy^ |eg;rg @ɘ|#?ge 4ggag2+XP rk_}'GA'L ύ&'%&ZF4Pi%rY.m4>eR]R臬?fE~Xg@q\`esߗLԦA7s~1"9{݉ !wo/w-ikf-9f?> K@~! Cs lB R`X~b{eJXm,|X(ZҔvcqAb$TUyHLaE3uHc@. Cu;Sm4Qy4j%;gpN/@].ViOuj++DQ:hg;i݃_oj^?GOgZbX/j$ :9 4:ڕZ2#ȘA>yHK߷) !*S<EE *=>FSsW\-2 ˻#Nϑ NX2!(ݕ?4.>Qې9َ} KcD bU|9-ŏݱKc5r| S(O@$H eϑ\A! r fӀsh` w@ 9eh˹#ϔsA6yvcwR|=.?wØrx}lcclR\q!L9Wk)Gf!F, RX4tS@@&%~}@ < C71]CTiEV *#Ð,ϗ/h1"DgNtnJCxϾ9s?_ >,WzKt}DY J#O= =>U!R2RQ@#9P@D@@3Y}Ðpv."|1H; Ak)y?Ɇ s ۝>!!LG2%n#7*3} iViE\Zj!R;B3J_;H% *~Pafː4 ~pLXӑFetɧtGW{"owy OE+"d@ O|Vtqf$ @'RS&f<%c:烵˾3p%=Սj ƹ+wUEQ.|5 Za.eXϫ?ZjU|mQiB0%Q(4[kw{FRПG6^ޗΦԒ;aW$t,dETI(!T:Dh$ҀbZQЀkD@;]]j}y&m sUBŒU1Ca\4q9$#k(*Z4 %a2O's o`PI A x 5];]_1:Ri@,H@Ty*0T~B M9-ł62v^pFGE+tNwK%?o~ozzc>!Tda@!Uܪ)f\"(?'|M#tOg,hI0թZUHSO*ʓBʩ"q46$'*s+Jg"8A!#A-RWU(vMj{7MİHB QO`ţyje䵵C.. ѪL:J/ \Um{ǧ:A6UJ]GxMcY?0.GvG$|)1qp*¤U1%@P!TM a Ĩg/CԸTDSfOHd*d_ȍA6Z2|k ovrJfT@gU5seuPz!T: HaUUQu,I![%n ]]iJc A-#O |Κ*lҪL:EG`8j8A4]>@%<η0$PoBV+h6ĖQ,\B%fWP l5IB,b :Q'٣y 41i hO4%Y;oorgjb߃UWI:-wx[v@|!TUɁ(uT+RK܀*Po*0lӶzF\D,2-dG_}vI,lr&6MWbAx`4T8l)[Padnj( [K|P<_54lr-$?_=B^a* 0)JaWFxjgOISS)DIsb`d{Ԅ*I: lA 46 vU14$?GTMrbY.ocu@~]P7L(JL^3S2 1Sf 19m!^5@V &D 4L6C %`z:cmz".p _U 8#ߧ!碍4M!T=%`XH':$ڃzY0F/m,[j;zdK5m!7(7SէDG?Bz˶0_fUDeoIs)iLX[_Fة U+<rev_+/:JTXp[߇pe:}U1 k$, i6 #ezhB$:~|7A$@! "B@ k&P(%zp>8GDW:W&ȼirB~! SA,dUoLVK(ʲBs^łC&$H:R$ӻc2VFsj&A}RT́bqPEDso\t ahk '*gTx-PSEkT] BtSsT"Ie2)c\h2EضYCG&EDa F*IƂrgV8{&ůKKC^PI$[1~,Lδ% ܅igo^< ,  ,Zݱx$ҰNI sW;:J =#Bam#T"c Us! S}HAJڴFSBʖ&25|  S10$M!a ? 1+4]Va%ZN<'.b%vPӘ /,$ٌ/IRLj{&MaAj" O+CE 5}RRx\1^ i=2<I]J̃vVF p-"w 1((iD q> =;,ϙT~2D\N!5d4k\ {T[*VKr'B܎! SmC0,0)*p]69U{&;^?i=T82j!phsk͑([0]i;]0bKu z F~@Gʁ+j[׭%oS1鄠&h#s^!92 Aq ^UH6ri|R'Sg@h % @ a"%BB4^XԒJOX)k( `z! SQ!HU aR@ U(4T)Z&}g՝+Zz9-ި.,x.YڛF\ЎނJ|j_O5\jkHWhfc3˷&+C[1tbwkI9Q?a]Op=M!}x?& ħpo* ҍ%))%I'Q%+z=1[o_ES8o/1jNrk>m.ucz! SZQ#X1@`* (8L+um8z(̃yLnyeg+W ]ǹK$2bu3m4ziU.&ˮ[&-S~=w (٭G!5SS!5R"xbdj&q;L8Y n3gO?]|:P6w0/!TEHqk.i+%b'J Y-V}ЮBePu&|! SDRD`* evs-pzyN4Y|\k9 -V"FMr7A֓/5Va|/=t7Aűv{ѵS K&9 "B2w$Ƞ)ZK mk}zEt1֫N)C; a JNHTB,E*UZX-mQB+I֐g,zI훈! Sa4dJ%, / ICpO3 TozN3+ZX9Zݛ_-(,Jdtn@Ccw1]Py \}ߏ:=6֕>l%w.Yi.6{?gsI]ly'騉UP:pk?$ ܭW.~D}MD;Ā 1!1@9 & bIzLxR'L ;\!!~쫾j^e&C! S. Pl0 ) 8L;Tle{@:*Ӛ#&_\3y>.0X[kўPьN P# @8%@wr0b GDH:Kn*,*NV}3}!uu(e3)7eƾ1E "GE|_f,ws%$X Нk't.F,Ikрa)قRu& K7C-[/`vvFe*կ A 'DH`y #LLA܌;Дwڇ}%Qy(lvDHޢСI-PeAizV)ۓ#f&kMb62%`Ɋ3(_(sh.3-#\A?Gv쬾$}6L̈!R/p1f A@'ɀӝg0#C%4F>#x@/"hp>m~ʓP'8"])`cg17p0%X0D ;gm&`ar#) ]KigMýu EDkZD)=bwh=}[Ƞc`Rʿ b TvjׂU".,CqP טIhwQPH@ CcMP>o `8onMR9ȵى-<=HaG#xoc;o/ ʼn88V{\sߩazFom 3n+*hn Zgҧ*23b|y0]p O9ϱX Q$>d^c+ד;x˰3pcޫUA`''|O>'|O>'|O>';W7\{g (':vepMlup){ O`px%2@'f1ICX8 6:8`"k'qDpoȻX'@!BX:VӠBip A^`^F w!`~PhB#C:`NհBAv^ lBڧpvt07 025A|\>n+e{3??(PpElO+3{Dc-b<Cl&N̚f}ӻЍg4W !VAP BhO3a>C:uww/|ey8|ۼw$ \;fWOQ@3{El@A'L @BM:nQfpn ™Ho7h泚a怇 'ـJN~{GyAž VwЎaZ#rϭsO*~d70:e2{c`A=Sn6x 8A'oAOMGLE(!LnARAsx_ bH9ks"k\ׂS~s.͓ {j.a &gtu-pkR\x)p{^𘈓|w +v^쬾~?GCr j<WA|Fys;T5ɞdX.FA 'g0eM00@ZXl&O!-7 sx4?WF) Yoc֬v=j9K#2y C`O;Cp3XV|&g+ 62 h@A@'@!bL1!LJemmd* NȠ Yw`3d< Lfz11nwaVES߉/3e=0L Dt#`Lx?§pJ?y%<LNo/aH /*{tA`'4 =qDb8%nV\)[Mqbx';!XWF <x(,a׀͒\%)2Fa,2rRfĘXL2(Ȣ" 3U{|W7wR"'3tTTTTTTTB]#}0 IX]o}RL0`WE|gdvZa1 !Ze =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrrȀ X$*T!Wm,u`d|s2w/g ~fW|IJ1;Zg9998Xz>"U [֙A?".X}p;G @AZ?o >^5*҂:4t`iE=}7N 5+h,| th vH Hq}[Jl{4i0lqty|L?6ԯp0V<2zuB#nҙ; yo(6&\݉Ѐa@=8z0|c{ zIu~"P0X_N`lր/ď.J@ZVDyZHK/ zFhuIF>%cg>؎- F z$@ @K3n |]P\b5 DN* 7:g+wD!U؄U1)ʁj*Y(i0۸m XwcaEt5/@P᳸,WĆ.]u]u]u]u]w}u\Se뮿JQ"R/~8:So%eQr# =a*RM_~p߂f*P^wHfi{| S<VoM+ڟtR|gDJ%9}P<0k &?%0Œ]}B\ oU,)iIb*Qh\hcr|!+)-湫 H(L~;t뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺&.뮺맮뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺!W  9mAxS\.yl~&Kxyn B*Er&gi?>:@ ՘BJ뮺뮺뮺뮺뮺뮺뮺뮺뮻뮺z뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺D NGɛAV|pmMQfL~#j'ߏgos V 6<}tYnoϚ\L`awIc>t{2<"1!S$T~?Au?_ @.1@. a1;6xV20 ĬaD?~GA[pcl`#Gv#?Ie@P!0`a]p[pL zH*@7Y02COA|CL0ԃ_H ,$Z`J! ^ .{R c?N da\|⌙''7[@U xk`8)]޿}NXvg5lX@.4 5&r21(PF/q{F t771H\@&D@T ܜ-xA:{ c ũS4#d̫)ސ"@@f%2bHi'8đ*Lc ֭`L\l6@@dc`18RФ2?+u{ *i"rƂ 2?6}F# 0m6X%Kg*&p~<<]@P&6Zƒ﮺뮺뮺뾺뮺뮺뮺뮤7X7 ]=NfY1u]u]u]u]u]u]u]u]uCk,Vu]u]u]u]u]u]u]u]uQ B`d$XE$SVA+ }p8*i2PHgB}0}>@"M>c)h"') !e/CVh1-&QI ARXCug@)eJ 3#5fCC.y_|IkH .qh0#ZZC_φ( E4ͩx(+n[^}`c+/$%\²|BHY:KP. r =5{8p:I#h;&DG$j+C;@@tAV G<6Xx ,U1&o|ZvpĔ# j",BĘ bCS]`Lu?L(>F%Wg28T3Wmo; c,.}"JfB{#\  N10/?*MـD =dx_wOQۡ%@S)k\!? 1EqyS'g=И[ Ueň+'`,%Ă 2 P4ɀ g5mÇ|94f^ZILp̦7"BDbdFjb!ԉG<93o#Їbg07 bF[aEڥjQ sch1&p=A[$; !K0 1A/``ҿ*'XBXY X2ԫ˪ ZAV;*~w0p3h=F kj &(gX$HB쯘! YoqWynKy$(NX`et)mqS^@4J@y`y*!,/b h֐,B-1. %!0 N0P }#I$ `mF45Ef%iE ;Dn>=NaP9&vEbBR6@\+]H$3uQY6dąC}y>~T GD{{{~y4 [탋^3WZ[ %5Yta KcJws1wDM oQŠ'>qטİ,G2f@t͚ rKM_!0b*o $/~!@| 0Yjt 1>U{%&{g/ )q3`~&>$ ܺ*$0,!ȯLeQ-AH >䠟< M@P`C1jo`2R:^3s/@!Hxu4LLt } T>`%D5wkGP|%=FBC&'ꇊIDgM#X-h̦dBbqL eA:Ǭ42ɘ"'&3m1PB$ ~ЃvvHTb nőYn? leq'xF?Sw|J{56<5GN(.C2@ߜe/,EŒ}7Ph/A IULE&f4΋;j/*'!WY\ˌ=mn&uؘrS=ClY d@Yf8 S{ϡ,Ʈa4I|C5| ݁ oƍ3`'J^9io2Nwj^Nd' _`:h3ÜARVRcOSRE"hj=i-Bw 7M _& 6i#!I'hd!{ 'ܻGZÖ6,4u@)T9m) F +R 0PDl=Xo9h˵&ZbZT.D{@""Dɤ1L2!,Cc+8> #&.T##{s~clP}pIJ *@{>cA 2,&$n(`: mk1`K2x(M$[5Q(v_~gxR|1l[ :#(YDwr6lG4)0(D #%M)'/ 6Ho}b\zcw*f~ŋc21T  F L&:{!LhlMkH:{bHa-P@v2ڑm2b|d *$ P^-R(?# @L1U`;>D#G3{`g= P hNr-?9{~R'ƲI8>_x2Hxo ڔ =ˍ( ı `39"@XF 4oa3_D2't L`W~minv&gрH=)/89 [#&cc!]LSL$5"bR NlH-7@]2@GVSm;'b7S3Il*21i 6K^d8]!0KYR5p J@'yZgtW>m0D)/-\xᾚtT֎w_VȺU%?,ZDD_ >9}zۭuZ*$ 0| k~c3H'M zy@# J\e:Yp}MB&8ĬfsV6RtZH8_Y%'2:y'a /Y{'@)7oa,l=Ev>+=&_PD܉w8SI 2dCȖ"~FFpJk2 yX/ǻ hU/x |`oAu.@E0/\L#Aqtc6ez`1φ w1$m 2w˝30KS(x^x,` /B``юlS֡{ ."޿B\8Hp}?Fl*Lm0Dh fM\_4h"pي/lmX`'e_ Ui7rGD!@=sC΢,A8ď1%Fjn2z J'٪jf5ItdpT[dݲ5f@|7!ZbGt/Oe!` wȂ ^h L40TU >E%<&%?h= Ugqf pm jR >,r|aR`q#CDfsi Zr؀bH1Ɔ3``f|wOiޔ?p  h|!rW{X&;<~}o7XSK8k<V{`f!`gI09Ҡh !4hѬA&**j D|Gnaݭ=`D4U"_`?x& 6VwMm$lUT#1 Ў|0@vaj)vW}ÿ @{ϽBJU\U\nUc؟% F#.'জF* rw@RH33F?]u]u]u]u]u]u]u]u]u]u]t]u]u]u]u]u]u]u]u]u]>! Sma# X &X7#z4npi#|3s8:ɟ?BoIL~H,JhwgI Y1JP@2<Oz )NVX t3޵<'+qdh[A%WL SL܈6V'@{R3Xb'5$t1s-C}1(x+C|Wi~oracB]AZGËп߷駽8[L9FBC PA="+pmo<b#̘rVK1vp5Q[ms7ؖ }9 H.Bˠ D;OOpuW 㕯p\~7Ҋ;u2Z1f"Pծ^l;~1ߢ"cOԎ pm/L]~Q'^1pLJ6TXOT>4_CR(_?OɊ${\t`yx@*%smHr7O(L.'W{ـywjk\2ԫ|M*2"N`Ҹ"Mn:[uޘRPQ '@KBՃF`QK" WaXEiQ e1Sd-rϯ`Z^c<0c_f;! Su# )%>5ZCJ!%MNeX lj`Lo7=?;js7XU>=6$@ 0ڧA4Dc)jʽtUw ZreSm'磥 #?ֲ147/W$3~:P 8SG!{KaݴD30 mREѭ& d׎>nu6h (cngS ֱnδi*T9e߼ 1B4jױuws2 5! S'!ǚUr f..` gS吖\ҳoDaL+!nhfþBP[t⛈&t(Yk6XBA7٥:47Zn\ /2u<aNWWGߨtDEAlGp j20`YPhտlBOM#Z[^KBc DWB J4a%By'A9/"xYEϬmx۟{y8sF\w/oζmV iRWɢmkTzr RLFokކ ,44I#/{N!]V ̓LvmPIĴ:FA0kp 8;b"I&ABq$Y-yaC3]ga#Є&C' Q?^ hYYN!V5?~I;I<̿%2?$+R\coK^^ASv+vd>! SeCD42fXJDȘK)|rrY?RPK8Nε=zڮ"ǭ1B$ax#?dkAb|ЎPn$GM՟M/@6G0ۅj'3^#M n$POO4 ܊5K]p(E6;`_)~(-.YM(6Q/A)kacSnu0hM;$=^RvJyGc;a\AW{Vmnq["ԯ]o|c˜2F MԭqcKy! SmID U+ U TE8PGcL$(,샸Yh} ҸHFpg}4ut‰)==./S p(b]'zLaiK̽{VUa9y]r` fLq,Wr+P[UۙI"t͈r۷zZm*@%{ٚFaR ) db֕;[(iNRjM.Zy'9%zP%&:/D( #0HNZyFq3Vu)}! SeV15t)M(ZkMq6B!]zvL6ZU4G^S )`ob"a9Y`+31gɀZq%ZKҊo8_huW6rǐ~;gV̈$ozW>t>e}o~źB ()J [dˏ_nWsрT!;Z ΜcR kIjΪJݣH52߾UTJG hFF<:JQKgB`AER(! S3 B2$A9$!9!0|!0t!0}!0u!0p!0w!0~!0y!0p0A '):!@XEr")s8tȆ2L 8orgpdiʙ  rt `*8 @`WofQc| U9 !^ D#Чa5B(HGAS nQbw ; =_\IpU`⦙f^D_wa!7{LW\Jf"37p~~֢I2, (A@'$fn  D DE"<>HZ0ȃ\E^>~xNjp+ɽ`68@4xNL >n(9xsO4:]L^A<992#[ %ZA`''tJq2`7-!@ 4$㩈!Ow{wmoSr{WKw 0hal>x) hpaݙq9 AW?B 5 ت7<ށ?/F(4)8KX =_CbD/oƮaShH6 8WvWc)ƠF`|pwj!u ƛ0d@9 {3 hShpu02$~a\ |C [j\%3ߙxx~8\Շ`|p iɯ"PM (_׀MSbhOoÄM MEb`J7"P;B1K]F@:EX0Q?\M+#HY?7_`tޥМ?/!ԆRfSUκl%#:zAQ!vЦehk O??Npi?%???,????/"h "13L!21<;oSFasCvu&`13z˜6LjF(,Ƽk\K?Y% {M'qBx7쬿PK]& ~PK(Gd®:,!*81@,=)%XK0"pZ{y(wLO` c^OtO@,>SWYA'2&Hp n:@[ٜG".+!X.#/ ~5a^qSLT?&q|!+Y] sI{&ÏXrY n7"{oj'KMIm @_};*{?ɀ,ﯮ[ԛL4pZ69@ S\M~Fo2VLԭUq8@ښ|;y69ԀɀA'Q31] X xD@@1w^0)~es ei}f pـ͌ZxR h|F-*`\ |TqQ*8OA&@3{8oVoZZ@fyp\A'Ҁ dw"8Sc[ J&IU>K2CD5›#vQYH6~ 6+L9۾2o 82+Ft=Ẫ3^!py'ccV?|>G:aT@NA@'?0|?X T eKB-2$ Gep|I`p 8N ͛rhnXp@N6f}jh>S10MA偃%WgNo1r+?7S<%3!uNterV Ϩ8A`'L`e“rs9Sk;X%Qy;eτ34 #^` K9O` ,B#F0 '͌!e)KŊėyjc Dtx)sYON#`Q#~>@3y0TGĴF__~/<A'L) p!D<~fm.پ&B=]N# 톄4p>ϷpHg8 S7ƙTd0 B?7|~@6i|_o#1f7۲Fߞ&NL*L~Ǵa c=o<!*SL9cap B{ձV,QcYQG" *&qO)s \PK!n& Bn1 KێՏ;4RL9JIu htqbcGk }Hq*;#; FNр7( 3!P""Hbl) UצhTpΐa`!.LJܜʊIp`c_ * -0骒 UVT!LGf7C7䒊0@4k3Ę5R@?֦QEλ$+@j@/wjuV}B\]߂X!~E*lg 秗r 2L'7xzߙ?porP2|W{~jcBPL_XVTqr $ljuo,ZaѼΐvKոUi֣k&G?icsD[x87x"(Ɩ8v휃y43%g:vhFW#8FW= aG2 _HUkө! =f Tw(b!jTNUlԤ$D:*THǁdlC)yE퇪IsZ˃tsK$]I`~Ju&ylF~ !vة*g'#α!HifƸlFYDw T`}UUnjXfXz m-HLzN0Ps 0jOķ /a %.ph,K&*ngΰ{8hIv~Q\TW&MaZHU )8 v`%@OH`tP!L?DZ@P!TBA1P7NYKYQKU**Z>#i(#n\Tgm S,3Rs4`|M]c3a!QJu+eJʻetܖ%!H|ۮ1ud83L⭲)RPfcu ZYz*o~̮)5:.&3^qfޭ[P$?oVlg>k2H`sVIvt߿D@U$hY=%ZQiBX%v@8!T IFd-eE. ҄J:Y.s}SgeFX?q/XWɧ¡rjwIEЎtdӌcLXƷ.xdU26ѠRɗb;`mu hPA$(cı; >MbOϳ*_o磝 iA6M.s DLG$1]ws -F\۩OL!k)Z\k?!(B$ L:ׯW$$YǓjzP%?e2+!TmBA*T-ViU%]^3f3u]qR̯90VhnW Jk*˽˞s'(`F=nVm]JhC*4*lIg\ rjt8 *S8g4)TӝuUcNhKkVY}+ڒzwa{WOD+d5G&')9z QGY:=Fp@I6 `wX]NXӍ7LN 1k!yX(ihbE:^իX|B8P0!T]b4 5\PP5rHm*h=ۘgquX'6s-TyuGًkh広>VdUm}+lJjX &HWgmU+d 8^~hٳaªBmaU 'T[x,K>$Sv= }~NǛ❒ߞR!SM8SEěV{Np 0ƹF f|hƞtjSPнfd 9dK)p|B8A!TEbP`q .pʨZ-EQ3"-Ji&kS \gЦM^ 0Rjp``!(DVeIsBz EdD>! Sba" FX@[,[8KmH"LHȳaK$vo M26D*otY',ﻕk'XN(63.WeXYPvf S+ K7A\ݘa,c$F@O[ FqHMX&+f` 2SbwsFpv,N^[WdH7X"0$f90K:X.9^8!&*ɹ2xD`!`,[)[x H@ŗ^-hXxmg(.J [BS[k%v1 RJ@.jo _Yο7D .\G,! Sa! JZދeL$pO H(eUXS;%xm+=AD  " \}WB-ꯆB*tX9`km,s(-KL.  ,O8p) 7,-8<КLmcX@c׻eaDcNNFe!U0JLw@qؤ@_fȫ!3) ҷ~! S*l ݩB[+Z^1=ӄyj0fG<Բ "SX*yR^~L`%.t5@QVBSRbRo@ KUm[9*{! S>6 t`VkWN߬CtC1'w=]h@#D'=ҪyʑIGv1q"+ ȵRKp]TQy EkfA { Z*_Cw^-.kF[ XfR|cah9@ z$}{#Ɯ3R,` RuHYt,YIK(!Q7SRsW.g]M)Rt<! SmQUS7ݽge'G%542vBlLl>A:X FXJfjB`j"51p8л+.omi=`6T%Qy/a@ЏQpHʌ[+jAww$ j`2n@2~:2t442{^@481qGO$bLm>}{k5>ד:K\FvPաKͭxpVE]':Bg%`3`*b,`$2C\~@ۓh)5P#Pl6N'Kq+?{_w?;Σ|l~pGM0?!&~ <..#xpS_V%c? B1? rG~@B&'g%" -k𕓕{+9zVX\t4z;W&47Z7:@3{Pׯ% Al6f#橱B9۶'s{g~O?JRb_q;6#ucnyxG!2˅K8G{Єq<^'4:n;˟:cEmzC?6nM [nA''|O>'|O>'|O>';nON4A<@9f^)| z RZw/< 8+ | 7{{00g 88}jν1a~:v4i0hQtJ+p!  9N>ApZC1up!AʍgR½tkIaY%UtTLe ](4y@% !**!iޙ- 6 .[;KPP8x;jWFs??*"tL7<@pm@k]>r"6-lA~r&I`#Z}}>68LZQక实'M .~# &*,)##%/?/a( ؎ 钃jD :|lA$H2M|ė|rE3r1 x4cJ#~s~ Lly1`/vL`LS? qi@ <A '&13\,6^d  L`&Z"`79h怆XClYlh9g:m%`6#AQ1;}P΢F<d~Li00'1!$6Ha=`P~DyL?C} 7.'WHoLAɨ!7GJ J؎zbA@'`,%ᰃL< -hEgaФa=47|_l3J#E#c9`4dY(n~Lߢ`3d (˝Ma_GW}?F#tsJ~q{ϑ] H|:r[7%|7G򟇹9"q J `A`'LaAhՑߎAh^BYh0{\Fe2+6?{DǧJ'#L?C% A6#UQ3*P hmdTMmGtwioѐmьs3y{X3G~s+Aht= t9,#xq#G=+%J~~ O P I1fD%2hP,P|#{mW|)€A'wTFA LĊ嗀0-h~!߯pByHϽ%7p/{3I/ M{1p:-0l|/dfM *fn,l~ j:ru1w($Dp! GG>%MX ț1ySד13b0k ~ܗ|A'oAO!s4ъ`miBQDy4Q4?NR 6Lqēp͍"`<{|IpAZ )h$+iX@_Uur2Du'JIG%3jδ7p! S"$(4(] wy Ύ p.DzCK9W#/޵^hEI`f t T%ݰ 2)ٛ5CZBTq[|rO 0-  ý쵳BTJKJ| ~zc4A+-VeNc*UYE\8G! S"#6)j s÷WB9Yfȋ,4!&ަyv4ɍj o\xt\S¹ ,3F2cFU8{~|W'SfGB`D66ֱX.1۷/޶Bһ0JCgheAvg!C,2 2".B4XM3i-wr3 Nimv0 ,hQW^$(ȱԪ{_Fa=jx@ Wm"R{q!WI/_,w_[qgvZS5%I0m;o! S݉{:n60Θ/+J@F\! jLlwv[GY+@-Jעh(8Y-uT6?UWfSNs_Qr 䕤L_VsgY- .QcAI^!@@}@ͼA 0sZ.Eg"-r6e5~*Ww0DjݰBlhdʸh@AfyaIs iUp P"$R_PҨ%`Bh %Ed.Fon6kH'3! Sͅ>P w9~Tes)Gܯ#v` QDŜ:+|<:iN6*hփxqҪ*:_|:$ `%aʧB1que%z2 G2,KQWݱ@Ic}' .C$C;ܺ01]U3:i͙`ĬQCAd0A ʼn0^ʎi$K:rGW*O0-Ỻ qEX)JRl"i-@PK[ j)eƗl%ѝH)C! H;! SPQ$oAV 8L,-,9y%;1OwݔA)2%Q yo{p@/wfTż m=Hm2/ rJc[r^r4~]{?Pbu|R]k Б8',‰Ө Q 5iFZWUP:溚RH F, ?`_$[. .ؔKQiF{Ն}[=և! S̈́WG>HX"烍fhU&}Uخk_%Zԩ){%7夯'bT)8l=xNdUXq7qԡ@6`|@Ƴ] 'R(d&lWjeZa=w}gjN]  ᓵp ־@DI `q")F/.iY)ud; ]fOiiJx3NPᝥizgu! S̈́V@ ZP5e1tPcc]Z nLjCE/j y gTv6gATkHRRYO@Oi5. ͠"ftI9|p-TUhݵA!6hy6i#\.<֥|& ϴPhw0`h,eKNW&+v*wVr.z$Z' ^p[MKh]W[?RY>iɣ?.! S>V dQ*R (+ W+ʲHzB_8d $_Ks;dyȆ +Gd#OGM'=SrsvAѴ~304A~  bJD(;mVclA#A ^,dlpԹURm"~~εZVu$ <0H! SuI((]h;\V9?*Ɔ@Udk@&Uf >ltot$q@1$'vc֥rN<f{ƂC\-9uLk,2'RCk++,&7&F Z'B۸穑 f@PH \ L;u=v^UAiy]:`S(( "c0Jr(V#b;-!Ev ҁP, XFRu!KG  on>?`Euϰj:G]\t:'7ЄjWPq*KPXG3ԪpeYhxtݳq̬LMhY'']#qEUg< ] <ՕRF`Rp:H 49(lk [&j#`n48a3?m!-!:LEHQ*P ?kNւp's MuIY7J͎iV%/t! SFHݨm@2 ) %χuVIb[v9׷>]TR 6~`D|}uĻ#_I5y|Il9*x|g).x]J)Rx%i;D[Vk)݋YdVd8R"&#t-\I|6Bp`nQ(2<믟I;(SF/ ɑ8-z#ׅJX.hZ$+vޡͭX=FlxST6>(k= |! SIIXstq QD(H!& W0f8%U5k&?y;МS^jLֹ* T8s=3W6t~YsÎQz@g; j*c  +^IYTIk_ۛu  ;.V`2J(`X; PO7Z}6d*jTWΙx0sE{~vZXmiGzP{ ^*K{p7F;Ќkי>(WWZhh ]o]i%ڗ! SOF*`=A &dfo }VچPɚ:OODJrMxz_G{Tguh )E I0<"?&ȭ3\ǭ (|ᶓDIX Jpb|q$YM-M*aU"Ǯ= %Rl,[kB(o"tZεU[Wi"}c"$<{TQdwr̔<ŨԔk%kՠ᪳TҤJ଺ =! S#HcUڊ  A.NV6ZU< ~߭%SF2)J -e;EFhq W_k, 0v4Psl+ ՚WIg[ۋη+d"U1|i@o?lNfxpqo6502$VfUŌQx IBPCƾMW޺TYHJP mo'`1!| vsS%/ #"*Nќ;wE}BR,Z7:Z ߳90/CӶ aR! Su% Jrټl]&ZQ-w|*mjqߍEI4AĆ8#\uH9yϞGBŘ`RH0RĆDLuoy*qAMmpB>Otr>ͬ6eڴ G(I~._*G%)( P) "u?y'ݗa}Sʈ3Jѽa1|xЄvbho,  j*f9P2#x*(hȂ YS5/XP8bU~<Ǽͥ24>'yS2.߰м8~l9R>@ 0VX|-0S \ۀ- v1W0P8xxJtW}~;: b4DeE؝Vhm@TgĈ-oƮC<8{fq z7]pΤW!   O؀LS{]i'q͇CF R"p.<\-`HH8Q$JTLyf pp Th9 WģD(TvĈET2w~e k Z{nM Rhu%M R |8c nr!JT!6^@d` qdphRD7I4'<8K9Hu!:[<8:ez|rLK p 0*.'ohhU"%@0*WB]~هKڃB~<<=*XQx& %u??G??DZ5????w?????޽Hp  F4lØB2X2,b40z5§!ȆɀBI)7)E'cS8#S2 fhx) ^?YDʐEbh&\g %X׺^k^J` cQ0R_ݘ%X%Luy2~} f5Y%oCu޿?Y%^x}5k%X_G.8)0A'M Q0 <u,"I|>^\w`R}{ y}1jx&,_,`qa`k@` w00A[-Q^OV! O%0O`oS0< "@'?@~A^7u@&l{ ~i/tLO:FEwZ5 In.[^\g}j~ߓ#Ex:)pGOw0JJ>ߩ1PL6_?xׂ A'tWO ;u汦S "ӬPE Hy/FI GES}r 4l &}s|G%Q/LZM#rť+a^X{cEAd/72/&0O7ر< L?cL `Hn5뾩{ikc`%cZQOғY9h7&J&_HSYmNEZ}HJSr~k09o 鵖tUIpC8EHnka_sU0ɇB{Ga6y`GFv wn4hP~:֜ux6Pʭ74>ݍ.\ rcCOA'W T :SM#eढl+6tS/؊PLS%3d >A T%2͏™2}<Ny|t>G~n8i?_0A '_MA11U b3)1Ɇ WB67}5xNL\muf k2@&U@ţ\\(0Ьۀy"ې@3dzL $˹f3}'Q34VtE Vmg!Ox4?B1;7j~“Uq P&">2K/|{ZLvic P_I6A`'_[PV"VY 9yߓ5ͥ'_+W\<}ôr `0Z?f0"k@$^^HOtX$珀A'|=NMYGA3dFnX%JXDG0Y4 )*QT0X,$G I=p4ѷj=$CWf'bsCl/8?A8TT_EE'k%ߟpF'b`6T?o&3\tdDdT82DbƩV!rF5E6Ӆ!C! S=,+njgd~`T JeLz\;Xoc@j_BtM,G@M@*@:E|DnBh)ѹҙuqk{` &I 3 `8zS˶] 1}si0N8(NHP=wAR2ƝHQgSטӒHIrV."(pN9B0Y! SL ,` Zs[*N8V;@IysrgBċOՑbH6w) c 1zqX 1f0XZ}hiR md?0 g\K_ClՏd mCbvJjE79@2ׯ}?Wiéutu=$y֢gJծ?=' D _iAT:QoVo\[Zhgߓݢ핕iՋ$h_d.Dx5Ѓ8qo! S\^X00op|>F/Z<] @#!cZ<֫VK!fm(ګS; 4݅.,dB"a^D o yVpevei%EiyR$l1@ ?mۀ->"`xx}30fs]ߕi;iNjlU !Vݓ´{?KS-1d D}tt+/!*Sj[,Or$haljhf&0WɈY(39/Vy2A"5JAbeCi ȧ@z4X|%6 RC]-Tߺ|i5i[a@,M<8'K׹>GG#8EԂ4a4i|)eJcIlb֤ uP8I/pn0mhмD?1ϝZ^qZ7!ZSQuQ!L8л9@ hӎeF@)2!%-T@C\66I-B/1}s[Bd1VnP䒐saNJ۸YܰnaHᙠ"X"+%L>@c` a*mX<gV!LG*51P-ث꒓ yuy-dpAb*PgGw7xoN۠j/c@DYTwĜ_e 'OM%ҐT:S&Qmf/wm`Ub09Dy$Li6\QkZ1dFvDuB7;2V.%RT͑{!\vbQA$UL?\Ajn+H6 |8wNܗ+w!+j*BhtOe+`,Uw!ϐG>~!"C N'[G!zT.ŀLd{wpRD0>En'DT8qVs2p[ Jf-V))පs!$2~~i&l̎W8҅:edekuS^ :fZ.ӡ;J~/3Kd Ѧi򠤒D,uEoDx]M<ňHt"Hׅn-5B12:5'R#)zZ -rI`08*.V bH"@P!TˊB0P zj+Bb1[y BZ+W A1ܺ €M)M ƥ4Y޶}14̼!^ELߕʝܲ(S `|c?q:^֎Xׂzqs"LW(BF=ejmlf3#GIfNXIexRżT UsU_߳{rh_ztO%1s@Aa\]&R=EI~ˣPO@P!TMf21N3JhMhX&Hěw]n(g'AfP Z7# BJi6.oÿ={)N\3*ۼĹ[6>mlJ!R̍M,i@=!Tu>D0D@&7FJ%XsX%o2x:%k%M(TBPbn-ŒUO̊n*mմ{4sYIBZ'G!d @*QjXI&(guiJ(r&DRT&KDU7Eu 7#~'M7k$u5p6xoXI8[ڤMGn@wV}YMo G(vr~(!Tm bP`Q3AiP -lAaW ٪ Y/.]'Gy@{Z6/TwoHǐnA$ tl[A;ȅB3QIUQm"o+eRUmB 8bBDdĪJ軔gL|S7͌Ʌ$->avKe j58 D  GvǑeU{zRIذll5[e7A(~dVj}C!T- *NT@S U6s!LУBhрamJ/6Φbe̙.ѽLj{H*:.$2fH < x FaKɾ)Iy œE+ CӟD 6T*v㣊V#A*֩u LԵnߥ 1^ *t!rݞWMԡ-׳<1vC D 1YBx@;Z [|QKKɎ/ϱ@P!T ̀$ $*U!NEZf}n{Kmp+ @&v@BߘUNZFj˄S2a.%K'ZE:-D kqL6)L]l]@m`{+lq`q6QX1(3(9EY5VTJ5123 " J&WB T9\ecsZ, p]^IVjp)$^q^a`D u-(C!_>mw!T ['1YE ^*`(_ݼҝmw\oI) ؗz|&!50z nE sqjD*둦}Vx!Ώ2qh;nhB/\yjjjRr4jZūfNCBJebrJi{@%}|]OaU:j)L*<:p'vMD=ů%~{u#V: #p" @z< ucCsk#,_llwBVw! SŅ*F1FѕjӚY)Kd%%GsWt* !J~b(UƜUAb2D5>nNBMo pG'.g Јa(o( wv $$dVa˯ݾx \,rATnkΌdږzAEQ"C⺘%d-^wIr-mc+wz@ W,H8^^gI`=@f\K42Dh4WcK"%dNfZ]Q#*+! S剈eҲ+U  TG(ng:r W%,hx> aenEpm6 \9RǓɮIf&KPPH M[_زBJYVEy97Ʌ`|Ky3P襅EPu9؉{sQ4i뇖ڝ)z$ IHA)%SBdiz#F@]0-%>I"W7۵gbV%QU+ JwO-d'+V)1s Af1! S}d@S%bToUvQP@r| 7yr[ b.aT^j]ZH-˖0P~CB{v*SE=u~!7z8Vތ@9٨bDY.;Q%+.t\b5 e; _H䴊AEdq*[xY *k=YE#HXM2晃s 1 B[XJqWU _29[WYjbF؈D@%T!qTRNc! Sa $^j K\FV=G"$%8)$BG[~v  ]\ն] 6goi&eq6lY(w|;WE^shc7ZJCDq[D.az\48h,hsB8Th#lI"R t. 5Y-E~VZ{9玄o6,0j6Dh l5ْ% w|Z@$zsm+~ҋ]#mIm\{O9m^ꔧ2.%'F.#ibX(Tf@S `G""] =A'L*2 u)5b2J⩠K }"M8: @%]g]6#VtTqɨ'fAIe\qDGxGG* >!>`$f?'p`?B:?ϸ#W #`qeL۠j A'L >)5K LB?uэW\F>ׁ?J'dKJ#&TJ?7!L6J6⭰] F Lc{աywf0aPA ϶,j @' g A/X_67z@n\f s}Su2уUܙpޘIA'`'4eq ~Fo|wU/GsiRFc Ehb_&$R.p JAi@?ڀωqֆ8R,O r 8 __s9w-]u/#9΄xq[ HIY@=0Z,B +:0{]&'.R/M@A'ɀ!Nv8 ?Hh?#x(G#x N~܇)ͥ((e  -H!V@>y0  XeJ S`?Ki|&zOhHm(8#pGX0,ц㊃{7O˰S& TޓMY`"y}M6 ~&3``$Xo(|!|j]THy,X7McM ;)5$` 5TezB;MJhϽ/'`iRS|G7;|-Q=!ʆSC!Xh5ý,nd4&:h:\YzoTlP -j"픂Y&HDXjm7°z3c7-A%"mi^ʞ#] 4zwB"r&I`33V~ϱ9|*3R' |7.>' )c){mxH1Á6CIf@&?,f`jXXocxO+gϙL>? Bw883`=Ɋ@ 5/j+I L&h($$qo> *97ȡ$A ''|O>'|O>'|O>';Co@i` ؁[ f^)| [^COMASp@V6  (0}A(3| E_`w$V  x?&ʐtCayUfPാd `3lN8}+etDl&ce֩Nbo ̷1~PHBIqKUxqL𾈌O@)A9Q!v4'A J(F??ϓ< ()aBt 3 f][ o b_@C,!yεDǁ(lK'"??'AmGAS\$W@& ҄62K#[aw/7"Hpr&m"x0)~ dM;_>Z#Q$׏QoC%/#xo^(ef`&x癈w96@&eqk&@9A#8 S$ɸAIUuY!Ǝtpe%Ό1];G> )){ ೦O2ebg3ɛ[:7l@A`'`!ABCG)E `!=v"b)Ym$mY䑦(?,G"ugqRypv5^ 3b2P8yuߗ+60 aOwwGGq"+Z`R0~E/ k{PwRved&k3;eͦz3A'LaC`e Y8B6n$͔Ga>l!wK[ڶGuC*d)A4) i,);s5ٓf=6gNM@eLR`L`Ah| ƆeLqLI_}w4#>%@3ys0LK5 GhY!@;ɞkd.+NA'g00#4LBt) 5fb DxR|C0 lDs8O{yN9*ᇁC )u 0Q73dм0em|{g^HZ7yFL "̞cHʶA'A@b r̅a%2cc٨ ؁4SL^dν *ˠ$&'8cB;? B~ O$#6Lb*gC_ƹ?7gaW/R0|t! S$!Ek) lej0Ř"t_^3%8&ÏذLnS }4Ԗm5` Vj5f4rx5(8)%tj&u~MyT?"$͚뉄9Ժ3L$^Vx9ц *^MWV)M,ΝݼBȈ"W 6 ldhiQ\"^ ^G\W:W+7<=>Kg; &|c,~2Х(85I¤]WhNɨ^B2`FQW I^:;(d! Sx&UFpG%4'2a;m66G5vpq)̗i@V}ߎp}k;!ODxO_2}~e]{07'.w9o̾xULg'-@68OɚN]#!IiBh͘C_t3@ tG7?2.fÏ ~#e zdxC! SDԃ( f(0  YSrx<<@ %uH:plwXw2C PD`\x.@?jde ;\1Ijl;fLɿN_ 񠈥9HbܓI$gtryQ'(GH׀;7sߵ1%0HW< O:az#Qb1"b(}cjIGhp'I戇de<! S]"BJ@X^#R1([F7Z=FT{UF&7$\ XG~)(t IAb"U;(Htw4,wp0brKZ*DIXZ\?BD. SC\1#/W^^|֕)K/=z,WnuÕ÷RW ['asACjYꈴ ,?/?{fџ`G6%ӱA=-}z3">6b&rM)ǭ#ttrGf-^v V8i]s ծW#A! S}!"*ülTn,&:/- UE[i>pS\Hծ'?5{0 y5gŌ^=TH2m{ ELd%`$Bqa4b s5OOd.hRm'}%w6to&(Se X#'%1/~ʕSz^rHT+|rT~(Q>wc&K3Bj-ۅ! S&DHs*l@ OUƜ7[6:e;mYמ(-]b.G9ؿyhlt"ѻ*b..,|a@+O;~JX~wL6ƵNN>C fl2L:ՠh ̷.SX-n(;t V,-oh TUUCE1$0G-}]&[Ws EB)Q$Q[W"&e7TND7[љق/q?9m;3! S݅>FQB QlDB-W+ޭ;uȶFtet_ED.& R8lV-}ɋQ[-É}ɲSSAU8~दW> ]1NѮ{(!ȩea Dg:LAܴ>)bu- GTU (((SUUUuɞ @RˆH:v-4]e eyT%(J ˉ ]|69^i&ZS":! Sͅ>P(8E|_"oS-:)sI"Z7f $@/>ZC@t}^E&38D֦@by4g{ǟVW nj9#&40~4e;gl4˟{r vOgo@Lmcp?~PP@kd@WQa., g8ZG! Sͅ> dd!WDsOXCq[ y/-җwb&#PO/J9A'Jx,M~F[ª i7Yx 84JΨ ;zwB 'rdj+\$cB.NAGN} @{o[4G=PBoA NสwQH6L=Zޞ^'y+^${h/jK<(dRVȽU[^$kA '! S}MT@J 8L:=0Q 0̘:vcjqqsN1hY f%rsK||F̎5NnLa &5%&`| Vtp!22&]!A6{qi'd:EG/@{/ ],20 :G//Z; @rU%܏5JّmJ@I! S> *ūE(6d6vqG #+$XOitO Wy zU1~pmGf41~ƾ@AT?g1>p^n=}/fAj OVۻڻN)H}#1+ތpq47  `"ԭᏑO.x|gWJ[3N 3( CX]8g]A!1BF*3Yr! T>Q*2Ȕf?h'E/{#^jj?9)B#HD]GXo >jp_&kς+w t޾߃vzO8hX;n1 SZsJ% {g+hwN  TK$ zFH9R( oZ բ=7܀h)d @7RҜFn峞Y*7=kUFtˢJrOeC/+UpɧḊ5*Hݙ\scL ӑ1! S>̊*nД@ZrzPvCu3}OgV)Z@l?͠gz!#FsJHL7hx+qAfTυqj4J"m<Bvn4m¢ɧC}De[FEtaV􊯯-dwa~;zd@hQ lX#Kpdn-hJ% NeP_[;9.6Ѳ9ru!;vJ]+ _x3xRa! S!#C JTP )Aq\d{C "4%Nw:L¤r['?e['N"E޶׹S5@5KVS7C//:h2=rz彔 ^py,<@Axz/ woУr)€A5;:T/ُIDFXYJB3J$TIӁ ۑklz:Y%݋_O?%m8! S GP NM0PaᭈYF:.fv|'_5+5;Bͮ[uK->3V |!?ti7./S)јOKv#_V!ݓ]*˜)2"9{JUVRT%L҂ܑ|^ǶɡQ$Ş S 9ELqPP o)[խcơU#yQnߦIb-%$ҰuFrjVCRZi;Z PJ&3*sBa<&! S*!D&P`TX PJm&&KA;}!f"@rV } S8yip?˘=D܀0ȁ!l&D{{+`Q:͔({Dn}eFz(b/!ےY *W tTx=O0@,+ @(ǔ*[< ̛p}i?Ԣjo.ye\[+ TZk&8JH֩ A9شeJ1Ph$*Et! S}1dBԬ* @쫠o`W(cӰ_v&U8E n˯OT_ouKwzfb|%HKc`\\B.r_a<ѷJ(Yl:FS"= (Z^Y0rASA0$fS')73!;".(F`En ybK6pXN{J }ֱfȀMU"DHp! Sm)T3 "¥6ҙ 7L)F E`Z>1 "rzz\z1QX=2Rž22F~i`b3Z,'Q}Bj (z]h2(Ǣ0O lB1 V{dvgbB@)a_Tyr<g7T.q R QAXXa+XYf"RYdިA! S}VA^XC(3LDӲR`YTl/-d+SPa'm:0t$?20=?²B$/3U>SLuIi%3a $ 0AĔ~_0$_jԈ`pA`'Pm`/ TFPòtDŽ\DVL!Hga{" f"jxr @f@~J-^IʛpK G\EeJ~ 8VVWa5z2eZF&O q>L>%4Y%d.b b~0t%3lÄ8"08 7X@5εUB"„%՝;8P cUUÊО ppQ;WU*`Çh`͗%bù*}t͡?s @*DX0Qxxz:C[@ 2/:&\"#1Bpd~s:o?l% B.׿͡%ۀkqlǀpE hDJ<IR/+A.f*EB<=E&_j???<??w??????????޹ 6 `0a Fa &F@a v!ݠNL0P$`C|?R3AEc8ӉZ!9O@?Y%$I @~?Y%9GO*X{,ޭou|1Y%Gb*,*%[3uK0fzQ?Y%~PK{?Y%zu'C| \Έ|A'RT$ PKq2b6Ed#Gų e.o a-rpw&S@ Nf@NP * sh!U^`Թ;>:KWp` 癊a9cw5w?WsWsJ?ϧS)?j=@9<#dcӌEl ?\zd2{0 kz|60wf\FV//%i[_$W_ן%pֵg{7k៿K4IU]]o?}2A'Q |8`X<@@z-F -DSyaز@! { ;ƻAx k͈ņ6+Za>?;(f`8CH#_ao7;=xֵ_f?Ho8 oE{גp|=%3!|f^ 8ܺ䆗kuA'W k 0uq]- DO\LvE"Wy1eLbSG>ĸ 6LPr< #䇅3)r3RʀˮL\[k8**/Kg ||Pw PH_|@@K⤶/]\x9?/iOJv.rg|_@A 'i~"!CpL]Ӭ%Xtf#xONt{U6#֚cT `AfC]XO&Pyh;OcG($=?PIw?yPLf8/iWxS9/i/\@3`30A@'mWUK)<7A10VdFΠIp .rJ 忈;-Dl)w@3` n1x ب-s&:B|C;>? K |@fIOƎH;4A`'ytȏ+հGWuRN]F֐\`~: u.Cca3;`{/ D 5odxwQ!)^L[T{`d1MӔ/'I Su*ҔCSan=p, CbmnQߋB_GDV .уI/PP->?}E2zTĎ|G1C^h5m٦"},%)k'|VAx_Sx_d؎^ E1·H;!;u70Gۦ @yNj3+G Gşb^kH*A[^U!, e@#3Y&qz ³1 7lL)8%@۟ޒ,M!T' /]u]u]u]u]ul]e3 ▲_? |K@ i_ %#;(DF#˜\)a)ꑄ8n_@?MۊEAW$3_JYA)tj~wѱZTܧB:VW|GHOls{0P[~3PC8xk]"$5H6.42ʋD '?9JO(H&?m򟏮뮺뮺뮺뮺_C]u]u]u]u]u]u]u]u]u_ 7Po](vբc{|N9[ǧn'u]u]u]u]u]u]u]u]u]N2뮺뮺뮺뮺뮺뮺뮺뮺뮻뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮿@)XLL Y<"I/ !ݠ^EyVdc\0#u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]q]e]u]u]u]u\v&n~ࠣAqet >`13gg63KfӸ?o@GՂ~Ȳ]Dz/ MMAI YO aKh=%.]u]u]u]uO_ '2RZh!n҉XrJ?x2w~Ypx!6l6@`^;B+I/_  n.zS4;EPF:V^1W?Ar@pG09Ag|!&eE! /˚V2Ksqg&p` ,2(W<_Ev"(@clG`#GP|)#  & +P[q 5L!k&&]8Tf :7ĖgUp( (I"@`'7{1c9NmiХ(6Bc[2I™J$w("pÒ}lrgq*T2 t3(1[ vܐaLӟ67o8;Hs_C6f 3 #XAW\psL[|SvXpvy֮"A ,j-ea.|J#D]k&"òm<ëxaw:FQ@AIE9m ڜaD!x L(3Ң l\o<3+ϡ#L'9 Q{DXj`ಿ|Frp8=i`B{naSυ $!Zuft ?qp! _Q\aV*q@b. nΠĉg?эR'ǚ$(ąӲjR":9Zf؇e4+MM h]B:1Rl׊Nyt #(.z(`GN0a6)A)\G(qsTiV4cCV6a I<_$QBNc4!hbM; ,& MH H}.F1^PR , dS62+bCmwfqL@ F: o`w&S*%]AK¾aEEc\?f)!&-Vפ8 ^ĢaWc:x m׮ 1AD P8 [iHEm#Y]3oUA  ek9FEHr dhBw#3JPy=`Mos^@,8 HCځֲ34lG;Ed/2"Hy࠼~A)Sp+gӐYd:@R6>t|G=:SI: .X/HS Xȁ8} =r0xI/[d8ϒ~*B@'Opuf`Y ioWBֹU3h'ĭD?F"c&xo2jq g @ o2z1-YQcxPh/bi0.>@0!$ @B ^;LK C u7n /Mj˭0遚%!( 4() 1W@4{NCGD6| Y̬hnd Z X<i@mn1 CsaK=ةG7T)@U B?\4%yz!^d= < F E;a!Xb\~t)I`mNb9ik6c z+PC W B;pXp9ɀ C܏^ U bOK^!]߀GI7@a[ WӋ+;zi)fh[< !azswBct )} O 3(N)e/ւbSģc$: ]vhAt(읁 0#8Hsmbh+7/ pK/-mD7h,c GҴ) H1fEqt"JNAoq׾jTߏ^1AJgX' sS2`MTukdC@Gm'It}F4mkAlI>Q&7D*$ @y簽o( R3t[]XmƎg wa)AgQ |@SwLށ_*pk&$`v3m7^Ԡe([J A:u(܁r= )ȱw ]) 2a2̥; ɱvT &D0X! CH orv*L`wF ;n τ.@2FK"&1pF_@MVyq?/uY~z&y*A!]2H1_0"j11xm`{!/f6';x7 /y +9@xh\X, 5+0D٪^Uz` ڽ@,jx~ HBڨh<$h34$D+󆖵1;% gp w4tެ@3 k-5pD 0:S h TZHhzت^罐/-Ȥ^IAn*=If[| ; 9".C[p+J\sD׾X]p"D:Ds?=~p+aQ:>=R0`U;GqFc!n @ɚ̀&|}.~a< ۤ;H% 7\o a0#Pp#!Qe@"eB8 -r;=Al9\HP]hZ &: m0@pOsLɰ%kϛZ8"pʗYroaHژ`deop Vs7&s^Bub@ "U3 FOC>uC[{Nafxi9̸|t%"0/:#[FaѺV.ϞCtRX<].@@A#ݑ[v|KLxGҸ[h<fYqz%c%?]zwz/Ŕ' s +tkXnk&h;>1xS'` wOwj :8qo<*qT00O"|"#Ÿ|\)ԼC|}>\I HYCY,8*"_iT)E!|<04ɘ@\ F]` |M҇k=@ xPY6ҷ&Mmz "hp) I< p"CNpDnQYD)W`d. _SVXZ~uak(10zAWq k $@fB8C_i3"a@m@.`[E`DpGQ脵Mvڗ~Xd~Bȏ]QY3ʃ\VG)ŕXE=|Tyq]c)8QCzmLk^ԅ$dDav!;:h ѝ'Ke-Va'~a _ @![FZD5߃>8[)ٗZZ fz WD+]= glG b^+凮뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸! Se * HeV5 ]by r̮4IBdq.'զgzki8ɷYc@#xQt#Y-suGP%(($+`}qE>FN1nщ/;KyHSӆQs'2ƏÌl`iGa,bkl5n9=C5VjW<ڊ Rڅ Vd@F)UXB/rLJUPdJg7kϗZ! Sm(37P6@K"Vm6;xZ1x̝ڊ{3hhSoZp7 z{XBZ"IDxn)Fb>*Ԙ0/ b+ФjѾ*kq\j0B5|,1%"HA_`hۿ$og۬ÍΟy.2v\1lw.dC0)bY-(1%[Kpsc^ kt̮m1sXFn*lo3! S=Yܨr+`  Tp`q^ ;e^:veΔðUj߆(Q$$0&. Fws,!) hbbHStRM6uz Eu8=~(:84eȓp-eB)9PT` f~,o6t:i! hLӼh.(1eAHߌ(P1W\z+"Ri W;vi%o,DbYӽ,0i| ! S\C$t 57Q@\*I'\?)!-s kX--{$cN^`kL@_ S?ZMv|BP$tE =pkJx+ p׈UPeSrI|v~\@^S֔"LB@*; @;,/'uӗ8ۮ⠶,VֺDK@^y p+vEBUgr[DSU7ɏBj$8! S<U!`UtZg >Ϣ̻d 3v9q#-#&ɑZC0P1VIڠh$f-bⓢC)UədwdѡWRIs~cE' \X҄oY{qKHBΡVfMZ&ёMW!*S 9GYx(bIRLCQon骾%3Y!!%ҿZrF߯a)Ȭ@s<JC&l 1ak *?!*]tUW<Ӱ1z$SSmDqm͖`ЧYčXPIPۯm;o-qj@8a\ _A_þ0</BO `zFcP0e^Y,B:p!jTՆ̀%FٔMV]Q [,o+\WUl8ŲeH,#I45NCa Ģr;b"mb *^l<QsPC1"Qux6@8!TmFB (u*̴X^,lJ]!TeabQat6HuN3I k mڌAҌ>KXͰ4ʇ3{%OOC> S SrR5qmI[F(䡀&2huSZX``]+AwjS+k%Άּ'"OO 9LDؐ31».‡;0V^Fa5$֕YC26 L c|M,)v%(!TUb2hl$  !9;Z5Kd @skZkj dƒO:y.1QnԨiYЏ ܑq}ȺK 8 3`I9vh壳{^bUjgeO99?c߂R4#qSdI" m1p]$[4ҙJf:<EHR734+dQC7'SѸm:W[vjE!T5aAX2(JE\TJ-$GI!ikjcxW:a'M՘dZS]~[ǫcȸRPRznYac&eabsT%j.|Вa.HS$54+ZhQ&0စ#_GKP]5Kk:iwxlw|K(i[(񦊈gNvsJ;Np!$} [)ZH-J!Sʼn`@ B"Z"ۯœ[NJCSpEUY& N7.\ۂU 8#NBM\[jy CF1x(~`vrȂ?ϛ{ o-pӘAp0Q(>QgOsa adXng֨2LE-jq-| @DB2D#(E|є\ f1H1E "@p#F ?o(0zo^Ek V1J(2B5:#0$p! Sf)BR-ĸL3:IVu nnD8YYҦ8kTg !VjĔںbSq#0%#@Y*hs[t԰0F aYZ% %v%NR Mm.@@$W(*c:I:(>禹Y"'jL9WN4IcEi]&Zp|2x&"<~ Dy'~℆ wL\ܞ#x~LDI<`C`0#05┰Ɏ!Nze;LXĔ=oL遃3LLڛFuQzè-ﷁ#xoX~Gvmk0^r^oq<#|G >=`#FA@'~^|>OWov KBe`ղl@")#h4L)N/ cTM74\ldڼʀaڥw1F(1?3"'@51'ny1WBo~)NE+Syߠ!A`'L7KZO2?s6vf%![ fFrPeIIyU@:ŞS`K{3n$c7,|lT(w\I^?L2nS"ُ 2PDD>2C?|wq%AI î}`#(~<6]*Wze6eY6SsG5"nboB R({#@vQ@Ǥ)b2B VrP5ugzX#csFȇv&dzo4ܨU|-o)öA  8=*^oQֆ}oKZ->KTK67#x7#x7#x7#x@w|>H00GO@'IFYi%MZi|ϗ @,W>"0c@  sGg?6=$( Xe#%2#x'$z BF3|F>#x2#!'|O>'|O>';BG ;4Ap_pNR z B4AyFs4  x @ =8cEHCh1%Rp3B`u B 4#TL`gȊt:o@e@ c<3$b| ,H3mpt1-/_ 0O 809@P !kF$­\(@AӘZ@nR&.9Y+ 6,<]h ~\??e@`'La9}+fSge bN#!zg\-ftpJ#x/ Hp=0&(5>Ϲo0x1c;OO՘Gґ|??O|Y|h7 (ָ,."94n#VHK\-X(Lp[Z'_5 3 =e=^6<}<~ Oş66H6%}TDf(~RI:?w<4t‚xɑ?BP?b8(@3y3"L"#*/.pf A'7i/%( 8X+@AX}J)s|Ц2ˉ-$O_?<%{@Z`jZ)LY#%LΦf#\A'-H0`A}μ~vЌ)o&egdul( ~,f2x! ۀwپ`; fD22Kbյl#'Úx5{(fG/b|xNH3 4ZB_yp?րA 'LaAXi"B%L<`5Teh~F+LMy~ DxGsE66Jύ݉fgHLL= Ể$!s'1:U;}+i X #4y|m _&@3y00sS/@3`4" *@&G㉞ +W@A@'o(m }1r#oÌCVb@'S<֙蠔83Av3b$5d%7&18{`ϲC䄐w +Џ+6~`Ġֺy0%aXv)4|l|A`'oAO?Bi!ofR"ZIy`9[ hι Y6ب '.:bHЧ`.|lq Ŏe5̬߉.аJ?XB91mw؏J? ҄rà`[Fi2A7z׼A'g0e&y@&<"%An[Diu&oŽ1ong_cG=! Sb5*RɚJ#:6k"!cU12 Α|{??$0DHZ5/!MVPug* ycȕET*x` i2ƃ O! MscmSuܤi!{M$l)VךB0G8QPU]ӬV,&wq/Hi\ir;QlDKI,3ѐuJF$!YiI'v=(V,Z{2rӪbؖ"(XZxyO U)|D=! S '(Hw(>JP@ xmZE{hrІ-U1v4Wֽ3̄aB$fR!V Qp2%4A qt8y3ǡ_͎K0*QT= 0EM1gS_vb)a;ja#(zX dq+/($`WcKʓH%mIE+ZKBӮ6൤ޱR}yK\idzM_[?(v 8! SI|Vh;Ǿvhv{A>>Ոsw܀p?+f9r dg'+HexS|ԛл;}} %!b֣A6MjYSgh rP $# P%(?Z93NRRׄk>D)6Cd\Q44Rn (%/ۑ^#(- OxOoO 3CS;r'R! ST+ XQkAö l"ݺ4$c:o IQ;gDL5{‰5u(x.9BYߪ ru "Oi ԔxMTtyЉ$^Msn.%(e E@ !Q>({룻Q&a 8y ](v&=S Iyޮ\[=xIMoq_r>P;veM2N^<;zXQ`8! SU#"Px** qpx=÷ޮ hBM~[_@1 mI(* 9lS`>b8?Dd'/Q&ieD?_p*L0J`)ڤ['l:^S'pX3y-B9"$PC89e { 5+:4tKۀLa(["b)%<;Pјњ+NA f:/zDb@U5\ ڪ%*S5:xA QF'! SbKUsS,(%d94l} ɾXhDMLO9ø&PD&8gGbqm.lryGmn0n6F,gZT@16nf0EDcH%bvXf VB2V#Y;YHeC#73לq w{F`11)Yw2B`ޭ!aД]/wES*Z|\] ~O0E>&/'@!C! Sb 2[+Z pb[svV.dBOڛ) DCN_ $B3qԚR cP^X&v)'ƙkҰ{e+ߍK`X\+IutI0dtsւ&5'yJ |iw"*;s3 \cŸ(wb 6@;eD ),^z`́Z4Jô/J(u"PW_CE2Ő%w>0! ST`De @-\cB(vo*\2iCBd*!H>Z&h <c_)ԴΏSxqwtp ['[U;0R3@0<֝*ݮO9BĄ3F\qB}Cb FV:f™! S" $2 *–ez,2Y7w}P6xW+F0{Ff=^ZbnV 9-5E_1\>JZt.Aڔ嶏鵏/c t:vJdK(qrTgmݣ[OBʢw!`8^'3 I\DEe{mn1Vz-J|mN底ZSL8_oǰ! Sn`0 @8LU\d#5;#"ZTDΣ< "*øYh YN m8oמGq*nڿBN}Hb8!Hdb[M2^85Rʵ\`ڐC%+B(ŀC)"vWbذ=! Su\Da!X(`րr艧=XOD';,^ "qyQn#}u[fqxYjirC^0jaa7vtuk*=U +[E'`7Is Er[6I*(̕z)? R **W*^K ,BvK!HVSj r_bHeE@'w#RbLbc:i$ْb/! SZP(`* BP8Lwybk~r]q溱7Cѭ}d9i. -|g܆n1pݾsZjMҏdό/\ 7oɜ8ONo{_1cr3ƨih@lOӛQ ^'Šk=&͉kKI=e{S{0 `FNH.5EkiEE 6ɪ)hPY"2INf^^6noGkçs"jМ! SfPT p@ bfJ+)^˔r^ng@3y%r;e]ݭО\:oFn4W1R^\x&_N~hΜƛ甘t "+|&ݸkk]`Ā"$:.On|x74w)ѓR <`,D\7Slv|0L".@m"W#`Qf)޺ѭ2%U'K;gqʼ! SOlJDb*)l\ a]pzt?8]>sPg)aP0@웉Ao3ob \=?{gwr#MZkufXfZE92CuH59a/ҩķIo,NȟgK.5P3 -A.@4xܪA`ʘѧy0XE"|ztI(K&00( vJR/l*Ѝ-.\rMujyl{Xs! S JPB(b2,VXpO[~:QBEN>ͮšVz (t*A=TIԎ1I26UD36WwlzCL ¸LLM]=9xdNSFU3-5>^mk Rm-@#]^7gR 6^e g+^RZWfTEpo!;`ȌG{`TO5kK*jPxzPs |7YOxܒ?`UbP%@uV%b pt#zXa[si05Kͪ֕(ϝ/-u! SՆ?vvTJ+UW6UCJZ=@5o9+FSaN>RI,MZɊ)sN2./ t֝>TOhE9re[1vZ^Qv6 $ ܞGU</ooK5yYݸAes&Q[ b*-SkR\0)-y~Zt0crOa[I^</wW CT1~vh.;q˱1aSlZ5edE&؇\E[tWb_(! S$"IR D҄ohĆS {@S9{P1Q=JIm sSA/,B/i;-7V<âcU ͅ[Yʮ1oVy]wűS3 %muG`1 b׀Fn .(; pE*橰 @Wdidwx~ O$ x?&*7I7sgQ3"<$Þ4 XBO3A'k4(M BVۮ  NYt( Ei<;wx7S&M_9bL{1lIH;01E24!x? <}c'=H$3xfjY@MA'Q)6O-w8 "=pT$ yaG,,#N&Aa.\ SGǒyeĝ 4vCF8f~?d9:1@f@fA|{.f7N˩'Z3r^.|'˝Z}👩ͅnNC|w9-@A'$_`+h TH;Dq{$‘]}S>iy7arXko=A['@fB%Z:#K`3bM^E:3(I~%?gy ?6K?$Exc(NA ' D@c?(A$8 ~Dl>!nUGymMݽ? gA+V<> rrf1(NZ y?A9ϱ^HSp x_ Bh I]׊VAL$l< ȳA@'$ϡBe En$6 c~m@ ̀[@xi77:6Pt+ec! 4P3N` L<  <{FQzg  g1pvaRB(n/L hSl#`Xף%_l J73|5[O -bd&oeZB ?o@f6 gS Q+.J)$ f$8t%3LQ. ta|G(<=*i:G ?????\OmXB.a *p%W`XRcIYP碠 f3T,ƿ^\Q^>K0doxܵrMdM4D^`q`!0d {Be2ѽF[w0DD*i~J(OO"kJ?Gax `ň#z`D}X⥋2"oX=gW5"Hߝ:?LaS/$g.,2~z?p+o}{îz nx-Ma|:/pSߟ@OE3jo3~Nejo&zV<2A'T0G@ UX 2+9/ᴶ,YB9WlЅA?fܪvtboɀ̈́py. }ܶQF6"\s@@|1|x Lvg&2J⦼n.rK #ÔiTA'R(b"D)ڤ낒. !Ϸ e&QGOË́lyRn 4>8/i; ЂCf1p\lIRv3/3ODfN#< FL>gIw~#="<`vxӗB=!/ #A0aL0N?A'HX8Rji4=B0 T`4c9-7r!:8azDXSۤS!ȕ@K l|:#v(_3I>:\F]QHWCᗯJ> C/!v <)~^_$|w XGT@ A'S9&g3ep @e# *!VGzpz3r:π͸L9o lT>Qipާ:B>eTOc#ėX,|?MzLf1N<Gcv'$%n >\|K#!LՂ<4D%O.N#0T`q{=$! SĆVBOty( Rпkkb^u+ / N3N,+b\I. 17UAklq2BWwtr$S MkOM&ڸsKw9E's)S}!|:T7hQ˶ X[ZNE6Pn<0;S_J.h(!"4h%Ұq2U5Z$ueȨ" @u$+(Z> )F4[:#\hf'! SmGjʇ{`P5֟ i$2؆%X}Ƶkg$3)zJ܃ *)dj_(aW".M+Wd<#%qG ~וbGl>8L_&CwWzƬjHf\zo%8,jvJ hB w#lOT2<^^1SxLȑ“ @%c r-l7F.$SӛC*/s^r=6IB! S5CPdqQ 7Fn0x]J8fOI΀3=SZZ)4O 5\KgkLPK9yF >GĊs'Ly{s vK=|6fA$Q^mdGeOp C8PJ 6ɛ 2$Rld7\Riw⪼sPlZzgސSV s$DYx.~N ͅ{r$\gꀜ [I%³*O89X 1$! SqPS0 iQCY8˙,T$N;+&fl9йx0>{aH[7D^!3G9 136aXsŷ3f} qك~#;o8tt{/Z.7 %XbcLH0)DU51W)kD E]btNd6gf2ŀ/d>_qЖ; OLfBqJ۸%gM<38p: tcOp8A=~!ŀĘ~uN 8i7ɿW? c!S=-SAk`+Vl;#`|c߇n,8fݝ KZ"5H: !LG$m<J/A ^ k8O֛(?QM7x uiy54Bkƀ:dLvx9$A. X XجR2CU}YJ)(OUB"}7`tF57?hvZG{bEzQ,{DSLOQ3[˱fBrB>Dm'B(=P)u!jT.ɀ{w+Th,CK|ƿA:052 I;TX@DEa3`$UrvW1gY5e{O+)#7ZFsn6\wU z(cD[mtɟ5` 'I/U6S=2Oe_}JRHSR@q~ tP)/ єo|z&Ȟ>!TAa-J6s/3R  ca%Yz)DrQv‹ dDh^Gr7-HIqh퓜^!4/ŌC Vd:H18eI` ̪sM"OD > 5 KGBؾ2tUJ2Gq(ѣ 2w2a} oY9!`fPv zJf(z\ݚ?=Vgf$Iz-cIawxh4k=!TEa!K'u)l,/'SS6OcD[ %ws]/`k^?>s<. n4:+ײ%[F0fn4̘&|I`ix؊0HR4XjjAGt_]gZdPzY@RAShrVүξe Rm,˱-T4IhB: ͗qL^Ʌpu!Ta `"95Dwd@{ѨNl:Jќ6RHz^@E!Bonnz+M*;ۜ 445m9RB$ &fI>Ȯ1ZbJh0K.j,OC{/ mJe)Hyoq@⹣6'&pk ;AfQ3pnJ@ n#FGY%!nd y\ C>y3A!cЄ!TUa Ĥ}yxHVh>YWjɠ!dH$n&zg^_N+b %ugQd4ed$ZhDP"$6$y, ; jFsӤ P46BфTPڙ0꜃ZXWQN":׊qG 2T*!5a6rP_Cv8@84A^BWbbL캏JsY1>-z)Q`Zr^lS&H>!TEb@H& E;c 1v*R-`7mMƟn4V%M@ʶ 'Eo9=ڲULn+F'@s(ntL͌RHmk"%Fef" &Bl?ǖx7ll4ՒAz?vjΩM% fAJ"[tE-ݳk|| $7T]OY&邚TW c duԍlI8^>oNu44֖(!T%cHH ӶT՝&-$@)&*V*bVF"{`MzmzkM NS5ed1$fA#8Hl_fA¿*3 :i]zU2<<3@ =64=Q.-x?#3f.B$"kd]&dbb{O.qǖ\f 4:: Rs]LN aaL--@2Vgf 87'Lآ\[e! TEbh*!IV, K[*Z9VQd-BRDo<뒛m:6`Z DloQ!KTT Mc.`8U#|K+\_ ƥ r0MK8d*&%B9 g`x+ӭzJxpFAƄ ?Y9`fM?7۩-dNeϿ`z&;;`!HQlh8*aUT]|:ʧV^-X^Th0\iɴjTVfWe폱QFLcό~i=I! S͉B',.&UJX<Wv뇫/GLR-L4{6jIXnqbZYq#ū#`eDRƳF1އP$oEk4xELRS6HuւF*:<[0W`Lu <$ƆKB!nd,GX)٘Z+flC@UѰ1б^us8w:Eo",U;T: TxF Awa_W`V5?'c МV. ?P@ xKj. k rmjoӆ7j"8.pGq)MZMw< ZnIAB =A 'v>#'exA*w!'s8g,b(KB]Q`r ̀y4kvw?i +~6+IنZ;P\n ahZ8S`8M9ֳNoĬ|JO ~?PH[q#1ޔfݙf@A@'~ 2 h #)24P`EhJ#K@I3aYO pC{UMZ6"5Exe*RxSO@3t27pjM-Ci2> G$4:!+Ox |3ϦN~3LZKx,8OLA'`3>Kw-cF4F4cQ3xK`6Q T,<*?[{mz{ "yUUje( m[`j\ly*w\Ï<˕Li!#b 2$!2ŒMr:)ls A?~G`Qw2YX%/3nwoL-y7^ `kT=A'ɀZ=q, hhiP PBjG^|:|}p.sx4<|sKjA%lGoaG>0pXauG4or0#NmWDAɭ'PvEt)z__>Ec>mXW @EL0g>*NmǮ)/X7'm& aސ.!!n i…Z]*ν(/Nn}9kbo2 R 5n U*MBDwa0;{^Mᱡ1!]>hhʀ8g۵};yF[$h``ӟ(#'|O>'|O>';Z\@4@ӱ_/( 8StJ_`? Jl92+8e)=0 Ѣ]:U@:ђ`Т #1h?-T l*: ւ@!X'Wۊ;tD]3(0B O`HBq%H2 Jp ӘXAf&<t ǭ.cGfPxu`Z>??2@BO +NtR̪|F OJhm6L〉Q#x y 'p[0ӿ6Ҧ3p ܼYr9Y<??YɛmAF|uW>018lZPX5o ϱ9ol~-2':su_|f5Ho&?B̥o\oL)ӧ`f8p\XyY[%] a'5 P#NK]) 7Wsw?c B!B]f@ [f, tТjBF!z߸@3 A'o'd. ≀d :L`&<ii,DŤF ز #O^; Q#x ͈<-L%rcJfV/LZo/f*7I8 ߟϕs+>L'7_S{Ҽ#@C@[cr)>+pThoK A '`0 Tp-<ДD-h| P~<Qfx5X1/'LmCy,lQ2WOI;yB <byJq~q{dG]~#?PJ?1PML1\ &,re:ݾ$|4R32aLWQ?99뻽cKƠ 2}1{:! S}d YT"E)%@_=@Y-k?NׂxW(\<z`!l"!u@ /{v9nDqfIPT+hRikCQ=א -.D!͛ݯmAg|Tbk.[6Tj(cT; @(,"ͰJw\\~w[Ȳ&02ZPh6@! Sa$X(UV9]k.T %YX"1L1ݑh~t,b%:@d-ְC_pnݗ^Q(n萬7Mt ɰC oJ6PڟZSZ &j][z^{n+tOiO7uy./m)N&,H!/<s;@D^V BAg &h.XLKN֤*.g?aCh'.A(zfRQ؏ZX! Se,H`JUQZ( W:p=aw{m#ֆI2(Js3 @Iţ=aa< 6|U~XsʾLmk '9oa~T}9e^; ľp/E&ӣ6N0z_ =l 1п\,:-@ (`HݟOF믽'[Q{\񨲶$i5JqeWg! Su2`sJj[Z KEo>ɱ"m!,0h9ٍ~ݖi/(ƯJp$Kw-MI]UXs"4eaE$ [>IoyL=B|Achrt2S F2啂MF]o~rW-{O "JDԱ}P8' ͜ cl.C! SMHADD8>}; XA8`Tm ۼ>3>8 ilM8 P:*=+6,}H9e̤ͩĬbLhxPl<5uX(4T;DF,i0ɉ& 2!wȴS%emujwi2j1[/8?%CE_mx=<&€9BԭĬ@Q8\pF1KptEHvU<ԭVў ƍzek+m&UZc! S`c"@ BL:+|îh[N)yos|\|:V4OHP]td0&ԥI>VSG53|C3h~1}td 8h@Gt(.t §ai؅>gIѝ%g$}܍&>g9&C(@gA82!9 I ;6iw.ct@! S=(!Ϡn% qch%cq~qT0 Zv-=#a>.CpwK8W?Oؘ-Umڠ0\}&Si`>{؁:'Dr$^ͤxm)4XK `t*Pw<5gp vgѢQ}(4+? /+^W1Lu#|I_pw'qhw7! Sm:GbVP(-0<:w_{?;#dŷ!Br!00==cJڸ 0,B962ݰʜmr.ul(2{=#/JeX~⇮w}`$9 ;}4ҕ:8Vo?\v)֛;QZ<>P,@- _q11JgsN/}mUH>@{l0jOد[k @~R5brw+t!^>ڽ~6z'>! SJ (ZS)t)$mmNq\I\Ӵd. ӑM5wZe0PޥiNY$]skvb{ @!"զ=x|Ro|53`Խ/6i c&"X+<*)]R@d"Sgz+Su%7mɦ} āڻ`A}A(`tdajYoF4=Wp^ H~N88[pc,eML gSLpc{./! Sͅ]̀WRP;=c 'V%U,o$lpgyfC]iDslr<#+ *0YUjL\lmh.]I) 6UZkr5Htt&_ h)nxR R}N3f ~#|&  ԿγШl?*NF+DFE "@)  5S^t\r?&2+!pzG @`+C&)}PU @c}) ZCg !5 Os LJ9ٓ$"MF:/o>#/%^Y΄1_>#u>x#iB5Pk tP|+F[N0~kD?BsAHvsONp?ybww5ƃW(F!|x"*- )Ӵ3KyR e&NKL "8V5a}r5\Z~\o޽~UhBI:?M; v56l/-.WMgl3*@XxPSb*\Fqy(4ݨu@r'ī5| i@w{0QE뫅>Xƥ<jރNTV}Wi;o?~JPP_F|OI~2` y=6(٘7 ZA ! b8:ݪʄ"]lJN~]ψb;! SkwUC,ˀ 1G.mIGCt9N^D!dt0${ښW6ϖq>Gx "ئ`r#i]j GPhuֲp'h+_|/Bv6nK|OWb,5XɱÜy^k?^'=;% WwQh h`,$P7xc*󠐠U!")H"4[/e}vO4]x]o\x! Sm>VJ&pbyуkO%A6U'CSz46R߁)9dlG1G~McsƇCWcǏv;7;*iQJg5ֆ"u" lŲ=F7'uTFqTUB@@ ΕqdHHt#lK `Y7-NZ! SPHT,p@R $Pm4^cF+Ea-ݚBH~o8rTg3w]cA@JT`\᷉ gkd̆@A@ C)0SqR:r$~NJq3jٮBq#_Bg>HSuws 8(6$C+ؽQ)ܨ6ƕk5^wqFY#=b#\\xc݆w8Ƨ! Sͅ$J@pvYU4N>X/>Jew)Vz:ҾBoÞ@޸է OSF#tW#l uv¯PV+f#] ˉ 7qW )V4*)S(}(u۩$;r\=IQtG؃Q%HSE F@ ul]B|+ V iwN9%l)^ԷIF!%YjT)(J Å,?r;YZ 眡t>AF܉Tqd*& U!XЋxSq,[L:FxR7! S Y{e@ Xm6.ioT6")'yg nUn 7 Ƙ5QUK9m۝@h.&5k[Kr4.2^KM]@idX8Lx?jYU hi = yP5ﲘFz  Se )[0Pkamb}N<%(@g Z@eVRdeJoا),91MVs-dQ G$^5Pl3]ӽw^s8! Sm" HHU*Jx΅l\\vLIGqS ,`"0H&SقxdGsK|Z jh,!L)3phqĉh&G݇J>1zۨ}IҹIx/q4Wh|zYYA{J%7[p H* w4;@XXDz' D u%"S;%K҆jaKYpopqma㪨d/s'HμQav/&*! Su#gm0D&3+;" ĺT\ҼQJ!;ƫjޡH==QaA3mkVm2w]<4$:1eR7# /MQ Ⱥ\bi>T ٬4l1ţba(G;VhV"cbC(RpP1Hm˙Jơ( L̾5;״7mG"ʦԐ"ҸǢZabnQtb_eH/[ (A'g0e&@|@ZXl&!- e h$iy¸2iG#`yDA"a ؊by1/tlV52("}/PR)3kNaeJ4+t υ߇ ;!ʽ>Ѧy#,&p$XD7qπ͉4oUۂSV'憿:*Tʦ`"# eR oϦ+Lڼʸ&{ . #ajf dirv&A`'%# - EG-`4 TãԘM^]vl^9qYM a`, 0  L< <) ϝ͡xq;"? _AQDDF#l{) v  hP:܃q@+s/L!Ktݡ%2A0"n[P` hD"Bc^*##O=4'Z8%^+@kUOT^^?????;?????z :~?????r< A"F4mm [8aZObm hnJS 7h 0@!3ܢ}=uK0DWUX`Xpy/BW,×>?Y%IyZ{:Dp^ Uu, fbɀJ:,)IKOPK4m]gY@,>ejNY%~޿>c5K0y:K0#Z{dA'$?/` Tj'e h1Tkk0 b@ B?uGґד_>Eu4 "wAIhSM?^hjfPFXnf^+߉ ϒS ,d C EJ9OI%? 850K !LB01k=J:"p`aJff,u1oPϠ'"A.$g}U_zk*&`w=Zj<ڛ]`ڒ@wS~~Dt뉁Xnhvi0^oU [~wG4p#WYmɇhZԭ?HQLڛ:;nNzn?0Vߏ`kA'Z@,% YcB̷G6+;Af<ݠqgR`iuUr`.#Tqbfu<3bT@9P袢A1gT򱠻۪æ'/=N_]0zX?,l8Ip~EߡxfNo`> y' 9nZtf' 2qT;wKLX P.NKrF]~&])HyDnϚnn*lvjxZ\ |0"~[h6мUU\Dh@ew;ci·߻D-~o%_7q[t{{6k˷_\bI < 'z<\yDsp?@A'W(HDUӈ`6)&v8%SAkIi%Ÿ>>ʅa.oyف͓Y\0R6 ۳<<678hS+8 ˏ&efÔ); ̴TL~X|8%> DN^9cV5I#b?DU1e !|mLҿI}3bޙ.lQ PՅIA'G8cM\DA*x=' $!k4isG!^ǪO&r8p͈iTSy:h$M /62 FQt65`Dv7 !#pP#~~')x( Fhe2ҎƮ}Uʫ63 5O}RA'NO A ~ZI|0K6eg$ e?;(aP3 9]j6i22A{el]KF~'EȢ D~ s!(؁c13s@O/3Zcy&P:8:0|! SeB+|r{ZY@`i/=jCMlLS<&eX k]W9d?Ɂ1E߹{LBC $PKGw@LuX ;ؓWEaanbkXvJcW "J{Ԣ 0` EE ^,#n[H"=(KYEHSRJX.9FTbE ^nɊ"U^,Rd u@FzN! S#fX9@ZpgbLXeMARMzV4KXF+U1}LL+4j1rI9Ԓ91/ .c_}6p8+5yv`e^G|SOm{{vVlL6irz8wAgG! aݸ Bxa)8zBܻR~s,8]']j,  1΄ŖU 0/  N(X7@b`!;J2fx6@! SU) HrT] kLc x~ *_ RRha\uco h2=MBU1dPqR]f߉k6@Znʁ+StPeثLӏG?n#x! SUd#Fe [+Q#="Lꦏ̷։<`'05jW5=ҀlXKJmO#Qge)2\͉[lL}(sC-ȥ 2aEAA fk&9}MÁW&G@m2AR+DlPpW)FDj [ȢhQ6EBn1]4dE!(]R1RiC,pS/+ o-\*SORfJYF4U! ShJ@d(H_Üp<.YDTء4 ͜d3ϔٳ>L eZ&dS(qC!t=Ϡ>N;oY ydw TL)` xƗCΚbhxe1t|jژ^jxOIX_[3ha!LBsCC4'BI$|Ӽفs75<9o!TL!!!S8 D@Bi>""6av om߷x;ӧ!مǨo4iK7햌f%H^?>? BH""@>yDB6!IEl>ûo`\CTaշ jct|4X+Q_18g'!S< '"PP@ސ5xfwKq'(in`,2ExXOz~xEdȓMqo$nu& ?t5@_8:b^tAg+Cf4׷t C #bЈOP:C2ʌ<9wøa >8yE u ."!@ |S" ӭ2ws!Ѭ>>tfIЌd'2|dgj_{i2];q7z]n [@5+#˺1*. #u3 ©ߝ!*S)gJxfI* @AMdX+9`pbk_4F36`B]e1I$|s .jS sHX%Đ94[}qLk')136p`zˑ$LDIA 0P_H&"TW:-#B"[;VM71Y V MU93=EӘ\4 FiΖƛM:4X=S nU7}K=ϡiY}zʱ~ 1hnFM׮'Rcݤ"1B"0kEx0]2Av+!<%yíњ#-[hI#0 Kg|xPix!jTՆĢBXP6*B3vS(1A!mlśU%ȋ獹f禪iJԸH ±ʌ{;u-5K ,"h 0ƂJH/BUޕ9'D# tg o\V_Xb\~26%Ф+4XfC`s ,JA9{DY1mAU$!=VQ7@BTkNQ+`u{JKc𿴒hWK(~}C!T6b" W{T)pD(g@("톯R7%`S5Ց<1oWSDFE>*H9Z|+J*nJ1ޜKS43N:ݮAe$t8#ځ7ʻWr5Wk DҚTeڙ-K%Y9И/p 9 n3/jA  g!WFGi.H'<_g>}%sBmknd,|H)Py!Tb `xɛ8#qi-&UE=URSKeH9d8XeXܦлru+X*@a!Iolյ Csx^\R6lT:B&!UDY'>5B2cd/OM+f}#'. T(O ^֙o^xe' ؀Z男i K`"u$FS>^E|)cȼՂ.Tm!q~ V!TmNCaDEa,2W*$;4i)UfsW4j ۊOaOJtcSeTߊ+Q*SD6x5MXԚˑVT 4b yYQ9:]q3I.E-Gm#e\ɵ(M=̩Nk­$f I=}-L&^"Z4B(L4, _rRy_E$e ACP:.*1KX&Bp !T]bPH2 ^ЪWtI̎awU'FoJ5d@dFP+z'S7܇H4f*}XRCtȁ$9(8ԣyEM7Qr^|Q&l4/# ˜[s@ӠQ6^E\zU/2tPzE0KhT i77fMg1݀3%Q̶s-ǚq8/{'b)ӥ2yBfH`5ؕu!Gw!T5 aPHqSupu%UQ!'!TEa"7MjyjZʃʔIDĒ3cNV#cY1mէݫOPdMZX;Lט:b[49E! lQ*#Q.eA:2IDU\uoTKBp:Ce|%M-ܭ`u-)⢝24"LW2sͷq+̥k0$k::gRs? U sa|Z !Q9g^7ӛПR0|B9lDID!S͆ `B5pA@eE->UFzCDi~T. &r#8 kY7>(R k'RCA_HmK\jh#LBATs^ CŅl8CE?ŭ%!Sfn**LB--KѠqԉի~v@I8ES}),0İ-,VhtRp4šs:tgyq _BHQ.!o TFn{^FyˣSZhTS,PU[*ݸ58Hn ;iqZ:Hf.e/(`϶ĢE76|mXzIK&o ,+&kkecኴ0BzZ޷v@ %` [*C$,ŰzVRމNn`q N48nv?A '1^]:`C(HhƳ1X}3dLIw?_0[~L f0ăYs gz]'UGb 97O2sA<'?o~^:YzLK"!N;҄{Xy5 A@'|C%P-4IF4{ek `>nY>vxJң] 6 rz`h'jo͊5̺8>Sn6iΦ x{/pmKd=Tp ϖO[A`'͐NbsTuŸhۛM *׏4#pJɠd$m b tP?@fX+\]H%#@3e V(A~\9KA+͉x G%?6~O}{儰%@3y2KF/M9i@##v&|/ A'L pK0} )xK5U>K<# 6 pr2;C w_u'>E0xɘ%?A9OA _4&-:*xrWWyM@A'ɀKN8 Q hc>StKڈ҈͑#xmpi??d+>AV'pv>ϓS4}|{RơP?p)ý5njgIp3ђE,` }T )":|'|O>'|O>';Z.~L񟁠4 :v#ӇKbiP80U>Pp  N@wp(jMnRRIbX8R AA  Sk0M; c8O'W>?n&З, -t<8q 9@+F`C [[a6Op9#`$ul w `T<";vDM|@$xTKGѰ ]>???o 6MHR6dG- i[3Ba d Cxd"#}xǤ1՘Gә}7dG? Կ_||@p|[[_-8mEșn#V>/Ͱ T 68[6YgfO *$HјB2~[~?fA:AҀd͈$q3!jgA߉.!PF(R(XC#t#{#ozgU6fDeaW DCş5g@A 't, %@(yYa&m-Dy6biݙJ#x]rO \lF ulW rO Lm/{a|'w|qg>~F|gdzij~ S:>LRf#=SxPtA@'`0 PEDS KO$9M>#`怇_JN߽I(dd=7]J_ww GP$hs$')A*nLu3oz(9^HM~ :A`'LaAhՑ_Ad,2uAI4IDy!!S"&Q$ȏ3&?&Ep|ɾy}ͤ֓%;aR R:u3Z)(k8Z^b%;+cnakL"&Xv&a"f  wHRL>X dѷF#P@MY0l2}K0 yRQEo6*z;v.>C-fVѥ]}c`& )`)+L#^21\}M3#a^u0t[q#5KDe (FۦB73cF>1~d!%Ngz  g#uRaC2_xy%x$bZ^",.WO@ؤAԦ!DSq~qp叾X5Z߲AL+^UhѠ#䂁rg—hg0*uK%9V2MΘ4Ǘ̈D?\WW k RϞ%[r\ axgi?wƓ ;/@ѴY1B?؇9z뮺뮺뮺뮺;訫:D.*Z^3 |KD/<ЈpE}((DD``pq_͘EJK@Kv*Ị$lE:T*6 j7AFL6\z7t.zCPubqq{da($/~ 1IqD[Lcc~/ )# 7}@PWèp-50WydK|?πhi!}z9 @)rB_Z`J% ^ .=EX!pH&L0͏^91m O8QrCy@Jm ]pj ق(d@(v/q֚{C#)- SR+8 Q<g¸׀?^Tȵ 4#d9sc=Xl0[r6*f%` xfFIx!r`Fp)j Gg/ D n;4rbqKBp n }/%k[4ѳ3%i&e[? KO4cAlBM$̸ 4KgY jG𕙬8{3Q P j~LT Լ%ƝUm_f5b7 6eu#Lƛ %e8E~$M$,R+ɧ2hf|7 i$^P0A&YK]_e  #hT93ԍ~^SE49MQ+ `7e\[7J1Q`UJpl` 8<ܶ Y~{1Ǝ\[2hd|B EBWl;E0K@{>wγ5떠#w@Fq}dOH ƈ)%ٺF!w" <7vU\?f.4A..VLQ{͜Z PVZ S a'u'(8.F.f'F+fo3@=ԸT>F_v?/ 9XCV:OEW;_C;3ox= [7W?v~2)DJ¥E:|#Ľ: b!p^8wC뮺뮺뮰6L*무]eźb+Xb뎘`뮺뮺κ㱏iu]u]w]w}}w]?{vK뮺뮺]u]u]u]u]u]uSJ뮺뮺ƓyH 2eSV`A+ ]0 yt @i4mW_a6Mũ?O͉@Վ"Ғ;y@|чLxNbu';oÀj)A|рfp(. (9y}ُI~I|AD!gfVhK7i ,Ab(ALnI~EeHpgęVd}@ ϝ%pWeڏ8"g2gum&"5I'T'y@`U>>ߟ&[OxeCvRҋu8<.p.S'Mš:L ABɟaLR)L ㉁~0 S*94Z.kPWe$QKJ^ߪő i_yFZ 4|vƨ@5p,txܐp= ڋ9.K` ,,o^m4%[F"HO@M<DŽ5K]#HB-1Am/,_ni˜Ì;m_A`"8$L-{F45H7 |' >Pw iT{R s L$q G9A&Y|E6S23 q?8x&'=]FWlmwN IpaS+a ť8H"Rk`n`'T> %cز& aE0`W#XM idUkA 2_!0jRy>P0:2d5m\b}ӂUk/D {ӗ_B6#'"[$%m<,!ȯ^='yh&SAYb7燎Vl.Y@Io>:t&0k u:2Bjr0w)/\QJt2} P*)&rx,æ#@F^ S6j]ε[aiB(Ar?RAi=^f@ AIlAYvNmF@_0$7ՒK?<2`-YV"c(M.0ɩ';X`K3 YWU5tzEnG!DeA oj`9'/#hd@f\ Lj^x#Gv߁\ ̿41Uv*Sim5 BۏituZ$)~Z=AM/M]d[6 <!)+hD!<,1Kb_x9xh)QXN[J??Ej^+XzplGer/ZP&yEDhYIL:)Ud&C Y&'S*8}+Zѽ4zj[~F P_\}A/TlmL_~!M'/E(I()S4)bIS2Ă"!o]٠B)$: x p BY'cL|  |1l_PV| wV TW4:76A(@ol LK}-N24ںT^O~=xh9S}f?ŶH= U%FQ130$:{! ۿ HQuS̝8Ͽ{loPf_VQ/TH =1?${ |\3W39 5'{ ЦM ~J䞾%~Iƀvb&{R׀ )tU4Bg(M8 ds[q#r0a>]$28}&6' ɒ,FN $D6f~Ô{Y| Hs}o2 e(7E 76*\EauDug]`\ b ՔA0Da|EC3<>YNwo`A_ .Ќap׼ e 둫ENq"4NFb;SNX~110o=) r7TpxԮΪ>peqB^f@!zK㒃_ӯD/jOs?FѮ f2*̐=C5ou@8F vaX>94;Z-K8S0_Mt]`@ E{dэ8[`䝅|FsB،:}Y -/[vvPC̾4 a#;AwIž*HP4l\W>&pJi0ϸ\BOEǫV1 Er%GN "Vn =/\Lx\e֘0|@mh섀+Kr(AINAqy{ixpNu}u e4'?=UEvI~@2 #tr)r@ 7(k)` f: d43st 3z!=΢&jRg5<s!lU<ǻm2"HY YcW-P0h w`m߀?5'' 9l.X8Ŋx~iASle,^+WhjPd^K23ʶ)'ggB R.ҐNZ( Y!פԪ_z?JJWNrpR 7oúvA⛩;0Aj]ߣ% {D03-ck ly7ؚAfݷ]u]u{vmf'b/X>_뮺?g K8$ Tepa qTyIg x ^ʎV+qxo!?±qS7_ҐdDBm4:')\ !c\4g@w_,?-Ȝ-F_UAQ 'a @6Ѕmkّu`V" D9(lm^_6xkz뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺뮺뮺! SI2֭!Wu.P\0HH%Tvx16HGk$icv N0qJVu:&@LZq/X4 78 OVee 'JYVڵ|N Ii+Im9]=|ҩq3H벀a ^@-4xJq!b9n҃̌k;EKe2odX*!HJRPBdʐb9! Sb#F[G$۠ rRFq3;jTT \껩UBΒ"ngW_S:H!}7 ӳb<^7C:.PɆ!=s 8M\a| _Rte79rFL%|c¬B+d1dE+ R@>?0 EsyxL>Bb .wmAh ;b&]F£\GnIt! S31Z]//!lH"Yx8' ;R1-{hI`v6(3ԅe]S4I<)(UeiiٔD޼сƘUp˞:I-4]5P{B-W$gajܙz[oj\Xs_̽D>(CVV^Nĩ `!Aђ6[+K p'sXuO5ot]ҵuvCi.nBYţxsАPFj B nAz}"xeN! S>  (|'( yd[M {9?4EF_q.o\vob{/Ųi刽špEZ/Lon9DC0a!B.삈p` j -BvREVe{;Oz|Gj; 5W5z%LRYzvVoŅӔbj@G"[.n$%DQk̐ۗGʻoK݉N?n_3! S}> eg ʫ.VXO%vrSE<87o?vz2ȨFyZU%L gjφr2W_5FT9TKնs&J%Q1]0$ G]\^ҸI ɒrDQcX{M>_p`.[Dq(b<%$$fQa#pʁuJ( V%”/XڴR\l.h^=uZ6$! Sx䐁Dh@XyrE_ur{/Y1aMe=tj&ss6q uu g~m ^wµ{in%6beN?>rǎƸ[ˋRGK2e!家/Hp $ bJ 㸟1 [}hViٍ O1u(/; }8vnΏuicB-PA 'vmg ,bݩdj24R%9пZ 7! Si#bP ?g &q`{<<>ޠ]of @#}o .@p|TM!ݿ8-Cˬy>{n9Da`d@dP:~=@FO:{&J\ *#'x4oO3aH{Idv-N q|pd}b8}Lg%Q! SM"m][`hlp`+ӘmPo|>9ői#A #,[EfUU3Ҩ;Mb5ʽa8FiDE5 OdBx[ %5]&Cq4t[V|%<^$$G+SH nMS0Ex(0PX6W?=3,'N~=ǎn ]Z~5H]OפgFtbrG6_,sewy cYz6_Dix,o-IlY6! S##D`20 C.Hd HzbD<{}mPe!^ocvÙփ;<sо?z-k-΅u59o8=4mcBfBSzqW? uϛ~f NRZ |]&Ɯ?!*wG " x 7@jLteyQqhq;D!C0B)g1Dkj`6F_,Rg[SbIj[)JV T( J$! S͉b +@a dH>L9=񮁘i)YQ¸P.|dT uU3r[ol(XC6+Ă)t鷗9FPWp.ۂim5|bb1C0=j%98"UCLEʸȭ,HUGHy V- $ % -@--FZS4V^@ɂ5HEJRRg~8akRJWַ`5,Vކ'j8^o! SmL@ˁAH -v=G:sBP<*U M=gƒO"A`i>j5Hd~fu!!7u eB808/ENt`eVuσdnk;^0 g{u5l:nKc/p3}%Ը℻ü["+#@Q z$ZH ^b%jO;p75Cjwt#4h`U@$wpn0=[ {uͺ/# &TGŚ_ ?P)0=m98KE+y\](EѰ EM%=i=FHb *T j S>S\Ff:c ЃVa0xq3˓,"yA35*-Yw@XR>U*w+|\GhU̼=+Dqr(8$GTZ/7M8o5_H?hs:`Φ}ں-}8%$rlAn``,#l@a> PT=dVМC{JdąbU )<+#M<2۵̛$! SeDH6   3 iZ!2[WuNL%ڹ ;>AqA` 1ݼwV R99UEY&457K4ڂ! zEp΢=w`Xl" jFU|iLHF܌w;x ֤4 2K ^0! (#,>ƶCL)[Hr&0T2Wu ,t: NvgO"De0! S> R pͳ{KFϘ>}:)|Alx8{_GˬzNy`\~lD9^FD`X|~Ll^̼mE)>]XF S3~#@&$48pAdQJ,@ RB>4|H 8FɓE@(<8!fh NEBiF]Q+! S>Dj tziܰ}qS_H@; NcT[7_u= <`5${ #^B׳pvzDZuO٘Gu$WR>OʐvoK4؏Brj\|C#:nAjаe#W 0:v%.^6Bu%hHrwX둘Khұ>Ӫ ^P3c~1%UZg}ua! SP@V![%&E>d^RAd֌*&@:d,gXXO,KpRzdZL(L"H\؟?.XX&닸~]& ~187GSf jX). XCH^=X7PGMlھ[4IG1͂pWzh&CuN! SHI(DdBUD5#~2F<3|= sԹn&8!KKnf?ʫl^/i@gDϼ\ (vG@`<{܅ &_UwTeȗ-@6A˥xYkA 4u\蒄zY9 R|Lifݔ p_n|"uk>Qϓn`Gob,)86Ψ6=jحd.%?PJH{-z&#l:#yuY} ?x\MA 'Z+X$ӤX^COM?#=&Z hܜ;#>Rn9oOe1ww'=9$Z֠C=|}, 2xQph@2`(e ؒ&&uQu\[xC#rN%Xv^#/{wZֳG?)a<鏓69xL9'7|-Q`|?CxG&y ef/q${Kr_k_|m^`&`A@' &䗭4Deɡ(5 v DxZ# 59$CLR7*Tć͏H͛w˵|ll-dcrՕkU ?cI|$ghcc8;&577V1@3xA((N7n;ЀA`'M})`%r;<ZGxZ=pZ }c$ ,>6"pv{d- ~$F&P Os1(_'!Zo "W' y08T/WSkA'naՄl9hRBZIDo\l Z2G e>d6# aa27u@@qJXDž֜C{]T~NbGCEhx&> @Iz@3x2Z3Hc'@3`2,$כ )A'Tp-"f,2#`낡%yGB8K< ۃR Y߈|{`3czhB΅}\!3R%D^yo֩0>>u>:#mS : ~E)=y!~P`pA'$~Lh Db 6fFDeGG"8#wqF8S?fRQԴ$P\|`2m"IV 4χKS}9$Lހ޶䡀Kn 73x LA'g؝_Ȉ v@_ 8H,8-De#0BE\x>]K|l@gQ'&aO-SL+{IXoA<~%X~G tX%OAX @66992&A'$0$eHX#KDx4vKLiS?|GnjJ7T'?'Y(r Р Za ` L,c!þmj"?gߘ([~%b470|;<~? A+8cBo%U8z*k|q;DAKђ0 Czv RT~`嫀 RH&2SL/3@^Bip<)#|&$5>%Tru"JD0KCz]\%;|0QxxKU8"E{ߠ8~^{ &сRvO}LJ xv% TM~_b̾GOY ^WE-]輘IM`X0_$v7G{֦8=L_'p.$~S_po _Lչ^;!jߟ$3jo}joX+o׮] @πʀA@'S) v(bX-›\0mp>n *;Odv-?E ^H ۀbπ͊^G&Geh ems͎f L? ̂cYA\Fvˆx 5}KS7[SEVoȊ&ho܃c1F?1<ھFA`'U=1 Z"!̵pRQ- f4U?3a 0}>>drA f`]5Gxހ\w Cd^EI)JcWu>e]S?<{?|?x5ߠ2a>`3  -_wyZcpMx&a(vA'sHKI.)U 8k21V}%jrex8Lr۱(èOЌ m2KL~WhQ3c#Wafȳ41|G<`Љɑy?ϡd7>y7Tߵ\Ҡ1zt@! Sm$"AUG5M PB]zNBq7<_:xUd`T#aU gQu3hhtOA̘[5Z}DPW8xOWƒ.qe2Sm5KObДWJjjo2q26Fxu+ɅH3Ci; R AR ]L;ѾA@, I'bCLSXWDļ,RU{#勺v yO/$N1ƛ' Z>x|u~fك\ z$.gLX3eecyk,|ye`N0Sj5QfA7CwJ*A!Fl(ᒊ|a\EIdo%X$R񳎐9! S)U\l {e׷0oǓ LeCN= CtY}}CN)z9cᩓl>yj`꿒D%$xnwqq2ȀD9F+@Y.I}^ĦƛlNi@p]D 3UXHiAHǼ5p*y#ZIe`~EN4 ⨬" >jg붔w! Sm%(HtW;,bf?']YW_~cOV*fϡJǞN/0g 6ΝS*7tX׽]Y<hY,$bJ~Du-$ "@*h[&__E40bI>r?Ja:N:* VDۖ6@Z%n9t'yZ"D~vR; FQn1fN} ! Se$"ۦU&誣`ɨ佛acu;s"-)a`$(HWp4u<)k:mY||Vhe[ Gȅ!мL '%êX?hd9r\1E4a?1[ԀdYpje D6eeMs\I MYm޲L*^0ĻI4#vN8^"C1'%﬘6Jb񛖱sĢ'.zƛ?n:aNmVG! SU+[TݺBP Q*,jQBZa"̕7$.m&s`nغ&aJ RkGXE nQT P=B P0R{*Ov- Pl#2XsϙQjie/P>[cː3X HbeQz$^{rHbiqH>5"o %E+R70s"J "Q ^J([R\kl:jv7M ! S=RA[ٵ, VXP*h* /)tp5ЏtpD~L;H1f 8(:5$P#5ns|;R$Sx|z5:.lNDhؔ8DZu1EA 0 bo4x Jkf [U cG/ֹeb6 ,ʽ2Rꢼ 47,ه޲g@t+&:eA! S%XS ; bb 8MF<.,^tΗ`X_@Ώ= -]^0 X >Uؠ a s!tYGU^at*5@z/zB,@ E2I[^F*.zZa]g}[tMhI! Sy|H2(@;@z,%湁`=)uO0(,-?|bM>Wy7rg.IIcIJ-EJuN۳G:I!̀-H"1:ãVBRiٱ:Re8Gi'a$B78PҫQaZ|Ƅݵ/?cPpc ?!4ڜqI]U8dg}EAҰ* Q}U)<=>&^ %5~/J=PiRwL :i_gI ٿ_t~*V]KwWVvt^j%#޴3=1 %#g#9j3e'~,w-j~!.0y'ּ7m>8}W]S+K$/=@w 1j*12_T<M#b^!*Sa!ب&*fUYSL+Ufh1q@Xi=kd$-88;/Djnr=LJ֣+#|^gTDsJs&u 3M%Z{ J90ٽH RQHdآE}GUksg^IŢsbf q`C13xy)9Mv#]n(c 1BZq@X3;ӊ=xH*#́3)K<,.[F41F,R8-+.!LF$6 tfo,qKVEj%CKw dul؉P3VsbFf}6y=d1Sg`~X#u"ݦI'}oPv3ZS@3DH=jfP>k9qzV?SHl?-$1> ?/1ԙ~wK}ZN[?M'9'.8RN)dqI."R87@0q- iB0=X G KwN>>!TEaQ S@yh;f3+=?a 5Ri)eI4/X[/f%?/ SEآ-VVWI@3*R ˜6|`$gsm:L٩SC .YB%z޼9fuN벉T>s-$dmn^44 ]H&nNuȒ4ʑ s@ؚM5i_(EUeTlAYJ׍+Gt=ݰ(!TUc!NgtT Eh+.>/7QjjyQ읕{wrD/Y{VF>N* >!ds*pi9"r hFX*|GQrIHcFiؼMg 68|Z؟uSձVH -YU2TȖٮyvr oNccOuG!Rh$*[ֵF]L#!TaPXj40RWJI+U X`;jg17s{t* lڮ. jEgn*D#3*%O:@dIQ1Іk" MU?5J0%Ke1 ZEJ4k3Z=K=S^b zHni0$.P7dFve{D-s^g RTEGxwS%?sҢ8h;z(xrB_? @%*A' Gf p lq& ?@dN(@OYRDm-$R줅%c9jpmq̎lX بdu)}X3R?LGW'B"F#&O6 G ΂ Gq!u@G1#HġMۤe|uā/ <x a# AL$~?gώ94zU-`vZA}hWb:;wyN~>$ >e͓6@` T@NfP[)hJekۯϜ opf*o sЯz ࣞۛ-,)wȊB|׼ԇZr_'ofS9"7PL@5t"N4 ={\)j5pk8V B߯~ؿ͈F4<Qrd͌B֤tt}V hl|a OWg~d?Pbi~oCώ>@S'CN 19gNb#*D7<0BCGX >daZ͈i8urU˺O5O2ͼ6>OL*lV>2s I)֙~nW,tXJ(?&8'qe+\!%,L@@=BO|TW ,0D\Mqle˱B|i1n zh(!9?<*c~.bqۅK͟䂮#J3<0/I<ѣnٱxo尦e/4|Ց\lc,;YXSdŹM߲VfEJįܳSm+A`'|ˁ|?2{.67x%Q~!h( u 3).=+ sp{ʞy0@v6 X lPhADSz{)*)!sH#Jyؠ- G)<,GV'2s΄o;?O ۩ u⭵#-gUm_*%oZkqO8 (c\gA7ba{cߪCvzU6Q~l|T>g6o =__9 X)uE4`|eV℃S1B"` k\aB$ky4pmf>F 8AX{H UKߞ4V砃%%jجR։f 6ǃrEeZC9_BH[֠Da1TxÀh:>_4I}ve v$")14hV1W]7j1B*yv d7ϨAy:|lK2#x'|O>'|O>';[|3~I` @G!K8`1a6M xԬ00y p jc???G̸ xP<(T`!,ʭS@C ~fOZ\bQ#x TZ3^P忘wdG7p bbB;6f#w?| '??OR&mA^|($RP]>A|oD,x#8[B|`7y-$Bm& T+Ͽ7_ TI4)FMfT'?́FH‚@ӧ&i/%8(&G?n[ބ|+Jp#11C%@3yKEt6"\Q@S;H A'|ˁ`(Vl|F,`2a = F\HZZ9Z ĖQPhbz0d7(°Jn;JH&@[㱑Ca7 0`Ju DtyD9 4j a9Jgcby #&uɎɀԸ+f47LF^bA'|ˁ@ (+$7(x;pdF#y!So_ Dx8&?][Q`3j8}{ f.1HC.0H#=8\:?S?Fl05O{9|gIKXd hA'AG%2| XhՑߎAh!Te=ZAϺG֢Jm4?YRK/'5?wς6H&,_s R>2ZLx`.ND#H fOihp?8P4Gc+\ Q`a,:NLEo,s+6301 dW!TġAYheNR볽yI M~8хYsFlnv_Ov 6b$Ǣ*C`2Z9SSpك]# `S]p/oJ !(@͚4UT $zͳUQ!Y,͒4oۚ\'?`TDcȚ_p"pRjnٗo#n{=[sP`p/(ِ kz+#!TA3(Ok Adh@Љi#L^)[(kqv_u;IvM׻`Sx-Nk//3}3j,NP즂vuPaE! SG1Ȫ-)&\ZۛYEmDYYpR(KcA(oh5Ux8_]4Zz(~h_ pl$,:*R6 W9E't: N4MKelz—jOqg6oF*KiuA[S=hEfF76Cfկ{cy2ҳ ٲWv6 1[&Z pq[M֧􀲲?(Aݦ K@^ӈ6A&dRM@ۚhi?! SmahP P6G icI #YzjEi߼gY&1No&w( y݂ Vz8 hj?ɢEY[E_Pqr4pe5OTK_;*ҾըѺ j.)ВEɚg}n,_&û,FO7R& )d0C%a+&g*?Z2H !C+?! S"j X8Lfb_㞞u&$|]fFJHSܼ/Lj} ^G'ݫW(5vڟ/3>>;/{4} :Rڸn> S{$}.I()o6 % x36' 3P`,VGt+REm$9%([Zm8>rz|"!u(Ru*U'9qyR"'2@! Suf`(`*H&L]70oj4AqU(C$(Q,I?ժz$s$(g|dO#2A]O'\ʼn׬D1D0\6&(! Sa"((p@UbŐ۴%ڊt*(7 㶹/ \is WuW[jFOs=5b=-Ɲ L3=puL3Isx?j 5A'Ѐ~O~{6S@Z;(y?⠟] O9 ]d80@V"i!x["$c$VOTؗ*HEop2_ᡩKQ??~g>p! SuJT#@* *5Y4,PiPA-=l}tsb!웳WB=d41S<>c70V/x-7Q ΂?XɖQ+tV@[§}3rd4& Q\3>)OFBdžXjz, | ?ı@)RJū)3R2Ge/z+o-r! SVQ#T(a`)BJ&PnymLT9OH9IJG8K牠@UP3{hX8үuK{u"77SGY$H @ǫ[T"qqo4t-k9Mic9`؏gyzVҦq?hws@ 4:U WOMp#niQR0Tw2Iw<:6YJg*GBȠZx&`?! ShcZ (5 lUb;UVRge;:۬pթ#8 x9?sWօKlQ.N/.Hg`$ޏ9 v j6`@ s9i7-@ Lz=),*DԔQ I9@a0 \/(vlNW;ޖq[(od]%q!}rV:KD&9Ts$%g! Sm$AP[-ETc9!n"n=?]ý1OFO}C`חWku&cY7):+w{~ G#= w8 $S-iLZlḄ5 "'xCRK%ԺfpRH6ZK^%P--h]=;6'.V@R LFIcN / S)js$bbв? |vqd!@രe: 1d_e! S!ΊlޔU eG]yK \E`ux&@|b-R_Uhp> b{ŗ HIR*m *$ "JG u P#^ѷP! Su#0 ``Uc5E1IF~|6Ĵ!~x1kR<2dec,xF!;O+]{u-'zQ!.MZf00Ez6KUwGS8" b2nm0 d@JgFUed`"urro*UDH;%R7싺M6uM<٠EgN*]q Jh)CXI%WD '^||zƧgǶA9! S%]9 U f跸:dBR܊S!ޥ9rCTtޑצZ}Q<]UˮʊsVc-**S=+kGQҡNjT6ҔәiLgd'iy-gv18*N@@ HJ(w޼%r˪`n6vM Ci0%09pHD}CvgfgƔ"^_<ֈFv4pdý*~Еq&_M0mwoU:lwűu;,!E3V =#hą80]Lʇ7gXN!!`\m GAH&K*zxRYl&(?ƄN@%+! SM"hQ #^-=&J*3>QɈ@wvVj  u A@ҧ q  t! #Bd"cltx"Z u}IjAL/u's40XYlY"` T$d 7`Ģ8̠ڼ m"jHQKF2Db3nOhJ6$Řh,*3}&RR)qK5A0,ԧ;(VT$q8#|k| XFSF0;AfV&oúcf\n(0)?yƂ܊X X%1$Ц[ȩltb %guꥨI; ՍNMshg PI&0! SkWA(( kq/Q)s_sҧ*Ҥk%cǻp 9_@=$\8<| WNzE:&O<?PH Y]QTW{|#|)>Uˤ{/ZH </ _Τ,quKo.o#$c|9A)_N ˷]M=2l^6A 'oY_H@!=FBzݘPB,}5~ MjpL>#?}L?q{pmwZaClV 絉"H,PvbBb<%l^Ўtx27._p^f4`uɐ&'&!ƞ39ApA@'oAO)!:h02%oQao6?΢6E+2@3tg\S 8$ "#?9B@/nؘE]v|vaDzИaS>m`z^_3A' qX s! IŸv.,O CT9`J# y1 x(Q#% &(i0~8#m0R%OAAy} ?"g?'!@ ;^A_dd RA&M?ff\!iJhfA'Q7e x낡$yeNXolj&9no/ûrT>Zgr6seb{g$/Cf0Dm6pҵ Ȣ5 AwxO{Yk$!Ʉ+>e!?7s|O'{:Ͼ`+z6|lT8>Sh:uZ$78զ7kTܸhwǛu݆F?'&mr%7\NdR!MSisPGl9vN> Rtݤ8 'w,6Ӫbs/ը-wQ?5O93w}rh3fCfYbXK~+)9h~+)G3>?E諭oU5W+Ǵ+Z^\qێN5WO?1)@}A'b@0 łPò— GGɄ}BX0>A·5_ )݊@fD vX Iqb} >v\*<&gȸSK?')>~+ I7jh?] *n ðIc;Q&;yWxEx3&ۀvWiA'%/m ^&! DxR(>6>_,wVFWIk@ 40^ Ja @X)ǀC>EAa;a Xi *膯o@(t0sBcÄ M}X0K@fhn{ 50xxn_:i JʀBC2o?rR&` S\Eʂ6LJ bS0V`R"H':?IzL7?=?|F)Pʧl" QU ~%( 覄Kn94.Ҹ0iIUp')6Ej ù+ÇzlJ%Q>`CɡlFK7 ƿYL{ԑ8Kcz9HU!)pUsM=%:zASD)vneռC{=Dd LBI?a"|P m@z(t?o7ۇ<@'&9??G????N$=>4'{???G<??#Ok|??? 2N#< B 8o,OJۛk^JcP2 fciÔ0x/:y%< fzCyz9~ bҔ+kK4%XvL,*:3)PK3FԾ:>ÝT,ƼVkm1,ƿ^^2 e4S%XyoPK`(&-y}wJ_Co] w=\07+wףO-M)?Zl}omk^on.K[`H:PA`'tTgz@@@D?$`?X$e1։TrA'Q4BAV qi\i%SS #?Ga h'͊i0|lvcKeIeS:%`؟qF^,Oa,(A)DfT7L$ 9LOJM01W6|;ɍuZe@! ST,`(:/H 򲷰Xk B MW3wά7-g$ 3ɀ !UeX~#eƕJ㰯HjqU-'FbLsx #: 1饓7I*P/'2psRjϞsU],TVp+5+'*1N\nv'J\>U'v9nC/pxP`g|)z;ļp6! Sza' (c ObuX^ixPf$X5-<=dC9Ptsgq5_CSg>{9_t:tPhw.'`w"z3)N/q1 ʸ5-b_v51R8Ez u0{h{l!m =u?_,Pgp)_#8*! E}B>!?!0}!0r!0p!0v!0!0}!0{!0y!0r!*SiI DT?@qy?oܸx{j@[* b5@`6[[@1?Xg yb! 42}%8b 9IxW{["AAc`#wl"DH `>zM#u HX؄kx#H(Cwi;nnXn<== uxz@`=$kw#|@>R6o!L?[& ]k )VTrJvRFmz?u okl~ o]m^wjZ8[as!ce 7t,ƜOjͭ}'WI>8=8C<ȳv+  ~xϏ}H[8"X]> ե֏4fMe92}yw~zh?+FAo g'GοR_='KwKy-6 3&VFyj~W]&$'~9ʒF fJ"BVculi79'}GktTYȽ#H2mzTiL-G!jT劣bAXnDHJ@O~Kֻv+ժdT-,OCUO!k}gUu6.z1nn#.1m˓a$.ڤxeT94YIvVL`3sno~kW@%o0$po^C)gYOoaЛ2-KjɘnzuEBTX\P@X4Mڷĩ,DԫCbKSvY QE I\dZ. q Ls'mu' Jh1p=%|̔vFP!t|0!T6 UJr]J]Z@rƙ$ʆS+ZBɎ0PJ\8bœV'\]ur.ێF2v,:XP% 7E4< ȷDZjO~&pςpx]|2OVXQO% ]1VR%c;-tJ*`0gI&I:T@t*ad>kŹ0FQ5<G x]@Ő ]]LlubS!ƝPB@j- %Ⱦ!T1Pb!uTWuW])u)':YCƴU3sƽV[)IeDfbUhn3BFN&HOɓ5L}V}rFh@xMT5,=aEbٛIwkIݒp1 ;CV#LR 4n>+V g2.n,QBr+xi,Sݹv`Hr_+{e˷>1u"D*$ Fiְ=a)%V zú27-_?ly" V!TbDc :K,2*EДe۰^-9b)+oSV  A RMqƣ_3WT]d&ƾx_+]*7gI7RY{Ek%[kŮsjOmb#1uLU2cCzΔ4#~5f}ĩ,6qCa p2688 V7Kkhѿb*~$he~&^Zmz̋sBP]ը{N9in,Q'pv9Py(!Te¢C(l$ cMتв Җ/R9p޳v3 x͒>o6ׇۅT4WI^Gҽy!ee4W,_Eᔬ'Ȏ*WΖA,&(#cWҊFZζK  ɼz nIfQ56HmD3-S#Ui<4%,HR(apy>^,wvdի Fa|3T]kMl<%Ddf UTEWlOxA'R%ۅ%}*I J[%BP4R\\)[{S>v+KF3@3T Qi;@eh?3Vs R#I @qLGn;3;d@pA'|m3Q__&:ۈ sǚH-.g͒Z&/B#N`3a9a:ܕaL!Vfּ)Nd=,%眜AXGbnXNIA!pqA '~ 2h8U/%aZ]DGJw. _f%Vō IubRg j")qE_r^>^0b D!.L|ɜ*nD$1i-Vۂ߸A@'Lx\&U e%nmͦSm|0J#[MDaZnScxs{ox ، ɗK!lR3cV[m&U~ e!wyЎSs;{?GX1P;?ϱO ^}؁2ؐ{c~9pfr `)ހA'tu9G#BWb%Qy) `5B%/ů4,MTS0$@pnCX s2:.BL|9O,n#G4W]gbDC,E@hYF$vL1c!A'ɀZyqr@ gȏ'\YxL|ڴs [Бd: ؀k AeNU.m|h~o@MpQFЖi@B;@}ffk=nM ``a7&< > :kIHBqxxrY罹 w0XP1J5E,` 3h;'Is"тV {7 ;(![s1vqXw 5'p6K)DբYAQU ~X(Hg1Pd* Vl}dE~un&Abt":%@7ΏW;d @f7LKjNXůl+ :-YMt i&-?<r)ii߁o"f<fpY.@ PcĜ&[mkߝ 0;g4xM8aE#x<@ A'<1CQmJJhkW8\TO|܋@b: j cMFw2b ..bEs(@GnWteb;+@A''|O>'|O>'|O>'bN% [|3~I`<؏E/ _ŝ';p `8|n$#ad\h'Etc84i068僀:0VBVP lȅkoq٤J]@ c<up!1GBi)#~ByXɯ#怇b|̏tp"kKG#Uy@6Y.ypqœ4I$\FÀxxok"CoIO_@t;dG#xn &=E'2fT=?G<loL of.{vė(IX AQgE‡a G~1:? wٸK3o&wm3#< ܁P@$$z?+1W6&`A'w~j7 .ՂE~{Lhe6߀-3:(:C[jW#C*iT[^l~t9E]BOK5uqT@tb4.G.ɮV+=l[`%%&d`n,AF_^;kEdtR".5^zvPO/N޽@\Sdräj; &AkIg< 2pBzŮaWBSْVpwn.z!TˀТe@B+R H-(I$Uw:tFtgU5PphFŸp$C@o;WW=V%munF^83Q _-Zg7Bu@2X_ELȼ^*U"&vM5;n}iuWǯ?ncw9wvm1vbR"9eYIi"W53e3kl"krQG)(ch'?@_Gx``pTI$pL y\!THC L ek<G~AaՇss@28"MXW"# 4we\ lOUJ)f3aHOɹ(i6iks_Mvo ӄu cӆf4TBB9)d(y2Pk) &D_Oi2>" @y << 0?iDm%;m Ew_ BVU$\-=`IotS EI:g}?9R/! S͍g X+TLK"ͤ>t㢄53.T|  +3!nOx:w1<07]>GVJ%{.i ogR֒螐HS0I,͆{XĝbA+P-g,$}xRSHJ-BڇK6#΅;JNSI:ᎠJ%#9Ԍ{$TbTBc*LȅP=  ~jivKI7N ^smc:𲉯SaX<@BLl\VJ!>*=! SdA-EhJW26che+ζ^^Dzȩ'ԅ, B)vy#@qOM~qrqtI?sm_7gu LjN]Qz< T(:]59mqzR$FE@7JJ>R/EP4[/?:-ک#e s9wfojJGS@?0 xAP^%Y'"otk4 T^T o>! S` ( dW.m5,Ud m܈O?P}?XH qi`OvMpЄ;obCዯC^;/߷v҇8T/et =Vc#=뽔E@t?a-[ht?79O}ߧ2GƀݨfH;:M H-/j;qB-HO\33>rsZhV18V2wG<}$:ok _y5(! Sa`K22/'<9A|fp>X!|,;|sg!)UuL-{(9˚zV,}=(gYþx!| @f͘&@ɛ>f 9ƃn'awGS|g Q7@!8B356yt.fT)^i|c(nM-%҆'EF|W)+(ttQ ق} フx! SR1 } 7sj7 ~/EnÀ_0m! SmT4e D8WnqSbqzs /Rs[3Ϸp|d:Oӿ`TzjiV[If'W>)27mLŢ"4v0bTbLz%\e[^$i@@q R&!Pd=%GYp7ݤ /0lPEYUIc`0|m~s@(G|6*v ]r Bwޗ(%Tb\5*K-g!6zZY~`cagg̡! SmPw *%UA߿/4y~ʠ)-+Mף7D6* vWTozn&4a[1#us!2dY@A6R 6T~t~4''2m%msX6"LIq@YECaN{Hi4,w~v G@!Z ̀ )`bbp"-& ôK9@ۖoEA5)fMq!|Jk[<&޷??&\VoQbèrB Ci! SekNH@VQSoO^/5qG rJ MnU КZ+i+m*=JXW&h/pFcB2+hRk<(? >t+zjKqPXiekΰrah|7d|p/Gh~[?4^eʗkx G U7( E"ꗩR% ɠbQ']$` XH_x*hciR4 4-! S>2ʂ@`q%f/S QO1]0rv vs^, 35+:z`uߚ-`c4ndY'*|TV&0_~waIvlk`@--K6GwH9^eb$,Fa%HWC%5ѬtP !1+,-hX"kP(8L8*7Vɺ o,^.\]c8S^*ns[>>! S̈́L2@@ !p }vk3jPƹ-Z5nW̾Zv7[8~#\Ph^>kܖQ Nzq>BX <ΰīU4OI[VM>߽cs6BtdfSP `s. :Б4n7sӖ3@!&2ϼ?W ZyJgoѓ=$! S̈́VBRJ"P"-\0Bqinv⃋bX}=;ʸ+ S6gLКF9"RD^(R( E˰.aS{5P̫k2@odzqy8I|<тM܀BLQ݀ABc´^j FJ #y+8o `rrRc7%: 8'-3"Lh! S̈́"Y`T `pI8~%s'AjK2?$NG k7ulSNB~Q?J.Vi0i5Zls} {g~'зw ;P A';(`yV_S" @1` (&;sz$8Qgi2Ӟd%=9ވaoT3^R֧{2?;]mOyA 'LaAlf,Yx:c [0b8 A Ƴ14?XE#iZ\&B]G?*e@ H6H! f uLK !䥠7O ~? h<8&?qCx7+ Ȃ`w*/jA@'o-<BK4472_h6F i7Ža A'O@Xs$"$ |a![|K6BpMGO3d,Bxx uz[͐͑M~\}3z0ϕO:D+wGIpǗEi >n>:H L&~a B<ZOA' X QG- H/6)mʼnXH.eE )o $O͉0;)cH(0a<}D@o-pT$1,<IJZ8pk\nK6Bp`4c<ڀ)|YXY5Xa|~ Ip {/͒#0 }%dDRt"=jgԮL A'$GFC\TGal^ȃY\%28~.a3 *0p"+0O늸#.Pb~ ~><Ob[L0/@3x fbXO$0}-}WedA '$<>K%d"HnZ#<>% N-~׳]hEc ͈^&! 9R<'1##0 d{ny^'Q!Zyr\wp}kC^D !~992&A@'%`#MKZ#F4 ՀKxCf5qR~0P2qȆD_ Ц-1:k?  k|)5sK`= P7ue+jg 1H!u `?Q@<SdEy meJH$T'/=0Hp*Kgm`_Fϓ& 7{6U4w9:" ܷ ^\y]?%q1o FS/f!a[o v^eÎ8&X9@Qa`!Eϔd2sN 3c%x隊K)mD31~sM3G߭ g?^C1![_Y0 ~K\qvkïC3m" v<,RFVH?wV>OGȧ[m$}L|TWxz_cx-M G=)SG] rɀ_qwq 7x{b@ eE [R  [SkK,! !r\ ~zyFy9998k{>" /Cw+0 3\d˃ly`  43~f`.AQln`B"K i @}aע\3r31= )lnq S`^(+NpfrGKe7$W1=p`& X8B0 ]`n 18'U =l!,` 3m*y`|y }a@nuF\wąY^A $o%PC :v ;9h Rτ}2A.ŔGfJ5 1o@R |Q8ElL}P漁(^ =,@Is0'+.z h@._#h!GB{GL^k$00u\ßZ*' GT S% &o,6°Od )|c@k]u]u]u]u JePĬB\(G$pH0 zZׂfȃd;{ Ι20;N` rhJ(~ T@6@<p%53 g|!&e=!@\1d3w@84`ai!qE/ҀA# NJ(ҏO`#G.@RFp(^Ѐ1 p[h&=x@A@Z LL{OԸq 'cn29 bXЗn9{?0@l\N~;A T l<63rpH&J0ɇ/HMop%TdnH%ϱ!=@.U0/CЈ7 pʧl" QU [x7&*bR~ÿC{a% J  R>?Op܄)J4csÇ͘z6F6V<<%7%T` Z%@I=V*݆(>?\D9n6=-O'h`2de[)$?ި#G xLKCW"  zGa8cCcC;Z뮺뮺뮺뾺뮺뮺뮺뮸ZQA]W뮺뮺뮺뮺뮺뮺뮺뮺e_{*/^Ó뮺뮺뮺뮺뮺뮺뮺뮺?$X70 gh˧KA+ m$(uN $sm?=F~.:)f58"[#I@cPwQdc6 ,nkI['QD3MF$4i?`BQ3Ʈ}Uʫ? ƮJ  B>78=jȈɞ9B\Ohea@&  KSV/4|1v!@bbSƌC{uF j <<`oi׏˜L-Z~;Lv>v/h2%(0pρ#}?@i)83"Ɠ)2 Ɇ_P'|K3в3جH`!`Aɞ~{)"$1B_S9Z| Lмc&xsS HLq'k a^`@I=O_+V^3L!gs? oPWO򞜚ia)|23 O)Ī3&4)a@f=j7j<Pɟ>&&I>!' 'P&MpC,'9,\|J P!.}M SMZ/L9˜A8Mh% ٤pPd|a?^ dR)L ᣉ ?o' OʠNɚ_^Nq  Č5f)Y"Eu(LH.g[&X @@#ݭ4 %p,"OrA&sj/#Ǐ ɄxM! 8n Մ%y.e _\(-6VoD%2iڹ͈X"Kf35p;2#%Wf.ޘ,;& 0bh9@P*ХSOI.1+ TK" \4A^TA7;FF7 u#jĤ RUE pi]b&Ц8=i`R;ݒcå9f{(q0!-Wp )5UKFϛ?|a+\"9As$(5+M e\a6֛EGg4+DJ^+WiJUFAIZЁLBN`6r !߿NW ܿ V""  .j+hk PM8X$QN4hϚe4s_M )BfvIqW9Pt BQ6LȯLHT9!ݰ(AG"j5Eoߍb< ψ}L()VaȯM ʦ -H/cogY <lC؟-H@q 70ku  6+8NjDs95уƊMp^MU 8\ xQ_wM#H=hF!)3jpiF1U *GeTOb L~K7f%gh8 őfiakUq.c+OZ&nnlF7Ph/AATI00 92~ e}AQiNB~ 2d9lrf6$Ӂ ^WZa`f? ʒ3)g# 0x_why/6q6xԝv-(4\T <U  P|oo~5 Y J#*ݍ$6RcKRAэ.|IWTǿi.CP^<<heMlL~GBBQOA!}Or+d́ˣOGPғ ] U7 F^3Te`Qԍ9Ɂ)-܋^[͘bO 4;޸d&C i'hx]cR[vv SĚv*#53~Ӈ1 O|\V^!,>cA 24&/8-r"0{i ;C #4s@f,9r (q0i),V>>P K|#%b`7Ły><]O7DXS8?}@BgXV 9ՃR0z2)4 |#v׹Q!3[0c@~v =bAp(,j t~ 6mkհn1TE|Mh t ,l5(0 XCp{4=@ޯX&Sy5GpYd8K[ͤnPm<N3!)u8:0h,?hP \섀dQq,jpyrv2ìb VChBrS`34B~QmKuK% =GG$-&H=9 B`J:dDV[ Yb-Z0>ѫ0\WB: 0Ŗ+ E]~3ʴb-(q6p81?{LvM%7lz=-K0:Yo!ӁFnv~,(IR[LXVǻ^*munEGb@pl1r^EgՖȣP8{vdWЈHjȚar=(0ڃ|eFBNfW^Z}H\ a%0P ti鄴OAghqwJ9(f^xo]u]yn?J- *3;Z*gp()l$QoP75:* B޿UԾez>SMB7BF~ K_H3RpW~OS8W"9{ZV83# r]C ao]~r\n{$bv]u_?Q &뮺?Y;~u.O6΃F\?QZaubUa])ˊT? oTmu+2&~is#@H"-Wt-pA[8UXw'ekE1> V '95N6ܻRv\뻘,F! 1hShDY0DNFPr~;ih;ld3:Qavs]唇LJra! Sͅ>&X8EsX4gFh 7+D*y/ GC˜iS[y[HT =OHl2#bBBBBldW2tW"IW-̎=꼓^αb[Rߖt}|Zz 6O{XiRW_gѤ0xK`a%6FgIxZkUGwGo<~N'mmj5! Sb f (j[$h@`O٘ׄgt7?oAs v)e???FR3Nhԩ֞ΓCLՠs;3w EQ [w//t{a(6X+HIjMwj` XBn4C~SY5' cl[+hP #)(}-5ؑ;H<5CSJ 앑^]F*0C(! Saj*P @k}6%o-!zmUQ`7=ll$wwT!=]9"`z7ԝ [OVէ m4T0pxDlZߺ4G z O C0{y4 6]%K([6 v a`e|ݔwЮK;loР3b7g¨/$hHiXk:zUEc@;VɷRN^uۜH~"G! S##I[deRĻ u-}uRy`:4[tՆ,,j T')E3fUh(+SQzVؕZJbJԄpRNQ9XRSnW܈cd=YaMm1/8o% s~ʥR=KT1wpT(F,H!gj:#b*qOG}YR-qP!yi([b3f&VU lrPܔ,+# /H'[kVgN:'6y-BwѶTa?! S&Hhbe6.R!';9٧_%W h8M@MPb+">2[YoxraztQPq1{f NxYЕ3;lW&Mxt%CCiÂ0-~޹kv GwrBdP-͍ƤXxF :5TC*${.:FJ*$ fTM[J]2oӟNmȳh,?amH.4tÕhz%GOd! S' Ha %+`l]0KFHLL$lTP_1Pf78ahRt6B3 z>wJYSIpǴ6H[HBNQELɝ/1R2́nfP +xiox2Aِ$^~Tєp2U^ 0C9дV7λ2p3t؛"x$8\Z0Ld ܑ9![ƶVeo*%//Fc\+Ծ,IRTyU"J.g! S#(H VoLC =W}켦yQhnPcS{sl7!)N'&0kk!Ozƒ90LRxfKđ<:"SڪY݉~ئf{lblYs!Y(9E6rYbn5f(R to@7_4!KXPQJ>}h n +a pV/ ʹl[naB G\Qe+ Jʏz:9O/*fޭ&'m#! Se#Ih`=2+PO Wfy|6%S": V3F3'#ɻƮTDc j(R7 L: t?Bz[bAMDbevsI2۲?fJ6ޫSPvkВbGe)3]0lIF0BQvD9-ɾPIaF*oQ-\D+d6QmaQI57Nq0zR!+LT5 #Yxeh; Òn}o.! SeTcM0, >!MҼ3U ]:(OOsh;O~9U)NrgNJZíTVq  J\ZQbNY7ihn Rc/7LLZiI(ؖRj`kF ,*# ~rFB- Ur/[X/X 0"l񡗺||JZKյiI:e{Rwȟ! S5UPe9r0J@,KmqWC4:JYpؓYwI%r} n(16(GKJ4aqZp# p5CH Hb o, 23/oYA*CM$` ߍyXo3K 0xo-oug5XZER P{m[ma#GwY$'F+XF/79! SkY0x =LkOg򪉓^PX0:LIY 1l,|6z,ÜtC p|JHC9[hǷ12ȴv_86P_&> HXySKΆKtwtm?FO +9PܤTG8j~K'9{)s %OHܜK92E? :DȴN;NPVr!9d"rJf_GOq! S%$@PA(`Y!9ۊ4 xZC262NI=w1ۅoeY33Ns4UO  A $&p5s>pcnp7Lvk`UM5cN2`|=4>V %>943hm呤> ,SC@ٌ10m$12> ||2rLX{ϣ#i=~Zyq0sk{$!E}B>!*S= Di0<` \!y{|vc)FQ(xy_>Z X"ݡݨD>(IPcAl*`7NԄ[*-OfpAe ̐;PbF;z=h|0b0jZ8.,ҵФ@S  hc_ɭ\^WkZukQzִiKrpW3~0U .0Q1|i U^vF.ŰaNقB-ZC^jF[qwuv_׋WȖo_͓wuO!Lm?'5Ԙ.lֈ, ;,^r^h))a2]= 픅񐷭fwͺ/>$ ñIjGShiKY=?{n 9wP^"@9D ~X(世e;0hbPA'2'vXɝs 61._]yk8S̮l(ݑ~t8 ??C˛{}=+mvJΉv3a0O֡TΫh=C֔RXr!LmMUlff(@g4"e~n?_iǯE+`.Sg;$䜖!%(b\uv=FϷൌI;\Sot@98^5Izp~naj>YoI-}/½P~jf3R|rw>6B`(CzZ{WJ8abĚn<4 ɻ.[ 2,t:Ŝ<)ӳ *tBKFwi 9='KWVtz1!jT-CP`LR2D Z[#X.5q^9j=_Rﴰf׏*bn#RdzjdI3neUPfNX%lR#(:S=5)sNGeiDLSޠ7Xd_*ֺV*zT&}Q(p ;)S,9 Xt-m$I4BqfRJ+Ai16b)Y Hj`f7-!TwjmЩiVoSG!A%5 !TRCa`[k.Bbזk*Jxq} Bдd03 4ڪJl1Դ/JQڲ 6*$BD*APč|c3 Ѡ5RUlNƘYo[1F2xTfNq()ȕ%=׶IvqĸŚ2 l+fULXR AlZ¾8f| ^9`Flr-֗5JE8aFfᓛsu@P!TűRT6!D ;VS@Y$V p 3 ؙWUꫮtg֙vCp블ڐ)*îHʑbjʤ0',# q!7;mjS@ &CKBɍ 39=&uA9ܬN`ne+2iQ j9pKJ`S(Fe ҡ&aVq R{"٣aP7 \\1, Xui@K7Y+6 35Pp&Bp-4QA '҆2 +wL":ZI0I¦M B"O!$rHJ rL(IҝlukԻA_n `T` o7X# "k\⦙Ha 2aIa=QޡXJ\zn 0! Ƒ|2C"w4z9oxZ xӟ)S'?}?\Pu?UK&*U; C`0"&ʲgEL2ɞnK}{'~NX߁'&& ϑ<o/%ǬA@')DiuJC[ 0 dI{v Ψ%PFʄVy!(0ٖz>< XwK͏}n/O͌[fb0 t#瘬NSW,Y~ "j̦*g؀]`˘MA`' !!Pm4(x|ց r Zߞ;>OM?ug3a8Lӵ =U[$lT-LI7z$~'Q*Kx/> z6WZ`y(6HZr |0|l!ɦUTײܙfL=Pɘ-s?% 3D|+s~{AC?De~G|\$еA(2k "WgGc*r@A''cnm<%P.1x#R"2ղٻ[4ВZIh#>>ep^ױ.yͳrz xfD,Ω2lW^ަ 8ھVZLA'L>8@'{JLl8tOW?Jw=Ͽh@f&G{-&; Zj:#7͚̈́A(9_L%w } A'`ߟY%|5RdF_S TNl?>1=71G%#xZΡ(&X0O8**$}N#r Ԃ7`TiHoz@y,h@ޙ(&$lpA`''|O>'|O>'|O>';Z.@&x? ,v V`G+ހTgV? =T:q6?K <R`U :p ~a> ctfӳi4%up!!RBX훃" PO?m+~ҽA%5@=C^aiG趩``\AG{Ԑ@ހh{+˛ͪDs/??e@! N\[-[2tCmZI1\ClO{:Mip*Z8=q˜StLkÀxxWVb+W.6 لt>~S߁dG??xoKsͨ(("(mx d M#i`3'k$&[o|_{A m&x4+eOisuC?U&zk9z2o d?n|@fdPtye)Ifa3q滻 ?(ͽ¯y;xxU ( 钂di{٤'W&V(v7IA't, -t< xBQ?ZZ# >6Ohm6`>ܿΥ,e}##NfS9(Ҏ1Ş|Gϳc!T5 h2c{PuiRJf,M/{γ{20,t 󌌸ZRC'(5#m٪AzJF,p'cOMf.*x+M aOOidPq-[Ž."OH(*!6Kb0ڐɒC|]VArrEɶ'Y4›D Z~KG|RgRNI>aTw4zV&U,( $ݲ@\b*b^c#;PPv  !T% a"EAD2Ie"`%DRȰ+ 'v́I7R}kU*: (LKS4aVK4fA"a'b6Q&,p *02/s [Еlq&DA'5NTDdES2/Y qC'}Scb8lN!$ĽtOfq!'45u4w+,$uX "4qtOఝZtU6Np_}{}s.D.  Y ,!yOPwnU$B&ϿCT/yա2;p*ّ|_b{ Q ebQP?n0Մ}2s3yRFAr- (HS, )%%-->#r(#$N/I>P `zU4[@9ߴF@#5WEZɬwwfӝK$- Q c 5a%S[4<̱0#@Bq [${4oY?f\xz᥷~1! S.AL FEZ̲E]TجH+g4lkh4 o47h[0 3C]tP:zH *H&6A -GgDP#]P^'b` CfGAR݁-u@ͣA4Ap ̞+<2 ۘÂP@I0n "Ѕ@䰂/ޑ z(%InlC! S#*dE-,}~>%8Y(&e::J)lB['/U Հ &Ϯ-R~n{쫄,6VIiCf]?h~{^E7cط"=: Fy(u8(s9t5I\|j8ޓH6 K! SqXJC0 @P@@T@h7! cOAԔ#+g,S @cNZ8-t0sVb5:ѓf>hpA {1>c_un895 D9p{]n!_" R `,w>G}̨Nf(VѕA|DOƄn qĒ=mH2=)pp6lȃ睧^  i{e+DUFw! SD $$#`t8Fi#w,EK#YVJ@ͼ ; mK 7`ø~q }Co3M?<>yhLi w=2o 08ߤH,`L|6ѷ7 ?On~y$ہKbs;HSіvFX|tXpGI)%D<<ϓf_)ʪ RКivܡpozܝp4sPMd Ӿ5𐒗iGY;(_K 8=zU(Z qbW*iЕ Z!t@[F2Q$Ϝ$eFOk@8J VTAJᄈVPFB2ԪPvM?-w<=hwM.&)OŎ7! S""G8e*]@Vf"M#D>KF\e܋y(XEp rcZ)^U:tVwer#6EN0%,Bea:C[4"Cq*HڡSu(l*f:>O6דF#Υi藓 5| n` =0PAOB- gDDZ/\Y IUʟi@MihQL;VB'0IZ™L 5PU)$! S d0Q(-L+6'5' u4SJ\! -vDv^~+5\PX2HJ@P]oJPˆ:#lC4Vek\X٧D%RҺiR$M`gIʁk/}}Y`xAy-wwꁢ2BY3`FV+i@$rWlg0dA$H$HH(_KI펞"s㗻Lzk$vpܳC>^)$S:t! SIIT؂P(PO<2wM,5qe™65tuylJF̒eLj&\V~ji-o}YKeCKr/&_µ)$$ o45:k+$&y&ӧra ES:W9dFQJPQ@ƝRDE,L&2 !+Ij~U4؍x:9! S`  -\J=>E(y0N.^fd SJ'Ǵ0<8$8U2?+/~Z>8U"s eK=(е,GjaƮ.#_p9lbnM}YWmiV '}U?\ArUt/k`"0c?J%S~̴h04cx XpJ Ԫa‘F \/`! STPD* -K(iov3cv@KNܨy%QuU\FH Z*!-{/ٻ`$d0 :)G(y"}ò y$߆|12O?j?˖s":D?;:U(-ޥZk@X6^#G,7.V4{ wUnZA~ j XW \uXjH!LGM! SuRHPl0p"-hnQfŎ|\Z:5S[?( e@x|ya@nu47X edPl[ IVxԬ՗ B5Hn BnjkG8hzA%]DȳN_yJ AAEJ UP"uNIM'vk1{)8b.u,t =#4C6JzX7«A'`0`T%M" |qQhm2`y3ّ(e3R'IBi&d76"<3|6͈%?/,,#؏G1]@x}A9G~f( `akA'LaAMmThcTw(4?/r20SLMyJ#x1p W &f@wZaFL9mSp}ػL1cﻜFAq5&LkCy jѐ|@3`0,A:|A' "qy0b M5dQG野Dc|mBR?kLQw8$.Dy@~9p6bnq^E eyWt/+<0>N퓒}6W{D&!Q'(LA2%/ O/Q\Gvl?,sW ͸1RbaXL <%׃ϊdS2E19* |~X16Ku'ğ3*.?wvbc &Ƃ}u|DwG˫oJ?oe]Ƨ.kfck8cHo"{2q[)iWcPV}ϒ" 2)-g:Amz涓fn?šO.m68@VƄiyoyy45x ygrz)i+\MapAQ_ _yf=/C*&`Fn0]ryx[| OyQ<%0xu]8Ws R:2nFrH'to6A'oAO?Flx07O L=>+1$;N= O({=E˭A5g͓(A#h͢^w1P ڈ!x J,HhDd$# ?9X#x: #d<2lcEG' $4^ho%aqL̈3%p;ɞۗ9y|l;ZA ' wT K{_MQ+4?i:m 3nqr2^E6f3 @<\!0L%>DscdɎw58D}dyD@u3BR/3L Bї^4 A@'@YxDMg"?˿aop` IT> 'Ag͈-Nby^gLl=&i@ė%Su0wR p Y^ 1s+sĸ@O`%^A<2f/z̒4Xn^A`'xG=Dr6.-%'~in6A`fLGx14bs5KYjyWp1]Ax ɗW_uuL??@_fz9:lL=4 A'QtbylXS}ѵ낡' 9iaH(Q(|j 7z x أ -ltchiۀ͚O ƾvϝ0ixO > &@3{9 ד>B A'YHvX?8x(K-GG<|NkLU6925c]S7r͐B|ax DW3[|swgN#{;gGF?3VIؐ/&k?]e A Lr (B2`A' ]DKh%p@.Z"*a "3iz׺7 _>ϡt7Cc LrD H!±2&7A''b "8SZIᥠ`ialP.pޓʢ'2QKy.^?wUͺsxh`sCTlC eS8<50U͌$\gD=|BX9Ԩp,/CF*IMW*N:iwZdƮP^ 7`xM4)|8Jj%R$HZD$?:?Iv>oͼ>&6TPK.HV~UU*y@&'+MBaROx+@ﻀA'&*_c<)|L-M=?0ċ D D-J{p-`9ܼo Hl@/DF4#K.Pqj9LlthљDZH4Vx }ŵFUo\hs>E):@Ƭkjf>yH%KUSxG0o֫cK̉?\:|1L'$Ew&!u[~-7`oZ|K/&D~]#7&)-kJ@Շڛ:]-kMw$f7 _W*:W] C>*! Sͅ>@*Y@p%=s9e(#C[|Csd_;~]lpGl\(H 1^ȅܫ.DH](#wUj\#ѵ|S%glؐ~m+bl#:y9Q'/yXɭ?  \*ЎPEҎVsLyDڨ KVtvOx-}+,7qJ0!}`g&yιO\TJB\='>>l On001'dL DD$5\&}!Qvg~-Z"DX|җ9MߌLø`M8g@95O6"6~BB B 1?t'VaG sw l,qUS1%)zBDn0THH*$Q! S>V LXTV [$ 1(~[T ], 9Me.TR|/ v!Ꚃf(pܰ.Ў4} Ho{TT' ( >0EMŹojv,aLRE+ A*bF 52i+Mؕ` Հ-s[eP޷,p~Ju>dc! SeLd H*22 M:A9?ջ@wcw'wU0-[:&9҄迭|4LH@0+W~iZ,K)d'([x7gWU U р- FEIV7v8(C/? A̻gʠT 5㻐`N~ܯ6GL{~&4KQ\ 5)^O! S>pd7ykJ J [#a)Vֳ+o0zO1Ep?Xn ǟtZ@أ HGFj1^=@~:Myr/*͘j-+L~nw[RU}Oଠ'S,#7)m~_hz?|!O.~#@r=iGw 4rE r Jßm" JQn0mlB2,ˊVP_9,%X MEj"=! S}!2T(!( w(B5cM O%cV#ϒ>S$r\8&W{YJO!ǁX4rAGh@DuE\VRXV(= 2=HRP5ȈHYVCBI~^ Qǧ ↆ19 gʍV{F5-G`ҺByp;ة'HK=[,$fYEX<423F]ZFB$^xAF5룄+ly! S'bJx*LYI 9)T.~c.yŜՓ'kArǕso!]8"a̚YcCd'JjƖ`jzoV/I*0k2?|3]_^ZP0ب*a vL£Ǒm`XZ.ͱ4UqQήu.oȍ&Ubr"K_iKO_kmYe.Iy ! STCUS^ PP0T;"K7ѻAҔK7FШޡIvv;KSGۗWcN@^}ydOFރV< XзAYсQ^'H$=pLܜD:P-Lf\O J"uت(Zpne2B zCi2v셳 I-K*=HaWGXiv=O%xfP*<8篎U-F( {G bS;t_q(/dOFS!)ݕ&-EIՆ+4љ,WƷ!k! SuFGW9FS@K XTeUߖ>Oskg 8 Rm$( Q~an`mGVQXY^L]`|y{^AHSCѝZZҧd5&4f1} VD88Wdë;fbhʀYf t  iS᜕TNgYڛ$M;);Yἐ#4~LӫAM "НعN~^׋;\Ry ֝?cN'! SMM"öY[)R p 'Y9}z&FqCpkP]vdHYX6~ڕO0MJ([U fqfdӰW%u Ld!̤H7[%RV$\Vdח31P'Ѿ@h!Pn*0lH/Qi3<25@ųb[ݴnd^ky•f7;@] Jj+DlWms8Ra`TgYzv`%JWaJ"N[J! S(xɰ@Tdwqj%: CvO~Nd;1©n@]-Ӫ.pa CHFXt\,kT,0 s3kR] ;ZSH;ݏ+lxD>x@k"Fb6RoUkY)o5ֽ\kk֡^UUc2fXJF,jZFv-VjlQT6rG~3cLfVJMH! Sy|`,Ig$fb[xc e!"ɒV!1ܵr lM6!n{xI֠.2,I=86=?~+(=gLK/~>.0Dt2;`L̥2qεMB%>{M |X}>jF Mb-|%5-2hlFؽ`ϦjMb#'0Ju[6I%^ቓn=Sbsα$b<9C|bB%<S"| U$rB&8PZ'%N( v~Pӵ5S!QY䩧<$<*}_V6! ScYB(搠^<yIK !%.b.J>fcĮ,=:ZC2aBIvɪ/Nc>Qæ&aN| ۛ6u+^ORV|]9}NtXȊ x;Gw!0أ˯ rZ&j)+e8B9ũE9*{EҖ>1;O,RvPw"f7dY5vz'! Sx^P Al@D(Q A oM;B[[3~"ShsYb`iۅ`i8z;3$,v]f"Qn|N{337n(!XI V'PKln8{5Ӏb^T6fʳGNLsZLm.cZy {4!(֣b<6ZI-WO-+K];3[e{ġb HSsI݃0?i# @GXj-Xo{-O`PtD?Xc%J@ b&/dlw0 ¼.b>{Eߓqu =1}R.j/Г`X(X۪}of:!LD$1 MK@w8m%%1;h |4@ɖ LLKr6@;7;Ni>h 6S{D.̶0BB&DT.4o;lpQ4bBG 2e"i~$с qRAٲ eɨ1vѢS@ F@<[8  %WG+8>u zPz}[\8 WWyh>( =CԦ2tt!LmH[d]8MTjVJGU4@8!a){PE`YjJ^1 M?Osk1n>bYPѷ ,?eڀJw{3im%YMZS-ʯIb{19y31D 7g= I`29CTݤpmj7m4LLh]ؑT9Emï N(MW. M`("06)"qMSPz@8!jTAcZYq*Bd@ KRC7Ǜĉy?t pP`alQ$F/܃{h۫ Kw4lv~b½9,mB݇E6z|G>/Q$q!>,FE9KK-EWK7X;{ȷԿYb: H}~Wۍ| .D[>l+i VBj޻N7Cr4  Ou+5i|^,\$eW37Y.UV̀  A 'PD ^P$BHb@"X$sv< o#2!ᱰ^GO'7 gn ~?p?&{~/ ہC^װ=<|]`3a@ 9VAf͌w(j ҊIO"`oBsȘ&?Sr 3k|{U2 >^ ZeߠD%pܜIXȾI|?px (A@'Uhƈ*DW%I Ta$@>&xS yg}h.o=$Sb7f۾'h_y6Av2/&^{bzo\ty%U{?oB$01WX A`&ў;Xly1{!q# 8A`'J pCu޶L'I\B!4P1دaeJ?q|F-<.a,@fT`Z˜M^lDysuNSN웿F߉/ duXxL%>F|9f^ ǻ?g2#O8Iߝ%̈?=3CE߂SO'_?@ñ $̞fF#=.(`zX $.S9n3zYy|4ygcw\t>W>T7]iC3ZIPG:6Uif]pUD,,eSj6+y1B'! -<CPk3Jsay+N)G3H-bD#y=Eb:?G'Ňޓ0oA8!_\:#'=ʈe2ebe.Pz?A'L<6 _ɸR0J_F L*[)-_pfH]]#q Ƿj`vRI?j2-PS~p(q\wx?gLh vU(n ll2z)Ѫ \MA@'Z?%FrQ# i{< T^Jnȉ㘑J3%-@ol%ja끝^hl)3c.4сSTc*mm{:Rc\ÜIyl?7'ؠ~ 5*<)1'$ o.vlhJ~S47fȘ9ͣBe`!Δ? &Y|f}>W_Vm.о`GmA5??d5IwJE:o{OsǎA@AF_4ApH.@%W.됃aXfu`u)'7ۜ񹍨~ǐr* Wx ?-Dc Do/$p7xy0N?!A@ ؅4Z[@FrQ#x'|O>'|O>';zI PN+t0tE- uEiB/rqV*x*pK2Q֡y@0@80p ;p -e @4g"԰P@0Jx;Cr9(GDII9" L:uKI|!Pm(]l%.iP8;V \>@xΚ SÐbOzfCfhO\h.o@R???o 1]"R[*g̪w6@? b4b|Y2"nG#^A`' r™(]/0+1ͺdoIsa'3kKO|??|,n> 4X\$UÀk7ODp9$=ռ&[o\ P`i3_p,ڞ>OMD<)FL ۤ?@ۓLb y;3bfo߲bœۻB8 A0^m t#>D&@7-q_BXLb9hE!TɃ0L\򢵑a$L2@&791.WAR+^ڤ7wַrNs=ySio b32ǶuՒXjՎ>]詧Fhm? ydQytB'ާzTU"!گrFFOOdʴ&7%c$d5v|VdM#ҔW+!g58/Bk 9a9毵_ Y֔MS8=!w#!T|: "V%+H@* +aS]CMJL+Ϣ:©!Hr⁜8*׉E{Z2࿌VIܿ=g -&£&)),.ۮdG(Hc^Z*Xf4lF/bVĒrUI%ц*9(qeRI6)(.3T˳[bF3&˻SÓaNHZ>|tzu}C!Teal$ D إ%!6hZelr4eN$5>f*xQM[{=Դz7=Ί;<_ƉNLԢR 7ҥ&_H28I55"id+nZ2P}@.gruvM opʽ[xP'F6DE) jhGoLj5>E.Gq5!; Fg)Zԛ !/)=(Hm)!2}C!TU7A0"9TY%HMoBJ ^aHC4(_E>'y6Eo?Fuw,#ZJBRx98`$/(.lJE bWJֺ2,9O? )&D 8I= CM":(>8}d}L@an%LXwDX#4{)[T]L@TXxefx|( <XGr[tk6D7҄X|B8Xa!T=c1[RBZP%0&LK!̀!XiOeYK͍ˬg p95zK06;5ӧn9\U6AJ-nYῆTTdC$IIIAƒ7(æʋIưW:2Ǯz뛝~o1| ERӿz/RYR,k\(`tѡq~ `O  EK@P!TDaX UFf-]^%I a4U:KL'wv-,mY.6(% yF3B> ⤊&W@Je-՛83҄BmWR!9೎ uv¢`ΤO";h<ԛp>sPRk&E;ۚ}V /XX(p:YFpa7MѻXD , H)\Gi5)~mvXBGjKvQFiSnu7ۥ5I:eZc!Sm9nvӄ*S%%Eώl+i̦LY9| )a vQ -:Evv&snv iq(*(9E |۷cԔNN_ybrLk4O*brƽ.E1! S"E@3Em2@%yɠR//`|*o|} քN~ѦI2ծot: S +HЊ8Q;OUB @'Z/1R}۠,cKpf\; ,D,#DW5gHI% [nR&ג 3c`M_lWNj^4i9]Xĩc0 : l6Z-gЄ#=Z-Nz1H孯Z‰ǷAcMQ9EYrr@b+N(U8šX&4]4#>b41$v<%%`K\OWp@! SqTF@@p|}fIg<.ݗq>]ssnLl1M K`cˁ"ib O "cJ`,o&wy!D&;y7i9LoBqDNw-269:A-'܂@s?9;Cϣ ~r3ـ?#@M i]! SQ*@(?@ 8)c1c3ah=9>q00tIL=DOX$?0i$B!;q?ذ >=ap&&5PzV ŀo278! Su"Ea@0۠?0--G ΞS̭9 3 ͌(^PqǤ`uY?eΊq̭bVY<9'`b{ i ,/(lnߏf3FZcXz_<1}ҜN_Kkcq2$_uN! S" P͔ kmeqckֶuPa7X% l^E /:rE8XhSSgrt)!k;Є7WH~Y sO6 B#bQ+UR%M`4N?kʬ%Ţ6hP?m,"PWRj+FQ傩Wt9`Z #+>$mk,Uji7udç,(V ;gU8! S>E1xQ0w@Pt'{@3nh#ж 8]}z7{ȳ8~eBcmШq# %5j?ZKD0EM! Sń QH\RV -n 9ǧE$? &hYʯ|-)tbT)"; x &ib͏Wi5#|Lva?d A0 {I DFA a F|2IX2#n»Gk![o\4\ִkZ `A(v} :?=/bМ šHGؤeS1zYU# U .{G! S̈́T"%+P,TYP"xK-\8ZmIU(;zU,"bMBKHXoDudy N4b.νz;*5eUK&%5}Zv]1d1'}}E=Xyb bqf Y=nk&'k B7U D4/Z{6\Pö R%ytVo|ì%M%ϰeBےR>U8A'&8JmE[ %t@yelL<!(M`G8[X)D/phמ66(d/\cnvB8&wȆ#a.!wgC;?\`x=֗Pu^X cTrro60 A'LaAm3;- uR\Mo(Ǵa_'mv/[v@5`մ|p2e;)xv B[A53@3{%m- GU3!8#zxR&ʡ& TKsErNd1)Q5saL3v#5uˑu< b3'9Z9堐寗Ca}mi&/Ɍ??DkA'b@ub$ 巀u&XB駦>i#D?#+ˏ' 0?,l Td‡Jɓ$X_8-@ر w0X+8%?ϼ@F~@3x-SM U:djX 4O?5x LA'$ :`@xD2C~an*O{ሶ{gq ؁Q~ŷ5-'M8 ĈW_+9Z*/fUByE؇ `*$|#.7)ܜlA'$x@Hˁ -=>6v ,qʜX뗏n25o x\@e  B  )0 ~hB0(03ڦ}y3!To2N p??>6&&+2]$%:$?4H7P~"ՕCH~S|B?)*fA?r|lhW? mAԉ+!T%$ %Gv' `b.5F}7b8LwF?(LJ.UΜbD@)&>'߀`2d0*N^}`n]ūCJ)s~?6_/)Ps7P%'>L(%2dz%HY/~`ÍpT^_???#?wS????;O*/y)?????H8 ,Ї0<# I㉊ޥ5^EW#gT3IZ fY <<)D X3h@$SY4@,k^PK2 f UUu^eJ` abW ` a &! SuhPF H%Z4 3lLOlpFݱ+D^ټKkյ2ۑqd,*Vտ~p%nFvi/WB-[duZ{e|PX}Km)-A6fRӬNz'\  $+f~mMJ0/E#n`Eh$L 3&YW-G8y*)۽wqGK^\")iR/,N! S̈́ #_@U A#jj#0Bi5IhfT1멵xѲs^ 5ף&h:Kk1RȀqkT/=5C0x cp@QОQʇcgv̠`/JVPKtq!PqB9nZBVoݿP[ݩdՔd١F=PnѐBr(\;X1ϊ KݝN1S guDE+lr9yF˵^g/0O*GY,!N7Vs;vyFS-9WԄn_ق-CŏJ~dX)MhEO7ܕm9H9-XN)\/YRy#`_9mCx!z޳dyz7o=~"ڂPV9nlr; m̒l2 MP`S -')8, 9aD.RؠsN!avohlTlZ! H^P!x1! SuTCĪltH `NP<]cBw k\[H+Xt)b 1z*41=Kմ d=z;e"iWzG. UZ^YJ[I1;:Z{jQt /k/hdM~^ 00CݛM(T{ߝ8qk܊ȡ_H/ZרD,TŒYIӪ$ĀD6 )Z7}! S*FCy"(I(#JZ֏C:4Rڗŭ[ծM-oJءs¼0P5q1Ij%Ix{arY1pZM5bD^7`=" K*K WWƒz^y@p!H*CJ832LdusB(׃TYXb@/o4Yz \f ʀK ]b(XX)-9f!:^ꅌNLZd3ig4@þA6@dž03k"\sua [Cju4i-.=SH:.e@lP`6rl6`73X_ ,2&c*j<wLU<-ȼp[CC P@ȝPpR@-¤UB9¨XF UZj N! Sm#H+XÐ-%RY),T*"xؖeP7 wIhse4;v ?|^v2V޶P'Z';|<?wd1*cV0DY\^UK0b?*˛cf[&ӛFfsurvt A!)YUO!IL QM4P_\r{H1D(Dm5ׂB.tfC tߝn9YHHM\P3ח5# M/g5I*p! S]L-(R90 .uZ'Ot/V|-(#*l bЊW* c yLJ)rexIڛ5sVbiټ3ӝB`CJJˌUv8>;wIerر=)R44aDqxyC lҋ0cjH%,ٷ 7$)g Kq &ш:u8m@,Q'ru#( SR<P;W5gfX! S=K1JYȜ@+j;<+Xۀw Ni[Y{:/%]'3+K& 5KJՇ}Rn MWK2Fv益2`(2a;St뇙A'XqXFGj (Y^eUe,W+ŠIh>s}d$ȞwR"&rB*[L)~+&p\S.\Wߗ[Kdmҳlm]{! SEFS DT 3V\օ5~xJe6hj%٪Tں,_W&9!˜]Z"f G)[_*bͨ;lXnv+Xi=Oچ`=] &gw/*KygXC QG@MC| SSj#2e= 5綖AтnMKP~7%XPyg|&jE)G/_py_nu! S<+rf(/Q꺆f+}X4#&Roi>0 g\G ._ xS"LȡxUY9U:'7+8M:8+ھuZa}a^Y) _W@9noq8q wKEsGB) ~V0vbHi= jȋ+z֪ˡ.v=weB Fo&y&>;&  r}G?%-kDOgY”^/fue }!8>es]N c *2Z;o;V1rߜ!*SC"@[ K1ow*DiΡbYZPB4U"ʒbJ Zr Y9!DO{0Eńojf7ҒmzR;@mOT03 @O܈ Kq-/_%(a)E콍[ټx Ş:f*-j pU2w]p#* %i:59VƘ$dWË&=ɕUv1&O//?}uz#65>gpqBX>a`3)]_s4_%Zj)jP"Yl¸-EUw}X?7H22H0p&U=$P&~GD,eįbwsmOAzՁVlH/ @dIqɲ@rB&pX9`[l 9fπSS9( ~C!zz!L7I*5'Z jD$rC]ZKn*}-2{{[ϡy\t7w]VG{qf>z\ӿ U+]ΙɑAIP[oom;FU\b%_-f]ils !)2k VYYGS3YaWX_Qt9ʯY]Y3UwWSa=t}rw SNR@gxCbԉr@zl ;A 'c[8^Ł `K{/"O|GGE+;ߘ1 P}26e%427P ,0z=7 umPn/Z-XbzwAˑn8:tϩ2w|{6(ۣY'XXS'1c666?S~EqGJc;_]0z_ |ltoqa#C+PFwXF}yLЛ"K~u r `4|E?Vau[32.kG/`sW> Cjo[x6&oRߞ5|6碷XJ-kRbPA@'tTbNXBiP`-o{#K0 Џq{*7 )go?d z`3n mX=.Su@fP ,-P z?ޏ2\jHoz@ &n_[)3@3x X㻆}$˚CA`'Wmw.6(k W#ʆ[c53{ T.h/rZA8Ou0{ @V31|lo,A r;U0D)ǿ@@$$_@'C;V H$*Tɿผom?+u؝Ϊ "NNNNN!m/0[z2&&sPؠp X!VAH>GJcE  xeBi@ħpipeGD|ml0&=ˀGTI` 6Q71'W[ː`,+A6qz) !Xx7~h(w,JXz}r% _t`E$AΣ*`>ۿ ; 0 H .;`f|>Cƻ8Pk2r]zjDz,!J& /܌/9iUbwD ZFjHp94Yj{*BTJo> <$ ڄ`@iʄ4h_1W] qաCdM O=1OG>I}}}/yebfh뮸]u]u]u]u]u]u]u_p'K "Z0f3Ɍ|B f̠}|YD3z>(iN﮺맮뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺z;m/ưz[Wxi?I$XqAFb\ +€ރt[5d3Kq3R= bĜ+W@=[_C ^a{B?!>\dJ]u]uO_ (}(~1+4=N%a"#X{+ 7,{ZuAqGE ZLM\ɉCZT*1bG\byl@h0𯛀51k@ 3.cz2! M4I,%5?qHj|z` , xW He%` F_G; 2(n{1Wv[pl jBX<+V` e%>44sH,}D?ppW&x7.v~I$]١qXBEraǾL8sBjn|@|No .p<O=O k)]7ܩ$Rkc355lX@&4ڕ{?BblhJzyc32 R+p~@Uasf3)[A滍!UjA|e?F5ʾ-Xl0V)~ĤUF%` ?&q#e >3km&I zZ!vVOW" K-Pz/La{d"$Qtap6G.&3? Ҧ^SZ44s3־SV_sAlBM$n\=6OVN=ˆ i(x> H?)ȅ@B C%Aty<كnxS܀{%ի;f6+O[Qǒ%6}i0At @8~kGfD2hf 3Wi@sI4LR-\08B?Ef`R8?3;pK(7otw7J͚D+US*_ϝ m6KO' +qPT E3!.1ypxy6w⺮r6OtۀMCڂCJVŸ#?֠*яxpѲ0:No#AȬQFOxxcL:kN$f |8W7`aU=i"͸*`{Z!z= D[RH"+}I*EP.ȃa-{ûpy0aE뾺J<}wǽ뮺뮢wSd뮺뮺뮺뮺z']u]w}Lyņg cپ뮺뮺뮺뮞:r2ku뮺뮺뮺뮦?Y]u]u]u]u]>˜FQx41T?^ WkoSȠqTJVpXf~0!+ô M3R*d,L za?jx3,kq](pH D9BvH T%5sU\\"K0=3w 6nHe/R}H]xl`X( LAZ047~xp$C>q&Rp!nL@PI΃1ƗڀchtUXu!>T0Cy Eo*%x_%:g< dH8,50oG1 @?&3DAd0L7[or8m4%Վn_pF~XXYQ sWӲѧU40` $Ud&w Gdcpjzf<@i?KIġmapRcԵ eHb(x`r9~|zV&/L9BV[aEjQ td0.Rgs(dFM-19:}+a: jۖ|6fp$cP7I^ phj?)f!M Xpkj؉+#WM3J#O* bmݢsCăKGr;4P0e3x{"@hr)QHX3"*^l' RkAM | gW'ZbRHLPT@aWGBpT)t*ZX2PhZ $!JǛ@.3lu]ڠ[P ,8 `tbZ,'.sg(/t%N5WT$Sm<$q=/- E| a6"SBi-ߕXh-}go!4%g[<:B9hXr`ތD#Ӆ0Ap}͓o m(qsTY@״cCTQ6O@6PldOu4&r~#[7?"U&l'rA%YͦLȯ#$*i }Bpd ?*#ثS?o`6N AK>]("`p3ULp{Cb~II%c, `l_,(s} cVWa m4*qIpׂCPaH #D4Gd!;U!š6. @L ;' ti ||3KzҗCRWBR"/DLzBEg^A[ž,H`F߼60AM[J0&b~4>4ȃ |]t`|oz!y)?@'O 9B*MF֊r!5azmZ; " f2f1DUX*f @d+C Kk * f,fBPyCTԘ߆Em{ ]);kqd<fxԱSD#v -y@b\o>/+ۙpA|ѷUF#$nvZUfLXlr޸Co6O!5. ) ? 2ɤ S)ScR##>O\mѡL׾9!o<~4Ǯ\-At Hw~ DL3ƒπLih Z@!)'}O--P"W;}3  W][0&i_r< Cy8Odĥˑů~@᧠SEpNR kh\A m@PDG6G HLB V܎%aU$ xFg~ FI?:l>1rP[d+zўH`M7_πB2?W/lnK?Nx(^$ RJ Ue~$H4Dzؐ!"n\%R_пPI{'`uT!fl ~f @ |1,oKQ|n+Eh/(4f[C`zF@%b%Qxb͡"%YFOӐz[FK}ʕ'  =72m2OxP熮`@J5f ^59#h %EO7':0f67żIAڿ9z(&5&'06Hsu1KRʘ`8ߤ@8:`d .U#~}q %__b4)T'NP!|GBiBG`>Y0FASxmp|!jqGǵ%;3mEz %钁"֑FP1os>1}l֠Ke ^3r-`К CRKDwܝwv]m!'g>NR3b2ݾIl=" 5HD)Y7H}^pd}02 qG4d`sccH yh4HRZS>0e ۗ0'Hfm_%53)^#i_sͮH@R%vWp[b!{Y![/0AnFeBˀ6\rCwc @]dfz~%eI &Ct+Lͦ &o6d!" ^(9~CMAK?&LAD ʹ!oQbG$})_ Adܐޡ*sپgQ^`K?|He].@`z`$vEj;aqiP4<@Q{M\ *Aa 0( HHKs[ Ԓ=tߐzpFO^X i!~o]u]K!hgaQYz)"S"X IqD\] @@ m?Tƥ}8T;*anVqDZwbD?uYܲ+o-K`g,B{$[g?K'd)3alC ~¬Y0.C  bwQyqqKS$bv]u__8Da]u] MK@  l)1LK=/ Aʅv{oo3CJf7_$(Nhu8E,c : ;/P@:dz¯ @9{MBjU%y(5V'JB oz$ 񂟯fAm^yA9BGxkz뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺뮺뮺뮺뮺뮺!jTAfXAxv!e]"Tif٣Sm8aj4Jcme˴8+%>]ڐwj[{kySp}CtэK fT[[uTCY6˯Y[SV)W8K#woˬ.V>-OL! O\a!8 H^!]W`lc'j-m5׃|gZ}5m6u>ڨBUNOh0OY^E}C!T0b@wPۺK+C.7qhrJ6Iwt?{kto`u62<;-_ґOJmE%} 鲔)Qli|E+_':S}FʸRDܧ2'6=k*>lOߧ7v+9p hB.ONI rǰ)UDJƒ*2Ifk94NjtFw1vd C,m?n, Ȗ_!T> hQk#tǩ(Da"faaNV9]G\":R&&A+=joY30ww=5ֵBZM*;Q41&v(hRL&i€([;f)UHMPG4yd~ Fh+6AƎ*o祛QOgmW4/Q\\ƹ߳:I[CW0#976.?_Zܠzaݶ ݔ !Tm 0қ`Ajt,9Mt43Xy,j Sk){|զK)n|dw'-dN2tTy8t/AOtn\: 4"(a})0Oe*M jDa B}&!]XYPSCjD&b||c) lp$(QJ 2Fw* m\¼dz·;;BջFg+Pos4kJ),\/D a?޷P=!TE A0s̺^.J\ K8/1qŌ˻S8bd͊+X~UNDfwGG0R-V95# 3P\R sa,7wVId8oы\٢K#3h5emlGrI'#% )4{CJ)!5M@2Zaէ*VqwiNk҇ gC(`|5ZH!T5b2 eSe0FeMWIJV*g*Lm"K뗍Gyqd҅ ^m)UFIAw[UvT)D;4w`.۩köw:VcTeۅl]U QV$IqdGPL%I $NУR\ggx`i[+/BF5 ܼ~zjxdLA t(W=bɑ*$`9wm1G)A3|+(E! !S坚" U2Qa1b){Y4iѻF"9IH$D 彘,5` 1=8LL+bx/ R( š2'o e+],Γ:n]+zؚnk0B Zˌ&V{pMk|qVGbU_@)_wJޙxg̻ PA@@P1QLK_i6Wc&bSzz?DĐO p허 Bӟ~9kBљh*&w󁍡 t4@^,Yk]N#D8X f 3W`ejDe?>7fTDvOOfDR쾲9'ybd-/B)! i6#LhZE_ttBVKp~QLY;ƴx>Ry%! SK!#Xl @  } 9m&~f6tDs:$+0ΔK4_#؄zo1PKɍڡs> sfAy!LQMVnPBӛv6\sg6|RTVJ; JJ/V]eaɿ#_.52S`\ފ9,F`3G;FȈmS;t9O_w0.j΄DCr'ȎoZKj }NAkB4B>LG4K0>y>o?OqbcG@o^}7llPW~DwGw;(S.'5هvOAh '#'@bӞYع猪_{ta~x>ޱUG>3D ?<@g f8}_1ۯ u! SE%"B fs/ eLHϩg>xx}`|x%B 50.#@,y։>pϪoL~Y{޹S5cUAƕL?cV^ģBQ`@=iQ@GK;8>7#"}5.ґ^Z7993Bdd ";]`l=!_EʣuCFAlϽդ4q1aǿEqGJXu6[*ׄ#lb|7'uchE1!H-:! SCQLEn] l2 ز;QߞotD* 0m|o "\˕'#!ޤic-AKDq͝ezF(aK,ޏU?j#q췯0q]sX|@;_Rס4G=ňӉ# o!`IϐR%+5+2HL go}w{#2GO<'E9s6-SNtN\[f@@3utX'|O>'|O>';[z[@&x?Xfv@-RL]^Sp:0iP, LpJJp p(D3j0R`lQKPW y PpֆqV{7c$2_ܡ @Qc݂=sQk=?tDdž{vA:* q/F( k  "iu:]@?CBT%Űq8*p@^.`FZ5I*By` \dupE8ŠeO??>e Pu7 .J!tV̪nAS@Cl!4KG&Dx y Byl|` ЌFoa<< L>{[OY???x_s͸(.™_P&~2Kq3R=>omuopZQПCK-߲L\/ Iiz4;O~1^lT?.X\Q90Q Z~ax𗐈iL Ԡבs"jA\lA#CgA]@Shӗ3P1󟅹ww#꿒XQAHC? RlE>& U\޿rcI3%̘͂:XDaƋ4y[" ruM?J-7ҽ_oϮ'ufx0?xݺo"!3N*a~{7 JHi_kQ<|$A@'wZX3>y0 ?- bƞq ɜfmWl- ;#eGS>Չun߲x5A'wZ|  5dPubE@x {)Ӵqb<%t<̄_Q$Ȍ"3&?|/ P-tl9*LbFP یITbb+^:anKǟ?¼'3ךkAw}`@'T@Bo! 1ffD4S& (<A'w^7(7BLcǀT8S 2Mm54?/t$g^ M$z q~"@Z#݋=,| m?ĉl9͒ S1wۀ͚ 11^C! G]w+yA> | M8L%<גccELfw!x 8A'wZނ~7Gx|Ԇr DA#<,+1$9Y}ax @Of% J\y[<lA ̂pK?8">~Gv?SohlR U]EUj w(q~#j.hdVԵ ղi;hsW( gyFp=KJR (x@mȠD*_(+̀?!GNY7哅cq Fum ˆkJܠ4~_ Arԧ] eNh⧆Zc$LE`On0D)I Λ{82%-:pϵ@cK =! S̈́3`eX(37Fj7B=}ޢك1֪[HΛpÍT@jCXe1CIA&Œ$L`Eڙ O[E_dՈ=e݆/k$7WVzD@3}9t[,|pjCp )%06h9Arw"$Fd5+]QnobaSаξmQ! Se.CQA ' 5m ќ h@a31у:h 훢Ö 4y!C N/81We4JLC5iWD5ғ 'iBs| 菉ϾlǍ)?0x$*^qFZMovGjBemPbA2ESrXkLY ` B o˹1G5# mM.lD2jHz͉_*qRքZC! S̈́3 p R%8.3zў@~ AU}95lzimhoFVE۵n.{ ƺ"!f9si&`':P ^6Ji܌?I#hԢ'o]!G2:{:s?wtpKjO8A-y':GO#~ ]jE h")wZb[y铄h$)! S6FD-\InX}ag_>сz;"8:i*? =/KolFۑta| O{@ Н{C"7$cMtR\>XS-zZ-{L__0zqʎ[מ',m(w 21G` 5K90؁ YUIZiÅ(]Э1hWMBT:ҼK_hB!h[`䉹Ueg#[Jh 6! S>oF@-Q"A0;qDnw/a;}yVĞ2eBFc3ȩ ,䂭}р=FQިtH]nc#9d^\~c9wdնy߯]ϏKex&&8O׃F:7uJo?}Ezq7JbVX4"(:!UxTt&# :eYpBu3thHδHR W6/0!! S}C0RP 5%isJg'ip'ǰiNW77{9 ĬAD^q#u'8ʼn+#Cɐpt. NZڼTplZ~uIsAh6>4uyl/<>kMhxNue)hã%:2~qܪPU@i!AQl\]އ=2cd,e^rDP-DfNk)U3|)Җ]H~ 3-ӄդK^WMPJل-7څ8Ys! S!@P@%Njǡʇ.:h뽿5wzQr[bQR&vCOz Cx}Urd-,ƽi ۜ(ؓ+{.N;l4\s5< ~\>`p]2;#QʚS` >23{?xjQ@ .VhA'Ђb?|UV @$㞳y;VTs) X! S͉`GЬrMlN`آ{c5da_cP-I44j  wE(XFRyJv5EQ$ /%00{Ĉ?h>Sh0{P!m'wJx@lPݪ+\b2ޥCي99SQLTNB[Q["rmrb<϶i2Jqv9^hOg{WŎqsW~3\d Ҍ#! S͊=*l [*aB "ޡ:Ha_F JU;Veּ<1$L|.^p;0y'8GojpQV+:[Ux6s0SP-=VUA[$- LmU>`9VAbfۤ(@[7iT]lP |zZdZڧzrG "IܕSAK@)`eIcYx),@_68;۬R/;+Jp)RRv! S}TBM+@(!HY^{ J$- +\U=P*ٽ`&},CWbW.z"WB1AyIN7cq=_eؕgP,L6LPF'#z}p2$؞#vEs3p 0SP&OVj碦 n +NNhu'+H8$;L^ F()E*R=_G Nқ򄨣N:N X1J@Cwz_%cTJ:P!! SmQA"UfeV() .)SPllUMnMƾЄRf6NNZm%Z&?羔$if 1F'Qj~Lu+ͥ Y労FN 7~|IߎyQvoR홿rN(J lZg *Rz7qNp 0koNA25%kY4lBd&pTB X+Q LBɬ..P1 E+F,-! S*HH4[˚/@-VIRjYr^*u&&UXE(`xYZ 05,R%f0pȉ] cm,ХK2`vCNPy~ae$ⳃץْ|hb۵p7UCO%I C ˧|nݭQCXW.&W*=V ' d4 #l!l1 َr#\-վ±IDSt!a8jSU4O֒5! SmZ29Z ftmɟx|m5"qXqdl(K('\U>44 C0+ BR8mKTt8 q-iwh g+ 25U%qO`l2mJ 2Nrl턈~L.qrMõ1L @C7╔كatek{ ޺[^AgE@04 qZ$A[ ֪jΊ.[k[NNR!u {Ξr\ )q#|! SE%Iu&rWt7*Y7moTn}CG 5AZo @䀼f.fjIL!Vu!M̑)\ Q"mOx=V*fOO鿷 0;~K:Ki{en 4cT`j١"Pijf˙,Z(o@L45Xu//BU8oSRuqBVJ8MTQZ7pN R9`{f|mwM V2)! S]" $ԥr D}9z ,܇Rg!!)M2yaXZ&yզ<@// hI]#Wg?_K[cOt~)o cȀ4Xb%9EEiQDf*=E !ll0(h$+vRT'#pAP0 3"+hTTM5U9 ^ԎTJrqlrJ0yijj'jE^l! SUJ6` JX $*r-X@+zցe׉@ H<,yM;(EB 8.SH>gӠS4QH ?8kR$$,d 3v ,usNl*i[)Yn,N[[0MY&d Qc]bC蘐ř)$T$Vpr}TohʠPp2AJ±o1e%R:JǑ4^fFYK{0J}vh݉ʱh! S|P,7"29qYRZ2gi՘`O!y?@k8\9. ;F}vpL`B9w˻ZjH]B@on#A L1\sz?UJW0jƲ. #dY7咲y7ɾ?h_ФCwxI6`'7CUGfC!lu>s, @! C1!B=Bf$\{!z <NMBoe w0ib 0&;"oy)Pmm +Sfi?8R}JqjH+ǐe~F WVb+^0,wAdЅi_NB,8#n>3  Fa! (,Ӂtj0V@ӥԨEr4 Ӱmsc&0l2>LO,^7(©  {0|CO3eg*?.\vX8ICR%d"?"0} H =}Lg! FeBu/c0*y`| 7Pcl{B2B?}ԉh!,ՓJ,ƪ=LxuIIu,KSxU6!8VVi&hӗzD_0% 0DXf1C@Yk{$,Y%@Fz+5.=Ҹ%]lE9)3+8NaTlY~x1)^xu^]Dm|<5% &oM xF!eO&{pK ]Jb =)|o|IjB>뮺뮺뮺뮺뮺뮺뮸_?$/mZ(9ٞX_? Ah,D$b00z]cGU"s? F2x%zͪZ~^wW9!Qgx)DV7Jo>\Uae=2-x໕GʕObD A [Oqh|' h4Qf|3*̺뮺뮺뮺뮞S؜߀F%` 8$W0XjHX z UCfȃd(#3?44sȧ@ոR9 Ö[tQگ \ {433!"l0o5'p`O x9m< #2_0Jtv_ !孰m [*0 ~"* L?~FF% uhI{?C3 !r7Q ʀ J`Ƽ 6@HD~C+dZZ3h_y)|+|Za]x=ux JEPbVHj#bg;&A'z-`m#AOKZSD.! dAqBb`XWw–(;/!|̀$D60Q*.6.Egsw2Wq֋ʷQNjo}T 80KI1G|<“ "h'?ߙQZ0.%in$Q"u6 dz+dMc Z"zUs=[nhn%GhVW!h\%D^b oxV090S FCq>%27r&R!dM"IvImt=?_|pLEW9ӿ"8~pf: LU,1L%&!˵ UT/))P?O<8ppllRK=m >hr*ix4D֣'̼C~{+w )-q\X4Ɗ.G (D3L`& Bgwѭ@̀Lࣗ$Sj\B`9)3)aY9cdpL['L:m2%aJDz @_{?˜9Jx^hT]0X)38BsLSuAI&^s7?0dј2o LoCSDq)Pf& Rgn{ƾN ge]Yٯ!)0@&yxF= `&H.\4k&]6Vժ&g}r`H2/[)? `$0é3ӈ o'P&o/r & 81Am8\"_7 < #Bg ߊPFI132zC2 )-,S 4@4?#Tȇgػ <'pqw>D }8HCh؋1"*U[-+ &}/!E9X7-Qh &GxmAlh&2۞} ^? aK q Ywl߾.FCSx~zONJ+3w8l`F]e!5cVcmPj}cDzdcB#B !{^͠^ndvk8i,XSJ>paHXYȾV׿Ҙ c&&C&hljK8O@@Kb -y@bp| (_W2 o$F&Iop2Ծ7r~ 2ges[Ci TZL9 ) ؠ D24 JHAOYJo =s" #Cː$llۮ!x;Z#**[/kXF;G^?~?RqFhq]KcI vD1)i@t B`L4Ҿ?BxB=c\1}Q~OA-QjNJߠaP&V1C  =a{4hD}&Jj\% [ ؎%,,2f2!,Br[pW^'F1"Vŋh2OxP熮`@J5f ^59#h %+hOhu0e7 5[{tPT֘ThCZ{ɔQ|q >Vq NA\Ϡi9D,@!~9}@/{ʩ? sn$ps}3T)T'NP!|GBi)@fKEp1qޠw3bif)Fd؜*&H`B  4 <֟ɘ~1RFc@S%*Ho"IIˀ@y-UlP-*tcd+5eKWLP1hr#,ݨe<Nw Q{ KXWdgG3 8Tif:%` 4wyj"DsN1)/)oBXywwNГ%#H^~ M|7828=d.4z]{ZTԔPeW ~c3Ⱦ# z{,@# KDBZˀ`5|okO5taI|t:n,y"nn`A-y'sm!o|B.?O$(a3Cd[q20{`lpLivaq8< >j@~DZ7l`D[[3`g)Ym2\ XMȕ \ n\`p}(A&$7z0P gnfLSeC쉐# &.6P. @o6d!" ^(9~CMtAWqT? (ThBX1@ _ WDOA䡽B|Z}Σ$x_q pT[dj,hotFf{0 UGE }U[Yb vP '@)+Yw7!݀޴W 5}@b @ެE E\ izwހ9.A8 <|F qaPtIu#Lc 034"=ߠfbh71 2Kxdr|0/,N`Q~nz{)8d`=h@$. !&v TCFǚh /|ECQں">M_]Pf.*b߁R߶$Fz a6$IMVCuޚ7v5<a1ՂD LpDnI#bcQ,#[@` / 2(sy`jlp~]SV\{+ɘ~@fO,AG]FX'hPa X6\6dEnqЇBRd / !,I 0bu6Ծc9ė@ C+TG&|{xi|gL&k5a ,`m襉ĂC R]ń \cGAr "|bq\sZ>QTCPEs]';6ϭ`%/􂓶ed{0Ycϣc[3_r(Iar2,T/wl4VTh𠀄 PK8Ac ȿ倡o~[X8,"#m)Y3 kG-1>E aKZF }$ZmB$9*`Ϯm,!=48K!/L6GVa] )eܝ}u]w7,Vg}5L~\5rK .(s(B!SM7U*O>GQJqDLoY݉dCrȯܴ?UK3!=C1%ߙp0R8ab r]h}hh 6H$d뮺뮿|ts"[Ika뮿.h=)"[Z٩| n)bՄ{_0.WYr\!Q#mn%RFFFhu9HNѠ$JvGc[-TѮxR06K%nr q{BJkE?|p+M!ݷz`׀PNP ;Fճ뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺+bA 'p7E0G14mͦ؏\IqBHX*$EM~#LsCK1p /FWK˖0,51|Y9?\?~Dr PJR .SRnLWQ0pb| /o$8¿|~N4}BǼHa{9ax? @raߌ ^#֠#`A@'1]Q5D0q!<.z T`ÕFk- clK(q!<̚a$\ ،t-(dJ_P1P6>LF#fVQd ʸ&8 m'4#/) )VfFk4lt DA`'Se$iIh`C1{\xρ ~U.Bc5L=M|(QG廽7 @f@uej_C@fAn:y$束b?Z)h$3C%#tQĕx'.A'v'gO=J@l ǚ<@<xpf S#'w,1<tGSXf>P~=ztº}1dX y5h7%?4sDVPa?A<Ƞ:~ TKxN!`ɴ4VNx%@ M׊D2Fe<< ;A 'tKSbH?^* T%Q.4B n0!"Hو8/fv>{J铊,Vi{jb%Nb.? | T'8H15+A c62֘o}nbeR 6Ӓ›\pSEC~A TxKK'#UhfmqJ# m\ BQB 3ɜϟojm3P,sqKb))a sֲɏzPi\FJd&D_9'C,  q‘Km8=CJd!jTņa`lD+!ek@e\%JX.n%I+{G_O6j8.YqΑ.e*-(7RIqe Zֲ=̥V, &|ީZ5h(pDl26oYLg. Le)Pa3[{hW-3#E> eػNB,*GuN`gY$@ӈGŔ$BUEpՅE4{bbR>W0]36TPW_[P.u/J72:&5>A@P!TRCbNGrS;kCIQ(*IG3xvMUR/Jv8/MbEZS:hPFN4AOh8wDm xRi"ճlM ^l]%~v]B|.ɵIt^}Ҝ^*j1ƹLe7q#7V^PtFX;0The;=+(ˆT%}# t&?z1@m mq.NaM;*v!xz؊Cmֵ_ Ht괖l/l̠r!Tu ahB(̳}D[m.UKPU<\<Ÿ˗c8 ~ti_lk:'?œ8ĩ%[@o'0j߲OEWF"lD,0d+<4iګmRj6FV FqJ1:|Ǣn}ůK\DT\&28D5{6+N4峓e)5aF#/lcNfBT㞊x25 k$`*7n=sVp*XB0-TMvO!Teha 2dքiI[C`HM8,%@֞JlG ޱyʿvƠ5'Y$LXrZ\tȪ2ts9ӊ3"SR@SE\AIi)"9+ eoߝ=q**5'[uAS0V*ĂVeʰW{fPdSL.ޛ?nYRzxP߂ w^d5q ` FqMA񮬈7E.Q!TMGQhQVV22n KHX Y.s|T쮦Z mDE6PIg eidDツhV4e쎄OB"BaZ::OX:;%*%x־ڙSg Eҥjy1T$@\DSmf9t#gFAn=ؓ;j19SQ\YԙExArktmo[ R "(ӣ2!vO4Mm5S6, 8OLM;Pjk4Tt/ALޡVsi&lBh.fP>!T% 3P}\"s^&N[鵟^8$)pѴ}Ӂ-FiaNP]a4)i󙆬YGkgK ͬeU+c*RRdAT U$KiA6e˔TF%G.J#9/$ M[vM2%r %*SmJ뒉utʸ@0-f uYMwa]d`LǵԢh鄊zzNęBAM0Iހ>!SA`Ʌ)fk-CY@@+bқ{ιn+#~q +E)Lu~=ںܕ+)ѱՁXK5J[<WXUɹn&( Gi!Ȱ/$j /E !^>[$]'[v}DF:+x^XFC419|< n-mˌ`SnN t;`B@5 @ (dawϞt|ߤLO<l%|>!ST+%ڧ2T&X-bW'krKuSwcnN*!.N`6NrY▭NEj l䁮zs|y9HE'˨*YUj{MV2M#.u**35EfKT %[{[,%zi2ehMvk7},;K˫p È/JeΣ̲/$JNGY7N!z86GN_&XҺ*5@q8,F`@PA#%WK_I9!Z` m{! SVEKKskP%F̚SOs,'j:SSSs=:1g0ayLdÂS-JōK1)p*QbD,Zee +E7+qnX=)!53,*Rǐ[w Bpqj+"?8遮# u8 “jےz낣f %5ldC J䤫F '".lB8~y! SdLR#W9VY}niMO0smt#ԍr@-_ Ueu LC$_Zv^|Olx/и.N)Al, exncΓ[5&GhyƼ).WgbT^FA4D$kMuBr[5Œ4!:\/״5T[JIY! S>U:U@x"RRR['h nvČw+sż; F`^qT X~13~-,]uJ4.Ug|ZJBQ5Xv^zF{NIP$P)KdK5JPzDbЅZM! Sm'A嬧cP40 dDߖZSQTB Q*;,( ?DQ%i䦸y7BӊfODQO;ϚTޢ !)a 5[^w؛$#E+)qJi۸ !X]"WJdقbVQ"Ed19ebv dDHY<|Zy!, tH=M)U;"]1B֭UJS:~#B}Gmy NTeNo^]~`7EeU7f?! SJ<e@ w k] ɧ+ʎ* t#&m;)|@:Hfs<{Ӄ$!nd>L/Hiy>>|"a>dtC#CRbEt+5EY[QڱneT˻yHDz,LJy3h\Wg>އ `di}@Lͽ>|t/0! S:쐁!@2 Z"֠or֋{65Zt>ߘmګ='}7 xm=,;fO.F2q}?kư Kuqn#Mɬd0F0WEO'x. m1! SU$" 2) eG shh$C*>W<1`U{ D=Z"V}+ ]업z,mil$@'݆r1j]Ot ʷ,1sӠ G&UF-A1 lJUoCf kU]҃)d ` e-;W?)nw=J/zٳ9IƝT!ƕoZUTj}RVFU7F Q4GWM$G:OIKLdق}M6 @[@ <ݩ Ր B&u(=sbfR i,G{MƀT9y@D\ieOƇvpQL =fU=u`9UyLd9`eZC9!T"@,*CN=`.1ҠO^DAx\+j 2 PjFul+^Mk`Y7GG“ASsO"95#x6J&No|' qgww{#?G \)wwl%HGr+$]w΀d87J- SA`''|O>'|O>'|O>';zSi? K$nR!aXɐp<).T0UP` ( QA s _*`DœIE,V0V C~L,J#Ñ/tz m"YM%81$O34?  ,-X& W? ,m)J~}7@dh|T-!ExaM-éY\T`^!$Dք/}"$[Anj *Bs?? xP<(t fUn-$<Cl'rMxxzȞ y 2Mqi0C)үGp-yzOfp:})^m?߁d#? "ou,7<ڏp] kiJw#3Kq3V_=뙿mCd8)X(LhSxe~>4-ѓW4i?86HŽt2VX G-)~RjœۻO80]|C<b~ RLjOZ?/3~L 60SF:Mo!g~*1NfA'&:Xp qD S=0  x@vO!Zl~&{k4] j~~cO5'0'U> r[~Lf4lA+9jT̀ΐDA'`,&sCxB <JvaEm LR[{mh|!{(yG&'Lf@+t= آ!2gZǨ?y 2# !'0##АIǓ X g&u0]3/A'LaAi&QAp!hf=VFhHq1 A(dG< f c/NƯ͛|lu-w b ႙X@#6pdGx(a[Q|Hps'3cX`G+ m:̀Ј6<.$|A'(O\?)";> yq,..9,64 k+P gO1UqhD#9JAGB"@3r4 J#BN|zZO6TfQby{B)8@1H$8M j/rZḧ'+aL\?-s9VF >'fmk\mw-0c$Ĉf_͊G@ѺFffԸ|ʸvTõLtG?ax4 0#t#aGqx0Gb]R%5e⣦]'`_|kHo P;ʤ^L#nl4lt75'/~'~ny( Vƒ?Lj9޳"_EMBY{֓?8W/w\/L BxXc,i?rlPw ru_.TSA'_Vz$C~-8q t60JA ' I-c" wql@[%R#6)75Z1FO&ǒÆ^W IA ĭ(ٻC`*K 5k“rh \B/eD͍a97! S}>BϘU7ғ~WWiSY]NGq[f4%oE' D|L<c;]$ُo1ŕidĊ{InS[@`E=r?wM5N%?lހbݤzǼ)`0QDLPDH.N%?ʪ -KǠ-*Ù 1}9t=! S̈́3 PY\`nX6Я*:H]TEAC@py4򒿔%ګ)TҤ ۸Zx6 2BZS zeN'Gl hAҕr[ + aju}`@QW#(c: a4 /|M8 m;P W|s)8=&#orR7 ,ԂHk(aKE{+e'(m⫦H9! S}>]AQT Bgwlk 4 K0gUK)b8xg&PM%KTXd뎯->9SÖ$P\m[`M5ŋr#trGd557M0e9(9_ /%y9k{~Ǩ}@r]>>3W` 9ħ*$15R rd 5uBIJ9Ҩk5J_7#4 \85SpoA! SmE0DQD-]N!$6{]X(yZLc&Wz)=/`ncdtǶ^9ԦtFml/@>2p/] 5T![p{XZY~+oc}Sf @D-bKy{`%^t*vĐqOؕ1#4XO %{YuUua$#D 뢹~!-87A! S݄`GT2X X0p!ϊ̛EGv{R\qӇ$8\7PZyR'\B,itAhilxh^(LqMށ<3q@xgLeohe7<;G|^4:oS t^W`I"ִQ n G7"~˘_)F )F\1&VqR䤆ssBz}TCE>9uFwpt2N2pagͣiw4I5*"@TE+CN4Ι(Jjꖬ K" 8}Xvb;~{w/! SM92%eP8vfhmJYzNZ(XAa=q|z=a?`ŀOUd)Cdr H0V?r g&+ɟN :+23x"JuNA,g#"HhVjv= RTkd*Xͧk7G|Cq 9`)E3ba Bd#]"]OTD=SEȄ[#N#*ggV>*1~2BiB3TSUT㹭n}ןKHs! S8dsؠ (A*xOȋol֐*G ^.|bf0b.o 0tu}έN-NɆ0h9ID:8@byV3Zr.pZy~OGʕ+`cBp)8B4C<@*^C($U@ejla@^fPwѶZ;k1o^h'0TN`/hJ+`o]D?*>rIhB Uf`5;vHe%ΐ!]P%e$G! S#!ҷEfvEE 5׊:w7%CrإY HZhirU]*}cFKF k,G21j|J+q$OBt/v:Wile&3iĈ@PO~B5|:>YӌK6mΠUݼcDV`õ K(YT~^v&^ X_R]k{iE Zҭ҂%V(%KbQIy P,Nׇ;RE(Q_/%mKV}t:a![~! S}VC Y=֨ (&[MS[œ*貛Ms)ՕRYs領UvINl4Q*"uȻK4 k"aFO& ('K4Ϸya=^ <yӕËqA ()x 6#*`GV[vsk~Wug04i/eHJ4,A*# ]TMZ'iP #6\$Y!(>G2+l'1C`Δ! Seþ++edXلR$l)* "~ 4yqM@jOT RhZܟBRiOnL /iw{bA!iJ0?#7]tK]ݛ-Fle%aA{o/#yck.~ќ00ȃaڰQMʴll *>QTAp7_Jm5o}nJ:'(h (A! NF -)%nkAo}Tm('hQR{rh/! SmTAIUL`b3WַmM h7#i:ƛW7oxW F*tcד#Yh'1N*Bk2K,VbFOF} VP2 05. 9i]r9DvKh\j+'PL$.&AGp dDUNM9\_)6~)WڇN}&_ܶ9! SLIZ6a( A-~s&8gK杙=4PR"ze}tзևC\!?]p?Y$-T2Ao)㐍®B{`*1D6 W"bt\KUV )cK5d:ѵz~r{mewnٝb<׶/~OWD kA'd/ ,HtGE>/ ߆Y.FAe.~ `26DWrrfg SJBws&?/$_p?KE@~1%߲䂠+19!ɐ0A'% T\KBLϧG0@w_Ͻ>N[9//Y8mC-,`14 dp-0S ilxxq1B@QD r` dP|wf9E#M<(i z`4h<+ m h{)z/o?ƮQת Ahy?"ՕOH7>`A> !20}ɀr2JhShppDdNI1"H$yK{.d|o~f`_Fy`N595dD@Pyl{$6П!$?4' JhpjUUo!?}l0.!&^ܜ=#U }Cʚ$(2x{8Z=!ZC '1YžUloH+LA8~8OHFLJ]CMGʊ7oЀ?\r?'ˏKB z(t?SLm>#??<??~?????G?????*$p2X ww!8L!H~oSCrS!@:&K0C+hFT,Î?^Iy%Xv1Rk%X5<;L7PKV}9APKɀC);޹:%XԞ@,>uⳤ\~PK]%Xz&0];zWdvA'G j/с*@ [‘^40c,1ÞBԪ׿axY^ZjXd& v4rX@eJ%0ˈR0CW&6|}R0`3|O?S=Q| x6 X`w 6 :2=RS7"7Du%p%joௐ7q.0O| {g=jY Za">5'#][f5kCܾug"ީ>!jSߟ\FmMw>ߪ3nJp̀A 'TN?(n( ;|H< o"mL";2G\ϵTMs ۼB'S]6*LL p t˞͌Z>%HrQ_ۖԟ JPz]05߀clĄ'v~b:]_s==3鍮Gf܇`ȋ1`/%4=Ɏ1_LmXA`'qzx( T3kXVZ#9#-&x-3M|&idCaL})^C0/L= ! U 3].`IL~LfRcܙz]̀t@A'F6o GB p#;[$ {{m> Jv@fAwL׎Xq3d&O6˿/* Os *t4z`3" #Wo =*imA'y*JoxpIM+/?sd[!b AfQP4SYM6}~a:6E),\e@FM會q9e&ߛhOWP8-L;]࿒R'- g%T]M70NW!:]G L@S4?y|?L&?~DB7&hj\ZD(1XQ5B<w%elkjDa]0:@ 4C@s rLZü^V//'@˷l_6vaɳJxrk7|Ltb@6u!r .@^e?6o[ј4d2*&*Zԅ뻤Ȣ>qL#աo'TJZW68'R+ӾʽOH5b HO۽|ǠD弪>\Hǖ8}<]Z3]{M^EڰIq7A'?q r@@Jc L>mH&A&g)hv]@fr\ ҵx56?a$Ft=^?g#}#pyOrsS'#.'pAC쬾~B1Bv#] ~`F,b\V ,W6oAA'LϬTLBHR҂\6>"aDc}>K 3b&XֈF(wC̈́l#׺Hs| ÜwwC| ?1G]F#t9`רu}|90bG+ߐW?EgYq& 5P<>>w1巩 0&Tx*0"p`KTюfw~F3k=$ؙ o" j ^/ufq&=-`k=cCD0&M2=H{A2#gp[qB/xsG*竴kΊU?q迍O P!=O]IОѻ!LG(:aV1"&(,Q >%cR&q5J*)lPnOukW'f?Bctg]DeqY.;3G^g)[R\|ȱiGCMN|_gzQs ^Bku!r?5~\[i N:a#c޵w:mNka6hcB e{с }.8sC0 =C! KeP!jT* ͂1P`R7wPV7ZWLI 5UOOzN&DI#I̢#BmM'@|@OD—$zRL0 Z2IM *%~"SM8;FtQeYov?k.;&-iIm[-u{/04\oƊ q5 Ri>6 #mB@/&jhond;6WJ.J-T% # )MiD/L fUt!9ف_SQ dSlj4 PwEpy G̸!TC0l4PL3Q&f{uro|d;0\j-W^>m0Px1Ir=+btcA )sd#U^LJX$N&SǶhx` #cݪ.N42y-o\FFhL\H%H)sŚfIN45 .i`odj.0EPm:8d隧0Qozg}C!T] aPJA ü7xSA Dy(l^hW RDRiju|.M*%W}Ig+#\:Y*Jk|8 EyuԌr#S&hNRy#bVV)}6ji+\YJWmCxV3iI㛔g9^&Fx'{ ( -(!TMa1l$*3S%IA>>TXhy])1V"d4|YjV9or/2|nt?3Uȕ(Vsu[6uPF_I=|nwtMhwS6ϻZxg5Dp<{Z^׾j_Au8s$Ą5)T0%MIfČ+:ɸ6fi K7Dy@N=s Py>G.@ ةbIUէ0) rq^@2ƙ JDQI0Ki6?:m?Pbsӫ^ @Yyj^m/.| >7,]HJavĘƻa:T49P d|+[uE0%{5ϫ2|'{Hg^uq3bX9p{sЁltQEp]j+>&I/ sTS_YTA>$}/<^b['w=;d;!TEA' w3SL`C+#['Lc%S@.u1FQt1G̍*4t`逸_&6O ְ]G q[wK# ! )VW'\HP"HF|  wҁ$rSK{w]Xo$q^v[#~zIWhgK :Fn|f`āㅋx97 l gQPx[=ExA#-9孔ߋW! SŝCa%A dk"uK&#م%=U*[GK暼*ӟbA~vPF٢*6(Fz\cF$qLVLT5t(g"Zzk'( N"5ٓ6#,{]??ڤSQ/w*nlg9M?JLPO w{ I|z@ E*U<^;ʡ].y*2BCΰ );| K*.XwjVŅ ۱ӭn[g! S "0`݆Xҡx%\ZU9[F%|dK׿R9S`qФGz;3,oYY/!DpVAOkף_K^kahxĶsY\]c}׹?wǘ6:\ԟBLx3VIa& "{ЄMayp/1`FL.  Y>zfj1w8 lPRh3ă2똃ިk8ZK~qμyϋ?Rbtkr濺4. ! K$eElpk6\dHv;WNpo5 "VfD6"z͚fz Gtm}u-l`r$d@("j[oe Kन9UI+z^WMtFћž x͘9K⚩ 79ϚI! SbHP*(ˡe u Q3`8$e-ܜQİa uڨZp#cՃ@e4nv&*QB.D+ هU$üV YBT[[X E?>cۓ%ǒGT d0@)8 W@i4Bbn΄';8VۜBaZ|TenS!ol${~*9i! Suhc @S #fܴV+Uy^^qbrnZM} a8n^1iHO,RS_b,y}m1Ŋ?`dܟ*<!%,saP*"p՚kRN3< 1&Ho=wxLW8,yf$]b8Ȉ qdH̀ HN(I*MC"v*>u!ZT"/uA! Sf` @@CL"Z"4_uX1M CyN䐻uhaZaj@b+|ݟt4^+ApjƳ+1xH !>E `ZJ׏yI&ЂB?/sJh25?&?U-Nhsk:bXӤjXw+A*^ah&zlKlGuQ[+[K]XX-jCO|?! S̈́Q؃RM @(Fre5Y߹,t]"1H?*Dt8W2ơ{-ClZ 0"qaɚƟE ~;n޼Z&:ۉfsDJVBs @ar V3X9j5C 0 F@ kY:,P QkuLe}Zt 3X)ХO NPxu~?XUUA@'tB< p+ bs9K? rL%Qy2Z RJiIH/~/bI{HWux ጊ"¯6__PaCs,;Zs)J#S C7 w'3_ ?#xϳkb ?n<|V'vEA(0;:,Ewx,)aA`'ɀNu8  hhFhFhFxث .mObOKX1Sp}4`)j|q+gyK? v9ɌPHy@,>MúAR!RPDm9 e|˳ucNT I>~ĉ Q5vS8bYw: ,R[F,5$Qa84YF!X*\c@7Οx j"Ap04cfZѡ|]t qWZ:M:!h6Ow8'|O>'|O>';Z.@&x ;@@#K`_^Vh pX`8()22R8Yw}N4b p`&`Cm;e@F`iN?T3ݞ'U><4K+='"jG { P O5[u[_ھN׊ QUNհBߨH4bkփEppXv\Jx5 D܄/r^<_8hy0C.S?? xP<(ʄT(XlTV̦%}h|!<ɦZ% y&!PoLM[4m0uܰɉOO;L})ľ??&WfQPS_.UÀ k/ +8w094#=f'ޓ~o}`PlPRQ@ 媛jg> =e۰m?HɜʹO?<lwٞ G8KmL \".y9"9S? "da( B%F(Qyof5^+t76j`&A'`0`ELen(怇b0OE(|8 %dbY͈ 羿 a8 آa"$m3oJ~ro#%߈!!-# fo1?r B y?+_^HA)̿8[A'LaAD}J ̧WЦLOM?#1ȉ.Q!Dx un?x :Yi1*S62aB2C6 a|!C>V>Oxg)9zfc8 XA'o"f,^L|S 9C\}b0xӦw5S4.DgR& S~:`6:֘1eh6* t8g\_~>+m3B)nkKAS~0zw^3:LDS+zXcg\W"%-A 'oAO?#<3h Isq BK*V3I*.:A'iI.8) _4ӈh G, D~1'; a2sE?ܘW}w|2I&X3&R`C抁ixWpWA'QGQG!M-" q*\Xdrqq\p.7T:s>qN9 ^_ M8BwA<06aktYQNj܆{Ԋ3v!{Y#45frQqq|m /%4G]CGnav秏O\{{w1̈́ 0v͊2$ q)5Nn@'&Q}[g$eޟ#EfqtN,01=ȴŅt5\L؃ "ՍÊgMԑ^9G/|wW !` :'[c[>?{Wkڮlk.A*TO+a(^?1%Zk .u+FAL8f#SSk}~:-+XX6Z|V&ma2a|ݺneze?шɔ1&NC7'%g3h417dN'3Ǡ%p~2Yns+L\y !ј`4mSREb2kҏy ` kF*sP4bPԿ? Wd*^r!H\VЁSy_3&~C'GZpcs]IaC_p+@! STPb#)jI2UJ?0'Ɖdh} Wf#E(Cg ,톊y%@9n;lqr?yd"+ɂesz)}[{fT X޸W k0+- QU;"{cR7̊()BߖuQ8Wb%wjJ)YȥiK&z?! SmGc@*@@ʋRE AZ -,7; )nlЧw2 OD!GV.CƘ0!ǭ"RmAABUyCǟȢ [=]P^b1`36QM0S%RqqBY+t% JڨY KG]{;^_ko"*+ =^[%۫8FsZ# -u6U)fRZz4n*m;! Su$ʯyl.2sXk wI[DNiKw5P`isu!^|9~i1Ǜ>r9mvެu5~Rzϊ Yx4Cu5^WNލ ֮U3j=zF ڀ4P2 (q̀evVNnAsraX&;t3kP(jLY7X8V!5i$q QUZɡzuӅumZ\Bpk_>Fı(gR0d!)s8`! SM &Hd(nnՀX UV]c[4(FDAts?Ьҟ71W7c [1Ryufr,P|PngxO5-Ӎ[et6ݳšuЉtˆJ/553-Sp9ҩbv(Vn`G;ϵ. sO,`mOay_a^T*σ&ZF؋?mFv*Z5RHYe@ NP%¢*S.Me!>!0~!0t!0x!0q!0~!0!0u!0pA'b@+X$1` z 5yF+#+&N<,(  xS\͉$Ex3()۟c?GC?~?A8eSЏ^nvX_IwUSXm|`~f'EȈ4?'u"h̲ A'$t-Ƌ&8x0(e"#y}W|WZy-p W|~0$=ͺ+ͱPgLZ9922g=TK?S9Y^3VusO`6*~ +'Dgڐ4+A'%Fih#lDvKqc"?\O7X!\\O7g/$: 0Ɨ` L<`S <4 @ceJiBpS#F~;_AP# EۀC7 ^K[O%w3/ s:E+jp p!.BC17~Z\bp9)Yk Q9:7f3)"_?SGl?h(8%?%ES'XT2-ߙ|8€[ ? qEc T)ញ/ + <8pPllRV|(%;$\Դ8pi$,oԼ?Mܑ#??<??y?I|g??+v?%????? ???`$rPx0LᲿy hnJsݠM& 0p{IPKӝyZ%LnEyW.@, ּT1?L}1?Y%GO}t@,xv|^ fzy/;K0+E[)=@,k f5@,kQ_` ao_,ƯZNnnCyA '&b bQOM@ q\YL#>$\t*|ip /C/'`MDfjq@<wNQ Ĵ]q)3c#(BUY/Ojgjgz;:5kBpCq5BT%<|Yh??~K(#t `\7GZS@3y (]q=8zWVԘ@মdg#_b|zXBK~x-|4?L nEIv}i0-Rm_n*A@'S(`3у<$ rxD>g2ST ! =YtZ|Ψ% o~3b$TU7' /ll?;_{|~MrpL~1n6a&? ހe'5.+ )r^wq"٧X A`'h鎤DADo\t8VK|)i>S $ 6+e˜wow]r M25P?ςؽ ОenĹ2Ĺ2 EmfN~ Nf4L2Lhvp!k?f` 3-1 !NA'3N&k`F"g`"vqTeP%COob42{.M;?S@X ؊@|ΓM֍|1.5u3bJ7><'2}`"6pJ'0jN=r$@3xp1&yffX}A' TAAhղ f%ZIHjC~A)rB$>T) B.# 3nk'@3n?*; . ?G>3ypBx'$WSCW."2#<{1+mht2Ly3os@A'}#?bJMD[DF2lݝ-g6;υ_3c k$ ӗ~e9a9 y:J|1爡i0b@#ys2 P "At_5EVj<œr@A'#p 3-5Fy " |ܱu2"be dv̵2ҋ?끝/ƌ2sb 3`-oS憬=G8l0 (Kj6h4Rc*2cuUZ'?B|7>U wh 'CO)>\vAbH] -}PGRLZ{3ks1[X5Z͈N>A'Z>\1\ .9戉 T^LuSֶ=E hr@%@e *aVR INfa] Ɔ zwww>~C ::lB{_^"j/(9hӛ n3wA '~ S'%xBW0K8`YŸav0cS~)3b0YIB|&m2p`͏ d%yPq{mBSBh~hM|5cjq\( @-a`qgELqY?Z gRM!0r!0|!*SI}M2R ؔY@]\>a G\>ac/1'I1vW!p?0>q7~{ğ0;  0c8ϙ? bk#?3'ðaч%dR(VP,dc=m7b߅ݑ>fO1 hm}b@;@'P81`0=l` 8@aCf T؂S,ym[eLVz[k5v {7>f'53F&.BrFks| 3q~gđvE(-/zWf#*gZٮ2ʈ _SpmDG]|ǀh^\ãjK$Ťt;jp):nT5"o,eTh>no`H,X PA TI&Qi?\c 1-GgDh1 LHzh;)L Ѻ@IZ) }eD|igP/Rk#Qk!LHdx&;TƜEv ­`ب頵~7F݁"9kW^o12}`I4>h)W|/;x8 aΊW&dF~Yp_')X5_ƶ^Gp7-ށѿb.qtGF|iűvݓ}mvœp:_?`?AlM6ok 7Sv2,R0h 3ͣ i9é ]JGk,VI&%P״S47XJK~2RupT)8 :3z@-nYFecMS%N#c&$x }VIsmK&ҹ xP(OYg@,[yY U_z<.ܼJ_{$KM@@ N D|0l%N %XKKV/J*=8dL8L'!T& aؤ@ &sQ( -hÞf435[/̌>\N OZ{\΁iq?tvU}ίo6Pӻ<_B*jn+wQ 5D^5 n TԨ& ) W-HN T2Dj\\]ưć%!γjH ?t,Nh[X8;Jv'lTw[!D. l84{ph@.mcws58V v!Tu:a!@+Uߐ IfiE;;p7yxudNXɑkq0Jz*G߹}re߽3mzaG'hfFD3Gz3?w9TS+2;VHh5uJ*\PaUXjF3ʘSyzuspS*7I$/ۧE+&3X1LJh+D@"1Zj|$BH9knh;~ JJ؉% 7LV㨎 'dĆUct]yJ}C!TM hd7JQX2ZUXVݕ{=t+2$<ӆfy5c_M)JnznhipZfI.F1/4uQXY!'^հkfɜx1},XDBI!O+lhaj$^M~{W [U}a}?Kv%yDVQɄEx.NVIc |) fƞESC9(@)ھ6PoFS+UV 5Wгh):$>! ~ljf2fñ ѭHt.FbX)G\md"5=v眧°ޗvei Zo4NW-,~NT><ʦJpD!J81_=cNy @uY,_ `^\XT8pT{m+j`±<:VSı!T 0lZ V\H1tS-|Lk7>-1?`E$(4y<[.ulA[NTN'q:53_w+d@4BIEƖA<]4-@؍#z]fSW!rS]v%}?7_I[#vɸqϿlKU6 P^ ؜- ZG˜5U#NrP_ 5S"JYt1o_Oe7єMqR hN xN`+L>Z"聴!Spn^^%2IVP*tj,MsQHL ѮȔiX"oƈS(˾*e˪␮iTmjd* ebʮrN # É%-5XKh~䡭Nׇ+,Fm[ҍkֲnu}0RA|*ne6-$9ַ4Jg5o(mrJvi{C :f,Kx9vbvK;pA+'ɤ@`AL`%Q@ݻh~sY1QNY*}! S"B2Adժ2Rvп2o\Wf;_ )ZzkAĊGkU׊\- TQaHgZ6,:-wФ8=$0 Dbա kZn[6^S!;&dw9&kuAL9Ȩdq.ܚx۳U F"*h%@N֊2Ղ~=xmB OPSb[k{!*_]Q'JըibZUWxl*+.,ָZ(D@` TUƢpoD^Jۤ1ʫnau  ,F{Y蝦VG(@|! Su sl(***YEl@;X$eU43Mݨ%R B]Ф=,7|/+E BdZ4 @uB25jJU (;}8۞>>bCvH 5ίZjxޘW}iR;'u/8+,:P}XS;..AcxX xa".|a5ChSWGnJW H(:4 dr!,F-I[=T)8! SMnU\(Tdlsm!4B"6gTA5|**A2 ʆ館@qшz:v7r!a@etw=A]~]9Svkƻ47_ö)Mi!Fg) Ѓr,L}3-AAf#A m@9RY^(% KB)`EhX¤$c䌠 \$,Z6PfUQz ! Sm,! RP ȁlH w󝏰dfa^~⯦Dh0Iy@F`4w䦇 [bObbJ+]]21CzM_9 aQt@{]ݑ\{C`R8TQ['̒pgfZ揌Q{?o'o@gp A@'`~:MmڈϜ#U.BǢ2dFrU;e.LpL>6vslT oæ3b., 8#q#;>\e x  Ku.l#߀A`'tJ .# 2ix1P`@L䗐?)'_@?&1OZ ab;>2yXD0B| _*p=;)EfvF1k?\­`-` eE [!2^#/_B/9}}}}ߏH T*%Iŀp‡YX$.T!T#Cw7p,2m Xc(o<+%W#0D V/;Lú@c ):͖|Sm ;8a5{M$zPWn} B C֙̚089 ¬RjW#BV'̀f*i-o E o1,T4/Jp UCvnߦ1]=l}}}}?ùpD~cg7]qcC]t_?1GȔ ?,jN/KՂ|7yo%N1JY߆ ''_dRa*ظpG=uha`7JM&YC=;%pU?OzcR0mpt]t]u]u]u]u]u]u]u]u]u]=u]u]u]u]u]u]u]u]u]uO]u._ u ’XCt %2>I۞1((j\@vR"O@H"[NTg>G?#B32uI bFf)YmBM~ߪř YbCWj hˀo#}1`%@,% {  z9/_6:Gp4: f p©Մ%x.E5 \)U1[|Ipg 0ڻlDAXɆFYrPuv)"!e(dn ܘX-aUө _zMh`o(!2XS{WL_WJ07;,y@/ 4>@ D"a[ `i^R^^KEc-OF§d!Z8whW0X:rSUZjl`9g漹'RBY#s >5jYcybEXo1mv$JN,,=}irg{6{DמTԁLB0$J-N1)7/RDy?IG0)@%k1D<K?@6Pe83"; ^:~Gɀ#[\ҫ ;]t^?#fz9pt B,6`[bBCkq?F@7X>ګ D2 -bR8p]f/ibQPҨzE,Y&/Ys\K cwM,2&1=U @)nNX#~53V-+ AH\rXO@ 7 P-V1>2 "SYvG0ܡA7L&Aդ8D+Wh| ` Ds9Z6r_ښ !/LzO{//Q$`B12X&H2Ծx`2XlicnV@?Mzϭ1`G ? @M B)߀ r(܀ _T8S~=&)</{.tCga)Mn vS rʾ]<[@ Ckt׀&oqU~5A+b<)tcJg"CiF=h j@Ae /ր* fߴppD< f@: iu|Yu>$% Ȅ>1~~͍-QJLg-+{ 2F6(a^7;MPQԉr%1&؎\ U $X]df2!,9 }LrHYJϴg %0L_U7~ oGaoݿT&6f) eNAX@Rh!i4|\h"݀P$u1aaOK͓l xcL`<(bޒc8m@D Tc 4*H1tmA1 FO#(>I/78 l%$]CD4gX'exjuCS7~jO}3r- '=Ӗ=PoTt LoTH$]l {}Wq G.1u`;o !Q |@r)9DXrYNw Q{KXW#z1 ڶuJikrț-ϓ"3Rp"KYƅYGLwLFO`JGKBȇ Z )'h`|P^k"i#^jTH3wn܇3m71 0m0`H}` Qɖy! E4ʍox9gvPFv;gD q'apϴ@> (pgAe nI_:*_WLf&c8Az"eF7fƠ/y]Hg ?2ՑZg^aiC+@fDZvKXOkW%ƨ%ŶgdF @0@i >65Π7Es2[Pf``EhEߘ̑20 %O8IP"o#`U|؜x/)߀8?>9p.B$Q!0 ܈~Py2qFl0oS?2L7.nL1>/-4D_ t8_sS ՒFNVvU kp rxxe]u^mt3Ck\Q a @ "@i"VwKQPJxuQ ߿ ;&gSjUu_ 3 P t8 qGpG=gq8@X<0( ޡ~(b?=GA Qraܯbivu]u/4mw =!&뮺?Y~ɺ$z5~+h*<Ď4_|R ^ϝYV qXި۬{ +ZNrÚ4csV؎_AՆ _t0 mP BJJ3$߃>8[r+I!+xd_ =G.J !AH%uNa'Ix`u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]uoA ''|O>'|O>'|O>';BǺ 3%pL@ ̼Rpk#R3u 8SO<@a@aQ8natZU@;7R`У  ?#fg 8 \f8guWf)BACE91$,(}#$ώ:/Aat p84 P.T$oݰ p|! lhe$H4GxCZxܤhGHO^!<;řv??ci(S JO$X+3)BmPm<瀉 Dx8%R3+Fy(I ϖղ 6 vM&kmt WVC+iO3;Y9ϖ G|#.Dx?<Mmj> 4 UÀ 1')iLV5nj۹ "p4+߀p,7{I !F/$HJ$Oɰ}'?&jN> Ksrx? wLX  y7܀!eX ؂qϋgX3EqE~K4~C@A@'5pqBt<@yetLxJq4B?q s@Cl! ifJ#yGx$# 0#I`TH ،c`uɍxvb5D3cU] ^aG\w->_FL@hF|XGC>\Sw )<&ЂcNֿ^y#wt8CtS|ۮ{BUާI>O c0E -A`'`! vprẗ́-H|@C OygG_Q?6x%S\`сLmu&^ƻ!WC ]/WݰJle"'DxDz<@5>N O(O' }%n/p OthGb9H"?i5W'H K 3b6" ?mppmV5͌Zabǝ TK> 9De",]A>#GGy&?^S)f \hπ 0$y2 ;A'oY_@ZSr#G<#AZeަ M|>p 3B<&L?%QPŭ0{]xE&T0-O9 *~AHOЎ9Qy<~ OIpL:U&$\䄬 ;B+tÃl|qlA'oAO?#VheW0{-ЧOO0^*@ Ho1Cwr^ O%?PHX6L2N3c>f׆ۿ\fŊ`24 LEcOЎ1v?%?ϏNĀ ?W @ˠ ڙ_l'ϡ38;gqd!QA'g0e#D >@ZXl&OD6F>h~!pkL:(4ò4uwoao+}oXQ V!&"cA*:۠@}_/jCCH$|TRo?s<zv2}p}C;3Y={#>ݟ3&<*EJw%19"&?H#N ɀ! SU+Q9(!lG qEN],0gm΂`+z* E63~T', vIբ:̽-UxuZݑEYMLvN4~I~ww8={k^ؽWA:Yܾ>܇(p9ŤAT[%h3t]:˶;#'>/Lm 罄2v3՞BSDZIk=F1⢃fn)\aO0<B ~TӽM*m@x˨&2=! SPg ͩ@ $8Xv|(`@Kxg!,iV()M̡N:r ]?lqUXAtID.wae]"mg&z8g"u cLE\og=\D j~#w 퉸j}*S,|›Q̠, 8hƊζ{o[R s~vuF@-d$u%$s_'HbbC;Z\ѷra)zkƂg! Sb FRbr^(&D`0ԟKEʦym9^M,)Quz5A4AdLY{Dwv{ AsSgwǡK+6~6OǠ{{#R;ls;$`MY5 M\3 Pk^;u#QA2AH-SwA'txݣEv@b#TPx! 7ş>>nmlRچ[m<׭vdvv1̮ JRe'b w! S$E@)7s,TbA, 7t У!4 {I$ 㸞B{% c)t{EEohqҭtxBvs }h<)A#UNCAYF%$Ʊ5a AV@8yZYP?҆?LKԄ2v. e<+#طOCa'g ̱X9@"6 "K)uFյ&,ʔU.M:! S0ސrgS߾Bl8'zv-y\aj.1(?;IN?̡v!IX{IH/YBC{UF8uy$,hBk dZb9s@Ft ]%@b JFHnWHh(h @iB-,PssojGx! S`@ AH&PO+COm)Bf:}ůn=CshNj&l4<<XY_ Nv{h9  o"Lpf% Bo7z?Aߴ 22̌H[1A|O_[iSˡ2/UPdAqZ) GOTP{! YU3TVKtݯ/'u:B8dH=Ei One! Sf`(p@ i* [x~"T`7coٝeФ>=O/j *tn@C #狊 $QyUF;iIKVykmb7/x8SκzgPnӃdj}N].fyΗ!4?4>ưo#rϟ#_o?; B, f1~Y`g+xuwH`-2sR5|oKK1>oeZC6 Ä8*<j|(vlτ5eKOb*.43™8^ӞKbWkTPCU]Vn/-fۺL<.ЌHLv?(ؓPibXl:#eȲ0$:8sސW.9Y8石Mwt@*dˢhd+Fp/* uJ$cT4QoJ:TC! S̈́3 Pc=(USdovw/P; [e;}MOD< ƑS1S<1Y` jiee:%]%9W|R%4 7-ʙ-uJd%hV]W)k:>g͐Ko3,@,6%=EDն& ܥGqz⪑QR~pZM* ) 5ڜ(! S̈́3Y)8E 1Vou5ȔV1ۨ9 =~wGRN& &UlJT9B,Fr쪪sn<(x]%z19Xw<`> {j _p/WD5ǚ>n궈*.2ИfA`?5b]R` X?HdL^4Dg-Р(2JF:Zl\=L7zznVi'8VH! Su r[)ap8,лY1M 70|X6 7݌,`"Y1/݌c w*:'yRQOqt/SYW(p?+nuw!I>ygy7dG69Յ/ o [zD9|\ܾR#PXHf);(#KD]:}B9e( @H{|H[ RLh!d"m!qUFt Pk;q# Y+8ȇ `jtc! S}%#T3{Z*uNiNi$AXw/⊖mґt:$XK\hˑbiFMZ("<#H1]TñU};R ˏθ˜ka} P?sGtQ/S'6}G۫~ѬVR_|+-x! & `@ҳKf5㶢\' %3~e⃹Q%QF(߿1P66[5s%bћ ka`qȳVoY_8lknxD:!:! S%!ee)[m@( 6`K~js+'=la% nI9ަָItZX0ӭӰ xrk z XeQX[_svά;Zu.ҷ/=TA ۃz`wzp.2੤Au^2A ݼ O~c,( ۓU]h0Dq b&TOoʨ>峴$גޔ.)vY(J[Iwfs%rK /'ݵj9݊jZ?.` +$#! S$"Kf)%t,&q8c'd!c48űd^mWs'.tcsZ֎K5n-)Fjj~jN(ZSvn=M/Iav ɢ866T{(Af ZWj ҕ( oǠ;F`hetqww) 8](@gIJQwR̔d)Ek+ahG7rueʧNh5-i['PEeۑd.Wa քk[iB4w3 ’:! Su$r3wXfXhmi3t4bل_,ZC̍frڂmͥkgZjڤu` {Ohw jU4 [Ƌ`ldmu5BI("+vd5h2˴éIhaYd%˙16F t0z^TR Lm{{Ig~ܔ82..(LKFrk Ty*y1h1Q:3uԽcs[LFJIٳэM0zegv! S(3$5@](QN::YuA`Rz! Se*F未sP,Z` <*aCfrMu{JQ`M"OI h&BU0 ypfNDžA(U8ؒdHf/ZIq_H,K聅|+8wnޗQˍĀ(@ ]pQ.SjRmtsF@IPV*s\FęE' T<U8]PI0^1rK6[ʧW|{@ČvcN{[6=1aH4} gv ;! S5(mP [ eJ$'jpXvL,̍Ym#KJFFBPW ]jj`nU7V"ՊZĀ G\Z#.yk C0O h,RNV O}o_ϩ3HOз H4PA%+VoVFCEwUY$>p̫6aqoȤ”]^6x KM6)ofEݖz/`U-,kD ܳFyo 1ZTA@'U՗凵K‘[4Ku@=$r(G <A#I`3b ;ZcYc{!Э@f9Pz޴?Z9'??Fm_*>9 j}Z䅣#h'ˀA`'_@X$1 WZH񧦟FZL#B`ȃ7q';Tl* 3`.z Ē nSNd G&ok J?#`>%H~4nq<4APa'oۀ̲5޳0A'$:78  Ӣ"ao$-!r:"A],3 (lsb ɊtV'&b!Li'N,i1ϗs%߿ #2|Vy@lqA'&r dXZ")0-\` 4E!xb g$7ǟ0 h@wRԒP=|Hhو8AǛ[ho4AX6(ы`/^#c^o*` ~p??"/>sBG%ʓCCDRmwSj%xsq %~7$՝ecDPf NMZ_pZ\jp9M5FAՒVI $zGČLՀ,&>l9?ΪQO& 7cw*ӓ" P=7^€5_6>fej//1\^dv&__#TH'/寜fj&Aq'EI=:љ90.x%ho@2EA'Q`(ƼE@bf$oB[QFuV9H@?lEz\wo:l̋q>4lC5C(c/lحިpe o.H`lĴCOf4_;+ Ie3\x k\EQLT}5UTsUp?.o7.^]rUQg^; Oo>X.Yٝ0;tB}^l뚎r臾@kTo%AI2FU/m?-gftfC %B,$\Lg &¸W\NIur-+-(7V"&)~q_Чb܂rP#[\V5"^ sN ws_prƄxoI{m/tqۈԾ? q|lg>p}X30+ /΅``C=L<bx )kGq]T$? q-Ϗ㉟6"3 6O-x"t:/#r]+A'W낝xA"8%R?Z>ZKfχ#Z|/Fx Kt<>]@,p1 W~$CqF,L/L0#8 c* x K.dy/Ƃ2 RˉW|𝣸X}rgUR!}}$nn>7<)z$97O h X+v2֪XoVpT{CdrC4\u֦Z_G'vὕs\Nh!އ%k=SM6Y>*AWKSC1r1L?`LgZ~5'zY >';Cv2I[q|o9h\!Pw}ra xS Y,prq`gZA '[\3&/u/`1P ei0|X3.0Ic˜i> Ʈa w4nR8=Plχ2Jyɘ ?l/PK?%/Q#s|!NͿ ?>o}R䏻gY:bs@A`'̿XX,2 pJ_KQ‘L9kM?3]KOW+@OIT3d*r7`Agω&Ou}zWca;WN|'<> Os󂔘 DhG_~0DjЕɑ|I`4$}a0'A'^}逕<3DFM3]@psXaʻ)ߘX[x ؈Nǰ;P|[TAjPAʲcG،b+8h# =e'/{<t7$!_Z/ͅ-=Ax hA v+$lGݸ1A'&n= -!+`E<}0lMlQx,M_p be3d m_ ؂@YNeN1ﺯ$=/ Q`dSr:Y2Q3 >J#IbVLڢEL 1hǘvu$b,?۴N3@1X8! SAPN >w/?3~??7äk~7ԝ(+S6 :6riL? wS  {m=`p>3cI9 gE N *@, b_@>3h8 |&f,6~mTozI|&r! 5$wFl;äCg:B`  R}Vݠ>gs-a s!!@;!*E}B>!L7B%dE`Zۿ$1f`J}RX*p'')4U¶tYMQp"T帢;,Ypㆊ;Ir F;]e׏vAױKo$kU]%G9~;p>@+_ &)D 8 +*!YTH`n8tNQ0yr\AIp3!TF0, pcEIRW41 S>5c36a+q2_}^RARٛSųjEU(93XV+"jrG9STU28Y1u;\]ZAjpVeCSkH:6LXYg&kKC#{::ٽm4XI dK*tJ&RU0{$ O[Pps0[l j6}O&+b)zԨy!T: 1%Q7TQW $ 51ch\P > t)$* ش}yPծby&<*`o]l5#O"E")DBU[vg?UedFT y6I#~2rz)t(k]0YxO=?X8qpEN$3%6oA$6Re)RM $ @x,Ǭͩ;.7]gգןic*CemJ54h@{[b@MKr82 ur&XB!T}: b!@"+Py$D[r'RI^(oyІ J Z֪Įap`<1!T5bPH9KƆI!AN43wU1`vEP'!)2b7 m{š2zGL;]%Vkw 2@Q5M/hK0BS҈ .࣓`KSa,q_ $DMC2hC԰ .JҙMpN:SYA`3͌*)R%NBg$޲ތ Z(JiWC B׭8Ŷ<՞Wlh50ތa!C}tSsBG6^ts+:!T- a(SZ Cmd¡x q} õ "%J%&Hh'ƍE/Z[ԧjPe |k&^6۩U)URΟ%;6hWU*['<P4ű*bl-@LSVE?/xuΪZq vPܐ FˊMsMrJa_f ңm~GUm ͵m]%k-{ny\U) =َO 9s8y>g;$dK4g#aA0l(;A  c+e@)=׃$;FBnxd$V' <"-t l6Zu! SI2D*`RdW e H 64K& mZjZdVwjT ^${~5Ӂ’`Iy?L7o::mC~W+@VG9^IHJyKgY)̩nYxIZ3k/ŭVAbVI&/TR묚ՒMoim2W\ED:yf)nB;$*,b_q@ T,_OVk -59ܺI# DbK|Y5b&GX3! SH2tT2י%])t-b: du%ilЂ/x2QF̟1i9KF9CC~z/y>q,B`G=-;; θIfаd*NƧɎhhDĢBIq$WR$HpR*HK,g#5{:)-UD O4KrhoQD(ة\ថ~,]%,D<~K\֮CIu\!B)AT%PJ )HƑ+p9Y0@T.! Sc GF;Ҷ㻄yKWdNury=J%EfGřѬ0SCq>0w(jf m ͱPa=nb9gqQ 5oRE g~FAoƎ[%GSdPa*!(4p[釮Pz}y@4[8mo݇1JŦO?,- m>`sl~d-ʠ1<& `] ܰ4NΑl 1;2p>qUDģH2lKԐŃPC,|t;6σ|Urw8f mg].+DZh0 bZ"pkTF_7f;4|! S]!a*V8P eidJu*gA)X70uVv{V뚲=$sϹl0b+ 4`X=dbiD1f3JZe8&c ~na8,\yɋؾy9bRNXּ'f* mͪHvڀ@, C%aJN ZA=&.[I??/[ԜE)\?{FXbW&˒*E+{r-)+ܦnF.*2wXhe'wzYU3i=A'L&ϟ.| K0G:>? |A5<lF&XK*g ahKOr 8۳1LCWT%9_ֿx }`9]kupsP gIsC~[^LsϤA#dJ@o2g@3`=,@\A'`.]~

ta;dg%a2"b$&|l<;T65vDz>{m aݹtHjcg\j鋳EZGcfRz`)dr@IRߢsbw?o!_aFZARzU#'*! g8 iq:Rv4@`8$Yp c\;o0-| cĜ/W@=-io\|ODP@žG0sc5A#x0" >1w Űp{][f@oq?=2!U9j͋b8cy) Gs3=kch ؓG+2L1XfS0ݼ|wZ˒A@''|O>'|O>'|O>';C7T3};X:v"K8RuN X`8 X jlH >J7)A\!Ҫ)IBX0DŠP> ,d\\hv] eM c<up!E#t"X hW  'bw9xF( u 6t0ZP|! ӘZAkGSB+ p ꀒ(q'O >%!3g ??e@ )3{ F} s@CN̴Ώ&<ߢQ#x y*%C.[8?js’0i0oe &;#L`ل})sVG?D 9ɛmAt ET\S,m|ElZ șl?ռ.|o|_JZ'!4)X(NLK-d @TI4-R %?w8 B8'b 3diAħ qa:uR/Dq"aO |8F|yx?ϱByE#hdQ>a NW&ROv=L^'`&`A`'t, ]y0 \DZ4K&D|%<ɦkJ#x!#%X0U+Ls3͌!ꓰ΍ 㓆q? ;*xyO2GP0`$ @@؆P22B1<0&8B*Hb#%%+sҒyrr #ޓ:|´RNM[ ;A'`06DS)Sb{o4>~9X!Fr FB WN{'i ؈:ԺtfB.1B 1%#]2gaP"yƈa~0.No\&:g׸ {~=ܙדa<5A'Lc 5dQ !P@$5i[Diz1Zd"nQ1dȏrD͒En[_4 ܦJj  w_+`TAmYABS@ =x!(4"2A2r!&Jd>_wDڈ%5 oO(A'7I!\5>\dg{x jߎ@Y \T)i?8G2izI/ >DHL{y mktK{S~ ;\<\lP־k^mfyx٨Hli0u~5p]g#lG9i}vGCY&VcәxS:êNJzL.NCC8SjM7_6:LEL"<*fX ت,:B9i5) ;0}osQo1 ¸}_gt<4~ 'w)hxՎ\fڙ-j_>X#ՋЄjeSi%f8M\O=9{nhj״k1|}sXvZni2bU$I w{pB*Yxy=XrWx|N"Xm|^p&x.c% MM'q42 o .Msn`ȿ@DX!uzR 1Phd''54#F7̩R+?'332GW b[:͗vҙN巘O1huZG>@!7t埑O_ɤdXM39<0s1Zx`#B#kcBDa<_%\1ᗁVA'Я`ނ~FeC ޑ?|C  IV_}fI S <x( b NaL%"6IXMK X BcS~$,PBĄ O R~}~ OSJfw=*VM _NazZ) 2+|!NCU.Syc⑀/!g& M&dOLP #2[A '@XmicpB Z"I].h&8B> Ep l`{2 8L! Sd PD( @@|z]l;`k`⨃A+Hyqx%|lj (&\H hR&sԥ񘥚tVj\c)*:(D4'MCx`nZ9%mEi@׬_P`p3|gFÛXМA.f6(;>p-+ЭLr? SsCjj$gMrmrc@ s+1[@}s@S?1! Sie#IK  t˵d0I8g;; 5z0Y=oeoU?|*֘ }?NР% ;^omWhMINɠ]+$ěA@*8HH""X:|تpZ?Ggl/" |HZ>$aĵW<)i fl^?F#mN Y?g^x59! SUR@$4Ml@4Äf;bqyh [G$M&aOQ_$>|e / xʙrkIz^zXTo݄|zv3u=bbߤhh6CcPT*Ho `_/i(9s>G&  Ruj\ $#N((GH  8JQb4@e3$^l &SϦ4/[8I+; %.Y/gz! S'ڣ ,-4!(o˼KkE_Ɯ3nRmP'`%@ƞzL:1 _Hw6lTO]rJer盳,a9[&5rYd29B!Bb~q3CJ`PL0)N{t=vRO;Zs k\a_Yz|ޑY A A3cZEאR+cVE؈! SE;`PRQBYO2x+ciΈYS} \M9Iq3Aŕn^SUQ广o;5WD&%-#r\I˚g*5*lYRgqJ4(2 J(0<狍%!L L[e=/ϧb4u\]$3WLPhzJo^}7*奓N+ELijV HQ ]nӝk%BdC1Aʼn}Tj8b"[+sYS?j !Xx+:Kxwkuϳٗ,Q->LӜm|gS! ShB`(& ,E$V B,jYfmR|YbQMeWzPKmj\P/k=l |=n@} yc'`_;᠆f]ev||z{\d )#@[9\$:Xx LjEqFӻ,R 0W3^P(AT)Ojk|JIcpӢqp#ci<5)}G! SmM *J va#eYR:B:G{9 2K  -HksVYZ |hx-"s>璼j/&"Y$]t2o^׮ z /ܓK,E 2ݔ 4ZI;;c`#ư/W/y޵&nXɸƶ%k XhHNE`z*Se, $BJSuЙ"{u(Z e䒚wUrZU{YiL9qzR~oj#! Se:CP T $T)j8Ne]?Sjt9+չ ڠٔy NlwyeJilH2^ v /1,@"GqZ:/i<́L\얾SZCPhZ5UTO1ٷI9VI"}H#UlEu2:e#j(d6t *EK6-h%^ N)_Bawh_R0G_-Rf,! Sul[dI+7tXZW!?n &D@2@r$ve9M^"R9I-16{:HdzIEVi`K֮{4CCV9t[S fZͫʙ`Q koqz]I YI2);<w-@oʗ-EiSOX%ӞH*9C y|ܘ$`#ʍ\X[, I b%b \__?0,>OJdYеwa)u܊ӆv_! Sa#HU // T@k'^W|3";/%+8#ozP0 n)#mT\ė',CHDG761yհb!8osyE=Bd/ܮ56aXiU1 ք]"NJ 7Q/o$ ;RR@%E;Ϋeߙ|rg X(HAR\%S@|-)ѵ$I^6 ! SK@@v̬@ hbD)5 {%M{ +PV;حI.buey|1 jNz]{MxvD]4WzX(4% [W2ڝ J{>w ?4:L(P2?RzBA9p|'ɀ 0EO4sBGÄ7\2'R&RD7zVy."I͇6𗺱%. ՇG(U8" JDUPÄt>q@ k Z>IM 94%OU482Dl=;`û!JT!4<Z*Ѳ0 Q>'o*{$õÇ15/z192hOhpoC x6OEnwue/[|TNb|*/mpZh2"t Ty^/phOLJP-NE;M<;شT^??G???????ޏ????U i ƀ0?&yz%X ʀ%X񫖾 fҽ&AXp f:&,I䎿>K0ʀ%XrJ@,j;&ul%IA,OW~PK fK!W7x' f564@,Ƽ'Z]@A'% &h;@ Z}k#>L#B; S9t ]UTW͐!w`̘W`0(R4-I6x jMe_^KEOdrot'ȼȼ)S?T`Kp(##2[2:| Gvoΰ4"p`a쬡$u~ASy~ Jٟ1>_P/|;ҙ7~;6Vz(f$oR??WnjVx}M~}w=5J2r`K }RcVM?H9FmM]Ճ }^+v<&$}4A'Q @ʀ@@K "ΨHE 60m.;!$mAM&ʃ^؋Eyn^6"OZ:+4{@fDy Ay:8p&!LY3b5bM5sOa,>XK&s?CPA@'MnФ6!5yF#%Ė]A<B,pErF4ƌiP.6k=Lf8}m͈k׃&510Ln<1EGSP~eN`X+a>rE'̭$`leLA#EgQ:4塮^A`'EFG$~?>/ 2SM2ȭC_œk!A)Qj6;݂X ب?wz@AdAyd#agV?ϠLO'bcL|ru3N*hB4A'ʿW]N|?scxVwϱy{9ֿqBJ(%X|>?ǘ)5'\̎3c/a?'i(| qp׍p/l2kRrvԼ^_L/Jm:iIkp_Za,o_M ql7™kJ9{䟻/@vBvQ#.4C\f74qDYA&@mGߏc7X|~L`H!=rsqR6id|'I*<%=mN<\h3Nn5r3_ q$qpaa~H! SUUC-^*{`P@!B!_wuaCj.PA2HK D XE9g'~"VV% /kLS@эsi>5PYÅY@*HU߮˝t)Xlu T- 2# jmP@)k\*, 4(Rr/mІ]ӽQm|+gd)yFnipUd㲾ƻV.v[f;q{łV~4cbێoS _xLGp8))?QnC<_! S-*(HA'trɅsߟm/bZל(KO|~iff8T 7B~I/s%CD!@T@2\s&yF}t)9C+T1h#KI]l16$ P.a{R=\ AلVN@ (R'–MS./I4aL `"d*Qfxn`oZ]fⶊ\R 9"+IӦ68x[VB ]j#,9uD1%മ&5k (Y¢SZL2\;RqXa9j3`@ 8TYFMy##:<"CE*MdX,z P@@thJq2K(NS.藂xK4o9(BR^aNY/q! Sq0W1(tL`G<:aeus6>2K1|C!C@Zf!|;3sg Bf>f7!I ?B6P' K{t1+Ҹ4H@ Het;h:O>>3H C >#yZo#M~ {%h_v:>0-D 0N6O3ȴ?aё8!!*SY 1E =ϐe~pSH|*}e)wşLJZ  ?a>{v{?"X> |{c>|@z;AZŁw{l|,S`CQ?`#p !wmء|@>!#?0=`{۟q ;{(sc=ba8z>0!L96hكF$LV+bv-s1H^1Px1%/0NƮ .Zƌ`Ac~ :Œ7TV53 Xǰy2"+pœĩNEӄ*j3>āLR P'f>9xFo=NƯG xqAE/&|w9ͪ6Vʰ94$6znWwocDxu5֦W6q.v: ߞ,VUj*)njPdG "pU[%7;?B$X{(37/+L<0ZM C=B!jTMb&ѽʼnj}ٮp bqוehf)cNeR\MQ3f#qS><+of#.$XLg¶vƎu}G]2ѫOdlal$ϛMIf*=vM6HT+tͭ7*Q' %67Ef 5xvдnAUt,)fZ)JibCh`x"aM҅3uS Qa")&h{pC]´RZu}C!Td, Fc|4UUWM.(%k#Exd".#ޑ+eI)^֓WÆW|tSޗUWi<6j ִC\.*"2d DԱU* =GF-^lY$]`Pm]&A5yghf)k3} _nJ-{Ĩ$3Sj(#& YZ6f٘ZC7KoL1+J|nj>!Th1!7tB*Mj,#wOjW_"Imf L)[EG C$ݞcBvtY3wj&t<ʍzS1&κ[R(Ha! OUT?XwDm9  iﵐ5~ϳ?rSŢ8LHmثq3]}cWgvptrT(t+.N q4/:kAA !TeV ,#(t"T.Հ;xQE%S6-uffz(ɔ.کv@H5V:Q-z<kvle-4ͳE6BLJF[4TJI*PƕX+9Cga ,RNTL8覿u 4͝eolZ}R%o敄ɹbLM&ʃn8[ϙj;^ՃUmOlN&G{ș+U5ژqvZ.V"@P!TUġHE!!^-[WEՒr%ZdNM$7HufyU E<+]D8"61+ω^N;\ֿ8Ijr&\D# 8릡F#ztvLQ)TȴA*}D k^FXL~'M -h4@Xra7Aq Q"Q(zF䩃YS~||-ǂ@M]B7< >PE4N$L&8&S)O2 FU6\%K/)R/CBn\! Sc̻-1IS :IJ1x !s[rɯ 'B 3!- !>8M_): >]xGJܯh# +v *Ŀ#UPmM_QYT#4`uPN +,1fxE33L.˪)R$tB(CLjT[rʓ k߾tǨm~ EPGmЈ3J/`KіZ*a8J j \FFeFd!Q! Sa X( (Qp@B, QXS):Ɋa#ȸ8VlKE`pZhj=Y*a`zg(]/_1NG~hE3X邹qDSf[:oAsT+7fUwh嗁U%bc)U!<0JcK`$6.qe9YTA6['ˀD5τ4ǿ<g]\lF&L$z+c`YIPїffFQnG].}8=y8%`=*|4~c8 k~A'}D`UH9|l1 U-b>#)Qni?0pYCqE_5ApwP0Ʀ._Lw1n6S:f xxˈ'uW?Us7Mk?GB@ z_ Va3h0 싼bo@A '` %|Y&V#0J%xpD%.9%H Պ×x#`3b9"_3a 0thhv(;/~^O 0竪No^~ _u^?aONL)fC7ES_d#0A@'ɀӺ~aGS;mTBLSG#xq okxF#G08B.O $8 9\`3dAh(Tna/C??ϭ~pA8ğG|}1|l)qؒS+q&gzeZ͈&/<A`''|O>'|O>'|O>';ҟ'hwp`ٞ_p wgj*%a@ǐ g(( Cz=* ph0lq葀? -l6jM]x%dS@ ˜ 9ΈG,8tN>." 2 P.el%Nٳm:T:ps y`h%PCN4p !7Ҏ K,=hq;ppNCyy??Q(PVI:Es %U8W怆XC?\&Dܗ`G#^A`s0]?wy٠uzaLcV0;u\iIsGҙ#~?? #?D X|,j> 4 H e*0dIٿș'xL? fܚ T 6<y4囕s\/ @`"[$GQ1}'?Gx {Pt*`0|lwK DpD(b amm62 ؜vp XA'o"l׋a2#-"%=?Mly3x%7Ā_vHR GMoTtrof6:֘Q)rf`Tb4& b0>և>DN|B:Nf/%ϡ>`o 2;J־Z`š,DE*hð/L|A'|Sl*Y B夨0DD:M=?0EH0V[=(Z\C>6~ |Gdl&4lGeV0/:7RIq&ʦ ~$OП?'/v&{|x*ɀ^S: \DMc~UA 'oPHU %ېAA`Ƞ"~Szbfn`cix׃AfĒլP Gx0 /{ͭl)Dq'No P 9(HohYFHi@3x A Ic 9C! Sm D0Pd@PۉQ?'5>rVwiVb]' s-bvݗitqAWEQCԌX;F >_`r~(`75P%OYaP&'ơlPfA \( W)DXPeT1ʕVhE2Q|39OfT; Z?w-q<-Y9AB`ƸT# T%vʑmr$]sۘj!o! S!!HSc*aTayPJ[*BAJ`<.+0ea.)_IЭE '2PC,aM"01my.)l-{uY}?Ү75CVC0*pR*8Ҧws!.Fk:2[.KTaBa9M k;Ţ$_VWn`(0B{*`,OƒUM!U2%^ža=[aT2EPO~WЅs- IRqN3fV +h|Vv. R#Ǯy! S5 WABݓ|(h["Y!I[8AeiYe tc(`Jqf| >(NcfÞ 9v%CKH!SŅ1Ej; H #MҗZ7 uPcj)XU=q֛qg[l9eԶc=Q4 <X=s5;lN%y_V4[/ŸhTZXčz%bi=G1P\v)Swin6zᄬg! SYDN@r2g[Mڭ9˵kJ` 7j/;^~]ƄF(9Bp!?+Lja5VOjN &J % 됥PvN+7E=:I!NNUc6s%[р{ɦ $1LQ YBÞBDև1snJBw$B E_Bͷ! S b +kt[+Q$~.f3ZW eq8'q~"& Wm 4a5¼/Iee? [OAPX yV.\HQW5sfdq[t{=`~[ƴk;یl3p~ZSo=nbw ŀT h, |>;*P EHRQ34f[;v4()"߄HQ#b{i ϊUR>'! S݅>*U,)8B k\/ -6j͋Zꞁ,3@'n׀~ՐHdf *Zw-,(=9BI}=]F|3pp׿4#U#1^pSb+N+2XObrxbA@&~͸ ŵL)Ay].6ԝt V ӌtv1}): Չ9%%mP)Df.@Al\_;ĀA `,NRF@bǼ%kBRDO@Md)2|{xUNvg&p! SLe:}H6O%S>}܉*ʂ_:1 ieE"Be}(Say' /JK 4{J5Lo0h3[?!ߘlHZ3^3׷ҟ)qS=6`B~?q75l7]󯻺ĀQ Dre*|p=*ZYqY.20±d<^[zZY#FF9|Z_! Su0*@ptI [\N)5y<ߧDP-uH_Ez/w#-=\xƝ0CdV,% 2h2N8O.N/39bH,L?wfe;! S : ƅ"3AB@q#.P-UXY_S1 Wgeθ}!n.}DQN+Go$? SƬǸځvbD 0$jGCa \GikaA>tOO.'OO!ohOfl.RiУ!ZM:%PBTEXPGi;(P;[i6z^l$,$V5@R)H!lђQ J^*V|! S/ZEU@B)BՀC˳VS;Oqdf@Ԧa%\ ^%H ;SYM bfVT|8^Cʺr! aӭ%I &qFEvMjE#saH{|is}fVyPGun诧VrGg}>.y Bbㅊ6Y!v1S V5QLG DzQkD*#9Pz^7BԵiI+\H Z򐅣KB4'ۚG,ޫ~tMm>Q! SMGʨrP2k W^noѶp{ާL.s[="Mx.Q+4_WЪ u'R X XXj&ng\Эyˡ&U R_Y9 tˁgtIltŁzE~ i!R.|O ;Qf X3.)sBr xİ%3&i d RZ_7Eq<~4.` cKp?=:J=.H2Tuq! S [@)JXZ@Ľ&kI9`oqϯȡ|gmPdh˝!*mI")K0WU&74aXv`W 2y~d-Ÿ*r`ay gƟpP@[SF۽AEgm=Z˱f^ W0`X_]{%-Ip*$=Hhcos_v%(cNTetׇNw]KZ=f5Ɨ &UBUBbik?E61Px~ZGz! S&AL90)(ѱ%'i6cP]" ,`zK Gߞ5V։J҂+kG{Ԫamv{ LyrA&5h(E E]m@7EZ9g{K2X{ևue ]blgk/9r>SSMcs+ŦhdVq+' 7貔,*@ +|*P/;C;*LEEJ'kQ=e{8M ! Su&HhB(ܪ0  :]uYŶqdTR* x„n*p&gkz`1{ك70&FW"w-K푇kRttYJ?EG/~ GV~OI1xSޥ,A"JG?KIwU[l,>W I%TљŎĞӸoKSɯK"oBzTUe ZD^.NSF'>fJR MȄ]őT M}! Su"hqnTVbdc.#ǡI(vFQEYXnAiQZ=R<Ω-pؾdZ0kB1K)!dٖ=q8RIeȮ\)jU^pDm +(0/[m 1{o)OʼĨ^)"܀Pۋ31,7L=E}OS,"qXMW϶#2|@Si'1T_d$=:Yӧ%d..c,3"r؛fItA@'A/-4-iCe"0,Đ0yG_޼0W+݅{F6CYL[i9v8TGGJ~)?D^pg77Lz8Tp?j}x̺3^#nu:A`'vk=HI?KI(CqfrXb<)nyuN 1͈Ө1肘;(S-`vR@T)Z _֠G1~P:qxv Pz1)̀̈3(;)3 Wg!Ie =)nrrrrrrrrrrrrrrrrrrrrrrrrrrrrr„V3^Vy&8 /+?om aĝ 2~2}ֶ<g};'8K¨p1+a?'B_;2deXV e+MpA}Ѥ/݋Թ ԍx9~TN:` |1܁>AsƙenJJDzkd48僠tٚ!r'.xL\(\NUL@$zǎɘNr`ax8F0>}'cJ )*B!_=G2D z J X` cBO~@TN5;B(:;Pigصح1:^Ru^wE\(-B4S=/%"?]F̆~C>뮺뮺뮺뮺뮺뮺뮺뮿G-K=^̸Qs-fWEل_Q|M53GuAz(897Jo?C7sPq{ꑑ nlX',^~𔰀Id|{oWZ?k~QDT?и?+/Wdo%eVٮhݷUgu]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u뮺뮺뮺뮺뮺뮺뮺ɋ뮺]u]u]u]u]u]u]u]u]u\W[뮺뮺뮺뮺뮺뮺뮺뮺뮺]u]u]u]u]u]u]u]u]u]u={/]u]u]u]u]u]u]u]uH0 !@pV/M YAyLq%m˭ؗgHƸ{!f#Ęz~0jfsM1y]u뮺뮺뮺뮺뮺뮺뮺ᄎ뮺▲Xz뮺뮺뮺뮺뮺뮺뮺뮺뮺뮞뮺뮺뮺뮺D ,n> ]bPҬ(<ș%Gq~ؿ -5s.6 JFg_}NYo'! DIFX־o]u]u]u]t@ ?bs*F%` Q+IU__PÅ`QE^դ@\/)l4@`mAҁ:/B1(pV929/Q5r燔? aHNU P H CLb ׀7wIb "A}>z7C)!X{Łف?ﯹxW '"HP"y !Ia~ 1bXARFp(^{ЀLº)1kUT/B +Y02 (06⾰)b_?7.DR'783߄l#N0~q_&G +sx ŴZx0g$\?;`JLmAܡe w+BvE0`FLJu`G:S  rʤo߈ p.`Ƽ$z2VgjC ?Fѷ9r=S``>X!bR+#CH<$G^`:)PX kV;pm uBb.Pc_8- @C!6 $n ||!kSY.4=&Qb 38p <8H3؃ҥ0Kn X#BLq$f#K =OO0JjLBVYJ>Vml'ayKwؒHx#Jo^4>VW%v4 n&`O`%{098:"k9dI K@a륟X!je?k1h#l"fA]<~|LͿ0{}pz*S%]xr/g_]!~r_mHf?XeB:nX7r/#≠lw)Un ec67/֐ d ;f$k@ ^[0o9aYZ)E;%JxSD?O\YOJ8Ӵ=|Rv,P%C)_ichfn{@\ƜeNh!PP/ :#)Ÿ#K4 w[_{a$eIϸ=Ƞ`H"?z{* n.B_S4i1[.JHDhAb_O_h<†KQ=+06'HŬ c<=i遰كIxz]u]uYqyY뮺뮲o-j<y^^z*D//}u]u]u]w}}}]u]u]t^뮺뮺뮺뮺뮺뮺뮺뮺뮸` ̘FQ|1N|Nº~ y 2I@ &ax$gq<Hau1orf X˜6MW 0(2'0+,|gf,0 N{ f)L L;i?y Ϩ$h|в`kYJ`׿=QU-NW8yY@m1?^o8aG}A@T\ޣ`04ܷ~D1a]cFZN,8Nn؅N<.- ;QxRӏ4@ pҘ<@@=71V0rZ[vz'%\7-!, Y(8&L_ +183_shQd,S;{ f, 4QH>_c[SL&Y+c<"`0`0u$j/–`2įȃg%1([;`8Z̄F9`i%,(D׋T !zaG˜C*7L a&\7yT鏺3n<' {H}r@ӕޓ#LG0=^l=E*8P2PXb/QiJ?L0úpBF |0؃'xt;>`L)Q'wLc4!HA`}+҇E hn&_ P"M$W-*b"M?_ߵ ;)mt!F1CЂK3}fHe0 [c-i 4;a# PQH^ڮ F:{<0l \9qS@|] oaf(%TZC V7jV% 0wD0 o`L 8F+;;'oȭB 2o 5A Slwy-.[͚bDZSHZrL $懎9.T#Z4zim g }! -CX3 Qgi`,~dҿF$7n(!t@߻4Pe%% ddW,?3)xP{CXŹ};d l\|*_( h#f *D>y@N ӗ߄#^^UJ3 1zoR_(~,[dAess L ͐cqz-T H*d>VY,oT(;@mK^޲1 A# 7[=V0EhZ*ɘ@@ws NqTϰ8{g{ I ЧLށ_Gqz;Nǿb& ڔ7-Or:+@SA>83PInQ(.w! i UFYC}&v/ d  BwH0%T\Pz uҍno N #Q\w xL`W@[9π~<`$H40Z,bmT`f6@!Y)+u64F^{h+Ǐ-V o4xz 6+^ɐqǸD0*w,똕3X@'Zn2'OS^};WuX$vn'У`JGkB<]L \ )/|,$zG'A-&ɫRQ ޾C6T,Nj^td"چa^OF^e ӧq,!9iZZYSy"="y"$\\:oπ؄[ Y {p3ʢzM .8SI CEz~|20{LƺFӉyY<{]ǁF@o拓ݘ}`0iO\d?S*`k1W&@y3Ip'C2dD$ɒC&a)# B8hGG%Hp]>?H3@st(<`7愀`nd`{(ūܐ@TAw!G"#;)8Ƀpʹ!Qb /@ "@pF_QmCzWL9/%z˄`pT[tI5f@|2߇%8v|%Ԋ-d_@P逃 YzB+ jB @  0=^ ﬦQ/=a}.}UӿOV3#HPi 0&s݅(Y♮wOk21@.t? 5xU_,N`Q~m7{)NE _Bg%%oTBl .nd j`D8 ?պcшlUȁqW Z[}wm$i&7y&M4a'L0FyA^E XbbcQkpUd$Ze Ka;᠂o ²X ;#@P)0 &@]!&q}H@>E a۵ZPqi *‘>QyGOr@4(rN [(*a=\Q]Tӆl[bwu]wٿ AF Fg}4z?N@P'Eůn%sYR4 7 *?qAUjZ(S;o1gT4cUEUqJJ]Xb#9Bݡú; xEiAlT<@wV(ߣ%.abC"G-,/Ym]u]u̕p a뮿)4c;_dc lB_{ن:ZhSHXF{T{*+f?~ށ.ⱽYcZW(Lɡԧ!@XE ڮF}=Ke5f+g}_0PT BJU=xCԬʃV#W2OÚr.k~] !AH%uG18ڶ%]=u]u]u]u]u]u]u]u]u]uO]u]u]u]u]u]u]u]u]u]u=lv?*A ')? X,*T  `C EKK#{"0F8j~]NA?+͠8S`^M37v0Z^ud>? 4φVdP ] 0lH_((TF/ay1|lA@'i1e@ \Qa`Y] K ):~&?)}'X ^{Q@4xNLNnARrx69Y^L^O|lt{(/%L 6A`'$3 J_hK΀(@'O$(D^O// 9Cg'f ,B @>-1SihB!Jv@ >"DZ^$o/BPd܈rLoCp z`l=ua zhmahsRd'?f$ 6!άj #_>`x;4ZxH]' Η 8JUP6Lh)ɉ4)|8Kn&$R%0KiO]>8|`P+z.%t"/ޘ8Q%Jm 9?khN>)4;% UUSW~Y" Wc s2ݰ#U>L(|=n>z'H(bBpheTLО-C &o?????޹)mm@m xJ3BÀp7E5 L*S 7hL ˔_^< 0s S D)K0KrS((CA f:MKc{ljK0򤏺x%@!^H` cQ%`,T%Z~@,kh>jT,Xޭ=tL~/~nf\Xd8M (Bڀ_@gKfEH2bCkɧBYS Qߊ}y`L_G OwJ?C\1K@t/`8_pK4_7w!t>gϟ] {n{>kV( Oԟ~K~}wz$=;mo:y& [Bw"~}wBM?0u?` ߟ] C>*A'St i*+qxX[jaAظd#3==f[z'{?rְH ۋ:Ԍ)6C|Ge콒6"<MT#1|cNA!OToHo%.9d&| rK M<<'|?$Zx_A')é#22`:AzZ LjOkuHHH4#chES$A.(sʚ~M͒Ry/ .g~3c0\zQpGCь,߄i1\Wg63C\mxOn^7nnMj撜w'vLA'<)h$M M53"O\x@A,a?͏V ̚d"{ ؁0R~P3):Ʈ g*: Ot(]q[ϳAC>u3088МI7<>xO 5 xA'7w7?3Ǹ/FlJHvq\&_4~4fFǛڇ D(b?"X0?CGx?Nw_} %3°L|w ٧ ZHr$$aNdn.uW_lv}{$) g1z&TpW`uX2*>:UnV-VV(^IjUTQ:Tl@tH}¨GؒY%LRw$gGq., c* PԙsOunLc)䀡(:~-{cԍURVKYD*-&3 "@@@ gV l|]gs]t,J;( ܭ[A̶Fh3ܐ%w&XgfQRV@a[JrQi\U! Cci)b* eȃM?IsG6 ɦIimi&tp'jfFjjEĥR2~)~iySYz]nm`^%ōFݪy p,{`C5a蕥 ۩, M֒cD;< #-mtTt;lv*?l.Xv0mCE(d>&rp)%Pa!j4eQD !CYj Q`t=VǯC1 =D'3+nW&dIjs7zHMLaHS7= $\+AQy3P=#i7j$A$-`q,'\MB~j|VlK.Evbty*up^/Zqw";}x+;#߳^ fX$s 0`')GjJ[fv|RWS3}C!*E}B>!L9ʣWBBeQ!R8Po>4 ?/wx Ϯ7#v߁XS|3:N@ϴ-hC{V͉g6lqKzBmvTX7ԽBIȵ[5Ѥk 1v"ʴTBy}HAgLi8'LrqL hI΢xKc+HCBRvpB-20S@7 S GS??gh2X s,9˶Z$ziJ!LGqfAWg$ō`` RRҀ8 D$evL$zΟſ;Q.e툆*x%5ɪoŧ~|y? ^k2 ݧD1oIŚ@)sp!ePΨR#vaMk4àh˲hbS 9$Ҭ6aGa/T |+w=(0 (-儹Ɵ`xe]c.ѳ^] /0 /C=C)p!jTņ2‚FFUUf_xk&w\"]t 5,W!Oɩe&.0JPIꦒ(|tKXkSZ;ږ3MY+KK&itg: pZ3KeCVyB=etHTTb)%=Gy Rxh]l0c620`\ﺶ8yh\$I#brbwE 9];A`t !T h& aҫ TY3@ukTYĢB#n4P3k K4sͤmR15%ş{_ѭ UT `fc|e9,Eр f׃0Ӕ4Q|*W1%7zT6iixlV6 m՛(*iTºu`5}VOi^l=$Ɂs~t`{LiF5%gKc2bgw}/[U/6F!THP,D :ftM?d]="9Ls#F/KٷoI?nLRnv^>ͺ =(5zZD TV) ͈m2HoKsC*FɻDİɇ712]*JX.L}Aqg&tw#lnPO%TYzJ5JMO.M$>Y1rr=I>R[g0nJa@xHRX¢aj+#2c56 5*gZ)精LĐ+"N-!T: 1#UʢvJ-*>9`f.TELhѭu|41H?z7pcHuL4Hv๊ER90 *:3uKfCD5s6Qۺ* Mʒ T7uk:]kZ]w}> "̱!V__1OjrrLiэv _6!<#b[W[RzQ_VȕV9RjdfX]hP?!T] bbR  DDJ%Z+ҏe.CewTU w.$8iFv]T1K16h7XdILDۺ!r[PNb6 24CH4Iu"I%.)]F*p,2Y +EMsnh`5t'UJ3$QSAdP ipx/C q\)Ȟu]dT:! S-VQER\oKf5TJGf&fNsSMY+Vi^אc$"\B1&Zg\ ABn"BET%W $O+QH"c!TV II݀SGkV&9}۝ZPe)fk:o(%-mxgɞqmЂN--9|3h"[a/cIq#'uq(KB0@%"hl:r]'l0S^햡]dNv! S`a mU\f4+ct#ʨl='tV G֍8P߼sP -OS#ƓW?\}t}I,4Y.d\MEh0nHff+qդqLHMDsv%jPX j!4QPJ0V4sĎuŲ[j0$:,T1NlB/[@@p €KV?N1' JH`\":B :2PQAI!']uKQ! SF3@@-eLهi+ԉ]ۏ:&?%V;TWyɑ#G8;eUCs}Kw?h?qdE"%36XGYJCȆv6XmFppYqi&޺؉M ZQhMjTb #Zi T4H : ^#dSX@PRP LóeSlҗއ)55aZޡ&9Jkm@ QXL6RPZ䨅A@'t'BLm~ T y -H'4GF&Guy7,_,4d@J~TͳT6hĿs8fC bH'+ IH عmn&>2C?sGbBy;y` 2?fxK|u1&1x^"rnxe+Q] ɹx|@&oA`'L`e5"2"ce)pY{PJ\jGԴBif=B$"Rx 6%zd&do+Iq̼@~Q~iDHE9"$jրA'x'?%<+=O 3oIbB}*$0ĬK3`3q5T!:|G9)V/'0vU 9>7  rD%FrW. |1,Lj`3n(._En63[DXQn߈@xgLc%8&L;f }X@#ȮL e>Ɍ M>jրA'tJ1.ϑX;ɪIBziy~.IB--[4l\(S͔q_̈́'`{]pMЈq3XS'>^qp;cd 577oH}d*|S$3R 3<'|A'ɀN=q,m h?>#xs.0 j<';k p\2^>.Smgb8 /,j7L.[*|˛ pg̓A!zd8%iRe3S%3};Ug?#A3Lڠhu! w3LE2S1E@3tkhW&L O~ b=_-Y 3a?3(}hZsrr]9X>F xX2R#Nnn|vCPx2Hb1ΈG7\qmqө=3]~:͜Vzf?r_$Eg H-_/2D AЀ@ v$N,^&M&J'bxW' =⡤4/̪G*>YY\KlJe }ZQZTjO54j O!#_WO(&~>m2hS"x^HƑw #F l_om9%Hp͇qXbwv֪ XLlBca_!8a@fܼLiK銑Q\q gTgQF/} Vc"s<QǟfkLD|+cAI=V#2yL*?(`3 2tdG/ (Ju񱆉"mϠIT@::YpZte:l>@A>t ^n:CM 0t#Il'|O>'|O>'^w` C&cc 34KpN ;2K81o4!E)'+ < @wP;ÒFῠ`HœICH0D`a@چOy׬c?GHhTP3x`H=;Й`+zaQÖniIPP 0O;@8q`Sw_Cp+~w|}`@>xC0G>~x*aŦ4 x~ $t hЗ?? Bi(Sp* 9DQdn$ZN O74>mG#Uy%FY*xqr;'4x Za<<d#s%;+f#L~??'C_>ߟ&ny_6)I 0ص768[ap{73eL-X(LpRM<7_L$)|.4?%z?뾫ˮ^8g;O|^ypXc @{a\.&t U\$v440ȎhW//L G|U @G$~s#Gg۴7 N$L h:p/֘OYnF"A '&B@pf %Z@CȈ,ɇ%>&Ii'@CɆ<rUGr<¢3r x(&'!Fz_f ?pmFRB&& -0q)g@`WA'oֱ'9Z'r#?pJ0! (g':@ wghXxްnpngh6Z ʐ0D1$]C@Ƞ&)Xer`WhEț#g\(/@S9Omǒ w@Q^蠣ǯ3] 8IӕR-YW2e<lE ͽr %v !el(>3cT}5.PUAju?y|+I޼*+ErF X/(Q0Hƶ6xBG5\ނ! S`ǖˆ*ր#/bvHX,a!VE3WݨFbGh$UhNDE_~{ciKT-*⌸S_9 uk^={H6E Lf+[wb8&nC H[C ɾ3<zRٮ7|:-2_M6epC #ABJ lH%}]]o̚ܡ )vX"3]Mx+2,5nyةKcY8ܦxEZF뭷ր! SuGP(s.*dkp X5c58ɭLBV##`>KZ)D^3/N K/734م;`wy0?&d{<ًv݇V/Qbrûn0 9;%6wRV,m]ᅣhuBXߢTͲ]KIDP *%q0Whk*hK&nuM! Sm cP$$B7LȡAE-(yT9favG)ȗtτPl.eY3ƄҠRrk##MdBn06ֈ50q}|B MP+el1MTBȻ1-`%/⢪ d6s݊ DUZj]4'C pC)`lپq;: Hd <;>t]EiBjRp/4=*yk ?/țj& a8x6~}k^izj\hUzF ?J_! Si0FCP g34<:.e,ꁣtCAl.d+4*XE.V*˼EY~ U g2Ŝ߾S||s7B|з?`7 TTݰTE@`4dY߃0?`hvVodh~@,/rg>nl> 3Yt86xYX怚ɝ!'sf0! SLd%Hf0R>7p -w#ivybp{u&Ci0N #Q|x w_3K~HѮBǞ>q~SVLݶUoz`8` G m?XJ?)~Q_`K~z [*bp(}WFgeVu?O}zŧ6CƪC瘟(-إ/3qZ Ke\rd/08 ah*NW9E{\њzj/cf"P! S}"$FS 0@0ql6YY6 wb恆q1 1=<# "Kqjyd.d׹|Zj#2om.dt4v Uee8l2`0$ы G$_Iw: X7 ]M~d у+%$~/!KX65Y]PdPlXA SZ,i4_߰^YҐkbVWhV忭:PŽ=/tQ L%YƪzKW&9ګ cd *C:p5M:b8! SNL0 * "IK ,}+'uKRZzgEM 2D%Z$T4XJABJP&k 4S[TJ]Dž0K :U\Eg~o.]rŎCi.K{UE'OX3WDkb e;n'% JW7+ &j [(Z@Cg>LwÉ9 ] >ln9 Ȁ@mDעJ 3&t&: @)R;p"~! S>v U@WIVb[F Pgт' RV`ZVJ4y?a$ ' ӪH/} ifB`'`ZQkbĴ( L.! S "@pV*] \f)d s=ZD.G' [,  yE[@xKZQ_ޭ9mkA֕O>|?'z=;AsVJP& @`@D 5KL>.`*!JȠRX1yg5# !KR#*PUV46! S}>JX S>3W8ué kC`74 ʍ^COUbK}IN~ ?4^A |y h6SE2ffV_ -ĸӻΥH }P./ וhEHW.9r)԰W+Ӧwy?ɿ +=} #g%ֺt>.wt ~\ow?uʁJ-HBbu~ HRǶQRvNk42#:%ڝ! SJLB P.LҶ(!,fEw1B pəxȁ Պ2na6rm<8$c*Sx*;7*_ *X7$vd'l/7fvp;<[.]ݾ)p3v$Bt{vP7*"s hNvP#(M?P +LIҴ\uRI`6=]YsIGu(ڏc %d* A+Ԅm.{! S>J* u(-J&?W4@|S{dj d;j|+8'g,WbaitoL@ 0CJֽOG m WsVvCCРυl>--s4. c7d׿ ?`ೇ4ڽEPF$Y8f|)HIF;%m,YV++*f;J}} m2#E- qEiNZ~B9ZN`! Sȟ)bP]\.q]0[~z=V|FvHmPv)v`h4X_Xw=ֺ-"pWd04 . JόӖqkNs'@&!ShϼAu^I(Kُ)=?5o`Io,cƈ *V#gB-ócU$fFu{jf2[JA 2[}eH4ֵXu3 fۺY}mY! SM+ ) J Rdt80Be "%a/1!H2ZL5% عN~8W?IcA\^2dd z4洽3~+Լ]1z54{܃Xt>m1nOuJﲻÁTa@3j9FydyP"F>g)PPG?hLIWTr]&qSbU{Rk6}oxkFY3z! S}\ܮʂJ$/]?"1/: sw~[c2ź/eCi]Αkeٲ 1XJ8ʭ[MZnبn3l|mʃ3*%/~>4|u^Ri-]s&"wQ J]Ɩڱ]Wx  ND$+ arb(`X)4Z J](c! S$ ªbYBU-XIwNیPBLq?!2a׃vcx?IY^ׁ5s0PWGLF<3X~{X?ƥ^|AYu[K:;: Jb[H ZKb Ωn: H˻p XLk )גߧ˔[("gi~]" G],V iW-IN.D! SSCSjVewC}ahYM`* kYs*+ǫwif'o V#ZI `L=/v/9O0}Jוn$fi=XYД̀#tiBBۻ (ݲǠvkn5W*iIW>]5J3P'FHh%sF-^N|l ݱg8V"!A'g0eM00 -,6MODFbQSCl+yɜ)%^ 9!h Dc GLNWL #+ A'@Xh!րZ"!aOoal,$;!^={,D: ff/ėu1H@GB~hG'Kr@"I Ɗ_.(a/Eg@xA'oEi7- - NYq9`J#$b=WlAߌ&O 6Va O@ `2fK9bi1,erMA 'Q$&0ZT"*L<0 `(?r7x ہՠ-Cofy9r[@f~^ny̤} 訞~ 9B_ARm_*8ǹhQ1^H%..#m@f)ƟJA@'6bo18촶BBkGG ;!{_4֝-- 3d0 ?3@^Ē"bE|4xLGhz?&˘X|i~m oÇPFû1|~>7{Vp0M6LJ lI4=y*)z2ZJ FMp?Os~m+)H'#_B?(櫀ݛ!Gh~P3d@9Ls3\ЦKjTc)&M >ęf xa- thπ=s@!6Q8"0#o qIUB"L(_M|hOg -Ep(UU?6 ~i|7GҰ2?R1W z6FdTUhcڀq[pAddxL? (jdDy=^+NAZLgSafո(<<=,P@(JU$W |; 'a?Y%^+̈́ð_?????ޏ????; ( `1ox"9,ƿN ٪zR%oy fz1k^L0^_kZ$Cc1 K0P*S`!)O=@,kWwy&AGG?Y%~PK/Fw3,àחώb fbKrjS -A'c(\FE0qɄ}^$Z@\fو\'ߛT\_w'yOxb̚Z(h,EP=-!3cpjgXQv'bG莢~=wy'w}qSL`!sZ >~ £cccc666?S~ xґ_P6"Gnp-3%Ά`G ԩƴ/oc/@ ?u` 3}vP0nV$v7Z||F`kS$}־6?@EoR7v!9Btߟ$Tjm73ɀ1JK&3==YSɀL#A'~EP( r  8y"(0|h\WfWSEEb[[OqSNݏ;l-rVuyeQxz-||y?!p?(D(ncu*+Pwm_vpj: 8x9{8 3E|;O>c0 ҟ+\CHo<$o=דy/f͎nn'&9X;3u  QX .eiKrPfgU I>^z|5@'>|qdV$p PZhdWaӪJXӥjd`(`qs! r' Vk`hoߐ@b\G /[*% x^'i&hI4`.;͏;\Ktރ-E%, 0A'UciYhR!A 3kbeP!$|q.#˜o.~/ @Hf@`-|lfS41qOwMwp"w}bpIw{ei{T7>z:Aʏ%90 m3J\y;]ܞFrkH|A')i˜OOM9ẉU `nua#9 M0?(9xz ،<)oȁLNU›=!&ƮEv1%4/'W~>?|FhPW Z'lF3z~ 90S;wzx`nid\6CA '4_LD4XfQ:>: _9 5[G|Gk-ro\mk  FTnX)*-~'pE|?ψ#3dW?U^#Ny ~ B/h_@3`3.p`l׊Sw/ou.%[! S*_%loڂCm(v^%rcB,"CZ^͐ iT(K  }F ` e.PHC&19 XR&2 boĽa KP<S*Sz@>}y/Rb0 ; I䞀}v(jr|H]~]VWTh.y $He%pE= w*4[|pcެq/DI\ )Y+RhBЀ0X5q!pѶ".!Z865s׫`]LFI' j!C 8x`P3M!3lr7T+5 e4;6Q-@9#9ڑJ/4{N^5)]"p%A='_?PY#&NK4^"E! S]+rU(E,9 l0@MK߶ph:=&p`pgI"Lj/ 5Ts(%Pau.m#n * c:y.^~Ɇc֘W7Q22}669jcɀ4çc$9N(ɇm&=Ja&f2 7ոd󂩋edh@\fD;p#)罱[:2w)fPoE\bE8[flde#88wC! S-]2…kdDW5A7 z_;ef_0 3hEwԃpOb-k'9MX+1rYF#F&PvާwX5<+'hp= #pM42t)N>‚I n Kq*?%` ) 6k 嗼?*7-m,Bh-תƗK2C}T1]$2E #)T]yX$(IS3egzr"YuI~O4! S=DbĆeSxEH',gV*ٶ#{Hmz4Rc D *6$'iGuaijfWvS|7iFi]z@>A 4Bռ~7ͅ>@;9cT&9(`,O|h].j<.?ש Ѫx*B$R(ں*-uT8ksiNYY&pDOn#M?! S%)RP%V5?wXj6(2.>KȡpMA#blrHCŒNcNV zN-<6\'BR180MO."@zhE X1]z M&*{CcqxtVH=܀2ЀP` xo;l!3mnhh;+q`bT+=[I H].$U2B0e Ftaگ$)ZZTͶ.]kDEr! SL%+%L 9`:M$\tǚ׺[ C °'&찮O6521^^s_u"ǯL}s[q"K.6szK62dsyҼuѲ; N}wJdKd&[3sx02zP գg<@! Srd'wCD̪cCrzH1mQ=a5bW^T92;41|ҙ &a~i24s saEZ܄@xN~m=Hcp䒇 `b`%衃,W6 8bb;UOCe񹣘'2C4Vc~vc(Κ&Wj>ӣ^!F+$UڶZv&A!*SaȖ!'Wda ^a @}Ɠvohm]rr;=7&.>/mԍqOت,S,E<>Ϗo2-H鶨H( (B EXL`c}IՈxg=W,`\0/>_  1F_00+W3 ~V0=AFhzb4{Ι:Io1Mw!L6R "28mjNX\ c&!cd{xp -YO5 o>К6\6+2ƌ;366 j@5n=˨q;N"p*cFQ|8Y_^ q>`-{e9lFJI_¹'Uh0\8q Sh$|8KJ b c&^3 GW@U`a+PliW!`=c,8d 1!LHب@ުM5G4 whU%TpΔ3`BXK(@/@y6 }@wuYRbq܋Zʽ ̢T=s 91HM A==yZ'].~K_mBgҌl/jPR.ZlVXh SVļܶn]Sr̔Xz%A/ޕx b(3v-WUnJހ\3;o 5_k' 0eyуԑ48uA͏ڨ_c$k z gջY{6_n/&i}$\]t-5 ZԬjZ;iGx9XZhįl5NR,Y+U| AfP8!T: Т#B+eMR[,nr7OOc{֓oSV|郬!grʨ&Y G34SҵscLIOQ8oj9$Qw( A(߂u|UŤK%Z9$@;⠖\H4-tT^`R2AP‚+M*D&ejItV,gEF6]*ZG{OTd/J WYA SZ(QGɳRķ>!TmNCa!D`cPTHDK?:͙s\ jAC3#)%J[)l( HYO#(jtYFE[^*5-9sJD%A3y/FNԍ]p@)ŜQD8)UVJ{; 6Nļ~Q^ڠdB,bF\nueK/Vҍ+:]ysRǿdV"fΊ &Rذ*L7&aԔ YZ2 y!TeĤXHQntZTiZ>--ƽ䰜bT4]o/KxʹO0S& l2DTL ´ y\hнsVl;{W%Po*Vu>Ȱ B3PVlbHmY:Wt,Ae?*a3|pmL("Nu \WLglMryڸċ a)J}ހ>!T5b@XH& nH% bJCD>wXbeoZZy$\̜mRX-AVCw~;ܫO4Tw,7ᆎSUr%1CFrړyqdn?fBhSQ|c:Rx0Eb ^giܭ<øTp7k9/Gg^K Hi (7䴾h?Q# +z2Y357U}ވ?/K؂a_xJ"#][)[HpK!SՄƝd LC Ch#EI4 N՜%qUֵ7.NtF~2QUhGf‰jH>yZ[QAvXzHt2lɞ3L %U" S_g)/6A|%gI!`HhM2uVD8>v (P* F[Y2 ;BXCNJdlv7B] =pNQ]ܨpS},]T|Wq+І &eLg5t#/^=K0w! S͑b(AmRKUU,Th_e{+doBOmS3Wk `ߝxvר_uil/M_L/wakn9s\)+q}_w]V_fӵI[G*=m4CA]{SO'&KK1#⻓qMZx筪Ot}@?J, 0LdڳW|n5>:lЬj#؉AJƢewf]a+]a 4DA@'ʿC6?<ɕJKDP_ WIvQدA'ɀɧ:~aGKF4 qqqqqqqqqqq8p/v NN$?/~;_{`\䆮j2y=aFT|Uǝ<=09^;^SpgTf0o(7T'|`Gv,%b@*;CzGz]CX>B ji`8c_E,] Fq |x¡䅃|tpwr!Bؠ[쯌84U<~*RI]xVRdǽmt|8)̤2T#@X6G 674b!0*\YM4gar'>;e V hbCdBXE=֛aX vѭlk-}5AZG#x$rr {߀Q<!q}G#x0D}C#ww8UW۠X6fw\CT2-@fDQC'~y~<*q#7'|O>'|O>'9=`AɍxYq}Xv v`؋E/^AXeꟺZ` p إ8:xhGc81 p Pc!xzt_tPPUy @P v]04,gvxTp`_7RŸL˸p`QDJ*& 809@P!@e8@=C!iZLp/ˢ|8LP1@K@]n-@4xof/ ֛ڠz??\掂` xP!AX + \V̧8i)H4>=1cx",N;$-i›\Ƴ14KI)LLWEsћ'`r9.??'->nyz">4ihdIp(DXOd5o uv.c *I _ea)S>naIaYo $#Lc̭>?<Cj 3b9+nL( ͤwwo͈$$TML t2 @5N rgwwww}' B? B2B' H1&A:\D@IoC\A@'/(`. ⍀d@ GC#<pL< 6ZZ~"d$ M8CmffM̴|#pN~S֟ OÐGJam$̇QEWw*1͍Z POy6;|!G{?GB2ǙO|6 9a| "WƊ,W[: uf4eGj`6 A`'`0`CT>SE5Mt A <@R-ش DxxA9jn] x0:r [Eq!_nb+] ЏŻyAG .2=s ^ ;U=8A'LaC` Y>1H:Z"$G4?~%oL`&|GQn ،+^gV5ld]"<2Bc7c`{k<4?DfVR1\6~09t?YFy0_p7UffD tZL)|A't'PO3|%K9#Ճ7"*F'`WzJ&8 =A3I.\G 4'3אyL)wxٝ<)%7d6"c1y!x;/-wrsV^n5_v^M5t>K #ɡ4"E%㢃05Y7;o5YXvxX\n#I09I0گڏ{M4f@ m0&p)-n6]uf!ڦg\ 8y D#x)yȾCd? |qfTl r g{9qmMON޷Mtɸp4HC ?]fbL{SHnGk["7d IE2Ts]sqͳCFp嬃 Fnjs'p7/u,lNB6coܬPKٔ0<\˙Oto\^7JlO:_$~"ta-! ScU)[)J'KiH}~YÀמauBJgW 7BNuE9`'1sTւ8SLi-)QOe΍W(\Cn{⭩>k@Qt Pju!s&w[جʫR*ݙ/gi.®;+'QŽxBPf\?4P.-dR>#2 $?Hp Ui@ZCI ?`^ RJ*TD! SEЬY!*Rt)<"x10#{0t %+*n*zNOT~2i-,|އQ&7CYN8֓DY5h=ט]TK#6P#BHcYh2ɺf.%c b%iu:s[r$6g# ӜE^$4]G/+zJ%s2tW(0B -0Y$%kLW%6Jʻp,Py$Z$= SyY! S`*+*0TBbJv/Sˇ v(wy$s%F@wfj̎@q2jh+whqmң-,ŷaT_bOu,.&kd5Bb Kз#ZJfO3 V&!9s /E)ϼJ ^S|Z_55s=7<]*CL[05\Eo)P)DVo?k|J?0m(eR]&mgMI/HU8*R^+Rz$t! S}HL €(JRVJu=AW-)ABwB{XȠ? gdlwh #a`C=a`3r4,B i_um?C3^ %cKJ\aHNJ";WDYn>+CϿ6h>AX`ѝE2 E`w@X#UBu ZJ\tlT%,]4#^L2_d9Kvf{! SaK9je:boIIcwP^uJZN)fvx#譧P'em b0\/QWtQOyf+>r׺RYٮq LḀUȑK0܂h(ԟ,%)oUP$/ (@*3~+0)ESXG=uD'f+h8b5Ce Pt?sڸƎgQyp֯ jן;! S=O@P{v(d Hp0.KYaS|;Nc"7ů 7ѯCVa!15 3NH>)VKV2\Oz);K=nXdWY! ]wlr7Њϰ -w5K'ҠNN@:pW\>m~7LwJ` .60JS7DFЎrN}7^~4gR*pӸg(aA Hg TH>Zb+n! SY|"B*X go̸|P2V3$N0?sdg@xb̧a B_ 3ӎ FO0x^urHHK- lg] ̙Uql@*/,ä'!B) 2efC5u0{8?O!ϡ´ ^lļpq2||xt8-Dg+}{19! ScI€@{@īJw{9oWXd{MG DV]?)[>|%&4KA@Mcw*em2y:o'B5`# i0M@&d @>Q4|;wFWQ\oᦠqI2 !>H*>>c:juގF{Ygɮ]R8Qԓ(G 0o-~)<'㇙z v! SU'"FCr,lB(:j^rY`,)A>^|ݸ0j|GNJ_T;( _1b&O}.(;'#J]ڥ_3eJ 0G#!KeU^G1{*Ye9u[ NIV7g:[Ŵ aYwm"Ͳ)-5qgo80p1bM20;r?؍jhˠQK(Y9t숏 +#U,T0̻C[v*w#GJ{еKSZdN! S}]JbF  'URD ϭA,]5A!eiū2ԁ3U:11&:ew i), e}Ƴ y\ŀ!XtYET.'ᕹv.H3v%{G06m^O{>sv) 82ݳxP )[x2lX!)z!T n/UHX*ƳL 4cNz]1dDuzgD$)BI< Xt:Ɗz VS)ƼtI?X! S8BEUK [*QKO{߲㇔ǿ plB[BDCav^'J%ljL$ϊdOO>[B(kJϕнԞQ`Rh45%]V2ԯkUK@h6̞ |'|(@6|û 7P;`@[$Z$"MKմEUvMuuөWHeƔŋ$B/S\rŬ46W SQojYĵ:I'Pk&TO5V! Sm>6 JvX{&{,*fV0MLhFv8bôu6".M0&%<0zѩ\ NJ+>RlT7,љ|-E/Uؙ+/ϣst(Pu\ 4aߓ)5&m훧YeE `٨>ˢ %<q; m'}eU{?PoV,/ ~qJ6ZX0I@]jtqHTcVΖڷKv 0Oy VOws-}%]Tc̺ppoO0JBH.HӚSe4c*+RMLvagkq˗k8! Sulb 5u3F1t+qCuw;wٙ ]7}ύ͜@g\'SỎ&9nƙѵ~҄J]]|)ŷ,!k{)3>k]j{PH^ұ_q.XXfi ԳwsAc d䭦ZHZRkc/DW(@@l=)Dg)vbXoj?1Nwcjo! Sa(R(`((]&WǷŞ8DY"󩷖Mx;8/qJPY:s]󪊖%ۡ*B,\p9I"4kz>Fɷ!O{;On맹+` 3ێ[H, P`3p#`#894&M H_}[ISZ(Kާ8s!;c)X5(UeiR6! SVa$X( 2C[kP[ÕC$F4,]!?ˉzB& KPajY09AE8C=c|(=ASڧ og E,_~f}٭'41x$Ț @!p-#@U,DQ хqݪX|$Ι.U%q2BgL!NYϵ! SeZ`(*M)p#dnkp16dN(uq{hsLJP,H.%9"s9Rkq(<Ȯo)pMk=ˋn*$,ѿO ٱ-̩ QV`lZ2GAQ}x6K$CnUZ")+pLh lAUd('$vA`B7ȝ܁b0)A ~snZH-D2u6^5 :RIRPR\<]R}! S""TB v]! [+aYNe9)DN*YA@%I<qJSds7, ŵbϑYJ e݊AMKA,Kfj,j5W~0@֮U?Ix ]mV]n~r`/zYO׫o-*׀lb8jr( ,P;%2Ăi6t/?ƊAUu3dP=Y-BlATm^2@Ze${]MPG}!3! S !)X`( D$@34ԁpG3Nꨝc ?eлO= Yd(wD R2\n] F7c,rҦKl1]A-Ʋ7@D睂m$,=0o!::Y~+@PeM`rhRۅ,!4'>|/i< &q@Sb Y[҉9K3\TN%K!b &*X9B^6EEӜ!BS7sc -.qk(7P|! SQSmapTpjo&lZQf&|6Zsc w=OL#p1eud|l)f:$G1B6ZepEaf*??f <۟7r^pĂWƅ-w[ǣ[0bP9dqTQ`,% INKVl4*dž{?e1DLfيb I [czT')ZJ?6<9Ε.ؕ(#mw\ÏLWZX:&A'oAO?ʳF(!hCzJuDĶP!m1gǐw9y #F#W'e&/Ulb(|nZ+^HvIǵLG LaGh@A'@$ j tZ"!?̣  YeX <xZ6B8 a0IzXǐW 0<a߈%?g ߇ B:gp2&~~zjgͱQ`׀mzx.{a;|;L F (ռO[M #E.u xA''.,")-# {(0/o5?7w//=?| A" fX| Za ` L,c W kES0Px`q:sbc6ohbCF bM@al9p,-/FK[O`٢@>ha6/YJrU+DB/(71t=]y'q4pWظ> K\EWЦ-2'R&`PDNL?m@63o't?dɂ8xKFU'd" ]Py ?Yd9SО߇ ha=KU`xp 25͐R%axLTѲ0Q8F*49U7S&/p\"w#%_^Cr o>%Us.LAx@hL%]+`<;k5G???<??w??????????޹ @m0D>x|&X?.V+M & KDrlld3鏩H?wNhOƩڦ2ԫ7X |_+ O%bN `SUp.I6a׳=`0#JsX9{([fe+uRoka@ ZHu\=ᆲscVsJFh:"I>!toI9` uA׺cɀ[~cٰSkoMo2.M3|^A'P-ڀ`80G[")I\<@3 gϙ Ĝ^cXxPR/@3xh|8/ԜA'~Y8)3k)ӬȋW&R ;SE5\Ip EHc t II/K?;S  3dԙl GkZx A{L5IRc ~$B1.Lw O_w*%/?͑x/? `3~A3+_Rg w7:`A 'FNCp Ҧ\Ge8%PKXtiDf!r2i_~Ā͈GΫQI˜{-?3c${ڞqIhqAܜ3^p> V[+&V[+ L# 4yޟ-Ce@3{pX f! >O7DP X! Su%"*pPX %BH"XN7(XBBL 5cmRlJiY|\]+zΨ~>$ }QD@נ&#U ءdgCŸ/Phleh`CJPnE ʅYLo<gLePf u!3P[msM52 V>Yh *3HFzh>U8^-eK=KXd {ۢΣ)ZYZ53:ԍ瓄! S}&"HHSu*FXp7YZe+*so$Zm۽Y jf-by@7/MWr&E׻{.bQ, StʞcOQI&,]ٿft,Da S雱@ (Inl l'3{ }V`(̕i#Z)^D/L9Rq\ 'kFS/ч[О?6ZP hd"Hee)nhnuH (! S&%)]X¹t\P\%BWVnމK9=#ŅDs[qT gIP5y-X6,mU'|/:JqU'{*4&بW˒Qe tP8;_ BS, G}WH* E;BG1Ex R@'EqTTS偖M]*.(kw`Ėjut=nH?oJS%1_ #˶Y|"ۺ5cGl36]w2cbW;ьU @9VnS ;d'IVD@%vP2ڒKNJ+IGHc@K iq! qhqNhCv(>BS+JaQ87! S])Di(o` )' Nn=7"Jßh52vOt)θWrsBP@*+lRR CnbC` ܏WKP#?wÃRRkd& "be6m8c.a9u! l;P /RsJ݁+~9B ԁ8} ^ǢLK. !)VscY5 9 SV%֪ё̩b,!; ѣie"M9?_GYO{! S=G0` 8oьQ/cc)]M"*v%uRoF_.lv|S(YG9P`ՎKFQgv&4Og0hHŃIB[Wo qwhbP8s6P`y)"Dˉ+&"&_OeN} ^fV6biB^Ā# c^ QO\߻ꢭڰq[K)#! S5J1]"?QQ,=N~_#N52ͣ&*ImPQjH L(]Eձs/ 8T[;^]O)N38|V:Lb>>p_bP8/|ՠ*&k7 A@}5΅~]ZVRDcŒ]|!K+J}$9Tc#gsj'R}!28Ѧg9ܛ:Ӂχ_`\X 8Er! O/`@>L~'pKdy}x&->vSׯiJcl cdz/VKJ8-^# ' |= |+~O?u'LZ|_Өo^ s~p [N! !L61ۛT ʶZP@)!& aGOM `JsTn9ͅ=?wa䂌5zcC.<i~ѿKB  m &  x6p"}*n3HpDo6!LG#@n3}RRcMfy%B k'eZ*@qR N\3Cylgyf9{׃<֗"K"igP: *-#hv<ٌL "A5AphuGyS3!jTVAR3)U]Y\8zd%Zlّ;lr; ӧdU'yU:\r5 NIuԴ` ,sEO/Le%&s' Cg'uĈD8ϞTBtY"dNZ/`"U<^ I]+ޫ (-vϣL,AWWV6]t`[V1n ֙5T{2&ccIJʫc.G͊ tMfl)uC%BXhC 70|1a2`P=!T7Cb!D(7 E]Kĩ!A;=,E[diU"A:%`7gT5xNh̤@e5ͳH{bMn$?-lYgcEiҚlT0)T~u$ʜJ(ڒTkLdg0 1X@/9+8!hPXe+ʼn' 1((h2VMcDJ5jpwc6/žh2|USO{mqENq;-hmZI!@V!T>Cb*(Ёwh`R,d'v ~V8գ9yd8:8%p)XfsOmṔ[ 62h5R}QEK|X슌Mȗ ʷ5}xz8,BC%9ւ [a'y6a GM=Znng# 2\4fg & $&MM efA_k4.iBw;:<L9[S( aS4K<{%އ[/Ft&K&p]8gAGq!TmZ AЂ#zo+ "pȊ\!̾TMV)a36u[* k4}ATD2㇣q/8s'R/w]嬌dĶܶlKtacpbda,j}(fpKL*$Ԋ @*uI=&༕B"e8Nb{”K/5W6dSX ֔yFٱA.2[H0fBcD 1;=A6M2B/ {aK A*q!T: hCU7,iUa$%Y·,SU*+]r(1,r˪*Ę",N' 81RU=c[9tn*(>!BOwg7tAWyNo6U){Ƹ_[ s*x(P AB5ma.w{!T-6ao) j.RBT%R M]UO.+lں M ;[Qڸ)xLH sWMTYmMN#[z!`xQhck ԌI4XLsD6':>)"P,V! YYEj 9Ѳȍ[a Le,IkQU)ǢJ$unU&]yU&ZzxG#SZa9&fB?S { #,(y+_A>K(@4 <A@'C <4pASx%l.rOV3_$3K7-~J"d93n_m 3b;ɕG1}0b~ƐXEWo> 1bUyxz\ Gɓ<J%=Jf(8xxm;f X%,A`'|f!ηF$PS5Z(|@+MkjVQw!BX ־ṰnSj/N.A{pC!Eum|AtNwh%~[&@%cK>}q0h,Ws(-kU\ooKl݂:2VZ > {  Nt8pϲ%0*g #{IEV܄zai ~HwƖwcB_Um?&6@f+$5 gܽu]u]u]u]u]q~h}u]u_?/q"%v+57yoτ ‹Y`qŧ/^a|%LJZߞsz*k HnowQoVpGhS2>L𖝌^rLwtyLJ1,vE\oYm(TH&c]QCU2[g &6뮺뮺뮺뮺뮳u7]u]u]u]u]u]u]u]u]u ||(`#)ڌXq]$ϑ/1$9YN.w8/]uOYa]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]uu凮뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺맮뮺뮺뮺뮺뮺뮺뮺}pU.BAa2/-܀9B5gI+ >?=1]˥~\p\SytW~뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺z뮺뮺뮺뮺뮺뮺뮺뮺뮺)]u]u]u]u]u`k̯f> 4] Jv|6ٸ[euշ²"aa8)P(L`Or幻O>pp ?Q$BVSI2xei|]u]u]u]u~zs/Z  Ƭ9%U|X<Xbr`DmHԃa͑F莋%+920AXPW*@ T*(ר0 kg|!&eEW"@ K h\{jA'(\cm=c!w'pda)X‰KO3b Zv={c?e$a 3 ́SIh8u>aZ a4uOhy@ʐPrrBOPg| -6 d]_ҠE}ñL7aU)G7 _p™?!``2-H|e?:k<-B)ް"@0A 93CH 01$w|P`2SZՀ(Wï¸6d@@}5?_%- @z>>s\ 7Dч {d l]ƕ5v1h~-k@?"q KR*yԀ3GSkq nK9wMU؀ PRZ"ȅ@B kJo<*كn1vYꈟnKJ0@)muqJ[}P^ɣ[2hUq_+p"- g=Hn R=.?gp~ sw"j@B!pw8n5ȁ]_B#/7"ƹUB'<y%+*h=NzP(jU<8#_/a|;C19ÇpllQ=d΍e C#$ڿ{м?wZ9wH*f]y`svOѼxp$dꒊO:^?>>Φ]+Վ뮺ˏ]uLD5u% %G&CFd'1̧)eB_oDS" Z~O ?\aJ%10 L=,w~[cg\%ЖL62(YQCfL)3x@ ˤYQHgYR0"*Ĥ^t&siɦs>F*ȁ5f_C/pRF1/>d*I|E"J"4*nY$= I%h%44 =:,Cؽ% )ƇT :=hLKp-֪H?P+dڻC\`4Rk>~/Yz #ޝ ?|<\ xT/]>zXDf-P2߭42܌VHִg $0LU7gQW{  M?S3Q'Ո̂W̓vAۤ)o_4}ɶ1?3G  k'eD|ڗɆfC!cd0*J^6!2<=>I 8 m^i*o<9QW(~X# ^򂭓0 ~DzRPf IȶQqṠ#m 2ړ^db* yC `~K @L p N9Ag >iߠbH/BM1z--"/ ŽI6Ư˟q%c_z,MǼ}^ԠkqWP!pNfk&? ]'{ ]a0]$528ؾL o2i  BwH#n $D>o)FzQ֞o%Է& cxe_MpV>% ONaX5>5ڲgLUx"[X!xrjEf69ݠt{ CXWd8Ύk"a+>%JfXAl P/0+?L{i-zwic10o=ޅ!8ըȡxIOWIh^~{H6v\x;Wch~K6p)cED@3 KBZ!Tlj9}R X5t źt$B/h~2ܝWu@i >29t @b1"|P 9g$#Fc.f5ԯR93k/רGnwIž*HQD:L~\t'<ё6v`Ί6gDq hU n0oQtݙ|_ߩBݘq 웱KRJ>@m}B@ ,&K-pHj6z9B p+@|hD8c HCR.@[wzxFfР|EDdi{ͦq\@ p9Xfu(H1r> 2 ^(=~:\^ A̜ͩ̌p}Ӂ4]=8QP{rHoP-U5Nfy$x6dpT{t( lI@8{FfmJQg_8-E-d_C* w"+W£  "=-1=H2&Ҕ6_`y p_%/marV5@ﵖZ3 ŖWoT!t d9̤3Es4@D0 ZLf{>Ъ'u~k#{%# EbqZO. u/p.P^!u}T\,W!Y,8+#/4$«7_hl.h!PH]?Lk/pIa1U%[[}?]?I6I7y@8v4:O`631yAF9;tJL bj=E,#{Mee8v;!* bj;o 686<] cрX~e1~ 3 #xs %s ,nQ]L& i3sQ7%04n!?QmKMf q'!~yʢ:2 KNC Î6@".k9a ,@n0:6T*Q] M1\ `;*BH㸴ԗ;w$y * {PB1\}tᄍk0$E1/HPА2/JftѰ> ȡ&BmJ` JVakMT5ZND(d?56gՃ:  }]ᰰq@XD ERgirZ8\"Pz oP`)(4B4$`g2-0Cpf Xiv7)1?1BꡃV-Z[\]uכfeaU%%k .(s(^!78 0JU}۩|>T;)B?1gxĈj KPYU{쁾!߇.))OYAml ;@]|A.af !.ujL;{($d뮺xMmo# Ⱦ&뮺?Yv2&["|י4gj+hL)κG2CVw7_0.e0jlٽpQCzan%y'9 l"v̰Y( +0A+(8##;a 1Vוјj|v'A+%!"/4{z=@bRb,(M[ 5\W[]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]uuA ''P$nAHz# 2 Hœ% ~FV<=(X:oG: 冐~~#$Ι|B͌Bk(=6N? ؂AJK*nA'pp0~<ߋx?!#7!j5 o鋖f*i(S#][0_/$<] ՀOwZҶɀ5\_kx'݃W,5O#&{0տ6nO gnA@'%?YK 3b z08S+I"c>ؿwAcW9/w ?sRhwuX0 ̡8wt#x^q1u!:0WWb+Al c_~涹1R#`A`'~ /W'f>.r- b$$ rtdSeoik#ܻ}^cָ ۊ.a?ˆ钌<#Gg0 +ŃGp!D{ڄ;5;? fbf>f+Ld@ [*zAD߲KP?FA'tϛ'8%F+;?'K4@;%Qy%c̈́E11$* %x "C pamwz{ ș9`tB3_GO7 R<~;sA'ɀӝg0#C%$h?! DxWH#G.4Xx)aƓ_No,j/FV%0n&sY y1E@&=w a-!PAYqIW](Uz~*R>mXIRz3b~0P29_BhV s'{UژyLY`zhJo DA4lE d51,T΅cu K͡Cd]/ykLocDsmDx'|O>'|O>';Zt,h*hS> 1Nd:3'ᎅ D ⽋@$>ƐB /XT H>~x,=^.D|Ѡ.LhYhz%R]帋T^???o 'Le>)1怆XC{y?%+(ғiy2O?;f28>60)sė]  ^|' D"0Ў xN#<#Gؗ q~Lо#{R5V'uv>ޓ;L| L6A't,L0xxL x@v̉N&.[˺_F+a ~9\%#;zy| =rN3b3)vME4BF̿Dfvrfˤ˱  _b|?l0xNc?bx?Ld7<ϩ8;pTeZ A| aH?A'`0 Gl☧s- `Bܩ88怇oytWJ#j *6\݁.6Bh տيvYw}+A@#teI |iaDo4?!SkL"ɑ#K9{3x ̙.3Ci@IV3N~;K1L)#3dWH R,KZ)Nԓsߔp?|ן;kш7*|")bܾ= % Wݺe0H4HK :Ҋ,fε\v%ibvꥣ8- Y?F#|MCX0Kl! S\Da!(E ,"ee %c*U@, :00S)aU! SVB(Qs v%-2o"&f;'jةm01 b@GhU[=_%8ai:sx!\KH+z:XNc&A 9FN6K^ٝn??R+k~ ͅuK Ti}f:n0nOP$$ ,n lW*-r}𭊚IwV؅e7H&@+ͩ1,lF3ULc`t (GzL-C45=jaR}\~x! SXa!XFB(I byևlUDސ݋Dxwu63KUזչ)ЄtwVa,F!ŠL̥[q[3%H"8t}X?+ ,Z6RvQ?p{3/k 8lu_Z[~c[ % (NPm_PP4ۻM0bTѱqO8Q8Z%jPv lEF:j}i:! ST"؈1aPV P2YQsV3 "5YZq%}WKx-\5/s L޵*ocRђLչtl񏙆h(~q>H4s7&@UʋtH|4h&菋^;Y6iPw00! AΌ9@e#fIRN3deX) C4ƓbHR9:Q{^z~`=! SZQl`@XeU2A*"ýS$'NݤxțLS7-a$\g&B 9-=,4WZ[LyN ` wqZ'n ޚL6o#Fz`:hJQ?&/r_~w;?sByc56dqqr+Rt66r;QI$~mIeJ\Mn,5')i5ܻͦ$H-910kɺy\vW9%paaj7uU[! S̈́PQ$XHWJ@-(|C̾o"o1~Rz.ũ梦Rvzw~Ew0joc4mI]@ 1'FM [>NJ|Nt xOF GFMt,Mf8GqA*durVe$*2u]܁ i\Li(Bnҡ؟vo.45jG/łRؽ<(Ğz86}@ּ/U)ݻ<'! S AP)zTPȓ% S0և>gGg:A='ΐqANƹ9BXKjd55eO*XWb}`\Zb{:K.Q3lhk{G_ZoL&ؑ09$NH!ٛ NNlASwD؄"sɂDVΒevS-QaN`(X &Y2q>f9V]Yγ %쾒QV˳9ds)NjYT;Jg! S!!(VFݨ EK<7q<Ƿ<'UB <*iI|ҝ &!Ad\#H T,>6l|gdFd[k'fuz"N9@2 M#r0ƛ(Fj]{~gkE\UE kXq! S' SV,R)& P,Z&[٤s>icdLH IHrGsA@ݢV'5:'9)IΕ_Kl=A.L""P]u, n-]fjCvS 2:سi3nClCw(9M `HUiIu)lڟzׁϒKIxHH̙*>;bQ=r1CCJj6q_MC,XEFϟcY㪖x,%2#;fk?! S}$#reH ]- OuzEPAB O4K|eϫH ?R"wH?0@1Z>Sʠ ̈CQٷOEW#yd/# HXG겹#S[uMY,zAlքa(x#Յ__(wmAQ99/O{wʛ0?lI0B\G‚g9#dьaWPe5R5#M{G1G+4ٿe"KΧKd8[uW&%].D̽QmM| ! S])!NU[aغP%i.*BfTz^jϏf*N98A5)I_9 ֳT^qgTwMW DVy. FHX]$vMV1r%)8K, < 0PaRСI Y fȟ+h%ݶdP Z Y,"Y-(g?[Zc/J\{8ފ־j0#Z.V,V2G\J56|>:?eܕɭdgƐ:! Sm$!m[<5-* XןyVt79>OHn !JkkbA8D(.c0S~^hNΉ\al^"jG+T'`nW̼ VDgN&Ejg}^bX!*K F+! Se$BLdC  UX@ mnV2ZU7&x,mlzVWYm+F2e'Z>(t|@X,I,ÙmP|<3-hυniha9 ; `By{B FmdPh ?)o&VD 0(g m$q8R-PYsu;gHph+/R0Kt{#ečL#2)BxpY.[н%Y`=;h(!U>i5>*CӮg! Sp5" Hc[t+6L{882 x<>,adTRaL S 2 /3OC\:s fu+L;QUlS;4 |lЂ 5bpy ؤ%V>]1N$d4ō ^OJ ꘙ`%ϣ!s4C߽F4Uf^$)fra)1ESA@'oXՑ{N@>9 a[!44?$,"3@5fh] H=4w{OXMf3>?Vt ]r1cX جAߤ}@3!b*;'ww C#<';~ƆƇhlhs(%?ϼ%WfA*}}P:i2$@xU(h p=eM ؎4۟lA`'oAO?#+MaeZ"" "` Ho7q8%?3d,5 ]hoD# _ĕIȱ1pMƷ^>#HA9Dx?c#G8-t"W|f@_x27/BV jp7?K{'&> " /p"%<~;sA'g0eMy -,6M'2I3taOKI+SCl_iG ei[@?.{#PPO yô/}i$ލyz?Si?Rz ey $qrTh4voY#`A'@vw K ?YhR Qr}4H$%:uX 7v~fL@Q%so?L~ }_g>h `a_O3$btE~~^#@S.ౄ̿A'pE =I#- HSI$Fqc^%", Dx<n f6mL y?& !^^#P~ eS$ŏftmO2"a@u)9^Ӊ+ {ꢂ۟lTA'Q0ic"t^" CHk%w%9fS^'Jxjr|W97jK%=ʟJ2Hx`:sɖ˘?檪kX'䪪`(9!&-F ikX@'j:y>}8G{LM5?b>͹Y_Ԋ45\үr!_5aL?XKr &$kN\C_͝TW4d MW@5"{K\׿U\|Ej\5[𝘮MW_ګ߈Zkx;+6ZEgTFB(6&^j6hR$!2F{x8!q'ULd=G~8~=i3s@#eĩIؐٮ 15ⱷj#fA翎,=aaql.a< <2I؏4 u_ueP "u]qGh'Gq ^ǧKhZ:g1 jp?'P)4')r:22bVz_~0~?KHodg%D)kc 9JXJ(>04|V_E3 FE+bJ^i&?+oM=qh^&JJc 3>je:X05#B7 =k yYK^NNl),_JA#?bdf32*A&0T À8%>>t`_D;;,n, CҦٙGEs &1ЀZHcYw4u⺺կ{ @o38/eX?5"-3Uǎ2߹r?j}Fg g/ =Rm}#`:' *vx{͝T|g 8| )/囏g|1j/}u]w5&cA'b@0 x0 =HGGɄ|#8H^4ӏ/@EȨ'_¸!T:rQf"#%4)8Kh{?"AKЉwWj%g7OoȢ+)He1#_0P?VȤ `=.37~Ǫ&` SdEצpB~%pVI D0H7v@.@sp ?_B#<=nˍsK.dU^/-y&j^hOo%a* |8M ?)Pw6Z^A/Z(JUdH H[4D2V'DNB{cÄ1 !ԆR}pUs [|) YWڀxO(%+0$d"<R%G…e=Lz0X!-: b |8ǣ?????G??CM?x׿??x??0i??H*#BF6!I\)a 3 d`".$oNY%V S*` `'gΦB P^ד,UK02T0{޼{uͮrp_ӟ*` aI%XvL(uɰ9)Vя>@,kX%X/ @,Z{ k^PK9My7PK\]9ؘ0pA`'T`$hxC_|>[_|>>$\WB;BҿXIga<y 7???7'(q`ш9iLlD%Rae88f; 0Z.'Z0)8O8}By+@@0Ruǀ`)`j/LtLI p%_:bאBvL.BZ(ҷ}@oRoο&=<}jy%ɀ>##>o@~E6 䣯wt&ջUioz~L2wd[`i[W^>jM])6VyLx}wʚخLl A'Tw`{x, a[F[ ZIs㱰]d!v)N@AOV`3Θ Ý'͸k\!0RR|Ãw0Ś6?R07 .u \W}8<Ȇ "&?Q)CobJ@M`rMx<fr_l{qp`'6^7`A'W y4(B#- D f4§jIO DѬNAoH _>%x/ο@flRfA݃ah ؽ3cibTn`Dic7eXcLP%=A93 0S]_pN hRCNP/: \DaK 7<3!!@8!0}!0!0{!0w!0r!0t!0p!0!0w!0z!Sa ^'v .0/x]>?k}waGIF>~~F|yqD)Ǥ#IV0}n#V#,GC񇇈cpF[ ;#lC;X!`J CxcwW>;h?}L߅Li0_&x0| GU"MvWofw /4Wi0Xg<=!P<6(G!*S]BLD!7.^YID __4bh(ڊh2廪a"0W@iìZ!R XC|]jO*@j:|_9KQZxID%pqr ($=1 e h?v$ "vNPP=  ee2S2,Zz0 |Vٙإtꌓq"BS N+%mokSA \igS&-z'eqJׂ6B!LFHZpGbRZȥޟ?=Lev=KVPxMDiZ#}tWMh׶j{@Жxv/[ȉnX~/62СQN#=>!/7c3zQgu?r|yaO9>OnVo~a҂fR !d''!iJ&5$P5+V-:GO ;WKK)00Z!莜)| tܷK춇*a*KRp`D!jT*ă)1TJE\*]&qW,FCVA?cG56f-&bL*$Sb34G=z҅(N XRvsr_W|TϠFQʁ$C%R'"+KlS6|R+&< J7:i' k:aa&ltH,Ge3c5H!6KtJθ[SZR e-׀h+Z}PmV+z!T-CSjVI&/\eOPU*kQ^96ctR ڪ9/`ڝ2pރ(lJpj\dEpO&M,. ʕU>Zn$Iʗ$6*`4Yw2=y*m9ƗRT8`:AH#eiDhwU&]t,wn _\UvV!ʶQW|Yٮ<)| b#ENI)yp@2#lQFU0R>!TFDb mL*,w$Y)ZpM*mHEXĒ1-9ԖȰ?V]adUj ݴcFQ(CM:Rcj"FF4%i;kyM-NXm|L)oD5t4Mt^I|xH,NzΨ,5Rz!#9K)C3=cScE6Gn wULʓWu^/^7GY@JwR'& Қ\j NcM Z2)C !TuV Db l_87/ sUg2 A\bPp,LhꠕBlU$SK].%QBdr ;)X\(y*9Uj^FHjZͫ4m!NYξy[V6Qm")"$L-3bJ^cUwONRh?H-nPW-i7Sm^Uv:`IX|}-5[3kų搱k׺iGsjĤ6Jݧߺ6'S.곚Q+mȶw4eB(!Te ak ۜ8*3HܑeX9X-UT`UUr|h#fbĀ(ITT>7}M2J[ C2{gp$$brC"J QUo7t+m%=nVNd#7`\lkM /@`LM{m>۪_<]?t^fpll:lۙD3/,Г )N41IvcI wv 3-{C*Hꝗ׬Y=!5A'38˜-ˌ JH#JYRϛcF5|<'ɝWp{S&> ^)qR6: t) ;: C#?oJ~2\Zfi(Ɏ7Bf0G&o9C@ (`A'L8 VSX~%|)Y➌??@fǔ: |YUfA^1߉ "6>POcy`G<Av2Ct?t7CB(qIؘN{N* 9%@\o1pA'.P߽<Q͏!X_F@,?,wF |3cYPAu)Xr{DtyBsw?ͻxm'1{,f?ϱO)|L/!cv23$ؼX9~;Љף;fA '>8 O%}}FpJ]a!ej#fPLEo3Q3rFRS*à8N8s僘 جK42X7L1ܟO?H{N_fMG.Uy0_(o0|>A@'?eZ9D%8EO' pDHrQJ 'x 1I_ ؂@kD2Ÿ .Xq9Dv$$g O'eJ#&x ?phl\͈ZY(Muʈ? ȳ>nF:L}| A`'L>s|LrD?茄N{m>6I &pT+'NX?6jR~qB30AG?CPaxNo{ňӟNIb`@ӜR$}fA'`.OU >La L21s|˜{-|c7o$&k͈EFͻ-͊ k:27c XXfu/?!| Dx`;f!o7"| s^#F L+7A't0?\i2|w"8S^ ܑx$j-4M?Q{IZͶ6H0 L;7{׾@lh-%Tc$fřh~cdh("p2MC{t9 S'p@3y!# @je^Aaf3G()iA'ɀZw8 9oȆO#x'FͥL~o?@ q@>@8A ˟,B aY\BU.\erl~S\s[Bh.T0L3`Yqo:wSov8 f?Ө7qk%S37)`4 ޵>8b)%Ncg> w'H=p hzsE0e{nwkHAWb<`#3+.MxRV( Q:"b@Hdk_j AR2B4硧~_#Bbd\x@qf*76@MKt)ݨ5$A\LpKXϺ6.a:[ϩ@K`?uG9|G#x#x~`Éyd)2W4nf|%Ok6Γ)3'|O>'|O>';C}o;[0j8'bnvdv#K@341%bX3N_`? S`\U8esݣ\)quk i$6(tJ;p!  DC:Wʌ9& 詠 g ~CI ,GDx[a(IT ^Xh' iP.0qxfu> ~0OG#^A` DX\8\VLa<<18VB:G9vbuI+&6:NGsY<??ɐ_mGA^||E|}@xfHaZ9w2KGռ.m9oiUPQ~e.DIT9#⢏\e=c1R?GrְW o L78(olGw6sұ~6B&t @Ot+#x¯a3ĈQ*a9%/x ?@n7ol͵3 uRQuɟt)]EA't,BQ FXd@z?( ,k| LSx0Ÿ?Lk얻+ #rNpা~> rGcS. UcEG\! Seۋr7Z[)K$D̨Źn ̖j+YFb#Zꟺ}g~ؔ.-|p3Kǚ`An @wO.W)ܺFE'%cfpX-$7^\h bkl!$Z0161rU!HĤJ;꙯jƋzhXy֔^*Ue-n,K=sx @b(% e)dZu_)3=_d EIԌ.zBc! S4Nt) F-9%[@ʫRgg?\  Vq;3~ I?׿>16oc3 Fo+{x^y?(?o)On!!͗![︳2VӕHMj4r,Y.YYQĻʲغ\#jFpcgXǓEm׳1 @ە= J@tbl-B- Hm. T ?#` ! ShXv sy %ZF 3IJ3KնYwP=RmXeYX;viZŔ?P f!YBNt [4 VFC5ڬsY*5%NyX:U(f[(C-KaqYZ8 <)_jd\YLuKd! Sd5Urs.PVfRԄQՎGkl7Rcܬxs4+Sf;EYR0cJlJ`6I}\VX>7?Nmx T^F-8! SI0j2]H1Dۋ5Lyf-U(u;Zŗ,Dh.C48)aK~IkS AדZpk6jxSp 1-1i.d[]&,p끉]?+8jDeFP %GP% IBk>,^;vQ&v=! S'!Ӌ5[` H SCRz8>BvHlh[Xg|쥐W[]mM4isb5+)/uE%.R84qO7jj vf5-+y8ZQ`JW]ϵnip&9Hc}I!)J3DhdIR ǎ6D,^$_ nNl&%&JtB3_C|`V,M6`}&@ELx1 0Ixֵ)w {y;y1 '#Gy> LwFO 4S_M_aIxs|AYC{ Z>7{t ?! SZ#("h= #N $oxcl&"TЇ>gQC?;! Mx ;0;7 wM'w?Bf}I{}+&1 mulv)! S]J j-1!U5jeϖyoiQoҏFngBBe,>ʮ7ɕbW>?km ߮VQz VedQgn1Gڀ.u }"5|,=]{@6M@} 8''F!i,_ 7~ِ6uSlp۟NQ㥙Ki@q~5luU%JeB! EBNq (d׾{Zy5i68lj! S݊K1P'تoEXUДUGAr A < Kuu2hcA)%1y)S{w%o,6J0nΰAŶj/ֳ[,,4%YMbj٨o%``^A;:7x%MirR!HUl, %2x@ҒJ+xn5S*7RwoACX, fN~[$[x)tVhi)A aP@.,T Gy3>ƃ>G^ZZEs'>VyV! S&s 7iRL ` n#h6C{A9"ZؕD8'٦bD9T L~:TI}52 6%r0ų 7IR>E s-B0V 9^d#;^az+l44.O) ^#&: )uZJﻬWWYGw(x7@ x鯎c:,\m 'rh 7٥ytKN^yPc¢4PH^,([SxpO#;! S&DPDR "7*СjbW?qWx4ϫXU;q!jZr:(+;RY+@?PPG**Nthz7M5pND|C±{2q{.+Ķ\X^=7޿VD'ƀ~- BX_ch')qJ^4[V- QVQ[#Sn AHb0caPk+Ɲ|7dBl\_<>X-dZP>lBP pC=&8(mӝ |m4\馝zwZ)3! S!Z@/s3gk9cSjګ S脩JnZGXÕMb{ gkXOQˍbMt~kOZD >!3=MA:k+u[} k}ĝ\QX?2U3wThh`xNhqnJ7 \jk^3A^e)`P4t-SϲE0Kp5eTgIlWMi_!Lkќ#! SRHh`] lpUXG9=W lhyJتهb2z/|tX1\: %rZ`LYf !aML{jF! *[{釃CG.z8m\K3s͍5rws dP Qglo&|ڞh4?4HxlFS^)s6\N" E=DSQ:x @w! SuIP`@&Z*iu;qP Iۻ4ׯG-:mp^8c m=fgJ3Fn2LЬSuFxf\H֟QX"{LQՇ E}*p=vC?/:5I[poOk{*B]܁d9! ,6xĺnQ8ъTҕZQK$ [Vh+wi䖹"jmϧ W7]x! S}I1P@ E@sj@TDv@4qszүAe(8 n8FV/o iC #(HЪ$#:fA_{Rz3]{DC5;JNWuŅElVyJSabT_9/'AW@58{?KwsP X pGq|:Ր^w0 %;A"ⵢo1Fxf9! S},H*"L&|5uLrl3c`)}1dvlrW 7F\Pi P).Sʚ!C&8;P*|F/)}!To3$6NʽG;Ծ7 yKƾ ۸?roUeU-4gW ]T O$z_%ކdm"%Z`9(n&A@'LaAi_A!t4IU܃ fs@C,_<%kLMzJ#x|໛Wnh ؏$Gׅ7%͌:(~nOh82Z; k0NhpN"J~L_CX_# #{hqq62bL&A`'oֳ2Gڴ/0{ii¸ $g^ M>p Tl֟,E(4~.`xr8)f2c9\'pkL14^Lv6>{`m1]?BdD&z1q!&#BS|NA!' s5Mi4^H!)aψ8qA'oAO?# 07e7$#>S#<-bV8Γ(?-A6K`/3cfEξޥėuc@D1Z{H<@?XH A~\t!.F!d|͂ A'g0eM  0Fiah?D)\kCl`<ɦ-Q"%b2dO(˭A'cg͈VS&]U;gz\6?PApᱎf&AVLV4d"# z3K ?›zaAg!] &?d0Lf\vp;ɏxxxyqfd%_ЀA'@QZ0uI@c H"翬m3 dDlc/ߝE͊0@~$}3OLy0!8W|ϟxQ/(wNG^#* ɑ\~A'b$o!I Ai(\ ooG, D~ <  |x(D1dLG3lv-^'֠G/>1 SU!*XnfcY q 3`A'QQ<-C_6#G\ - <IJ̸L' <x(\kPQp84BLlQ @43e͗{oc'++"ϟ2b .Z$7OpF 47y?eA '~ ,H|"zEKDA ^\w b;<Y,3d"Gg2' |_\cm XLci,fDe ]6P0A@'$%p<%095,^ExV _cS*"2!*X950bgRCJgϵ񫀜8>~ z/ H'&W |E ]*Mb`sxM~qчQ92`p@q$D *MB€-_A4'?ZԨPbpT^p>;C!8~m v*>`x5-+g D7_ؠ٢ (hBp`bXO@ &ms)7))?0ݠM&G` c 7_` c Ʈ}UʫK0` a3'_Fw~B0y%"<@߈?` x#`s}޿F %j]M韺 `mfZjF}KzmU])z{2=B+}_v.cn]SoH;Lڛ:;>̻+ձ_] gizpSD0 A'VNzQ"T G=d0~94i0=) u\]|7\=R&Y{)oɍ0?Nup ֋ٸBрK!L!9;z 듨HO rjbJ0b`0ZUZ0qmMG)p'>xo$u6gl)Ӵ2TYT)S5֒R^rOdˎaQ NzԣPou=!O};iA?Mro`We!=Sy=>+xQMFPC .TH}9 d"zϳE0inIL脭"l[P~0?2+zGz`jY[F3'*/a._w!CoOt{x%~! S`KJ*^Ԟtv.N es{x]8n9:LEp-쫷= qKNDLV4fʅЏ.t-|WdDPX 8RFn]FeT:Q7dKWrk-PMT`>_^DuFo+GvՎ#9Y(Y^K/:J6m~"$MrV!q-ChlK:4kH6plߤ&! S}PTUʭ_E{|(o߾U䑹Lz1'I z7zƦ(bt!J.nə(ϡce^&P'pS{O*CS_?m!hI'-l.e({=@H 756\a eqp|g]h̀Oc2(>km` Ѻ;%qAO 0oEN~}Ynn* ('=$RQקQREPP1b! S$"N+P;00PS 6,&F:^BṬwZ#8 A-fNft=]wif A"-QL0GÿK׷*4/$H< uDzk@*fr5DyO-A[35Hv6hx/ NN  %HOM.3 cz 2Ơ1A&X27û8=ll ̴R_J[:ቂ΅,tehkY>$#L7" Ĩŝ1򣼌v! SmNFbPsG!J[ f%?EdʫP+12d#Q"  \87BQG1kGW:#HtRqD-RRy|m ;)1{Zmz)[NEUػTބ/W E:Ds GgrKD6UvD)㥉D`(K7fUԧj€ &\B 7vC٪vR[d-A-O dVHJ]`5arԴ3硾ݖOd>҈ mT2蝋'[gN2Üö|v! S]$c r(JXmyLZl%2EK.,' | Ay*΅ a uڬby<+ vo8|\ᑞ\uƯS^aHM]ZS!֞ 4KgIYgFhl5GUɗwS<:5S wlBk% Xiv*nt\a1HhRNj1:zb Z.5 -N%Ɠ/P{,&&BR0grjABP `HՁb`QԳTA-VEmI@! Sm+ bGunA*ūAkuʡRײp$`SЂs*hU~V^5i1VfbNeGԃ4jVyblS}dJ|F4DGPKLTԴ2~(LR=ƪH܄ H}wY'2@kZaX ФPH=b6 vpQmtYSyEl5%lt@ \e~+#y2崦-KOBu.wTMy!6kW&p t),d*+4 kn1j l:! SMDf/ (i' '$~iaD["s6CbWwrO(n/xl{6k)lB18RX|\3 O>G.K;޻ a8|V$N[$Z:qaP\Vx-"6M_ 5`nwvJ$bF[LFr5])A/&aܪ}Ҍ;%ЧDrXE2w Y)WbU-bӓwӺqRErrG5H _Y3xXMt@! SM%H)uTfV( 5*)%]m&N!"fsғm$K߂ XCbK Y 04Wcܴ=X"EDOOiO; .*P/־vatX%YтZZ~򑏕R`~5_~lc=DtbdEL`XFDoV49E ޝS_ U2*"U+ٴ%P-JSՆ4i4sZ1ɏ|)6 bÚhUɞ$ wfoLjV! S]Bh*UʪٺS,'ƎѼ-Д 04 >PK8X Z*U$bBDܕؔg[Ύo%?YF10JxZJ0BYHԼ$FzH >Y3w\ C6ot( b!#vwm!冪Hn#Bٚ46_ &E' Vh&0S-J\eY$fiO X^d%i, oݞJ$S&ǃcAT B! S= 9z,ӳ?FvxHP.nUJ=i1Gvk}NpO,KVO 7 a tжfb[Y;L $.@ۂ.9Jh9ѻcш Dj< @ZLvf&&X÷lP;0p:+3-UMε%X@K6eR̍04Z2&8!S=Z͌B@r_ԭ"-&JeKh`?T>oʂA$a) !:R[9}um 9F[o?G,w~/~ڰǦ&IGeʃ*t;T]6) 76bd 5 ?g`;8Ӫa0 *0fP(캒;L? @-+W~tJWݚ4zώOέ?!*S@ɽe̋J-l{hsm$6OJ>]虪`Q8^tFWO?|2fy\geH+tʤކ s? iZXgRWSj 4Y$*&"ԻĪ dӶE)487#g:}gE{-ԻhWU)ʡ{$yCbQB;4Ծo+B<W>JbB} zOpwYQM۪4*'04evXlw*}u[* =C S'!zT*À4V[xQ!*D"== NCv6Kr͂(AI]c!a;LI,ʡx9 ѬiR @II9P1#0 C"R*ؙ*0vs}_OR;<Ė]wXs}!ֿs)NF6I-EI4[֎g$_GuC@Law$jDS~Zx`6L#*wum7w}H/,z+yY߉)sXb !M958^ 8o O:*/{ӷ@?`L%b}rnA~>{Au}?V0&{TO/JO^Vp!wppA')>ݮm H-K&zहJo !!8G$u0]eOu_[nܺۥϛml@Co4Ā͌'Jvk `ղJh$fAN7!ܜd\4*g ZkL+/G&@3xljiGIKIW>FP ȁUf2Hn6f&.iX A'w>/V `A|ri~SL’3"œ].?@fBӍ63bLL."_~'{9 g}0LxOĈ|x'kXx!ilY vPpq0U#` /%_# 门|yrA@' #\ױP~mS6tİJ[hQhm<,M)"m]prFR@d6p6?zIQ3blTQQA'}|y";<姖瘾~ y9NOL]"lG`b80)3d9n/4y9^[#19?@X xA`'UA&| Rdm5F[b _y45q{ X0 RwwF2^,nf<3c8uRgbҿO^?D2@Ė^“p\YD7A'Lee'琊+y59b0-iWuFrQ \@fã`ufĪ[-C ЭP7Ў#<'0k+Nl)1ZZ?#>^_6Naf6Y qdUI6sA'(?/ψr?~,|G}-™ 0i m>e Bqn6?NCb~'83~X2% /T'+l<L|N_N_Lf$h/^H#~E L ds7A'(?+N_{OKyCP pA2ۈi'E-el) ~6H+&›@2&gG2 dcC Q66+hQ 9ņXlu,%~x3 ,% a͸NcYBhkZUvu'}^fPJyyZgz,-A朔3"a32rA'*4#`1#c9,6lY 4@PwJtp$(g<ԥd*JmƻPH$p?wT֘RԐRT7UOF](UzĬQ;"I)M|dvA\ *΃!T#@X6GwDa2!]RT?oTl3uP )ݨ5)¶0@jeBY% }MA Mõuϩ@K`>tz##6Dx-`!09>h>Qnq#I(Ceϑ#JyBxYA_%>@3xN+L>y0}i2fSA''|O>'|O>'|O>';OMg@&x>vG!K@۠68lnKeX`8h2C/Dᔧڰi0&aL `.߀ @ P !b<_['оT?@C Dǁ(m§wst:Ĭ|5p^E?̥[J-@+ųA3VlA '&2:,pf6^h@B唀(&<%B&dԴv2Cmv%wG#wwz3b,c7FXGfpɞtJd4>-4#!'0ؽ^ynyo{60[&b3ɇrJ"Oa,q<4!TeɠBb7BhJ]"BZf1U'!A׽$ cnMKl4DQDaVT 5NWJQrGQ^NȳgCE23MGJ|S7G&CqV.d6Q0' ]I"&i2Q\oX` ً˯AD=r'x?$֪jVoY GQɮq/2,9 @Ȅ9!TEaS 3ABv8XQN510vZs29 9 t{_=33+M9,3& xS=҅ LBIecYEȠ 'K`a-װKA Snvm3Y&нJ ʢ\j64\Lf I?rm{C݌'wI \)׻=F&(!TcJr%BK T"So=%rfX|cґ] ) .j$f:«R~ Zl/IN*:WkLcWE EDSKHiMjB-ue\6/wؖf B* ΐŦ/Fo?mGǒ)ϕ_;O- Iol@' fZZHBng-'G#"-.sMj4;>ry3dqkF~lHʙv?!S͕"FFT^YDAٛ[[$r0&|*Tq+^:jQs*+?~'0כU5\DCAAU)U)Hd_XzXR^5Քγ85LT5VrU ?bhE=KiS;wN((k"Z@=_jxeYPM6 _Z)I]P$x|OHVn+S?}t@Ѱ=pYrn 4r!Sc̮yZ8 ֣/fRqh{pD \OBR.X" W"p4D|RS>vMimZPZUZMs_y6CL|g2Mx-3:]U'XXTmo8V &L]Ÿ $yұLF`a=S۴ ˁa^v!PHd>(pfT_lEma,5Ǯ5OښNfC}/ .Qh,IxLDPmj PF! SCa( @TFD U^Up Ɩխdƥ(qr~z2[ |ѵNCo@@TX<{{QC\HH.ӵJ))AeKӹIr|R+0&1/pUw 8! Sd a@-8Pq/mAuK*^B9U ?9X5vJC`Ga)/4w<0.+Xq-Z# '‹yQj|R]!f|AQؤ#1TTZtZ鮺+@&v h/ҷIijeHyzX0e2:)kG$ rO\ߍUuQ) Ų1 ë58il\`C8yƞ ת@-Nuݥ|xU Ju1p '7,¥2ƨ! ST_h0>c萎fI0-@ 9W;%L^/8UQ۝MWRگ+w@0a`LH K;NS|5:z~ljQZJ/3R`܈fj%ꪉ fox3~Uh|eϤ!VPlR:ztџ""DW2|;i?:ptjr+z`=ۮ9 qCdK;@2!/n0 f  =ABw8T=s"هlܼHa1%ʂbK k~+QkEB?;[QC! SE(!ѻe3guH )DݻpSS>%cQvZ)ȳSE$P*lt5L톌p-@zvO@d \z7Fmǜ.[wcX%9#L(k>p(ʅdW"zO}05O m{fggb@ ['Y<^kx@N N)5jHn'B=3(FuoziQ\S*^] "v,Cn! Q9! SqPT guhC;[X,3Mph[G4-s 2B ͟>AmsMsSSvD;C3M兡C#L pS ؑ;ǐ~p35π:'P@\LcB D_u.O Kcd88qqr֐! њua}_l;c-5C`3w?$Üt9;`e2Ǥ!Ȑ! SLdJP) @&ynw-m]}LG&vKv0 Ms^Hd$Ical`x&_o@}ݾ[l?l6VҶ?|OavH!,(͙N3}jS~jaH?,w4 $0. |Oa0|֞Lj0^ /x(,+#;37dpF؊f>b ! S=$"UGP!tC/&x&ZZcRMӧJw93q`E*'Z^KЃ-joJླྀd'+^uRK—<$bšoF:H! S}J1PIڔnsN'a5vQy>)&e8GS-7'~4,MD~֙ۜC 1-g|H>GWs \_jV)E{t9QWY8yXtxf%#7(B#ynW䙪z("@N&h7T`^Qڨ"'{B+׋@ ǪC|Bpɧy2}.M*Ԋ^gE)\J0ދ7~QMh;! SF$UPYyT'16x"N-K u㪼_|*$޻W,1bk ^Nͨl@wTWL`I(Þ:qK}3Gsk9fPdнOY^"XW䵯_&1ДhZsWK4nPA lf){\;cx 8)Aٌ/~z:^YL$tiM!4EIy׍n#-G⫘̋QUDV A '!M_S]A! S:CD P/vZwK<*F-4{ػ.9:a뿌Z +ȯMZl3-cX[APImSR]{hͨB] \/T8^(P{l8Ϭ1T$^֮"h!}67l7!KF Tj/2\tPR׍C#?a7(0r3τ;u:,r#y*y0KF +2@K. (J5.N+ F!Nxvׅ-! Sͅ>/ @8ESw]uWE5踮ztoIu D7mJ% !Zey I *^ XEc&~k)p8T2Mꠀu1AlgjHMQS14/4vToөuҍE m}waB` P<ˡ? u!()A̠RK -tk"$$0jn#p! Sͅ>d epqcH5}դHwZ},t_;#vdA,v䊮[p}R?&-#ZFVFx_ph(B ˜rSqPMea,S (Nm}J05#8[}@iE18N.~0RAUw\k z7] Iԩ4m).,ʑKcD~VorMkߣm'*!Y\kj*)"3k:ƈe- 79 Yb[4) ;rO]u]u]u]u]B65dZGT&K?p aU4ν3뮺뮺뮺뮺뮺뮺뮺뮺Ǜs}o/),7z뮺뮺뮺뮺뮺뮺뮺뮺뮲b뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸]u]u]u]u]u]u]u_f#a2em`\ O=470_ki1Cv{!q{Fm+&b:Ngs뮺뮺뮺뮺뮺뮺뮺뮺뮻뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮸]u]u]u]u\v_ |@+PsCYGȲLg=fr#i AF6<bYkț>w|@`"K$GeNO9͹Rܺ뮺뮺뮺뮞!T1+4?q)z0Kbm$l(-hK| fde7J-?MS%3Jn 閎'8`,&R`\  *&>;9->[53e?a re q:FQk-$MI/ ?)s0'e>\n70)-IHf2?3' Fv7P[#d|4y %=2)Rk^e7?F`fl5E`37r8a ``~b K\QO5a?+7_V|CD/~0;-A%0܁Bi*wӀxÊ\׆@a|O^G C~:=^!T\`8pUsr=AÄ x= S7_=" u37PDK :0zx<=/e;Ypu}zˋ뮺뮺뮺 %]u]u9뮺뮻ɏ[ﮱ}}|S u]u]uNl뮺뮺뾺뮺뮸^J_{ u]u]uH)H8u7A; }[$z@Za L$k~<~0ͽ=NiyId*q?}˜6Ljh3R`I/6X jst1GT9%@Z!F1'$L=CC}Ѝ\`EcWQȯ ).sMaπ)Bje Y@P0S%cB4s|?W?#fP|Io5H! !0`4Fp"~GZЏJH_f<XZc>?c-oJc@B`0$2`$Yd$Lpn~x-1yw JAQwluϑ s  1zPXe '5<[9k1 !&g&upL[ InZsg~0To#A/t_|4j|mM~݀?j0V!:Z` fkz/<8=B눏<' Eyw|LV&oGo #LiZxSS`ܹc IA?k1{}K8~L2d`)@E1@  %;>9WoW?[|t beC<ĺ|02%w`<ewkcAQ  Nu!iEpǂLqXF]3w `)0SIDۘ; ;!iCGΡ3sLfT DL_tv"0֡we$Q Vm=F-TE&p=H2 H2;ct`%p[ *xA&sj/m3DŽV}.L@ VYAS~{!#vAi?ft V)cl*a.$F*&C%b,;&ہ ;>L4uoAӻ>С@ S@RIR҈ǼVM^z 8h;|* ٦pF ρ 2$b)Lp~+ %d +a3BX< p_ 0WVLx `|'6p:<&PHQXD"V1Q@DcDlF=0?T(_Ab@w7m'7Z Y{|ف R0$=Uq2?t +Q!s1S8y 3l]"Aׇ̯"FAC$i+#aԵ;>G </{ 1vM0uFr}x`k}2p>EJe1Zѐ#u Am/l9N1ER -TOR@΁.* fc0"W1<hP. W.GBRO@B 1~qN5 n d9=f1ހ??1a!M hW h4u#C lk} ߬@ֆivw $ad[2 NrHTh>WִoH`/|B8W}57Af7~L2(jK`Bk,Ak4&$7+j?Yo~!a|: x&z^.Uiw~gxRS npK@"3!c iX Ae& #Y`_K~W^R~=xh9g[FgX'QaR F"7Sd1(AׯWU>eeytγ o[T׷EA9`z`? {|P/F/X*b0(u`WH;9uI*'' xNj+9{K䪟_"n$GjWf%H?}^Ԡjܨo@I :$L~A<s[zs a 1woabh#Lz IA*d`o[M8|'x*pj_ů!6ۑX\YHW`] @\.!Y*XryX7\}Z^qNwo`A_ &Ats~(D02uY8\Ei[ mEp=S`F~b{iD}ڇbp&=+;Z#TJA,`?W;p?;~-GJTZCtcAE<KH28F=X|r{9 Ke g)GЌ3Bö_qeNVnlyn݀wu8g?)co;Xр|S5X_P̅' x!B|u02".p20{1) tvq^$MqOob  4_pz{ݐ?ܖLx*._ތs46@mHk 2kcx% X`$dT 2L)aRS<pZWFZY$8.LLwi@H9@`[ģd4`DH%x x%޽#gR2?1Dy'/@ 2@ 9je=% 'E} U%"e*-7|πQ24Y70͵&|/IG_^ -d_ː@P G@Ԩ*;+Z< #@M#ebcӂ)9?l߫zwށX9?4/&k 68&s R Nro M^!``fhE{`21@x78@2kdd#/NJ\D7^|\^\Ⱦ{(&BL< "X*sS#*(Fk\k72`tY^* FQ!7C<'@r CKPY6V^&Mm`b)wJ7I 3b pD_K i>X+!"Tny`jlh~W(OMd8'm_mX2 SKpFZFDw`@c"AK*YbpV'`0ޠm\4npB7<8͟`7' #lW2LNC O6H"$.a 4pCm.k( _hR]ń sX(P"|WUi`4փ ®0ʀE?G"ɧvW:k}LYC q &^'!8)Y$@ƾg`i!ٮ PX!678PZASdep cr"_2 K3<=uE=xd"")Q3Q*&AEA7nӓi;K%4̡WZ Č V4>@K"i7;A73KI$oy=(g[;]u~l3ZXTvwJ3kN(Ea !s qj?U*T>_DQ 7bγ3jXߡIveZPt; z<Ñճ)OpgU3 qh7LBEú5B,OQwu]u)/oɆ뮺z~u.bJ|A.A's[*Iq/JAsdUVC8|)SzWn͵Jfvsw4h R΃f|% XVWQoP ?BLULWVEcW>>X[+Xԭ((b )(?_SJ !A%uG1o{]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u׀uA '0!P=XR$ZRƖ7#@/SQ oh4\3_)?8[zfD| + ]gAB+2i$la,À/C!Ѓo>/>W ^(G G#8blԤFE(yi2O:&?{|$< 7⠅,&l@3`3,e4`3`A'Q ߃"t%k e$5 &g4k*ŀ͊"0l8=QfAA7%eYO@_8;r~ H_~;H"K-/͈Č(=yX$5A-O7 B`.$Rw}28D,@Z A'^V1`pC۞$‘[ma`;?} ƙ5c) 6 d`1{H=Vu3~ y?D&Q20xbIf ol3I,p A\ł/dAk_kxQ30gmPJx"-k+ A'*CB@cX9x@h"I-$H[@#oAn`7Up*"P 992-靬꼫sD? 7,ʿ&ɄL* o͡%p TW P0Pihi # 4 x Y  8uqs?(eSMآ QU àx9HH&сPvhOo%'%KE*UxK׷6_ )PqÄldXF80QJMUM̟…s-$2V&O%ـ ! zc@a\AsNBtsOrfU0(<fM0QxxJ2F@T*D7^P|4'HtEOya =?????'>?????>?????$]fnB 忘B282,~K0&2p5Y%~^N?K0wAD@ҝJy2 f UJ|1Y%XE#p*p ,ƯnbSn %K0&[y<?Y%~^N,ƼX?Y%I_A '$p`$P% B"d05Ja}RH8Xc=]m%Oջ9d)k8KJ+'dduԋdnwS_cQZ:XpJh&AdA6Qo EXU1!'o.ݺѶTK{Y Uw; @`v *d@ֵ4J DJ#S[bo+IPY&6Ok:! Sa P(FX e#\dOm A)U PF ܼLqUW%C*_`cu82C+>u.IXܵ;.>H4* =*i h Y>?94:4*AQwA(4A, |6&I<.L}??73A@UA>@2qX+iWM 4IyAS/4.-Va"IYS! S>fdVQ +e{״ʦSD`ve_*dd( 0sW5h/xB "U*S^LJעzG5^sVYN*uVA[K]ٖi2vve$Mgop/Ȗ0\xJMEdbFUl@ .FՓM ' YVg\o^b*TOpV SdE鱬e3CJUM̽uKo[]6D)C! S` bR6PdPZT #TJdI(Xmh+UwdG{fm,%R4\z!ߥt,rBhO$/J>Kw 8F0p Ҋ:t"]8wx3f{}28wC:z,ӟC#kN;#PlQGg'ꨌAlyv ,JTniNbbiBZB6B"H**B6B>XHވwyi ƌ)߼! S43z@1ytRsdBx\zJ l^֎knZ@=z+&qh.vlӒTob b~c[bBcd^mnVΛFۅqY~RKޘU ^(Vq1 z6ɳWIZ@Ufᾏ/ +Da $c&E2[hRq=fI+ h!SrQJfi/XYi3(SQ IFlThM19ΔlŸJgizʖݝ#t=m>! SJA*xd Px)lToZ&ɋwdrIqYU5=v|'Us]U$y yiGm[4q$к xȋ Zk TRIVB֧L\Ber! Sm)1[)TA.>j҅>GeRŏA`!BQ5 zOY[.tr-t4Lc%GZDj# u(l6:]6.8&83Jr*8Lnn'u>n%tr+(W/juWT ]J Tּ3]pXdUDRAsq! S}!Ȫe6* *֛3ka.ezűLb#Ϟk Ƌj0VT5V `D)UxBQ ] ~ c[#'vc H2GsJ%i H*=*{GHajX;roIeŦA~k],/l HT:ڰ+CLhNgTP!J.iB՚"! Su2P$ 9U[ W2ωfWVOM-IdZ"qaAxlG$߻mpҺIV8xRr1')<ΡX^ 1%n(#,p4-u  c{m6U-z{Aٖ.\dDT 5EO%]^FRtF!)Zi=I2V3ػ:Lح\3n' 42EWi>KLQ@FĦ)ij\i(VbA>! Sm# $Pa`!6OE snLse=cVvrqDې4no=v>sy햪tPZGmKK#d M̥9\[y LebBLIxJtP8s &Yl4x6@l>syK,_9:`%zd:b$@&`ƀJIYѾ}Q72n5CdT$\p! SM# I"-T0 Yt&XeTL)vEKHdafH=y}lyq;v rs{lu.;[LKòę5N b v-yaE.hUE!ͳn4v0(+M  fqk,|@4*IQŁl*vKYXRU},^>8QO[ uV_2%zFke!:ghS! SmR^Elo{l@ (P=jm'R ZgcHAd-3Z,EA"m|N{9!]ںIAUaxB۲c!='!J *`ԕ$[ﴽ<=4/S?$}Ta12bnI{~=YgvܟS.ϱJtGa NHVMPD(EHXLw$'oH[ym"G=hyvV! S=PT=0BĩЧKGvL-+^Z*16ϚatXph@ B&2"G:5 V Sc^ZT:Yr3uԊZ)&5?qP=6- ;S%qu8BMDNAӶ vUQ /&EmW,'U '2 PR)1e%u) 0PGpis2ԟ\vO%,C/5c!\{㓓lsr! SUWAU1`7RJyJE@rvƇ% "SE܀ ,;|vd!Kigu&V 4p9{oYͭ J̾.\KS5m:AmusGȫBdeY+g(,! S= *!fS,j, DB2- fEi.-{i%1LLg|Ι{&!T 8b,À:QC9Biyy3:^c!/09 u)j3Usd7dɽvI&19CB$0"P7 @Ca5q*Gmٺ[cıbD– xE)błoDiF* sY{!j%κ>½X$!c88! S}" 8ή hBXCae|||K><&R8D'V>JH^qqֻ\qf}C+??&Ӎ̡0moY/ѵ&9fgq~@U5d-0X iݼvC^Y`P5oZT1%Nj&Lrō#yL]_ eΰY;|AC j2d0:ړϧ']ʟ}} ѱa=1^t4|8!S5S4PBb;H<t"#vF+:ub[,׍-> øXb?]F 5J#OU*׷}㺃֡#&m@=Iz ǩ[uT@M8f(ԌsȦK^{γ2߃,hԼ )ضj9̫MԴͭZy q۩FF( 7O|ep!*S c(g4 ҠU1ek˟0f"xθvn-8%D\ԧaX f@D7TP/F݌zD=Wvjh[z>pvʆt~~K@_j͂}KT'H2Ou<HXlJ r3/!Z蟒l{7'~7 Y\XVT&ύ$͠JmGXf,@yv#uD}7)De$%.0R8(O|@1Fp!LFaW&g@'@"L` @ flW'0Ɉe۰"9^U3_֜I{gWa?^0=x-p8t޶qC?ǷQָeYѶUmu3)[p]S%|M1󴉄dbsf I0IߒAQh9 idM=v4]@)PwBZbzR~0Ii~fC+}A`'UgR-O"!EpR,L04ѵ)dvOS'lUXk (͌iÄ&6+]`eaNn{' swd J_f 7gV^"V|pjLؔ2˽tA')1ۈJ*r6`BzA 1Ճ%J5@Tba!NS?G NCÈIN#/pיj™BʀffDޣ DA')Z)t%u6#@twh]«%l*'!A3R{HQN) l!ӠLUUUmfMd˔; *߉Ё(@?cJ~ y$:.h/9A'x2pj/;SJKG6?t~F! s3 Vw*N? ii.JfA\~9\Q#gz"3Dw`#? n~_'+&|qo$@IG,dD)KzrW0C@#){=$A'%E* Tf mKRWosZ]؎EH /:@fQk|]h&cq/F?+J*)t~֪#`'y#<)o1LeKIs^Iwr\w=ךA'Z֯W;u`iGDz~^*u_+uy4iW,pؼW lo7]ӧҥs|W64-3WU-WVfa ϱ>[g|emzϷ%g|N(͏%™ef5pkԦRW47i _q2fPrMpV JlgЏx}NwzV/ ǠBv'y.rw&"*{<)I l=uyt뒜p|b-|#8@ F({mkC| 7}ޡ{|W2~ b  )ys˭|_G;-t7+SwFzM5%#@CIpMA ʘ%2!(Uҕ`3-Ǯօy߈=h;ĸM ?f Lo̦Hd7aͧT꭫ W* &?M;|E  Eo+<nc ]}W0rp>̿2*UZlğ T/``g.I(ЙϻRHi dܕ x Ⱥ@ʥPѱK.24 ~'ɿ5kN%Z;f13Kv,FXks8 c]Iߊa@dOuظhe ѹ ?@%ro^`KKg3_l)Q46A%񓔒$ڕ=/5J%M:&F~btvٍX+`UD3;0 xMlߏ=t Oɋ#6ФOX5gÈ'g$_OȃE!.XA' S@O't?M~Xϸ&O#`׊+h3zaleH 8!#o@A`'%c8%|i&~s.Dz|T;U/fU2"7ؑ-#P ͒$ Q9Wƻ>; _l!cܘ ̼߉^W I ukNpě;>j(sUUlv:cT7?6`Se0k`3n8; 6A'ɀ!ֹq, h|G#x~o RX+pAn!̖pM,aAz3A>^FϛǰSb 6BH#3 wOI-ؚ 4O;Vϧ y5@(AeK7 6g(OVC tLu i~K6 wo3ϱRFQv!eg e0]cg%"_uI"Sb3bArPZC9-kMXn#dCػ2}=7і KʀngO !1Bar AhȄ'B1kMA6Y6)7!wcۃ7I|OGO|Fl#xٛ8Ðri$ll>qaWpc\GV70<ϟgM3b|ѫk%iu2Qh,d|G \]pA''|O>'|O>'|O>';z3x(I` ؁[` ǐà ӐOCP)Bv)J "E 1;\ᔧ:p{ua_`w,T0tԁf9/p uP!n^xYY К()#x}dJ]bkW#`~PhB`( 03I<AӘXD3\C,6Ȩ:<\h<C) dFM@2xT?? xP<(:E)| !,ʭ#y!O? B987J A:XDY2c #;s{!T6 b b"(mȲb-uNt}u|.^ɆF@4S9(?ƻTy}|dfAJyIF+ D`(AE}^4E:%2  @ea)™UP"UU^5i5h& *iePY;kSYMxUW3eTXE3\Χxu3}M1B:j*@R*!Tt:FX D3A JLՑa8/Z--s1P*(UVShm痾ˉWVeN*Ԩ[-7 ߪ3rncTN*Y%"oB&+d*GK3SXkZJD &&Z# )XR[dd- Qݧtܹ|%9|NF!쮗ma4.(4kux;O^ (gV ωиA fspbj8!TUbP`hB ojT7%hΓVWdU|_rKC=R* "`}O7MKͳ`]PXt4F¨j4QQGF+|tbުlcj$bj+Im j`(%{F w7Yŕ2$:LDb`r]eK_aNt4x ΢?T+yw%$z&h~,&(K̳.7r}C!T-`LrRFK YSZRx6"1T'e :%S"6ÛNϸWlvj3{&I\#C5]8Ch0떝41;9,M` (8$=+Μhd4xR!YvaɜPk%sRu"ݣPa`涇kRilz(+Z7ρP{OZ`.m=&26pL\p!T%b@XHӵQ,lD"RQɱKkF+DU  V cN0̦XR"ejI5]&kɤ 3H a`BzVi8_:}Ʈyg¦mb'>o)6v #fwy@r9u@(5õRIwזavx`w֚pGycXj (G.=xGOO*== d=9gr#ÿ! S [@Z(.10HȗCtsjxӲPs\ݝj7Enj`E֪%ΤW8[{.\]E$3Mmhh+d) Hn=zE*09 @FGʃ);{|;RPiTY4Mg)zگKN.U6'A=1,x t|*)3˭vW pț*0u[guEҔ= b0 kd||H"wf1D,ܡ! SgUTRnZ../Hզ[vA{X "͋ݕ&Zt5nI4C)eQBW,6:mC:{@æN'z]= = IQ<.fPRtB%.l* ֝ƐmnDQ'+ Tj Yˆw8[t*볞uTU)˜V\jlf \c NVMLӢdzfxĠ1X*Pt\Kwu]F$V"(6U! S&F*p>U߽W- }ZWWvPQGiP O_ʎEuU;ĂקPp^#z'2Y4PR7.C-i"sDiГ.^ (-ݦt|Ͼ)}5d(D#֐`wCB=qc4[+OP42Lh͑UU^ ET!{(s @P'9rrXc Ws-s2q@bKԕdZ);؁~! Sw!PbນIw3qJJt=RDNtZ7ڦ72DI p T(mHTYk:"[x@9vU1 T T:u(-x8I,N O"^^ KEƌ&-궵W:Q;M=2@IqQR@kxRYf`Z7lgTB!H\p"1|)7gu];|w_`"@# @cke`8\խuU鋝5@Lvoۿ.n0?Doa):!{.ԅ8>d>MjŚz׽sBI/a෿O5-F k$X.>-cF7n1FwcZ?hZ CQ|*}s;jB.am)ʏ R! Eˀq=ƪJwrw0p!@b@D9%>)TP$rNuкWļIGIӿ! SCN퍪ȷwk&[Y+ AW@ǦcKF @*6GiNr6B^WTRǰ;UZtS,b3W";䈯 &!`o8؛-ci9*!Y[g^gB-4U( Z?S +?usIGm.Wv,lF8-&~}O 3$sU.=YOxgV8-(2n#rVX(ݭaB$5ϭv ^Tʚ\V.&2o!s 5Ќ'_QYHbӀ`! SZ4%@@vZ4(Kxh`gד0ldl50]'t'!ܳrfdO16`7't?Z |6MXt<=*x]+k *z6 B8@P ?&fwӠ;&r?~LB|0H0aCJa|; 6LĖr;.aw&|q%K! SbLFS@wx ;xw1E }ch~i c?jwI}nch !  PmVѼ|0$q0 vϟ"ND#, @ oۆ>c6H؀}J? 3G!f.C1@x}H`q}Ua}`;:nF٠! SUIDtB e GxsoX?Y{)U//>n< FmƐ6#뎣"чqRXV-_pe(ԆTTSh%H~5J{$6 5v &9euHe٥a}Tp3 θxj̳2wi„@Q&ױ[)a#:*؈;xEueH2@ĞJj!nihF*m#KEEp)9&i;aJ Tė?²yw9 LdC-\Di! S!"("ebm + NGk&%gx`',@ @J@""l  zXbj/^mTKsC9[ȃ?D ]/Y? 2abX`'Wzw# .Oܚ󷺚Ѿ"/Z= ST>! S}M f* W>[0 >Ԅ*n4O0~üVA4`ށ^b?^ bύA^4rCW땤$j#KH]^1(j~r3@;=A xs`h{޵A;]'hj<Mߋ;֏ws 0b`ZA]|a tIMT ZIu+={,qA'yliX32 (0#`2a A E.~c&iy!ZflG#?l@eS;gm,|F"c 詳l C;)6)?C-Bb!yKbya &~9ֳ̆ ӓb&c0`Ԡ'-A'`0 x)Ah!o H4> 2i9#p Ǣ {@3`,_@3cQ,`ⰸJF+/HCė"3?;{%?%L߃N˜_6۞ &`A'LaAA-x$Px42bQeɠ! ,3Q$ȏr@ٞ% (͌&Ii`q04$;Xu4Va^[ǟO,?,%cRT"s!c> CBd|Fr ̀̈ DƖC&QA 'o-xE~xDeȏ4?0'#A4Jo86ڟx%; 65kk0X㩄"bs'1cޏVb?SxO&^II]z98^4A@'oAOyW:NqB #Kao$SXH=k)C-.tS~d*t7 s]lLx#'̫Bc A+ԫ߉.E } 3D##>u0 `cg7<` ԏX&@3xӎMY e3/@3`4,@cAhfA'T3ZMC3]Oc-ȏ\ -y̎Y/Be/.\!(QG; }G[[My;*i^kU/d#OI;re?=\m+. BUn7>xؓSFSq g>gɟ0XXc|#+m5 @iMP6ĭ-x:)ג:rڀ͈ Y}u1\7)[*+S3τo`ѕ%z~O-<_`ɭ' qs)z&%t3N3A'6<" vMS.A'$:/ T0@@,,/4MaHZIy}c0dAʽjm e]!\>`- Ē"pvbf W[s/LV!<1L+Xœ]x3 :J?2mpIؐo$p p HC2跀1A'$'pvSg70xx DE)8H^+1̖Amo?<m(rhV'&`Y<4Z`'\χ\&?G>8vg????~8 4C6Pλ1  µWM3 LI <xDANU04glg#&!)3v@@?A^')CW-|.5*^8RBdFMm?Oa-r`ypb`""gQj%Xy UeK0{k* _,ƣ`aWPTNRv^s}@,kTϝ~}%XדI@,kQy@,;ʥu2cGyY%Q7; ! S}I"eQ B0ZS jpU\sNOؽ@ZćTQU SG{%.dx]('\$FsZGxWˇhux!ݔЂR 0,wݖkk6PC{XJRvPgI"yVVP@QwL.i+c>;OجzwwAH0DX%.:FTD'VH:ynnK["9@! S̈́pd7R8EVVJ4Cq~39Y4fBQc݁-Ay犣 |R7~znwrq4t tWju_\]FX׶k?ogJ|'*\Z7 Oɻ:4`` `YiJR]Z e#\Yr+~{`曽cR>n5#J*$狭)x9Cem! S>6 P2hE|]Or@}i+o|żtl1RR G! x1IP;CPe7DG5B0X9/fmfki( \*j;ybTtWtp-/s(|S|+چiK~n(8 `5>>0]o##R8,h{@3/Xhi,@*3(hGi{F @T T$ɒ,${Ig+/ӥ+h+5GS}BWB"#oQ!H9C0a9f[;c=1.Infh:u |L󥗨cSG E7&{p3px7wZpnf v'Ʊs?aq݇n! S>J@THe(o)v}M숵EXYuӜuF 8T۲Y2IEm6J$0*Fk_'YU{fw^(HF]-MhD2-?i! S%S"(6C\|ږQrtssdQ NO<}.3*N&HۘV<;`b k >tE]NMhIu?D|=IC?cI| f;.9wpA/j0XC5y'#ڂcǝlFeJ@ Ζ1W7I\ FaD3^GWCMtq8N& !6 yL1&ysU jVE3 ;UTь {!=G 'LRY(HGWOd368VA0`@TMDKH #ܧN҇ IP*eV^Q! S# q7J6uPRB<=>Cs 7\A6ԣfU²cs-C\"ͩѣ+\ǻ4R.bmSa:DR͡ǿs4.9X9!p} Cjn+ϫNNZ  E) J#0v%;6`) 7OޛJ'11FH ̞Ɔ-4Ͳ}u!:TDV" p2AT!rU,(H ZH:! S ) Hf R`x @,Jp /l3h Aj7FƩgN "WlR(=F nj<=G]x*R~ut Cd~ E{LW:1ZQZ6G'Z[R`m6r7g-W/;pny,Ø oE+0ld$EtPzKD:KWO>K_ɢU .\؛afj^).e#:}*(ieq#h4X! S} X vP:.ʞ<-y1+|4 x0=7BE'*#-YѠdע'iN%m2t/[!2łu/m*)_zVZv;v0r{j]7X+#B9Āw}r2cJQࡰJX߸t߰Ge>W5HXQ@yʦw2YZ & IP\γE&Y92p6X5,|-9! S}*d9PX sE>7f+3VS&p׌!nb lA2-Y l wY0')h%G ";9W*ҭL__g|we_=Qj.Fj w*Vb|qg%Sd%9Jwim<1xIbut{\`ϋX9jNT2%۰Jly0AieXŠP[jG)y1A"1Z9jn5q! SeZ&eٶ(D⓬NTV]ikB*$&xa ӝi'05 AFT BUnRlPP!1 V#`LEZ|6t,*` Iaj?S{$fM[/d' E[S=6wu>jlI/X&ԢZe:׼+hO-\[0 S|cD+bJC$)[vaue),M^uZc37X.s! SE1$@3 ` aYcn،N",Y_^!MHN`[Զ$?In-q߼gU򚈆нt 6lם-7BU!3Y> ,e? B»dǸH45#_Q&Q%+wIm.d7ѳ2 7z) orq ҧ%$d% \^qVZ$֢IvPRR>xϏ V! S|1 VP\(0Q@X e Dp ΪXNjσ]9ziz 9 ,aљ)%ͨws )3F1J{DmT/qAзm"4x 5ՉEuY0$ L .l^J¢DӞ_Le5Š飬;,dE-mjOI%z˓= ۳Rb`bQ,IOp҇d24BNEXM?҉J2liEG.+GOt'#0 hHa@N)hwHbySwAHJ0t#&h¼HXcme;`%KD%Y@r;֮[':3d%?B!tjF2QêA+5zB􄇟}4Y~U;&kV].늛0#ͫBb!pDy\ _,IRV0AL##J7 i_~֢صˁ5w|НaLN>#7Pŏ<}M _i&<#u<,1x^b"!#/ hN!LB3>D!M㔅 WUǶX%l䣞a  T[ ^$X5޵8vMDM] &-]1WJmo=M(_WC"5Mrl>5\ւty`֬^UQ.NqΙ iŝtjLC&T7nC,ȆP<^ bFn}E€C!| ),F\\{A@'DRdbT$FXR"8#!n+FW!b<)Am3R@8\8G \Kx"*!F66N+͌qL3OL (?z Ou|K,<S% Se/8`N?\L˜㩈+;17Ȑ_q=x`A`'T 5㸠xo5f%0xFB?؎w+-dY|ㆠ6\&k{6?P@ڭA -@f֠9Ϣc1}A1|t ICNlPb~%j81P 8 t 5A F(͎fYy9$ڄlg.{xwyPHyɓ9<2!5ZcőLp ً `hճ_mU_@3`3"!WcA'DL4IZ*!_=R Ii%ze-Bn^8z[θ[޹57v_cH ب+G2ʣ#lID?H+?<[s!ی% }qCok@3sf o! Q^I2;e$DA'?rO**6DdSeMĀ3@f,$Rԁ;L)>,$ =B9z`-x~ TK]19k: .؝sx|(yȸ~ ']#=j++9:,DD<%2L m}$A'ECx(>|qxpmR?|\ b@OP48Ԉ[te3 9p ؃ F ?;H@3t*`"<$zKcx + WZf4cQ% Gd@V =S@jP*pA '~ )JQ#ȏRlǬU~HuD7D)Mv=ĆZ*O!b_(rO͌$Jk?bDio6$?e2K((qn 1G6_? UϡT7KEVΆ`^Bz/8`A@'Ly3|G m@@6 _9;"4q_1.7)6#rg@@ FfmO@W{*|ń,,XE3A ͸1;ٟc`3c P V?O5cRJ &B#>e$^>>b7m ^Okyg@ \2phʹA't!WFNQ;Ԉ;h_$z5G.bYe7EIrl\T@fctϘ I11^]jfLtpJ~φ)L0ֿw x {?A3_) zO¨.[Oq$.Bي6v  A'ɀ\=q,}"-S:2 8a6W̹ĤH+ϻGIRzo2 R/;R6>hUjdln!]}=7n KʀngOJooHǎ .Aa kNlb֛aX::F}t Mc=)_"0||Q5޵GOad &2“J)=Gw3OMXgk%2|G'p8C{@8 -6LB\C-[K"4#x%hùG#&Dx<x$LY5:S'swsrRM,uP0WSJ])5Ʈ%'.|~S uZݼo$l<Ox `W!jT*BG;0;/n8(?sw8wla4ƖyqѼk/+L WOY82"h[2`b0QtK)r&:u>/@P!TAAc+[ݕ"Z"r2q*vڮ$$)q70cl- ȃ((|)7OtVЩ$s?=MšoݫYek<uIF,>\VOaQT׏f/>?w}C&BOU}ݽxX _C[LcMsY@a$H![!Hlhid2flKcn!J-xʢB>!TE P0 zȲT u զC: }ʬ3 ZisIV +\;LM?oi=~\UF# xV7WgC&ۮa&5z+My84jtcb |,LqIi6_/ꖨUvk+.\U=֛5+A6!Oe}CAQS{V8ה>!Tt:bJd檷{Z%DPlڎ/6zСu!3~K[QIInKU Ի `DLLrWNbӛ*Xޔ(XIR$hIO/<S ;=\w3p(C" Vv,O(2m]> v(cF"kʩţ'ZO-Vv[O[N4ht8R3T4[DSC>NY$bKHJd`BŽ>Zh:9S1x}C!TMabPʬT(fVu&/쌩zO2]ݔEkP}Mmc>*j^,$ΌƒK(xe8߇x*xp~˵hK%TVR`I!(fE8L1ץ8x#*_mna=jo)ƃ$lq_xRi.[g3&\HeaFm:? 4z/M[o+Jyo/o5NAogY{Eҡ@P!T= J C„7#w*K)ޞ^1`q*8e;O۳^3](I5AԲ~; K},Br(| D1=*uo )L0 B\Ha2Trʫ^DkG'!ffKH܊2lw6 MQ`©3KQӈci*sK1Pgz+USB kq;j`nqC>J X:LہF 4}2@P!T-Fd@Xhj~6l!*U’ A$Hᎇ,hrGSyWA&8ؚd(p6JU^磕H?5M*S \j™(øjdJ߯+ V&7HB)V,$bqCc$^MFx:OD 7_30 ,#u. _f8P ttmSPHW Ur8x+ı _wQQ+(³wl$I$!SՊL`Q&B( q1Uw8Zt#ހiY3V'חF ]KG d(Ę\nt#2zyŽ#hF d޽URf;52f5~1AA&g|a3HTCkb"S2Ši|4#FpZ#:܆ dMiDێ㌎b0XȒa`CY(Eo*FМ 3A0怐 JjVm}>/7OmQ $m2Ol?af Ct v N *(@$pUWZf9hZ!.P.ml<^ ~v%em J)8U)l eƂG@Lx--֬T(@:Y]k$|3)::&*0&A%%->! SB!VjbU\6,NQ?-߆҉MPʺ@uf[w:ȷo[pu*Ev@t ݍ^*Y`4&XHpv2%, +^ \)Iڋ0 ΙD;hJZ"d iBcL͎1P 1|< Gt)fI0G:ҧzqmu}VU{NK_|4'y9@! Sdk1!*UHNK YB(^(uV_mJ_:kא?Y`.S_nQ/GxWFֽJ0^=y\ڹf,@_&.:zGzok1^08g1Utpq9TSYYBn9g5 >J%_S JM!WI,eNuY h`Ql :`'%|iR"kUgQbAhL$o"<Q$NClZ! Sm`Dj*h.A^v^zdTȉ`WPHJv8n$y ·F)%〈,Pfz)OCA/4KezN?58IuvnzkzZɸ0Kˆꎅ6A: /"Ym1%(LzbC9T%5 > +$4Z J`1ʺC8N4@&ܞ c%'UHX! S4W|LYux[$aJHj]?]K- d#"c pc.6іGvn rgAu]ϩB$@EYct0b?)EtHVUDKH wK #gX2 piuӋz:bk>֓m\tlwmTn69 T@G[?Bvp=S?( Qψ)@ U0[PL$T F*+Ў[u1)P! SEj9r ,bZY-l/+iGz&45((ЬĔ98U\.gV~tzY#۷ c)U`$_W )`#>͈YHAMGwb܆CV{fK2ˀIZ^2c?L4HZbUNb20 B0zp dB Q#9Ck09JI 8|7|2$eE8M5utDMyiEH|Igxvsߔ(wk8! Sq*" H@ z6׎#fmnl6 >>JSHKauE z2_ XO6!)i6vKŕ| ۫t˘5"I @ \a/w/\HB3&= /^_c  F;n$l!ᦛuƂ}y3牭̿l -9Uz󄸀UZulhӿ! S5Q78$ wWU@{1g+HlE#mSbMh/I[Goq@mWe`a XۀNH1&3mø|q}' 1 L  >;@|tf ~8eL>ݝ$# #M{@avxIӴ}ó'xûXc@vx gh_p7.2xt a !&N ¢Ijg<VLDd" Q G  p/"˹i}}9T7:QDd%FЅڦ!ɔ&AVvAn gNݟ8zkc3SZDW"̦P 8__nYl׳9Cud"?,C aȭ}U"t̎.^LƋG +ahޮK&]Fe 'MS}=͍݊V~zlV~Y ”! S}$KUdB1@Bs mKXz&hÛ:.okWٯuykx_[% rA̰ݛQ/`<?f1>18@A\uHM Èv\ w9UXtלea#2¡Нw>JD\9?CT^[J_랺wwZpyCr Te~6QMd)l<[٩lN@: !meħ8"wf{O^rK0S~@#lOvi/nA±wP , 1lD$]hvMsu[-rE b!aDY\,iwXS .j*ҁjR7%hʯ(ՑR膟 ;@ȗKGqsA''|O>'|O>'|O>';W>3~@@P;+tq8~YN{~-T{@M P1ꁉm[XtEӄG(~ ˻??B ) " : !,VB`oomGa23TD֗(#s<}9-Ѻ(lM(RQ5Y^6HvQ1!N_fdL2B߉. t\N40OPC >Fz=I掦XZ -$-?Ax h~[&f$/$І)l A'yX36v٢ :e&<myZxż[S@Kd6߀y]2,d }F |6#6#8Dpk! ~G퇻Pxd^^/xL;L 8@,⣆ҦRA 'LaAm3+ȴ2`eWG0O/kGml%Gx ͈ |>eE"0-͌֓%6*x T)1 c wP(d> 2#=A94~3|"{z훓~^JHle<.Z`?A@'o(f.f$W$@SKo*`-h@htKQJ#=HD&?%6:0L͏Ueh حXqaƩog"_y; y_)sM&M@3x^\gg^LppAiώ4Z8<3ЀA'AI,Ḋ70ĕ@"H87QgfVy3b'fegn6(͌&FdėμSy%C/?9xx(u zZkɀZ1R'-}$(?UTpc52#S#bvLdCּtA'I(O8BIta01ޮ  G,rG <x(QI N b™u[srAWfd߷I0K2yxSN_yxNdj~#`{ #̼MɔffD29fA'Q pFE][GD1pT$1y`y hGl) <x(Qkgvc2,lQnup$4#lL*J?3L6ǚ&Cp i)ݜ$_36X \A'b@] $TpZcTDVf#H{D?#w A5<OP`)3dYB@.c/bM^LXG'bxgNkSȹ^}_e}%?Kސ%OivUz#|Gи (MHF A 'bds!Xļ`SDEw>R!b+B?qH}WAl1+@4`[0{=@3(uO|?|L7L~ |fxoR\LD GZ` ! Se @ (:8o\plZmQoikb&5B`ئ .05޵C3z w^owЃT H SҡN0HsP _q-8.J:@џhj;_Mc^bGi[|/ay]Ab0(Uy"` gD ˋH!;jN".IÒt37! SHa)*$Ryy`p@BVul.İ꛸=/R(l+NCw̃,V5F08J\Y rlmH+RD*G*v`s{̰SC$9ZuxrLVGl2khsH{O+L*SW5u pU>),VoVlk! S>v%B VZ,Ƿ#]7A;q2;,fx @P5/|hQE&Hp`sIPzSzzC@uȔhcŴ$}WO:M61{YJt|FwL6dމnj~*RL3N\LV`-MP0,-;4Ϸ3O,g]PEB Y T0༊N/phAu):?ds! SJ0PQE.)vAR7Q(BQ=4<`FPAp q@al^Ƚ_/~7Cg>N]P sBhH ~5$"" `zzW3[tV=4jC@( b`( ocwIx8Յ:%~rc#Y{/%wr@HayQEDcE5@8`ޏǽĦEo@tV5'o찤 ;[njZ)6הƱ|=B+bxkT؁qFuW%(So/ .?#! SH)h2SM%AC1@bOۨ>n4PJvjjlMVJbc(Uql,p2[+xnaa=/.9t̂[\GHwY1xp x*3zX/y3 M]*HhxO*.}޼."b?Zy;qSlXWwQۈ9+ VdV0@s-ƿ/M`4{%KHKqYF&>qg-pCD肅X! S-L7Jh2qjm,"*PpRF8Y&l2`?&gn ƷFȢ;Um^z=k0ĵL[,$cC3vrpdl:XR 7y90 IBpMu 8@$28m;MtJ Fb9@l(2V {M:/jlF=&8wiDi%!+8T%)$ӦK]f<%v jkr!R QHjV.wu?׫k?! S%"D'ULl @g,OrRsdZ+罹ދ稝ȇeF%CLрjl`$|͸$0hi9W;-ʜ oUB=1QŪ 1K9c|Ehѵ8KR\rai`{q_*C`,/#)hfIms4 &anJ*R honlp/5+~ '}Eud5%kBN!`Njg)AК<*(TOx@*,2bԔ66$! S(HʀS` Xsr"ЮPa [(iT/ᦋ'R!7ߚ (YrLK_-[Nқ"~}P.%_(M}(^D}j`4x\ Ê}P?˞:s2/&7M;a Sԅib)ߟȩ"kС]9E3Uli&UӡMWu%tH). 5]W u B! Sņ)IՙA0&IJ@9l<;+! a-mPd]]O!Vl{; "U8@7ӚnUQ`V(F"0, w斷 yMcVi˸2ZBt (2j)iZpd2 +.U(p! SMY 1^@<d)UILh@%qԣ&Wd(g4 !H; Ȅc|BgX;D:V*| {lc|ג5sz".^Ya|o*(;9 WEy9ꛌ&) 4uJlFDEX>-<-:aA 8tZjOKNb0)Ӗk .K(&Gj! SeX5ILoħpld to`(U\ytk`s7^{򚕉J$*\+B^Լa3 N)"-TW^:b/l _6 ǝa;%̀o`$6+_Ȫ=Fgə|\6Ba,9 !s٩X|rY uر"򷅄[m E`!$,yN͓65-D>Uepf #-|G,Xu*O%'l2+w! S=nCG] yeCoƗq.Ȋ¹2-܂uq^ fxXK!co9Ŧ9Z"KJ:PiR `8U#F(N4p U:QH 0l{Bf!ֈW^MSe p5"pX`EI\)4Z2UPc{GPXTR][ tz<1g`V49! ST1ı ʝ`~cl.T_HO-i~|9c:'h"Lﵯu}y,u+ht:ZDž=B$׭7N/_RG'IpqUP/ Scbwd4,- kyG!2K0pCls V;+_ 1[S4' P6bg5CR7c: hEh\aNԬn"D!qs˭[oɊ-1V <ˀ! ScL$C1 wZ%3;Z8w[C@p˱x@xƩ3/>OBA2MЦ)kMeb 0 {zDP}edy,-:>3 Xqx!*S520F^]-e-Ys@ytl,>M7ojpsZX b7+Ԑ=<=:öY뭔#4 ءmxt{Eޏ'끟9NaD1-\ ߯j`='a=>G_9 2G`\j/-W}NnW@}#/aPB39k`Cz,D e-Ys@yt󂻰qy IP /@ C/IV d)ۃ%0:%Xג\%XuA5]AQrT?%X~B%_K0%KSPKV_` a _O]t00A`'$< (Lx\`:@Zo0nB/s1l~ylG\`< !F>&MX W $Aj_-zoKjj5GsO3319S'!Y~ OKpH+W!-',eD@Lo ?gZ_z ,<ѿ@ )op߽~17nϔͩ[?: nf6ZE䆧ϣ?Z0zo༘7mz~}w=w)?Z[UՑ[7J4*j@2 eE [_`.BA!R pV 07h@o,"0m[ !b\}WoxR}?u p7&`IxY r kr$N`^YVO!SdAHHٰI@+&[’>!Bp`?o`,1,Oqݍ#xO@@0[@ d{H ihSå^TghW& 9`@ !%|Ã8+|ZDi)K u(u !?M{`BgyoGQ{⤪/12Cуþe&&a;] p9 fB#E7e0ye9^/ߛ@A0TDL~]pp_#NHl .ʼnwo@A ]:@vH)c W~K؊R@F!X agcgLԃJ~<2QXf˔=?[!aȌB |i0ﺄIUV _3^뮺뮺뮺뮺뮻뮺,?]u@ * -SK-@^0C͠o%p`~z]yA)[L&>嶄xx-+{*w%fn="(4*s7謜1#1H['(+~0bFr#Xa1%pt> TITR)3+:ƆSYOCW1- }þ뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺]u]u]u]u]u]u]u]u]u]=u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u֊Xz뮺뮺뮺뮺뮺뮺뮺 @|H,*P e3 <PYK!l#IA֕}j8>V!ߺef#Sߤu\Sי]u]u]u]u]u]u]u]u}]uu뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺G?T h"N8ڀ14Uو<6ӻY]@d5- _π`qYA()X(NB#eXW?2>!1 y#Sza}ˮ e]u]u]u0F$6p7H0F`;޿`-@ׂ6l6@`n?4a@aµr4ġC-Z?/ PW*@* (׿ K𯛀#Zx<<!&eqeB 0ĉ\)Yp @ ,2ԎO{xWs33A[#c^;LIn0oɁS^$%r >aYv (y C-|ǐ'@rQt~_.{臈@8oiЦ$&B!x1¸'7[@p !pd ǣi0P`c, MZ{J}?!F HlL&͆ u3Zs0@2%0 Yl%I_Pf6oDLj!DϞ?W>U/:BN`7 @Scx@L2`8Y3Z:z?\@ęx#P` LS *x~$&.ܔ) rg^!C A0:?0!133>ôϠSN 3 yD/ Lwos QJXI&^-9N g#2+;$0{  !32d: #dLlLFk6_/VL 0"1 Ȭ|^S;^[a2)?DjQ^`@>Q^1ԑ!zƍ&QEk? oPWo99 a(c-]3y)PbԬJ1xð`qC 0mØJnx8Š#?&&IS;7}P o^4,'-0An] P2dmFN/BS :a0xbg* if׊T6&x`!ߋ0iV``C&8~H#ЅRgu[xNиf$ablD(>Zd9{i{`]CM@'y P-cFQHb5l0"#Ũ.䃁LOYx"\#!' (:%z.E`\7}R ?C&?IA ,;K{~,D1UҸBS Jr.(R"òm懛 -P $&S=BY O}[E0rtʐƔ@D=!e Fmpw=h M$5 QDJ1!JS , һF`K|?-,(Uh@BBC?޳B&  \ X,}G cj0YPX By%GlJ)538,S<g gbw%klpW/d oXC-WYE{Bd.]ٝ_='Q$bd$$/*`&C [mr<ժQz䕄?8N[4 L|)?Uߑϰx8s*%de`Ŏ7 ~/~3ykuUHx"1t|(b;ᨵMh,3ÜaHv4ipuS^8B ļO$@3S3%yz S^hAB#UX'(уBQC@#?_OAY<-V1eiY @c@:?10 4@+*_C lg"p9I)SVyG.Y$XeiZs3 рQ`yo s ާ9$-Vͽi!bkxG< F,eafV!3I_>/4o~?ā$:]ֳ œ3{4Rܝ4?3G  k/A[ wEQ0@},њ<[?6C (@H߆,"&]xk8t'.*oh9ax7wŶH2 sQ!4U]cl;Ђ;~ 'TlGs߇],oT ;jMݦLEA1P%THAm?Ƿ]E"R=xS}x3w !Q |@Đ xNi9{)~]U#pkNq %?c_bDw{PJBtR A+v$DAZG w]́6rCFYX}66' ɒ <j"ܯvÔ5=H=(zp3êe+d5}@Rap`W@\9.ttAd =@\]Fՙ.9_t wv,b2{X)3IE?c4vol6$+] ЈA dݛ9`2 ԮE﮾`Pl ŁWGcP} Hhw/ȡ A%?EOgié Bk5ffh~3f7EΟL@(fz0\r{t,Ց[WHg?ρ R4 0=fN SS)s^ٗawd@g@|[`Di xzCEfMsj R8ߢSADd NLDbX5iK ž(UԄa`U|X`Q~}'}Ÿ|\^\}4 ;OLP9=ҀS] O1hDhPh(?7u(?#"gW"xjJ࿓}wm$i&`b): ScM Ci(oWv$`-bs"ZY8=K8 V9n0 |5~r.[ & L)H?AWQ ,k$@d%K'X 9̑8m+sQm $F(ېbjR 3/䛀2͑^ʢy7C Î0b *l,?A% juaR%СkH5lBOAVƹ4P|aSXH[?#5w_Gdib{t8]3+,7 ,~a~c͚" *`ab%[+1*an6h./nx%@mg _v7|\Hޠ)ޕ!1@X"")Y3;마O*Sv큨-jatiB$9K03Nd^1ൄ;>,4DzwGrcf~a5eZ42yk< {ki +}뮺6 A塕Gg}44?_m(#∙Zn%5tU @O6/Tƥ}t9LGC?E1.(`^4tcˎ UV^eLlL8  2Iwq5+V ~OH+]j/[:fvo7 #GO'J݁w&p~wo c A@')M?KI.گuIr pv(E%_)%-B!kOMNgnzi@Coc@&o 3caĭ`xJzR)j  Ȼf!Ae0`PWsup|(1.O37 I?zB_-n?"1y=zi0W_&zLt_&cA`'_2x%bT(8V#= !dJW$S5r쭡, ov6m@f0XLu*c>@0&b]y"yCdx C/#Lg3K85LJAL~Ƀ/YaZA'>O?:JMDDFBQU\ X#7L|{y3ddJG|7pN|>X ,Ͻ׭3'+4Vq`\]~l">dLGڟR@TW*"f׆$2 ~.İ#`9,dA'oS*)m?*訷\ d1ke2 3(#~[A"4d%``fDg˚a/ *~M͊ë 1Zt?Fwf>Ɵ&wОa  !>u@Ăoo2Ni%; RL8A'~ >SpD%e/-*|J"Bx 2/E!PɆ*N>~t6\xH +E(-VbϓX ~959w<Fx~I 6J^#dqdaRc0>8`A'LK<*Lhs~ 3b3ofW|̹BsB& WA1|'N8e<R62Z C*gA'``H[ T,>! Ÿ.G6ɤ)8{-|lUv@kBpQWus輗OY SA`?!=9b hyb1T?+pqf:s  T^'3x&d31`#?GgSa?G´ֿ ³rT7 S%Efq6Yy^>8{&!L?(5003^9";is*LK&#%l2`NrhPN 7\ A.Sy،!R ?-2dh)t>od\6]MV΀2%-<*#@!cʙtBs F(dQCV|bQ<nk&\$H7CϤUGV[3:Qa(kc{Ǽ~{$TqL : %OVs.&1U1qϹѱ´SPؗrW|EZ18T9JJżjSWVCB\3Е ?<&7ÍUG]æ A9w:[.YBU FjRan2a4 d^bNJc0_U8M Rl%MsomtAw/r-- <lu_J 7_?bYcs"((!T hCWT{P" V 4C=D+LΈcR )\~5AV\!I65)g'wq͈xLlf"<Fj O3,*UV 9T,Tu'Pꗕ 0&*Bҧԟx.54iVQƚg'" r4>\c5T H3d^0n#d/\ <.=sFc=!&vSZ3j!Te$d@ RunuJH ZH4s.Zkx6:xӲo 5N>FJ)IŲ3UKy2#ȚjG+iyCO\4 4L(4[ a%Թ\!wqyu}{MBJ:4kvw*>-E'-8cjl9ϱ,Ѕ&Jgt˅iGPVt,@.s:ODܧЩh=(skpm}C!TE1D#"J Qa2IJ3B(&QJ?A?(wb &Xܬp "Gz'a0j`Gjn)0n![ R h4aI7zhEI.r۠`/U˗.t&2 sR*+%A1D)ѩu5=VO.<Cc. F'~|,☚@M/v@{PRUe7 :ʟ<-fx/:cȃM]-b֌;CbL!TMcKFfRn+|"!w.HȸݧOb.iJeac&l}8.[NteYa`YĸڢJ69 uRo1:TʼnW"$V.[Ww:`ɉ \L0k5iJ}HLdO]iX5xY8}-aV5Bw-WF"Rnmp^<0Iw W ޱZԈp( ܨV!Tb#$YBu @<Պ <>b  *zq㌵Ӗm_) F IELu` g%`1՗OfP|hW6v gJzTH= LqlȆ\,XPJ~t].60P[=*bzb- )4/'&4)fN+52btQh$:nP,@`AQ!QS&Dt>M[s\\ݵz+ژ%*(hg~Z -.ʞXh!S"0Ld .,Rh!(-8}&r0xu?`+JCZ`fJE9fX74 SY #ȳNo!fU@ s$D%:o|N=8dkȟ'g3'>THꌒ5re_lAOIXĥ#@@^|kK&;ITۦ B[%,.9vC}ٵNQv%Kv]qL!E]r* BԖZ_!P6Cb 9HIXf3OhUmn5B Y9k*EP^! SDa%T (E )(cʀbb͋b\T4͎8Mq1KWJ=kg:b~H~H'A,8㝚,STUL櫳'bBaUV===RKL!ֲ}{R}u}2;v.頼WyQ8si]d $YRp 0zA+Â+%~1]jۆ$!b^Cא6rHb]2P8T4vk8o9@.22Q.Qk`R1! Sa" !Dq-rJHҽxSjYm{ |bx r+uCZ 5A>W耄4_n-r~{ڵeϹֈ024T n Ini!|%KH^وgjc<Jʓ!fG}Jo ݬN&7xvpxq@^2" Vj Hlp9E3r uRedǒI\ܙk^LX`P"@@:! SuCLp(BKWXJI*Lhk؎^j 4.em)O Aa{98掝 OEKUiX~t:Λ2] o%j;U|B]1A뜅|o/#8 Q[JwξډKbĬ8UI*"=:0H * 0PL6K\P&ݫ>`84X~\>BcK:vaQAɮ,dZP! S"؈2HStFDAVhEVH>am߇>@Fa}W'UM½< -i2`qKrnRkȞ4N),UlAO9 ԓԧ\fG4=0AQ@[b,EnFk Lz@.Éwq5lGVC悏xm8! -[AL*%fI JAl{ t!0@6LP`! SUQ@fn@@[$XDJg nk)esbu~ob"\ZlfOC۹bMٓ2r,HĝX &̈́|*gYY286Hp%S pQdHG}W{jgoG:=ԧ$9hgXh&JͣwuTO3B8+<~ =BW%|Ιin ' J*FHQ:qq (톨cqgs:n҂ X&! SYqG` 钐 ,s;7ϖ>e@| %f|g#{3kUF:!{gp4=w.qx~37?mr`4;C^xS `7qg|g D <@pÐ;C'wA&`|C/O /&w Ϡ2 ϣ!wFH!i! SKڄ DS@A1"sb>??xx}&<= K|@<=X G?l$H=q",1n=gݷqozψwuo&F~x1]=ma눑[XJ  >_8 [cS qHxzp Ta<{y(,ha@? 1i0.ϝ}ƪ1': I0! S=Ue(@[&a q k^ҏwWJE u[E >nX)Af!|ǯ\ìy2cB, y^%y1t JuY.e ^?m ,wHɣ#:EPS=UWv` ;J ,J??X,{n='ѧOyo0o5?(8$"LrpU_ =4-l^D:q\ `lV:_y-{dMq^qir! SC4# eQP* BI9ԓG\Q)?Ǘ-3`m0ֱnlI1y R=N 1*w 3O.qXb.춡58g"3Ҍ ={/ڣisl`As<@ LWwyPGh%q&eY#$z0q)9B-KݾNcͿw`&ZB=0tOxB~RJ7D<[w|W' PFLTUz[Npz'(A@'ɀk~aGK脴\h#@6#xqqqqqqq4#`m&7ؠ_betAs0?  90. w@}; f[,h.A@`Y Gw^Fϛǰ 0$BS &RBC|cՌ- dr6OMUdku.8o]X0ܙpaB!q4H+{&fR W`,W](Uz9))jXH қL0mrִ s*@F 0/Zl{`≙}=7 qÜt̵+Cc픵¶PH.@4dBCm`IЭZl+MZ')e)7awka3ty1Dx a7L"y= p'Qϡ'|O>'|O>';ҟ'L@L V`G lH\CR\)P`8x+` 0 [R v)}P p!aN4r ;p! $7 &FQ{NT3w𛗞%~΄H~1g8 V'~P(Be 47=*#@>CS|OeM0<7OjaX{!Td5/ sXh64`m8 wx47~e3~O`&IYOVk ðh xA'yX3J@,ɏ T<)hS 2q)oo2z`)X%ȣA1hfe=Ģ4#fHr>1Mw_DHw#S~6y<lFڦ">eϒ ai2ɕt~ ]7/ d0Gx?s1W~ G$ 3A1>6/Z/3~N6: Bdc21!nu8 HA'%3)#sQ~ʫܣ ]rJ'&d[a|\I) CsX#]/tz  R[ !Rn08|'n0@?u @ >ZЂMU}r8)kX\!0WYFɐ:܈ɑh~!+T%t5~`8xL}H6(w~j H&y'w:óϵZ:[\U_4|MP[s1u_6po?ݕoy~jj[guC$QDfHk_z~O6ykWzmН+>j'$8؝&[G:*W7}FRXBgwwcm/w3={ۿw0jL2 E\w=r;L֒MRI_=@;#AM4.2D:'11G!@PwE)%}_yeuLM5vS23q^Ke !vX h=vw}"pbjt7 6KkyELZP> lgFe8|Dq/tcv&8q+6x4U|VQ w1mU Ab<(~&`4چC6u F_r V;PN3ⱗXQx j,2IU!4zE|$qYa4ո}'|Fe(L3/G{c4P?ZP@?sD`|UVftFUⳤPmK\Mb9nRTh(gVʐć>y 1(f|Xr^(D3>W~&h9#\WwQ0Țu2g9H bAP^l#j=c#< =?r:ć{ 8c~DK /@F|?®UGLU0|%ca1mta xiazqU!w/ ߜ]o䘐PNA''%k6p~oAOx* M|krQa$V` IT?Q_nt~|>Zf9zCDžHsB]]{t~^6J=ə+n.Nb 3ccCqɋy3~$",X #?c/M3 wec͈1 m{W?CfSl2h9L |ϱ<éJ‡瘬 hY :oF\AH6HoqK{hA6CɞEq@ LG!, kH?G3A@'GU@,LȡhaJ69S:/h)_-WO&+6[pa2D$ {"}M8r)z,31lQUG߀\,rcBt|NX$%?G ˯5o$.&2L3! Sa&nl0%4ī-)"'Vsx s_CޕipVP%z 4~*y;~N+þ^@^hKJrW{hs9Q:@hSOXpuӦ'Uڋ8yA"/P7T)h wc\Xެ豮;]; CpZP cYUXl-!\,֟`a-'j$&RN󕢽v3"5^ߩOG4O! Sh 2KJ&PJN[N5spYZIMMZ5x/S-"pd&"V>|fAw"ͳIY'/n򔣖E?R޺MHN<`#RR -1ViG>>ݻuI MUhL `HcȜxug> Ɣ LtO*)V"KnZ/F|m!>C! SV",D8R2Z=RI o שv CpNRwE@v$^ jsܐ`ua`;)Zꖀ/S{"rjVr-35Xnӂ p_ϿO.b5pAd'⿬RQW;f*W, .oJ , L@]YXaq!l8}4yƚUU !e2dvq9w!yF|L;! S̈́d>QAeTB@Y5yTHxΛ@/"^6RC@h N^ <^giOT ΅/He; P?I-qlڛ 6PAgn;:CexpUda; `Tu=R+\d+Bx9L1/TZ:$2Du_@0h % `E$N.B CdԢk[^㩢u(jZ/a! S}:A!1g:TRRG 5ک H}r.x(66ɉ|Sboq3D=yLCE; W$hdpHlH֎yM!$XrD%;L 40)V]Q5#rhua] o).f0j`b5Kϕc⎂) #A`'qҰ&lԭ6.Xjn!/CTntlnrg3Vbxn! S>PH[*pAP@`vhλѽA2bp}^ܫnVn4>Aq?>7:2 EO^ۂ(fkR Qfv0}vieDH2wC- 2OtPw 2J @tWkctahFՊ[IJY} ETI$>089%d n] !cB9! Ső>cU(QMp,XPWHӷ+hB 8.>ƵRÏ:ED"]$: h>EMsq O=G *U(b)ˁ07ak\}LN TWJZz@7QN@4X (6Grc>:G +bƽ:")n'15V]Uhsm+z]^^.;wWi^ƞ5#s! S>F Ve2҄))`ptFy} 9*`bx2G~.ȍ͌Xgj\@*aМV\51| oO7(In&`@xn=ƒ2UiX8;hD}]Ik-T~̪t zjVK½IpZcA+;؄ @Z (DaF7Uÿԕ_<-7Xo>5-"@#EZGJ˩>GoސtӨCcY}QJ8%9! S$n*RJwsysp*l;\5$4fZ,8r|Jo沤<* P'x ; t]gPrȖ>,^Y2씶UEMC%4?DAeގ#O+D9uB3XGu6K񶍐H|! SDLd VePn8%@IpH ]b& αJ创 I~7=4!TN{v+eM%/Q` "&y{'{77PR71b0fo9 Eۅ h_0"ӟAwU^Le |oi+{2 5`RiLn/lw]G/_o9\ +~6\) ^du1\ {OYOmeo"G;-NWU_;! S';J,0%Nz5G[=i"t˅D(OpgwP҆l%#;Scx6uH1a&p7X2.@ddXC1;?[ .tg BJV;eŦ6ųl̪j{w%b%[b\Ly$c0Bpdy(EPu-Pϊ dHeSȕ:N9L\jd! S%- r-͹n2v~izn) "iʵ̒w#Ym. {@3@p1̴š4 [d|Bfw1hfv+]Oi(Bո^ִr*By @4AT4(0 iU-$STQ$>4UT5IzQbtIB%2LAdf [OE}E]nӗ~2n=P<+h ]v*\xG! ST. R; zzh6`dV̾!LHH]ԕ2Ϭ! !"5yGŗ&Ń2L{ۮ0VVã&'fW32,zCIk-, tZpdZ'#DŘ ΃ZxGRO%ixMHEX30(!`G 'f\dh:^ %J/j;! S\,FsC` 0 >ka"V*s=Ŗ'rnA2oLPRԳ/Ì #tX,@QLx)A "?yɪ;vdS!^1Ԯ*H  qq|ܐë+򐅪#^gN,qBq=WĖϥ6hL&p0{ҏҳsk06U GQ f%s08lVp;! ST,0tD6&OFֺܩRpBf/TDHt:DFM3'1HRdY܁BA W[T@`dާu,h#QihgX$ RPX/# H`0[O9@+g}j.)t4y=q^ԣUOݷ%e8 Ghw)C_ԥOJ{Ԋ݊ hRHA'$64:h<8DE<)6oaoÄY1smt8-(:1 3lTEyP LM&`K4# e7&Q'|\@)Mڛ=_pQWh]ݰ\H*ɟH'&@ػA'&r ŖCKDEB-@ ^C]i'qyj&x.y oؠHpp_t{_8{G@6G^Q0Qxx{ 榭" QU cP Y6 O űۀhx"YC J\T&L|?B1~m-==#U#PKɕ f5x/s%Xq#M0A'$uo$ #$(| PKD|GG,Ww!b%r P[P(uDXy^j Xda8q(SX| Rmb6s?6wnf":fo\(~1Y嬌|H)G)c/pD90V~ ;2y|',kbQC/L=27|cyvP7TF~H/j[\CzScɀ1Z{눸԰o[w&翧@{ +lw}\jP e4]SoHN1Ry_@礦_o}}y3 VxԮA 'S`}@X, 8ch2K|G>L";B 1)?`>d#ƿW޺C dmO1\XV_hH6%˫(KU$s?|խr؝ro~ IQؓU",DIfA-1@3xg 3i8a)@ ! A@'V@złԅ"?Mm5Yjढi LVl[IK&%žP}/Y@6LgRf߰qwߗff4a!L&8,jeuQP/OS_p+/v^ P C^XKZ}H0ƳLi5߸H9rϒA`'|D%\",UkgX%PC_BFh[yΐ]Yz:|u{z6" tΛ^tKLtxSV$ ͌1Lo@Jc/A0?cǜC~ LfqƳLW|whA' LB`_|F|?^( |䰄Iq"EQ@՞ zst'͈xY 3bn ʖ 3({?* o\F#pN~  y'V@w> >A'=~?/]AQ XS&gʁ6X-\ g{lL7iL^O P i{k̆P/wcd˶+c*&fhV*2OJgf!Ý.Y0scb]yFX dNqt+@A'!)7- Hm58Kǚ4UF%}q|Ha] (i\g͌`oN ZIT/ÈYb ?AH&xʧǛfwrtAV]ٺ֔tFU)LN}1u|A'#7?YA6 ~ p<_5WX`Դ-!L>mM}| @ff8SjCB9 ;gvc滻 'ľ 8ee#db A0`\Osf$ɝ9Ȧ63G-u( BA@A 'b0N|eGϤ p?Oȍ-U/B1T qV?@[:cC^M ToPaxb"RFxOI{ ?ܥg<_S,2 ! S\ SAj@ Pg@txfn_IG=&rg%c =@=k9^Gq@Kdu&!p@%It!I؅퉿V&Ä~\}ӱ>?Y#+ec.NC@IvN@|)_eEV 5Zzд߯J`(s/u:Һ >}{ ,LH;94U'>Mb6G{⾨إXDΚ7 p=!*SE0liǀv @b+=K,Pm8oqFZ@ _,2P@f {PNjNI, q:[;LV@p90\f@)&؁w߰ntB y1qH]u5DxA] sPgٳF+za,ⶀgw`4ZCs# X-cmng8>1e"@vÆ@$@YL>/@qhʒFgel>2!Lm?i2N шΚ5| BDkWUl R`aIna]HxI誀z~IO~`uScur5>.Nx^`#q8{n7<^X[:RbMAA x#0+[35NF(!)AB"쨺r 3f̸Wlk^ D%-mN^Kx_犠Fm^X 8z !LmJU**f@j64`X-j!_IڋKiLodA0P@ TD|wUF!<:9->7'\GY9aiT]&sOZ|q|Ϊ@d"fwD/N⋭]vE:qIV;*!a؈ò`z&9p܅%b`4%LC8.84i+_)|ʵrŔzR+&rXPKFfz}#K&A2 ?M{.75.=C2!jT-Bf@XC DGP! \@|M+ :)eY=/n+1E|8Ajd|[vZw9<8h~zQK+=[aIRMn]kdmk_%yCWn3-kycp\A\Y _v`Gi:x6{MW*ԑA44+mԖW'[!Tȃ0d!77\=J %"EzC62&%%uXZqN)&nȝmI v>o6砱{ Ĺ/HRL2+l  *%#lII)NżT33Y.-lk=zkYhKk[:[YT-A77@E>0sKTj"E!&}fa'MN5 z$ rf1~) !T>Cb $+&]*@XN:]vhw͓IYR&j OQ &ExP&+zϙRdTC*:]kUc(8PJM ;*=?_RЊ2\t ^ԗ [(H8\7K QքsJ0BIr¶ 2T  BrT{lS,с Pj3dm?gK*F}'8PLn4f=:Ȫmnir1V*[{PUäi]!yuڨF{ю5J_|%G4Ny}C!T]ȠІTJxULUYDnC͠i/7iҐr4|FL<*e;ϱk X2C)hݮ FJgV<1 d˻_& j eZS6 ={ZIa>'U^KP] J@/1D~eRtRdqVɺt_>.8ӻ֪|ͮ2+ ;:HlA_Ƙ_0>kk>,*|w,XmϚXP7kI"%+!T̀"T8aR `-3qܑAmU/@,١4B|$wЭ~3MݿCco% x'mx\~楛2ښ!fvd勩:' &cdTfi4ƫ9Y&Ag>M9"0O{F @A_L*֮PtB|wz ju [ӹkQN_CU'/XGJ ÿ_Fs?鯿o7)QE+8|H,!TA1 ErV*ҭ m)HP&wO͝C,w)Y-V5Ȧf_t1buUMq\m=EMv~zGu : .P'zcm05$69 /%kfO jP]8ʂe5-!Zxbeyݛf@=sWpxEtJ]1;֡uJE3@wWOuӴm r=Y^-!B [(R(թ2MJCh>?!ScBUY@X`K.38-|}UL33̼.Z^U).$hDFTkuz{.Z^Uy 󨑄?Yg mO:zfgu`i FWڤѣ.$c8cDƊ4EԅK buѭfLm7Vt<_ƒ<U3=tE##&*E@d&B5ލ&}BΔjњc>y]ogLN@*eaJ Nvj1mW [G\V隹`! S}11@ÛȵV,b":Byt,;HT7F6d h0W@f6jƜnPJi`{I BSu8c̡Ct(>9x =]oz77VrJB!&=2<r5[6^F.Oxі"+lXf@0wK#ĸ隀9т+Pr [#RB1N>?$b Ɏ{ <dH!ȫU}㬔[ gyJ9(i! Sͅ>V ~(ȼJ@k%j  5\WPـ$mZu0tɰl /k? Q& ٛȭb?ors9::h_,`<=XO!3^uE$W{֛+&bRTtC=?CpJDG9HofT"%@[}\!@-0J #)T;&;j- %Wr feQjtSl8^.! SPT7`ZX2#tVCLc uZz `R 'Riެ .66/sQ]Q 9hRF0LU7y}?1aľ$)B A,g;#o?o̙wg8nc}[gr,BHJ_IDklF0#HhQB-G^H&Bۢ1YIWײuԴzq<۳fZy/! SuPHPD3E KTDv'T7kY=L!E077ʖB cN nB*އ.8 vgr2c5-15TgўI&`O':޽$e Km!z@R8NO[W,׵QX][> -L|~\чw  5±r׽n!$joi~ql c*k#tO˶Zr];Vg`Mixi}?8K8x.A"eVC2"CEtTt]mXyk1GboO0,0W}UPJg A! a-JLG.&~ި @9mGB~"X=!ڿjwt``+o@@5u*,jx ,)+*hlvjB\|1 sw5оxzKE! STQ!X(5 B@AD*&P l,=NvӱbhꦞU&8 $%? w/EǩRU1@= vʐ\=7;]U)~GAe`yu,i^;\0xBZ9aK}PcAϝ Z -g7^ S,"=N G9PJ Y+1=)*nIyWucf,!.S X:0 e9Vk]v&I! SmB0$(*L&x_9cZ]uJ&2G na;&Ԫj+X,/ mZoDH<@T8wsD~̈,& mY]#b@I#kt;}6w-CiTAOQңW>ׇ=70X" @U9I B,i!Rr=)n޿;=cI`u៦'A@'P#LMZl.RQ"=EK1# I!cnw{lW:aL?^f2;" >o͌2q;{%?Ga9s|\P-~0gܦM4Ix/%%? =ߒ% `LZA`'ɀKN8  hxOrz#X>p,;|eVՀ¸<舙1; Bhq쏧60 *^Ks鋳`o\eA]]W'7>H&7'y܌1\QZ- ̨nt2+vd|Ա6csFȇvIř`7ѝ"y㛘|wj" tve v$"(AcXT * VSv:MR}6CS'13^M x0g4mV0V26* ~bYk;gW yZ{È!G=?`2},~8Gɾh}~ 3bOJL$ŵzfIcc Ac 3b9wAg~njs@@ A''|O>'|O>'|O>';?@&x@-R{SR??]eo *R !,ʭġMzio4> Xǁ(*{C s '{PٚӓK>oQG;SwYBPa<+ !GGG9? @8g//56LqS.KҾz"6؀A'P8, 8:A00 4LC*Z#X!Mo>̴>Q",1'hl `DRf wn6B2^ɉoz_G_ ' a4??L!ouerð1&H씂րA'P$aAXD}k@xNx0T\eLkh+*d֙G#c.+f2Z' B-00ߎb'>2:)xﻅr/"/"  } @#3,#?ϱOÄT `y$=¶f_ ] Is!L]_i@Ys^ IE08c; XA'P@oY_G x)MmMx4?0'"Ai81vί!LM?o`o&[է }ryfq2ܘ= iwTlV41s0@3 V1n3g swGb3DyI0L>ONC'4@3xu=`\I^*%SpeA0u@fR A 'P@oAO "tN8{}le\Q!uJ?#$߀\~H YdtΆ`D`//3"&nhA@'g0e&D > -,6MOdЪ!L>|Gy`yζ^y#fynn6"!:p2Ű{]펩kpc zOAX_1wx z?߽z```ňH͘9Y"v?cr9rcSo^LUo> 3 A`'@b&ߪ`z~iӷ KF5V_}Pl|$^"zZ%f6(ȹڈ[%0*G~(ժ(&@_ Sѻ_`;ѡ5zeIa?[e'j%e߲@<tA'`*CT) ?kiKqc^(9eӖѡ|a#޹ Em*d<Hv|@3x_%ߺqN;=y .#ho!){8`⺑BLrN QCURrT@uCL`7iEחo\|ٮj#rn'M&M*4ܨܨO͋뛱, U]ky^8MKh/`jtLӧQH78aW! S>f @Un@p@wTmvw: 8aW0&Cż֯P+M7s@)OFûUJ3yćTIHzhݜor,Ā '՘)mؤtkP} )>' 3md)MV?^W֕^_ל=ҼwKalf~WDac! S̈́3*P%J"3]{~+л̳Cم:@_,gϩ*+Mk~?Zuo -Nt?]Xg R3pw ýV}$`) 4*+d⇪җ@a, c\5܎&F_Qebw0X$!ǗZvam-ҜцY18dR7T+V)T;šb!|5wN-zgo V*:! SFUJ&Kd~n?ߟh_p>{;cCrKrLĊ;:>T>/gSS)|βΖ#݀,(ݼfƞ^iH%PSߔ>)&Ơt3MPՕIJ\}Quu!NAU`jKuibvܧd?0x|3$9Xv 180,l= To̙F r$P. tc+ kʒK.߲) #3X! S}IPY6(V.&b̏KU wS xZoN.* D׃Pa -;ַQ%`7i1D\a(/z, R:bu'#-rr{^9ȓ-az _MYݷzn] )- ;?*fz#6؍gƏ#Gѻ `;xxBᶖhGd WJT3\FäFpPP  8Ɋ`"9h9T'͔mj%WTGF-7d8rxl)? . !Ղ6#hQ'J[#JÞAJ!)Y緞KLT|ɎX_el! Sm(![YAx fnJClDZVxӞ;t%f٠*UmrCـJ;vo;J臭i@kcEJPʱ{-F+QuO npD~7K$-~5}b>"'vK&iA)5йUz]Xկ%(ZlJʌ6( chh' p?!SL`K34 T',NߙV<~m9N*G{>1oNH{*ꢱV|;+B3>?cOlR8PR;! S]%3(RL8ޯsy窏ܥhQhg4kXX͔:RrEeGG%%ÅOӌd3h*/]Xmm@4YWRVt"Mjnբҭ+"VA-Vb6nziP 1f ,1"L #ˆKL 6$v=wK%zq=?x`J؍|ZZVRZƌ9q'i7V`3$<:qIW\\\rcm3oe_=! Sm'P7r+j@\b]PFţk,6s=!HR+4I\mqBYp{Z%MY*NHxTZa{ m ƟJ;F (: {~ó_ywf3+;\/dS˸tpY=1.1lDIݕ0`2x}KXIbAC/,:pwa-,mFB+9(vЙZj(al?2½pg9}n2Obh{.N~e+gPj}F2@! S\% I(3iT@ Bԡ|g cZŮg6xDk}¹3TR2j unu-T7 _RPE𞈩 q(b чj-gc9v0p#Y5PbD+=*LtV('#bD< e-ZUP{3>!d]FsRsFc¬L*ǾD0'zJaE'N[#yQK> NdR>}ӇBэ ITd! Sl!H# jp!ƀ>!0z!0p!0u!0y!0|!0!0xA'$W@+h pFeD`Do0$Iȃ2DѢiq8@AD+uu(j=͐@t/G4?߄9/?'N>z䎁?.'q ³X+ dA'$"ď$8D|DQao$-*E )bަ*EٵJwgf] L~/$=~kkE~?Uc&('} F+rrdLAA'$\D`$Gb3 ~A0zr1928.Afhnh+"٨P0Ar qDil`~˘h,'Bpӛ:3.x|p!~ 1G YM(ZT Sd#06 RYm}0 vWc9`[|O(P㇄ev֐u?y7 .r \2sBGÄPV)2gh7 zOm>MEta`CȠ1;\":xM1p MO m&aCJ /xJNdwf)J&@4ߞ8K=6F6TUr'nhq[=ဒ #'yBpWE5ȀI4'Y8+RzUl{|\w7ކ\Ѐ8D *I7^ʩ a#d~hM=TR:R/|)B_??Np+b3_Ŀ?? ??'?z???xL0P< sa 7a_WN1#a(>ߝ7-kh7H`AO&h/s< fG֞>\ⴁ8` a$z@,<_|qzR"/?Y%Gd® ?lNcV81=<& 5@7'Sy,̼ f?n>?Y%r=~_,ǮG1>;RMA ' ^v 2,+W~!{.A\x zXxUnt܇Y0<@Q@E鱊kSfB*0Rwh7e2~YTFn\g|mc'13GC? qG! Uqx)!k<G3&+k6˘cֻ֠ xĸ{]FmM~H-/@0s3jo}fyƝM￀+4c &>37ɇ[ٿ&G?]πʀA@'SW($G%@ ,+# ܷS<6,0ƁG^ǀAVޫ+S.o\PKɀ0kpyz3b g~ >6>|=i3Vqx;f͉kpMVg1ς0ψ`D,7[p2%<mC A`'WZ6G# hSE5θ)(4U>JS_S9"=.>j<l V{{3c'-Tܜ;ߎ.7t?Tɤpq[dsL3 Ey>N O{<9)3}5Zb;~(k|A'3YLA A kPM8KI-$S@maLLf4)!^&n̚ez;?s 9}ADlFLW~1:˩L\inE2Zw(LlQc/c c'&Dgc||?|ՠEt=›+W |l|g oS.~ 3BA'51.n 77`c}'/  U=ȗ$OM?#Ի(c3g%͸L׌>n}J>4X%\3=HX\|~ DaZ#yWdY)?0(h?xCTVo7*; \vrZ~Nzs/s@A'̿|o(OcW@qֈS 2ޖ_Kx f>\hS~F3ٓBhӫf<#tþ:-9}n2h1&4L{z@Ghx{q-ջ!L;*߷J4Lj!֝=<󁏏w["=z~iMXjYJBs ٝoxq&#a>{e0JW';:4~g hS) &up 6Jd3]ޟfb1L=%I#aTlR|dRiR|V3 ):j+=/—9)jkPdu[вNJ]prf/JU\0l^I;][3NZL[#HJ *97ͩbUc4gON GJri\crlRzbwyI8≝()e9& ,O&jbSE$ԓ17 'MYyW+MZSd4,2+Eeb oOM9;K=WfrZG)@P!T**@Eټ^"%I a(iQDA/AIGKr=N4Jq0 C:].{kL'^ 3~}ʛUt.ټ"b {(Sf!k=4{MF\ )7ɂu%.+5/%-XNyAO4jgs{)==E6d)a*{Ș-mb7@A$.ġƕ=?1忧*l43R wHd;aPNl4蠏u!Yڊj#6`O)=3l4$R1!T:DQ#m)PcTI* .,w:Yn]ϭDv@21g2`KL%8nLƙE/2)$ѕQ/%[U/,2ΩvODZ-Tљԫ.֛ќ>!!SF "hSLjթe]l`*FeF*jti+GMS28a;4rip2뢙}1`$yv6!LE J+hJԀ 9 N'&3/?'۬J !T:DP`6)շ̒jKWUur^hߘE9Ԥo],GkMMB٢.`# tΫj` a[xAfkƕ Cyh;jY-剖d಍IͦS΂e`&7iJ )\ @li2D7? 2 L8Ta.K^,VC)%>}[ʶ?fgAn~+QPTTWVv3%[!<&}h7а.h@b8^P]!T5 ag5(ZwrT$QM NpZis65CT%+8O=VJ]:tYoWʦUGj3VA=Q葖*EΚLԎ' (2ZS4@ʨ Vr,jEWKw{XC>.ԴY!slhwӻW?8u]; %BEM/"݁`l6ȯ7FE!i-Q0QAвqexcoJ5܌izx9n@@rS{ӫS!T=7A0굃БHB ;kO]RV=魧`BN&KORJ䅺_Umif{RJS%)(fd փ8F t*\,0 ,'3}U$39ihs#z1CT\Fa(9a~?JL-ڨ;[ %3IuLPۭM͌ߩ3 5J_^D~}<5{*IH0>!Sa *$PW&ZIJ5>FAVt>;b׏'44jh2M"4 8ABF eRe&# Q]CȉZ{6` ^j#KFW| [!wőP z}f)_,MM@\QeCԼpN삫~G4J /)qOeyEPPH*߁"T(!@B@ F(Ik(s.PYX+LڂsӼg:іSb@] rO:W@{!" #z0ޒ[ l&/~4>  ~EZ!c:J@A$T;lI`[) ̦+]ט'UP []C%PJTX(Es05; IeT@53Beقv4cjRmy`l9ځOoǏ#N7uKxu ()Y@.J.֑!V[+,jc'! S*G UЕT2-,'γpeVJS5|=wšN Ws ĠYrէ_[E& !0;⃅%DYiOU{(sb{-j!vµyi(eԂRTYE!s1Q@/S9KT_֝Y-r۹=sǠK|Aq:$L!@@B4;K.,10kxC9/VO6ՒQ)JDϑ"U-Qp! SaE)axZd+* QMR*Ϥ^Xg*i3b~|D>O h="Q0< _@'QLΛ %?|H5Y蓀G4A FDΌ1[r?i^l/]|&bDI@;C eUO$\Qb犻«m 4H[`[ pDa !+?omqfq *6,6$f3* TFkS+22Dg) K'! Sl-RAȥPwVC>d1nmAJSL9z퐣M[0jE;}+A 49@nHQ/?Qڣ+;tª,āvJAGd TJ! SꚲaKɲLg~~)2 6LqR`(X-} `[W*{RWWf)Ho$$>952w͏f;2 _+}ٗJ])̖֟>h>?wx{ju~C! SxIPEw2;yFsۉ@9Jw=̾xs4JH)>| g!5Zhu$GH? ;0cCZg!BlE"w%G-/ul80 |1jKW^(dy1ap/8F\ zdxy_ V1WFgɧ&C'tSfF|A@'L y13~ p>3`b3l)KK>{&*˜Y9 % z|1/!X A{0QWu8Q-Q=p=(`%~ ;C<ϕJ?.2ؒ!@ѯ6 AMA`' ww`Y T* T)oUŁBTM$O#|:20 ͒mP\oZl,GPk [Lze5%@3y 7xP12;2ڱ7{3!Ie =)nrp7M{?#·8 y}B/ڏx T*%IŀpCr  l86wH?G\B|ߨ=ЬIrrrru_0|]_,ofɢOPJAl 1H:9zX-@?_AcP½@ħph>_ )@&lԖ&\)pOP0) .ϼ/#wg˴|V܍X t%7qsZI!Հ)`H8-~ʭ@@Pwu>D3/"f }#Y|B?6<"͂`o& a@6dv ݁22V̨9RvjKI)Mx 0Kދm`帜(H3*Bh [ۍ"2{4gEѴrGj" tve v$")14hV1W] VYݬ mLJAZ>13̥u\W[>>3){QjZ~o{PM 70Vq21?8_^!~zY2x9Z ZX .{܎U5IsqQ r>1}R8 ni6gWv>Ũ/cRLa7鵏"A wK {j?\he?ʋj '_%ug$=뮺뮺뮺뮺뮸Ccm` ]u]u]u]u]u]u]u]u]qR Iz*뮸ZYz뮺뮺뮺뮺뮺뮺뮺:c/.:M;똅u]u]u]u]u]u]u]u]uD1ʺ뮞뮺뮺뮺뮺뮺뮺뮺뮺뮺맮뮺뮺뮺뮺뮺뮺뮺 AQ2? Z5x:u]=u]u]u]u]u]u]u]u?@($!ǟiB5g>||cZ !U{,ߧt3p:s9v/맮뮺뮺뮺뮺뮺뮺뮺뾺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺뮺z;LZ6!m2Kh-p* 6Jn"dN3V, QAp`]mߙ'<q+}Y~! " >9Hnu]u]t@§bs*F-` TU> . /:5e,k֐ՇCPll}D8eQu+y/QW* ym~ 4awf\1Pc .2KSS T? ZL('~%3dg#da [ 1#;۟ FP `ˋ`/C!Zd˰K|?πhi@q0[WX0bO9` $lhgLb2~o QqrBlF?o/'7[@aphxW`q 02@ 5 _pӿ{K@(v/qm vsJO.@ʤ< * L׀oUصi+`G #z@׻+# |ĤUZ  fFI߆J2Rڵ \<+o" ?D"* `18J~ٙHl`tLet;XlA? UauqMy5b.mM4)va i' ,u5Qe\INL tu(߸ sY8yha)!cPl-sQl@B Ԓu~Jkn̼ϧ?V\bm2_/3g)_J@)iuwQQu5}4æ6?UF̉dYm hdW 9z'^z\)# ;e?.0'HozN(5'1d2'%`l~V~#?+: [ץ9BC,DAڝ |1|V:1IDB#[tw}<5ܣw826 P +ᨴ? fIҊ% US"ovbCD?Ç=#T"ǼѸP,/pDHH/G+LnDŽa ]w \bF@:` )"%\:^]C{3"^1M.a6h~/]u]u]u]uX.뮺뮺뮺뮞:$z_,u|巚[XڬC)+/]u]u]u]u]~SEy}i:mih=hͿ8UV=1%@T.H-OLBQRT*X^~n Ig;dh* f$ ز0}qXaHo:82?&a,j`-42 4sţ\1SFx"[{Jn -(aρ fDyhDQMw8[(-JTZl UﰐQ;:-8"y Yv,9L>’@H , r6C8=&{FΘԍXt% VEZe< ׬DgH#^QEpI$g 19Ɣ]V* ncߴ0J$ꂘxUj ]=&y>B!)_y|,16wV~6z mD9jLb+0A??11ͦ hW v#ؾv?CB܏K ɨfg~ $ x[cVAHkF!#E*S]*66d/)p CY*K0)3Dē{ DB޽١ ׁh,ܝ4`0x_@bٽ 品 vפ@&maUJm,2]DM9}-N2 6^%FocD1"M[QmEIyAW J }CV D,~ȶAq 5%@b ;[Rk\;Ta2}eTH$=>{)u_aHDʙ3$ 3+gc9% ЧLށ_%pe9~h@J=V?{Ř)Or>'ĔpInA(󁌎xPw!l59N2dMtɒ,%n?l9A;!J7d>84lT?ﱈ.JowݭX0]{tޘ hVkJWLT"o=XV3[_1ì j|B18xq\xA;J ",^Wfr r 7S?chY%# wըKȸDxIO+~R|/y<p|ry}n廒Q ޼t w83:3&ZD 7’Л!٭@ˀ 7S9ZD 8H4-@n-Si"Syn݀W"+l# e a%$@vao.jS]JžXPxS"O2߿K4k# vMxΜN+ğǣ hM/x wi2 =׃?U.7z!@[A( w1 lnD@b `!{ `BI0 тT h3)#MZL -bޯ$Hhp]O~Q 0s6P.4~W/\_ϧNK1@;ľ‘0N lYͬDpD./ݿiWnR)"z }$u`fF`k neUIM  ͻME|n⤣S#J|7Hh =0vPTq+xLxMAҐ&_`y ]8}eanp2]{ƨ=+#H($6]:|5ͤ3Us2kSdiŁaNk1·I~&B`Ff_ճ-׻ߓ#aO. u-p.P+¾_BK=%VDzTJvFn׾[FhPZ!PH`0Jon&<@ oGmw [+Y/}$IMհn1E댒Mhe:MlkWXNpD^ZljXzAs hy@޲1YBjxq702ڵxڛm^ ǯ l)\9~ N]wݐ H:\ 2X[.̣0-VChᛜm!: Pj_O$Od`#3hyyw/ 4րg\i\*M`P]C=~/鰐f0>eش,}tg`[q|0,-{e@";\rc]ZC qF.n afXIi3<5Pc=߈Pls&T ,TwfTDh˔MEv@z8F0 ^E3ydu@߳xd>+ ȻJCL COLHRA-C !q m 䪳$`;c?>h "Qt;C鍑ԽO 82m bw}u]uټ(J~E.G?K?{D04P!~wQE?֐W4.뮺Wl1̉7[[ГNU0]u_C7_jΠї+hCTyPig t{*+ƫg# o\{wMQhu8 0JRFѕ}%@+"pA?)] Goÿ @=?BJ3+Hp(b yA;()q؋7_]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u]u\W^A ''|O>'|O>'|O>'; gTg@\pNŰ8Wtx ”k4`{8%x0t `{\>Θl3^pp^KP|JJIAVH(f0! $)SeAw;^٣ "@1<‹YE?[PR d4 CH }@e,93ps*X e۝΁O F/ ;8$Zhax8??ȰK|+Z  (+!WMle=і1֏OM?F@C ?nf</ CCyn&IP*poMKF}kaϦ !r;?7ˑ#mOO|w<ڏ/P!RI;X8[pAト`i8 |94rU-~ OI4>_ɓ0|Os` /K%^X`AbPE$ + 3d!3-jb2dGtL^ݽ Z/s oNH{?r@GǾH{? n6A@'y1\,B V@QxBQ?Z# 3f lOH#<޿=(M5(ob50A`'`, `CAAf 4M?YF@&shQ8 ^#p,`3nPC͐+3b|u']ey/Sć:g?~H+{î@y#7.ίA'LaA Pѩߖe$̪nA0i$i$2fX`!:i(D_J"$#G ،pn,e<)?UfILT1|9, Dp~'2<Θd#s$&@3xEa2 L: dA'oHǀH$ T#)(Sih~!9<ɦSy|1)1$io/QP0?q})p/L?M|*qW*H5rUh$ H'Wx&'38s?a\r꿧5f8~gy'.iMMaTf*>NA'oAO?ǀCY>$+|C"#Y7,)%K?b6Bl4odth y3{|@"1nn4BlG(qf'tÇN ?Nz0${䬐 cc8]p~ A'g0eM00Fah!- e 4H$ӈK{a[y9~Qx%om 3b.$cA y1ZqX^-e;,nEǛf^0M 4]9`d;xOhO2量ÏBsF7ْ?@ǖ^L0m3d4 A'@1 Ȫa!iE7".#=&a":u#m`3d,B0:gn6CL|I|!e1+iK~ }bpIp&W!og/x %DWA '~(yK- `qhv\Fb5q`xeӖ>ax !?C)3 +<c0̠܅3k|{@_fZ;'@3`20! SqԄ,# Y߳Ϡ2KqhW<]WULE5IQ!;kmEhgHh'O\6۩.zs6^`( ^~GP8gJ]m (W܎)[CA_u$<_ 8d\/ &!TZzDhw2>vyuEbkcU_> w# o j! S]VCͩ Ūel A`da F Ԩ Q<^rJ4k ' u%:JT3M5kތS\&0'Sv/~K$hd>5g*+2>RԐOg-+O! S!"J-*U:Nݾ'Ij/RfZZ5;vDALV ݾ bpQdLt$*l֬yIhதYo,4/s`$\Wև0i06I{ErL]DѸwcxIKŒ!]a\PeDU9QA*$dE)†@`URoڕ#6 y[N ]p*ũ,GpR٠= Zzn6n(讗 &luC59Y2ed7a˻ RS Zd)줅mVnȄLMBUK_b[Vad|WwF#2N@w(x0 `rkzR{"v ǜy1:cB!0)/&FUr`2)^9e-kc~T8H?.k?2׬9! S݅4FD*P :ֱEJs\>VڱRB/.rVMD]{ػ-I#N N ، m(zkR\!֢?s֗79R^جlVLgRx( =ڄ(Qi$A ܫڧZN9’@iW-[)D[FPR4l(1% 0eAjy! SPJ BeKꢭXx;ag(GxBrՀ =hhKp(Y9Ejd=t5lq\&aJT6#D5eaWY[k40QI=EǨQѻr;;`NoaSe_ %!XVJw0a B DŽ2+ 3toJeaR97{%$W4r6An]sN:! SPNEPPI(D(T҄&C5Ҟ2Wp _Їu4>pGDZqa/ 8VEۓUgYȲS٪F^D]vQ- ċM7<<_5u7јESfW4j+zN<"!T`Q0\e f-y+J*Fqм6% S,4N4KؑԤyy|! Scɸ o1q]$-󌷊d\0=yml܉>vkH~r+#`cxt $^P`v26_0X{8l!+{I#!4wڭ!<A@85HH$ "+j7:zkfgBQ`#$xytl` ;yH6V xOa@,W!+lF1AڶM (gAm9OZ OVw- W pSn~00! Su%!Qw@-ufn4bVָ,XɚJ4tI N g9xZRk$O_ ~4x:T^[o rs-hS[d? =\8Q径xZAJp* S6X7ڜT1]'CH.㻢@L b eB U^(H1X4?3[^DC#$zQzݿrmsC&}m,]ÞtOO0 /vHǍ,rA@'Qm1,BK“[MqUP<̜GG <q(?\rc*͸ Vdf( i$GLəgp 'p000'Ϳ Bb,.,?wOu'o.F,., Q:{ߒ#83O7JoE)*,., ߳9Ϳ o{c[F,('o Q:{ߒ*,.,#83O7I)e&UUUUUo *b,.,8f\rnE'F,.,o& UUUUUUUUUUUUUUUU')*,.,ob j)qɺ Q:{[F,(ߒb j)qɽUUUUUUUUUUUUUUUUUUUUUU#83O*,.,7I)e&ꪪo J,8f\roUUUUUUUUUUUUUUUUUUUUUUUUͿ F,.,o߷ݿlf\rn')*,.,ob j)qɽUUUUUUUUUUUUUUU Q:{[F,(ߒb j)qɺ#83O*,.,7I)e&UUUUUUUUUUUUUUUUUUUUUo J,.,8f\rnͿ F,.,?۷͓SQLˎMꪪ')*,.,ob j)qɽUUUUUUUUUUUUUUU Q:[F,(.ۿ/̦ #83O*,.,7I)e&UUUUUUUUUUUUUUUUUUUUUo  J,.,8f\rnNpg(F,.,$f\roUUUUUUUUUUUUUUUU;(E#; *,.,0TY3c oQ & %b@Cqg1Lr;1gv2ٞM]^[F,(_R.ۿ/̦ #73*,.,7I)e&UUUUUUUUUUUUUUUUUUUUUo +b,.,8f\rnEWJ,/뼒b j)qɽUUUUUUUUUUUUUUUUUUUUW *,.,ob j)qɺR[F,(.ۿ/̦ UUUUUUUUUUUUUUUUUUUUUU#73*,.,7I)e&ꪪo +b,8f\roUUUUUUUUUUUUUUUUUUUUUUUUͿ +F,.,o߷ݿlf\rnW *,.,ob j)qɽUUUUUUUUUUUUUUUR{[F,(ߒb j)qɺ#73*,.,7 15̸ުo +J,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUͿ +F,.,?۷͓SQLˎMUUUUUUUUUUUUUUW)*,.,ob j)qɺR{sF,(ߒb j)qɽUUUUUUUUUUUUUUUUUUUUUU#73*,.,7I)e&ꪪo + J,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUEW߿F,.,oβb j)qɺW)*,.,ob j)qɽUUUUUUUUUUUUUUUR{[F,(ߒb j)qɺ#73*,.,7I)e&UUUUUUUUUUUUUUUUUUUUUo +kJ,8f\rnEWF,.,Nz =HFf[F,(2 .--cKd`4x<%  (XU+r[]['g]*,.,#637I)e&ꪪoͪ sBb,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUͿͪ sJ,?wOuLAME3.97UUUUUUUUUUUUUUUUUUT)R,ob j)qɺڠW:{[F,(ߒ̦ UUUUUUUUUUUUUUUUUUUUUU#63*,.,7I)e&ꪪoͪ sBb,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUETF,.,jMZ/ 2rb j*˗ *,.,ob j)qɽUUUUUUUUUUUUUUU \{[F,(ߒb j)qɺ#5H3/iV,(ķ7I)e&UUUUUUUUUUUUUUUUUUUUUoR  .,.,8f\rnͿR F,.,o{b j)qɽUUUUUUUUUUUUUUUUUU˗)*,.,ob j)qɺ \{[F,(ߒb j)qɽUUUUUUUUUUUUUUUUUUUUUU#5H3/*,.,7I)e&ꪪoR *b,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUͿR F,.,?wOuLAME3.97UUUUUUUUUUUUUUUUUU˗)*,.,ob j)qɺ \{[F,(ߒb j)qɽUUUUUUUUUUUUUUUUUUUUUU#5H3/*,.,7I)e&ꪪoR Bb,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUͿR F,.,?wOuLAME3.97UUUUUUUUUUUUUUUUUU˗)*,.,ob j)qɺ \{[F,(ߒb j)qɽUUUUUUUUUUUUUUUUUUUUUU#5H3/*,.,7I)e&ꪪoR Bb,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUͿR F,.,?wOuLAME3.97UUUUUUUUUUUUUUUUUU˗)*,.,ob j)qɺ \{[F,(ߒb j)qɽUUUUUUUUUUUUUUUUUUUUUU#5H3/*,.,7I)e&ꪪoR Bb,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUͿR F,.,o{b j)qɺ˗)*,.,ob j)qɽUUUUUUUUUUUUUUU \{[F,(ߒb j)qɺ#5H3/*,.,ooSQLˎMꪪoR *b,.,8f\roUUUUUUUUUUUUUUUUUUUUUUUUE˗߿F,.,]S2uUUUUUUUUUUUUUUUUUUUU˗)*,.,ob j)qɺ \{F,`ߒb j)qɽUUUUUUUUUUUUUUUUUUUUUU#5H3/*,.,7I)e&ꪪoR b,8f\roUUUUUUUUUUUUUUUUUUUUUUUUE˗F,.,s(4yŎ .T%Ʀ M/9x.:Q2ܛU>4) I՜QI4$-mNnCn6I"TzI2)  ]ɑ2XĚ^ajgh?a0YQa[ܚ?\Pzf,sMϭX ya $P#RGT m" z\@TnR fş/_* DHs[]t 6NʈQ ˤ2ӥ~eTK1[* #I5*vf"4J SIL3#RD*h( DA~ 1Nx_kCv|*C Fk=~uI_e^cFXTMSUF`MGyZ)W2D$`6`8ہ㐂3"gEdqK>/"=vlˤ)Oߔ;~|֘8V#!F%Enmmmn}s~mkNf,B1n lҵ@c3RMʹ'#7HC$8ʾR֕{ŕ>xuk ܷE)E#%sfWsD,⸋0Q[ʬ+K%Q4pSKp0EU H252ջD|}J$ F/l̈́܉4gsm5'4C k՝R w;l*(Ba[)GzU 0D{Q쭍k؟r粹հ4KZi *arS#[jEYw c+#˧˂"fbaiDm#D7QNgGy"SԴs)dcwܿ9msfS$"jIT1rp>;*))H|2 zJ$Tz<׭qMVě+mm}B޴6h:ߕfE{JFխEMi##\)2hELhWؔHё IPm>b k FƷ"ɪ٩CSB^%ԩ\O\1.Hqh:*{P4cfIL ?EB+MF$h鱃O>*NY?JYZ=reM] p3iQ!V5*DpgrV\-oHzF͑"XB3Dfy2q l9mAI%E>ID\5hD&BЍK"3icLFtstkGFŚr10HڒV si&ͱ s1>7"zψD拢+- pq*Ք$bΘ"*d% l;HRD?ye̛eo@K26h^Qhf `DI-.l"X2npؾ9RrB$`j -Wp 0R&[B誗 8F(p'Gy$ T J#T R%xF[jzlSZz= :XhHD%DN^j +>AhX:,._C3YFR Gh!-(22Gj1OƘ EYkRJ δnbPJSm _Q];%g5hVK[*2;jD/^'BЖin^LN^(P hIC|4HU*Y9$+9kyHRӿ"R6'ȇy!Ojr;)+rȹh>>bn5ID$YN!5 F7ҏ`m@/ ,[VPFD "p`Đ]Ȼ^RTQ^qaC]4ͅ4ԙŲ}&\DBUUpF#} #:B4t*4N 4H(O,M2+C$D$e23Ma!F*\QT:Wn.}u rB;ڕQZ9UL )EV1Gd#9f[>u>݋ S^J1Ern__gԯ/;mׁ1~Fɟ4Z&ujՁ7Yn.`9Uc Gb{˙DIF@+Gz;ȎEyrxKڌD,[F8q9D3IP[X+A!3pLA#յZ m6RPCTT?g?J%_cEg)G_]fHR]^w[us/[SIUU +m՟]ڲrBWDzŝ=?W_5[=+wsoVKF;5~1FOZ';Yt$00é7n-,IQRqВFܕIE z% )]̉@RY:ԑ3#u Q,jV> ̢goSFю!UqU̽)`(DK3Մni*aBg0Dzg>K~6^AA.ժEh`mDŽZ:* mqVp%Ё7hďDT9BPLB *&,w@8X"@Y!SQF \g}$lӠRT'$*n:k`${ 306`D4xŏI5SzEvʋ-tӞORۚ9>.\N[ JF&5[}BJ,,íyjLAME3.97XAZ)ȍ3=$H79AFstK^Ė$t(HHnabF!QAF=&ORi\DKg*]*6tMAW$Fzf?Cgؕ{:>oV` uu=} xkku*ԘUUr{ s:#Ny F,\)@=MA,9*ǿֿ#}nШT8#镍#QB˻^Q7MˍГvC]+ƋeMN K(tYp%RD_J$DGYꔮEvt_̿{e:hNFWm.7kwg8D7'yߕ qN%⟟uZwI,SݔW_{Wno;k=m(  Qs}JS2z N?➶BNH (DNgr ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (aiscm program) (aiscm int) (aiscm asm) (aiscm variable) (aiscm command)) (test-begin "aiscm program") (test-begin "input and output of each statement") (let [(a (var )) (b (var )) (r (var ))] (test-equal "Get input variables of each statement" (list (list b) (list a b)) (inputs (list (MOV a b) (ADD a b)) '())) (test-equal "Set input of return statement" (list (list r)) (inputs (list (RET)) (list r))) (test-equal "Get output variable of each statement" (list (list a) (list b) '()) (outputs (list (MOV a 42) (MOV b a) (RET))))) (test-end "input and output of each statement") (test-equal "'labels' should extract indices of labels" '((a . 1) (b . 3)) (labels (list (JMP 'a) 'a (MOV AX 0) 'b (RET)))) (test-begin "variable substitution") (let [(a (var )) (b (var )) (p (var ))] (test-equal "Substitute integer variable with register" (list (MOV ECX 42)) (substitute-variables (list (MOV a 42)) (list (cons a RCX)))) (test-equal "Substitute variable with another" (MOV b 0) (substitute-variables (MOV a 0) (list (cons a b)))) (test-equal "Substitution works with 'MOV'" (MOV ECX EDX) (substitute-variables (MOV a b) (list (cons a RCX) (cons b RDX)))) (let [(p (var ))] (test-equal "Substitute long integer variable with register" (list (MOV RCX (ptr RAX))) (substitute-variables (list (MOV p (ptr RAX))) (list (cons p RCX)))) (test-equal "Substitute pointer variable with register" (ptr RCX) (substitute-variables (ptr p) (list (cons p RCX)))) (test-equal "Pass through pointer with empty substitution" (ptr p 2) (substitute-variables (ptr p 2) '())) (test-equal "Substitute pointer variable with register and offset" (ptr RCX 5) (substitute-variables (ptr p 2) (list (cons p (cons RCX 3)))))) (let [(l (var )) (w (var ))] (test-equal "Substitution works with 'MOVSX'" (MOVSX RCX EDX) (substitute-variables (MOVSX l a) (list (cons l RCX) (cons a RDX)))) (test-equal "Substitution works with 'MOVZX'" (MOVZX ECX DX) (substitute-variables (MOVZX a w) (list (cons a RCX) (cons w RDX))))) (let [(p (var )) (q (var ))] (test-equal "Substitution works with 'LEA" (LEA RCX (ptr RDX)) (substitute-variables (LEA p (ptr q)) (list (cons p RCX) (cons q RDX))))) (test-equal "Substitution works with 'SHL" (SHL ECX) (substitute-variables (SHL a) (list (cons a RCX)))) (test-equal "Substitution works with 'SHR" (SHR ECX) (substitute-variables (SHR a) (list (cons a RCX)))) (test-equal "Substitution works with 'SAL" (SAL ECX) (substitute-variables (SAL a) (list (cons a RCX)))) (test-equal "Substitution works with 'SAR" (SAR ECX) (substitute-variables (SAR a) (list (cons a RCX)))) (test-equal "Substitution works with 'ADD'" (ADD ECX EDX) (substitute-variables (ADD a b) (list (cons a RCX) (cons b RDX)))) (test-equal "Substitution works with 'PUSH'" (PUSH ECX) (substitute-variables (PUSH a) (list (cons a RCX)))) (test-equal "Substitution works with 'POP'" (POP ECX) (substitute-variables (POP a) (list (cons a RCX)))) (test-equal "Substitution works with 'NEG'" (NEG ECX) (substitute-variables (NEG a) (list (cons a RCX)))) (test-equal "Substitution works with 'SUB'" (SUB ECX EDX) (substitute-variables (SUB a b) (list (cons a RCX) (cons b RDX)))) (test-equal "Substitution works with 'IMUL'" (IMUL ECX EDX) (substitute-variables (IMUL a b) (list (cons a RCX) (cons b RDX)))) (test-equal "Substitution works with 'IMUL' and three arguments" (IMUL ECX EDX 2) (substitute-variables (IMUL a b 2) (list (cons a RCX) (cons b RDX)))) (test-equal "Substitution works with 'CMP'" (CMP ECX EDX) (substitute-variables (CMP a b) (list (cons a RCX) (cons b RDX)))) (let [(u (var )) (x (var ))] (test-equal "Substitution works with 'SETB'" (SETB CL) (substitute-variables (SETB u) (list (cons u RCX)))) (test-equal "Use correct type when substituting variable with pointer" (list (MOVZX DI (ptr RSP 24))) (substitute-variables (mov x u) (list (cons x RDI) (cons u (ptr RSP 24))))))) (test-end "variable substitution") (test-equal "'relabel' should create separate namespaces for labels" (resolve-jumps (list (JMP 'b) (JMP 'a) 'a (NOP) 'b)) (resolve-jumps (flatten-code (relabel (list (JMP 'a) (list (JMP 'a) 'a) (NOP) 'a))))) (test-equal "'flatten-code' should flatten nested environments" (list (JMP 1) 'a (NOP) (RET)) (flatten-code (list (list (JMP 1) 'a) (NOP) (RET)))) (test-end "aiscm program") aiscm-0.15.1/tests/test_magick.scm0000644000175000017500000000557713213600051013760 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm magick) (aiscm element) (aiscm pointer) (aiscm sequence) (aiscm jit) (aiscm int) (aiscm rgb)) (test-begin "aiscm magick") (define ramp (read-image "fixtures/ramp.png")) (define index (read-image "fixtures/index.png")) (test-equal "Check size of loaded image" '(6 4) (shape ramp)) (test-equal "Check pixel of loaded RGB image" (rgb 2 1 128) (get ramp 2 1)) (test-error "Throw exception if file not found" 'misc-error (read-image "fixtures/nonexistent.png")) (test-equal "Check pixel of loaded greyscale image" 18 (get index 2 1)) (define grey-file-name (string-append (tmpnam) ".png")) (define grey-values '((1 2 3) (4 5 6))) (define grey-img (to-array grey-values)) (define retval (write-image grey-img grey-file-name)) (test-eq "Writing image should return input image" retval grey-img) (define grey (read-image grey-file-name)) (test-skip 1); Still fails under Ubuntu Xenial (test-assert "Check content of saved greyscale image" (equal? grey-values (to-list grey))) (test-error "Should handle errors when writing image" 'misc-error (write-image grey-img "fixtures/nosuchdir/tmp.png")) (define colour-file-name (string-append (tmpnam) ".png")) (define colour-values (map (lambda (j) (map (lambda (i) (rgb i j 128)) (iota 8))) (iota 2))) (define colour-img (to-array colour-values)) (write-image colour-img colour-file-name) (define colour (read-image colour-file-name)) (test-equal "Check content of saved colour image" colour-values (to-list colour)) (test-error "Make sure image type is supported" 'misc-error (write-image (make (multiarray 2) #:shape '(6 4)) "fixtures/tmp.png")) (test-error "Make sure image has two dimensions" 'misc-error (write-image (make (sequence ) #:size 8) "fixtures/tmp.png")) (define rolled-file-name (string-append (tmpnam) ".png")) (write-image (roll colour-img) rolled-file-name) (test-equal "Write image with non-default strides (pitches)" colour-values (to-list (roll (read-image rolled-file-name)))) (test-end "aiscm magick") aiscm-0.15.1/tests/test_compile.scm0000644000175000017500000004512213213600051014143 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm asm) (aiscm variable) (aiscm program) (aiscm compile) (aiscm int)) (test-begin "aiscm compile") (test-begin "replace-variables") (let [(a (var )) (x (var )) (l (var )) (p (var ))] (test-equal "put instruction into a list if there are no variables to replace" (list (MOV EAX 0)) (replace-variables '() (MOV EAX 0) '())) (test-equal "replace input variable with allocated register" (list (MOV ESI ECX)) (replace-variables (list (cons a RCX)) (MOV ESI a) '())) (test-equal "use intermediate register for spilled input value" (list (MOV RAX (ptr RSP 16)) (PUSH RAX)) (replace-variables (list (cons l (ptr RSP 16))) (PUSH l) (list RAX))) (test-equal "use correct type for intermediate register" (list (MOV EAX (ptr RSP 16)) (PUSH EAX)) (replace-variables (list (cons a (ptr RSP 16))) (PUSH a) (list RAX))) (test-equal "use intermediate register for spilled output value" (list (POP RAX) (MOV (ptr RSP 16) RAX)) (replace-variables (list (cons l (ptr RSP 16))) (POP l) (list RAX))) (test-equal "fetch pointer value from stack" (list (MOV RAX (ptr RSP 32)) (MOV EDX (ptr RAX 8))) (replace-variables (list (cons a RDX) (cons p (ptr RSP 32))) (MOV a (ptr p 8)) (list RAX))) (test-equal "do not use temporary variable when reading from register pointer" (list (MOV EDX (ptr RCX 8))) (replace-variables (list (cons a RDX) (cons p RCX)) (MOV a (ptr p 8)) (list RAX))) (test-equal "only use temporaries for spilled variables" (list (MOV EAX (ptr RSP 8)) (MOV (ptr RDI) EAX)) (replace-variables (list (cons p RDI) (cons a (ptr RSP 8))) (MOV (ptr p) a) (list RAX RCX))) (test-equal "use two temporary variables to write spilled value to spilled address value" (list (MOV RAX (ptr RSP 8)) (MOV ECX (ptr RSP 16)) (MOV (ptr RAX 8) ECX)) (replace-variables (list (cons p (ptr RSP 8)) (cons a (ptr RSP 16))) (MOV (ptr p 8) a) (list RAX RCX)))) (test-end "replace-variables") (test-equal "adjusting the stack pointer by decreasing and increasing RSP" (list (SUB RSP 123) (NOP) (NOP) (NOP) (ADD RSP 123) (RET )) (adjust-stack-pointer 123 (list (NOP) (NOP) (NOP) (RET)))) (test-begin "parameter locations") (test-equal "the first parameters are register parameters" '(a b c) (register-parameters '(a b c))) (test-equal "only the first six parameters are register parameters" '(a b c d e f) (register-parameters '(a b c d e f g))) (test-assert "the first few parameters are not stored on the stack" (null? (stack-parameters '(a b c)))) (test-equal "appart from the first six parameters, all parameters are stored on the stack" '(g h) (stack-parameters '(a b c d e f g h))) (let [(i (var )) (l (var ))] (test-assert "initial parameter locations for no parameters" (null? (register-parameter-locations '()))) (test-equal "initial parameter location for one parameter" (list (cons i RDI)) (register-parameter-locations (list i))) (test-equal "initial parameter locations for first six parameters" (list RDI RSI RDX RCX R8 R9) (map cdr (register-parameter-locations (make-list 6 l)))) (test-assert "initial stack parameter locations for no parameters" (null? (stack-parameter-locations '() 0))) (test-equal "initial parameter location of an integer stack parameter" (list (cons i (ptr RSP 8))) (stack-parameter-locations (list i) 0)) (test-equal "parameter locations of two stack parameters" (list (ptr RSP 8) (ptr RSP 16)) (map cdr (stack-parameter-locations (list i i) 0))) (test-equal "take stack offset into account when determining stack parameter locations" (list (ptr RSP 24) (ptr RSP 32)) (map cdr (stack-parameter-locations (list i i) 16))) (test-assert "parameter locations for empty set of parameters" (null? (parameter-locations '() 0))) (test-equal "parameter location for first parameter" (list (cons 'a RDI) (cons 'b RSI)) (parameter-locations '(a b) 0)) (test-equal "parameter locations for register and stack parameters" (list (cons 'a RDI) (cons 'b RSI) (cons 'c RDX) (cons 'd RCX) (cons 'e R8) (cons 'f R9) (cons 'g (ptr RSP 8)) (cons 'h (ptr RSP 16))) (parameter-locations '(a b c d e f g h) 0)) (test-equal "parameter locations for register and stack parameters" (list (cons 'a RDI) (cons 'b RSI) (cons 'c RDX) (cons 'd RCX) (cons 'e R8) (cons 'f R9) (cons 'g (ptr RSP 24)) (cons 'h (ptr RSP 32))) (parameter-locations '(a b c d e f g h) 16)) (test-assert "no stack location required" (null? (add-stack-parameter-information '() '()))) (test-equal "use stack location for register spilling" (list (cons i (ptr RSP 8))) (add-stack-parameter-information (list (cons i #f)) (list (cons i (ptr RSP 8))))) (test-equal "do not use stack location if register already has a location allocated" (list (cons i RAX)) (add-stack-parameter-information (list (cons i RAX)) (list (cons i (ptr RSP 8)))))) (test-end "parameter locations") (test-begin "used callee saved registers") (test-assert "no registers in use" (null? (used-callee-saved '()))) (test-equal "callee saved register in use" (list RBX) (used-callee-saved (list (cons 'a RBX)))) (test-equal "remove duplicate registers" (list RBX) (used-callee-saved (list (cons 'a RBX) (cons 'b RBX)))) (test-assert "ignore caller saved register" (null? (used-callee-saved (list (cons 'a RAX))))) (test-assert "ignore variables without allocated register" (null? (used-callee-saved (list (cons 'a #f))))) (test-end "used callee saved registers") (test-begin "temporary variables") (let [(a (var )) (b (var )) (x (var )) (p (var ))] (test-equal "create temporary variable for first argument of instruction" (list ) (map class-of (temporary-variables (MOV a 0)))) (test-assert "temporary variable should be distinct from first argument of instruction" (not (equal? a (car (temporary-variables (MOV a 0)))))) (test-equal "temporary variable should be long integer" (list ) (map typecode (temporary-variables (MOV x 0)))) (test-assert "it should not create a temporary variable if the statement does not contain variables" (null? (temporary-variables (MOV EAX 0)))) (test-assert "it should not create a temporary variable if the first argument is not a variable" (null? (temporary-variables (MOV EAX a)))) (test-equal "create temporary variable for pointer argument to instruction" (list ) (map class-of (temporary-variables (MOV a (ptr p))))) (test-equal "temporary variable for pointer argument should be long integer" (list ) (map typecode (temporary-variables (MOV a (ptr p))))) (test-equal "allocate two temporary variables for instruction which writes to pointer" (list ) (map class-of (temporary-variables (MOV (ptr p) a))))) (test-end "temporary variables") (test-begin "unit intervals for temporary variables") (test-assert "create empty list of unit intervals" (null? (unit-intervals '()))) (test-equal "generate unit interval for one temporary variable" '((a . (0 . 0))) (unit-intervals '((a)))) (test-equal "generate unit interval for each command" '((a . (0 . 0)) (b . (1 . 1))) (unit-intervals '((a) (b)))) (test-equal "generate unit interval with two temporary variables" '((a . (0 . 0)) (b . (0 . 0))) (unit-intervals '((a b)))) (test-end "unit intervals for temporary variables") (test-begin "registers of temporary variables") (let [(a (var ))] (test-assert "create empty list of temporary registers" (null? ((temporary-registers '()) '()))) (test-equal "return a temporary register" (list RCX) ((temporary-registers (list (cons a RCX))) (list a)))) (test-end "registers of temporary variables") (test-begin "generating code to move parameters to allocated location") (test-assert "no need to copy RSI to RAX before RDX to RCX" (not (need-to-copy-first (list (cons 'a RSI) (cons 'b RDX)) (list (cons 'a RAX) (cons 'b RCX)) 'a 'b))) (test-assert "RSI needs to be copied to RAX before copying RDX to RSI" (need-to-copy-first (list (cons 'a RSI) (cons 'b RDX)) (list (cons 'a RAX) (cons 'b RSI)) 'a 'b)) (let [(a (var ))] (test-assert "no need to move variable content if source and destination location are the same" (null? (move-variable-content a RCX RCX))) (test-equal "move variable content from RDX to RCX" (MOV ECX EDX) (move-variable-content a RDX RCX)) (test-assert "no need to move variable if stack locations are the same" (null? (move-variable-content a (ptr RSP 24) (ptr RSP 24)))) (test-assert "no need to move variable if destination is undefined" (null? (move-variable-content a RSI #f)))) (let [(a (var )) (b (var )) (c (var )) (d (var )) (e (var )) (f (var )) (g (var )) (r (var ))] (test-assert "no parameters to move arround" (null? (update-parameter-locations '() '() 0))) (test-equal "spill a register parameter" (list (MOV (ptr RSP -8) EDI)) (update-parameter-locations (list a) (list (cons a (ptr RSP -8))) 0)) (test-assert "ignore parameters which are not used" (null? (update-parameter-locations (list a) '() 0))) (test-equal "load a stack parameter" (list (MOV EAX (ptr RSP 8))) (update-parameter-locations (list a b c d e f g) (map cons (list a b c d e f g) (list RDI RSI RDX RCX R8 R9 RAX)) 0)) (test-equal "load a stack parameter taking into account the stack pointer offset" (list (MOV EAX (ptr RSP 24))) (update-parameter-locations (list a b c d e f g) (map cons (list a b c d e f g) (list RDI RSI RDX RCX R8 R9 RAX)) 16)) (test-assert "leave parameter on stack" (null? (update-parameter-locations (list a b c d e f g) (map cons (list a b c d e f g) (list RDI RSI RDX RCX R8 R9 (ptr RSP 24))) 16))) (test-equal "adjust order of copy operations to avoid overwriting parameters" (list (MOV EAX ESI) (MOV ESI EDI)) (update-parameter-locations (list a b) (map cons (list a b) (list RSI RAX)) 0))) (test-end "generating code to move parameters to allocated location") (test-begin "generate code to place result in correct register") (let [(r (var ))] (test-equal "return unmodified code if there is no result variable" (list (NOP) (RET)) (place-result-variable '() '() (list (NOP) (RET)))) (test-equal "copy result variable into RAX if it is in another location" (list (NOP) (MOV EAX EDI) (RET)) (place-result-variable (list r) (list (cons r RDI)) (list (NOP) (RET)))) (test-equal "return unmodified code if result already is residing in RAX" (list (NOP) (RET)) (place-result-variable (list r) (list (cons r RAX)) (list (NOP) (RET))))) (test-end "generate code to place result in correct register") (test-begin "put callee saved registers on stack") (test-equal "backup one register" (list (PUSH RBX) (NOP) (POP RBX) (RET)) (backup-registers (list RBX) (list (NOP) (RET)))) (test-equal "backup two registers" (list (PUSH RBX) (PUSH RBP) (NOP) (POP RBP) (POP RBX) (RET)) (backup-registers (list RBX RBP) (list (NOP) (RET)))) (test-end "put callee saved registers on stack") (test-begin "jit-compile") (let [(a (var )) (b (var )) (c (var )) (d (var )) (e (var )) (f (var )) (g (var )) (r (var )) (x (var )) (p (var ))] (test-equal "Allocate a single register" (list (SUB RSP 8) (MOV EAX 42) (ADD RSP 8) (RET)) (jit-compile (list (MOV a 42) (RET)))) (test-equal "Allocate a single register using custom list of registers" (list (SUB RSP 8) (MOV ECX 42) (ADD RSP 8) (RET)) (jit-compile (list (MOV a 42) (RET)) #:registers (list RCX RDX))) (test-equal "Allocate a single register" (list (SUB RSP 8) (MOV EAX 42) (ADD RSP 8) (RET)) (jit-compile (list (MOV a 42) (RET)))) (test-equal "Allocate a single register using custom list of registers" (list (SUB RSP 8) (MOV ECX 42) (ADD RSP 8) (RET)) (jit-compile (list (MOV a 42) (RET)) #:registers (list RCX RDX))) (test-equal "Allocate multiple registers" (list (SUB RSP 8) (MOV ECX 1) (MOV EDX 2) (ADD ECX EDX) (MOV EAX ECX) (ADD RSP 8) (RET)) (jit-compile (list (MOV a 1) (MOV b 2) (ADD a b) (MOV c a) (RET)))) (test-equal "Register allocation with predefined parameter register" (list (SUB RSP 8) (MOV EDX 1) (ADD EDX EDI) (MOV EDI EDX) (ADD RSP 8) (RET)) (jit-compile (list (MOV b 1) (ADD b a) (MOV c b) (RET)) #:parameters (list a) #:registers (list RDI RSI RDX RCX))) (test-equal "Spill register parameter" (list (SUB RSP 16) (MOV (ptr RSP 8) EDI) (MOV EDI 1) (ADD EDI (ptr RSP 8)) (ADD RSP 16) (RET)) (jit-compile (list (MOV b 1) (ADD b a) (RET)) #:parameters (list a) #:registers (list RDI RSI))) (test-equal "Fetch register parameter" (list (SUB RSP 8) (MOV EDI (ptr RSP 16)) (MOV EAX EDI) (ADD RSP 8) (RET)) (jit-compile (list (MOV r g) (RET)) #:parameters (list a b c d e f g) #:registers (list RAX RDI RSI RAX))) (test-equal "Reuse stack location for spilled stack parameters" (list (SUB RSP 16) (MOV (ptr RSP 8) 0) (MOV EAX (ptr RSP 8)) (ADD EAX (ptr RSP 24)) (MOV (ptr RSP 8) EAX) (ADD RSP 16) (RET)) (jit-compile (list (MOV r 0) (ADD r g) (RET)) #:parameters (list a b c d e f g) #:registers (list RAX))) (test-equal "Copy result to RAX register before restoring stack pointer and returning" (list (SUB RSP 8) (MOV ECX EDI) (MOV EAX ECX) (ADD RSP 8) (RET)) (jit-compile (list (MOV r a) (RET)) #:parameters (list a) #:results (list r)))) (let [(a (var )) (b (var ))] (test-equal "'compile' should use the specified set of registers" (list (SUB RSP 8) (MOV EDI 1) (MOV EAX 2) (ADD EAX 3) (ADD EDI 4) (ADD RSP 8) (RET)) (jit-compile (list (MOV a 1) (MOV b 2) (ADD b 3) (ADD a 4) (RET)) #:registers (list RSI RDI RAX))) (test-equal "'compile' should spill variables" (list (SUB RSP 16) (MOV (ptr RSP 8) 1) (MOV ESI 2) (ADD ESI 3) (ADD (ptr RSP 8) 4) (ADD RSP 16) (RET)) (jit-compile (list (MOV a 1) (MOV b 2) (ADD b 3) (ADD a 4) (RET)) #:registers (list RAX RSI))) (let [(c (var ))] (test-equal "'compile' should assign separate stack locations" (list (SUB RSP 24) (MOV (ptr RSP 8) 1) (MOV (ptr RSP 16) 2) (MOV EAX 3) (ADD EAX 4) (ADD (ptr RSP 16) 5) (ADD (ptr RSP 8) 6) (ADD RSP 24) (RET)) (jit-compile (list (MOV a 1) (MOV b 2) (MOV c 3) (ADD c 4) (ADD b 5) (ADD a 6) (RET)) #:registers (list RSI RAX)))) (test-equal "'compile' should save callee-saved registers" (list (PUSH RBX) (SUB RSP 16) (MOV (ptr RSP 8) 1) (MOV EBX 2) (ADD EBX 3) (ADD (ptr RSP 8) 4) (ADD RSP 16) (POP RBX) (RET)) (jit-compile (list (MOV a 1) (MOV b 2) (ADD b 3) (ADD a 4) (RET)) #:registers (list RAX RBX)))) (let [(r (var )) (a (var )) (b (var ))] (test-equal "'compile' should block registers if specified" (list (SUB RSP 8) (MOV AL CL) (CBW) (IDIV DL) (MOV CL AL) (ADD RSP 8) (RET)) (jit-compile (list (MOV AL a) (CBW) (IDIV b) (MOV r AL) (RET)) #:registers (list RAX RCX RDX) #:blocked (list (cons RAX '(0 . 3)))))) (let [(a (var )) (b (var )) (c (var )) (d (var )) (e (var )) (f (var )) (g (var )) (r (var ))] (test-equal "save callee-saved registers" (list (PUSH RBX) (SUB RSP 8) (MOV EBX 1) (ADD RSP 8) (POP RBX) (RET)) (jit-compile (list (MOV a 1) (RET)) #:registers (list RBX RAX))) (test-equal "add offset for callee-saved parameters when fetching stack parameters" (list (PUSH RBX) (SUB RSP 8) (MOV EBX (ptr RSP 24)) (MOV EBX 42) (ADD RSP 8) (POP RBX) (RET)) (jit-compile (list (MOV g 42) (RET)) #:parameters (list a b c d e f g) #:registers (list RBX RAX))) (test-equal "add offset for callee-saved parameters when using stack parameters" (list (PUSH RBX) (SUB RSP 8) (MOV (ptr RSP 24) EAX) (ADD RSP 8) (POP RBX) (RET)) (jit-compile (list (MOV g r) (RET)) #:parameters (list a b c d e f g) #:registers (list RBX RAX))) (test-equal "move parameter variable into another location if the register is blocked" (list (SUB RSP 8) (MOV EAX EDI) (MOV EDI EAX) (ADD RSP 8) (RET)) (jit-compile (list (MOV EDI a) (RET)) #:parameters (list a) #:registers (list RDI RAX RCX) #:blocked (list (cons RDI '(0 . 0))))) (test-equal "when allocating registers preserve result variables up to RET statement" (list (SUB RSP 8) (MOV ECX 42) (MOV EAX 0) (MOV EAX ECX) (ADD RSP 8) (RET)) (jit-compile (list (MOV r 42) (MOV b 0) (RET)) #:results (list r)))) (test-end "jit-compile") (test-end "aiscm compile") aiscm-0.15.1/tests/test_asm.scm0000644000175000017500000011355213213600051013276 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (system foreign) (aiscm asm) (aiscm mem) (aiscm element) (aiscm int) (aiscm pointer)) (test-begin "aiscm asm") (load-extension "libguile-aiscm-tests" "init_tests") (define guile-aiscm-tests (dynamic-link "libguile-aiscm-tests")) (define jit-side-effect (dynamic-func "jit_side_effect" guile-aiscm-tests)) (define ctx (make )) (define b1 (random (ash 1 6))) (define b2 (random (ash 1 6))) (define w1 (random (ash 1 14))) (define w2 (random (ash 1 14))) (define i1 (random (ash 1 30))) (define i2 (random (ash 1 30))) (define l1 (random (ash 1 62))) (define l2 (random (ash 1 62))) (define mem (make #:size 256)) (define bptr (make (pointer ) #:value mem)) (define wptr (make (pointer ) #:value mem)) (define iptr (make (pointer ) #:value mem)) (define lptr (make (pointer ) #:value mem)) (define (bdata) (begin (store bptr b1) (store (+ bptr 1) b2) mem)) (define (wdata) (begin (store wptr w1) (store (+ wptr 1) w2) mem)) (define (idata) (begin (store iptr i1) (store (+ iptr 1) i2) mem)) (define (ldata) (begin (store lptr l1) (store (+ lptr 1) l2) mem)) (define (idx) (begin (store lptr #x0102030405060708) mem)) (test-eqv "Get code of RSP register" 4 (get-code RSP)) (test-eqv "Get code of R8D register" 8 (get-code R8D)) (test-eqv "Size of AL" 1 (size-of AL)) (test-eqv "Size of AX" 2 (size-of AX)) (test-eqv "Size of EAX" 4 (size-of EAX)) (test-eqv "Size of RAX" 8 (size-of RAX)) (test-equal "Display EAX" "EAX" (format #f "~a" EAX)) (test-equal "Retrieve RSP by register code and size" RSP (reg 8 4)) (test-equal "Retrieve R8D by register code and size" R8D (reg 4 8)) (test-equal "Retrieve EBX by type and register code" EBX (reg 3)) (test-equal "Get corresponding register of different size" CX (to-type RCX)) (test-equal "Retrieve XMM5 using code" XMM5 (xmm 5)) (test-equal "Get code of XMM5" 5 (get-code XMM5)) (test-equal "MOV EAX, 42" '(#xb8 #x2a #x00 #x00 #x00) (MOV EAX 42)) (test-equal "MOV ECX, 42" '(#xb9 #x2a #x00 #x00 #x00) (MOV ECX 42)) (test-equal "MOV R9D, 42" '(#x41 #xb9 #x2a #x00 #x00 #x00) (MOV R9D 42)) (test-assert "MOV RSI, 42" (equal? '(#x48 #xbe #x2a #x00 #x00 #x00 #x00 #x00 #x00 #x00) (MOV RSI 42))) (test-assert "MOV R9, 42" (equal? '(#x49 #xb9 #x2a #x00 #x00 #x00 #x00 #x00 #x00 #x00) (MOV R9 42))) (test-assert "Assign pointer address" (equal? '(#x48 #xbe #x2a #x00 #x00 #x00 #x00 #x00 #x00 #x00) (MOV RSI (make-pointer 42)))) (test-equal "MOV AL, 42" '(#xb0 #x2a) (MOV AL 42)) (test-equal "MOV AH, 42" '(#xb4 #x2a) (MOV AH 42)) (test-equal "MOV SPL, 42" '(#x40 #xb4 #x2a) (MOV SPL 42)) (test-equal "MOV AX, 42" '(#x66 #xb8 #x2a #x00) (MOV AX 42)) (test-equal "MOV EBX, EAX" '(#x8b #xd8) (MOV EBX EAX)) (test-equal "MOV ECX, EDX" '(#x8b #xca) (MOV ECX EDX)) (test-equal "MOV R8D, R9D" '(#x45 #x8b #xc1) (MOV R8D R9D)) (test-equal "MOV BL, AL" '(#x8a #xd8) (MOV BL AL)) (test-equal "MOV BX, AX" '(#x66 #x8b #xd8) (MOV BX AX)) (test-equal "MOV ECX, [RDX]" '(#x8b #x0a) (MOV ECX (ptr RDX))) (test-equal "Print pointer" "(ptr > RDX)" (format #f "~a" (ptr RDX))) (test-equal "type conversion for address" (slot-ref (to-type (ptr RDX)) 'type)) (test-equal "MOV ECX, [RBP]; special case of REX encoding" '(#x8b #x4d #x00) (MOV ECX (ptr RBP))) (test-equal "MOV RCX, [RDX]" '(#x48 #x8b #x0a) (MOV RCX (ptr RDX))) (test-equal "MOV ECX, [R11]" '(#x41 #x8b #x0b) (MOV ECX (ptr R11))) (test-equal "MOV ECX, [R13]; special case of REX encoding" '(#x41 #x8b #x4d #x00) (MOV ECX (ptr R13))) (test-equal "MOV ECX, [RDX] + 4" '(#x8b #x4a #x04) (MOV ECX (ptr RDX 4))) (test-equal "Print pointer with displacement" "(ptr > RDX 4)" (format #f "~a" (ptr RDX 4))) (test-equal "MOV ECX, [RDX] + 128" '(#x8b #x8a #x80 #x00 #x00 #x00) (MOV ECX (ptr RDX 128))) (test-equal "MOV ECX, [RSP] + 4" '(#x8b #x4c #x24 #x04) (MOV ECX (ptr RSP 4))) (test-equal "MOV R10D, [R11] + 4" '(#x45 #x8b #x53 #x04) (MOV R10D (ptr R11 4))) (test-equal "MOV R10, [R11] + 4" '(#x4d #x8b #x53 #x04) (MOV R10 (ptr R11 4))) (test-equal "MOV CL, [RDX]" '(#x8a #x0a) (MOV CL (ptr RDX))) (test-equal "MOV CX, [RDX]" '(#x66 #x8b #x0a) (MOV CX (ptr RDX))) (test-equal "MOV [RCX], EDX" '(#x89 #x11) (MOV (ptr RCX) EDX)) (test-equal "MOV [RCX], R8D" '(#x44 #x89 #x01) (MOV (ptr RCX) R8D)) (test-equal "MOV [R10], EAX" '(#x41 #x89 #x02) (MOV (ptr R10) EAX)) (test-equal "MOV [R12], EAX" '(#x41 #x89 #x04 #x24) (MOV (ptr R12) EAX)) (test-equal "RET # near return" '(#xc3) (RET)) (test-equal "'obj' should return bytevector with machine code" #vu8(#x8b #xc7 #xc3) (obj (list (MOV EAX EDI) (RET)))) (test-assert "Empty function" (begin ((asm ctx '() (list (RET)))) #t)) (test-eqv "Return constant in EAX" i1 ((asm ctx '() (list (MOV EAX i1) (RET))))) (test-eqv "Return constant in RAX" l1 ((asm ctx '() (list (MOV RAX l1) (RET))))) (test-eqv "Return constant in AL" b1 ((asm ctx '() (list (MOV AL b1) (RET))))) (test-eqv "Return constant in AX" w1 ((asm ctx '() (list (MOV AX w1) (RET))))) (test-eqv "Function copying content from ECX" i1 ((asm ctx '() (list (MOV ECX i1) (MOV EAX ECX) (RET))))) (test-eqv "Function copying content from R14D" i1 ((asm ctx '() (list (MOV R14D i1) (MOV EAX R14D) (RET))))) (test-eqv "Function copying content from R14" (ash 42 32) ((asm ctx '() (list (MOV R14 (ash 42 32)) (MOV RAX R14) (RET))))) (test-eqv "Function copying content from DIL" b1 ((asm ctx '() (list (MOV DIL b1) (MOV AL DIL) (RET))))) (test-equal "SHL EBP, 1" '(#xd1 #xe5) (SHL EBP)) (test-equal "SHL BPL, 1" '(#x40 #xd0 #xe5) (SHL BPL)) (test-equal "SHL BP, 1" '(#x66 #xd1 #xe5) (SHL BP)) (test-equal "SHL RBP, 1" '(#x48 #xd1 #xe5) (SHL RBP)) (test-equal "SHL BPL, CL" '(#x40 #xd2 #xe5) (SHL BPL CL)) (test-equal "SHL BP, CL" '(#x66 #xd3 #xe5) (SHL BP CL)) (test-equal "SAL EBP, 1" '(#xd1 #xe5) (SAL EBP)) (test-equal "SAL RBP, 1" '(#x48 #xd1 #xe5) (SAL RBP)) (test-equal "SAL EBP, CL" '(#xd3 #xe5) (SAL EBP CL)) (test-equal "SAL RBP, CL" '(#x48 #xd3 #xe5) (SAL RBP CL)) (test-eqv "Shift EAX left by 1" (ash i1 1) ((asm ctx '() (list (MOV EAX i1) (SHL EAX) (RET))))) (test-eqv "Shift R9D left by 1" (ash i1 1) ((asm ctx '() (list (MOV R9D i1) (SHL R9D) (MOV EAX R9D) (RET))))) (test-eqv "Function shifting 64-bit number left by 1" (ash l1 1) ((asm ctx '() (list (MOV RAX l1) (SHL RAX) (RET))))) (test-eqv "Shift left with generic amount" (ash i1 2) ((asm ctx '() (list (MOV EAX i1) (MOV CL 2) (SHL EAX CL) (RET))))) (test-equal "SHR EBP, 1" '(#xd1 #xed) (SHR EBP)) (test-equal "SHR RBP, 1" '(#x48 #xd1 #xed) (SHR RBP)) (test-equal "SHR BL CL" '(#x40 #xd2 #xed) (SHR BPL CL)) (test-equal "SHR EBP, CL" '(#xd3 #xed) (SHR EBP CL)) (test-equal "SAR EBP, 1" '(#xd1 #xfd) (SAR EBP)) (test-equal "SAR RBP, 1" '(#x48 #xd1 #xfd) (SAR RBP)) (test-equal "SAR EBP, CL" '(#xd3 #xfd) (SAR EBP CL)) (test-equal "SAR RBP, CL" '(#x48 #xd3 #xfd) (SAR RBP CL)) (test-eqv "Function shifting right by 1" (ash i1 -1) ((asm ctx '() (list (MOV EAX i1) (SHR EAX) (RET))))) (test-eqv "Function shifting negative number right by 1" -21 ((asm ctx '() (list (MOV EAX -42) (SAR EAX) (RET))))) (test-eqv "Function shifting 64-bit number right by 1" (ash l1 -1) ((asm ctx '() (list (MOV RAX l1) (SHR RAX) (RET))))) (test-eqv "Shift left with generic amount" (ash i1 -2) ((asm ctx '() (list (MOV EAX i1) (MOV CL 2) (SHR EAX CL) (RET))))) (test-eqv "Function shifting signed 64-bit number right by 2" (ash -1 30) ((asm ctx '() (list (MOV RAX (ash -1 32)) (SAR RAX) (SAR RAX) (RET))))) (test-equal "ADD EAX, 13" '(#x05 #x0d #x00 #x00 #x00) (ADD EAX 13)) (test-equal "ADD RAX, 13" '(#x48 #x05 #x0d #x00 #x00 #x00) (ADD RAX 13)) (test-equal "ADD AX, 13" '(#x66 #x05 #x0d #x00) (ADD AX 13)) (test-equal "ADD AL, 13" '(#x04 #x0d) (ADD AL 13)) (test-equal "ADD ECX, 13" '(#x81 #xc1 #x0d #x00 #x00 #x00) (ADD ECX 13)) (test-equal "ADD RCX, 13" '(#x48 #x81 #xc1 #x0d #x00 #x00 #x00) (ADD RCX 13)) (test-equal "ADD CX, 13" '(#x66 #x81 #xc1 #x0d #x00) (ADD CX 13)) (test-equal "ADD CL, 13" '(#x80 #xc1 #x0d) (ADD CL 13)) (test-equal "ADD R10D, 13" '(#x41 #x81 #xc2 #x0d #x00 #x00 #x00) (ADD R10D 13)) (test-equal "ADD R10, 13" '(#x49 #x81 #xc2 #x0d #x00 #x00 #x00) (ADD R10 13)) (test-equal "ADD BYTE PTR [RDI], 42" '(#x80 #x07 #x2a) (ADD (ptr RDI) 42)) (test-equal "ADD ECX, EDX" '(#x03 #xca) (ADD ECX EDX)) (test-equal "ADD R14D, R15D" '(#x45 #x03 #xf7) (ADD R14D R15D)) (test-equal "ADD CX, DX" '(#x66 #x03 #xca) (ADD CX DX)) (test-equal "ADD CL, DL" '(#x02 #xca) (ADD CL DL)) (test-equal "ADD ECX, [RDX]" '(#x03 #x0a) (ADD ECX (ptr RDX))) (test-equal "SUB EAX, 13" '(#x2d #x0d #x00 #x00 #x00) (SUB EAX 13)) (test-equal "SUB RAX, 13" '(#x48 #x2d #x0d #x00 #x00 #x00) (SUB RAX 13)) (test-equal "SUB R10D, 13" '(#x41 #x81 #xea #x0d #x00 #x00 #x00) (SUB R10D 13)) (test-equal "SUB R10, 13" '(#x49 #x81 #xea #x0d #x00 #x00 #x00) (SUB R10 13)) (test-equal "SUB (ptr R10), 13" '(#x41 #x81 #x2a #x0d #x00 #x00 #x00) (SUB (ptr R10) 13)) (test-equal "SUB ECX, EDX" '(#x2b #xca) (SUB ECX EDX)) (test-equal "SUB R14D, R15D" '(#x45 #x2b #xf7) (SUB R14D R15D)) (test-eqv "Function using EAX to add 42 and 13" 55 ((asm ctx '() (list (MOV EAX 42) (ADD EAX 13) (RET))))) (test-eqv "Function using RAX to add 42 and 13" 55 ((asm ctx '() (list (MOV RAX 42) (ADD RAX 13) (RET))))) (test-eqv "Function using AX to add 42 and 13" 55 ((asm ctx '() (list (MOV AX 42) (ADD AX 13) (RET))))) (test-eqv "Function using AL to add 42 and 13" 55 ((asm ctx '() (list (MOV AL 42) (ADD AL 13) (RET))))) (test-eqv "Function using R9D to add 42 and 13" 55 ((asm ctx '() (list (MOV R9D 42) (ADD R9D 13) (MOV EAX R9D) (RET))))) (test-eqv "Function using R9 to add 42 and 13" 55 ((asm ctx '() (list (MOV R9 42) (ADD R9 13) (MOV RAX R9) (RET))))) (test-eqv "Function using R9W to add 42 and 13" 55 ((asm ctx '() (list (MOV R9W 42) (ADD R9W 13) (MOV AX R9W) (RET))))) (test-eqv "Function using R9L to add 42 and 13" 55 ((asm ctx '() (list (MOV R9L 42) (ADD R9L 13) (MOV AL R9L) (RET))))) (test-eqv "Function adding two integers in EAX" (+ i1 i2) ((asm ctx '() (list (MOV EAX i1) (ADD EAX i2) (RET))))) (test-eqv "Function adding two integers in EDX" (+ i1 i2) ((asm ctx '() (list (MOV EDX i1) (ADD EDX i2) (MOV EAX EDX) (RET))))) (test-eqv "Function adding two integers in R10D" (+ i1 i2) ((asm ctx '() (list (MOV R10D i1) (ADD R10D i2) (MOV EAX R10D) (RET))))) (test-eqv "Function using EAX and ECX to add two integers" (+ i1 i2) ((asm ctx '() (list (MOV EAX i1) (MOV ECX i2) (ADD EAX ECX) (RET))))) (test-eqv "Function using R14D and R15D to add two integers" (+ i1 i2) ((asm ctx '() (list (MOV R14D i1) (MOV R15D i2) (ADD R14D R15D) (MOV EAX R14D) (RET))))) (test-eqv "Function using AX and CX to add two short integers" (+ w1 w2) ((asm ctx '() (list (MOV AX w1) (MOV CX w2) (ADD AX CX) (RET))))) (test-eqv "Function using AL and CL to add two bytes" (+ b1 b2) ((asm ctx '() (list (MOV AL b1) (MOV CL b2) (ADD AL CL) (RET))))) (test-eqv "Add integer memory operand" (+ i1 i2) ((asm ctx '() (list (MOV EAX i2) (MOV RDX (idata)) (ADD EAX (ptr RDX)) (RET))))) (test-eqv "Add integer to integer in memory" (+ i1 i2) (begin ((asm ctx '() (list (MOV RSI mem) (MOV (ptr RSI) i1) (ADD (ptr RSI) i2) (RET)))) (get (fetch iptr)))) (test-equal "NOP # no operation" '(#x90) (NOP)) (test-eqv "Function with some NOP statements inside" i1 ((asm ctx '() (list (MOV EAX i1) (NOP) (NOP) (RET))))) (test-equal "PUSH RDX" '(#x48 #x52) (PUSH RDX)) (test-equal "PUSH RDI" '(#x48 #x57) (PUSH RDI)) (test-equal "PUSH R12" '(#x49 #x54) (PUSH R12)) (test-equal "POP RDX" '(#x48 #x5a) (POP RDX)) (test-equal "POP RDI" '(#x48 #x5f) (POP RDI)) (test-equal "POP R12" '(#x49 #x5c) (POP R12)) (test-eqv "Use 64-bit PUSH and POP" l1 ((asm ctx '() (list (MOV RDX l1) (PUSH RDX) (POP RAX) (RET))))) (test-eqv "Use 16-bit PUSH and POP" w1 ((asm ctx '() (list (MOV DX w1) (PUSH DX) (POP AX) (RET))))) (test-eqv "Load integer from address in RCX" i1 ((asm ctx '() (list (MOV RCX (idata)) (MOV EAX (ptr RCX)) (RET))))) (test-eqv "Load integer from address in R10" i1 ((asm ctx '() (list (MOV R10 (idata)) (MOV EAX (ptr R10)) (RET))))) (test-eqv "Load integer from address in RCX with offset" i2 ((asm ctx '() (list (MOV RCX (idata)) (MOV EAX (ptr RCX 4)) (RET))))) (test-eqv "Load integer from address in RCX with large offset" i1 ((asm ctx '() (list (MOV RCX (get (+ iptr 50))) (MOV EAX (ptr RCX -200)) (RET))))) (test-eqv "Load integer from address in R9D with offset" i2 ((asm ctx '() (list (MOV R9 (idata)) (MOV EAX (ptr R9 4)) (RET))))) (test-eqv "Load long integer from address in RCX" l1 ((asm ctx '() (list (MOV RCX (ldata)) (MOV RAX (ptr RCX)) (RET))))) (test-eqv "Load long integer from address in RCX with offset" l2 ((asm ctx '() (list (MOV RCX (ldata)) (MOV RAX (ptr RCX 8)) (RET))))) (test-eqv "Load short integer from address in RCX" w1 ((asm ctx '() (list (MOV RCX (wdata)) (MOV AX (ptr RCX)) (RET))))) (test-eqv "Load short integer from address in RCX with offset" w2 ((asm ctx '() (list (MOV RCX (wdata)) (MOV AX (ptr RCX 2)) (RET))))) (test-eqv "Load byte from address in RCX" b1 ((asm ctx '() (list (MOV RCX (bdata)) (MOV AL (ptr RCX)) (RET))))) (test-eqv "Load byte from address in RCX with offset" b2 ((asm ctx '() (list (MOV RCX (bdata)) (MOV AL (ptr RCX 1)) (RET))))) (test-equal "LEA RDX, [RCX + 4]" '(#x48 #x8d #x51 #x04) (LEA RDX (ptr RCX 4))) (test-equal "LEA RAX, [RSP - 4]" '(#x48 #x8d #x44 #x24 #xfc) (LEA RAX (ptr RSP -4))) (test-eqv "Load integer from address in RCX with offset using effective address" i2 ((asm ctx '() (list (MOV RCX (idata)) (LEA RDX (ptr RCX 4)) (MOV EAX (ptr RDX)) (RET))))) (test-equal "LEA RAX, [RDI + ESI * 4]" '(#x48 #x8d #x04 #xb7) (LEA RAX (ptr RDI RSI))) (test-equal "Print pointer with index" "(ptr > RDI RSI)" (format #f "~a" (ptr RDI RSI))) (test-eqv "Load integer from address in RCX with index times 4 using effective address" i2 ((asm ctx '() (list (MOV RCX (idata)) (MOV RDI 1) (LEA RDX (ptr RCX RDI)) (MOV EAX (ptr RDX)) (RET))))) (test-equal "LEA RAX, [RDI + ESI * 2]" '(#x48 #x8d #x04 #x77) (LEA RAX (ptr RDI RSI))) (test-eqv "Load integer from address in RCX with index times 2 using effective address" i2 ((asm ctx '() (list (MOV RCX (idata)) (MOV RDI 2) (LEA RDX (ptr RCX RDI)) (MOV EAX (ptr RDX)) (RET))))) (test-equal "LEA RAX, [RDI + ESI * 2 + 2]" '(#x48 #x8d #x44 #x77 #x02) (LEA RAX (ptr RDI RSI 2))) (test-equal "Print pointer with index and offset" "(ptr > RDI RSI 2)" (format #f "~a" (ptr RDI RSI 2))) (test-eqv "Load integer from address in RCX with index and offset using effective address" i2 ((asm ctx '() (list (MOV RCX (idata)) (MOV RDI 3) (LEA RDX (ptr RCX RDI 1)) (MOV EAX (ptr RDX)) (RET))))) (test-eqv "Load integer from address in R9 with index and offset using effective address" i2 ((asm ctx '() (list (MOV R9 (idata)) (MOV R10 3) (LEA R11 (ptr R9 R10 1)) (MOV EAX (ptr R11)) (RET))))) (test-eqv "Load 8-bit value from memory" #x08 (begin ((asm ctx '() (list (MOV RDI (idx)) (MOV AL (ptr RDI)) (RET)))))) (test-eqv "Load 16-bit value from memory" #x0708 (begin ((asm ctx '() (list (MOV RDI (idx)) (MOV AX (ptr RDI)) (RET)))))) (test-eqv "Load 32-bit value from memory" #x05060708 (begin ((asm ctx '() (list (MOV RDI (idx)) (MOV EAX (ptr RDI)) (RET)))))) (test-eqv "Load 64-bit value from memory" #x0102030405060708 (begin ((asm ctx '() (list (MOV RDI (idx)) (MOV RAX (ptr RDI)) (RET)))))) (test-eqv "Write value of ECX to memory" i1 (begin ((asm ctx '() (list (MOV RSI mem) (MOV ECX i1) (MOV (ptr RSI) ECX) (RET)))) (get (fetch iptr)))) (test-eqv "Write value of RCX to memory" l1 (begin ((asm ctx '() (list (MOV RSI mem) (MOV RCX l1) (MOV (ptr RSI) RCX) (RET)))) (get (fetch lptr)))) (test-eqv "Write value of R8D to memory" i1 (begin ((asm ctx '() (list (MOV RSI mem) (MOV R8D i1) (MOV (ptr RSI) R8D) (RET)))) (get (fetch iptr)))) (test-eqv "Write value of ECX to memory" i1 (begin ((asm ctx '() (list (MOV RSI mem) (MOV ECX i1) (MOV (ptr RSI) ECX) (RET)))) (get (fetch iptr)))) (test-equal "MOV DWORD PTR [RDI], 42" '(#xc7 #x07 #x2a #x00 #x00 #x00) (MOV (ptr RDI) 42)) (test-equal "MOV QWORD PTR [RDI], 42" '(#x48 #xc7 #x07 #x2a #x00 #x00 #x00) (MOV (ptr RDI) 42)) (test-equal "MOV WORD PTR [RDI], 42" '(#x66 #xc7 #x07 #x2a #x00) (MOV (ptr RDI) 42)) (test-equal "MOV BYTE PTR [RDI], 42" '(#xc6 #x07 #x2a) (MOV (ptr RDI) 42)) (test-eqv "Write 8-bit value to memory" #x0102030405060700 (begin ((asm ctx '() (list (MOV RDI (idx)) (MOV (ptr RDI) 0) (RET)))) (get (fetch lptr)))) (test-eqv "Write 16-bit value to memory" #x0102030405060000 (begin ((asm ctx '() (list (MOV R10 (idx)) (MOV (ptr R10) 0) (RET)))) (get (fetch lptr)))) (test-eqv "Write 32-bit value to memory" #x0102030400000000 (begin ((asm ctx '() (list (MOV RDI (idx)) (MOV (ptr RDI) 0) (RET)))) (get (fetch lptr)))) (test-eqv "Write 64-bit value to memory" #x0000000000000000 (begin ((asm ctx '() (list (MOV RDI (idx)) (MOV (ptr RDI) 0) (RET)))) (get (fetch lptr)))) (test-eqv "Return first integer argument" 2 ((asm ctx (make-list 4 ) (list (MOV EAX EDI) (RET))) 2 3 5 7)) (test-eqv "Return sixth integer argument" 13 ((asm ctx (make-list 6 ) (list (MOV EAX R9D) (RET))) 2 3 5 7 11 13)) (test-eqv "Return seventh integer argument" 17 ((asm ctx (make-list 8 ) (list (MOV EAX (ptr RSP #x8)) (RET))) 2 3 5 7 11 13 17 19)) (test-eqv "Return eighth integer argument" 19 ((asm ctx (make-list 8 ) (list (MOV EAX (ptr RSP #x10)) (RET))) 2 3 5 7 11 13 17 19)) (test-equal "NOT EBX" '(#xf7 #xd3) (NOT EBX)) (test-equal "NOT BX" '(#x66 #xf7 #xd3) (NOT BX)) (test-equal "NOT BL" '(#xf6 #xd3) (NOT BL)) (test-equal "NEG EBX" '(#xf7 #xdb) (NEG EBX)) (test-equal "NEG BX" '(#x66 #xf7 #xdb) (NEG BX)) (test-equal "NEG BL" '(#xf6 #xdb) (NEG BL)) (test-equal "INC EBX" '(#xff #xc3) (INC EBX)) (test-equal "INC BX" '(#x66 #xff #xc3) (INC BX)) (test-equal "INC BL" '(#xfe #xc3) (INC BL)) (test-eqv "Function negating an integer" (- i1) ((asm ctx (list ) (list (MOV EAX EDI) (NEG EAX) (RET))) i1)) (test-eqv "Function negating a long integer" (- l1) ((asm ctx (list ) (list (MOV RAX RDI) (NEG RAX) (RET))) l1)) (test-eqv "Function negating a short integer" (- w1) ((asm ctx (list ) (list (MOV AX DI) (NEG AX) (RET))) w1)) (test-eqv "Function negating a byte" (- b1) ((asm ctx (list ) (list (MOV AL DIL) (NEG AL) (RET))) b1)) (test-eqv "Function subtracting two integers in EAX" (- i1 i2) ((asm ctx '() (list (MOV EAX i1) (SUB EAX i2) (RET))))) (test-eqv "Function subtracting two integers in EDX" (- i1 i2) ((asm ctx '() (list (MOV EDX i1) (SUB EDX i2) (MOV EAX EDX) (RET))))) (test-eqv "Function subtracting two integers in R10D" (- i1 i2) ((asm ctx '() (list (MOV R10D i1) (SUB R10D i2) (MOV EAX R10D) (RET))))) (test-eqv "Function using EAX and ECX to subtract two integers" (- i1 i2) ((asm ctx '() (list (MOV EAX i1) (MOV ECX i2) (SUB EAX ECX) (RET))))) (test-eqv "Function using R14D and R15D to subtract two integers" (- i1 i2) ((asm ctx '() (list (MOV R14D i1) (MOV R15D i2) (SUB R14D R15D) (MOV EAX R14D) (RET))))) (test-equal "IMUL RCX, RDX" '(#x48 #x0f #xaf #xca) (IMUL RCX RDX)) (test-eqv "Function using EAX and ECX to multiply two short integers" (* w1 w2) ((asm ctx '() (list (MOV EAX w1) (MOV ECX w2) (IMUL EAX ECX) (RET))))) (test-eqv "Function using RAX and RCX to multiply two integers" (* i1 i2) ((asm ctx '() (list (MOV RAX i1) (MOV RCX i2) (IMUL RAX RCX) (RET))))) (test-equal "IMUL EAX, R10D, 4" '(#x41 #x6b #xc2 #x04) (IMUL EAX R10D 4)) (test-equal "IMUL EAX, R10D, 1024" '(#x41 #x69 #xc2 #x00 #x04 #x00 #x00) (IMUL EAX R10D 1024)) (test-equal "IMUL EAX, R10D, -129" '(#x41 #x69 #xc2 #x7f #xff #xff #xff) (IMUL EAX R10D -129)) (test-equal "IMUL AX, R10W, 1024" '(#x66 #x41 #x69 #xc2 #x00 #x04) (IMUL AX R10W 1024)) (test-eqv "Function multiplying an integer with a byte constant" (* w1 b2) ((asm ctx (list ) (list (IMUL EAX EDI b2) (RET))) w1)) (test-equal "IDIV ESI" '(#xf7 #xfe) (IDIV ESI)) (test-equal "IDIV SIL" '(#x40 #xf6 #xfe) (IDIV SIL)) (test-equal "IDIV SI" '(#x66 #xf7 #xfe) (IDIV SI)) (test-equal "DIV ESI" '(#xf7 #xf6) (DIV ESI)) (test-equal "DIV SIL" '(#x40 #xf6 #xf6) (DIV SIL)) (test-equal "DIV SI" '(#x66 #xf7 #xf6) (DIV SI)) (test-equal "AND EAX, 13" '(#x25 #x0d #x00 #x00 #x00) (AND EAX 13)) (test-equal "AND ECX, 13" '(#x81 #xe1 #x0d #x00 #x00 #x00) (AND ECX 13)) (test-equal "AND BYTE PTR [RDI], 42" '(#x80 #x27 #x2a) (AND (ptr RDI) 42)) (test-equal "AND ECX, EDX" '(#x23 #xca) (AND ECX EDX)) (test-equal "AND ECX, [RDX]" '(#x23 #x0a) (AND ECX (ptr RDX))) (test-equal "OR EAX, 13" '(#x0d #x0d #x00 #x00 #x00) (OR EAX 13)) (test-equal "OR ECX, 13" '(#x81 #xc9 #x0d #x00 #x00 #x00) (OR ECX 13)) (test-equal "OR BYTE PTR [RDI], 42" '(#x80 #x0f #x2a) (OR (ptr RDI) 42)) (test-equal "OR ECX, EDX" '(#x0b #xca) (OR ECX EDX)) (test-equal "OR ECX, [RDX]" '(#x0b #x0a) (OR ECX (ptr RDX))) (test-equal "XOR EAX, 13" '(#x35 #x0d #x00 #x00 #x00) (XOR EAX 13)) (test-equal "XOR ECX, 13" '(#x81 #xf1 #x0d #x00 #x00 #x00) (XOR ECX 13)) (test-equal "XOR BYTE PTR [RDI], 42" '(#x80 #x37 #x2a) (XOR (ptr RDI) 42)) (test-equal "XOR ECX, EDX" '(#x33 #xca) (XOR ECX EDX)) (test-equal "XOR ECX, [RDX]" '(#x33 #x0a) (XOR ECX (ptr RDX))) (test-assert "Assembler should tolerate labels" (asm ctx '() (list (MOV EAX i1) 'tst (RET)))) (test-equal "JMP 42" '(#xeb #x2a) (JMP 42)) (test-equal "JMP 420" '(#xe9 #xa4 #x01 #x00 #x00) (JMP 420)) (test-equal "Remove label information from program" (list (NOP) (NOP)) (resolve-jumps (list (NOP) 'tst (NOP)))) (test-equal "Resolve jump address in trivial program" (list (JMP 0)) (resolve-jumps (list (JMP 'tst) 'tst))) (test-equal "Resolve backward jump" (list (JMP -2)) (resolve-jumps (list 'tst (JMP 'tst)))) (test-assert "JMP is not a conditional jump" (not (conditional? (JMP 'tst)))) (test-equal "Resolve jump address in program with trailing NOP" (list (JMP 1) (NOP)) (resolve-jumps (list (JMP 'tst) (NOP) 'tst))) (test-equal "Resolve jump address in program with leading NOP" (list (NOP) (JMP 0)) (resolve-jumps (list (NOP) (JMP 'tst) 'tst))) (test-equal "Resolve multiple jump statements" (list (JMP 2) (JMP 0)) (resolve-jumps (list (JMP 'tst) (JMP 'tst) 'tst))) (test-equal "Resolve multiple jump addresses" (list (JMP 2) (JMP -4)) (resolve-jumps (list 'a (JMP 'b) (JMP 'a) 'b))) (test-equal "Resolve a jump of 127 bytes" (list #xeb #x7f) (car (resolve-jumps (append (list (JMP 'a)) (make-list 127 (NOP)) (list 'a))))) (test-equal "Resolve a jump of 128 bytes" (list #xe9 #x80 #x00 #x00 #x00) (car (resolve-jumps (append (list (JMP 'a)) (make-list 128 (NOP)) (list 'a))))) (test-equal "Resolve a jump over a long jump statement" (list #xeb #x05) (car (resolve-jumps (append (list (JMP 'a) (JMP 'b) 'a) (make-list 128 (NOP)) (list 'b))))) (test-eqv "Function with a local jump" i1 ((asm ctx '() (list (MOV ECX i1) (JMP 'tst) (MOV ECX 0) 'tst (MOV EAX ECX) (RET))))) (test-eqv "Function with several local jumps" i1 ((asm ctx '() (list (MOV EAX 0) (JMP 'b) 'a (MOV EAX i1) (JMP 'c) 'b (MOV EAX i2) (JMP 'a) 'c (RET))))) (test-eq "'retarget' should update target of jump statement" 'new (get-target (retarget (JMP 'old) 'new))) (test-equal "CMP EAX 42" '(#x3d #x2a #x00 #x00 #x00) (CMP EAX 42)) (test-equal "CMP RAX 42" '(#x48 #x3d #x2a #x00 #x00 #x00) (CMP RAX 42)) (test-equal "CMP R10D 42" '(#x41 #x81 #xfa #x2a #x00 #x00 #x00) (CMP R10D 42)) (test-equal "CMP R10 42" '(#x49 #x81 #xfa #x2a #x00 #x00 #x00) (CMP R10 42)) (test-equal "SETE R9L" '(#x41 #x0f #x94 #xc1) (SETE R9L)) (test-equal "SETB DL" '(#x0f #x92 #xc2) (SETB DL)) (test-eqv "Compare zero in EAX with zero" 1 ((asm ctx (list ) (list (MOV EAX EDI) (CMP EAX 0) (SETE AL) (RET))) 0)) (test-eqv "Compare non-zero number in EAX with zero" 0 ((asm ctx (list ) (list (MOV EAX EDI) (CMP EAX 0) (SETE AL) (RET))) (logior 1 i1))) (test-equal "CMP R10D 42" '(#x41 #x81 #xfa #x2a #x00 #x00 #x00) (CMP R10D 42)) (test-eqv "Compare zero in R10D with zero" 1 ((asm ctx (list ) (list (MOV R10D EDI) (CMP R10D 0) (SETE AL) (RET))) 0)) (test-eqv "Compare non-zero number in R10D with zero" 0 ((asm ctx (list ) (list (MOV R10D EDI) (CMP R10D 0) (SETE AL) (RET))) (logior 1 i1))) (test-equal "CMP EDI ESI" '(#x3b #xfe) (CMP EDI ESI)) (test-eqv "Two integers being equal" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETE AL) (RET))) i1 i1)) (test-eqv "Two integers not being equal" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETE AL) (RET))) i1 (logxor 1 i1))) (test-equal "CMP RSI RDI" '(#x48 #x3b #xf7) (CMP RSI RDI)) (test-eqv "Two long integers being equal" 1 ((asm ctx (list ) (list (CMP RSI RDI) (SETE AL) (RET))) l1 l1)) (test-eqv "Two long integers not being equal" 0 ((asm ctx (list ) (list (CMP RSI RDI) (SETE AL) (RET))) l1 (logxor 1 l1))) (test-equal "SETB R9L" '(#x41 #x0f #x92 #xc1) (SETB R9L)) (test-eqv "Unsigned integer being below another" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETB AL) (RET))) 1 3)) (test-eqv "Unsigned integer not being below another" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETB AL) (RET))) 3 3)) (test-equal "SETNB R9L" '(#x41 #x0f #x93 #xc1) (SETNB R9L)) (test-eqv "Unsigned integer not being above or equal" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETNB AL) (RET))) 1 3)) (test-eqv "Unsigned integer being above or equal" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETNB AL) (RET))) 3 3)) (test-equal "SETNE R9L" '(#x41 #x0f #x95 #xc1) (SETNE R9L)) (test-eqv "Two integers not being unequal" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETNE AL) (RET))) i1 i1)) (test-eqv "Two integers being unequal" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETNE AL) (RET))) i1 (logxor 1 i1))) (test-equal "SETBE R9L" '(#x41 #x0f #x96 #xc1) (SETBE R9L)) (test-eqv "Unsigned integer being below or equal" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETBE AL) (RET))) 3 3)) (test-eqv "Unsigned integer not being below or equal" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETBE AL) (RET))) 4 3)) (test-equal "SETNBE R9L" '(#x41 #x0f #x97 #xc1) (SETNBE R9L)) (test-eqv "Unsigned integer not being above" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETNBE AL) (RET))) 3 3)) (test-eqv "Unsigned integer being above" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETNBE AL) (RET))) 4 3)) (test-equal "SETL R9L" '(#x41 #x0f #x9c #xc1) (SETL R9L)) (test-eqv "Signed integer being less" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETL AL) (RET))) -2 3)) (test-eqv "Signed integer not being less" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETL AL) (RET))) 3 3)) (test-equal "SETNL R9L" '(#x41 #x0f #x9d #xc1) (SETNL R9L)) (test-eqv "Signed integer not being greater or equal" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETNL AL) (RET))) -2 3)) (test-eqv "Signed integer being greater or equal" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETNL AL) (RET))) 3 3)) (test-equal "SETLE R9L" '(#x41 #x0f #x9e #xc1) (SETLE R9L)) (test-eqv "Signed integer being less or equal" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETLE AL) (RET))) -2 -2)) (test-eqv "Signed integer not being less or equal" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETLE AL) (RET))) 3 -2)) (test-equal "SETNLE R9L" '(#x41 #x0f #x9f #xc1) (SETNLE R9L)) (test-eqv "Signed integer not being greater" 0 ((asm ctx (list ) (list (CMP EDI ESI) (SETNLE AL) (RET))) -2 -2)) (test-eqv "Signed integer being greater" 1 ((asm ctx (list ) (list (CMP EDI ESI) (SETNLE AL) (RET))) 3 -2)) (test-equal "JE 42" '(#x74 #x2a) (JE 42)) (test-assert "JE is a conditional jump" (conditional? (JE 'tst))) (test-eqv "Test JE with ZF=1" 1 ((asm ctx '() (list (MOV EAX 1) (CMP EAX 1) (JE 'l) (MOV EAX 0) 'l (RET))))) (test-eqv "Test JE with ZF=0" 0 ((asm ctx '() (list (MOV EAX 2) (CMP EAX 1) (JE 'l) (MOV EAX 0) 'l (RET))))) (test-equal "JB 42" '(#x72 #x2a) (JB 42)) (test-eqv "Test JB with CF=1" 3 ((asm ctx (list ) (list (MOV EAX EDI) (CMP EAX 5) (JB 'l) (MOV EAX 5) 'l (RET))) 3)) (test-eqv "Test JB with CF=0" 5 ((asm ctx (list ) (list (MOV EAX EDI) (CMP EAX 5) (JB 'l) (MOV EAX 5) 'l (RET))) 7)) (test-equal "JNE 42" '(#x75 #x2a) (JNE 42)) (test-equal "JBE 42" '(#x76 #x2a) (JBE 42)) (test-equal "JNBE 42" '(#x77 #x2a) (JNBE 42)) (test-equal "JL 42" '(#x7c #x2a) (JL 42)) (test-equal "JNL 42" '(#x7d #x2a) (JNL 42)) (test-equal "JLE 42" '(#x7e #x2a) (JLE 42)) (test-equal "JNLE 42" '(#x7f #x2a) (JNLE 42)) (test-equal "TEST EAX 42" '(#xa9 #x2a #x00 #x00 #x00) (TEST EAX 42)) (test-equal "TEST ECX 42" '(#xf7 #xc1 #x2a #x00 #x00 #x00) (TEST ECX 42)) (test-equal "TEST EDI EDI" '(#x85 #xff) (TEST EDI EDI)) (test-equal "MOVSX CX DL" '(#x66 #x0f #xbe #xca) (MOVSX CX DL)) (test-eqv "Convert byte to short integer" b1 ((asm ctx '() (list (MOV AX w1) (MOV CL b1) (MOVSX AX CL) (RET))))) (test-eqv "Convert negative byte to short integer" -42 ((asm ctx '() (list (MOV AX w1) (MOV CL -42) (MOVSX AX CL) (RET))))) (test-equal "MOVSX ECX DL" '(#x0f #xbe #xca) (MOVSX ECX DL)) (test-eqv "Convert byte to integer" b1 ((asm ctx '() (list (MOV EAX i1) (MOV CL b1) (MOVSX EAX CL) (RET))))) (test-eqv "Convert negative byte to integer" -42 ((asm ctx '() (list (MOV EAX i1) (MOV CL -42) (MOVSX EAX CL) (RET))))) (test-equal "MOVSX RCX DL" '(#x48 #x0f #xbe #xca) (MOVSX RCX DL)) (test-eqv "Convert byte to short integer" b1 ((asm ctx '() (list (MOV RAX l1) (MOV CL b1) (MOVSX RAX CL) (RET))))) (test-eqv "Convert negative byte to short integer" -42 ((asm ctx '() (list (MOV RAX l1) (MOV CL -42) (MOVSX RAX CL) (RET))))) (test-equal "MOVSX ECX DX" '(#x0f #xbf #xca) (MOVSX ECX DX)) (test-eqv "Convert short integer to integer" w1 ((asm ctx '() (list (MOV EAX i1) (MOV CX w1) (MOVSX EAX CX) (RET))))) (test-eqv "Convert negative short integer to integer" -42 ((asm ctx '() (list (MOV EAX i1) (MOV CX -42) (MOVSX EAX CX) (RET))))) (test-equal "MOVSX RCX DX" '(#x48 #x0f #xbf #xca) (MOVSX RCX DX)) (test-eqv "Convert short integer to long integer" w1 ((asm ctx '() (list (MOV RAX l1) (MOV CX w1) (MOVSX RAX CX) (RET))))) (test-eqv "Convert negative short integer to long integer" -42 ((asm ctx '() (list (MOV RAX l1) (MOV CX -42) (MOVSX RAX CX) (RET))))) (test-equal "MOVSX RCX EDX" '(#x48 #x63 #xca) (MOVSX RCX EDX)) (test-eqv "Convert integer to long integer" i1 ((asm ctx '() (list (MOV RAX l1) (MOV ECX i1) (MOVSX RAX ECX) (RET))))) (test-eqv "Convert negative integer to long integer" -42 ((asm ctx '() (list (MOV RAX l1) (MOV ECX -42) (MOVSX RAX ECX) (RET))))) (test-equal "MOVZX CX AL" '(#x66 #x0f #xb6 #xc8) (MOVZX CX AL)) (test-eqv "Convert unsigned byte to unsigned short integer" b1 ((asm ctx '() (list (MOV AX w1) (MOV CL b1) (MOVZX AX CL) (RET))))) (test-equal "MOVZX ECX AL" '(#x0f #xb6 #xc8) (MOVZX ECX AL)) (test-eqv "Convert unsigned byte to unsigned integer" b1 ((asm ctx '() (list (MOV EAX i1) (MOV CL b1) (MOVZX EAX CL) (RET))))) (test-equal "MOVZX ECX AX" '(#x0f #xb7 #xc8) (MOVZX ECX AX)) (test-eqv "Convert unsigned short integer to unsigned integer" w1 ((asm ctx '() (list (MOV EAX i1) (MOV CX w1) (MOVZX EAX CX) (RET))))) (test-equal "MOVZX ECX AX" '(#x0f #xb7 #xc8) (MOVZX ECX AX)) (test-eqv "Convert unsigned short integer to unsigned integer" w1 ((asm ctx '() (list (MOV EAX i1) (MOV CX w1) (MOVZX EAX CX) (RET))))) (test-equal "MOVZX ECX AX" '(#x0f #xb7 #xc8) (MOVZX ECX AX)) (test-error "MOVZX RCX EAX should throw error" 'misc-error (MOVZX RCX EAX)) (test-eqv "Convert unsigned short integer to unsigned long integer" w1 ((asm ctx '() (list (MOV RAX l1) (MOV CX w1) (MOVZX RAX CX) (RET))))) (test-eqv "Convert unsigned integer to unsigned long integer" i1 ((asm ctx '() (list (MOV RAX l1) (MOV ECX i1) (MOV RAX ECX) (RET))))) (test-eqv "Save and restore value of RBX using the stack (this will crash if it does not restore RBX properly)" 42 ((asm ctx '() (list (PUSH RBX) (MOV EBX 42) (MOV EAX EBX) (POP RBX) (RET))))) (test-equal "CBW" '(#x66 #x98) (CBW)) (test-equal "CWDE" '(#x98) (CWDE)) (test-equal "CDQE" '(#x48 #x98) (CDQE)) (test-eqv "Sign-extend AL" (- b1) ((asm ctx '() (list (MOV AX w1) (MOV AL (- b1)) (CBW) (RET))))) (test-eqv "Sign-extend AX" (- w1) ((asm ctx '() (list (MOV EAX i1) (MOV AX (- w1)) (CWDE) (RET))))) (test-eqv "Sign-extend EAX" (- i1) ((asm ctx '() (list (MOV RAX l1) (MOV EAX (- i1)) (CDQE) (RET))))) (test-equal "CWD" '(#x66 #x99) (CWD)) (test-equal "CDQ" '(#x99) (CDQ)) (test-equal "CQO" '(#x48 #x99) (CQO)) (test-eqv "Sign extend AX into DX:AX" #xffff ((asm ctx '() (list (MOV AX -42) (CWD) (MOV AX DX) (RET))))) (test-eqv "Sign extend EAX into EDX:EAX" #xffffffff ((asm ctx '() (list (MOV EAX -42) (CDQ) (MOV EAX EDX) (RET))))) (test-eqv "Sign extend RAX into RDX:RAX" #xffffffffffffffff ((asm ctx '() (list (MOV RAX -42) (CQO) (MOV RAX RDX) (RET))))) (test-eqv "Explicitely manage stack pointer (this will crash if it does not restore RBX and RSP properly)" 42 ((asm ctx '() (list (MOV (ptr RSP -8) RBX) (SUB RSP 8) (MOV EBX 42) (MOV EAX EBX) (MOV RBX (ptr RSP)) (ADD RSP 8) (RET))))) (test-eqv "Check whether this Guile version supports foreign calls with more than 10 arguments" 11 ((asm ctx (make-list 11 ) (list (MOV EAX (ptr RSP #x28)) (RET))) 1 2 3 4 5 6 7 8 9 10 11)) (test-equal "CMOVB ECX ESI" '(#x0f #x42 #xce) (CMOVB ECX ESI)) (test-equal "CMOVNB ECX ESI" '(#x0f #x43 #xce) (CMOVNB ECX ESI)) (test-equal "CALL RDX" '(#x48 #xff #xd2) (CALL RDX)) (test-eqv "Compile a method call" 42 (begin (jit-reset-side-effect) ((asm ctx '() (list (MOV RCX jit-side-effect) (CALL RCX) (RET)))) (jit-reset-side-effect))) (test-end "aiscm asm") aiscm-0.15.1/tests/test_complex.scm0000644000175000017500000001735313213600051014167 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-26) (srfi srfi-64) (oop goops) (aiscm composite) (aiscm complex) (aiscm element) (aiscm int) (aiscm obj) (aiscm float) (aiscm pointer) (aiscm sequence) (aiscm asm) (aiscm variable) (aiscm command) (aiscm jit) (aiscm expression) (aiscm tensor)) (test-begin "aiscm complex") (define ctx (make )) (define v (make (complex ) #:value 2+3i)) (define r (make (complex ) #:value 5)) (test-eq "equality of complex types" (complex ) (complex )) (test-eqv "storage size of byte complex" 2 (size-of (complex ))) (test-eqv "storage size of single-precision floating-point complex" 8 (size-of (complex ))) (test-eq "base of integer complex type" (base (complex ))) (test-equal "pack complex value" #vu8(#x02 #x03) (pack v)) (test-equal "pack complex value with zero imaginary component" #vu8(#x05 #x00) (pack r)) (test-equal "unpack complex value" v (unpack (complex ) #vu8(#x02 #x03))) (test-assert "complex has no dimensions" (null? (shape v))) (test-eq "coerce complex and scalar type" (complex ) (coerce (complex ) )) (test-eq "coerce scalar type and complex" (complex ) (coerce (complex ))) (test-eq "coerce different complex types" (complex ) (coerce (complex ) (complex ))) (test-eq "coerce complex array from array types" (sequence (complex )) (coerce-complex (sequence ))) (test-eq "coerce 2D complex array from array types" (multiarray (complex ) 2) (coerce-complex (multiarray 2))) (test-eq "coerce integer sequence and complex type" (sequence (complex )) (coerce (sequence ) (complex ))) (test-eq "coerce complex type and integer sequence" (sequence (complex )) (coerce (complex ) (sequence ))) (test-eq "coerce complex type and 2D array" (multiarray (complex ) 2) (coerce (complex ) (multiarray 2))) (test-equal "'unbuild' extracts the components of a complex value" (list 2 3) (unbuild (complex ) 2+3i)) (test-eq "type matching for 2+3i" (complex ) (native-type 2+3i)) (test-expect-fail 2) (test-eq "type matching for complex value and scalar" (complex ) (native-type 2+3i 1.2)) (test-eq "type matching for scalar and complex value" (complex ) (native-type 1.2 2+3i)) (test-eq "base type of sequence applies to element type" (sequence ) (base (sequence (complex )))) (test-eqv "conjugate of complex number" 2-3i (conj 2+3i)) (test-eqv "Return complex number" 2+3i ((jit ctx (list (complex )) identity) 2+3i)) (test-eqv "Extract real component in compiled code" 2 ((jit ctx (list (complex )) real-part) 2+3i)) (test-equal "Real part of complex array" '(2 5) (to-list (real-part (seq 2+3i 5+7i)))) (test-eqv "Extract imaginary component in compiled code" 3 ((jit ctx (list (complex )) imag-part) 2+3i)) (test-equal "Imaginary part of complex array" '(3 7) (to-list (imag-part (seq 2+3i 5+7i)))) (test-equal "compose complex value in compiled code" 2+3i ((jit ctx (list ) (lambda (re im) (complex re im))) 2 3)) (test-equal "convert byte complex to integer complex" 2+3i ((jit ctx (list (complex )) (cut to-type (complex ) <>)) 2+3i)) (test-eqv "add complex values" 7+10i ((jit ctx (list (complex ) (complex )) +) 2+3i 5+7i)) (test-eqv "add complex and real value" 6+3i ((jit ctx (list (complex ) ) +) 2+3i 4)) (test-eqv "add real and complex value" 5+4i ((jit ctx (list (complex )) +) 2 3+4i)) (test-eqv "negate complex number" -2-3i ((jit ctx (list (complex )) -) 2+3i)) (test-eqv "multiply complex numbers" -11+29i ((jit ctx (list (complex ) (complex )) *) 2+3i 5+7i)) (test-eqv "multiply complex numbers and real value" 10+15i ((jit ctx (list (complex ) ) *) 2+3i 5)) (test-eqv "multiply real number and complex number" 6+10i ((jit ctx (list (complex )) *) 2 3+5i)) (test-eqv "divide complex numbers" 5+7i ((jit ctx (list (complex ) (complex )) /) -11+29i 2+3i)) (test-eqv "divide complex number by number" 2+3i ((jit ctx (list (complex ) ) /) 4+6i 2)) (test-eqv "divide number by complex number" 3-4i ((jit ctx (list (complex )) /) 25 3+4i)) (test-eqv "get real part of real number" 42 ((jit ctx (list ) real-part) 42)) (test-equal "real part of array is array" '(2 3 5) (to-list (real-part (seq 2 3 5)))) (test-equal "Compile code to get imaginary part of real array" '(0 0 0) (to-list ((jit ctx (list (sequence )) imag-part) (seq 2 3 5)))) (test-equal "imaginary part of array is array of zeros" '(0 0 0) (to-list (imag-part (seq 2 3 5)))) (test-eqv "get imaginary part of real number" 0 ((jit ctx (list ) imag-part) 42)) (test-eqv "complex conjugate" 2-3i ((jit ctx (list (complex )) conj) 2+3i)) (test-eqv "conjugate of real number" 2 ((jit ctx (list ) conj) 2)) (let [(c (parameter (complex )))] (test-assert "Decompose complex parameters into internal complex values" (is-a? (decompose-value (complex ) c) ))) (test-assert "complex integer memory is pointerless" (pointerless? (complex ))) (test-assert "complex object memory is not pointerless" (not (pointerless? (complex )))) (test-eqv "extract real part of object complex" 2 ((jit ctx (list (complex )) real-part) 2+3i)) (test-eqv "extract imaginary part of object complex" 3 ((jit ctx (list (complex )) imag-part) 2+3i)) (test-equal "extract real part of complex object array" (list 2.0) (to-list (real-part (seq (complex ) 2+3i)))) (test-equal "extract imaginary part of complex object array" (list 3.0) (to-list (imag-part (seq (complex ) 2+3i)))) (test-equal "components of complex values are real-part and imag-part" (list real-part imag-part) (components >)) (test-begin "cumulative tensor operations") (test-equal "Tensor sum of complex values" 5+8i (tensor (sum i (get (seq 2+3i 3+5i) i)))) (test-equal "Tensor product of complex values" -9+19i (tensor (prod i (get (seq (complex ) 2+3i 3+5i) i)))) (test-equal "Collect largest real and imaginary values" 7+5i (tensor (largest i (get (seq 2+5i 7+3i) i)))) (test-equal "Collect smallest real and imaginary values" 2+3i (tensor (smallest i (get (seq 2+5i 7+3i) i)))) (test-end "cumulative tensor operations") (test-begin "select complex values using 'where'") (test-equal "select from two values" (list 2+3i 5+7i) (to-list (where (seq #t #f) 2+3i 5+7i))) (test-equal "select from complex and scalar value" (list 2+3i 5) (to-list (where (seq #t #f) 2+3i 5))) (test-equal "select from scalar and complex value" (list 2 3+5i) (to-list (where (seq #t #f) 2 3+5i))) (test-end "select complex values using 'where'") (test-end "aiscm complex") aiscm-0.15.1/tests/test_variable.scm0000644000175000017500000000477713213600051014313 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm bool) (aiscm int) (aiscm float) (aiscm rgb) (aiscm obj) (aiscm pointer) (aiscm variable)) (test-begin "aiscm variable") (test-begin "native equivalent") (test-assert "RGB does not have a native equivalent" (not (native-equivalent (rgb 1 2 3)))) (test-eq "integer is it's own native equivalent" (native-equivalent )) (test-eq "short integer is it's own native equivalent" (native-equivalent )) (test-eq "byte is native equivalent of boolean" (native-equivalent )) (test-eq "native equivalent of pointer is a 64 bit integer" (native-equivalent (pointer ))) (test-eq "native equivalent of Scheme reference is a 64 bit integer" (native-equivalent )) (test-eq "floating point number is it's own equivalent" (native-equivalent )) (test-eq "single-precision floating point number is it's own equivalent" (native-equivalent )) (test-end "native equivalent") (test-begin "\"var\"' shortcut") (test-eq "Shortcut for creating variables creates variables" (class-of (var ))) (test-eq "Shortcut for creating variables uses specified type" (typecode (var ))) (test-eq "Boolean values are represented using unsigned byte" (typecode (var ))) (test-end "\"var\"' shortcut") (test-end "aiscm variable") (test-begin "size-of") (test-eqv "size of variable is size of typecode" 4 (size-of (var ))) (test-eqv "size of pointer is size of target's typecode" 2 (size-of (ptr (var )))) (test-end "size-of") aiscm-0.15.1/tests/test_float.scm0000644000175000017500000000717613213600051013627 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (system foreign) (aiscm element) (aiscm float) (aiscm jit)) (test-begin "aiscm float") (test-equal "equality of classes" (floating-point single-precision) (floating-point single-precision)) (test-eq "determine precision of single-precision floating point class" single-precision (precision (floating-point single-precision))) (test-eq "determine precision of double-precision floating point class" double-precision (precision (floating-point double-precision))) (test-assert "check whether single-precision floating point is double" (not (double? (floating-point single-precision)))) (test-assert "check whether double-precision floating point is double" (double? (floating-point double-precision))) (test-equal "equality of predefined clases" (floating-point single-precision)) (test-eqv "size of single-precision floating point number" 4 (size-of )) (test-eqv "size of double-precision floating point number" 8 (size-of )) (test-equal "pack single-precision floating point number" #vu8(#x00 #x00 #xc0 #x3f) (pack (make #:value 1.5))) (test-equal "pack double-precision floating point number" #vu8(#x1f #x85 #xeb #x51 #xb8 #x1e #x09 #x40) (pack (make #:value 3.14))) (test-equal "display floating point object" "#<> 3.14>" (call-with-output-string (lambda (port) (display (make #:value 3.14) port)))) (test-equal "unpack single-precision floating point number" (make #:value 1.5) (unpack #vu8(#x00 #x00 #xc0 #x3f))) (test-equal "unpack double-precision floating point number" (make #:value 3.14) (unpack #vu8(#x1f #x85 #xeb #x51 #xb8 #x1e #x09 #x40))) (test-equal "coercion of single-precision types" (coerce )) (test-equal "coercion of double-precision types" (coerce )) (test-equal "coercion of single- and double-precision types" (coerce )) (test-equal "foreign type of single-precision floating point number" float (foreign-type )) (test-equal "foreign type of double-precision floating point number" double (foreign-type )) (test-expect-fail 1) (test-equal "type matching for 1.5" (native-type 1.5)) (test-eqv "get value of floating point number" 1.25 (get (make #:value 1.25))) (test-eqv "set value of floating point number" 1.25 (let [(i (make #:value 0))] (set i 1.25) (get i))) (test-eqv "return-value of setting floating point number" 1.25 (set (make #:value 0) 1.25)) (test-equal "build floating point number" 1.25 (build (list 1.25))) (test-equal "'content' returns floating point values" '(1.25) (content 1.25)) (test-assert "floating-point memory is pointerless" (pointerless? )) (test-end "aiscm float") aiscm-0.15.1/tests/Makefile.in0000644000175000017500000010350513220460253013023 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_opengl.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/guile.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir am__extra_recursive_targets = bench-recursive recheck-recursive \ integration-recursive reintegration-recursive 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 am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.scm.log=.log) SCM_LOG_COMPILE = $(SCM_LOG_COMPILER) $(AM_SCM_LOG_FLAGS) \ $(SCM_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVCODEC_CFLAGS = @AVCODEC_CFLAGS@ AVCODEC_LIBS = @AVCODEC_LIBS@ AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@ AVFORMAT_LIBS = @AVFORMAT_LIBS@ AVRESAMPLE_CFLAGS = @AVRESAMPLE_CFLAGS@ AVRESAMPLE_LIBS = @AVRESAMPLE_LIBS@ AVUTIL_CFLAGS = @AVUTIL_CFLAGS@ AVUTIL_LIBS = @AVUTIL_LIBS@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ GUILE = @GUILE@ GUILE_CACHE = @GUILE_CACHE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_EFFECTIVE_VERSION = @GUILE_EFFECTIVE_VERSION@ GUILE_EXT = @GUILE_EXT@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ GUILE_LIBS = @GUILE_LIBS@ GUILE_LTLIBS = @GUILE_LTLIBS@ GUILE_SITE = @GUILE_SITE@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAGICK_CFLAGS = @MAGICK_CFLAGS@ MAGICK_LIBS = @MAGICK_LIBS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MJPEG_CFLAGS = @MJPEG_CFLAGS@ MJPEG_LIBS = @MJPEG_LIBS@ MKDIR_P = @MKDIR_P@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWRESAMPLE_CFLAGS = @SWRESAMPLE_CFLAGS@ SWRESAMPLE_LIBS = @SWRESAMPLE_LIBS@ SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ SWSCALE_LIBS = @SWSCALE_LIBS@ TOUCH = @TOUCH@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUFFIXES = .scm .log .trs SUBDIRS = integration fixtures TEST_EXTENSIONS = .scm TESTS_ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/aiscm/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 SCM_LOG_DRIVER = $(GUILE) -L $(top_builddir) -L $(srcdir) $(top_srcdir)/build-aux/test-driver.scm TESTS = test_asm.scm test_bool.scm test_complex.scm test_ffmpeg_in.scm test_ffmpeg_out.scm test_float.scm \ test_image.scm test_int.scm test_jit.scm test_magick.scm test_mem.scm \ test_method.scm test_obj.scm test_pointer.scm test_pulse.scm test_rgb.scm test_ringbuffer.scm \ test_sequence.scm test_util.scm test_samples.scm test_tensor.scm test_variable.scm test_command.scm test_program.scm \ test_live_analysis.scm test_register_allocate.scm test_compile.scm test_expression.scm test_loop.scm \ test_operation.scm test_convolution.scm test_xorg.scm EXTRA_DIST = $(TESTS) CLEANFILES = *~ *.log *.trs MAINTAINERCLEANFILES = Makefile.in all: all-recursive .SUFFIXES: .SUFFIXES: .scm .log .trs .scm$(EXEEXT) $(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 tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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 # 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" bench-local: recheck-local: integration-local: reintegration-local: 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 $$?; .scm.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SCM_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SCM_LOG_DRIVER_FLAGS) $(SCM_LOG_DRIVER_FLAGS) -- $(SCM_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.scm$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SCM_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SCM_LOG_DRIVER_FLAGS) $(SCM_LOG_DRIVER_FLAGS) -- $(SCM_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-TESTS check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -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) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) bench: bench-recursive bench-am: bench-local clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am 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: integration: integration-recursive integration-am: integration-local maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: recheck: all recheck-recursive @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 $$? recheck-am: recheck-local reintegration: reintegration-recursive reintegration-am: reintegration-local uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am bench-am \ bench-local check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ 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 \ integration-am integration-local maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck recheck-am \ recheck-local reintegration-am reintegration-local tags \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: aiscm-0.15.1/tests/Makefile.am0000644000175000017500000000166113220457302013013 00000000000000SUFFIXES = .scm .log .trs SUBDIRS = integration fixtures TEST_EXTENSIONS = .scm TESTS_ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/aiscm/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 SCM_LOG_DRIVER = $(GUILE) -L $(top_builddir) -L $(srcdir) $(top_srcdir)/build-aux/test-driver.scm TESTS = test_asm.scm test_bool.scm test_complex.scm test_ffmpeg_in.scm test_ffmpeg_out.scm test_float.scm \ test_image.scm test_int.scm test_jit.scm test_magick.scm test_mem.scm \ test_method.scm test_obj.scm test_pointer.scm test_pulse.scm test_rgb.scm test_ringbuffer.scm \ test_sequence.scm test_util.scm test_samples.scm test_tensor.scm test_variable.scm test_command.scm test_program.scm \ test_live_analysis.scm test_register_allocate.scm test_compile.scm test_expression.scm test_loop.scm \ test_operation.scm test_convolution.scm test_xorg.scm EXTRA_DIST = $(TESTS) CLEANFILES = *~ *.log *.trs MAINTAINERCLEANFILES = Makefile.in aiscm-0.15.1/tests/test_ffmpeg_out.scm0000644000175000017500000002633213213600051014650 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-1) (srfi srfi-64) (oop goops) (aiscm ffmpeg) (aiscm element) (aiscm int) (aiscm float) (aiscm rgb) (aiscm image) (aiscm samples) (aiscm pointer) (aiscm sequence)) (test-begin "aiscm ffmpeg") (test-begin "video output") (define colour-values (map (lambda (j) (map (lambda (i) (rgb i j 128)) (iota 8))) (iota 2))) (define colour-array (to-array colour-values)) (define colour-image (to-image colour-array)) (test-assert "'open-ffmpeg-output' creates an output video by default" (frame-rate (open-ffmpeg-output (string-append (tmpnam) ".avi")))) (define output-video (open-ffmpeg-output (string-append (tmpnam) ".avi") #:format-name 'avi #:shape '(16 2) #:frame-rate 25 #:video-bit-rate 100000 #:aspect-ratio (/ 16 11))) (test-assert "Video output is not an input object" (not (is-input? output-video))) (test-assert "'open-ffmpeg-output' creates an FFmpeg object" (is-a? output-video )) (test-equal "Check frame size of output video" '(16 2) (shape output-video)) (test-eqv "Get video bit-rate of output video" 100000 (video-bit-rate output-video)) (test-equal "Get aspect ratio of output video" (/ 16 11) (aspect-ratio output-video)) (test-equal "Get frame rate of output video" 25 (frame-rate output-video)) (test-equal "Get shape of target video frame" '(16 2) (shape (target-video-frame output-video))) (test-eq "Get format of target video frame" 'I420 (get-format (target-video-frame output-video))) (test-eq "Writing a 2D array with 'write-image' returns the input array" colour-array (write-image colour-array output-video)) (test-eq "Writing an image with 'write-image' returns the input image" colour-image (write-image colour-image output-video)) (destroy output-video) (test-error "Throw exception when trying to read from output video" 'misc-error (read-image (open-ffmpeg-output (string-append (tmpnam) ".avi")))) (test-error "Throw exception when trying to seek in output video" 'misc-error (pts= (open-ffmpeg-output (string-append (tmpnam) ".avi")) 10)) (test-error "Throw exception if output file cannot be written" 'misc-error (open-ffmpeg-output "no-such-folder/test.mpg")) (test-error "Throw exception if output format is not known" 'misc-error (open-ffmpeg-output (string-append (tmpnam) ".avi") #:format-name 'nosuchformat)) (test-error "Throw exception when trying to write video to audio file" 'misc-error (open-ffmpeg-output (string-append (tmpnam) ".mp3") #:shape '(384 288) #:frame-rate 10)) ; TODO: test error when attempting to write video to MP3 file (test-end "video output") (test-begin "audio output") (test-assert "'open-ffmpeg-output' can create an audio file" (open-ffmpeg-output (string-append (tmpnam) ".mp3") #:format-name 'mp3 #:rate 44100)) (test-begin "select-rate") (test-eqv "Return specified rate if supported" 44100 ((select-rate 44100) '(44100))) (test-error "Throw exception if sample rate is not supported" 'misc-error ((select-rate 44100) '(22050))) (test-error "Throw exception if sample rate is not supported" 'misc-error ((select-rate 44100) '(22050))) (test-eqv "Use function if supplied" 22050 ((select-rate last) '(44100 22050))) (test-eqv "Return desired rate if empty list is supplied" 8000 ((select-rate 8000) '())) (test-end "select-rate") (define negotiate-audio-rate (open-ffmpeg-output (string-append (tmpnam) ".mp3") #:format-name 'mp3 #:rate (lambda (rates) 22050))) (test-eqv "Set audio rate using a method" 22050 (rate negotiate-audio-rate)) (test-begin "select-sample-typecode") (test-eq "Select short integer sample format if it is supported" (select-sample-typecode (list ))) (test-eq "Select larger type if desired type is not supported" (select-sample-typecode (list ))) (test-eq "Select short integer sample format if it is the last supported one" (select-sample-typecode (list ))) (test-eq "Select short integer sample format if it is the first supported one" (select-sample-typecode (list ))) (test-eq "Select largest integer format if the desired format is not supported" (select-sample-typecode (list ))) (test-eq "Select largest integer format if the desired format is not supported (regardless of order)" (select-sample-typecode (list ))) (test-error "Throw exception if all supported types are smaller" 'misc-error (select-sample-typecode (list ))) (test-eq "Prefer integer format if desired format is integer" (select-sample-typecode (list ))) (test-eq "Switch to floating point if required" (select-sample-typecode (list ))) (test-eq "Select specified sample format if no supported format is specified" (select-sample-typecode '())) (test-end "select-sample-typecode") (test-begin "typecodes-of-sample-formats") (test-equal "No supported sample types means no supported typecodes" '() (typecodes-of-sample-formats '())) (test-equal "Get the typecode of a packed sample format" (list ) (typecodes-of-sample-formats (list AV_SAMPLE_FMT_U8))) (test-equal "Omit duplicate typecodes" (list ) (typecodes-of-sample-formats (list AV_SAMPLE_FMT_FLT AV_SAMPLE_FMT_FLTP))) (test-end "typecodes-of-sample-formats") (test-begin "best-sample-format") (test-eqv "Select format if it the typecode is matching" AV_SAMPLE_FMT_S32 (best-sample-format (list AV_SAMPLE_FMT_S32))) (test-eqv "Ignore formats with different typecode" AV_SAMPLE_FMT_S32 (best-sample-format (list AV_SAMPLE_FMT_S16 AV_SAMPLE_FMT_S32))) (test-eqv "Ignore formats with different typecode regardless of order" AV_SAMPLE_FMT_S32 (best-sample-format (list AV_SAMPLE_FMT_S32 AV_SAMPLE_FMT_S16))) (test-eqv "Select planar format if packed format is not supported" AV_SAMPLE_FMT_S32P (best-sample-format (list AV_SAMPLE_FMT_S32P))) (test-eqv "Select planar format if packed format is not supported (short integer case)" AV_SAMPLE_FMT_S16P (best-sample-format (list AV_SAMPLE_FMT_S16P))) (test-eqv "Prefer packed format" AV_SAMPLE_FMT_S32 (best-sample-format (list AV_SAMPLE_FMT_S32P AV_SAMPLE_FMT_S32))) (test-eqv "Specify planar format if list of supported formats is empty" AV_SAMPLE_FMT_S32P (best-sample-format '())) (test-end "best-sample-format") (test-begin "select-sample-format") (test-eqv "Select packed format if supported" AV_SAMPLE_FMT_S32 ((select-sample-format ) (list AV_SAMPLE_FMT_S32))) (test-eqv "Select nearest larger type if necessary" AV_SAMPLE_FMT_FLT ((select-sample-format ) (list AV_SAMPLE_FMT_S16 AV_SAMPLE_FMT_FLT))) (test-eqv "Prefer packed format" AV_SAMPLE_FMT_S32 ((select-sample-format ) (list AV_SAMPLE_FMT_S32 AV_SAMPLE_FMT_S32P))) (test-end "select-sample-format") (define output-audio (open-ffmpeg-output (string-append (tmpnam) ".mp3") #:format-name 'mp3 #:rate 44100 #:typecode #:channels 2 #:audio-bit-rate 64000)) (test-eqv "Get number of audio channels" 2 (channels output-audio)) (test-eqv "Get sample rate" 44100 (rate output-audio)) (test-eq "Get audio sample type" (typecode output-audio)) (test-eq "Get type of target audio frame" (typecode (target-audio-frame output-audio))) (test-eqv "Get channels of target audio frame" 2 (channels (target-audio-frame output-audio))) (test-eqv "Get rate of target audio frame" 44100 (rate (target-audio-frame output-audio))) (test-eq "Get type of packed audio frame" (typecode (packed-audio-frame output-audio))) (test-assert "Packed audio frame should be packed" (not (planar? (packed-audio-frame output-audio)))) (define data (make (multiarray 2) #:shape '(2 44100))) (test-eqv "Audio buffer fill is zero initially" 0 (audio-buffer-fill output-audio)) (buffer-audio (to-samples data 44100) output-audio) (test-eqv "Audio buffer fill is size of samples after writing first array of samples" (size-of data) (audio-buffer-fill output-audio)) (fetch-audio output-audio (packed-audio-frame output-audio)) (test-eqv "Fetching a frame from the output buffer reduces the buffer fill status" (- (size-of data) (size-of (packed-audio-frame output-audio))) (audio-buffer-fill output-audio)) (test-eq "Writing audio data returns data" data (write-audio data output-audio)) (define samples (to-samples data 44100)) (test-eq "Writing audio samples returns samples" samples (write-audio samples output-audio)) (test-error "Reject audio samples with wrong number of channels" 'misc-error (write-audio (make (multiarray 2) #:shape '(3 44100)) output-audio)) (test-error "Reject audio samples with wrong type" 'misc-error (write-audio (make (multiarray 2) #:shape '(2 44100)) output-audio)) (test-error "Reject audio samples with wrong sampling rate" 'misc-error (write-audio (to-samples data 22050) output-audio)) (crop-audio-frame-size output-audio 17) (test-eqv "Cropping audio frames to final frame size should resize the target frame" 17 (cadr (shape (target-audio-frame output-audio)))) (test-eqv "Cropping audio frames to final frame size should resize the packed frame" 17 (cadr (shape (packed-audio-frame output-audio)))) (crop-audio-frame-size output-audio 0) (test-eqv "Do not crop target audio frame to zero" 17 (cadr (shape (target-audio-frame output-audio)))) (test-eqv "Do not crop packed audio frame to zero" 17 (cadr (shape (packed-audio-frame output-audio)))) (destroy output-audio) (test-end "audio output") (test-end "aiscm ffmpeg") aiscm-0.15.1/tests/test_rgb.scm0000644000175000017500000003403713213600051013270 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (system foreign) (srfi srfi-26) (aiscm element) (aiscm bool) (aiscm composite) (aiscm expression) (aiscm rgb) (aiscm int) (aiscm obj) (aiscm float) (aiscm sequence) (aiscm asm) (aiscm variable) (aiscm command) (aiscm pointer) (aiscm operation) (aiscm jit) (aiscm tensor)) (test-begin "aiscm rgb") (define ctx (make )) (define a (make #:type #:symbol 'a)) (define b (make #:type #:symbol 'b)) (define c (make #:type #:symbol 'c)) (define colour (make #:value (rgb 1 2 3))) (define grey (make #:value 5)) (test-equal "display untyped RGB value" "(rgb 1 2 3)" (call-with-output-string (lambda (port) (write (rgb 1 2 3) port)))) (test-eq "equality of RGB types" (rgb (integer 8 unsigned)) (rgb (integer 8 unsigned))) (test-eqv "storage size of unsigned byte RGB" 3 (size-of (rgb ))) (test-eqv "storage size of single-precision floating-point RGB" 12 (size-of (rgb (floating-point single-precision)))) (test-eq "base of RGB channel" (base )) (test-equal "equal RGB objects" (rgb 1 2 3) (rgb 1 2 3)) (test-assert "unequal RGB objects" (not (equal? (rgb 1 2 3) (rgb 1 4 3)))) (test-eqv "extract red channel of RGB value" 2 (red (rgb 2 3 5))) (test-eqv "extract green channel of RGB value" 3 (green (rgb 2 3 5))) (test-eqv "extract blue channel of RGB value" 5 (blue (rgb 2 3 5))) (test-eqv "red channel of scalar is itself" 42 (red 42)) (test-eqv "green channel of scalar is itself" 42 (green 42)) (test-eqv "blue channel of scalar is itself" 42 (blue 42)) (test-equal "pack RGB value" #vu8(#x01 #x02 #x03) (pack colour)) (test-equal "pack grey RGB value" #vu8(#x05 #x05 #x05) (pack grey)) (test-equal "unpack RGB value" colour (unpack #vu8(#x01 #x02 #x03))) (test-assert "RGB has no dimensions" (null? (shape colour))) (test-equal "display short integer RGB object" "#<>> (rgb 1 2 3)>" (call-with-output-string (lambda (port) (display (make #:value (rgb 1 2 3)) port)))) (test-equal "write short integer RGB object" "#<>> (rgb 1 2 3)>" (call-with-output-string (lambda (port) (write (make #:value (rgb 1 2 3)) port)))) (test-eq "coerce RGB and scalar type" (coerce )) (test-eq "coerce scalar type and RGB" (coerce )) (test-eq "coerce different RGB types" (coerce )) (test-eq "coerce integer sequence and RGB type" (sequence ) (coerce (sequence ) (rgb ))) (test-eq "coerce RGB type and integer sequence" (sequence ) (coerce (rgb ) (sequence ))) (test-eq "coerce RGB type and 2D array" (multiarray 2) (coerce (rgb ) (multiarray 2))) (test-eq "coerce RGB type components" (rgb ) (coerce-rgb )) (test-eq "coerce RGB array from array types" (sequence (rgb )) (coerce-rgb (sequence ) )) (test-eq "coerce 2D RGB array from array types" (multiarray (rgb ) 2) (coerce-rgb (sequence ) (multiarray 2))) (test-equal "'content' extracts the channels of an RGB value" (list 2 3 5) (content > (rgb 2 3 5))) (test-equal "'content' extracts values of typed RGB value" (list 2 3 5) (map get (content (make #:value (rgb 2 3 5))))) (test-eq "type matching for (rgb 2 3 5)" (native-type (rgb 2 3 5))) (test-expect-fail 3) (test-eq "type matching for (rgb 2 3.5 5)" (rgb ) (native-type (rgb 2 3.5 5))) (test-eq "type matching for RGB value and scalar" (rgb ) (native-type (rgb 2 3 5) 1.2)) (test-eq "type matching for scalar and RGB value" (rgb ) (native-type 1.2 (rgb 2 3 5))) (test-eq "base type of sequence applies to element type" (sequence ) (base (sequence ))) (test-eq "typecode of RGB value is RGB type of base type" (typecode (rgb a b c))) (test-equal "negate RGB value" (rgb -2 -3 -5) (- (rgb 2 3 5))) (test-equal "invert RGB value" (rgb -3 -4 -6) (~ (rgb 2 3 5))) (test-equal "add RGB values" (rgb 5 7 10) (+ (rgb 1 2 3) (rgb 4 5 7))) (test-equal "subtract RGB values" (rgb 5 6 6) (- (rgb 7 9 11) (rgb 2 3 5))) (test-equal "multiply 2 with RGB value" (rgb 2 4 6) (* 2 (rgb 1 2 3))) (test-equal "bitwise and for RGB values" (rgb 0 1 4) (& (rgb 2 3 4) 5)) (test-equal "bitwise or for RGB values" (rgb 7 7 5) (| (rgb 2 3 4) 5)) (test-equal "bitwise xor for RGB values" (rgb 7 6 1) (^ (rgb 2 3 4) 5)) (test-equal "left shift for RGB values" (rgb 2 4 8) (<< 1 (rgb 1 2 3))) (test-equal "right shift for RGB values" (rgb 1 2 3) (>> (rgb 4 8 12) 2)) (test-equal "left shift by one for RGB values" (rgb 2 4 6) (<< (rgb 1 2 3))) (test-equal "right shift by one for RGB values" (rgb 1 2 3) (>> (rgb 2 4 7))) (test-equal "division for RGB values" (rgb 1 2 3) (/ (rgb 3 6 9) 3)) (test-assert "compare two RGB values (positive result)" (== (rgb 2 3 5) (rgb 2 3 5))) (test-assert "compare two RGB values (negative result)" (not (== (rgb 2 3 5) (rgb 2 4 5)))) (test-assert "check two RGB values for unequal (positive result)" (!= (rgb 2 3 5) (rgb 2 3 6))) (test-assert "check two RGB values for unequal (negative result)" (not (!= (rgb 2 3 5) (rgb 2 3 5)))) (test-equal "major number of RGB value and scalar" (rgb 3 3 5) (max 3 (rgb 2 3 5))) (test-equal "minor RGB value" (rgb 2 2 1) (min (rgb 2 3 5) (rgb 4 2 1))) (test-assert "RGB variable is an RGB value" (is-a? (var ) )) (let [(p (skeleton (pointer ))) (a (skeleton )) (b (skeleton ))] (test-equal "Writing RGB to memory copies red channel" (MOV (ptr (get p) 0) (get (red a))) (caar (duplicate p a))) (test-equal "Writing RGB to memory copies green channel" (MOV (ptr (get p) 2) (get (green a))) (caadr (duplicate p a))) (test-equal "Writing RGB to memory copies blue channel" (MOV (ptr (get p) 4) (get (blue a))) (caaddr (duplicate p a))) (test-equal "Reading RGB from memory copies red channel" (MOV (get (red a)) (ptr (get p) 0)) (caar (duplicate a p))) (test-equal "Reading RGB from memory copies green channel" (MOV (get (green a)) (ptr (get p) 2)) (caadr (duplicate a p))) (test-equal "Reading RGB from memory copies blue channel" (MOV (get (blue a)) (ptr (get p) 4)) (caaddr (duplicate a p))) (test-equal "copy red channel" (MOV (get (red a)) (get (red b))) (caar (duplicate a b))) (test-equal "copy green channel" (MOV (get (green a)) (get (green b))) (caadr (duplicate a b))) (test-equal "copy blue channel" (MOV (get (blue a)) (get (blue b))) (caaddr (duplicate a b)))) (test-equal "compile and run identity function for RGB value" (rgb 3 2 5) ((jit ctx (list ) identity) (rgb 3 2 5))) (test-equal "compile and run identity function for RGB array" (list (rgb 2 3 5) (rgb 3 5 7)) (to-list ((jit ctx (list (sequence )) identity) (seq (rgb 2 3 5) (rgb 3 5 7))))) (test-equal "extract red channel of RGB value" 2 ((jit ctx (list ) red ) (rgb 2 3 5))) (test-equal "extract green channel of RGB value" 3 ((jit ctx (list ) green) (rgb 2 3 5))) (test-equal "extract blue channel of RGB value" 5 ((jit ctx (list ) blue ) (rgb 2 3 5))) (test-equal "compile and run code for extracting red channel of RGB array" '(2 3) (to-list ((jit ctx (list (sequence )) red ) (seq (rgb 2 3 5) (rgb 3 5 7))))) (test-equal "compile and run code for extracting green channel of RGB array" '(3 5) (to-list ((jit ctx (list (sequence )) green) (seq (rgb 2 3 5) (rgb 3 5 7))))) (test-equal "compile and run code for extracting blue channel of RGB array" '(5 7) (to-list ((jit ctx (list (sequence )) blue ) (seq (rgb 2 3 5) (rgb 3 5 7))))) (test-equal "extract red channel of RGB array" '(2 3) (to-list (red (seq (rgb 2 3 5) (rgb 3 5 7))))) (test-equal "extract green channel of RGB array" '(3 5) (to-list (green (seq (rgb 2 3 5) (rgb 3 5 7))))) (test-equal "extract blue channel of RGB array" '(5 7) (to-list (blue (seq (rgb 2 3 5) (rgb 3 5 7))))) (test-equal "extract red channel of scalar array" '(2 3 5 7) (to-list (red (seq 2 3 5 7)))) (test-equal "extract green channel of scalar array" '(2 3 5 7) (to-list (green (seq 2 3 5 7)))) (test-equal "extract blue channel of scalar array" '(2 3 5 7) (to-list (blue (seq 2 3 5 7)))) (test-equal "compile and run code to negate RGB value" (rgb 2 3 -5) ((jit ctx (list ) -) (rgb -2 -3 5))) (test-equal "compile and run code to subtract RGB values" (rgb 5 6 6) ((jit ctx (list ) -) (rgb 7 9 11) (rgb 2 3 5))) (test-begin "binary +") (test-equal "compile and run code to adding scalar to RGB value" (rgb 6 7 9) ((jit ctx (list ) +) (rgb 2 3 5) 4)) (test-equal "Add scalar value to RGB sequence" (list (rgb 2 3 5) (rgb 3 4 6)) (to-list (+ (seq (rgb 1 2 4) (rgb 2 3 5)) 1))) (test-equal "Add scalar sequence and RGB value" (list (rgb 2 3 5) (rgb 3 4 6)) (to-list (+ (seq 1 2) (rgb 1 2 4)))) (test-equal "Add RGB value and scalar sequence" (list (rgb 2 3 5) (rgb 3 4 6)) (to-list (+ (rgb 1 2 4) (seq 1 2)))) (test-equal "Add scalar sequence and RGB value" (list (rgb 2 3 5) (rgb 3 4 6)) (to-list (+ (seq 1 2) (rgb 1 2 4)))) (test-end "binary +") (test-equal "compile and run function building an RGB value" (rgb 2 3 5) ((jit ctx (list ) rgb) 2 3 5)) (test-equal "convert integer RGB to byte RGB" (rgb 2 3 5) ((jit ctx (list ) (cut to-type <>)) (rgb 2 3 5))) (test-equal "construct RGB value from differently typed values" (rgb 2 -3 256) ((jit ctx (list ) rgb) 2 -3 256)) (let [(c (parameter ))] (test-assert "Decompose RGB parameter into RGB object" (is-a? (decompose-value c) ))) (test-assert "Compare two RGB values (positive result)" ((jit ctx (list ) ==) (rgb 2 3 5) (rgb 2 3 5))) (test-assert "Compare two RGB values (negative result)" (not ((jit ctx (list ) ==) (rgb 2 3 5) (rgb 2 4 5)))) (test-assert "Require two RGB values to be unequal (positive result)" ((jit ctx (list ) !=) (rgb 2 3 5) (rgb 2 4 5))) (test-assert "Require two RGB values to be unequal (negative result)" (not ((jit ctx (list ) !=) (rgb 2 3 5) (rgb 2 3 5)))) (test-assert "Compare RGB value with scalar (negative result)" (not ((jit ctx (list ) ==) (rgb 2 3 5) 2))) (test-assert "Compare RGB value with scalar (positive result)" ((jit ctx (list ) ==) 3 (rgb 3 3 3))) (test-equal "major value of RGB and byte sequence" (list (rgb 2 2 3)) (to-list ((jit ctx (list (sequence )) max) (rgb 1 2 3) (seq 2)))) (test-equal "minor value of RGB and byte sequence" (list (rgb 1 2 2)) (to-list ((jit ctx (list (sequence )) min) (rgb 1 2 3) (seq 2)))) (test-equal "compose RGB array using array for red channel" (list (rgb 2 7 11) (rgb 3 7 11) (rgb 5 7 11)) (to-list (rgb (seq 2 3 5) 7 11))) (test-equal "compose RGB array using array for green channel" (list (rgb 2 3 11) (rgb 2 5 11) (rgb 2 7 11)) (to-list (rgb 2 (seq 3 5 7) 11))) (test-equal "compose RGB array using array for blue channel" (list (rgb 2 3 5) (rgb 2 3 7) (rgb 2 3 11)) (to-list (rgb 2 3 (seq 5 7 11)))) (test-equal "compose RGB array using array for red and green channel" (list (rgb 2 3 5)) (to-list (rgb (seq 2) (seq 3) 5))) (test-assert "integer RGB memory is pointerless" (pointerless? )) (test-assert "object RGB memory is not pointerless" (not (pointerless? (rgb )))) (test-eqv "extract red channel of object RGB" 2 ((jit ctx (list (rgb )) red) (rgb 2 3 5))) (test-equal "components of RGB values are red, green, and blue" (list red green blue) (components >)) (test-equal "extract red component of object RGB sequence" '(2) (to-list (red (seq (rgb ) (rgb 2 3 5))))) (test-begin "cumulative tensor operations") (test-equal "Tensor sum of RGB values" (rgb 3 5 7) (tensor (sum i (get (seq (rgb 1 2 3) (rgb 2 3 4)) i)))) (test-equal "Tensor product of RGB values" (rgb 6 15 35) (tensor (prod i (get (seq (rgb 3 5 7) (rgb 2 3 5)) i)))) (test-equal "Largest RGB value" (rgb 7 5 5) (tensor (largest i (get (seq (rgb 2 3 5) (rgb 7 5 3)) i)))) (test-equal "Smallest RGB value" (rgb 2 3 3) (tensor (smallest i (get (seq (rgb 2 3 5) (rgb 7 5 3)) i)))) (test-equal "Tensor requiring intermediate result" (list (rgb 6 9 12)) (to-list (tensor (+ (seq (rgb 1 2 3)) (seq (rgb 2 3 4)) (seq (rgb 3 4 5)))))) (test-end "cumulative tensor operations") (test-begin "select RGB values using 'where'") (test-equal "select from two values" (list (rgb 2 3 5) (rgb 3 5 7)) (to-list (where (seq #t #f) (rgb 2 3 5) (rgb 3 5 7)))) (test-equal "select from RGB and scalar value" (list (rgb 2 3 5) (rgb 7 7 7)) (to-list (where (seq #t #f) (rgb 2 3 5) 7))) (test-equal "select from scalar and RGB value" (list (rgb 2 2 2) (rgb 3 5 7)) (to-list (where (seq #t #f) 2 (rgb 3 5 7)))) (test-end "select RGB values using 'where'") (test-end "aiscm rgb") aiscm-0.15.1/tests/test_method.scm0000644000175000017500000000757613213600051014006 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-26) (srfi srfi-64) (oop goops) (aiscm asm) (aiscm jit) (aiscm bool) (aiscm int) (aiscm obj) (aiscm method)) (test-begin "aiscm method") (define ctx (make )) (define main (dynamic-link)) (define guile-aiscm-tests (dynamic-link "libguile-aiscm-tests")) (define cabs (dynamic-func "abs" main)) (define jit-side-effect (dynamic-func "jit_side_effect" guile-aiscm-tests)) (define jit-constant-fun (dynamic-func "jit_constant_fun" guile-aiscm-tests)) (define jit-subtracting-fun (dynamic-func "jit_subtracting_fun" guile-aiscm-tests)) (define jit-seven-arguments (dynamic-func "jit_seven_arguments" guile-aiscm-tests)) (define jit-boolean-not (dynamic-func "jit_boolean_not" guile-aiscm-tests)) (let [(method (make-native-method '() jit-constant-fun))] (test-equal "Query function pointer of method" jit-constant-fun (function-pointer method)) (test-eq "Query return type of method" (return-type method)) (test-assert "Query argument list of constant method" (null? (argument-types method))) (test-eqv "Compile method call to function returning constant value" 42 ((jit ctx '() (const (make-native-function (make-native-method '() jit-constant-fun))))))) (test-eqv "Compile function call and plus operation to test that caller-saved registers get blocked" 63 ((jit ctx (list ) (lambda (x) (+ x (make-native-function (make-native-method (list ) jit-constant-fun))))) 21)) (test-eqv "Compile function call taking two arguments after swapping them" 2 ((jit ctx (list ) (lambda (x y) (make-native-function (make-native-method (list ) jit-subtracting-fun) y x))) 5 7)) (test-eqv "Pass result of expression to function call" 5 ((jit ctx (make-list 3 ) (lambda (x y z) (make-native-function (make-native-method (list ) jit-subtracting-fun) x (+ y z)))) 10 2 3)) (test-eqv "Convert result of expression before passing to native function call" 5 ((jit ctx (list ) (lambda (x y z) (make-native-function (make-native-method (list ) jit-subtracting-fun) x (+ y z)))) 10 2 3)) (test-eqv "Compile function call with seven arguments (requires stack parameters)" 42 ((jit ctx (list ) (lambda (a b) (make-native-function (make-native-method (make-list 7 ) jit-seven-arguments) a a a a a a b))) 123 42)) (test-equal "Compile and run native boolean negation function" '(#t #f) (map (jit ctx (list ) (cut make-native-function (make-native-method (list ) jit-boolean-not) <>)) '(#f #t))) (test-equal "call C standard library abs function" 42 ((jit ctx (list ) (cut make-native-function (make-native-method (list ) cabs) <>)) -42)) (test-eq "check type of native value" (return-type (native-value 42))) (test-eqv "check value of native value" 42 (get (native-value 42))) (test-end "aiscm method") aiscm-0.15.1/tests/test_bool.scm0000644000175000017500000000770013213600051013446 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm element) (aiscm bool) (aiscm int) (aiscm jit)) (test-begin "aiscm bool") (define bool-false (make #:value #f)) (define bool-true (make #:value #t)) (test-equal "equality of booleans" bool-false bool-false) (test-assert "equality of booleans" (not (equal? bool-false bool-true))) (test-assert "equality of booleans" (not (equal? bool-true bool-false))) (test-equal "equality of booleans" bool-true bool-true) (test-assert "get boolean value from bool-false" (not (get bool-false))) (test-assert "get boolean value from bool-true" (get bool-true)) (test-assert "unequal boolean objects" (not (equal? bool-true bool-false))) (test-eqv "storage size of booleans" 1 (size-of )) (test-equal "pack 'false' value" #vu8(0) (pack bool-false)) (test-equal "pack 'true' value" #vu8(1) (pack bool-true)) (test-eqv "querying element size of boolean" 1 (size bool-true)) (test-assert "querying shape of boolean" (null? (shape bool-true))) (test-equal "unpack 'false' value" bool-false (unpack #vu8(0))) (test-equal "unpack 'true' value" bool-true (unpack #vu8(1))) (test-equal "display boolean object" "#< #f>" (call-with-output-string (lambda (port) (display bool-false port)))) (test-equal "write boolean object" "#< #f>" (call-with-output-string (lambda (port) (write bool-false port)))) (test-equal "type matching for #f" (native-type #f)) (test-equal "type matching for #t" (native-type #t)) (test-equal "type matching for multiple booleans" (native-type #f #t)) (test-assert "get value of true" (get bool-true)) (test-assert "get value of false" (not (get bool-false))) (test-assert "set boolean to true" (let [(b (make #:value #f))] (set b #t) (get b))) (test-assert "set boolean to false" (not (let [(b (make #:value #t))] (set b #f) (get b)))) (test-assert "return value of setting boolean to true" (set (make #:value #f) #t)) (test-assert "return value of setting boolean to false" (not (set (make #:value #t) #f))) (test-eq "build boolean 'true'" #t (build '(#t))) (test-eq "build boolean 'false'" #f (build '(#f))) (test-equal "'unbuild' returns 0 for false" '(0) (unbuild #f)) (test-equal "'unbuild' returns 1 for true" '(1) (unbuild #t)) (test-equal "'&&' behaves like 'and'" '(#f #f #f #t) (map && '(#f #f #t #t) '(#f #t #f #t))) (test-assert "'&&' with three arguments" (not (&& #t #t #f))) (test-assert "'&&' with four arguments" (&& #t #t #t #t)) (test-equal "'||' behaves like 'or'" '(#f #t #t #t) (map || '(#f #f #t #t) '(#f #t #f #t))) (test-assert "'||' with three arguments" (not (|| #f #f #f))) (test-assert "'||' with four arguments" (|| #f #f #f #t)) (test-equal "'!' is like 'not'" '(#t #f) (map ! '(#f #t))) (test-assert "boolean memory is pointerless" (pointerless? )) (test-begin "'where' using scalars") (test-eqv "select first scalars using where" 2 (where #t 2 3)) (test-eqv "select second scalar using where" 3 (where #f 2 3)) (test-end "'where' using scalars") (test-end "aiscm bool") aiscm-0.15.1/tests/test_live_analysis.scm0000644000175000017500000000464713213600051015364 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (aiscm live-analysis) (aiscm asm) (aiscm variable) (aiscm command) (aiscm int) (aiscm jit)) (test-begin "aiscm live-analysis") (test-equal "Get following indices for first statement in a program" '(1) (next-indices '() (MOV CX 0) 0)) (test-equal "Get following indices for second statement in a program" '(2) (next-indices '() (MOV AX CX) 1)) (test-assert "RET statement should not have any following indices" (null? (next-indices '() (RET) 2))) (test-equal "Get following indices for a jump statement" '(2) (next-indices '((a . 2)) (JMP 'a) 0)) (test-equal "Get following indices for a conditional jump" '(1 2) (next-indices '((a . 2)) (JNE 'a) 0)) (test-equal "Get following indices for a list of statements" '((1) (2) (3) (4 1) ()) (flow (list (NOP) 'a (NOP) (JNE 'a) (RET)))) (let [(a (var )) (b (var ))] (test-equal "Live-analysis for definition of unused variable" (list '() (list a) '()) (live-analysis (list 'x (MOV a 0) (RET)) '())) (test-equal "Live-analysis for definition and later use of a variable" (list (list a) (list a) (list b a) '()) (live-analysis (list (MOV a 0) (NOP) (MOV b a) (RET)) '())) (test-equal "Live-analysis with conditional jump statement" (list (list a) (list a) (list a) (list a) '()) (live-analysis (list (MOV a 0) 'x (ADD a 1) (JE 'x) (RET)) '())) (test-equal "results should be propagated backwards from the return statement" (list (list a) (list a)) (live-analysis (list (MOV a 0) (RET)) (list a)))) (test-end "aiscm live-analysis") aiscm-0.15.1/tests/test_xorg.scm0000644000175000017500000000553313213600051013474 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm xorg) (aiscm image)) (test-begin "aiscm xorg") (define img (make #:format 'GRAY #:shape '(320 240))) (test-begin "window-size") (test-equal "Use shape of image" '(320 240) (window-size img)) (test-equal "Override window size" '(640 480) (window-size img #:shape '(640 480))) (test-equal "Infer height of scaled display" '(640 480) (window-size img #:width 640)) (test-equal "Infer height of non-scaled display" '(320 240) (window-size img #:width 320)) (test-equal "Round height to nearest integer" '(30 22) (window-size img #:width 30)) (test-equal "Infer height of scaled display" '(640 480) (window-size img #:width 640)) (test-equal "Infer width of scaled display" '(640 480) (window-size img #:height 480)) (test-equal "Infer width of non-scaled display" '(320 240) (window-size img #:height 240)) (test-equal "Round height to nearest integer" '(29 22) (window-size img #:height 22)) (test-equal "Ignore other keyword arguments" '(320 240) (window-size img #:fullscreen #t)) (test-end "window-size") (test-begin "fullscreen-flag") (test-assert "Fullscreen is disabled by default" (not (fullscreen-flag))) (test-assert "Enable fullscreen" (fullscreen-flag #:fullscreen #t)) (test-assert "Explicitely disable fullscreen" (not (fullscreen-flag #:fullscreen #f))) (test-assert "Ignore other keyword arguments" (not (fullscreen-flag #:width 640))) (test-end "fullscreen-flag") (test-begin "xorg-io-type") (test-eq "default for static image is XImage" IO-XIMAGE (xorg-io-type #f '(img))) (test-eq "default for video is XVideo" IO-XVIDEO (xorg-io-type #t '(img))) (test-eq "default for multiple videos is OpenGL" IO-OPENGL (xorg-io-type #t '(img1 img2))) (test-eq "override the default using a keyword argument" IO-XVIDEO (xorg-io-type #f '(img) #:io IO-XVIDEO)) (test-eq "ignore other keyword arguments" IO-XIMAGE (xorg-io-type #f '(img) #:fullscreen #t)) (test-end "xorg-io-type") (test-end "aiscm xorg") aiscm-0.15.1/tests/test_jit.scm0000644000175000017500000005672513213600051013314 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (srfi srfi-1) (srfi srfi-26) (rnrs bytevectors) (oop goops) (aiscm util) (aiscm asm) (aiscm variable) (aiscm command) (aiscm program) (aiscm expression) (aiscm register-allocate) (aiscm compile) (aiscm mem) (aiscm jit) (aiscm operation) (aiscm element) (aiscm int) (aiscm float) (aiscm pointer) (aiscm sequence) (aiscm bool) (aiscm rgb) (aiscm obj) (aiscm complex)) (test-begin "aiscm jit") (load-extension "libguile-aiscm-tests" "init_tests") (define ctx (make )) (define b1 (random (ash 1 6))) (define b2 (random (ash 1 6))) (define w1 (random (ash 1 14))) (define w2 (random (ash 1 14))) (define i1 (random (ash 1 30))) (define i2 (random (ash 1 30))) (define l1 (random (ash 1 62))) (define l2 (random (ash 1 62))) (define mem (make #:size 256)) (define bptr (make (pointer ) #:value mem)) (define wptr (make (pointer ) #:value mem)) (define iptr (make (pointer ) #:value mem)) (define lptr (make (pointer ) #:value mem)) (define (idata) (begin (store iptr i1) (store (+ iptr 1) i2) iptr)) (test-begin "virtual variables") (let [(a (var )) (b (var )) (c (var ))] (test-equal "'virtual-variables' uses the specified variables as parameters" (list (SUB RSP 8) (MOV ECX EDI) (ADD ECX ESI) (MOV EAX ECX) (ADD RSP 8) (RET)) (virtual-variables (list a) (list b c) (list (MOV a b) (ADD a c) (RET)))) (test-equal "'virtual-variables' allocates local variables" (list (SUB RSP 8) (MOV ECX EDI) (MOV EDX ECX) (MOV EAX EDX) (ADD RSP 8) (RET)) (virtual-variables (list a) (list b) (list (MOV c b) (MOV a c) (RET))))) (let [(a (var )) (b (var ))] (test-equal "'virtual-variables' handles nested code blocks" (list (SUB RSP 8) (MOV ECX EDI) (MOV EAX ECX) (ADD RSP 8) (RET)) (virtual-variables (list a) (list b) (list (list (MOV a b)) (RET)))) (test-equal "'virtual-variables' maps the 7th integer parameter correctly" (list (SUB RSP 8) (MOV EAX (ptr RSP 16)) (MOV EDX EAX) (MOV EAX EDX) (ADD RSP 8) (RET)) (let [(args (map var (make-list 7 )))] (virtual-variables (list a) args (list (MOV a (last args)) (RET)))))) (let [(a (var ))] (test-eqv "'virtual-variables' creates separate namespaces for labels" 3 ((asm ctx '() (virtual-variables (list a) '() (list (MOV a 0) (JMP 'a) (list 'a (MOV a 2)) 'a (ADD a 3) (RET)))) ))) (let [(w (var ))] (test-equal "'virtual-variables' filters out the reserved-registers information" (list (SUB RSP 8) (MOV AX 0) (ADD RSP 8) (RET)) (virtual-variables '() '() (list (blocked RCX (MOV w 0)) (RET)))) (test-equal "'virtual-variables' avoids blocked registers when allocating variables" (list (SUB RSP 8) (MOV CX 0) (ADD RSP 8) (RET)) (virtual-variables '() '() (list (blocked RAX (MOV w 0)) (RET))))) (test-end "virtual variables") (test-begin "identity operation") (test-equal "Compile and run identity operation" 42 ((jit ctx (list ) identity) 42)) (test-equal "Compile and run code for fetching data from a pointer" i1 ((jit ctx (list (pointer )) identity) (idata))) (test-equal "'duplicate' creates copy of slice" '(1 4) (to-list (duplicate (project (roll (arr (1 2 3) (4 5 6))))))) (test-end "identity operation") (test-begin "filling arrays") (test-eqv "fill scalar" 42 (fill '() 42)) (test-equal "fill byte sequence" '(3 3 3) (to-list (fill '(3) 3))) (test-equal "fill integer sequence" '(4 4 4) (to-list (fill '(3) 4))) (test-equal "fill 2D array" '((5 5 5) (5 5 5)) (to-list (fill '(3 2) 5))) (test-equal "fill RGB sequence" (list (rgb 2 3 5) (rgb 2 3 5)) (to-list (fill '(2) (rgb 2 3 5)))) (test-end "filling arrays") (test-begin "set") (test-eqv "set value of integer" 123 (let [(i (make #:value 0))] (set i 123) (get i))) (test-eqv "return value after setting integer" 123 (set (make #:value 0) 123)) (let [(s (seq 1 2 3))] (test-eqv "Write value to sequence" 9 (begin (set s 2 9) (get s 2))) (set s 0) (test-equal "fill byte array with zeros" '(0 0 0) (to-list s)) (test-eqv "return value after setting array" 0 (set s 0)) (test-equal "return value when setting array" '(2 3 5) (to-list (set s (seq 2 3 5)))) (test-equal "copy content of other array" '(2 3 5) (to-list s))) (let [(s (seq 1 2 3))] (set s 0) (test-equal "fill integer array with zeros" '(0 0 0) (to-list s))) (let [(m (arr (1 2 3) (4 5 6)))] (test-equal "return value when setting 2D array" '(7 8) (to-list (set m (seq 7 8)))) (test-equal "set values of 2D array using 1D array" '((7 7 7) (8 8 8)) (to-list m))) (let [(s (seq 1 2 3))] (set s 1 5) (test-equal "set one value of a 1D array" '(1 5 3) (to-list s))) (test-equal "Setting an element in a 2D array" 42 (let [(m (arr (1 2 3) (4 5 6)))] (set m 1 0 42) (get m 1 0))) (test-end "set") (test-begin "ensure compact storage") (test-assert "'ensure-default-strides' should do nothing by default" (let [(m (make (multiarray 2) #:shape '(6 4)))] (eq? m (ensure-default-strides m)))) (test-assert "'ensure-default-strides' should create a compact clone if the input is not contiguous" (let [(m (make (multiarray 2) #:shape '(6 4)))] (equal? '(1 4) (strides (ensure-default-strides (roll m)))))) (test-end "ensure compact storage") (test-begin "unary +") (test-equal "unary plus for sequence" '(2 3 5) (to-list (+ (seq 2 3 5)))) (test-end "unary +") (test-begin "unary -") (test-equal "negate integer sequence" '(-2 -3 -5) (to-list (- (seq 2 3 5)))) (test-equal "negate 2D array" '((-1 2) (3 -4)) (to-list (- (arr (1 -2) (-3 4))))) (test-equal "negate 3D array" '(((-1 2 -3) (4 -5 6))) (to-list (- (arr ((1 -2 3) (-4 5 -6)))))) (test-end "unary -") (test-begin "unary ~") (test-equal "bitwise negation of array" '(253 252 250) (to-list (~ (seq 2 3 5)))) (test-end "unary ~") (test-begin "unary =0, !=0, and !") (test-equal "compare bytes with zero" '(#f #t #f) (to-list (=0 (seq -1 0 1)))) (test-equal "check whether bytes are not zero" '(#t #f #t) (to-list (!=0 (seq -1 0 1)))) (test-equal "element-wise not for booleans" '(#f #t #f) (to-list (! (seq #t #f #t)))) (test-end "unary =0, !=0, and !") (test-begin "unary << and >>") (test-equal "left-shift sequence" '(2 4 6) (to-list (<< (seq 1 2 3)))) (test-equal "right-shift sequence" '(2 4 6) (to-list (>> (seq 4 8 12)))) (test-end "unary << and >>") (test-begin "binary +") (test-equal "add 1 to downsampled array" '(2 4) (to-list (+ (downsample 2 (seq 1 2 3 4)) 1))) (test-equal "add downsampled array to 1" '(2 4) (to-list (+ 1 (downsample 2 (seq 1 2 3 4))))) (test-equal "add two downsampled arrays" '(2 6) (let [(s (downsample 2 (seq 1 2 3 4)))] (to-list (+ s s)))) (test-equal "add integer to integer sequence" '(3 4 6) (to-list (+ (seq 2 3 5) 1))) (test-equal "add integer sequence to integer" '(3 4 6) (to-list (+ 1 (seq 2 3 5)))) (test-equal "add two sequences" '(3 5 9) (to-list (+ (seq 2 3 5) (seq 1 2 4)))) (test-equal "add 1D and 2D array" '((3 4 5) (7 8 9)) (to-list (+ (seq 0 1) (arr (3 4 5) (6 7 8))))) (test-equal "add 2D and 1D array" '((3 4 5) (7 8 9)) (to-list (+ (arr (3 4 5) (6 7 8)) (seq 0 1)))) (test-equal "add scalar to 3D array" '(((2 3 4) (5 6 7))) (to-list (+ (arr ((1 2 3) (4 5 6))) 1))) (test-equal "add 3D array to scalar" '(((2 3 4) (5 6 7))) (to-list (+ 1 (arr ((1 2 3) (4 5 6)))))) (test-equal "add two 3D arrays" '(((2 4 6) (8 10 12))) (let [(m (arr ((1 2 3) (4 5 6))))] (to-list (+ m m)))) (test-equal "add 1 to 4D array" '((((3 3) (3 3)) ((3 3) (3 3))) (((3 3) (3 3)) ((3 3) (3 3)))) (to-list (+ (arr (((2 2) (2 2)) ((2 2) (2 2))) (((2 2) (2 2)) ((2 2) (2 2)))) 1))) (test-equal "add unsigned integer and integer array" '(1 2 3) (to-list (+ (seq 1 2 3) (seq 0 0 0)))) (test-end "binary +") (test-begin "binary -") (test-equal "element-wise subtract integer from a sequence" '(-3 -2 -1) (to-list (- (seq -1 0 1) 2))) (test-equal "subtract 1 from a 2D array" '((0 1 2) (3 4 5)) (to-list (- (arr (1 2 3) (4 5 6)) 1))) (test-equal "subtract 2D array from integer" '((6 5 4) (3 2 1)) (to-list (- 7 (arr (1 2 3) (4 5 6))))) (test-equal "subtract 2D array from each other" '((1 1 2) (3 4 5)) (to-list (- (arr (2 3 5) (7 9 11)) (arr (1 2 3) (4 5 6))))) (test-end "binary -") (test-begin "binary *") (test-equal "multiply sequence with a number" '(6 9 15) (to-list (* (seq 2 3 5) 3))) (test-end "binary *") (test-begin "binary << and >>") (test-equal "left-shift sequence" '(2 4 6) (to-list (<< (seq 1 2 3) 1))) (test-equal "right-shift sequence" '(1 2 3) (to-list (>> (seq 4 8 12) 2))) (test-end "binary << and >>") (test-begin "bitwise and, or, and xor") (test-equal "element-wise bit-wise and" '(3 0 1) (to-list (& (seq 3 4 5) 3))) (test-equal "element-wise bit-wise or" '(3 7 7) (to-list (| 3 (seq 3 4 5)))) (test-equal "element-wise bit-wise xor" '(1 7 1) (to-list (^ (seq 2 3 4) (seq 3 4 5)))) (test-end "bitwise and, or, and xor") (test-begin "binary && and ||") (test-equal "element-wise and with three arguments" '(#f #t #f #f) (to-list (&& (seq #f #t #t #t) (seq #t #t #t #f) (seq #t #t #f #f)))) (test-equal "element-wise and with array and boolean argument" '(#f #t) (to-list (&& (seq #f #t) #t))) (test-equal "element-wise or" '(#f #t #t #t) (to-list (|| (seq #f #t #f #t) (seq #f #f #t #t)))) (test-end "binary && and ||") (test-begin "binary = and !=") (test-equal "element-wise array-scalar comparison" '(#f #t #f) (to-list (== (seq 1 2 3) 2))) (test-equal "Element-wise scalar-array comparison" '(#f #t #f) (to-list (== 2 (seq 1 2 3)))) (test-equal "Element-wise array-array comparison" '(#f #t #f) (to-list (== (seq 3 2 1) (seq 1 2 3)))) (test-equal "Element-wise comparison with integers of different size (first case)" '(#f #t #f) (to-list (== (seq 3 2 1) (seq 1 2 3)))) (test-equal "Element-wise comparison with integers of different size (second case)" '(#f #t #f) (to-list (== (seq 3 2 1) (seq 1 2 3)))) (test-equal "element-wise array-scalar non-equal comparison" '(#t #f #t) (to-list (!= (seq 1 2 3) 2))) (test-end "binary = and !=") (test-begin "binary <, <=, >, and >=") (test-equal "element-wise lower-than" '(#t #f #f) (to-list (lt (seq 3 4 255) 4))) (test-equal "element-wise lower-than with signed values" '(#t #f #f) (to-list (lt (seq -1 0 1) 0))) (test-equal "element-wise lower-than with signed values" '(#f #f #t) (to-list (lt 0 (seq -1 0 1)))) (test-equal "element-wise lower-than with unsigned and signed byte" '(#f #f #f) (to-list (lt (seq 1 2 128) -1))) (test-equal "element-wise lower-equal with unsigned values" '(#t #t #f) (to-list (le (seq 3 4 255) 4))) (test-equal "element-wise lower-equal with signed values" '(#t #t #f) (to-list (le (seq -1 0 1) 0))) (test-equal "element-wise greater-than with signed values" '(#f #f #t) (to-list (gt (seq 3 4 255) 4))) (test-equal "element-wise lower-equal with signed values" '(#f #f #t) (to-list (gt (seq -1 0 1) 0))) (test-equal "element-wise greater-equal with unsigned values" '(#f #t #t) (to-list (ge (seq 3 4 255) 4))) (test-equal "element-wise greater-equal with signed values" '(#f #t #t) (to-list (ge (seq -1 0 1) 0))) (test-end "binary <, <=, >, and >=") (test-begin "binary / and %") (test-equal "element-wise signed byte division" '(1 2 -3) (to-list (/ (seq 3 6 -9) 3))) (test-equal "element-wise modulo" '(2 0 1) (to-list (% (seq 2 3 4) 3))) (test-end "binary / and %") (test-begin "handling of intermediate results") (test-equal "Compiling and run plus operation with three numbers" 9 ((jit ctx (list ) +) 2 3 4)) (test-equal "Compile and run binary mutating operating with nested second parameter" 9 ((jit ctx (list ) (lambda (x y z) (+ x (+ y z)))) 2 3 4)) (test-assert "compile and run unary functional operation with nested parameter" ((jit ctx (list ) (lambda (x y) (=0 (+ x y)))) -3 3)) (test-assert "compile and run binary functional operation with nested first parameter" ((jit ctx (list ) (lambda (a b c) (== a (+ b c)))) 5 2 3)) (test-assert "compile and run binary functional operation with nested first parameter" ((jit ctx (list ) (lambda (a b c) (== (+ a b) c))) 2 3 5)) (let [(i (parameter ))] (test-equal "Integer decomposes to itself" i (decompose-value i))) (test-end "handling of intermediate results") (test-begin "element-wise type conversions") (test-eq "check result type of parameter type conversion" (type (to-type (parameter )))) (test-equal "compile and run type conversion of scalar" 42 ((jit ctx (list ) (cut to-type <>)) 42)) (test-equal "compile and run element-wise conversion of array to integer" '(2 3 5) (to-list ((jit ctx (list (sequence )) (cut to-type <>)) (seq 2 3 5)))) (test-eq "type conversion uses specified element type for return value" (typecode (to-type (seq 2 3 5)))) (test-equal "type conversion preserves content" '(2 3 5) (to-list (to-type (seq 2 3 5)))) (test-equal "compile and run element-wise conversion of array to byte" '(2 3 5) (to-list ((jit ctx (list (sequence )) (cut to-type <>)) (seq 2 3 5)))) (test-equal "typecasting to smaller integer type" '(255 0 1) (to-list (to-type (seq 255 256 257)))) (test-end "element-wise type conversions") (test-begin "check whether method call needs intermediate value") (let* [(a (parameter )) (f (~ a))] (test-assert "parameter is not a pointer" (not (is-pointer? (parameter )))) (test-assert "pointer parameter is a pointer" (is-pointer? (parameter (pointer )))) (test-assert "Compilation of function always requires intermediate value" (call-needs-intermediate? f)) (test-assert "Value does not require intermediate value" (not (call-needs-intermediate? a))) (test-assert "Value of different size requires intermediate value" (call-needs-intermediate? a)) (test-assert "Pointer requires intermediate value" (call-needs-intermediate? (parameter (pointer ))))) (test-end "check whether method call needs intermediate value") (let [(a (parameter ))] (test-equal "Passing register parameters creates copy instructions" (MOV EDI (get (delegate a))) (car (pass-parameters (list a) (NOP))))) (let [(args (map parameter (make-list 7 )))] (test-equal "Passing stack parameters pushes the parameters on the stack" (PUSH (get (delegate (list-ref args 6)))) (list-ref (pass-parameters args (NOP)) 6)) (test-equal "Stack pointer gets corrected after stack parameters have been used" (ADD RSP #x08) (last (pass-parameters args (NOP))))) (test-eq "Scheme objects are represented using unsigned 64-bit integers" (typecode (var ))) (let [(o (skeleton ))] (test-assert "skeleton of top object is of type obj" (is-a? o )) (test-assert "value of object skeleton is a variable" (is-a? (value o) )) (test-eq "value of object skeleton is of type unsigned long integer" (typecode (value o)))) (test-assert "do not decompose variables" (is-a? (car (content (var ))) )) (test-eq "compile and run identity function accepting Scheme object" 'symbol ((jit ctx (list ) identity) 'symbol)) (test-eq "make sure \"content\" enforces SCM object arguments" 42 ((jit ctx (list ) identity) 42)) (test-eq "negation of Scheme object" -300 ((jit ctx (list ) -) 300)) (test-eq "bitwise logical not using Scheme objects" -124 ((jit ctx (list ) ~) 123)) (test-equal "comparison of Scheme object with zero" '(#f #t) (map (jit ctx (list ) =0) '(3 0))) (test-equal "Scheme object not equal to zero" '(#t #f) (map (jit ctx (list ) !=0) '(3 0))) (test-equal "compiled logical not for Scheme objects" '(#t #f #f #f #f) (map (jit ctx (list ) !) '(#f #t () 0 1))) (test-eq "compiled plus operation using Scheme objects" 300 ((jit ctx (list ) +) 100 200)) (test-eq "compiled unary plus using Scheme objects" 300 ((jit ctx (list ) +) 300)) (test-eq "compiled minus operation using Scheme objects" 100 ((jit ctx (list ) -) 300 200)) (test-eq "compiled multiplication using Scheme objects" 600 ((jit ctx (list ) *) 20 30)) (test-eq "compiled division using Scheme objects" 5 ((jit ctx (list ) /) 15 3)) (test-eq "compiled modulo using Scheme objects" 33 ((jit ctx (list ) %) 123 45)) (test-eq "bitwise and using Scheme objects" 72 ((jit ctx (list ) &) 123 456)) (test-eq "bitwise or using Scheme objects" 507 ((jit ctx (list ) |) 123 456)) (test-eq "bitwise exclusive-or using Scheme objects" 435 ((jit ctx (list ) ^) 123 456)) (test-equal "logical and for Scheme objects" '(#f b) (map (jit ctx (list ) &&) '(#f a) '(b b))) (test-equal "logical or for Scheme objects" '(b a) (map (jit ctx (list ) ||) '(#f a) '(b b))) (test-eqv "compiled minimum using Scheme objects" 123 ((jit ctx (list ) min) 123 456)) (test-eqv "compiled maximum using Scheme objects" 456 ((jit ctx (list ) max) 123 456)) (test-eqv "compiled shift-left using Scheme objects" 1968 ((jit ctx (list ) <<) 123 4)) (test-eqv "compiled shift-right using Scheme objects" 123 ((jit ctx (list ) >>) 1968 4)) (test-eqv "compiled shift-left by one of Scheme objects" 84 ((jit ctx (list ) <<) 42)) (test-eqv "compiled shift-right by one of Scheme objects" 21 ((jit ctx (list ) >>) 42)) (test-equal "compiled equal comparison of Scheme objects" (list #f #t) (map (jit ctx (list ) ==) '(21 42) '(42 42))) (test-equal "compiled unequal comparison of Scheme objects" (list #t #f) (map (jit ctx (list ) !=) '(21 42) '(42 42))) (test-equal "compiled lower-than comparison for Scheme objects" (list #t #f #f) (map (jit ctx (list ) lt) '(3 5 7) '(5 5 5))) (test-equal "compiled lower-equal comparison for Scheme objects" (list #t #t #f) (map (jit ctx (list ) le) '(3 5 7) '(5 5 5))) (test-equal "compiled greater-than comparison for Scheme objects" (list #f #f #t) (map (jit ctx (list ) gt) '(3 5 7) '(5 5 5))) (test-equal "compiled greater-equal comparison for Scheme objects" (list #f #t #t) (map (jit ctx (list ) ge) '(3 5 7) '(5 5 5))) (test-eq "convert Scheme object to integer in compiled code" 42 ((jit ctx (list ) (cut to-type <>)) 42)) (test-equal "compile and run identity function for sequence of objects" '(2 3 5) (to-list ((jit ctx (list (sequence )) identity) (seq 2 3 5)))) (test-equal "dereference pointer when doing bitwise negation" '(-3 -4 -6) (to-list ((jit ctx (list (sequence )) ~) (seq 2 3 5)))) (test-equal "convert unsigned byte to boolean" '(#f #t) (map (jit ctx (list ) (cut to-type <>)) '(0 1))) (test-equal "convert integer to boolean" '(#f #t) (map (jit ctx (list ) (cut to-type <>)) '(0 1))) (test-equal "convert boolean to unsigned byte" '(0 1) (map (jit ctx (list ) (cut to-type <>)) '(#f #t))) (test-eqv "convert integer to object" 42 ((jit ctx (list ) (cut to-type <>)) 42)) (test-equal "convert object to boolean" '(#f #t) (map (jit ctx (list ) (cut to-type <>)) '(#f #t))) (test-equal "convert boolean to object" '(#f #t) (map (jit ctx (list ) (cut to-type <>)) '(#f #t))) (test-equal "convert integer RGB sequence to object RGB sequence" (list (rgb 2 3 5)) (to-list (to-type (rgb ) (seq (rgb 2 3 5))))) (test-equal "convert object RGB sequence to integer RGB sequence" (list (rgb 2 3 5)) (to-list (to-type (rgb ) (seq (rgb ) (rgb 2 3 5))))) (test-eqv "plus for object and integer" 7 ((jit ctx (list ) +) 3 4)) (test-eqv "plus for integer and object" 7 ((jit ctx (list ) +) 3 4)) (test-equal "generate code to package an object in a list" '(a) ((jit ctx (list ) package-return-content) 'a)) (test-equal "generate code to return the content of an RGB value" '(2 3 5) ((jit ctx (list ) package-return-content) (rgb 2 3 5))) (test-equal "build a list of values in compiled code" '(2 3 5) ((jit ctx (list ) build-list) 2 3 5)) (let [(i (skeleton ))] (test-equal "generate code create, define, and package return value" '(123) (address->scm ((asm ctx (list ) (apply virtual-variables (apply assemble (generate-return-code (list i) (parameter ) (parameter i))))) 123)))) (test-eqv "get dimension of sequence" 3 ((jit ctx (list (sequence )) dimension) (seq 2 3 5))) (test-eqv "get stride of sequence" 1 ((jit ctx (list (sequence )) stride) (seq 2 3 5))) (test-eqv "number multiplied with nothing returns same number" 5 ((jit ctx (list ) *) 5)) (test-equal "sequence multiplied with nothing returns same sequence" '(2 3 5) (to-list (* (seq 2 3 5)))) (test-assert "compile function returning empty list" (null? ((jit ctx '() (lambda () scm-eol))))) (test-equal "call \"cons\" from compiled code" (cons 'a 'b) ((jit ctx (list ) scm-cons) 'a 'b)) (test-equal "compile function putting object into a one-element list" '(a) ((jit ctx (list ) (cut scm-cons <> scm-eol)) 'a)) (test-equal "compile function putting integer into a one-element list" '(42) ((jit ctx (list ) (cut scm-cons <> scm-eol)) 42)) (test-equal "compile function putting result of expression into a one-element list" '(170) ((jit ctx (list ) (lambda (i j) (scm-cons (+ i j) scm-eol))) 100 70)) (test-assert "allocate memory in compiled method" ((jit ctx (list ) scm-gc-malloc-pointerless) 128)) (test-assert "allocate memory in compiled method" ((jit ctx (list ) scm-gc-malloc) 128)) (test-begin "list operations") (test-assert "+ is an operation" (memv '+ operations)) (test-assert "- is an operation" (memv '- operations)) (test-assert "* is an operation" (memv '* operations)) (test-end "list operations") (test-end "aiscm jit") aiscm-0.15.1/tests/test_obj.scm0000644000175000017500000002053513213600051013266 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-26) (srfi srfi-64) (system foreign) (oop goops) (aiscm obj) (aiscm element) (aiscm int) (aiscm float) (aiscm bool) (aiscm sequence) (aiscm jit) (aiscm asm) (aiscm util)) (test-begin "aiscm obj") (define obj (make #:value 'sym)) (define address (scm->address 'sym)) (define ctx (make )) (test-eqv "size of SCM reference is 64 bits" 8 (size-of )) (test-equal "pack Scheme object" #vu8(#xaa #x00 #x00 #x00 #x00 #x00 #x00 #x00) (pack (make #:value 42))) (test-equal "unpack Scheme object" (make #:value 42) (unpack #vu8(#xaa #x00 #x00 #x00 #x00 #x00 #x00 #x00))) (test-eq "objects coerce to objects" (coerce )) (test-eq "object and integer coerce to object" (coerce )) (test-eq "integer and object coerce to object" (coerce )) (test-equal "write wrapped object" "#< abc>" (call-with-output-string (lambda (port) (write (make #:value 'abc) port)))) (test-eq "native type for a symbol is " (native-type 'a)) (test-equal "build SCM value" 'sym (build (list 'sym))) (test-equal "content of symbol returns internal 64 bit representation" (list address) (unbuild 'sym)) (test-eq "compile and run call to scm_difference with one argument" -300 ((jit ctx (list ) (cut make-native-function obj-negate <>)) 300)) (test-eq "compile and run bitwise not" -124 ((jit ctx (list ) (cut make-native-function scm-lognot <>)) 123)) (test-equal "compile and run comparison with zero" '(#f #t) (map (jit ctx (list ) (cut make-native-function obj-zero-p <>)) '(3 0))) (test-equal "compile and run not-equal-to zero" '(#t #f) (map (jit ctx (list ) (cut make-native-function obj-nonzero-p <>)) '(3 0))) (test-equal "compile logical not for Scheme objects" '(#t #f #f #f #f) (map (jit ctx (list ) (cut make-native-function obj-not <>)) '(#f #t () 0 1))) (test-eq "compile and run call to scm_sum" 300 ((jit ctx (list ) (cut make-native-function scm-sum <...>)) 100 200)) (test-eq "compile and run call to scm_difference" 100 ((jit ctx (list ) (cut make-native-function scm-difference <...>)) 300 200)) (test-eq "compile and run call to scm_product" 600 ((jit ctx (list ) (cut make-native-function scm-product <...>)) 20 30)) (test-eq "compile and run call to scm_divide" 30 ((jit ctx (list ) (cut make-native-function scm-divide <...>)) 600 20)) (test-eq "compile and run call to scm_remainder" 33 ((jit ctx (list ) (cut make-native-function scm-remainder <...>)) 123 45)) (test-eq "compile and run call to scm_logand" 72 ((jit ctx (list ) (cut make-native-function scm-logand <...>)) 123 456)) (test-eq "compile and run call to scm_logior" 507 ((jit ctx (list ) (cut make-native-function scm-logior <...>)) 123 456)) (test-eq "compile and run call to scm_logxor" 435 ((jit ctx (list ) (cut make-native-function scm-logxor <...>)) 123 456)) (test-equal "compile logical and for Scheme objects" '(#f b) (map (jit ctx (list ) (cut make-native-function obj-and <...>)) '(#f a) '(b b))) (test-equal "compile logical or for Scheme objects" '(b a) (map (jit ctx (list ) (cut make-native-function obj-or <...>)) '(#f a) '(b b))) (test-eq "compile and run call to scm_min" 123 ((jit ctx (list ) (cut make-native-function scm-min <...>)) 123 456)) (test-eq "compile and run call to scm_max" 456 ((jit ctx (list ) (cut make-native-function scm-max <...>)) 123 456)) (test-eq "compile and run call to scm_ash" 1968 ((jit ctx (list ) (cut make-native-function scm-ash <...>)) 123 4)) (test-eq "compile and run call to obj_shr" 123 ((jit ctx (list ) (cut make-native-function obj-shr <...>)) 1968 4)) (test-equal "compile and run equality of objects" '(#f #t) (map (jit ctx (list ) (cut make-native-function obj-equal-p <...>)) '(21 42) '(42 42))) (test-equal "compile and run inequality of objects" '(#t #f) (map (jit ctx (list ) (cut make-native-function obj-nequal-p <...>)) '(21 42) '(42 42))) (test-equal "compile and run lower-than comparison for objects" '(#t #f #f) (map (jit ctx (list ) (cut make-native-function obj-less-p <...>)) '(3 5 7) '(5 5 5))) (test-equal "compile and run lower-equal comparison for objects" '(#t #t #f) (map (jit ctx (list ) (cut make-native-function obj-leq-p <...>)) '(3 5 7) '(5 5 5))) (test-equal "compile and run greater-than comparison for objects" '(#f #f #t) (map (jit ctx (list ) (cut make-native-function obj-gr-p <...>)) '(3 5 7) '(5 5 5))) (test-equal "compile and run greater-equal comparison for objects" '(#f #t #t) (map (jit ctx (list ) (cut make-native-function obj-geq-p <...>)) '(3 5 7) '(5 5 5))) (test-assert "object meory is not pointerless" (not (pointerless? ))) (test-assert "object references don't need sign-extension" (not (signed? ))) (test-equal "compile and run call to obj_from_bool" '(#f #t) (map (jit ctx (list ) (cut make-native-function obj-from-bool <>)) '(#f #t))) (test-equal "compile and run call to scm_to_bool" '(#f #t) (map (jit ctx (list ) (cut make-native-function scm-to-bool <>)) '(#f #t))) (test-eqv "compile and run call to scm_to_int8" 123 ((jit ctx (list ) (cut make-native-function scm-to-uint8 <>)) 123)) (test-eqv "compile and run call to scm_from_int8" 123 ((jit ctx (list ) (cut make-native-function scm-from-uint8 <>)) 123)) (test-eqv "compile and run call to scm_to_int8" -123 ((jit ctx (list ) (cut make-native-function scm-to-int8 <>)) -123)) (test-eqv "compile and run call to scm_from_int8" -123 ((jit ctx (list ) (cut make-native-function scm-from-int8 <>)) -123)) (test-eqv "compile and run call to scm_to_int16" 123 ((jit ctx (list ) (cut make-native-function scm-to-uint16 <>)) 123)) (test-eqv "compile and run call to scm_from_int16" 123 ((jit ctx (list ) (cut make-native-function scm-from-uint16 <>)) 123)) (test-eqv "compile and run call to scm_to_int16" -123 ((jit ctx (list ) (cut make-native-function scm-to-int16 <>)) -123)) (test-eqv "compile and run call to scm_from_int16" -123 ((jit ctx (list ) (cut make-native-function scm-from-int16 <>)) -123)) (test-eqv "compile and run call to scm_to_int32" 123 ((jit ctx (list ) (cut make-native-function scm-to-uint32 <>)) 123)) (test-eqv "compile and run call to scm_from_int32" 123 ((jit ctx (list ) (cut make-native-function scm-from-uint32 <>)) 123)) (test-eqv "compile and run call to scm_to_int32" -123 ((jit ctx (list ) (cut make-native-function scm-to-int32 <>)) -123)) (test-eqv "compile and run call to scm_from_int32" -123 ((jit ctx (list ) (cut make-native-function scm-from-int32 <>)) -123)) (test-eqv "compile and run call to scm_to_int64" 123 ((jit ctx (list ) (cut make-native-function scm-to-uint64 <>)) 123)) (test-eqv "compile and run call to scm_from_int64" 123 ((jit ctx (list ) (cut make-native-function scm-from-uint64 <>)) 123)) (test-eqv "compile and run call to scm_to_int64" -123 ((jit ctx (list ) (cut make-native-function scm-to-int64 <>)) -123)) (test-eqv "compile and run call to scm_from_int64" -123 ((jit ctx (list ) (cut make-native-function scm-from-int64 <>)) -123)) (test-equal "implicit conversion from long integer to object" -42 ((jit ctx (list ) (cut make-native-function obj-negate <>)) 42)) (test-end "aiscm obj") aiscm-0.15.1/tests/test_mem.scm0000644000175000017500000000524113213600051013267 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (ice-9 regex) (system foreign) (aiscm element) (aiscm mem)) (test-begin "aiscm mem") (define m (make #:size 10)) (test-assert "memory pointer should be greater or equal base pointer" (>= (pointer-address (get-memory m)) (pointer-address (slot-ref m 'base)))) (test-equal "default value for memory slot is value of base" (get-memory m) (get-memory (make #:base (get-memory m) #:size 10))) (test-eqv "'get-size' returns size of allocated memory" 10 (get-size m)) (test-equal "base pointer is copied when creating pointer with offset" (slot-ref m 'base) (slot-ref (+ m 6) 'base)) (test-equal "equal mem objects" (+ m 1) (+ m 1)) (test-assert "unequal mem objects" (not (equal? (+ m 1) (+ m 2)))) (test-eqv "pointer operations keep track of memory size" 4 (get-size (+ m 6))) (test-error "throw exception when pointer offset is negative" 'misc-error (+ m -1)) (test-equal "writing and reading to/from memory" #vu8(2 3 5) (begin (write-bytes m #vu8(2 3 5 7)) (read-bytes m 3))) (test-equal "writing and reading with offset to/from memory" #vu8(3 5 7) (begin (write-bytes m #vu8(2 3 5 7)) (read-bytes (+ m 1) 3))) (test-equal "writing with overlap and reading back" #vu8(2 2 1 1) (begin (write-bytes m #vu8(1 1 1 1)) (write-bytes m #vu8(2 2)) (read-bytes m 4))) (test-error "throw exception when reading past memory boundary" 'misc-error (read-bytes m 11)) (test-error "throw exception when attempting to write past memory boundary" 'misc-error (write-bytes m #vu8(1 2 3 4 5 6 7 8 9 10 11))) (test-assert "display mem object" (string-match "^#< #x[0-9a-f]* 10>$" (call-with-output-string (lambda (port) (display m port))))) (test-assert "write mem object" (string-match "^#< #x[0-9a-f]* 10>$" (call-with-output-string (lambda (port) (write m port))))) (test-end "aiscm mem") aiscm-0.15.1/tests/test_tensor.scm0000644000175000017500000003403313213600051014024 00000000000000(use-modules (srfi srfi-64) (srfi srfi-1) (oop goops) (aiscm asm) (aiscm jit) (aiscm variable) (aiscm expression) (aiscm operation) (aiscm loop) (aiscm element) (aiscm int) (aiscm obj) (aiscm sequence) (aiscm tensor)) (test-begin "aiscm tensor") (define ctx (make )) (test-begin "compiling tensors") (let [(s (seq 2 3 5)) (t (seq 3 5 7)) (m (arr (2 3 5) (7 11 13) (17 19 23))) (r (arr (2 3 5) (7 11 13))) (i (var )) (j (var ))] (test-equal "switch dimensions of a 2D tensor" '((2 7 17) (3 11 19) (5 13 23)) (to-list ((jit ctx (list (class-of m)) (lambda (m) (indexer i (indexer j (get (get m j) i) (cadr (shape m))) (car (shape m))))) m))) (test-equal "tensor macro provides local variable" (to-list s) (to-list ((jit ctx (list (class-of s)) (lambda (s) (dim k (get s k)))) s))) (test-equal "switch dimensions of a non-square 2D tensor" '((2 7) (3 11) (5 13)) (to-list ((jit ctx (list (class-of r)) (lambda (r) (indexer i (indexer j (get (get r j) i) (cadr (shape r))) (car (shape r))))) r))) (test-equal "tensor expression for element-wise sum" '(5 8 12) (to-list ((jit ctx (list (class-of s) (class-of t)) (lambda (s t) (dim k (+ (get s k) (get t k))))) s t)))) (test-equal "compile and run one-dimensional identity tensor" '(2 3 5) (to-list ((jit ctx (list (sequence )) identity) (seq 2 3 5)))) (test-equal "compile and run two-dimensional identity tensor" '((2 3 5) (3 5 7)) (to-list ((jit ctx (list (multiarray 2)) identity) (arr (2 3 5) (3 5 7))))) (test-equal "reconstitute a 1D tensor" '(2 3 5) (to-list ((jit ctx (list (sequence )) (lambda (s) (dim k (get s k)))) (seq 2 3 5)))) (test-equal "reconstitute a 2D tensor" '((2 3 5) (3 5 7)) (to-list ((jit ctx (list (multiarray 2)) (lambda (m) (dim j (dim i (get (get m j) i))))) (arr (2 3 5) (3 5 7))))) (test-equal "transpose 2D tensor" '((2 3) (3 5) (5 7)) (to-list ((jit ctx (list (multiarray 2)) (lambda (m) (dim j (dim i (+ (get (get m i) j)))))) (arr (2 3 5) (3 5 7))))) (test-equal "element-wise addition of two arrays" '(5 8 12) (to-list ((jit ctx (list (sequence ) (sequence )) +) (seq 2 3 5) (seq 3 5 7)))) (test-equal "access one-dimensional array twice using same index in tensor operation" '(5 8 12) (to-list ((jit ctx (list (sequence ) (sequence )) (lambda (s u) (dim k (+ (get s k) (get u k))))) (seq 2 3 5) (seq 3 5 7)))) (test-equal "use array twice in tensor expression" '(4 6 10) (to-list ((jit ctx (list (sequence )) (lambda (s) (+ s s))) (seq 2 3 5)))) (test-equal "array scalar sum in tensor expression" '(9 10 12) (to-list ((jit ctx (list (sequence ) ) (lambda (s x) (+ s x))) (seq 2 3 5) 7))) (test-equal "add 2D array and transposed version of itself" '((4 8) (8 14)) (to-list ((jit ctx (list (multiarray 2)) (lambda (m) (dim j (dim i (+ (get (get m j) i) (get (get m i) j)))))) (arr (2 3) (5 7))))) (test-equal "tensor 1D plus with scalar" '(3 4 6) (to-list ((jit ctx (list (sequence ) ) (lambda (a b) (dim i (+ (get a i) b)))) (seq 2 3 5) 1))) (test-end "compiling tensors") (test-begin "tensor expressions") (let* [(s (parameter (sequence ))) (t (parameter (sequence ))) (f (+ s t)) (l (loop-details (multi-loop f))) (ft (dim k (+ (get s k) (get t k)))) (lt (loop-details (multi-loop ft)))] (test-equal "tensor sum uses loops with two typecodes" (list ) (map typecode l)) (test-equal "explicitly indexed tensor sum uses loops with two typecodes" (list ) (map typecode lt))) (test-end "tensor expressions") (test-begin "identify tensor operations") (test-equal "+ is a tensor operation" '(#t #f #f) (tensor-operations '(+ x y))) (test-equal "- is a tensor operation" '(#t #f) (tensor-operations '(- x))) (test-assert "x is not a tensor operation" (not (tensor-operations 'x))) (test-assert "\"read-image\" is not a tensor operation" (not (tensor-operations '(read-image "test.bmp")))) (test-equal "\"get\" is a tensor operation" '(#t #f #t) (tensor-operations '(get s k))) (test-equal "\"get\" with two arguments is a tensor operation" '(#t #f #t #t) (tensor-operations '(get s i j))) (test-equal "\"dim\" is a tensor operation" '(#t #t #f) (tensor-operations '(dim k s))) (test-equal "\"dim\" with two arguments is a tensor operation" '(#t #t #t #f) (tensor-operations '(dim i j s))) (test-equal "\"inject\" is a tensor operation" '(#t #t #t #f) (tensor-operations '(inject += i s))) (test-end "identify tensor operations") (test-begin "convert tensor expression to identifier") (test-equal "filter variable names in expression" '_ (expression->identifier 'x)) (test-equal "filter numeric arguments of expression" '_ (expression->identifier 42)) (test-equal "preserve unary plus operation" '(+ _) (expression->identifier '(+ x))) (test-equal "preserve unary minus operation" '(- _) (expression->identifier '(- x))) (test-equal "preserve binary plus operation" '(+ _ _) (expression->identifier '(+ x y))) (test-equal "works recursively" '(+ (- _) _) (expression->identifier '(+ (- x) y))) (test-equal "filter non-tensor operations" '_ (expression->identifier '(read-image "test.bmp"))) (test-equal "preverse tensor index when accessing array" '(get _ k) (expression->identifier '(get s k))) (test-equal "indexing of an expression" '(get (+ _) k) (expression->identifier '(get (+ s) k))) (test-end "convert tensor expression to identifier") (test-begin "convert identifier to symbol") (test-equal "simple symbol stays same" '_ (identifier->symbol '_)) (test-equal "expression is converted to symbol" "(- _)" (symbol->string (identifier->symbol '(- _)))) (test-end "convert identifier to symbol") (test-begin "extract variables of tensor expression") (test-equal "detect variable name" '(x) (tensor-variables 'x)) (test-equal "detect numerical arguments" '(42) (tensor-variables 42)) (test-equal "extract argument of unary plus" '(x) (tensor-variables '(+ x))) (test-equal "extract argument of unary minus" '(x) (tensor-variables '(- x))) (test-equal "extract arguments of binary plus" '(x y) (tensor-variables '(+ x y))) (test-equal "extract variables recursively" '(x y) (tensor-variables '(+ (- x) y))) (test-equal "extract non-tensor operations" '((read-image "test.bmp")) (tensor-variables '(read-image "test.bmp"))) (test-equal "extract variables of tensor index access" '(s) (tensor-variables '(get s k))) (test-end "extract variables of tensor expression") (test-begin "convert tensor identifier to tensor expression") (test-equal "single variable expression" (cons 'x '(y z)) (build-expression '_ '(x y z))) (test-equal "reconstruct unary plus operation" (cons '(+ x) '(y)) (build-expression '(+ _) '(x y))) (test-equal "build arguments of unary expression" (cons '(x) '(y z)) (consume-variables '(#f) '(_) '(x y z))) (test-equal "build arguments of binary expression" (cons '(x y) '(z)) (consume-variables '(#f #f) '(_ _) '(x y z))) (test-equal "apply argument mask when consuming variables" (cons '(+ x y) '(z)) (consume-variables '(#t #f #f) '(+ _ _) '(x y z))) (test-equal "build binary expression" (cons '(+ x y) '(z)) (build-expression '(+ _ _) '(x y z))) (test-equal "consume variables recursively" (cons '((- x)) '(y z)) (consume-variables '(#f) '((- _)) '(x y z))) (test-equal "reconstruct single variable expression" 'x (identifier->expression '_ '(x))) (test-equal "reconstruct expression" '(- x y) (identifier->expression '(- _ _) '(x y))) (test-equal "reconstruct nested expressions" '(+ (- x) y) (identifier->expression '(+ (- _) _) '(x y))) (test-equal "insert non-tensor operations" '(read-image "test.bmp") (identifier->expression '_ '((read-image "test.bmp")))) (test-equal "reconstruct tensor index access" '(get s k) (identifier->expression '(get _ k) '(s))) (test-end "convert tensor identifier to tensor expression") (test-begin "tensor macro") (test-equal "test trivial tensor" '(2 3 5) (to-list (tensor (seq 2 3 5)))) (tensor (seq 2 3 5)) (test-assert "tensor macro defines a generic for compiled methods" (defined? '_ (current-module))) (test-equal "trivial tensor operation is cached using a generic" '(2 3 5) (to-list (_ (seq 2 3 5)))) (test-equal "cached operation uses provided values" '(3 5 7) (to-list (_ (seq 3 5 7)))) (test-equal "test trivial 2D tensor" '((3 4 6)) (to-list (tensor (arr (3 4 6))))) (define num-generics (length (generic-function-methods _))) (tensor (seq 2 3 5)) (test-eqv "tensor operations are cached for each type" (1+ num-generics) (length (generic-function-methods _))) (test-equal "test tensor sum" '(5 8 12) (to-list (tensor (+ (seq 2 3 5) (seq 3 5 7))))) (tensor (+ (seq 2 3 5) (seq 3 5 7))) (test-equal "tensor sum is cached using a generic" '(5 8 12) (to-list ((eval (string->symbol "(+ _ _)") (current-module)) (seq 2 3 5) (seq 3 5 7)))) (test-equal "using tensor macro with indexing" '(2 3 5) (to-list (tensor (dim k (get (seq 2 3 5) k))))) (test-equal "use tensor macro to transpose matrix" '((2 3) (3 5) (5 7)) (to-list (tensor (dim j (dim i (get (get (arr (2 3 5) (3 5 7)) i) j)))))) (test-equal "specify multiple indices in one \"get\" operation" '((2 3 5) (3 5 7)) (to-list (tensor (dim j (dim i (get (arr (2 3 5) (3 5 7)) i j)))))) (test-equal "specify multiple dimensions in one \"dim\" operation" '((2 3 5) (3 5 7)) (to-list (tensor (dim i j (get (arr (2 3 5) (3 5 7)) i j))))) (test-equal "specify dimension using \"tensor\" statement" '(2 3 5) (to-list (tensor i (get (seq 2 3 5) i)))) (test-equal "specify multiple dimensions using\"tensor\" statement" '((2 3 5) (3 5 7)) (to-list (tensor i j (get (arr (2 3 5) (3 5 7)) i j)))) (test-eqv "Trivial scalar tensor" 42 (tensor 42)) (test-equal "Array plus scalar operation in tensor" '(3 4 6) (to-list (tensor (+ (seq 2 3 5) 1)))) (test-equal "Create sum table using tensor" '((10 11 12) (20 21 22)) (to-list (tensor i j (+ (get (seq 0 1 2) i) (get (seq 10 20) j))))) (test-end "tensor macro") (test-begin "tensor reduce") (let [(s (parameter (sequence ))) (m (parameter (multiarray 2)))] (test-equal "\"inject\" reduces 1D array to scalar" (type (inject += i (get s i)))) (test-equal "\"inject\" reduces 2D array to 1D" (sequence ) (type (inject += i (get m i)))) (test-eqv "Sum elements using tensor expression" 10 (tensor (inject += k (get (seq 2 3 5) k)))) (test-eqv "Sum different elements using tensor expression" 12 (tensor (inject += k (get (seq 2 3 7) k)))) (test-eq "check loop details for array of integer sums" (typecode (car (loop-details (multi-loop (inject += i (get m i))))))) (test-eq "preserve injection when looping over array of sums" (class-of (body (multi-loop (inject += i (get m i)))))) (test-equal "shape of array of tensor sums is one-dimensional" (list-head (shape m) 1) (shape (inject += i (get m i)))) (test-equal "Tensor sum along one axis" '(4 6 8) (to-list (tensor (inject += i (get (arr (1 2 3) (3 4 5)) i))))) (test-eq "check loop details when other axis explicitely indexed is integer" (typecode (car (loop-details (multi-loop (dim j (inject += i (get m i j)))))))) (test-equal "Tensor sum with other axis explicitely indexed" '(4 6 8) (to-list (tensor i (inject += j (get (arr (1 2 3) (3 4 5)) i j))))) (test-eqv "Multiply elements using tensor expression" 30 (tensor (inject *= k (get (seq 2 3 5) k)))) (test-eqv "Shortcut for summing elements" 10 (tensor (sum k (get (seq 2 3 5) k)))) (test-eqv "Shortcut for Multiplying elements" 30 (tensor (prod k (get (seq 2 3 5) k)))) (test-eqv "Sum of non-trivial tensor expression" 13 (tensor (sum i (+ (get (seq 2 3 5) i) 1)))) (test-eqv "Smallest element of three" 2 (tensor (smallest i (get (seq 5 2 3) i)))) (test-eqv "Largest element of three" 5 (tensor (largest i (get (seq 2 5 3) i))))) (test-end "tensor reduce") (test-begin "combination of tensor features") (let* [(s (parameter (sequence ))) (f (- s)) (i (var ))] (test-eq "accessing an element of a function result returns a function" (class-of (get f i))) (test-equal "accessing an element of a function results reduces the number of dimensions" '() (shape (get f i)))) (test-equal "indexing of array array sum" '(5 8 12) (to-list (tensor i (get (+ (seq 2 3 5) (seq 3 5 7)) i)))) (test-equal "indexing of array scalar sum" '(3 4 6) (to-list (tensor i (get (+ (seq 2 3 5) 1) i)))) (test-equal "sum of sums" 13 (tensor (sum i (sum j (get (arr (1 1) (1 10)) j i))))) (test-equal "indexing of sums" '(2 2 2) (to-list (tensor i (get (sum j (get (arr (1 1 1) (1 1 1)) j)) i)))) (test-end "combination of tensor features") (test-begin "cumulative tensor operations involving objects") (test-eqv "sum objects" 10 (tensor (sum i (get (seq 2 3 5) i)))) (test-eqv "multiply objects" 30 (tensor (prod i (get (seq 2 3 5) i)))) (test-eqv "largest object" 5 (tensor (largest i (get (seq 2 5 3) i)))) (test-eqv "smallest object" 2 (tensor (smallest i (get (seq 2 5 3) i)))) (test-end "cumulative tensor operations involving objects") (test-end "aiscm tensor") aiscm-0.15.1/tests/test_command.scm0000644000175000017500000002245313213600051014133 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (srfi srfi-1) (aiscm asm) (aiscm variable) (aiscm command) (aiscm program) (aiscm expression) (aiscm register-allocate) (aiscm compile) (aiscm jit) (aiscm bool) (aiscm int)) (test-begin "aiscm command") (test-begin "input and output variables") (let [(a (var )) (b (var )) (p (var ))] (test-equal "Get input variables of MOV" (list b) (input (MOV a b))) (test-equal "Get input variables of ADD" (list a b) (input (ADD a b))) (test-equal "Prevent duplication of input variables" (list a) (input (ADD a a))) (test-equal "Get output variables of MOV" (list a) (output (MOV a b))) (test-equal "Get output variables of ADD" (list a) (output (ADD a b))) (test-equal "Get input variables of command writing to address" (list b a) (input (MOV (ptr a) b))) (test-equal "pointer is not output of command" '() (output (MOV (ptr a) b))) (test-equal "Get arguments of command" (list a 0) (get-args (MOV a 0))) (test-equal "Get variables of a program" (list a b) (variables (list (MOV a 0) (MOV b a)))) (test-equal "Get variables of a program using a pointer" (list a p) (variables (list (MOV a 0) (MOV (ptr p) a)))) (test-assert "command without any pointer arguments" (null? (get-ptr-args (MOV a 42)))) (test-equal "get pointer argument of a command" (list p) (get-ptr-args (MOV (ptr p) 42))) (test-assert "compiled command without variables does not have pointer arguments" (null? (get-ptr-args (MOV EAX 42)))) (test-equal "only return variable arguments of pointer" (list p) (get-ptr-args (MOV (ptr p 16) 42)))) (test-end "input and output variables") (test-begin "generic copy") (define-syntax-rule (naive-register-allocate expr) (let* [(cmd expr) (vars (variables cmd)) (registers (take (list RAX RCX RDX) (length vars)))] (substitute-variables cmd (map cons vars registers)))) (let [(p (var )) (x (var )) (y (var )) (b (var )) (ub (var )) (s (var )) (ul (var )) (us (var )) (i (var )) (ui (var )) (j (var ))] (test-equal "use MOV to copy registers" (list (MOV RCX RAX)) (mov RCX RAX)) (test-equal "copy integer variable" (list (MOV EAX ECX)) (naive-register-allocate (mov i j))) (test-equal "sign-extend when copying signed value to larger variable" (list (MOVSX EAX CX)) (naive-register-allocate (mov i s))) (test-equal "zero-extend when copying unsigned value to a larger variable" (list (MOVZX EAX CX)) (naive-register-allocate (mov i us))) (test-equal "write to smaller memory location" (list (MOV (ptr RAX) CL)) (naive-register-allocate (mov (ptr p) i))) (test-equal "copy to smaller variable" (list (MOV AX CX)) (naive-register-allocate (mov s i))) (test-equal "copy 32 bit integer to signed larger unsigned variable" (list (MOV EAX ECX)) (naive-register-allocate (mov ul ui))) (test-equal "read from larger memory location" (list (MOV AL (ptr RCX))) (naive-register-allocate (mov b (ptr p)))) (test-equal "copy boolean variable" (list (MOV AL CL)) (naive-register-allocate (mov x y))) (test-equal "copy boolean variable to larger integer" (list (MOVZX AX CL)) (naive-register-allocate (mov s x))) (test-equal "use intermediate variable when writing sign-extended value to memory" (list (MOVSX AX CL) (MOV (ptr RDX) AX)) (naive-register-allocate (mov (ptr p) b))) (test-equal "use intermediate variable when writing zero-padded value to memory" (list (MOVZX AX CL) (MOV (ptr RDX) AX)) (naive-register-allocate (mov (ptr p) ub)))) (test-end "generic copy") (test-begin "first argument of command") (let [(a (var )) (b (var ))] (test-equal "get first argument of ADD statement" a (first-argument (ADD a b))) (test-assert "return false if statement is compiled already" (not (first-argument (ADD CX DX))))) (test-end "first argument of command") (test-begin "register blocking") (test-equal "'blocked' represents the specified code segment" (list (MOV ECX 2) (RET)) (get-code (blocked AL (MOV ECX 2) (RET)))) (test-equal "'blocked' stores the register to be blocked" RAX (get-reg (blocked RAX (MOV ECX 2) (RET)))) (test-equal "'blocked' with empty block list has no effect" (list (MOV ECX 2) (RET)) (blocked '() (MOV ECX 2) (RET))) (test-end "register blocking") (test-begin "division and modulo") (test-equal "sign-extend AL, AX, EAX, and RAX" (list (CBW) (CWD) (CDQ) (CQO)) (map sign-extend-ax '(1 2 4 8))) (let [(r (var )) (a (var )) (b (var ))] (test-equal "generate code for 8-bit signed division" (list (MOV AL a) (CBW) (IDIV b) (MOV r AL)) (flatten-code (filter-blocks (div r a b)))) (test-equal "generate code for 8-bit signed remainder" (list (MOV AL a) (CBW) (IDIV b) (MOV AL AH) (MOV r AL)) (flatten-code (filter-blocks (mod r a b)))) (test-eq "block RAX register when dividing" RAX (get-reg (div r a b)))) (let [(r (var )) (a (var )) (b (var ))] (test-equal "generate code for 8-bit unsigned division" (list (MOVZX AX a) (DIV b) (MOV r AL)) (flatten-code (filter-blocks (div r a b))))) (let [(r (var )) (a (var )) (b (var ))] (test-equal "generate code for 16-bit signed division" (list (MOV AX a) (CWD) (IDIV b) (MOV r AX)) (flatten-code (filter-blocks (div r a b)))) (test-eq "16-bit signed division blocks RDX register" RDX (get-reg (car (get-code (div r a b)))))) (let [(r (var )) (a (var )) (b (var ))] (test-equal "generate code for 16-bit unsigned division" (list (MOV AX a) (MOV DX 0) (DIV b) (MOV r AX)) (flatten-code (filter-blocks (div r a b)))) (test-equal "generate code for 16-bit unsigned modulo" (list (MOV AX a) (MOV DX 0) (DIV b) (MOV r DX)) (flatten-code (filter-blocks (mod r a b))))) (test-end "division and modulo") (test-begin "shl and shr") (let [(s (var )) (u (var )) (n (var ))] (test-equal "shl blocks RCX register" RCX (get-reg (shl s n))) (test-equal "shl uses SHL for unsigned input" (list (mov CL n) (SHL u CL)) (filter-blocks (shl u n))) (test-equal "shl uses SAL for signed input" (list (mov CL n) (SAL s CL)) (filter-blocks (shl s n))) (test-equal "shl with one unsigned argument" (list (SHL u)) (shl u)) (test-equal "shl with one signed argument" (list (SAL s)) (shl s)) (test-equal "shr uses SHR for unsigned input" (list (mov CL n) (SHR u CL)) (filter-blocks (shr u n))) (test-equal "shr uses SAR for signed input" (list (mov CL n) (SAR s CL)) (filter-blocks (shr s n))) (test-equal "shr with one unsigned argument" (list (SHR u)) (shr u)) (test-equal "shr with one signed argument" (list (SAR s)) (shr s))) (test-end "shl and shr") (test-begin "boolean operations") (let [(a (var )) (r (var ))] (test-equal "generate code for equal zero" (list (TEST a a) (SETE r)) (test-zero r a)) (test-equal "generate code for non-equal zero" (list (TEST a a) (SETNE r)) (test-non-zero r a))) (test-end "boolean operations") (test-begin "repeat loop") (let [(a (var )) (b (parameter )) (c (var ))] (test-equal "'repeat' loop" (list (SUB RSP 8) (MOV ECX 0) (MOV ESI 0) (CMP ESI EDX) (JNL #x6) (INC ESI) (INC ECX) (JMP #x-a) (ADD RSP 8) (RET)) (resolve-jumps (jit-compile (flatten-code (list (MOV a 0) (repeat 0 b (INC a)) (RET)))))) (test-equal "'repeat' loop with offset" (list (SUB RSP 8) (MOV ECX 0) (MOV ESI 1) (CMP ESI EDX) (JNL #x6) (INC ESI) (INC ECX) (JMP #x-a) (ADD RSP 8) (RET)) (resolve-jumps (jit-compile (flatten-code (list (MOV a 0) (repeat 1 b (INC a)) (RET))))))) (test-end "repeat loop") (test-begin "each-element loop") (let [(p1 (parameter )) (s (parameter )) (p (parameter ))] (test-equal "'each-element' loop" (list (SUB RSP 8) (CMP RAX RCX) (JNL 6) (NOP) (ADD RAX RDX) (JMP -11) (ADD RSP 8) (RET)) (resolve-jumps (jit-compile (flatten-code (list (each-element p p1 s (NOP)) (RET))))))) (test-end "each-element loop") (test-end "aiscm command") aiscm-0.15.1/tests/test_ringbuffer.scm0000644000175000017500000000367713213600051014655 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64)) (test-begin "aiscm ringbuffer") (load-extension "libguile-aiscm-tests" "init_tests") (test-assert "Fetching from empty ring buffer should return no data" (ringbuffer-fetch-empty)) (test-assert "Ring buffer initial size is as specified" (ringbuffer-initial-size)) (test-assert "Adding data to ring buffer sets fill" (ringbuffer-add-data)) (test-assert "Ring buffer should allow fetching stored data" (ringbuffer-store-and-fetch)) (test-assert "Adding more data to ring buffer appends to it" (ringbuffer-store-appends-data)) (test-assert "Do not fetch more than the specified number of bytes" (ringbuffer-fetch-limit)) (test-assert "Fetching from ring buffer advances it" (ringbuffer-fetching-advances)) (test-assert "Storing to ring buffer should be aware of offset" (ringbuffer-storing-respects-offset)) (test-assert "Ring buffer should wrap around" (ringbuffer-wrap-around)) (test-assert "Ringbuffer should grow n size if required" (ringbuffer-grow)) (test-assert "Ringbuffer writing should wrap around" (ringbuffer-wrap-write)) (test-assert "Flushing ring buffer should empty it" (ringbuffer-flushing)) (test-end "aiscm ringbuffer") aiscm-0.15.1/tests/test_loop.scm0000644000175000017500000001073313213600051013464 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm loop) (aiscm element) (aiscm int) (aiscm sequence) (aiscm asm) (aiscm variable) (aiscm expression) (aiscm program)) (test-begin "aiscm loop") (test-begin "1D loop with multiple iterators") (let* [(s (parameter (sequence ))) (t (multi-loop s)) (l (car (loop-details t)))] (test-assert "tensor layer of sequence has an iterator" (is-a? (iterator l) )) (test-eq "loop iterator is a 64 bit integer" (typecode (iterator l))) (test-assert "tensor layer of sequence has an iterator" (is-a? (step l) )) (test-eq "step size is a 64 bit integer" (typecode (step l))) (test-eq "body of trivial tensor is a (scalar) parameter" (class-of (body t))) (test-eq "body of trivial tensor is rebased on iterator" (iterator l) (value (body t))) (test-eq "typecode of unsigned byte tensor is unsigned byte" (typecode l)) (test-eq "typecode of short integer tensor is short integer" (typecode (car (loop-details (multi-loop (parameter (sequence ))))))) (test-equal "stride of tensor is stride of input array" (stride (delegate s)) (stride l)) (test-equal "base of tensor is base pointer of input array" (value s) (base l))) (test-end "1D loop with multiple iterators") (test-begin "2D loop with multiple iterators") (let* [(m (parameter (multiarray 2))) (i (var )) (j (var )) (t (dim j (dim i (get (get m i) j))))] (test-assert "tensor loop preserves inner index" (is-a? (body (multi-loop m)) )) (test-eq "inner index is second index of 2D array" (index (delegate m)) (index (body (multi-loop m)))) (test-eq "inner dimension is second dimension of 2D array" (dimension (delegate m)) (dimension (body (multi-loop m)))) (test-assert "preserve loop details when skipping indices" (is-a? (car (loop-details (multi-loop m))) )) (test-assert "body of 2D tensor drops inner lookup" (is-a? (delegate (body (multi-loop m))) )) (test-assert "tensor loop should preserve 2nd index of transposed array" (is-a? (delegate (body (multi-loop t))) ))) (test-end "2D loop with multiple iterators") (test-begin "zero-dimensional loop") (let [(v (parameter )) (i (var ))] (test-assert "loop code for scalar tensor is empty" (null? (loop-details (multi-loop v)))) (test-eq "body of scalar tensor is itself" v (body (multi-loop v))) (test-eq "scalar tensor ignores indices" v (body (multi-loop v i)))) (test-end "zero-dimensional loop") (test-begin "loop code") (let* [(iterator (var )) (step (var )) (stride (parameter )) (base (var )) (loop-ubyte (make #:typecode #:iterator iterator #:step step #:stride stride #:base base)) (loop-usint (make #:typecode #:iterator iterator #:step step #:stride stride #:base base))] (test-equal "setup of array loop should define increment and initialise pointer" (list (IMUL step (value stride) 1) (MOV iterator base)) (loop-setup loop-ubyte)) (test-equal "setup of array loop adjust the step size according to the array type" (list (IMUL step (value stride) 2) (MOV iterator base)) (loop-setup loop-usint)) (test-equal "a loop increment should increment the loop iterator" (list (ADD iterator step)) (loop-increment loop-ubyte))) (test-end "loop code") (test-end "aiscm loop") aiscm-0.15.1/tests/test_image.scm0000644000175000017500000001024213213600051013570 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-1) (srfi srfi-64) (oop goops) (rnrs bytevectors) (ice-9 binary-ports) (system foreign) (aiscm mem) (aiscm jit) (aiscm element) (aiscm int) (aiscm pointer) (aiscm sequence) (aiscm rgb) (aiscm image)) (test-begin "aiscm image") (define l '((2 3 5 7) (11 13 17 19))) (define c (list (list (rgb 2 3 5) (rgb 7 11 13)) (list (rgb 3 5 7) (rgb 5 7 11)))) (define m (to-array l)) (define mem (value m)) (define img (make #:format 'GRAY #:shape '(8 1) #:mem mem)) (define mjpeg-bytes (call-with-input-file "fixtures/leds.mjpeg" get-bytevector-all #:binary #t)) (define mjpeg-data (make #:size (bytevector-length mjpeg-bytes))) (write-bytes mjpeg-data mjpeg-bytes) (define mjpeg-frame (make #:format 'MJPG #:shape '(320 240) #:mem mjpeg-data)) (test-equal "conversion to BGR" #vu8(2 2 2 3 3 3) (read-bytes (slot-ref (convert-image img 'BGR) 'mem) 6)) (test-equal "shape of scaled image" '(16 2) (shape (convert-image img 'BGRA '(16 2)))) (test-assert "duplicated image should be different" (not (eq? img (duplicate img)))) (test-equal "values of image with scaled height" #vu8(2 3 5 7 11 13 17 19 2 3 5 7 11 13 17 19) (read-bytes (slot-ref (convert-image img 'GRAY '(8 2)) 'mem) 16)) (test-equal "correct application of custom pitches" 2 (bytevector-u8-ref (read-bytes (slot-ref (convert-image img 'GRAY '(8 2) '(0) '(16)) 'mem) 32) 16)) (test-equal "'to-array' should convert the image to a 2D array" '((2 3 5 7 11 13 17 19)) (to-list (to-array img))) (test-equal "'to-array' should convert the image to a colour image" (list (rgb 1 1 1) (rgb 2 2 2) (rgb 3 3 3)) (to-list (crop 3 (project (to-array (convert-image img 'UYVY)))))) (test-equal "'to-array' should take pitches (strides) into account" '(2 2) (to-list (project (roll (to-array (convert-image img 'GRAY '(8 2) '(0) '(16))))))) (test-equal "'to-image' converts to grayscale image" 'GRAY (get-format (to-image m))) (test-assert "'to-image' for an image has no effect" (to-image img)) (test-equal "'to-image' preserves shape of array" '(4 2) (shape (to-image m))) (test-equal "Converting from unsigned byte multiarray to image and back preserves data" l (to-list (to-array (to-image m)))) (test-equal "Conversion to image ensures compacting of pixel lines" #vu8(1 3 2 4) (read-bytes (slot-ref (to-image (roll (arr (1 2) (3 4)))) 'mem) 4)) (test-equal "Converting from integer multiarray to image and back converts to byte data" l (to-list (to-array (to-image (to-array l))))) (test-equal "Convert RGB array to image" c (to-list (to-array (to-image (to-array c))))) (test-equal "Convert integer RGB array to image" c (to-list (to-array (to-image (to-array c))))) (test-eq "Convert RGB symbol to format number and back" 'RGB (format->symbol (symbol->format 'RGB))) (test-eq "Convert I420 symbol to format number and back" 'I420 (format->symbol (symbol->format 'I420))) (test-equal "Convert MJPEG frame to RGB and test a pixel" (rgb 51 58 42) (get (to-array mjpeg-frame) 32 56)) (define target (to-image (arr (0 0 0 0 0 0 0 0)))) (convert-image-from! target (to-image (arr (1 2 3 4 6 7 8 9)))) (test-equal "Write conversion result to a target image" #vu8(1 2 3 4 6 7 8 9) (read-bytes (slot-ref target 'mem) 8)) (test-end "aiscm image") aiscm-0.15.1/tests/test_convolution.scm0000644000175000017500000000552113213600051015071 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (srfi srfi-1) (oop goops) (aiscm convolution) (aiscm element) (aiscm int) (aiscm rgb) (aiscm sequence)) (test-begin "aiscm convolution") (test-begin "1D convolution") (test-equal "convolution with one-element array" '(4 6 10) (to-list (convolve (seq 2 3 5) (seq 2)))) (test-equal "do not read over array boundaries" '(0 0 0) (to-list (convolve (crop 3 (dump 1 (seq 1 0 0 0 1))) (seq 1 2 4)))) (test-equal "convolution with 3-element impulse kernel" '(1 2 3 4 5) (to-list (convolve (seq 1 2 3 4 5) (seq 0 1 0)))) (test-equal "convolution with 32-bit integers" '(1 2 3 4 5) (to-list (convolve (seq 1 2 3 4 5) (seq 0 1 0)))) (test-equal "convolution with 3-element shift-left kernel" '(2 3 0) (to-list (convolve (seq 1 2 3) (seq 1 0 0)))) (test-equal "convolution with 3-element shift-right kernel" '(0 1 2) (to-list (convolve (seq 1 2 3) (seq 0 0 1)))) (test-equal "use stride of data" '(1 2) (to-list (convolve (get (roll (arr (1 0) (2 0))) 0) (seq 1)))) (test-equal "use stride of kernel" '(1 2) (to-list (convolve (seq 0 1) (get (roll (arr (1 0) (2 0))) 0)))) (test-end "1D convolution") (test-begin "convolution with composite values") (test-equal "RGB-scalar convolution" (list (rgb 4 6 10)) (to-list (convolve (seq (rgb 2 3 5)) (seq 2)))) (test-end "convolution with composite values") (test-begin "2D convolution") (test-equal "trivial 2D convolution" '((2 3 5) (7 11 13)) (to-list (convolve (arr (2 3 5) (7 11 13)) (arr (1))))) (test-equal "test impulse in last dimension" '((2 3 5) (7 11 13)) (to-list (convolve (arr (2 3 5) (7 11 13)) (arr (0 1 0))))) (test-equal "test impulse in first dimension" '((2 3) (5 7) (11 13)) (to-list (convolve (arr (2 3) (5 7) (11 13)) (arr (0) (1) (0))))) (test-equal "2D convolution with RGB values" (list (list (rgb 1 2 3))) (to-list (convolve (to-array (list (list (rgb 1 2 3)))) (arr (1))))) (test-end "2D convolution") (test-end "aiscm convolution") aiscm-0.15.1/tests/integration/0000755000175000017500000000000013220531470013355 500000000000000aiscm-0.15.1/tests/integration/xorg_scale_list.scm0000644000175000017500000000030513213600051017152 00000000000000(use-modules (aiscm magick) (aiscm xorg) (aiscm rgb) (aiscm jit)) (define img (read-image "fubk.png")) (show (list (* (rgb 1 0 0) img) (* (rgb 0 1 0) img) (* (rgb 0 0 1) img)) #:shape '(160 120)) aiscm-0.15.1/tests/integration/swap_channels.scm0000644000175000017500000000023413213600051016617 00000000000000(use-modules (aiscm magick) (aiscm rgb)) (define img (read-image "pavillion.jpg")) (write-image (rgb (red img) (blue img) (green img)) "swap-channels.jpg") aiscm-0.15.1/tests/integration/xorg_fullscreen_video.scm0000644000175000017500000000021213213600051020355 00000000000000(use-modules (oop goops) (aiscm v4l2) (aiscm xorg)) (define v (make )) (show (lambda _ (read-image v)) #:fullscreen #t) (destroy v) aiscm-0.15.1/tests/integration/2d_array.scm0000644000175000017500000000031113213600051015471 00000000000000(use-modules (oop goops) (aiscm int) (aiscm sequence)) (make (multiarray 2) #:shape '(6 4)) ;#>>>: ;((21701840 0 0 0 0 0) ; (0 0 0 0 0 0) ; (0 0 0 0 0 0) ; (0 0 0 0 0 0)) aiscm-0.15.1/tests/integration/conway.scm0000644000175000017500000000115113213600051015271 00000000000000(use-modules (aiscm xorg) (aiscm convolution) (aiscm tensor) (aiscm bool) (aiscm int) (aiscm jit) (aiscm sequence) (aiscm operation) (aiscm element)) (define img (fill '(100 60) #f)) (set img '(0 . 3) '(0 . 3) (arr (#f #t #f) (#f #f #t) (#t #t #t))) (set img '(4 . 7) '(50 . 53) (arr (#t #t #t) (#f #f #t) (#f #t #f))) (set img '(27 . 30) 25 #t) (show (lambda (dsp) (let [(neighbours (convolve (to-type img) (arr (1 1 1) (1 0 1) (1 1 1))))] (set! img (tensor (&& (ge neighbours (where img 2 3)) (le neighbours 3))) ) (where img 255 0))) #:fullscreen #t #:io IO-OPENGL) aiscm-0.15.1/tests/integration/callback.scm0000644000175000017500000000024613213600051015531 00000000000000(use-modules (oop goops) (aiscm asm) (aiscm jit) (aiscm int) (aiscm obj)) (define ctx (make )) (define f (jit ctx (list ) +)) (f 1 (/ 2 3)) ; 5/3 aiscm-0.15.1/tests/integration/grab.scm0000644000175000017500000000017013213600051014704 00000000000000(use-modules (oop goops) (aiscm v4l2)) (define v (make )) (read-image v) ; #< YUY2 (640 480)> (destroy v) aiscm-0.15.1/tests/integration/virtual_registers.scm0000644000175000017500000000025313213600051017550 00000000000000(use-modules (oop goops) (aiscm asm) (aiscm jit) (aiscm int)) (define ctx (make )) (define f (jit ctx (list ) (lambda (x y) (+ x y)))) (f 12 34) ; 46 aiscm-0.15.1/tests/integration/xorg_window.scm0000644000175000017500000000076013213600051016344 00000000000000(use-modules (oop goops) (aiscm v4l2) (aiscm xorg)) (define v (make )) (define d (make #:name ":0.0")) (define w (make #:display d #:shape '(640 480) #:io IO-XVIDEO)) (title= w "Test") (define (wait) (while (not (quit? d)) (write-image (read-image v) w) (process-events d)) (quit= d #f)) (show w) (wait) (move w 40 20) (wait) (resize w 320 240) (wait) (move-resize w 60 30 480 360) (wait) (show-fullscreen w) (wait) (show w) (wait) (hide w) (destroy d) (destroy v) aiscm-0.15.1/tests/integration/pts.scm0000644000175000017500000000034013213600051014576 00000000000000(use-modules (aiscm ffmpeg) (aiscm xorg)) ; Creative commons audio-video sync test video https://www.youtube.com/watch?v=GKBKa9Za-FQ (define video (open-ffmpeg-input "av-sync.mp4")) (pts= video 15) (show (read-image video)) aiscm-0.15.1/tests/integration/ffwriteaudio.scm0000644000175000017500000000060013213600051016457 00000000000000(use-modules (oop goops) (aiscm ffmpeg) (aiscm int) (aiscm sequence)) (define samples (to-array (map (lambda (t) (round (* (sin (/ (* t 1000 2 3.1415926) 44100)) 20000))) (iota 441)))) (define output (open-ffmpeg-output (string-append (tmpnam) ".mp3") #:rate 44100 #:typecode #:channels 1)) (for-each (lambda _ (write-audio samples output)) (iota 300)) (destroy output) aiscm-0.15.1/tests/integration/xorg_image_list.scm0000644000175000017500000000026113213600051017146 00000000000000(use-modules (aiscm magick) (aiscm xorg) (aiscm rgb) (aiscm jit)) (define img (read-image "fubk.png")) (show (list (* (rgb 1 0 0) img) (* (rgb 0 1 0) img) (* (rgb 0 0 1) img))) aiscm-0.15.1/tests/integration/xorg_scale_video.scm0000644000175000017500000000021513213600051017305 00000000000000(use-modules (oop goops) (aiscm v4l2) (aiscm xorg)) (define v (make )) (show (lambda _ (read-image v)) #:shape '(768 576)) (destroy v) aiscm-0.15.1/tests/integration/2d_matching.scm0000644000175000017500000000023313213600051016150 00000000000000(use-modules (aiscm sequence)) (arr ((1 2) (3 4)) ((5 6) (7 8))) ;#>>>>: ;(((1 2) ; (3 4)) ; ((5 6) ; (7 8))) aiscm-0.15.1/tests/integration/Makefile.in0000644000175000017500000003770213220460253015353 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/integration ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_opengl.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/guile.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(noinst_DATA) am__extra_recursive_targets = bench-recursive recheck-recursive \ integration-recursive reintegration-recursive am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVCODEC_CFLAGS = @AVCODEC_CFLAGS@ AVCODEC_LIBS = @AVCODEC_LIBS@ AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@ AVFORMAT_LIBS = @AVFORMAT_LIBS@ AVRESAMPLE_CFLAGS = @AVRESAMPLE_CFLAGS@ AVRESAMPLE_LIBS = @AVRESAMPLE_LIBS@ AVUTIL_CFLAGS = @AVUTIL_CFLAGS@ AVUTIL_LIBS = @AVUTIL_LIBS@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ GUILE = @GUILE@ GUILE_CACHE = @GUILE_CACHE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_EFFECTIVE_VERSION = @GUILE_EFFECTIVE_VERSION@ GUILE_EXT = @GUILE_EXT@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ GUILE_LIBS = @GUILE_LIBS@ GUILE_LTLIBS = @GUILE_LTLIBS@ GUILE_SITE = @GUILE_SITE@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAGICK_CFLAGS = @MAGICK_CFLAGS@ MAGICK_LIBS = @MAGICK_LIBS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MJPEG_CFLAGS = @MJPEG_CFLAGS@ MJPEG_LIBS = @MJPEG_LIBS@ MKDIR_P = @MKDIR_P@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWRESAMPLE_CFLAGS = @SWRESAMPLE_CFLAGS@ SWRESAMPLE_LIBS = @SWRESAMPLE_LIBS@ SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ SWSCALE_LIBS = @SWSCALE_LIBS@ TOUCH = @TOUCH@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUFFIXES = .scm .tmp TESTS_ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/aiscm/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 SCM_LOG_COMPILE = $(GUILE) -L $(top_builddir) -L $(srcdir) INTEGRATION_RUN = $(TESTS_ENVIRONMENT) $(SCM_LOG_COMPILE) INTEGRATION_TESTS = 2d_array.scm 2d_matching.scm array_shape.scm asm.scm byte_sequence.scm \ camera_mode.scm grab.scm integer_type.scm jmp.scm pulse_in.scm pulse_out.scm \ read_image.scm roll_image.scm roll_unroll.scm swap_channels.scm typed_sequence.scm \ type_matching.scm virtual_arrays.scm virtual_registers.scm write_image.scm \ xorg_image_list.scm xorg_video_list.scm xorg_video.scm xorg_window.scm \ crop_dump.scm crop_2d.scm to_list.scm complex_array.scm unary_ops.scm \ boolean_array.scm invert.scm scalars.scm division.scm modulo.scm binary.scm \ ffvideo.scm ffaudio.scm ffplay.scm pts.scm ffstream.scm ffwritevideo.scm \ ffwriteaudio.scm ffwrite.scm callback.scm object_array.scm tensors.scm \ convolution_1d.scm convolution_2d.scm roberts_cross.scm sobel.scm box_filter.scm \ conway.scm show_gray.scm sharpen.scm xorg_scale.scm xorg_scale_video.scm \ xorg_scale_image.scm xorg_scale_list.scm xorg_fullscreen.scm xorg_fullscreen_video.scm \ xorg_fullscreen_test.scm EXTRA_DIST = $(INTEGRATION_TESTS) pavillion.jpg star-ferry.jpg noinst_DATA = fubk.png av-sync.mp4 test.mp3 INTEGRATION_TEST_TARGETS = $(addsuffix .tmp, $(basename $(INTEGRATION_TESTS))) CLEANFILES = *.tmp av-sync.mp4 fubk.png pattern.png swap-channels.jpg rolled.jpg cropped.jpg crop2d.jpg inverted.jpg \ divided.jpg modulo.jpg test.mp3 roberts-cross.jpg sobel.jpg box-filter.jpg sharpen.jpg MAINTAINERCLEANFILES = Makefile.in all: all-am .SUFFIXES: .SUFFIXES: .scm .tmp $(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 tests/integration/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/integration/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 bench-local: recheck-local: integration-local: reintegration-local: 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 check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) bench: bench-am bench-am: bench-local clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: integration: integration-am integration-am: integration-local maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: recheck: recheck-am recheck-am: recheck-local reintegration: reintegration-am reintegration-am: reintegration-local uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am bench-am bench-local check check-am clean \ clean-generic clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs integration-am integration-local \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck-am recheck-local reintegration-am reintegration-local \ tags-am uninstall uninstall-am .PRECIOUS: Makefile fubk.png: ../fixtures/fubk.png $(LN_S) $< $@ av-sync.mp4: ../fixtures/av-sync.mp4 $(LN_S) $< $@ test.mp3: ../fixtures/test.mp3 $(LN_S) $< $@ .scm.tmp: @echo Running integration test $< ... $(INTEGRATION_RUN) $< $(TOUCH) $@ @echo done. integration-local: rm -f $(INTEGRATION_TEST_TARGETS) $(MAKE) $(AM_MAKEFLAGS) reintegration reintegration-local: $(INTEGRATION_TEST_TARGETS) # 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: aiscm-0.15.1/tests/integration/convolution_2d.scm0000644000175000017500000000033713213600051016742 00000000000000(use-modules (aiscm sequence) (aiscm convolution)) (convolve (arr (0 0 0 0 0) (0 0 1 0 0) (0 0 0 0 0)) (arr (-1 0 1) (-2 0 2) (-1 0 1))) ;#>>>: ;((0 -1 0 1 0) ; (0 -2 0 2 0) ; (0 -1 0 1 0)) aiscm-0.15.1/tests/integration/division.scm0000644000175000017500000000022013213600051015611 00000000000000(use-modules (aiscm magick) (aiscm rgb) (aiscm sequence) (aiscm jit)) (write-image (/ (read-image "star-ferry.jpg") (rgb 1 1 2)) "divided.jpg") aiscm-0.15.1/tests/integration/Makefile.am0000644000175000017500000000417213213600051015327 00000000000000SUFFIXES = .scm .tmp TESTS_ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/aiscm/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 SCM_LOG_COMPILE = $(GUILE) -L $(top_builddir) -L $(srcdir) INTEGRATION_RUN = $(TESTS_ENVIRONMENT) $(SCM_LOG_COMPILE) INTEGRATION_TESTS = 2d_array.scm 2d_matching.scm array_shape.scm asm.scm byte_sequence.scm \ camera_mode.scm grab.scm integer_type.scm jmp.scm pulse_in.scm pulse_out.scm \ read_image.scm roll_image.scm roll_unroll.scm swap_channels.scm typed_sequence.scm \ type_matching.scm virtual_arrays.scm virtual_registers.scm write_image.scm \ xorg_image_list.scm xorg_video_list.scm xorg_video.scm xorg_window.scm \ crop_dump.scm crop_2d.scm to_list.scm complex_array.scm unary_ops.scm \ boolean_array.scm invert.scm scalars.scm division.scm modulo.scm binary.scm \ ffvideo.scm ffaudio.scm ffplay.scm pts.scm ffstream.scm ffwritevideo.scm \ ffwriteaudio.scm ffwrite.scm callback.scm object_array.scm tensors.scm \ convolution_1d.scm convolution_2d.scm roberts_cross.scm sobel.scm box_filter.scm \ conway.scm show_gray.scm sharpen.scm xorg_scale.scm xorg_scale_video.scm \ xorg_scale_image.scm xorg_scale_list.scm xorg_fullscreen.scm xorg_fullscreen_video.scm \ xorg_fullscreen_test.scm EXTRA_DIST = $(INTEGRATION_TESTS) pavillion.jpg star-ferry.jpg noinst_DATA = fubk.png av-sync.mp4 test.mp3 fubk.png: ../fixtures/fubk.png $(LN_S) $< $@ av-sync.mp4: ../fixtures/av-sync.mp4 $(LN_S) $< $@ test.mp3: ../fixtures/test.mp3 $(LN_S) $< $@ INTEGRATION_TEST_TARGETS = $(addsuffix .tmp, $(basename $(INTEGRATION_TESTS))) .scm.tmp: @echo Running integration test $< ... $(INTEGRATION_RUN) $< $(TOUCH) $@ @echo done. integration-local: rm -f $(INTEGRATION_TEST_TARGETS) $(MAKE) $(AM_MAKEFLAGS) reintegration reintegration-local: $(INTEGRATION_TEST_TARGETS) CLEANFILES = *.tmp av-sync.mp4 fubk.png pattern.png swap-channels.jpg rolled.jpg cropped.jpg crop2d.jpg inverted.jpg \ divided.jpg modulo.jpg test.mp3 roberts-cross.jpg sobel.jpg box-filter.jpg sharpen.jpg MAINTAINERCLEANFILES = Makefile.in aiscm-0.15.1/tests/integration/boolean_array.scm0000644000175000017500000000043713213600051016614 00000000000000(use-modules (aiscm sequence) (aiscm int) (aiscm bool) (aiscm jit)) (define b (seq #f #f #t #t #f #t)) b ;#>: ;(#f #f #t #t #f #t) (define u (to-type b)) u ;#>>: ;(0 0 1 1 0 1) (to-type u) u ;#>: ;(#f #f #t #t #f #t) aiscm-0.15.1/tests/integration/ffaudio.scm0000644000175000017500000000044413213600051015412 00000000000000(use-modules (oop goops) (aiscm ffmpeg) (aiscm pulse)) (define audio (open-ffmpeg-input "test.mp3")) (define output (make #:rate (rate audio) #:channels (channels audio) #:typecode (typecode audio))) (write-audio (lambda _ (read-audio audio (rate audio))) output) (drain output) aiscm-0.15.1/tests/integration/byte_sequence.scm0000644000175000017500000000031713213600051016627 00000000000000(use-modules (oop goops) (aiscm int) (aiscm sequence)) (make (sequence ) #:size 100) ;#>>: ;(128 24 172 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...) aiscm-0.15.1/tests/integration/xorg_fullscreen_test.scm0000644000175000017500000000061313213600051020233 00000000000000(use-modules (oop goops) (aiscm v4l2) (aiscm xorg)) (define v (make )) (define d (make #:name ":0.0")) (define w (make #:display d #:shape '(640 480) #:io IO-XVIDEO)) (title= w "Test") (define (wait) (while (not (quit? d)) (write-image (read-image v) w) (process-events d)) (quit= d #f)) (show-fullscreen w) (wait) (show w) (wait) (hide w) (destroy d) (destroy v) aiscm-0.15.1/tests/integration/crop_2d.scm0000644000175000017500000000021013213600051015314 00000000000000(use-modules (aiscm magick) (aiscm sequence)) (write-image (crop '(250 200) (dump '(27 20) (read-image "pavillion.jpg"))) "crop2d.jpg") aiscm-0.15.1/tests/integration/roll_image.scm0000644000175000017500000000017613213600051016111 00000000000000(use-modules (aiscm magick) (aiscm sequence)) (define img (read-image "pavillion.jpg")) (write-image (roll img) "rolled.jpg") aiscm-0.15.1/tests/integration/roberts_cross.scm0000644000175000017500000000072713213600051016672 00000000000000(use-modules (aiscm magick) (aiscm convolution) (aiscm tensor) (aiscm sequence) (aiscm image) (aiscm element) (aiscm int)) (define (to-gray img) (to-array (convert-image (to-image img) 'GRAY))) (define (norm x y) (tensor (/ (+ (abs x) (abs y)) 2))) (define (roberts-cross img) (/ (norm (convolve img (arr (+1 0) ( 0 -1))) (convolve img (arr ( 0 +1) (-1 0)))) 2)) (write-image (to-type (roberts-cross (to-gray (read-image "star-ferry.jpg")))) "roberts-cross.jpg") aiscm-0.15.1/tests/integration/read_image.scm0000644000175000017500000000011113213600051016041 00000000000000(use-modules (aiscm magick) (aiscm xorg)) (show (read-image "fubk.png")) aiscm-0.15.1/tests/integration/pavillion.jpg0000644000175000017500000011514713213600051015777 00000000000000JFIFHHExifII*  (1 2ivDigital StillCameraCAMERA8MP-9Q6 HHGIMP 2.8.142016:06:16 12:36:21""'20220   |d0100@ BXP#   P 2008:07:08 18:20:512008:07:08 18:20:51yd  bbZP#\  N@@NOVsfWD<|$/>cix ddR980100(HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( (qMC FwF:d6`sva34:ҙQ`ʹUvzk͚~M\b&7T;wc5L @ёU<zFQr1ܹR5MN9s@qi1\yFeznALkz@LYqZ*Gs(+|MwjE3)g]*qOU=pkOe2 4[c(V `kQ3kQ$IzLcy/:Mby;Fɶdq4 Q}F1Bڔia^G'n* s+{Pv`ysV 'ZĞfȗWQ-,VO6g0}rܹ}.{rkKR +뎕۟T'N2iys6fA$cV2Nìed>1'g_OʭָM U5d[YjQ"ڰ\|GkmG-(i,B|Tid"U4zpKn9Z'q%+`)g5zFhW gek=ğgV|W2DcaȢXhE޽TZ"K7,j0NzjIw]Ct'5]I X`qۚ ME0p4fEkp*=)B)V%N cԓTm`Rg#zQyY-Ś++9T%J:FmP_:87 pFx<*#nlz+$t$Vʮz Ȑ` R9,D`< r 3*%U R$˒p C47ܧQ0sl nBp*V' Li*nOI0lzP}UD?#guj[)_vXG|THZg&b IYcz#n=B$F3ok.8#ڭC"& G9BNi#GRH$Ԭ!|8ApH-` Cc R33$|ӸXGp֡02O^X;˪V}ջ`Jwr ʪs֤1,#1|{VŪP@KNi .遏V&LJ,lAUqN3Nig!HjV 3O#]t0:`,aAb^I}3bj]X/b1MjIcEmE&wc?fΠOnkG~znrăCt)?`xRb4oi6T)-@hm#Mt-e-p{Y{"o$9 =ƠVt`0XK!=i=WJI/qld6 O8ym p3G6llzPQge4[siLE!{@e,pjD3 Þ;Ӄ+6'mFy6eS?Jǝ'vaَjB'%wa{(Hl#l sǹn. ɘGqWc- A0=VB EDy| 2?К;^&1ֽU+zǎ0â*Ň%E5q8y]V<) ˷ j+lgX#wSZW4rq'WK}8gzy#' 9aM5w@^D]BމnP0?#y1 UL_fc^89"/.9fS*#t엚T <8ګh͙W5fybD&.T34\t9bg巀:򲒥sְu#a19#gM=7xJNYR?߂rX8Șj#$T#݌rj,|ʒrA=jH& H"0F=Pp;iNM1֤/u'40xt9lm'A 0*z;=*0+1 ӧ8 ÑkH+0ϠXjZ*Yu8.C|Hc*9oYZCjsn@A?(I֝\m6HԕTmN*H^e&D(OaUӘ#3&@1VOsX6$C9Ҋz˨+ @TȦq޵:_hJv=RnU,!]<<*7"BykGOG=dU^LԥN10ƪ*iX4ـ{AyI'֮ly9c;S̿B @rd#5KqzEpN}0hg&>c5ٖ\89x $p6J0r6ʫ\-i h G]G4])2J޼ W7p0?ʀυ BR;%q3H0vggx+XzQ:60qVKFey1ׅRE';FOUrw{92@Ri2/֪YHvq{vԢ^o [ULe͜wTnБIw}X_1ǣ~b]fF(Glz}@(CI *I5'4^2=ki t0%ݤvJYW`U[3^]6yB?L{i]Z$j6S;w8YXX߹԰=ѼSpA`bc .}c,Dc )nlCs}j3.%ғPy{Q1Ƕ);?: !c㞴7`=B9$v.hO%9>Uj܊u5`:ZrpOtX@Z?}+fVC.Ad*SͰasN_zwEY Digital StillCamera CAMERA 8MP-9Q6 Oben links 72 72 Zoll Ver 1.02 2008:07:08 18:20:51 Co-sited JPEG-Kompression Oben links 72 72 Zoll Co-sited 1/80 Sek. f/2,8 Manuell 50 Exif-Version 2.2 2008:07:08 18:20:51 2008:07:08 18:20:51 Y Cb Cr - 6,33 EV (1/80 Sek.) 3,00 EV (f/2,8) -2,00 EV 3,10 EV (f/2,9) Punkt Bewölkung 100 Byte unbekannte Daten FlashPix-Version 1.0 sRGB 3264 2448 DSC Normale Verarbeitung Manuelle Belichtung Manueller Weißabgleich 1,00 35 Standard Normal Normal Normal Normal Fernansicht R98 0100 C     C  @!  ກ! @$ +Hp py*Eh&Ǣ\[ @$ @rZ| ݙ#MBӜQhHCH CR-ƲEQ="i2[SQr7tjEu.iA~|-{,Ɲq5Q4J:׷+arƷ-6?>N QWg@cY&*W{濟}q8TŹMf^fٗL[ej"=<1b@Ӄ#\DLjOKXM/;+ ~` vIono5l caa,K99?ʱsuT;³"~~:0syy2gѫǦgĐպ@qk8ڦmǭ{ aYJl@fE<3!TA*Q4-El1t"~~т kzK 8bGcCzMvhX%e.^  *5V [^TrkAg!Sk3ؼwKo;|խjki "4.UYX =өmo ^wyTxAA1Tč4@ SdlJ y!]f)Y}꽇dT2-nы 8gMV{3b:hД4kf4v>xM^z !( # v&ª/.c顮F*|1\Ӻ(,kPV"wGyFǜhm`h$f`#vtc=W?&'`hlXu6dzGDLO9WzMj2y͗V3ĖgEYQ GSmV-7d5j؜\\>/=##NwMCr35L`Qi 6v-e xC֒i1FDp_^ RcQyHD HInC.9MЈ^W$uYyVyʈBZB^J2$ = X2 iC҅] |D$KOGSghd"Mm C8+a \He0ҳ;6E2 &.$N[$b9(!2x  dE` nj+F0!"# $1@2%03w<"/,#nK?i,3<{O<=̗g ߏ'?qnidF#,~#=d3ݞµ|c>ϙM/yTSka}d N|d:;1(FsX"9HKڡ.p%# ߷ٞdy}SO%ܖ#57:t~چ3pg-ys3a{7Y_b>q"W9o`PDdrɝ_Ϝ-N篦gkmy]F@gY㛮c8_ b]a⾻~q1}wG־!9U^swͺOV-J̧ܽ#m?Y!FD ڧżȂ,ovgggc8dyO]gʂaDKD["|_M07}=%ƪXG'q}~-̷6&dMW` 쬃d1lUB7w}ۂegmU4{b \{a1>{Ksg"qݏ.U;T?Vw$·/Kl1WQe*92O0mcFelllU2L=]Zv4^8?%dR1"Fԭ_w|1 о=A2*E +.7z(·/S6}fr+fйK^ƹ r| VU헾ZAo%ougod-k%ψ#sU>n)2]/y`<͕t@gڔB&C&P]lN,2ڻr t/k&/5uY6Ҵj1~N߯dz{Tmu򵨇emӤISO`_ݩE f |ܳY~Oȹ #y=lLk`2ǪmXNʔr"e7ke0+:]r]Zo{J;=ABm7tkj_>A3vC]: kr( e$͎ u::*,#QE[U]V:UCrim8M5-U [Y.Z.b0(E["9Q 'z*_#X+ RwdK7e90OĈ;:0!Co^έJ;1l͛;Vl>jx5I9 E4}=+5\?ǫiLNY,),#JS22* O3QW$,bvёad )>W*iu^^?=Va(/G?qYggVzsnS;#%t]믘sȲrO*aMc=,yx1 )O՞1Yt\!ƛ"JapvYg;:q`"PR͜ۓB6ם|]Yb^"TH3D~0|C%s~gbs{%*8Z~ڠp}hfƌi{Hc|Q^ovSkNʽ}=jKK_/=C#sUʬ= T43Z ۮ{elbF?}v9Eڪ`ղ+yTk`R8d' O(zWA&cjW tͮca7J/+Rxu)f`zWcF!7ѱ?;qv׍j.M8ac=VRZWvnMA6gI7fSz`lli"*73bv u6VdbX,q $òwU HpN2p:<{H&ZsЖ/S؃V ):"jk϶'^V͚l޺ckw{Ge-zxvԮ29gGFV65ٸ;e:3Խ͊m-I,JIU9Ȁ Nq0!XB?ޡ*,W|$qY-Kc5Nlg_VudMRݙ3aav U=ɒa86^QS13ǦCO"lLH=s3!$, uy؂Cݑ{4π=Q}vEJw䆵o<琴MGwg 4m k |D=Kf|jZQ3緈-@)'2A*d#{]L:#?9GS \A.rc)DuP5S@rJB^)Q6zQOqRO [Ba t4 !h=\@]\>ō//yXhձY -m07Vk*xkxDŽ̀ t0?%ܭX;1-(HsbKT|UO"ZjițJ?9r>s!s!!?.o[:B֕dlXi~\)j YVji1% )M/hzٽ9S^][ICX{fb>aerk7(ޫ_F>vUR4V>1ul&Ұ1sjR7K#imtAV,#z a+Hc/cĦ^׉*Z a}7d=cd>l"|rR$v[%kY~ௌ*BxC8Ž0Y*sSZR,Ii-UC/r6\Wk^VFdb=>ȕǐN&;rg͓l.i68q0ӪN3eC]jeR;+u}6r-[ȵn3\ȷs"̛c+M*k֊ÄZN q3E=314wMg}{;Cvr궥ze6\YgYg`[?nOY9Ȉ2;-b羋|zuR2]}W7lȁd IuCY3 9UIWoî#ٻN&4_clia[Y+ b|j]u @djQΆY+xxLR6>1av,$p)#,fuh`,Iף L1тdXל o,-^1NZ3]h.ڱ{M⽕dح%$_nx!K-! 01"AQ#2Baq3@R?b#!Xi",X//ٻ]y%abE(,^K>Wd+z{tD|\JąlJ%~Kr~?ˬ&ɤ[Ӟ%M,myhHjF{eg=r4:x=~F[r~ )Wp7\!t1I4%cIφ&'-}F{F֤ 'O/#E驉ZN,5#5KBFɥRrč]D#ddxtGlkcyRCķ _$~}O [VŊΤSWi~L-}Hf}:5mUMo47x]!mUL!R+~auiF2#>{/#~qCbV9xڞb^8dp9GB=,k~ОovHN"T7Fet.ÍpX~]/sCbG}I'EE449WVpQG.!1A "02Q#3aBR?FOdb(}W#E[#%ɴP21Kùlq=( {%HZVI"a~6$Zf d&6[D,J~Ew=J7s,ro FN;w2qDun3sdJNuKI|v^q:FNU1Ǜ&8";Iv^F}JNRK9 d&.3J4 g.q%$؄qhdZȝ,Ip.6]VvN$+]t~HDVO3ԯfbԺt%bȆ]ыh2dty^D.GȻoW da_'u*,vb)2I0γOIn&F<~1>7=h<3N<QiMв4|WwkC;h$AI:{Y>cΝ\3Z:\3LOE?Nɥbaky?$8/Zut lr8b6<#҄bf3C.-qupE*GDepˎ)1bLI{sE*4ONh.Hce i=hErdVjʾY;Cv1?eZRQCdr}6vb'E-YO%*_v[6ڻ2&aOP␢l 6QM5|MD=G !1"AQa2q#3BRbCr$4 @PS0?x}M\Q`q6BؕiZei5Zw(Nc$~J4}j|!=5j]囖NZ΢Ρ_Nr*+U *'-)``eW9ꙃ  RҤM˼WB)Wke-ST_ĝrjnH+ڠ\S([[Y0}glѢ Oo?4T 2 N {5/њ#.pdfs֟Wy`z6-0kGW_]KA[>ϠXگN"9id5.HDxkSQ+>e_ Χ}i_>k:ȩsW;.@u&?vy"HDD,&5pQ|î?RdFTϴU~Y闤mX8|6Ǐ/45CV:9G흻h(Ϗ%].pތ ]ZīQ˙N`%ܛНT9-0~_v P 4xGK Dyvg[RO)y5Y]ⷕn\sEikzd&:JfVPLc"ʃ}[Q7F]-BX`s*W܉[%f!dsiM~վyu[3w ǾIl}Fuz/ V#knb~^,9^UJbk9U*Av܆(:D\NC0ޯ@ &/#>Cvc6;|Pe[qܪw֍r;lK|4qNþGw"1y,6- 9i#V{TJ5S(d#,.gj{\Ug6 5@e*Y/c@%񒺤z/VcDp0ʹw溥"ƞ!CSiVZw†1k{۠Gufȭm8%o0 t(E^2o쌕, J UZoa:CPi9ThⱏHo[˧ڻ[vƊߺ9LYQ.#fSo9xOw 4`mMWE\;*8]:,T`nt`k4,YPBʌu fJs&xjb5:Z>fyuF9puuYz iCCucaq;)OuTjԢ:]d$XNs)hDRaL/cgn233?<ֈQpy_dJF@u? 1RX̲evhvn ;ɾf{b{]Z&n+eIꯀ8)P`PiD-4%@Hv`~MԙsmlWCv"-lTq Y|Úߢ>w/T/wSu͐Ѣ̀`p5Bfx6W#S.pV2T 1ӧl@5`sLUևm0Xz%| 5Q~6t)d䮤}e5'7Nmp&G]NJEϠrҤ74vƫdr+a98r).)ixR5KLnZ8##QdKEћSOzjhn}U1\&iB]:5M\ÙMs6ܨM碻\79} Knkc[xKytS%+%(DxMǫx-3L('[.&DO$?[&.ȭ\ D\]@Q @V: LjÉNrY'ptp 6 DsLƌ;SsduDfw@GDK7'+rhw"] 45|! xiZyu7SA# AW[z!UÂ}ZMWhEjMF3(m94ApTkKi:BڲKOZ ėkh"SIPҴgɾ)>#hj-e:xʖeHSb(0T5ajUB0oD{0[:f!2yl~W>IbO%R{t`eJvNf32OIpO[z/vW @}Q?:m1up'8m6/d40iyQ:פK$"PD_ǃT53F7ub`MEA#rM|MQcy&@fajӥN`}sLsUVPc) 2]N츠 \c5kAo9كqt0tFHEϊC B^4V-t?OLFN}d>oUvti.zo?@:Xzl"<=x&~`qAZi4h|&V=a\:BnڴZZ\Ox&lrA[xj3h*1*5Rm-Vhm+pMpl7sV%p3P1/~Kt@ NԓǪ;j4k40=mb!_ ڞv1U| Dl8 A'Ꞩ )gM|suq( tWyw%5ŶfCoږُ4<` e#Ey[ )-#Kխx"׊Ğ,ڡij7cMI[YUZ+y^2[ÊtݘWV!+G [NK+Y>ro ɬ)f?׳O֤#lYRt ڕˊ @WUHARwTJ2'G<'*G+S+Z 6oKB5obdSVs0iRzT880I[nea}|OkWS$x,kڕJ@W^{_Ej1OȫzjW#p[\}#Q[sFe>`+^âPG=s5wUb.+ '5͟R#?ue^ ԗ~J si?DYz5Fu?ã!o]QoPD*+6S(-oWuoa%,~>AeZ( d]MMrGo@p9vy[gȈiZx8pSF>r3OGF0s&|תv^6)TsڏܜztWmnj#9vCpt< 6 7&(.o+t^k%({s^xr{VbzVάwt OYߥi^ïx!HSHTy!8_|F;mr_NCZi jFo C[ߒ׊zc\)׍c;t2ߜQ|p)!1AQaq @0?!?c,\¿G̸V_\ '_m؀3Dwn˸=̏O+ z.2hFў)(⎒e$"**bz!qI}JPbaI?ƒg虷+˅0)@ 70Z1ؙf2贺B~a#U:A1E&j+Y}Q%k7(֖uK I?+8P>s{1c0oKpv0~hA*e3SarW;6.0 >0CxcߤC0JUGZ ,± &!]@N/P|šܟ)t3 -I87eRo`oQ 8'ɸd7Q}fyC5k]bL%ֲ7K\.24Iv Q蚑k'5kj?#RҌtͣf+']qKMKeS5 i3a٦)]Л& <6E;q/,@fg#k"% 8yqLl˸xbY?HU0q:e3vT`D=_N_15YWy.#< Y]puZ˖0 o񖽦7Vޙfw,%~4<>&P-\j?On/Ȩɫ;(& u 8O`(h0vүo0Xx|[z ZI)忕Ir1}#'.[;Q D+P[<,ll48g@Ɇ./1;uOz N=J/^@o7lv@Xtwɦh%ڠX*ǎEyy]ܸpVNV%+3~r \5iEExz"b0K+1BgAO> RYQ3wY`l" 5nW/yxnY6ЦxkI4!!lOP$ĥ*cq94|/U*m/ΎW^bn=]@GCe5U:P.-2d{WMF]ѸJ6v)dec"Aq"I>9 >1DϦۄfZ,.+굖_{ȇ`S .3^> 0x4рPGXUԢ.ljM{z/pV/ilhk(|3J}a[.`= {?dʠ:^ꥂ1^H =<^%KA:ScMNS)fzϤs|A݁f`-f9ȥ JZDH _CkDxAJ)7[gg[L=[)6wd вZ,\˺-s7Qao04QsEU*3bK=5}BŚQه>ZD{Fܬ6o>="!zUo1; by[dPѦ$e3(4~nF^rs^,;aSAu/$ hz%o=U +VqE1n))<-1ߣǤ+ʀY^R<v3R ṋML.H/^WS 3۰aK ?XhuG"g릿G&i2Ot_0KM;4*۞`|.AY',3{3xuCPB*@ nFoa9GrÝ8"-WGm[+ڳUXt;X|?n|^r`0FS}%b<,!|&lc R _^L&$v͗ܤ,\삠G ('_TmLiS/:e9Wo!]x2U"HnH=tiXןTgp@Z%lfAK<h]/kgȇ(X0"ﭭw~K!mޢڀQ=c'Ȟ6;wSH8\BKO~>/-ܳ'8 _^T-+8 KvYGN/X 7yak)xZ{gQ]/p-]b>uEw'aofz=QR M+L(\Z̭W@6,Z}verɫMS9c,%}LD5B5M zzj pDl*}/5˭@w7 uYv5 e[bqt[ *_/3N-ҫwf.^]X"RZnDu2`Bb>^DT* .t'T|Gb-E_kW}rI\2~&3K@J3/ԔAUs+̻OB8e_V'<[ERgN֜z; q/NĖVMh%H1RߴHnX Crfn1C _CMc>㗧2 jj7hDr=)#XMV՟a9W=d 2%4C2K49hb^PJ@WKsPdgNeɠxS+nF4Nc&ɛ}tt[?|car6^ и(9&g̾W;-˃-6rULb!d їL44PJ!vlzz4= mLPaWyQHQטx,yuC.j[V0-I'+[vo ӈQ>XP.b9˞qZ@0To,Z)]85yg1ʩ`-&n,X5޸o s$=" rpbytCs VϬ`_h)w`$YRв-Rтc|L|ƔIdȵ)UM ;0mAw2.V?ۂdBJ/SL=@sjJzpwMd+nTE@S(tPLS%΃/58RШJ(76G|i[X4Sd(fccPo`Eh% >4H $F4_s[W#} jQd0o,n ae b!ľy|@ y T\p;1)otwuK9|Ao>q5 ^a q"|WkG\|+DQ̓T& `BQXX1-)8匢355~f +w*R*RˬY >H8^!h{="2|_rHBQVtD /1 j{0Pq$?h~e~К倳冒xKv$La n0mvKt+Z9^{(Q=߈˵5Nە "u~)s&TE~? emfb)W99ug#{~uw]nѽ0hP pԪ}:Aיn@1B~B]Oр~-~8.{FsXNJ uc%s)3狰;`Wd\ *rC3yqڴD.2b2lyFn8ȶzLndwWO)C}fLNSU@w61̺ w]cҦ9!\-e`-n*>7+38-K8 PfbCva[( T-//-^Z)57Vz-[cD5GcWX<ˆX&%(I_u}ָ-j#Z)* ti1Te3 Y!\ "(ϡL\i+n8r05p̊ *$|t Ԝ;էDLtU.hdlO59 ' ,O_*]KH }ٶv@ȵRݨA [u!UE>8W\0|R𐟜Nd!:WWڻ emxer5_ښ5|ʐ/v׼B (!$T>Ha@ÔXJU-׉[( ǛUz1\iWA*u%2ǣQ̩t/qꚳQm`K^t4ݸe/s/[5xDn5]522 [~Ju-付eUb%!l![enU 3YՔ:b i )8ܳ>(sf7(X9|GҘB>8u/ ZT!MϺ`p__įߴoY_l*7YA_7ISzpjv wz{JiFTjKb5RNt7XjqWD,gK%UHgA?0Y5`3*jQ5O(=J>c"0dĸDdKg;G6{ަ-LP&]*#W+|M|%o` $W ]^ OI,QgqRQ]}$Ɓ^@:ǺߨK2DD#hKu?kmDP~- DQ*\1+!e˪Pңƨ\G J3 #jB(W +&ED#j jo3VG1PeۂU+\zK);Z IV򉍎3^m+A |hS EVRSx#,Ax/N4f w-q;".Q]kPQ+, xuU O+.|)|x/xf {pXЭp(bRn*FLFRM^QKֿ)!1AQaq 0@?80rbf Eq.W5 'ֱ~'bOTN:7#"lツ(}Hr<&k]Ö,8pc<N1a0PYJ8R,J 80֦zaBb0X0MNM_(5>5 U;;ytdU*XKJt\P=Sɀ>p`竏c><0rbp0Gp:Q!+O9R Ox1 0-U=EAr[H 8$Vwyf8)uCx5_Lm0!Ix$p* W+ŏ3:*"sfWȴ@<`snTx8>*pI.= ܁:!:C}bED{keKcZ}6 i񉬶3kwsH&J` DȠa0PX ho@P!D̓ 4~2`~7bj89 ,-)_~qC|k >$o!1 Syx3w1j'slaȩe)Ǽ&U~6S]vW.p㓝2=6=ji-3!e4 f'mEYe*{|a:9W!a LAEh"A{7a~VGy͸z3s(5Q7n\4.7N#{J{qBri4l},jF,Y h!yT2}$$w #]0j 3[GkSMK> `Y0UBl(BgpH~G)$M0 QJfPӿY(%?x=zsXJe@wRA|uT qȀzKuޯƏJAfyG/ !:!уZ9F]iXdWܾlh8Af2Q3^u0D }hQA1F#^F:EN Mv +}8=w6ʑANCƢ` "b~ȳmh[=b;&3˕9Q <wxʃ@Qu(cJ^ UAq^=a9,{٭R W>4]V}a%Ƨ9Ⓜhؾ2 GxCv2ěA8=H몠%oxf핢ѻj"EX20z!SuD;1{Jn&Uj᫱#XI#qus;4df٥yab }aR8W& Z28xx;x11I9rD+7KG B@,@G#*un8C@ YM\I'x8Ã2aޘ6Txw]b ёt(Qxd, Vxxr44q1PY$/$! (B hX4RJ']r`%!|ݢT \1 []4 <}b6ࡵс%ºDKKȪk1r-KNoo4ܠG,ioq#l%|7@TQ\5J T) *NH1U,*P]Jq54T Euj"x !M|LP{V9m0A:56;BH8:#"MUZb+-ʨ F {Hhr~[Y'B\2uoQPO6?PV75}6L" qNԻs妆K[;qqYq=آgˈAInE4ʼώe*=Eלl$- nG 4n'8QFV&s1m Q~K4ñH:@xK+"V΍td Q8XF/y+t/rSX 7pETGX Cz娋=OVw# =MX5:R>y6xNnoa@d#!}գDo˼6YHl7&'B*w0 u kSvb ;ߐzY0PMvׁMkʮSebxؐ>7 "(gM2 tƨXZĩ;` : #E88Df[4]E&q,fjsiGR:׼=ML<&lPɗK 9u 7`PHF @E$vˡ>yZ:%k6PCP9Zqя;25\J<. =KG^Ƽj$EK(xH]""h DHb[wt;< \!Xـx2M8C47܁ѐݯnG x85ɞesF]pHaam2%/1(2EEy^v`-[[8?Ʋ0%6+!2)iRvstx ٮ]\T[nL <&A)RPWx!sTrS!RQxaQӂ@T 6˵[N;jַ\CU+Ĝ_'90;$\)8Můp:&?xGx%s1&)WOmx9=lOr^ [&Ib8ww#n1 *@=ꢐpuycxk:d#˛x(0"6h@fX:9F kj'?Y;5n/l+@35vt=/@uxJNjDhD8`rn9 l5 %xZ:=cn'l B~T>s5= Urů+SsgHՒ$ИUIj=%_;mO.RR J`haM)x'#0vCY\$J"On= aS@c[ އ04Bd=~9R^:gRR)|5@J@N!8/O8zav:h`@𛷎0"dUM;PI2o tƻ wM 13=@Hhew7SѲ S! 1+9k&]?C͆u /Pk7dD4N@l9Bdܐ%Xosu咧)@}㞚o]CÏ5.4#ǜT7v8'A|4;G>?83]-xK#@ t- T&fy mԡ1JE;]'E%(yD `6fD:t\=w-+6: 2 xh@ Ӑ8UvifAᗟFƼO3)޼r[8 o[젬.t~̾ &*}6u "UdMxxn#:'hb`AJ:|@gS +JY, w?yǾ8B'Y-𢂲%%CUFg]JULd )blœx E,9^.4p^Y[D> C 1D.t=[kϬw1*|rާU5 W%q( $r}shEfrW, wq%( ŊH;<14 ϛ7L5b׽͉cwɸBoaq2~2o7);tָqo7E*S`'y,.a;Q,B=JPh}d6 HqЇ>d.U篗:Qb_"wۈMqƧ! ʣ̢G8`G^8TE=lgn4Dp{{_`p|W#E$5wGnplf+rE4;O2͐۲+1)"p|ӽ_f$'3ڤ 9Uε㎰QAts <lA-Y d ~DiΜ/R [t]-Cp}\ >d|:Z wߜa/ GulКі{^)u! hz߃FV3;Q8E%w0Hx1Q6Bt WKQ"<~qT>H^mo)b5׽L%ݧQS]0GB|)eha'0r)Oo# „pzn,(0H)&7}4&*'gs!F"1;qpzpKclK; 9*7#B(ͱ˜r((caB@=^.1g 9N٨8(F"=\] }`(HN]ڸ@GI_Re6HtEDp v?Zj}TM4 KVt>\$pmuaRxs~n# R;MN'L{; Y7+ AX"͟As]s0AsWgQ, S GU'NL<;?\'CʯۜY!ĸ Jj..ʈ vS]yߣ͹a;׼ؚ7>iJ WA[vhv<|G6hZ-6Y&]blRB Տd'2Ow<6ϧ$lg Q^u0To dMxj/CӍ39@ /AZ~`Iz=SkpND?pI Ǧ*Qս.p?&xN9*kx8+4\g owXpHnc#|( ~aP!L#N*BuNv!t>:?=-51Aߞ>NyK#nl.JIyiN{;ˢբp9\>o+,ѭ3M/2.4Z۪^ SNU%0 u䛃=3Y^i.U?Y2Q F~2A[.=IDS<*l2!JWA -S''=8/OgĈq5x>qg~6b>'6T8L#F4T0b}udL|T܀|5ma KF$֌ [?S?T<'ދhGFk "s4hyM.?f@,BX_^&z_@5O2AJ|1ye5 "5%W9QC9a'/i&60Sx?XvT4N1&CCx͍u 7nW%5}t<>W :o4BAo7,m?c޺iˮ3`UЁ D"oYSu&w ;9iRSSshh#Zl{&,#ӝIӗD]Wrπ+A5ڛ4BQʤ. /gO!7_nIsPPEgֲac/(HZ^a~rI|2X Mo,1;A>b(>$ V-H,y1Eָ)BECC0%Z|:wx}o9atXyWZqEE ֔e<*s}qyƂew^C6֭j''nhӔ۞ -HC+δNj`"|dD bN %c7:u&˚x'/4nO8_vJw(xFxt :yjcXW죢-d:xhP[yajZ8~ *bq$`+{^c<-Sʊ׀=`-^Q y*F'Nz=%^@@!-OH x^wʽR?ID8B!Ti4=6%"M>w=InDN]lZobud1Dwo&z,Iby LG$#VB*GB{5kc*ʼ즜8V:/!]tÉda@]^*Pq99n@yyYJ Xԏaiscm-0.15.1/tests/integration/unary_ops.scm0000644000175000017500000000211313213600051016007 00000000000000(use-modules (aiscm sequence) (aiscm int) (aiscm jit) (aiscm rgb) (aiscm complex)) (- (seq 2 3 5)) ;#>>: ;(-2 -3 -5) (~ (seq -128 -3 -2 -1 0 1 2 127)) ;#>>: ;(127 2 1 0 -1 -2 -3 -128) (=0 (seq -2 -1 0 1 2)) ;#>: ;(#f #f #t #f #f) (!=0 (seq -2 -1 0 1 2)) ;#>: ;(#t #t #f #t #t) (red (seq (rgb 2 3 5) (rgb 3 5 7))) ;#>>: ;(2 3) (green (seq (rgb 2 3 5) (rgb 3 5 7))) ;#>>: ;(3 5) (blue (seq (rgb 2 3 5) (rgb 3 5 7))) ;#>>: ;(5 7) (red (seq 2 3 5)) ;#>>: ;(2 3 5) (real-part (seq (complex ) 2+3i 5+7i)) ;#>>: ;(2 5) (real-part (seq 2 3 5)) ;#>>: ;(2 3 5) (imag-part (seq (complex ) 2+3i 5+7i)) ;#>>: ;(3 7) (imag-part (seq 2 3 5)) ;#>>: ;(0 0 0) (conj (seq (complex ) 2+3i 5+7i)) ;#>>: ;(2.0-3.0i 5.0-7.0i) (conj (seq 2 3 5)) ;#>>: ;(2 3 5) aiscm-0.15.1/tests/integration/to_list.scm0000644000175000017500000000051213213600051015446 00000000000000(use-modules (aiscm sequence) (aiscm int) (aiscm rgb)) (define l (list (list (rgb 1 2 3) (rgb 4 5 6)) (list (rgb 2 3 4) (rgb 5 6 7)))) (define a (to-array l)) a ;#>>>: ;(((rgb 1 2 3) (rgb 4 5 6)) ; ((rgb 2 3 4) (rgb 5 6 7))) (to-list a) ;(((rgb 1 2 3) (rgb 2 3 4)) ((rgb 4 5 6) (rgb 5 6 7))) aiscm-0.15.1/tests/integration/xorg_scale.scm0000644000175000017500000000013413213600051016117 00000000000000(use-modules (aiscm magick) (aiscm xorg)) (show (read-image "fubk.png") #:shape '(768 576)) aiscm-0.15.1/tests/integration/integer_type.scm0000644000175000017500000000017013213600051016467 00000000000000(use-modules (aiscm int) (aiscm sequence)) (seq (integer 32 unsigned) 2 3 5 7) ;#>>: ;(2 3 5 7) aiscm-0.15.1/tests/integration/crop_dump.scm0000644000175000017500000000017413213600051015765 00000000000000(use-modules (aiscm magick) (aiscm sequence)) (write-image (crop 200 (dump 20 (read-image "pavillion.jpg"))) "cropped.jpg") aiscm-0.15.1/tests/integration/xorg_fullscreen.scm0000644000175000017500000000013113213600051017167 00000000000000(use-modules (aiscm magick) (aiscm xorg)) (show (read-image "fubk.png") #:fullscreen #t) aiscm-0.15.1/tests/integration/camera_mode.scm0000644000175000017500000000060413213600051016227 00000000000000(use-modules (oop goops) (ice-9 rdelim) (aiscm v4l2)) (define (select formats) (for-each (lambda (i mode) (format #t "~a: ~a~%" i mode)) (iota (length formats)) formats) (format #t "> ") (list-ref formats (string->number (read-line (current-input-port))))) (define v (make #:device "/dev/video0" #:channel 0 #:select select)) (read-image v) (destroy v) aiscm-0.15.1/tests/integration/roll_unroll.scm0000644000175000017500000000102413213600051016333 00000000000000(use-modules (aiscm sequence) (aiscm element)) (define a (arr ((1 2 3) (4 5 6)))) a ;#>>>>>: ;((((1 2 3) ; (4 5 6)))) (shape a) ;(3 2 1) (roll a) ;#>>>>>: ;(((1 4)) ; ((2 5)) ; ((3 6))) (shape (roll a)) ;(2 1 3) (unroll a) ;#>>>>>: ;(((1) ; (2) ; (3)) ; ((4) ; (5) ; (6))) (shape (unroll a)) ;(1 3 2) (project (roll a)) ;#>>>: ;((1 4)) aiscm-0.15.1/tests/integration/star-ferry.jpg0000644000175000017500000011647013213600051016100 00000000000000JFIFHHPExifII*  (1 2ivDigital StillCameraCAMERA8MP-9Q6 HHGIMP 2.8.142016:06:21 20:14:49""'20220   |d0100| BXPi   8 2008:07:04 11:18:282008:07:04 11:18:28 d2  l~F}rW@@WOVsfWD DM|P$/>cix ddR980100(\HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222g" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?88 c6E!¶r)(DX9jz) VBJфTVT‚ÑFII 1O@Lq=֒^=()0 yjLT6h s) 4isM2c&@)6]f)6qЃ QNEQ *EU#5:vKTIdnR71,^v~olVra;C}'i(=V* qm?OLQ@Em5c18ϵ`xƿn[Kʤ^RIɥ_7Ëq.?:Nf2Ry4́ޫj6L:UyB!LNs \5/aJJn1=(Ju6*s>cLՊ,vBrk:DEK<77p'ppGsN\wnފafmdFHR_Hv7`\y>8ҭgl3s~2.-na0w,yZVa6o:$9o֧LVɕCF|3³rQvi6֫siGtP}q:bXKi8$dVیfUvBOa 1 L ;Ov4yA`)#qY_A ?ZKb|is0j"Es2Ks-꼗4mR8ΡQ$>l20I[G'8cAo_U5$? 5+ֶSP@OIhvkdrf$WvJFj "_\Tjc( }Bj- qx8?X.Y/|,e8`1nܱŽT us4HeGz8"=xm&xX(HV~-A.aj]V/m~K0 ךoQq.d@}KgǷ͊E(89otmy!JI z*CY}q洛8SCH ֟cv&A{Ʀ>*R8M2F'"y4GߔUV(~`?5>iqq! $RiUҒ9)Sx7q)x'Z+l6ƨ78jW+S|?+W),aQ>F:پ/m\pbIR5}J_n<yx Ϯk[AY0WU'U_1hr#Y7>6rp2Tbs9V<0]-d5X_|  $WK)cE DSg.Pyl+vMϟG'ɩe½ǖ'2(r̮J&@Ү#@+P1-8=< t 3w0zLo>#,}I¿b"?>^ e }?kV* (,= %҆)'XI5p Fg@АXȹS&ewʊ.B`>] x ̽e$*w8SrQ(z?Ѓ+G8-( Ph+ ~%F01V|CƋP;v)cB8 f*P\|h}*K%Wc8Qd#*o{y< =袟*-ayyTڊ)򠸅r8EYJyiI$wpOPv+҂3ch%Rx^zsHeD?wQO"?;( http://ns.adobe.com/xap/1.0/ Digital StillCamera CAMERA 8MP-9Q6 Oben links 72 72 Zoll Ver 1.02 2008:07:04 11:18:28 Co-sited JPEG-Kompression Oben links 72 72 Zoll Co-sited 1/250 Sek. f/5,6 Manuell 50 Exif-Version 2.2 2008:07:04 11:18:28 2008:07:04 11:18:28 Y Cb Cr - 8,00 EV (1/256 Sek.) 5,00 EV (f/5,7) -2,00 EV 3,10 EV (f/2,9) Mittenbetontes Integral Tageslicht 100 Byte unbekannte Daten FlashPix-Version 1.0 sRGB 3264 2448 DSC Normale Verarbeitung Manuelle Belichtung Manueller Weißabgleich 1,00 105 Standard Normal Normal Normal Normal Fernansicht R98 0100 C     C  |! {feg Pl.Mn-"bPAHl.ބ6z0C[`f#4HjA@fh$ @& Șadmт0yhN@4AɄ1@&D $ HY0 !L#H j\`sSTkEdME=qQg!̓ C mчR a(jLI;G-Fh b0"Z3$(k%CdCRbW002&L78 !Tb,pUϫm陁 \a@dM4|>٬vC;'.9Ru7:/CS#Ja3 ,7_3o0p* j>#X亮94s6 Vj#M{"?kcvgr\-:R.d[y>mwiy\G$M3@\UmrU;)oQrcs%xUN {*aPD!Xxf7WNi"SZgԷi5E&`ܾkr2S7֎ $R=X]\vdЫt/?ha rvX+^nM15J lNƛoKb)OW ;.Wbik>ePPUd]{ͽ*\n=X2:3! IANR۬FBǣG۟c/3ٸtf-'nQJZWi꤅*Z"5'Օum]b9oiƭζ7lb_2t]R(lȇX92qtpc} vﭯ,^;Y]qSJNcqmWAmPaHRIq-īUiX;Q 94{mLȎeqBKKzJlv%P")R̩kuY+V/z&ٓ!6 U(ӬXeKoɡT^{xqoX2L%Is(ܜL%f(WѠԉ['O^JjIIxշ TZ4۸R_:R"=FVMn0tm6WfES} q%R4%*|sxq3yFmԶ϶s9ūw:9KJ$9In_?϶+x5p[zrɕ5zqdTod^(.wgvsg+~~}@l9sMf_Iq1XH[mz."Sm4@5rwu$/ٓpW>q&gS~txNG[W1KwQBs@Azn(=!+\#rY֫V⥹fUU\InBjye5U18~p CY71[KȻb*ǐEgEI<`UURNjcPĪ$GIvYB [n]V\SR7Ip-Cu(=n鐚m>^[!$b9enSm[hhglSےٖwEZ...]ckl7^TSEPԖ_-^)v,籀b2K]-%U^:Q*P$5Cҍeʻv9ƾ` GW1zkJl4cV䱔ʓb<,2 +l |M]w*\5er@c;RkH"E }XTT@W׎W WFqK-WU%#}*i /F@5N qk]iPdS9/XZ[l魰rL7PlA';emwl]MbțXI7s|&jfV#+?kQ,<9 ;]'cOڢ~:`E eLߗDxҲ p?Y%Ek!kZک|\<JaG K\R. *S3ݕ:F{LEW=iڹ;3(qrb&sQ䝒k A ^Q܊+OCdTQ#BEYEqmtUx%zc)jY\ <|S˚v 6J 'Z_\1ͨl@y5U1XD^&7Dkz9Ne錐u_d'o|ĔDtʞK(vy]rG? DL"l MlJ6]8Pg݊s+VGsF-+-d▞8xnb!#k!kz:;P۶$IKNV²t.O9`TN5M:kj uΊ,@'EZ5qZl%ȝ8 ]R5XX^Lie:d9nJ:μ+&U+_גG»y LyC³?0au=RZ j%=F ~+̺sMbmF:+Y~fS˨M=E?JE]e]m ;GNT[Ic^.p)k%S˕ʨѫq T3Z\G1Vcۈ@{:?ss<<2n[CETZאjqP}Z׫I*1 ;iMP=05^!rQS \b ,c+vGc#Q^䓞uw 1eqDO,!1A" Q023aBq#?xIe"Hlhy-K4Fi43Gg*deM&$i)nfEPB]$n+RE{X/_k[E}sxQc',d=_|ak23:O}Хobɸ8E/8;,R-%d9EǓ.-lmeͧd.d3\_iN䑁WUFIMGaqCTchMHֵWgv~L6Lhŋ[t1I7jof/:lBOG">BW\dAY(齊cS'v< $ۿNF5Wtȶ51oٶ [  ԑK4>>>D|$7KelIY{R>%_&I,ym.)c5헄z%|Os1N7!'v, $FO"K6Z7٥M[MF%|R{Ʌ _٩trmeN5+G McǂPTxr/BKv|'"xf/Teŋ哕Fmp2p$Z8o5d;UE_ԟ5Oj\߳ELJrb1*َ(X4F^X(drcGgg2{3T/aR,j5LQYe|Yg+ccnZ,6]Wm69)/!1"A Qa023Bq#4@?WwWwKAYe5Ln$x]{]\dQ#}+йRw6'dKO8pK,] Sh~/zhF81"|ݒr c<\=g0&ΦeU#rfH5]4D#-їk.Ў.̽&L~95]s.y'Di7uijZmU#,lݣ=SK NwWmŏ"]EJy2>IdXZj%ZPj, 'fm(dOG*M2RJ/}4"?Ȳ_>;21D}Woo]WOG5DI>ua_ |ܑe?[ 1uX*3gX?S$j}/mE?>}ѿleFNH|)DYˑ"FW>HK1(6%V)6kLDQJ2H.Oy)|JO?M\kQHӕPit 3F慎r>IR/6[L屑ž̎XU~9df"(?Ȳ=?ݘ=Q6du&K$vTZ_r&ǎiKlc5܆TVH:t#$ 3H}.[Q1[&ͤo!NB]IڣD6=WJD0\\aEvRc$f풞I5!8O ?j(B翂-EZORQ΅Rq=Fmԋ7O._4??Dbr.24k$S%=g4[- ]/~OfEx"O>أűhwj, g6&Ŗ.Dg |fR`[ //GVJz2= ѣE29*VTY")vdz,q)l&,lYQDU&'s=#q)6|v9 BMʅE?#J;4fԤjjhLXhDJ&OIj^ 3FhLPSVō%*?%yM!1"AQ2aq#B3Rbr $@C04ScsP6D?e1U>Mnɰݖ<3$%5¾gG&3.=U6﮵Ji]S ̎+Ck.LFr<t%͡2 4I1'm59Aa %VR a*榟J"AЈ n&ς'!O4uj0O-rqymi0>2m.]HUggZ E\zEefs2eH?qQ`%5FKqG[ic3o-(Y&ߊѺ|c#SZ0$f/vnmrAĢޡe`-H@pK@0ӆ Wt&JV]V2ݺBwh$i]x&Zi8hQXjQ54”Ji N4Tu0BM*'_GRH?n7rІ>MzHO=_:@ 7$b߲5\nV<5:ei9F]yF#]4} 8p6(J!@Iʑ#$'SG0h-=PKUxR<˭V?!7HCj.S0@`>PR%V葤D֜e sE *.0(}(W>$ha!e]䒠8CJsbmd !LRyiU}!A( Wiˇڀ4߄(p6\8 (cTIRByˆXI=BiHLI@W%%":;hJRN!EUWe o8@ZlW`?.]iUPhcRY%kX`i0V j`+8([MR>2˴[ly0˕36F]a TO6>M)V¬[?r&m; sFH[@ґBxvc6F> <V*et3EzF3> ryCp[}.q*uO8L*}'Swua=>gr#oʹ1A.ז\YOiL i 9Od)*p5`NZѳ z0W3AMQ5ʙB(q$QoKG2矬SIӾ.%wXyľۉp)yi70yV,}Pi"8%ĜC 5%Kd&.ˁoBK(v{PxRGAnW U+Kq5\^ C3!%3L2OmLe kl6\V^bQ]@Cͭ#Piٍ~\OY*V3^wCRJQŸK"*yz4[jkBGg6 {M,Pr0e+Cs:\ZqB?B VFZGI[zPԡ Q_D:Nn߫E~P;q#luAk.Ѕ2imOHIF+J o)}EA<`"i=E) Gpk5؎_:+s6LM=l31h6 Ὑt~?'@kF}! a\XyJxگc_VwDo_ M6i:y6]"P^HmhҠ2@SHDki[Tϓ)HNy;=ٹP% &agκBЊw]%W+aa%5\UKi^40OS-PW҇4~o}$%4 jGHo%1nWyp&AqeHV8kAl,RV3%,P8)ULunv\M=<҉=/EMa_vG93]HrnGh3vm&DLNȰ[wvgHȦMÄwjOeGG.IO16ziw0=!$R+kKeAWdy┅rqGh!KT׭o e* [s3 6T ~TIS\o xC&Z[K)Xm` u)MM8xB;Oi$%yή%shm[\QINm4QAz]*4' A!:JrahN \֙qtH-OL&ͩqAZ\"CJڛj8w᝞Jm?xUՖivQ_:;4' yz_dXBj=[tψ?y8^j'2RHZSuh`c$(s>$CrM! m6%"nΙvݔʎt1r\H vf9S!TSMjι"5L m ^yWe(lXe{L]}F:C23bwh5VК6h+^yK[DDzL%)E@S$ wj4PnMt!-KIr\sl^ (oHCE65e>郲z Ckݻ:B'}j\ YG(e S!9je&%}@Dt!RI9,B_q2S)Z ݜ~0)*.,"(ǜ:ñK tfHҗVrΧMbaŒ0e٨a] _x8^߰adUjX[R"]RR<8HUFG*!{h,[KJ_dtfuzpP[Ғ[1Ҥ56-.=<ʘt}߼69!@#0ru :ʊ)RGU׶.D]ӈLWLM!*8d"(吤y&v\ZVyuTz& eU bY+ltݕRE8:ʢj+Jnme XRe\+H+6dH^7)H~sGZ JK8lAXlS43U"*W)y4Ld3 הZPZ&}ՊMw>􈙱 L'GiwĊnoYP}Aتَ NuDrU05#fh…-n[gSrs.æeG46օNsj$O>uq/܂[R!e05*P. #,B9U/(P)@{ckM"l^.ӍBPd[R̻L֦Tj 8UQJ&.0ցhS:[\9BMDVJcvYagEE<-_%HmM諴6\ݩ +hθK~dar솦ԷYN&{.դQZδ-ufӳUg̨OdI͉7CHY^!M* H6{td%n^Z4Î2 U*+#4yk q-BP2 (^B-Z,jٳV-(Ā)Q..eW-"KXAׄ%B2KdOg -ǰZT8ت`ڋg隥K.uXvq2a 8z x7--$ymU*%,6L}RH%*_8g2 s5M }VSK+f 4S+ *9e &!ʃ] U\ctưMУp24RD#C[J~pHQ&F)\T:UzR& ٘ ێWuxU+PWL QTRU@%*ћPUnAWAbsHjA~ӖQB&QZwVjSJs2|fLTc +-:X @xF죤ו{"۽B45tLa* ưe뼡ۖ OXt#3˺+y5I!?{!9&Fgft'8Jqy HD,[m!ʱQeaȑRM0i->ܡ1AK 'QERt5Ɣeu갢 )[8 *9SaTGGhbj|"ddDkc(~㻾'R!%Pt iZ@GГ]DXoXr+WS/Sħ݄?HFӕOar00bb>UkӒUb7Nڧp1q&(A"_q7<ye-ONKIuGkI!X6Z-zZeHA@; dxGFF]զ^q: G_V3hFh"4@bJτo8q׍*طw.fv:xF@R.>2*K֨#((ZL )Mxү d1jvtaC-C?ta|aB)H:]_dgA8q`%/i?Yxf u.__8ᩂ -ݬ ]=i R@t6"EC BcHE#.Z=+ÐB(:ܕza|aC۬Q mJ6 O4h4˟'hMH3ӾIѹP{f:El-_*gʭN#=Sϑ(S%;9]) -PAMth:B-JR[6vE oQ+ieS&nqM9%Ӝ` n5 .kPGCGP۟}'1Mu2OTiietwӄ,96'fPtSh3Ky4j: ~xm/&ˆ륫5T>9wAn Rmwp ^ڛMB)vDܲ+`Vl {2jt'SR`,IR_}-S#ÝɻR(+I)b1E/֑D{i#)kVXQ H.MsGpb?˝޲/06O'ʗÒ]7<ǤB npqRiX_ Y;5%@ܥ-\?Eۨ!}~0w^̌S I&w)H9E1ͷijs{Enƛy iw\i)Ž4c.&c!A<46h֌Bʆ,Uz՞EEC$ӬU{`K})OYnMe%EJҨC(M,FEAX%}o/Ŝ}*Wӟ1=˗-OԸ/%P?ULܹr-,c#5.\{uT8΢Y\3}VGK‰"V{Kz̑I8t} 0 @*W3hT5+?JUT>.\_Ы̊iļF$!څfg]g9\pX.\Cr#z吻:JKWj4/Ih!`G\}/h7kPcr X} /61J*ǃx!05ǏCƥJLՂ?l7[a_¥.eEG!TU" lM"D J[f:Y uQ_+QmL-~~f2aܼE[\0^𵀫6%}/Y `*늏gRɶߵZTA9z%Xv?+"[=^a6mGavw>xWqf0vf0M(..;~dV!"ƙwsqQKL@[y]ߺFDŠ %Y3uE7\SuidM\le-D\T{k ⏤XF)sERb5 0 ,Jj^w 6؈쪅9ɐj?[%*wX -Esq a[ t|xkgf%i eoizCk}K B v t?4F,9;=|#Z[EPt1y9Lc{H#`-?uh/OyT|Jns1?owoA ycL7f"te2bxOHg; :\s< JLkAz# cڢ:$?J qaqJO1lVMdԹ v2M.L[9(h {dѳ]H}V8cWz[0sVS%ɚq`5㆖XUnږŎaR:}n ھ<,mi鮲.8\k 4t^7nC q\\̏*S|,u_Hx !l&Š.[кj^4l(T_bp&%C - Ê0kvf/raBɸ[3.Y)4&Wb^&b[Z+x3bB_ LFcMPAhtvk^tu|>.LSM#@Cɭa+̬9{6Ox;w %+Fe]8+ XG?eFXUz6S>b)tI WʢPwV(9ɸ083\ 9,>2AQӿ1@Rѡn~Z:ßYU +lj[\{S@ 0zy;7MƵX7sT4=&"g6 XSqQ2pq$s(@)dBXԪ)f'JpwDwaG$xZ+õ\N.kTh]ή XTz{-/QtG>eCo/2{}ړ`ݾ HlduU?A`QIi.fB%[]zҦ {eJs `5P²i0Gtm\_XfaF:Ɩ7R}"乳xS;?g|*,i3e19ٴ%Mf1!(-ļMêLu!F 673O!g,MZ[D~0W9&k0nY-`?n{̲l֖{"/1V̐ښ:k65,s +@㄁mHJ,g-"xv!k^n@Ӗ .o(w>5.-S!SR(%vJpS^w `6S 6#it+G%~lغyY`) +_:?eXL\W#taJhɯ# p +˔n)B$Wl+o%hቓJu2o9B!1Z280&)7 }rҭ`y@Rf&sk1yļYMV!*_5 CO(o7hkXNZHׂIIb4%c ޶*zy+`Ze}WV[ -锘n*Rׄ1=l4%cE¥sB?W,; bj`j.2XPXa)t7GX;VfM15Lأq"rb\`D@$-vAl65f` \U7'x7bDTsQg ?QX 2Ӳ(XU/qEp-,gı$ \@F&2ae71Qü /#2ӔHY_cW,h<+OLU"Q l /F-ձ ODYBg)Tctk@Mbon8;+vl\7%15cW* wWV󍳎xU#aƸGlV>WxYb~oP ݀H$$XWP޿ռ4Ď *;v 5h楫 v#{Ź7T@J`n+wfQC 8˲CKurfwY&`Q;<ځYnzUv,'DaiY0Վ -\{`'[`7_Uj{!u8|ˋ߂ qT&=RSQ-.Tѵs cmzbZ5E ģ  [3xLWG[]QZq7łj|Mni~1`eim,tyc|<& m>*7+Faj1uGP I!kzwxBgp ReM_)UFe'vW}J?ێ ڴלJ Kn6lx1yUJ[\_5t]@DG|^͙ZSYAx6-%klm FC;XiF=͔oQG/7R{ï 3O1]/'27HWK<Om⺳Xu͠; pDiZpr`o |ј\t9o}6n>&3%+"H.0cy[-t)8 6-΢"ҳYf @ v- љUm6߿ iD5lRm WX iU! 8Au K%fVZCdt,k 9t}-ke\F Y0m+K.W26t2w*  Nb\1nި1t"^a9כck#qSJ+hI{P lz8/E蝥ZBPhD|0V3ĕNrLP0͑dxE-;h8Μ>E?iV}CQxUXw+љ|2}P#^ШG?wl)%TFW.g+ޘ@^k]ҹ!>4+5~ P|F&!1AQaq?KqFE4(d"¢U%$ 6 $Â4hV6IBZwiBl,@H 'JP*9|"FkP&%_ f&j\,,Pfk )//r$U ^% 2߈\/:әYp*T*b M˄BY|8tf`\4e,|Ds]<3 ge~g}^%j-"$&qj+<0ŜJ MZ%0> GyK  ᙹ`}̃$R j#cWJ(m>g l*)܆%k1bRsӴwkQ_s!c;h%?I9 )2}c0c}`X)ɑ*1;*w¥aڊwu2A:u) ̏1:CKF `X짙Sc͋ WeaQdL\:LtKU*!wZ.Tde Jy"Ǻ`âO 7r"KE1[ߴuF|ĀkdS0Bsa[3yܬcR̳& 0Vp`bߴ"|~naN[r{,CF?/Qz5:ƥjf>b4xƊADh8'ry"N5dݜښD_H0O -"8sH1 oVJhZyff*1+}:@PN?SaN3>~ab5eS'N<>Rg+@ᙡ$Wtp1QTcP[Y 3$B *'IRLdQW=t*&8QNfDKs< T9]F؃g\C3/`@47u@x ""4LPV:dOs9s mЁ7,)jq-AƠv̫LA4BUBL,.l,az!ΎdWȊa i$R?&!1AQaq?n2aSoSӉMp3A|b+yߜ9׎MѼ 8.$#E`Ă#<{1<۬x_4&:> F]j̹-o&2Me\b Ѷ4< 9G`&@xI6\`<G4V56%Y_+C u *ڰWKkM;Kxez5iby0Wf&11cGĭA o)Hn&wһ!bpp.sS|X_8f4eN88%;Xa|o!47:\kAsYaXζ׼k~2`~;v\/ ەpf4P>\G:˻~Dr ΰR7FP@ CEa u[o0Gwےw;pf Jl2]klb_fk+= 1sݘOW l[r8ЇaV ` kByqf%+a62?{4b^?9ir.d`~7R!9iOq)OdܿSM]c+y[q*ֳ&}pq%ܗfE900ocqA4fǬa8!K9ͷ4{ɏg9չ7rv4|P{8#0004 /sk+bVTq4J߼csG|CyI"WbeL;#ӘCYN/U #so <»sgف2>k)kfxkve3\,:/?ex[1BƏMMRt¸{c2":|:5u Ryvw$#C#XN Cg;u܉ cRt+'{>2ݿOhY"o.ngOsaL߉WP^ke.*vha93EXI68v,(Si9B$jx0P :c(غ(M\VrCÿ@.F.XM'6<:M?R)XP Ï ,_aDDw֯qf`u<a8>Os^ObV,zR{Th]{WU61Au;Y~f/b \v:oJ8f[!M6Ei-6X) h|6k I >p4BR M#vHHV\\9-:qt]O|a)զ#_"&CTyo6?GlsyB7@Ώ$V| 9Fc~}b'#GO[,56ԇ1 q+AAcY @!.Z~C_ȃÝٮS?2;qYF-IR^#Z/P ]b1.ݰ5WPZ[q* ,k+u h 7?XkBbO$Xzsyak꙲$ߔǙ$׸%חW|\p z=76/C) 4?2<{?_g"?)`'vQw2|c`J|{:{\1 )6C c)V|Y_URg 1N$;zGQ3~SJȞUlҒp:5SLJ{h^lYpP-LE_3 KMsĄbȳ=xyB8r#aSunH FA&QL^/ ϦQ8Je61OP(lTN⢎GE!Β"]_vՈ707#APzpaћe&"a'6 XGi(jMMɲsȱ^>@VD@Q0 |`Itk Jn1b^H w@ XSJ"k)O4?Q4zxq0yo>pi4`ax0,4"T3|1yt>_S7+O^bXaQ$|Qڮ~tM]9Tf|Q9()?8bŐζ x%F !:un/P f@+5*NcbuLK,'Su/,Ag"C:X ;Os*M);*}je]!*}(S<("XP/|;pLD tJonrno}澬E0~>*(& @]%X$q⻴˖\RzD@IAT V2ݸa`F`{:'ҝ6:mo !U*w[ʊ%jSX7^ˆWB5م DG@@4@O fTMN`5g vvء%PQ^pbY{ԚUCvj(®T*٤fUT& iBPu|"Qq@A<>2@;3ac/Ehtp;Ր%.6ç>6ق6|4\!{c`CeNȀiIA<%H }f%yGZ>.oقоw ۣ.ntSr*{`X , V"Kn0aupWb.-4sfkET:mx6T"6J {^$e|#iE>p %S>hid{ĩ:x-( u޿HŪ)Qo&4m+F?BpӂNp G#A[!T¤#- 5ݳs)d?DnLnĩ WuyT40EN}}b. 2 0֛~sM_h?zkw+}wJo,?V n$=m.yA`*ñ<ҍJi7w>24PY 5' J-1 d)M>J-J%T0iB cچWG?]-t7ȂjA]dj7sE^0#aيJIG8Kb 56X] 7N C pB+ wHPF-ͽmEln P{+xI(4F+n}5FAa7/@5_k*ڧ-`HNZQJ^⹢΅ 2Iq;onTT4(8`$6\J qn4HTo]/BD#0Do{is>9f'3}Ow}Dtւ* ;1&M84n=8kGͿs^4 (!~h7&WPn>'PYj1mp|}dzuWmxtJIz3M5,]3OG:m8Bmfk9}x&O+4 i; ofھ) QUJڂjڜ$ ;5@X_n@D \T!w9–/B=Ԡ4/!i@v݄_?$0U͠ AS5_.!_JeؖygXףȽ&l)Sl{!iw&ڎ,C1X$S) "0wu]fFgudGV D*Zc0E|bjۆ@MM$LD0hh0_Sm|YG\/`6p}Y:W@ ; Tch04^=;ĂA}_g50Ŭ1=}9 ϯ47>$&oͧ}De?I;47q¸fx`&;lU x0w \M*3bԓP-l.Ule"ζ)LsFTѠ—4D2h)ӦCKM(DJ%A,4^PD:Ϡ& ;Q͟8PK,4C  #FjD!˞`ͪqDj@0yTrvj-.z'@i;]i7]xtcQ#{MaG- v W#>^ )/ˆ#xCy-I^Ga͈kp iH~Դ:R%i)ϭa*sUY$mȶ=Sg מ*Me f. =ζ k۫ύɯ+ф(e7ʤE^k"Hx|jQp } ah\Bgԣyb9-duk/JA|oC~Ӊ`Q + X*%t3~*6l-SddhC76Nxҿp(qGkQ׍cҥ$*>xKowwg;>BKʟx ]pxS5H%ZM% p߃S١ŦReZ|ik]5zqގ {oٶiO. <1*7bjtpwˆ"@!A*bDDz(t5!vM#8>zS!}/yAAf\;Ajx ɞa9M {Tcoj`|T¦KR T| 3[ 7 >1AihxcCdό9iX-?%n]w Lڛ G$(>Q% UYU۴c,RЯJ_,dm5_D@? 1G 2(Kxl"%y4[5exA?:O \MYxFb°fD$:i ) Fhn.q$.ln>tW(s MW#t_GH,%#'\;ʢ -zQ/5!M׼^8b9=BD͟Yj4dr;@kX'w_({}]P=t<^*SVfP0Ũl;WEx.PN|Abp=X9B߭)MrULA?-UF0EN&y|W;ݩOSp 1YUKz ޞszE_G\Қ*5P`?k6~_+ ozX3fAemcwstl(J_&bۧZ֞B +:|Vy [xih1IrCn>_8 y85&k,EH-HG~J'ruAp[|5E)3o 0ͅE)Eoq>5R "qzC}߅{ƭIYDz"nk04`f/c' z],t$ ԄňYE +ķo,cW W̶n x*Đ@`–/ Kc~D *L. Bv B0PJ4ex1G0:.xc{!xNλPS S\=ni l`ObDo!ҥ.;땠lIb X \BҠRz "Znr [ҙrm&U NC5q]](+/xA T&̨(;Sk=,DBf`PĈzZgPH[!N| @AΆi:B&`[-G 'ADH 2NЖ(.*Uzw  'piKt&}󑹼 $y_,luFlK2`\餰(;Co>2Єxvr_"z|Mbn;.+jzaiscm-0.15.1/tests/integration/sobel.scm0000644000175000017500000000072213213600051015100 00000000000000(use-modules (aiscm magick) (aiscm convolution) (aiscm tensor) (aiscm sequence) (aiscm image) (aiscm element) (aiscm int)) (define (to-gray img) (to-array (convert-image (to-image img) 'GRAY))) (define (norm x y) (tensor (/ (+ (abs x) (abs y)) 8))) (define (sobel img) (norm (convolve img (arr (1 0 -1) (2 0 -2) ( 1 0 -1))) (convolve img (arr (1 2 1) (0 0 0) (-1 -2 -1))))) (write-image (to-type (sobel (to-gray (read-image "star-ferry.jpg")))) "sobel.jpg") aiscm-0.15.1/tests/integration/ffplay.scm0000644000175000017500000000140213213600051015251 00000000000000(use-modules (oop goops) (aiscm ffmpeg) (aiscm xorg) (aiscm pulse) (aiscm image) (aiscm util)) ; Creative commons audio-video sync test video https://www.youtube.com/watch?v=GKBKa9Za-FQ (define video (open-ffmpeg-input "av-sync.mp4")) (define pulse (make #:rate (rate video) #:channels (channels video) #:typecode (typecode video) #:latency 0.1)) (show (lambda (dsp) (while (< (audio-pts video) (+ (video-pts video) 0.2)) (write-audio (or (read-audio video (/ (rate video) 10)) (break)) pulse)) (format #t "video pts = ~8,2f, audio-pts = ~8,2f, latency = ~8,2f~%" (video-pts video) (audio-pts video) (latency pulse)) (synchronise (read-image video) (- (video-pts video) (- (audio-pts video) (latency pulse))) (event-loop dsp)))) (drain pulse) aiscm-0.15.1/tests/integration/sharpen.scm0000644000175000017500000000050113213600051015427 00000000000000(use-modules (aiscm magick) (aiscm convolution) (aiscm tensor) (aiscm sequence) (aiscm element) (aiscm rgb) (aiscm int) (aiscm jit)) (define (sharpen img) (tensor (max 0 (min 255 (convolve img (arr (0 -1 0) (-1 5 -1) (0 -1 0))))))) (write-image (to-type (sharpen (read-image "star-ferry.jpg"))) "sharpen.jpg") aiscm-0.15.1/tests/integration/object_array.scm0000644000175000017500000000026013213600051016435 00000000000000(use-modules (oop goops) (aiscm sequence) (aiscm obj) (aiscm jit)) (<< 1 (* 10 (seq 1 2 4 8))) ;#>: ;(1024 1048576 1099511627776 1208925819614629174706176) aiscm-0.15.1/tests/integration/ffwritevideo.scm0000644000175000017500000000072013213600051016467 00000000000000(use-modules (oop goops) (aiscm util) (aiscm element) (aiscm v4l2) (aiscm xorg) (aiscm ffmpeg)) (define input (make )) (define output (open-ffmpeg-output (string-append (tmpnam) ".avi") #:shape (shape input) #:frame-rate 10)) (define timer (clock)) (define count 0) (show (lambda _ (format #t "actual frame rate = ~a frames/second~%" (/ count (elapsed timer))) (set! count (1+ count)) (write-image (read-image input) output))) (destroy output) aiscm-0.15.1/tests/integration/jmp.scm0000644000175000017500000000032613213600051014562 00000000000000(use-modules (oop goops) (aiscm asm) (aiscm int)) (define ctx (make )) (define f (asm ctx (list ) (list (MOV EAX EDI) (CMP EAX 0) (JNLE 'skip) (NEG EAX) 'skip (RET)))) (f -42) ; 42 (f 42) ; 42 aiscm-0.15.1/tests/integration/show_gray.scm0000644000175000017500000000025013213600051015772 00000000000000(use-modules (aiscm magick) (aiscm xorg) (aiscm image)) (define (to-gray arr) (to-array (convert-image (to-image arr) 'GRAY))) (show (to-gray (read-image "fubk.png"))) aiscm-0.15.1/tests/integration/complex_array.scm0000644000175000017500000000101113213600051016631 00000000000000(use-modules (aiscm complex) (aiscm sequence) (aiscm int) (aiscm jit)) (define c (seq 2+3i 5+7i)) c ;#>>: ;(2.0+3.0i 5.0+7.0i) (real-part c) ;#>>: ;(2 5) (imag-part c) ;#>>: ;(3 7) (complex (seq 2 5) (seq 3 7)) ;#>>: ;(2.0+3.0i 5.0+7.0i) (conj c) ;#>>: ;(2.0+253.0i 5.0+249.0i) (conj (to-type (complex ) c)) ;#>>: ;(2.0-3.0i 5.0-7.0i) aiscm-0.15.1/tests/integration/asm.scm0000644000175000017500000000025213213600051014552 00000000000000(use-modules (oop goops) (aiscm asm) (aiscm int)) (define ctx (make )) (define f (asm ctx (list ) (list (MOV EAX EDI) (NEG EAX) (RET)))) (f 42) ; -42 aiscm-0.15.1/tests/integration/tensors.scm0000644000175000017500000000216213213600051015471 00000000000000(use-modules (oop goops) (aiscm sequence) (aiscm tensor) (aiscm expression)) (tensor 42) ;42 (tensor (seq 2 3 5)) ;#>>: ;(2 3 5) (tensor (+ (seq 2 3 5) 1)) ;#>>: ;(3 4 6) (tensor (dim i (+ (get (seq 2 3 5) i) 1))) ;#>>: ;(3 4 6) (tensor i (+ (get (seq 2 3 5) i) 1)) ;#>>: ;(3 4 6) (tensor i j (get (arr (2 3 5) (3 5 7)) j i)) ;#>>>: ;((2 3) ; (3 5) ; (5 7)) (tensor i j (+ (get (seq 0 1 2) i) (get (seq 10 20) j))) ;#>>>: ;((10 11 12) ; (20 21 22)) (tensor (prod i (get (seq 2 3 5) i))) ;30 (tensor i (sum j (get (arr (1 2 3) (3 4 5)) i j))) ;#>>: ;(4 6 8) (tensor j (sum i (get (arr (1 2 3) (3 4 5)) i j))) ;#>>: ;(6 12) (tensor i (sum k (* (get (arr (2 3 5) (3 5 7)) k i) (get (seq -1 0 1) k)))) ;#>>: ;(3 4) (tensor (largest i (get (arr (2 3 5) (8 6 4)) i))) ;#>>: ;(8 6 5) (tensor (smallest i (get (arr (2 3 5) (8 6 4)) i))) ;#>>: ;(2 3 4) aiscm-0.15.1/tests/integration/ffstream.scm0000644000175000017500000000114013213600051015576 00000000000000(use-modules (oop goops) (aiscm ffmpeg) (aiscm xorg) (aiscm pulse) (aiscm image) (aiscm util)) (define video (open-ffmpeg-input "http://peach.themazzone.com/durian/movies/sintel-1024-surround.mp4")) (define pulse (make #:rate (rate video) #:channels (channels video) #:typecode (typecode video) #:latency 0.1)) (show (lambda (dsp) (while (< (audio-pts video) (+ (video-pts video) 0.2)) (write-audio (or (read-audio video (/ (rate video) 10)) (break)) pulse)) (synchronise (read-image video) (- (video-pts video) (- (audio-pts video) (latency pulse))) (event-loop dsp)))) (drain pulse) aiscm-0.15.1/tests/integration/convolution_1d.scm0000644000175000017500000000046713213600051016745 00000000000000(use-modules (aiscm sequence) (aiscm convolution) (aiscm complex)) (convolve (seq 0 0 2 2 2 2 0 0) (seq 1 0 -1)) ;#>>: ;(0 2 2 0 0 -2 -2 0) (convolve (seq 0 0 1 0 0 0 0 0 2 0) (seq +1 +i -1 -i)) ;#>>>: ;(1 0.0+1.0i -1 0.0-1.0i 0 0 2 0.0+2.0i -2 0.0-2.0i) aiscm-0.15.1/tests/integration/xorg_scale_image.scm0000644000175000017500000000016513213600051017265 00000000000000(use-modules (aiscm magick) (aiscm xorg) (aiscm image)) (show (to-image (read-image "fubk.png")) #:shape '(768 576)) aiscm-0.15.1/tests/integration/binary.scm0000644000175000017500000000071013213600051015255 00000000000000(use-modules (aiscm sequence) (aiscm element) (aiscm jit)) (define a (arr (1 2 3) (4 5 6))) a ;#>>>: ;((1 2 3) ; (4 5 6)) (shape a) ;(3 2) (define b (seq -1 1)) b ;#>>: ;(-1 1) (shape b) ;(2) (+ b 1) ;#>>: ;(0 2) (+ b b) ;#>>: ;(-2 2) (- 1 b) ;#>>: ;(2 0) (* a b) ;#>>>: ;((-1 -2 -3) ; (4 5 6)) aiscm-0.15.1/tests/integration/scalars.scm0000644000175000017500000000023213213600051015420 00000000000000(use-modules (aiscm int) (aiscm rgb) (aiscm complex)) (<< 3 2) ;12 (% 1234 100) ;34 (| 240 15) ;255 (+ (rgb 2 3 5) 1) ;(rgb 3 4 6) (== (rgb 2 2 2) 2) ;#t aiscm-0.15.1/tests/integration/xorg_video_list.scm0000644000175000017500000000033013213600051017167 00000000000000(use-modules (oop goops) (aiscm v4l2) (aiscm sequence) (aiscm rgb) (aiscm xorg)) (define v (make )) (show (lambda _ (let [(img (to-array (read-image v)))] (list (red img) (green img) (blue img))))) (destroy v) aiscm-0.15.1/tests/integration/write_image.scm0000644000175000017500000000017713213600051016274 00000000000000(use-modules (aiscm sequence) (aiscm magick) (aiscm xorg)) (write-image (arr (32 255 96 255) (255 160 255 224)) "pattern.png") aiscm-0.15.1/tests/integration/ffwrite.scm0000644000175000017500000000107113213600051015440 00000000000000(use-modules (oop goops) (aiscm ffmpeg) (aiscm v4l2) (aiscm pulse) (aiscm xorg) (aiscm element) (aiscm int)) (define input (make )) (define output (open-ffmpeg-output (string-append (tmpnam) ".avi") #:shape (shape input) #:frame-rate 7 #:rate 44100 #:typecode #:channels 2)) (define record (make #:typecode #:channels 2 #:rate 44100)) (show (lambda _ (write-audio (read-audio record (/ (rate output) (frame-rate output))) output) (write-image (read-image input) output))) (destroy output) aiscm-0.15.1/tests/integration/type_matching.scm0000644000175000017500000000012713213600051016626 00000000000000(use-modules (aiscm sequence)) (seq -1 2 3 5) ;#>>: ;(-1 2 3 5) aiscm-0.15.1/tests/integration/invert.scm0000644000175000017500000000015013213600051015276 00000000000000(use-modules (aiscm magick) (aiscm jit)) (write-image (~ (read-image "star-ferry.jpg")) "inverted.jpg") aiscm-0.15.1/tests/integration/ffvideo.scm0000644000175000017500000000064213213600051015417 00000000000000(use-modules (aiscm ffmpeg) (aiscm xorg) (aiscm util)) ; Creative commons audio-video sync test video https://www.youtube.com/watch?v=GKBKa9Za-FQ (define video (open-ffmpeg-input "av-sync.mp4")) (define time (clock)) (show (lambda (dsp) (format #t "video pts = ~8,2f, clock = ~8,2f~%" (video-pts video) (elapsed time)) (synchronise (read-image video) (- (video-pts video) (elapsed time)) (event-loop dsp)))) aiscm-0.15.1/tests/integration/array_shape.scm0000644000175000017500000000037613213600051016277 00000000000000(use-modules (aiscm sequence) (aiscm int) (aiscm element)) (define a (arr ((1 2 3) (4 5 6)))) (dimensions a) ;3 (size a) ;6 (size-of a) ;24 (shape a) ;(3 2 1) (strides a) ;(1 3 6) (get a 1 0 0) ;2 (get a 0 0) ;#>>: ;(1 2 3) aiscm-0.15.1/tests/integration/modulo.scm0000644000175000017500000000020413213600051015266 00000000000000(use-modules (aiscm magick) (aiscm rgb) (aiscm jit)) (write-image (% (read-image "star-ferry.jpg") (rgb 250 200 150)) "modulo.jpg") aiscm-0.15.1/tests/integration/pulse_out.scm0000644000175000017500000000060613213600051016014 00000000000000(use-modules (oop goops) (aiscm pulse) (aiscm int) (aiscm sequence)) (define samples (to-array (map (lambda (t) (round (* (sin (/ (* t 1000 2 3.1415926) 44100)) 20000))) (iota 441)))) (define output (make #:typecode #:channels 1 #:rate 44100)) (channels output) ;1 (rate output) ;44100 (for-each (lambda _ (write-audio samples output)) (iota 300)) (drain output) aiscm-0.15.1/tests/integration/virtual_arrays.scm0000644000175000017500000000044213213600051017042 00000000000000(use-modules (oop goops) (aiscm asm) (aiscm jit) (aiscm int) (aiscm rgb) (aiscm sequence)) (define ctx (make )) (define f (jit ctx (list (rgb ) (sequence )) +)) (f (rgb 1 2 3) (seq 4 5 6)) ; #>>>: ; ((rgb 5 6 7) (rgb 6 7 8) (rgb 7 8 9)) aiscm-0.15.1/tests/integration/pulse_in.scm0000644000175000017500000000045513213600051015615 00000000000000(use-modules (oop goops) (aiscm int) (aiscm pulse)) (define record (make #:typecode #:channels 2 #:rate 44100)) (define play (make #:typecode #:channels 2 #:rate 44100)) (for-each (lambda _ (write-audio (read-audio record 4410) play)) (iota 30)) (drain play) aiscm-0.15.1/tests/integration/box_filter.scm0000644000175000017500000000043413213600051016131 00000000000000(use-modules (aiscm magick) (aiscm convolution) (aiscm sequence) (aiscm element) (aiscm rgb) (aiscm int) (aiscm jit)) (define (box-filter img) (/ (convolve img (fill '(5 5) 1)) 25)) (write-image (to-type (box-filter (read-image "star-ferry.jpg"))) "box-filter.jpg") aiscm-0.15.1/tests/integration/xorg_video.scm0000644000175000017500000000017213213600051016140 00000000000000(use-modules (oop goops) (aiscm v4l2) (aiscm xorg)) (define v (make )) (show (lambda _ (read-image v))) (destroy v) aiscm-0.15.1/tests/integration/typed_sequence.scm0000644000175000017500000000015013213600051017004 00000000000000(use-modules (aiscm int) (aiscm sequence)) (seq 2 3 5 7) ;#>>: ;(2 3 5 7) aiscm-0.15.1/tests/test_sequence.scm0000644000175000017500000003113313213600051014320 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (srfi srfi-1) (oop goops) (aiscm sequence) (aiscm element) (aiscm variable) (aiscm expression) (aiscm mem) (aiscm bool) (aiscm int) (aiscm obj) (aiscm pointer) (aiscm jit) (aiscm util)) (test-begin "aiscm sequence") (define s1 (make (sequence ) #:size 3)) (define s2 (make (sequence ) #:size 3)) (define s3 (make (sequence ) #:size 3)) (write-bytes (value s1) #vu8(2 0 3 0 5 0)) (define a (make #:type #:symbol 'a)) (define b (make #:type #:symbol 'b)) (define c (make #:type #:symbol 'c)) (define d (make #:type #:symbol 'd)) (define e (make #:type #:symbol 'e)) (test-equal "Query element type of sequence class" (typecode (sequence ))) (test-equal "equality of classes" (sequence ) (sequence )) (test-eqv "Query size of sequence" 3 (size s1)) (test-equal "Query typecode of sequence" (typecode s1)) (test-equal "Query element type of sequence" (pointer ) (project (sequence ))) (test-eqv "Check number of dimensions of sequence type" 1 (dimensions (sequence ))) (test-eqv "Query dimension of sequence" 3 (dimension s1)) (test-equal "Query shape of sequence" '(3) (shape s1)) (test-equal "determine default strides of a sequence" '(1 2 6) (default-strides '(2 3 5))) (test-equal "Query stride of sequence" 1 (stride s1)) (test-equal "query strides of sequence" '(1) (strides s1)) (test-equal "Convert sequence to list" '(2 3 5) (to-list s1)) (test-assert "Make empty sequence" (make (sequence ) #:size 0)) (test-equal "Class name of 16-bit integer sequence" '>> (class-name (sequence ))) (test-equal "Write empty sequence" "#>>:\n()" (call-with-output-string (lambda (port) (write (make (sequence ) #:size 0) port)))) (test-equal "Write sequence object" "#>>:\n(2 3 5)" (call-with-output-string (lambda (port) (write s1 port)))) (test-equal "Write longer sequence object" "#>>:\n(100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 ...)" (call-with-output-string (lambda (port) (write (to-array (make-list 40 100)) port)))) (test-equal "Write sequence object made from variables" "#<>> c:> (a:>) (b:>)>" (let [(s (make (sequence ) #:value c #:shape (list a) #:strides (list b)))] (call-with-output-string (lambda (port) (write s port))))) (test-equal "Typecode of converted list of unsigned bytes" (typecode (to-array '(1 2 3)))) (test-equal "Typecode of converted list of signed bytes" (typecode (to-array '(1 -1)))) (test-eqv "storage size of short integer sequence" 6 (size-of (make (sequence ) #:size 3))) (test-eqv "Size of converted list" 3 (size (to-array '(1 2 3)))) (test-equal "Convert list of integers to multiarray and back" '(2 4 8) (to-list (to-array '(2 4 8)))) (test-equal "Convert list of boleans to multiarray and back" '(#t #f #t) (to-list (to-array '(#t #f #t)))) (test-equal "Short form for specifying sequences" '(2 3 5) (to-list (sequence 2 3 (+ 2 3)))) (test-equal "Short short form for specifying sequences" '(2 3 5) (to-list (seq 2 3 (+ 2 3)))) (test-equal "Checking content of short form for integer sequence" '(2 3 5) (to-list (seq 2 3 5))) (test-equal "Checking type of short form for integer sequence " (typecode (seq 2 3 5))) (test-equal "Selection of fitting datatype for signed-unsigned combinations" '(-1 128) (to-list (seq -1 128))) (test-equal "Short form for specifying arrays" '((2 3) (5 7)) (to-list (arr (2 3) (5 7)))) (test-equal "Checking content of short form for specifying integer arrays" '((2 3) (5 7)) (to-list (arr (2 3) (5 7)))) (test-equal "Checking type of short form for specifying integer arrays" (typecode (arr (2 3) (5 7)))) (test-equal "Convert list of integers to integer array" (typecode (to-array '(1 2 3)))) (test-equal "Convert list of integers to integer array and back" '(1 2 3) (to-list (to-array '(1 2 3)))) (test-equal "Write 2D array" "#>>>:\n((1 2 3)\n (4 5 6))" (call-with-output-string (lambda (port) (write (arr (1 2 3) (4 5 6)) port)))) (test-equal "Write 2D array with large first dimension" "#>>>:\n((100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 ...))" (call-with-output-string (lambda (port) (write (to-array (list (make-list 40 100))) port)))) (test-equal "Write 2D array with large second dimension" "#>>>:\n((1)\n (1)\n (1)\n (1)\n (1)\n (1)\n (1)\n (1)\n (1)\n (1)\n ..." (call-with-output-string (lambda (port) (write (to-array (make-list 11 '(1))) port)))) (test-equal "Write 3D array" "#>>>>:\n(((1 1)\n (1 1))\n ((1 1)\n (1 1)))" (call-with-output-string (lambda (port) (write (to-array (make-list 2 (make-list 2 '(1 1)))) port)))) (test-equal "Write 4x3x2 array" "#>>>>:\n(((1 1)\n (1 1)\n (1 1))\n ((1 1)\n (1 1)\n (1 1))\n ((1 1)\n (1 1)\n (1 1))\n ((1 1)\n ..." (call-with-output-string (lambda (port) (write (to-array (make-list 4 (make-list 3 '(1 1)))) port)))) (test-equal "Write 5x3x2 array" "#>>>>:\n(((1 1)\n (1 1)\n (1 1))\n ((1 1)\n (1 1)\n (1 1))\n ((1 1)\n (1 1)\n (1 1))\n ((1 1)\n ..." (call-with-output-string (lambda (port) (write (to-array (make-list 5 (make-list 3 '(1 1)))) port)))) (test-equal "Coercion of sequences" (sequence ) (coerce (sequence ))) (test-equal "Coercion of sequences" (sequence ) (coerce (sequence ) )) (test-equal "Coercion of sequences" (sequence ) (coerce (sequence ) (sequence ))) (test-equal "Coercion of multi-dimensional arrays" (multiarray 2) (coerce (multiarray 2) )) (test-equal "Class name of 16-bit integer 2D array" '>>> (class-name (sequence (sequence )))) (test-equal "Multi-dimensional array is the same as a sequence of sequences" (multiarray 2) (sequence (sequence (integer 16 signed)))) (test-equal "Get element type of 2D array" (sequence ) (project (multiarray 2))) (test-assert "Shape of arbitrary object is empty list" (null? (shape 1))) (test-equal "Shape of flat list" '(3) (shape '(1 2 3))) (test-equal "Shape of nested list" '(3 2) (shape '((1 2 3) (4 5 6)))) (test-equal "Query shape of multi-dimensional array" '(5 4 3) (shape (make (multiarray 3) #:shape '(5 4 3)))) (test-equal "Query strides of multi-dimensional array" '(1 5 20) (strides (make (multiarray 3) #:shape '(5 4 3)))) (test-eqv "Query last stride of multi-dimensional array" 20 (stride (make (multiarray 3) #:shape '(5 4 3)))) (test-equal "Query last dimension of multi-dimensional array" 3 (dimension (make (multiarray 3) #:shape '(5 4 3)))) (test-begin "get") (test-equal "'get' without additional arguments should return the sequence itself" '(1 2 3) (to-list (get (seq 1 2 3)))) (test-equal "Content of converted 2D array" '((1 2 3) (4 5 6)) (to-list (arr (1 2 3) (4 5 6)))) (test-equal "Getting row of 2D array" '(4 5 6) (to-list (get (arr (1 2 3) (4 5 6)) 1))) (test-equal "Getting element of 2D array with one call to 'get'" 2 (get (arr (1 2 3) (4 5 6)) 1 0)) (test-equal "Getting element of 2D array with two calls to 'get'" 2 (get (get (arr (1 2 3) (4 5 6)) 0) 1)) (test-equal "Get range of values from 1D array" '(3 5) (to-list (get (seq 2 3 5 7) '(1 . 3)))) (test-equal "Get range of values from slice of 2D array" '(1 4) (to-list (get (arr (1 2 3) (4 5 6)) 0 '(0 . 2)))) (test-equal "Get range of values from slice of 3D array" '(1 3 5) (to-list (get (arr ((1) (2)) ((3) (4)) ((5) (6))) 0 0 '(0 . 3)))) (test-equal "Get range of values from slice of 3D array" '(1 2) (to-list (get (arr ((1) (2)) ((3) (4)) ((5) (6))) 0 '(0 . 2) 0))) (test-end "get") (test-equal "Drop 2 elements of an array" '(3 4 5) (to-list (dump 2 (seq 1 2 3 4 5)))) (test-equal "Drop rows and columns from 2D array" '((2 3) (5 6)) (to-list (dump '(1 0) (arr (1 2 3) (4 5 6))))) (test-equal "Drop elements from a 3D array" '(3 3 3) (shape (dump '(1 2) (make (multiarray 3) #:shape '(3 4 5))))) (test-equal "project 2D array" '(1 2 3) (to-list (project (arr (1 2 3) (4 5 6))))) (test-equal "Crop an array down to 3 elements" '(1 2 3) (to-list (crop 3 (seq 1 2 3 4)))) (test-equal "Crop 2D array to size 2x1" '((1 2)) (to-list (crop '(2 1) (arr (1 2 3) (4 5 6))))) (test-equal "Crop 3D array" '(3 1 2) (shape (crop '(1 2) (make (multiarray 3) #:shape '(3 4 5))))) (test-equal "Rolling an array should cycle the indices" '(((1)) ((2))) (to-list (roll (arr ((1 2)))))) (test-equal "Unrolling an array should reverse cycle the indices" '(((1) (2))) (to-list (unroll (arr ((1 2)))))) (test-equal "Downsampling by 2 with phase 0" '(1 3 5) (to-list (downsample 2 (seq 1 2 3 4 5)))) (test-equal "Downsampling of 2D array" '((1) (3) (5)) (to-list (downsample 2 (arr (1) (2) (3) (4) (5))))) (test-equal "1-2 Downsampling of 2D array" '((1 2 3)) (to-list (downsample '(1 2) (arr (1 2 3) (4 5 6))))) (test-equal "2-1 Downsampling of 2D array" '((1 3) (4 6)) (to-list (downsample '(2 1) (arr (1 2 3) (4 5 6))))) (test-equal "Downsample 3D array" '(6 3 2) (shape (downsample '(2 3) (make (multiarray 3) #:shape '(6 6 6))))) (test-equal "'unbuild' for an array should return size and stride" '(3 1) (list-head (unbuild (class-of s1) s1) 2)) (test-equal "'unbuild' for a 2D array should return shape and strides" '(4 6 6 1) (list-head (unbuild (multiarray 2) (make (multiarray 2) #:shape '(6 4))) 4)) (let [(roundtrip (build (class-of s1) (unbuild (class-of s1) s1)))] (test-equal "reconstruct sequence from components" '(2 3 5) (to-list roundtrip)) (test-eqv "size of sequence memory is set correctly when reconstructing" 6 (get-size (slot-ref roundtrip 'value)))) (let* [(m (arr (1 2 3) (4 5 6))) (roundtrip (build (class-of m) (unbuild(class-of m) m)))] (test-equal "reconstruct 2D array from components" '((1 2 3) (4 5 6)) (to-list roundtrip)) (test-eqv "size of array memory is set correctly when reconstructing" 12 (get-size (slot-ref roundtrip 'value)))) (test-equal "'content' should convert dimension and stride to integer elements" (list ) (map class-of (list-head (content (sequence ) (skeleton (sequence ))) 2))) (test-equal "'content' should return pointer object as an integer in addition to dimension and stride" (class-of (last (content (sequence ) (skeleton (sequence )))))) (let [(s (parameter (sequence )))] (test-eq "content of sequence parameter contains dimension" (dimension s) (car (content (sequence ) s))) (test-eq "content of sequence parameter contains stride" (stride s) (cadr (content (sequence ) s))) (test-eq "content of sequence contains pointer" (get (delegate (project s))) (get (delegate (caddr (content (sequence ) s)))))) (test-assert "Check signed-ness of sequence" (signed? (seq -1 1))) (test-assert "integer sequence memory is pointerless" (pointerless? (sequence ))) (test-assert "object sequence memory is not pointerless" (not (pointerless? (sequence )))) (test-equal "sequence of objects is filled with boolean false" '(#f #f #f) (to-list (make (sequence ) #:size 3))) (test-equal "2D array of objects is filled with boolean false" '((#f #f) (#f #f)) (to-list (make (multiarray 2) #:shape '(2 2)))) (test-end "aiscm sequence") aiscm-0.15.1/tests/test_pulse.scm0000644000175000017500000000305713213600051013644 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm int) (aiscm float) (aiscm pulse)) (test-begin "aiscm pulse") (test-eqv "convert unsigned byte to Pulse audio type" PA_SAMPLE_U8 (type->pulse-type )) (test-eqv "convert short integer to Pulse audio type" PA_SAMPLE_S16LE (type->pulse-type )) (test-eqv "convert integer to Pulse audio type" PA_SAMPLE_S32LE (type->pulse-type )) (test-eqv "convert floating-point to Pulse audio type" PA_SAMPLE_FLOAT32LE (type->pulse-type )) (test-error "throw error if type not supported by Pulse audio" 'misc-error (type->pulse-type )) (test-eq "convert Pulse audio short integer to integer type" (pulse-type->type PA_SAMPLE_S16LE)) (test-end "aiscm pulse") aiscm-0.15.1/tests/test_int.scm0000644000175000017500000002226413213600051013307 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (system foreign) (aiscm element) (aiscm bool) (aiscm float) (aiscm int) (aiscm jit)) (test-begin "aiscm int") (test-equal "equality of classes" (integer 32 signed) (integer 32 signed)) (test-equal "equality of predefined classes" (integer 32 signed)) (test-equal "equality of predefined metaclass" > (class-of (integer 32 signed))) (test-eqv "number of bits of integer class" 64 (bits (integer 64 signed))) (test-assert "signed-ness of signed integer class" (signed? (integer 64 signed))) (test-assert "signed-ness of unsigned integer class" (not (signed? (integer 64 unsigned)))) (test-eqv "storage size of byte" 1 (size-of )) (test-eqv "storage size of short integer" 2 (size-of )) (test-eqv "storage size of unsigned integer" 4 (size-of )) (test-eqv "storage size of long integer" 8 (size-of )) (test-eqv "storage size of short integer instance" 2 (size-of (make #:value #x21))) (test-equal "equal integer objects" (make #:value #x21) (make #:value #x21)) (test-assert "unequal integer objects" (not (equal? (make #:value #x21) (make #:value #x4321)))) (test-assert "unequal integer objects of different classes" (not (equal? (make #:value #x21) (make #:value #x21)))) (test-eqv "integer class maintains number of bits" 128 (bits (integer 128 signed))) (test-assert "integer class maintains signedness for signed integer" (signed? (integer 128 signed))) (test-assert "integer class maintains signedness for unsigned integer" (not (signed? (integer 128 unsigned)))) (test-assert "signed-ness of integer instance" (signed? (make #:value #x21))) (test-eqv "number of bits of integer instance" 32 (bits (make #:value #x21))) (test-equal "pack custom integer value" #vu8(#x01 #x02) (pack (make (integer 16 unsigned) #:value #x0201))) (test-equal "pack unsigned byte value" #vu8(#xff) (pack (make #:value #xff))) (test-equal "pack unsigned short integer value" #vu8(#x01 #x02) (pack (make #:value #x0201))) (test-equal "pack unsigned integer value" #vu8(#x01 #x02 #x03 #x04) (pack (make #:value #x04030201))) (test-equal "unpack unsigned byte value" (unpack #vu8(#xff)) (make #:value #xff)) (test-equal "unpack unsigned short integer value" (unpack #vu8(#x01 #x02)) (make #:value #x0201)) (test-equal "unpack unsigned integer value" (unpack #vu8(#x01 #x02 #x03 #x04)) (make #:value #x04030201)) (test-eqv "pack and unpack signed byte" 127 (get (unpack (pack (make #:value 127))))) (test-eqv "pack and unpack signed byte with negative number" -128 (get (unpack (pack (make #:value -128))))) (test-eqv "pack and unpack signed short integer" 32767 (get (unpack (pack (make #:value 32767))))) (test-eqv "pack and unpack signed short integer with negative number" -32768 (get (unpack (pack (make #:value -32768))))) (test-eqv "pack and unpack signed integer" 2147483647 (get (unpack (pack (make #:value 2147483647))))) (test-eqv "pack and unpack signed integer with negative number" -2147483648 (get (unpack (pack (make #:value -2147483648))))) (test-eqv "querying element size of integer" 1 (size (make #:value 123))) (test-assert "querying shape of integer" (null? (shape (make #:value 123)))) (test-equal "display short integer object" "#<> 1234>" (call-with-output-string (lambda (port) (display (make #:value 1234) port)))) (test-equal "write short integer object" "#<> 1234>" (call-with-output-string (lambda (port) (write (make #:value 1234) port)))) (test-eqv "signed coercion returns largest integer type" 32 (bits (coerce (integer 16 signed) (integer 32 signed)))) (test-eqv "signed coercion returns largest integer type" 16 (bits (coerce (integer 16 signed) (integer 8 signed)))) (test-assert "coercion of signed-ness" (not (signed? (coerce (integer 8 unsigned) (integer 16 unsigned))))) (test-assert "coercion of signed-ness" (signed? (coerce (integer 8 unsigned) (integer 16 signed)))) (test-assert "coercion of signed-ness" (signed? (coerce (integer 8 signed) (integer 16 unsigned)))) (test-assert "coercion of signed-ness" (signed? (coerce (integer 8 signed) (integer 16 signed)))) (test-eqv "make space for signed-unsigned operation" 32 (bits (coerce (integer 16 signed) (integer 16 unsigned)))) (test-eqv "make space for signed-unsigned operation" 32 (bits (coerce (integer 8 signed) (integer 16 unsigned)))) (test-eqv "check whether unsigned value fits into signed value" 16 (bits (coerce (integer 16 signed) (integer 8 unsigned)))) (test-eqv "coercion does not allocate more than 64 bits" 64 (bits (coerce (integer 64 signed) (integer 64 unsigned)))) (test-equal "coercion of integer and single-precision floating point" (coerce (integer 32 signed) (floating-point single-precision))) (test-equal "coercion of double-precision floating point and integer" (coerce (floating-point double-precision) (integer 32 signed))) (test-equal "foreign type of byte" int8 (foreign-type (integer 8 signed))) (test-equal "foreign type of unsigned short int" uint16 (foreign-type (integer 16 unsigned))) (test-equal "type matching for 255" (native-type 255)) (test-equal "type matching for 256" (native-type 256)) (test-equal "type matching for 65535" (native-type 65535)) (test-equal "type matching for 65536" (native-type 65536)) (test-equal "type matching for 4294967295" (native-type 4294967295)) (test-equal "type matching for 4294967296" (native-type 4294967296)) (test-equal "type matching for 18446744073709551615" (native-type 18446744073709551615)) (test-expect-fail 1) (test-equal "type matching for 18446744073709551616" (native-type 18446744073709551616)) (test-equal "type matching for -128" (native-type -128)) (test-equal "type matching for -129" (native-type -129)) (test-equal "type matching for -32768" (native-type -32768)) (test-equal "type matching for -32769" (native-type -32769)) (test-equal "type matching for -2147483648" (native-type -2147483648)) (test-equal "type matching for -2147483649" (native-type -2147483649)) (test-equal "type matching for -9223372036854775808" (native-type -9223372036854775808)) (test-expect-fail 1) (test-equal "type matching for -9223372036854775809" (native-type -9223372036854775809)) (test-equal "match two integers" (native-type 1 -1)) (test-assert "wrapping 125 creates a byte container" (is-a? (wrap 125) )) (test-eqv "wrapping 125 maintains value" 125 (get (wrap 125))) (test-eqv "don't wrap twice" 125 (get (wrap (wrap 125)))) (test-expect-fail 1) (test-equal "type matching for 1 and 1.5" (native-type 1 1.5)) (test-eqv "get value of integer" 123 (get (make #:value 123))) (test-eqv "set value of integer" 123 (let [(i (make #:value 0))] (set i 123) (get i))) (test-eqv "return-value of setting integer" 123 (set (make #:value 0) 123)) (test-equal "build short integer" 42 (build '(42))) (test-equal "'content' returns integer values" '(42) (content > 42)) (test-equal "invert integer using '~'" -43 (~ 42)) (test-equal "bitwise and using '&'" 2 (& 3 6)) (test-equal "bitwise and with three arguments" 4 (& 7 14 28)) (test-equal "bitwise or using '|'" 7 (| 3 6)) (test-equal "bitwise or with three arguments" 7 (| 1 2 4)) (test-equal "bitwise xor using '^'" 5 (^ 3 6)) (test-equal "bitwise xor using '^'" 21 (^ 7 14 28)) (test-equal "shift left using '<<'" 12 (<< 3 2)) (test-equal "shift right using '>>'" 3 (>> 12 2)) (test-equal "shift left by one" 6 (<< 3)) (test-equal "shift right by one" 3 (>> 6)) (test-equal "remainder of division using '%'" 33 (% 123 45)) (test-equal "'==' for integers" '(#t #f) (map == '(3 4) '(3 5))) (test-equal "'!=' for integers" '(#f #t) (map != '(3 4) '(3 5))) (test-equal "'=0' for integers" '(#t #f) (map =0 '(0 1))) (test-equal "'!=0' for integers" '(#f #t) (map !=0 '(0 1))) (test-eq "base type of integer is integer" (base )) (test-eqv "conjugate of integer" 3 (conj 3)) (test-assert "integer memory is pointerless" (pointerless? )) (test-end "aiscm int") aiscm-0.15.1/tests/test_expression.scm0000644000175000017500000002056713213600051014720 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (aiscm element) (aiscm asm) (aiscm int) (aiscm pointer) (aiscm sequence) (aiscm variable) (aiscm expression)) (test-begin "aiscm expression") (test-begin "skeleton of scalar expression") (let [(i (skeleton ))] (test-assert "skeleton of integer is of type integer" (is-a? i )) (test-assert "value of integer skeleton is a variable" (is-a? (value i) )) (test-eq "value of integer skeleton is of type integer" (typecode (value i)))) (test-end "skeleton of scalar expression") (test-begin "decompose parameters into elementary native types") (let [(s (skeleton (sequence )))] (test-assert "skeleton of a sequence is a sequence" (is-a? s (sequence ))) (test-equal "skeleton of sequence consists of two long integer variables and an unsigned long integer" (list ) (map class-of (content (class-of s) s))) (test-equal "sequence skeleton is based on three variables" (list ) (map class-of (map get (content (class-of s) s))))) (let [(m (skeleton (multiarray 2)))] (test-assert "skeleton of a 2D array is a 2D array" (is-a? m (multiarray 2))) (test-equal "skeleton of 2D array consists of long integer variables and an unsigned long integer" (list ) (map class-of (content (class-of m) m))) (test-equal "2D array skeleton is based on five variables" (make-list 5 ) (map class-of (map get (content (class-of m) m))))) (test-end "decompose parameters into elementary native types") (test-begin "array parameters") (let* [(s (skeleton (sequence ))) (sx (parameter s)) (i (var ))] (test-eq "sequence parameter maintains pointer" (value s) (value (delegate (delegate sx)))) (test-eq "index of parameter and index of parameters content should match" (index sx) (index (delegate sx))) (test-eq "sequence parameter should maintain dimension" (dimension s) (get (delegate (dimension sx)))) (test-eq "sequence parameter should maintain stride" (stride s) (get (delegate (stride (delegate sx))))) (test-eq "sequence parameter maintains type" (sequence ) (type sx)) (test-eq "substitution should replace the lookup index" i (index (subst (delegate sx) (index sx) i))) (test-eq "retrieving an element by index should replace with the index" i (index (get sx i))) (test-assert "projected 1D array tensor should contain pointer" (is-a? (delegate (project sx)) (pointer )))) (test-end "array parameters") (test-begin "type inference") (test-eq "determine type of parameter" (type (parameter ))) (test-eq "determine type of sequence" (sequence ) (type (parameter (sequence )))) (test-eq "plus operation coerces return type correctly" (type (make-function + coerce list (list (parameter ) (parameter ))))) (test-eq "coerce sequence and scalar" (sequence ) (type (make-function + coerce list (list (parameter (sequence )) (parameter ))))) (test-eq "coerce two sequence types" (sequence ) (type (make-function + coerce list (list (parameter (sequence )) (parameter (sequence )))))) (test-end "type inference") (test-begin "array parameter manipulation") (let* [(m (skeleton (multiarray 2))) (mx (parameter m)) (i (var )) (j (var ))] (test-equal "2D array parameter should maintain the shape" (shape m) (map (compose get delegate) (shape mx))) (test-equal "2D array parameter should maintain the strides" (strides m) (map (compose get delegate) (strides mx))) (test-equal "first index of parameter should have a match" (index mx) (index (delegate (delegate mx)))) (test-equal "second index of parameter should have a match" (index (delegate mx)) (index (delegate (delegate (delegate mx))))) (test-eq "subst should allow replacing first index" i (index (subst (delegate (delegate mx)) (index mx) i))) (test-eq "subst should allow replacing second index" i (index (delegate (subst (delegate (delegate mx)) (index (delegate mx)) i)))) (test-eq "replacing the second index should maintain the first one" (index mx) (index (subst (delegate (delegate mx)) (index (delegate mx)) i))) (test-eq "retrieving an element should replace with the index" i (index (delegate (get mx i)))) (let [(tr (indexer i (indexer j (get (get mx j) i) (cadr (shape mx))) (car (shape mx))))] (test-equal "swap dimensions when transposing" (list (dimension mx) (dimension (project mx))) (list (dimension (project tr)) (dimension tr))) (test-equal "swap strides when transposing" (list (stride mx) (stride (project mx))) (list (stride (project tr)) (stride tr))))) (test-end "array parameter manipulation") (test-begin "tensor dimensions") (test-assert "dimension hint is false initially" (not (dimension-hint (var )))) (let [(s (parameter (sequence ))) (i (var ))] (get s i) (test-eq "dimension hint is defined when using an index" (dimension s) (dimension-hint i))) (test-end "tensor dimensions") (test-begin "shape of expression") (let [(m (parameter (multiarray 2))) (c (parameter ))] (test-equal "shape of unary function expression is shape of argument" (shape m) (shape (make-function ~ coerce list (list m)))) (test-equal "shape of scalar plus array expression" (shape m) (shape (make-function + coerce list (list c m)))) (test-equal "shape of array plus scalar expression" (shape m) (shape (make-function + coerce list (list m c))))) (test-end "shape of expression") (test-begin "dimension of expression") (let [(m (parameter (multiarray 2)))] (test-equal "dimension of unary function expression is dimension of argument" (dimension m) (dimension (make-function ~ coerce list (list m))))) (test-end "dimension of expression") (test-begin "convolution") (let [(s (parameter (sequence ))) (c (parameter )) (k (parameter (multiarray 2)))] (test-equal "shape of convolution uses shape of first argument" (shape s) (shape (convolution s c))) (test-equal "convolution coerces types" (sequence ) (type (convolution s c))) (test-equal "convolution uses trailing kernel dimensions" (append (shape s) (cdr (shape k))) (shape (convolution s k)))) (test-end "convolution") (test-begin "rebase") (let [(v (var )) (p (make #:type #:symbol 'p))] (test-equal "rebase a pointer" v (get (rebase v (make (pointer ) #:value p))))) (let [(p (parameter (pointer ))) (s (parameter (sequence ))) (i (var )) (x (parameter ))] (test-equal "rebase pointer parameter" i (value (rebase i p))) (test-equal "rebase sequence parameter" i (value (rebase i s))) (test-equal "preserve type of sequence parameter" (sequence ) (type (rebase i s))) (test-equal "rebase pointer parameter with parameter" (value x) (value (rebase x p)))) (test-end "rebase") (test-begin "array-pointer") (let [(s (parameter (sequence )))] (test-equal "array pointer has base pointer of array as value" (value s) (value (array-pointer s))) (test-equal "array pointer is a 64 bit integer" (type (array-pointer s)))) (test-end "array-pointer") (test-end "aiscm expression") aiscm-0.15.1/tests/test_ffmpeg_in.scm0000644000175000017500000002675713213600051014462 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-1) (srfi srfi-64) (oop goops) (aiscm ffmpeg) (aiscm samples) (aiscm element) (aiscm int) (aiscm float) (aiscm rgb) (aiscm image) (aiscm pointer) (aiscm sequence)) (test-begin "aiscm ffmpeg") (load-extension "libguile-aiscm-tests" "init_tests") (test-begin "helper methods") (test-assert "Convert array with one integer to 64 bit" (int-array-to-long-one-element)) (test-assert "Convert array with two integers to 64 bit" (int-array-to-long-second-element)) (test-assert "Convert empty integer array to Scheme array" (null? (from-array-empty))) (test-equal "Convert integer array with three elements to Scheme array" '(2 3 5) (from-array-three-elements)) (test-equal "Convert integer array to Scheme array stopping at first zero element" '(2 3 5) (from-array-stop-at-zero)) (test-equal "Convert zero array with minimum number of elements" '(0) (from-array-at-least-one)) (test-equal "Convert long integer array element to Scheme" (list (ash 42 32)) (from-array-long-integers)) (test-begin "convert pointers to offsets") (test-assert "First value of offset-array is zero" (first-offset-is-zero)) (test-assert "Second value of offset-array correct" (second-offset-correct)) (test-assert "Set offset values for null pointers to zero" (zero-offset-for-null-pointer)) (test-assert "Offsets have 64 bit" (offsets-have-64-bit (ash 1 62))) (test-end "convert pointers to offsets") (test-assert "Pack byte audio sample" (pack-byte-audio-sample)) (test-assert "Pack byte audio samples" (pack-byte-audio-samples)) (test-assert "Pack short integer audio samples" (pack-short-int-audio-samples)) (define-class () (video-buffer #:init-value '()) (video-pts #:init-value 0)) (let [(dummy (make ))] (test-assert "Popping buffer should return #f when empty" (not (video-buffer-pop dummy)))) (let [(dummy (make ))] (video-buffer-push dummy (cons 123 'dummy-frame)) (video-buffer-push dummy (cons 456 'other-frame)) (test-eq "Popping buffer should return first frame" 'dummy-frame (video-buffer-pop dummy)) (test-eq "Popping buffer should set the time stamp" 123 (slot-ref dummy 'video-pts)) (test-eq "Popping buffer again should return the second frame" 'other-frame (video-buffer-pop dummy)) (test-eq "Popping buffer again should set the time stamp" 456 (slot-ref dummy 'video-pts))) (test-end "helper methods") (test-begin "video input") (define input-video (open-ffmpeg-input "fixtures/av-sync.mp4")) (test-assert "Video input is an input object" (is-input? input-video)) (test-assert "Video has video stream" (have-video? input-video)) (test-assert "'open-ffmpeg-input' creates an FFmpeg object" (is-a? input-video )) (test-equal "Check frame size of input video" '(640 360) (shape input-video)) (test-eqv "Get frame rate of input video" 25 (frame-rate input-video)) (test-equal "Get aspect ratio of input video" 1 (aspect-ratio input-video)) (test-eqv "Detect stereo audio stream" 2 (channels input-video)) (define video-pts0 (video-pts input-video)) (define video-frame (read-image input-video)) (test-assert "Check that video frame is an image object" (is-a? video-frame )) (test-equal "Check shape of video frame" '(640 360) (shape video-frame)) (test-equal "Check a pixel in the first video frame of the video" (rgb 154 154 154) (get (to-array video-frame) 10 270)) (define video-pts1 (video-pts input-video)) (read-image input-video) (define video-pts2 (video-pts input-video)) (test-equal "Check first three video frame time stamps" (list 0 0 (/ 1 25)) (list video-pts0 video-pts1 video-pts2)) (pts= input-video 15) (read-image input-video) (test-assert "Seeking audio/video should update the video position" (<= 15 (video-pts input-video))) (buffer-timestamped-video 15 input-video) (pts= input-video 15) (test-assert "Flush video buffer when seeking in input video" (zero? (video-buffer-fill input-video))) (destroy input-video) (define full-video (open-ffmpeg-input "fixtures/av-sync.mp4")) (define images (map (lambda _ (read-image full-video)) (iota 2253))) (test-assert "Check last image of video was read" (last images)) (test-assert "Check 'read-image' returns false after last frame" (not (read-image full-video))) (destroy full-video) (test-error "Throw exception when trying to write to input video" 'misc-error (write-image colour-image (open-ffmpeg-input "fixtures/av-sync.mp4"))) (test-error "Throw error if file does not exist" 'misc-error (open-ffmpeg-input "fixtures/no-such-file.avi")) (test-end "video input") (test-begin "image input") (define decoded (decode-audio/video (open-ffmpeg-input "fixtures/fubk.png"))) (test-eq "Decoding image data results in a video frame" 'video (car decoded)) (test-eqv "Decoding image data results a trivial time stamp" 0 (cadr decoded)) (define image (open-ffmpeg-input "fixtures/fubk.png")) (decode-audio/video image) (test-assert "Return false after decoding last frame" (not (decode-audio/video image))) (define image (open-ffmpeg-input "fixtures/fubk.png")) (test-eqv "Video buffer is empty initially" 0 (video-buffer-fill image)) (decode-audio/video image) (test-assert "Buffering video should return true" (buffer-timestamped-video 123 image)) (test-eqv "Video buffer contains one frame after buffering a frame" 1 (video-buffer-fill image)) (test-equal "Timestamp is stored in buffer" 123 (caar (slot-ref image 'video-buffer))) (test-equal "Shape of buffered video frame is the same" '(384 288) (shape (cdar (slot-ref image 'video-buffer)))) (test-assert "Stored frame is a duplicate (i.e. not the same)" (not (eq? video-frame (cdar (slot-ref image 'video-buffer))))) (define image (open-ffmpeg-input "fixtures/fubk.png")) (test-assert "Image has only one video frame" (not (cadr (list (read-image image) (read-image image))))) (test-assert "Image does not have audio data" (not (have-audio? image))) (test-assert "Do not hang when reading audio from image" (not (read-audio image 4410))); test should not hang (test-error "Image does not have audio channels" 'misc-error (channels image)) (test-error "Image does not have an audio sampling rate" 'misc-error (rate image)) (test-error "Image does not have an audio sample type" 'misc-error (typecode image)) (destroy image) (define image (open-ffmpeg-input "fixtures/fubk.png")) (read-audio image 4410) (test-assert "Cache video data when reading audio" (read-image image)) (destroy image) (test-end "image input") (test-begin "audio input") (define decoded (decode-audio/video (open-ffmpeg-input "fixtures/mono.mp3"))) (test-eq "Decoding audio data results in an audio frame" 'audio (car decoded)) (test-eqv "Decoding audio data results a trivial time stamp" 0 (cadr decoded)) (define audio-mono (open-ffmpeg-input "fixtures/mono.mp3")) (test-assert "Audio file does not have a video stream" (not (have-video? audio-mono))) (test-assert "Do not hang when attempting to read an image from an audio file" (not (read-image audio-mono))) (test-assert "Audio input has audio stream" (have-audio? audio-mono)) (test-eqv "Audio buffer fill is zero initially" 0 (audio-buffer-fill audio-mono)) (define audio-samples (read-audio audio-mono 4410)) (test-equal "Retrieve specified number of audio samples" '(1 4410) (shape audio-samples)) (test-eq "Typecode of samples is typecode of input" (typecode audio-mono) (typecode audio-samples)) (test-eq "Rate of samples is rate of input" (rate audio-mono) (rate audio-samples)) (test-assert "Samples are packed" (not (planar? audio-samples))) (test-end "audio input") (test-begin "audio input") (define audio-mono (open-ffmpeg-input "fixtures/mono.mp3")) (test-error "Audio file does not have width and height" 'misc-error (shape audio-mono)) (test-error "Audio file does not have a frame rate" 'misc-error (frame-rate audio-mono)) (test-eqv "Detect mono audio stream" 1 (channels audio-mono)) (test-eqv "Get sampling rate of audio stream" 8000 (rate audio-mono)) (test-eq "Get type of audio samples" (typecode audio-mono)) (define audio-mono (open-ffmpeg-input "fixtures/mono.mp3")) (decode-audio/video audio-mono) (test-assert "Buffering audio should return true" (buffer-timestamped-audio 123 audio-mono)) (test-assert "Buffering input audio should increase the buffer size" (not (zero? (audio-buffer-fill audio-mono)))) (define samples (to-samples (arr (2) (3) (5) (7) (3) (4) (6) (8)) 8000)) (fetch-audio audio-mono samples) (test-equal "Fetching back buffered audio should maintain the values" '((0) (0) (0) (0) (0) (0) (0) (0)) (to-list (to-array samples))) (define audio-mono (open-ffmpeg-input "fixtures/mono.mp3")) (define audio-pts0 (audio-pts audio-mono)) (define audio-mono-frame (read-audio audio-mono 4410)) (test-assert "Check that audio frame is a set of samples" (is-a? audio-mono-frame )) (test-eqv "Get a value from a mono audio frame" 40 (get (to-array audio-mono-frame) 0 300)) (test-eqv "Mono audio frame should have 1 channel" 1 (channels audio-mono-frame)) (test-equal "Mono audio frame should have the desired shape" '(1 4410) (shape audio-mono-frame)) (test-eq "Audio frame should have samples of correct type" (typecode audio-mono-frame)) (define audio-mono (open-ffmpeg-input "fixtures/mono.mp3")) (define audio-pts0 (audio-pts audio-mono)) (read-audio audio-mono 800) (define audio-pts1 (audio-pts audio-mono)) (read-audio audio-mono 800) (define audio-pts2 (audio-pts audio-mono)) (test-equal "Check first three audio frame time stamps" (list 0 (/ 1 10) (/ 2 10)) (list audio-pts0 audio-pts1 audio-pts2)) (pts= audio-mono 1) (test-eqv "Seeking in the audio stream should flush the audio buffer" 0 (audio-buffer-fill audio-mono)) (pts= audio-mono 35) (test-assert "Return a smaller frame when attempting to read beyond the end of the audio stream" (< (cadr (shape (read-audio audio-mono 441000))) 441000)); test should not hang (test-assert "Check 'read-audio' returns false after last audio sample" (not (read-audio audio-mono 4410))) (destroy audio-mono) (define audio-stereo (open-ffmpeg-input "fixtures/test.mp3")) (test-eqv "Stereo audio frame should have 2 channels" 2 (channels (read-audio audio-stereo 4410))) (destroy audio-stereo) (test-end "audio input") (test-end "aiscm ffmpeg") aiscm-0.15.1/tests/test_operation.scm0000644000175000017500000004101713213600051014512 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (srfi srfi-1) (oop goops) (aiscm bool) (aiscm int) (aiscm obj) (aiscm pointer) (aiscm sequence) (aiscm asm) (aiscm command) (aiscm program) (aiscm expression) (aiscm variable) (aiscm operation) (aiscm compile) (aiscm jit) (aiscm util)) (define ctx (make )) (test-begin "aiscm operation") (test-eqv "put native constant into compiled code" 42 ((jit ctx '() (lambda () (native-const 42))))) (test-begin "size-of in compiled code") (test-eqv "determine size of integer in compiled code" 2 ((jit ctx (list ) size-of) 42)) (test-eqv "determine size of sequence (compiled)" 6 ((jit ctx (list (sequence )) size-of) (seq 2 3 5))) (test-end "size-of in compiled code") (test-begin "value needs conversion") (let* [(a (parameter )) (f (~ a))] (test-assert "no conversion required if types are the same" (not (need-conversion? ))) (test-assert "conversion required if types are different" (need-conversion? )) (test-assert "no conversion required if integers have the same size" (not (need-conversion? ))) (test-assert "no conversion required when changing bytes to booleans" (not (need-conversion? ))) (test-assert "no conversion required when changing boolean to bytes" (not (need-conversion? )))) (test-end "value needs conversion") (test-begin "copying values") (let [(out (skeleton )) (in (skeleton ))] (test-equal "generate code for copying an integer" (list (list (MOV (get out) (get in)))) (duplicate out in)) (test-equal "generate code for identity function" (list (list (get out)) (list (get in)) (list (list (MOV (get out) (get in))) (RET))) (assemble (list out) (list in) (duplicate out in)))) (let [(out (skeleton )) (in (skeleton (pointer )))] (test-equal "generate code for reading integer from memory" (list (list (MOV (get out) (ptr (get in))))) (duplicate out in))) (let [(out (skeleton (pointer ))) (in (skeleton ))] (test-equal "generate code for writing integer to memory" (list (list (MOV (ptr (get out)) (get in)))) (duplicate out in))) (let [(out (skeleton ))] (test-equal "Generate code for setting variable to zero" (list (MOV (get out) 0)) (duplicate out 0))) (let [(in (skeleton (pointer ))) (out (skeleton (pointer )))] (test-equal "generate code for copying a byte from one memory location to another" (list (SUB RSP 8) (MOV DL (ptr RAX)) (MOV (ptr RSI) DL) (ADD RSP 8) (RET)) (jit-compile (flatten-code (attach (duplicate out in) (RET)))))) (let [(out (skeleton (multiarray 2))) (in (skeleton (multiarray 2)))] (test-assert "generating code for copying a 2D array should run without error" (list? (duplicate (parameter out) (parameter in))))) (let [(out (skeleton )) (in (skeleton ))] (test-equal "generate code for copying part of integer" (list (SUB RSP 8) (MOV AL CL) (ADD RSP 8) (RET)) (jit-compile (flatten-code (list (duplicate out in) (RET)))))) (let [(i (parameter ))] (test-eqv "assign native integer constant to parameter" 42 ((asm ctx '() (apply virtual-variables (assemble (list (delegate i)) '() (duplicate i 42))))))) (test-end "copying values") (test-begin "insert intermediate value") (let* [(a (skeleton )) (expr (let-skeleton* [(tmp a)] tmp)) (tmp (last expr))] (test-equal "Use intermediate value" (append (duplicate tmp a) (list tmp)) expr) (test-equal "Add more code" (NOP) (last (let-skeleton* [(tmp a)] (NOP) (NOP)))) (test-eq "Use intermediate parameter" (class-of (last (let-parameter* [(tmp (parameter a))] tmp))))) (test-equal "defining no parameters" (list (NOP)) (let-parameter* () (NOP))) (let* [(a (parameter )) (prog (let-parameter* [(b a)] b)) (b (last prog))] (test-equal "copy variable" (append (duplicate b a) (list b)) prog)) (test-eq "parameter without initialisation" (class-of (last (let-parameter* [(x )] x)))) (test-end "insert intermediate value") (test-begin "check whether intermediate value is required") (let* [(a (parameter )) (s (parameter (sequence ))) (f (~ a)) (i (var )) (c (inject += i (get s i)))] (test-assert "Compilation of function always requires intermediate value" (code-needs-intermediate? f)) (test-assert "Compilation of injection always requires intermediate value" (code-needs-intermediate? c)) (test-assert "Value does not require intermediate value" (not (code-needs-intermediate? a))) (test-assert "Value of different size requires intermediate value" (code-needs-intermediate? a))) (test-end "check whether intermediate value is required") (test-begin "determine operand for machine instruction") (let [(a (skeleton )) (b (skeleton (pointer ))) (c (set-pointer-offset (skeleton (pointer )) 3))] (test-equal "element operand is value of element" (get a) (operand a)) (test-equal "pointer operand is pointer to element" (ptr (get b)) (operand b)) (test-equal "pointer operand can have offset" (ptr (get c) 3) (operand c))) (test-end "determine operand for machine instruction") (test-begin "force intermediate values where required") (let [(a (parameter ))] (test-equal "Pass through parameters to specified function by default" (list a) (force-parameters (list ) (list a) code-needs-intermediate? identity)) (let* [(forced (force-parameters (list ) (list a) code-needs-intermediate? identity)) (intermediate (last forced))] (test-equal "Create parameter of target type if type is different" (type intermediate)) (test-equal "Create preamble for initialising intermediate values" (attach (duplicate intermediate a) intermediate) forced) (test-equal "Alternatively force all parameters to the same type" (type (last (force-parameters (list a) code-needs-intermediate? identity)))))) (test-end "force intermediate values where required") (test-equal "Use default zero-extension for 32-bit numbers" (list (SUB RSP 8) (MOV EAX ECX) (ADD RSP 8) (RET)) (jit-compile (flatten-code (attach (duplicate (skeleton ) (skeleton )) (RET))))) (test-begin "identity function") (test-eqv "compile and run integer identity function" 42 ((jit ctx (list ) identity) 42)) (test-eqv "compile and run boolean identity function" #t ((jit ctx (list ) identity) #t)) (test-equal "compile and run identity function for array" '(2 3 5) (to-list ((jit ctx (list (sequence )) identity) (seq 2 3 5)))) (test-equal "compile and run identity function for 2D array" '((2 3 5) (7 9 11)) (to-list ((jit ctx (list (multiarray 2)) identity) (arr (2 3 5) (7 9 11))))) (test-end "identity function") (test-begin "unary +") (test-equal "plus passes through values" 42 ((jit ctx (list ) +) 42)) (test-equal "Compiling a plus operation with different types creates an equivalent machine program" 3 ((jit ctx (list ) +) 2 -3 4)) (test-end "unary +") (test-begin "unary -") (let [(out (skeleton )) (a (skeleton ))] (test-equal "generate code for negating number" (list (list (MOV (get out) (get a))) (NEG (get out))) (duplicate (parameter out) (- (parameter a))))) (test-equal "Negate integer" -42 ((jit ctx (list ) -) 42)) (test-equal "compile and run function for negating array" '(-2 3 -5) (to-list ((jit ctx (list (sequence )) -) (seq 2 -3 5)))) (test-equal "negate integer twice" 42 ((jit ctx (list ) (compose - -)) 42)) (test-end "unary -") (test-equal "unary ~" '(253 252 250) (to-list ((jit ctx (list (sequence )) ~) (seq 2 3 5)))) (test-begin "binary +") (let [(out (skeleton )) (a (skeleton )) (b (skeleton ))] (test-equal "generate code for adding two numbers" (list (list (MOV (get out) (get a))) (ADD (get out) (get b))) (duplicate (parameter out) (+ (parameter a) (parameter b))))) (test-equal "compile and run function adding two numbers" 42 ((jit ctx (list ) +) 19 23)) (let [(out (skeleton )) (a (skeleton )) (b (skeleton ))] (test-equal "sign-extend second number when adding" (list (SUB RSP 8) (MOVZX ESI AX) (MOVSX ECX DL) (ADD ESI ECX) (ADD RSP 8) (RET)) (jit-compile (flatten-code (list (duplicate (parameter out) (+ (parameter b) (parameter a))) (RET)))))) (test-assert "create function from tensor and element" (+ (parameter (sequence )) (parameter ))) (test-assert "create function from element and tensor" (+ (parameter ) (parameter (sequence )))) (test-assert "create function from two tensors" (+ (parameter (sequence )) (parameter (sequence )))) (let [(out (skeleton (sequence ))) (a (skeleton (sequence ))) (b (skeleton ))] (test-assert "generating code for array-scalar operation should run without error" (list? (duplicate (parameter out) (+ (parameter a) (parameter b)))))) (test-equal "compile and run array-scalar operation" '(9 10 12) (to-list ((jit ctx (list (sequence ) ) +) (seq 2 3 5) 7))) (test-equal "compile and run scalar-array operation" '(9 10 12) (to-list ((jit ctx (list (sequence )) +) 7 (seq 2 3 5)))) (test-equal "sign-extend second number when adding value from pointer" '(9 10 12) (to-list ((jit ctx (list (sequence )) +) 7 (seq 2 3 5)))) (test-equal "compile and run array-array operation" '(9 14 18) (to-list ((jit ctx (list (sequence ) (sequence )) +) (seq 2 3 5) (seq 7 11 13)))) (test-equal "compile and run 2D array-scalar operation" '((7) (8)) (to-list ((jit ctx (list (multiarray 2) ) +) (arr (2) (3)) 5))) (test-equal "compile and run 2D scale-array operation" '((7) (8)) (to-list ((jit ctx (list (multiarray 2)) +) 5 (arr (2) (3))))) (test-equal "compile and run operation involving 1D and 2D array" '((0 1 3) (0 2 4)) (to-list ((jit ctx (list (sequence ) (multiarray 2)) +) (seq -2 -3) (arr (2 3 5) (3 5 7))))) (let [(a (parameter )) (b (parameter )) (p (parameter (pointer )))] (test-equal "generate code to increment add a number" (list (ADD (value a) (value b))) (+= a b)) (test-equal "generate code to increment add a number stored in memory" (list (ADD (value a) (ptr (value p)))) (+= a p))) (test-end "binary +") (test-begin "binary -") (test-equal "subtract byte fro integer sequence" '(0 1 2) (to-list ((jit ctx (list (sequence ) ) -) (seq 1 2 3) 1))) (let [(a (parameter )) (b (parameter ))] (test-equal "generate code to subtract a number" (list (SUB (value a) (value b))) (-= a b))) (test-end "binary -") (test-begin "binary *") (test-equal "element-wise multiply an array of integers with two" '(2 4 6) (to-list ((jit ctx (list (sequence ) ) *) (seq 1 2 3) 2))) (let [(a (parameter )) (b (parameter ))] (test-equal "generate code to multiply a number" (list (IMUL (value a) (value b))) (*= a b))) (test-end "binary *") (test-begin "binary min") (test-eqv "get minor number of two integers (first case)" 2 ((jit ctx (list ) min) 2 3)) (test-eqv "get minor number of two integers (second case)" 2 ((jit ctx (list ) min) 3 2)) (test-eqv "get minor number of two unsigned integers (first case)" 32767 ((jit ctx (list ) min) 32767 32768)) (test-eqv "get minor number of two unsigned integers (second case)" 32767 ((jit ctx (list ) min) 32768 32767)) (test-eqv "get minor number of two signed integers" -1 ((jit ctx (list ) min) -1 1)) (test-eqv "get minor number of two unsigned bytes (first case)" 2 ((jit ctx (list ) min) 2 3)) (test-eqv "get minor number of two unsigned bytes (second case)" 2 ((jit ctx (list ) min) 3 2)) (test-eqv "get minor number of two bytes (first case)" -1 ((jit ctx (list ) min) -1 1)) (test-eqv "get minor number of two bytes (second case)" -1 ((jit ctx (list ) min) 1 -1)) (test-end "binary min") (test-begin "binary max") (test-eqv "get major number of two unsigned integers (first case)" 32768 ((jit ctx (list ) max) 32767 32768)) (test-eqv "get major number of two unsigned integers (second case)" 32768 ((jit ctx (list ) max) 32768 32767)) (test-eqv "get major number of two signed integers" 1 ((jit ctx (list ) max) -1 1)) (test-eqv "get major number of signed and unsigned short integers" 32768 ((jit ctx (list ) max) -1 32768)) (test-eqv "get major number of two unsigned bytes (first case)" 3 ((jit ctx (list ) max) 2 3)) (test-eqv "get major number of two unsigned bytes (second case)" 3 ((jit ctx (list ) max) 3 2)) (test-eqv "get major number of two bytes (first case)" 1 ((jit ctx (list ) max) -1 1)) (test-eqv "get major number of two bytes (second case)" 1 ((jit ctx (list ) max) 1 -1)) (let [(r (parameter )) (a (parameter )) (b (parameter ))] (test-equal "handle lack of support for 8-bit conditional move" (list (SUB RSP 8) (MOV DL AL) (CMP DL SIL) (JNBE #x3) (MOV DL SIL) (ADD RSP 8) (RET)) (resolve-jumps (jit-compile (attach (flatten-code ((term (max a b)) r)) (RET)))))) (test-end "binary max") (test-begin "convert-type") (test-eq "typecast for scalar type" (convert-type )) (test-eq "typecast element-type of array type" (sequence ) (convert-type (sequence ))) (test-end "convert-type") (test-begin "ternary where") (test-equal "coerce arguments for 'where'" (list ) (coerce-where-args )) (test-eq "scalar coercion for 'where'" (coerce-where )) (test-eq "coercion for 'where' using mask array" (sequence ) (coerce-where (sequence ) )) (test-eq "coercion for 'where' using array arguments" (sequence ) (coerce-where (sequence ) )) (test-eqv "select first value of two integers" 2 ((jit ctx (list ) where) #t 2 3)) (test-eqv "select second value of two integers" 3 ((jit ctx (list ) where) #f 2 3)) (test-eqv "select first value of two objects" 'a ((jit ctx (list ) where) #t 'a 'b)) (test-eqv "select second value of two objects" 'b ((jit ctx (list ) where) #f 'a 'b)) (test-end "ternary where") (test-begin "absolute value") (test-equal "compute absolute value for integers" '(2 1 0 1 2) (to-list (abs (seq -2 -1 0 1 2)))) (test-equal "compute absolute value for unsigned integers" '(254 255 0 1 2) (to-list (abs (seq 254 255 0 1 2)))) (test-equal "absolute value for sequence of Scheme objects" '(2 1 0 1 2) (to-list (abs (seq -2 -1 0 1 2)))) (test-end "absolute value") (test-end "aiscm operation") aiscm-0.15.1/tests/test_pointer.scm0000644000175000017500000001073313213600051014173 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;; (use-modules (srfi srfi-64) (oop goops) (system foreign) (ice-9 regex) (aiscm element) (aiscm pointer) (aiscm variable) (aiscm mem) (aiscm bool) (aiscm int) (aiscm obj) (aiscm expression) (aiscm jit)) (test-begin "aiscm pointer") (define p (make #:type #:symbol 'p)) (define m1 (make #:size 10)) (define m2 (make #:size 4)) (define p1-bool (make (pointer ) #:value m1)) (define p2-bool (make (pointer ) #:value m2)) (define p1-byte (make (pointer ) #:value m1)) (define p2-byte (make (pointer ) #:value m2)) (define p1-sint (make (pointer ) #:value m1)) (define p2-sint (make (pointer ) #:value m2)) (write-bytes m1 #vu8(1 2 3 4 5 6 7 8 9 10)) (write-bytes m2 #vu8(0 0 0 0)) (test-equal "equal pointer types" (pointer ) (pointer )) (test-equal "equal pointer types" (pointer ) (pointer (integer 8 signed))) (test-equal "equal pointers" p1-bool (make (pointer ) #:value m1)) (test-assert "unequal pointers" (not (equal? p1-bool p2-bool))) (test-assert "unequal pointers (different type)" (not (equal? p1-bool p1-byte))) (test-equal "display short integer object" "#<>> p:>>" (call-with-output-string (lambda (port) (display (make (pointer ) #:value p) port)))) (test-equal "fetch boolean from memory" (make #:value #t) (fetch p1-bool)) (test-equal "fetch byte from memory" (make #:value 1) (fetch p1-byte)) (test-equal "fetch short integer from memory" (make #:value #x0201) (fetch p1-sint)) (test-equal "storing and fetching back short int" (make #:value #x0201) (begin (store p2-sint #x0201) (fetch p2-sint))) (test-equal "pointer operations are aware of size of element" (+ m2 2) (get (+ p2-sint 1))) (test-eqv "convert pointer to bytevector containing raw data" (pointer-address (get-memory m1)) (get (unpack (pack p1-byte)))) (test-assert "write pointer object" (string-match "^#<>> .*>$" (call-with-output-string (lambda (port) (write p1-sint port))))) (test-assert "display pointer object" (string-match "^#<>> .*>$" (call-with-output-string (lambda (port) (display p1-sint port))))) (test-eqv "Memory is allocated if no value is specified" 4 (get-size (get (make (pointer ))))) (test-equal "Content of pointer value is the address as a number" (list (pointer-address (get-memory m1))) (unbuild > p1-byte)) (test-equal "Content of pointer is a list with the content of the pointer as an integer" (list (make #:value p)) (content (pointer ) (make (pointer ) #:value p))) (let [(p (parameter (pointer )))] (test-equal "content of pointer is based on same value" (get (delegate p)) (get (delegate (car (content (pointer ) p)))))) (test-eq "casting pointer preserves address" m1 (get (pointer-cast p1-sint))) (test-eq "casting pointer changes type" (typecode (pointer-cast p1-sint))) (test-assert "Pointer has no offset by default" (not (pointer-offset p1-bool))) (let* [(p (make (pointer ) #:value m1)) (q (set-pointer-offset p 123))] (test-eq "Associating pointer offset maintains value" m1 (get q)) (test-eq "Associated offset can be queried" 123 (pointer-offset q)) (test-assert "Original pointer remains without offset" (not (pointer-offset p)))) (test-assert "integer pointer memory is pointerless" (pointerless? (pointer ))) (test-assert "object pointer memory is not pointerless" (not (pointerless? (pointer )))) (test-end "aiscm pointer") aiscm-0.15.1/TODO.md0000644000175000017500000001526113220457302010705 00000000000000## Ready * LLVM ORC JIT C API: https://www.doof.me.uk/2017/05/11/using-orc-with-llvms-c-api/ * xorg\_scale\_video has frame offset * floating: VEX prefix, vcvttss2si, vcvtsi2ss, vmovss, vxorps), floor, ceil, round * "let" for tensors * structs, jit methods with multiple return values, packed objects (e.g. quaternion) * use bytevectors instead of memory objects? * check against NumPy, Theano, Tensorflow for completeness * assign array, assign sub-arrays -> Conway glider cannon <-> fill; jit <-> fill * Lucas-Kanade tracker * recognise Aruco marker cube, calibrated inverse kinematic * colour swapped when converting MJPEG video to FFmpeg video * tensor indices * procedural terrain detail generator (repeatable hashed detail/seeding, wavelet pyramid) * Debian sid FFmpeg API changes deprecated: avcodec\_encode\_video2, avcodec\_encode\_audio2, av\_free\_packet, codec, pkt\_pts, avcodec\_decode\_audio4, avcodec\_decode\_video2 * 2D-1D convolution, 2D-3D convolution (Sobel pair), 0D-0D convolution * camera calibration, robot inverse kinematics, robot speech processing * 1+, 1- * ==, != for complex numbers * galaxy simulation * to-type in tensor * floating point exception (SIGFPE) * floating point convolution: sharpening filter, corner filters * linear algebra bindings (blas, lapack, gsl, mkl) * separable convolution * convolve with set of sobel filters * convolution: \*, +=, dilation: first/conditional, max, ... * diagonal injection, convolution, median, dilation, ... * sum with multiple indices or no indices, standalone sum expression * index arrays, show fill status of glass of milk * inject: equality, sum, mininum, maximum of frames * pixel selection example (take reference from center pixels) * lookup, pseudo colour, warp * to-type in tensor expressions, implicit typecasting in tensor sum? * (tensor [i] (get m i 1)) (tensor i (project (get m i))) (tensor i (roll (get m i))) * dimension checks for array/tensor operations; array compatibility check * argmax * Ghost in the Shell style animations * audio frequency: bar analyser * GNOME video widget and player, Python/Qt/PyQt integration * how to run test suite * documentation for objects and arrays of objects * cast to higher integer type when doing a tensor injection * multiple use of one indexer (get s i i) -> merge lookups (tensor contraction) * parameter passing for sequences, map, tensor operations, replace fill and other? * equality of arrays * histogram with weights and customisable reduce operation (e.g. min instead of + to find bounding box for each component) * ffmpeg-input, ffmpeg-output class (instead of "is-input?") * Docker integration tests * audio, video output timestamps * pulse audio: use samples for reading and writing * module libraries without version numbers * Kinect difference picture/surveillance * virtual fighter * augmented reality sudoku solver https://github.com/jponttuset/sudoku * run integration tests in Docker container * open-video-output, open-audio-output, ... * check audio/video frame can be written * select video codec, select audio codec * video player with aspect ratio * integration tests for XVideo, OpenGL, and XImage * NArray-like reshaping, other narray stuff * record arrays, extendable type matching, map?, inject? * fractions, \*\* * separate function for defining operation for array? * separate module for register allocation * multi-threading, SIMD, memory access (cache) * add checks https://wiki.debian.org/HowToPackageForDebian, blhc, licensecheck * make project more self contained (remove web streaming integration test) * car, cadr, ... -> first, second, ... * index manipulation on function expressions * direct mapping instead of decompose-arg for rgb and complex? * document motivation/rationale: vector instructions, compose array functions and calls, see tensor paper Alan Kay, Ian Piumarta: mini-languages which step out of the way (instead of compiler black-box) * add docstrings, REPL docs: ,d ... http://www.draketo.de/proj/guile-basics/ * https://www.gnu.org/software/guile/manual/html\_node/Arrays.html#Arrays http://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64/ * red, green, blue, real-part, imag-part for objects * convert rgb to object, convert complex to object * convert object to rgb, convert object to complex * 256 -> boolean conversion * 32 -> boolean conversion * line-by-line delayed video * smeared video (weighted average of previous value and current frame) * ArUco markers robot control * hypercomplex numbers and quaternions * linalg bindings * Kinect bindings * OpenCV bindings * FFTW3 bindings * predator tracker * <-> Guile 6.7.5 Arrays * create relocatable code and use linker to insert calls with relative addresses * use (ice-9 match) to simplify and translate assembler code? https://www.gnu.org/software/guile/manual/html_node/Pattern-Matching.html * reading and writing with Guile file decriptors or Guile network sockets? * command-line tools, GUI tools (GNOME, GLADE): calibration, tracking, detection, speech processing, SLAM (hash-bang?) * keywords: data structures,digital signal processing,tensors,input/output (check standard theosaurus) * deduct sample time from delay in ffplay.scm * threads for reading and decoding audio/video (also requires caching code), etc/threads.scm * use ice-9 q? background decoder thread * synchronise with display to prevent video tearing * array stack/unstack/record arrays * https://github.com/antoniogarro/guile-matrix * test for planar/packed audio (see decoding\_encoding.c) http://kodi.wiki/view/Samples * use hash tables * use assp http://www.scheme.com/csug7/objects.html * conditional/select * upsampling (and documentation about up- and downsampling) * something like Ruby's Struct * complex abs (magnitude), complex arg (and real) * video -> panorama stitching (multiresolution) * web server * save/load 16 and 32 bit images * (arr (rgb 1 2 3)); (arr (integer 32 signed) 2 3 4) * lexical sort * AdaBoost, decision trees, random forests * distance transform, Chamfer matching http://www.gavrila.net/Research/Chamfer_System/chamfer_system.html * SLAM, inverse depth images * camera calibration * marker recognition * x11 display: error handling for 'show', timing * separate register allocation for better testing (<-> RSpec, Clojure Midje?), copy blocked predefined variables instead of spilling them * duplicate image * types composed of Scheme objects * xorg: fast OpenGL rendering of grayscale images (glDrawPixels) * subpixel corner detector using steerable filters * use thumbnail images to illustrate examples * red-cyan, 3d display (bino, libglewmx, libavdevice) * slimv, tcp/ip, attach http://www.codeproject.com/Questions/744389/Trying-to-setup-MJPEG-encoder-in-ffmpeg-in-Cpluspl * wisp (srfi-119), curly infix (srfi-105), guile --language=wisp aiscm-0.15.1/m4/0000755000175000017500000000000013220531466010215 500000000000000aiscm-0.15.1/m4/lt~obsolete.m40000644000175000017500000001377413213600470012757 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) aiscm-0.15.1/m4/libtool.m40000644000175000017500000112617113213600470012046 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # 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' ;; netbsdelf*-gnu) version_type=linux 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='NetBSD ld.elf_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* | netbsdelf*-gnu) 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* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _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 ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no 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* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS aiscm-0.15.1/m4/pkg.m40000644000175000017500000002400513213600051011146 00000000000000dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR aiscm-0.15.1/m4/ax_have_opengl.m40000644000175000017500000001310613213600051013344 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_have_opengl.html # =========================================================================== # # SYNOPSIS # # AX_HAVE_OPENGL # # DESCRIPTION # # Search for OpenGL. We search first for Mesa (a GPL'ed version of Mesa) # before a vendor's version of OpenGL, unless we were specifically asked # not to with `--with-Mesa=no' or `--without-Mesa'. # # The four "standard" OpenGL libraries are searched for: "-lGL", "-lGLU", # "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and "-lglut". # # All of the libraries that are found (since "-lglut" or "-lGLX" might be # missing) are added to the shell output variable "GL_LIBS", along with # any other libraries that are necessary to successfully link an OpenGL # application (e.g. the X11 libraries). Care has been taken to make sure # that all of the libraries in "GL_LIBS" are listed in the proper order. # # Additionally, the shell output variable "GL_CFLAGS" is set to any flags # (e.g. "-I" flags) that are necessary to successfully compile an OpenGL # application. # # The following shell variable (which are not output variables) are also # set to either "yes" or "no" (depending on which libraries were found) to # help you determine exactly what was found. # # have_GL # have_GLU # have_GLX # have_glut # # LICENSE # # Copyright (c) 2008 Matthew D. Langston # Copyright (c) 2008 Ahmet Inan # # This program is free software; you can 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. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # 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 4 AU_ALIAS([MDL_HAVE_OPENGL], [AX_HAVE_OPENGL]) AC_DEFUN([AX_HAVE_OPENGL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_PATH_X]) AC_REQUIRE([AC_PATH_XTRA]) AC_CACHE_CHECK([for OpenGL], ax_cv_have_OpenGL, [ dnl Check for Mesa first, unless we were asked not to. AC_ARG_WITH([--with-Mesa], [Prefer the Mesa library over a vendors native OpenGL library (default=yes)], with_Mesa_help_string) AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes) if test x"$use_Mesa" = xyes; then GL_search_list="MesaGL GL" GLU_search_list="MesaGLU GLU" GLX_search_list="MesaGLX GLX" else GL_search_list="GL MesaGL" GLU_search_list="GLU MesaGLU" GLX_search_list="GLX MesaGLX" fi AC_LANG_SAVE AC_LANG_C dnl If we are running under X11 then add in the appropriate libraries. if test x"$no_x" != xyes; then dnl Add everything we need to compile and link X programs to GL_X_CFLAGS dnl and GL_X_LIBS. GL_CFLAGS="$X_CFLAGS" GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS" fi GL_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$GL_CFLAGS" GL_save_LIBS="$LIBS" LIBS="$GL_X_LIBS" # Save the "AC_MSG_RESULT file descriptor" to FD 8. exec 8>&AC_FD_MSG # Temporarily turn off AC_MSG_RESULT so that the user gets pretty # messages. exec AC_FD_MSG>/dev/null AC_SEARCH_LIBS(glAccum, $GL_search_list, have_GL=yes, have_GL=no) AC_SEARCH_LIBS(gluBeginCurve, $GLU_search_list, have_GLU=yes, have_GLU=no) AC_SEARCH_LIBS(glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no) AC_SEARCH_LIBS(glutInit, glut, have_glut=yes, have_glut=no) # Restore pretty messages. exec AC_FD_MSG>&8 if test -n "$LIBS"; then ax_cv_have_OpenGL=yes GL_LIBS="$LIBS" AC_SUBST(GL_CFLAGS) AC_SUBST(GL_LIBS) else ax_cv_have_OpenGL=no GL_CFLAGS= fi dnl Reset GL_X_LIBS regardless, since it was just a temporary variable dnl and we don't want to be global namespace polluters. GL_X_LIBS= LIBS="$GL_save_LIBS" CPPFLAGS="$GL_save_CPPFLAGS" AC_LANG_RESTORE dnl bugfix: dont forget to cache this variables, too ax_cv_GL_CFLAGS="$GL_CFLAGS" ax_cv_GL_LIBS="$GL_LIBS" ax_cv_have_GL="$have_GL" ax_cv_have_GLU="$have_GLU" ax_cv_have_GLX="$have_GLX" ax_cv_have_glut="$have_glut" ]) GL_CFLAGS="$ax_cv_GL_CFLAGS" GL_LIBS="$ax_cv_GL_LIBS" have_GL="$ax_cv_have_GL" have_GLU="$ax_cv_have_GLU" have_GLX="$ax_cv_have_GLX" have_glut="$ax_cv_have_glut" ]) dnl endof bugfix -ainan aiscm-0.15.1/m4/ax_pthread.m40000644000175000017500000005052013213600051012505 00000000000000# =========================================================================== # http://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 23 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 aiscm-0.15.1/m4/ltversion.m40000644000175000017500000000127313213600470012421 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) aiscm-0.15.1/m4/ltoptions.m40000644000175000017500000003426213213600470012433 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) aiscm-0.15.1/m4/guile.m40000644000175000017500000002266013213600051011477 00000000000000## Autoconf macros for working with Guile. ## ## Copyright (C) 1998,2001, 2006, 2010 Free Software Foundation, Inc. ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public License ## as published by the Free Software Foundation; either version 3 of ## the License, or (at your option) any later version. ## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## Lesser General Public License for more details. ## ## You should have received a copy of the GNU Lesser General Public ## License along with this library; if not, write to the Free Software ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ## 02110-1301 USA # serial 10 ## Index ## ----- ## ## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs ## GUILE_FLAGS -- set flags for compiling and linking with Guile ## GUILE_SITE_DIR -- find path to Guile "site" directory ## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value ## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module ## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module ## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable ## GUILE_MODULE_EXPORTS -- check if a module exports a variable ## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable ## Code ## ---- ## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged ## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory). # GUILE_PROGS -- set paths to Guile interpreter, config and tool programs # # Usage: GUILE_PROGS # # This macro looks for programs @code{guile}, @code{guile-config} and # @code{guile-tools}, and sets variables @var{GUILE}, @var{GUILE_CONFIG} and # @var{GUILE_TOOLS}, to their paths, respectively. If either of the first two # is not found, signal error. # # The variables are marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_PROGS], [AC_PATH_PROG(GUILE,guile) if test "$GUILE" = "" ; then AC_MSG_ERROR([guile required but not found]) fi AC_SUBST(GUILE) AC_PATH_PROG(GUILE_CONFIG,guile-config) if test "$GUILE_CONFIG" = "" ; then AC_MSG_ERROR([guile-config required but not found]) fi AC_SUBST(GUILE_CONFIG) AC_PATH_PROG(GUILE_TOOLS,guile-tools) AC_SUBST(GUILE_TOOLS) ]) # GUILE_FLAGS -- set flags for compiling and linking with Guile # # Usage: GUILE_FLAGS # # This macro runs the @code{guile-config} script, installed with Guile, to # find out where Guile's header files and libraries are installed. It sets # four variables, @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, # and @var{GUILE_LTLIBS}. # # @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that # uses Guile header files. This is almost always just one or more @code{-I} # flags. # # @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program against # Guile. This includes @code{-lguile} for the Guile library itself, any # libraries that Guile itself requires (like -lqthreads), and so on. It may # also include one or more @code{-L} flag to tell the compiler where to find # the libraries. But it does not include flags that influence the program's # runtime search path for libraries, and will therefore lead to a program # that fails to start, unless all necessary libraries are installed in a # standard location such as @file{/usr/lib}. # # @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to # libtool, respectively, to link a program against Guile. It includes flags # that augment the program's runtime search path for libraries, so that shared # libraries will be found at the location where they were during linking, even # in non-standard locations. @var{GUILE_LIBS} is to be used when linking the # program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used # when linking the program is done through libtool. # # The variables are marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_FLAGS], [dnl Find guile-config. AC_REQUIRE([GUILE_PROGS])dnl AC_MSG_CHECKING([libguile compile flags]) GUILE_CFLAGS="`$GUILE_CONFIG compile`" AC_MSG_RESULT([$GUILE_CFLAGS]) AC_MSG_CHECKING([libguile link flags]) GUILE_LDFLAGS="`$GUILE_CONFIG link`" AC_MSG_RESULT([$GUILE_LDFLAGS]) dnl Determine the platform dependent parameters needed to use rpath. dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs dnl the file gnulib/build-aux/config.rpath. AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" AC_SUBST([GUILE_CFLAGS]) AC_SUBST([GUILE_LDFLAGS]) AC_SUBST([GUILE_LIBS]) AC_SUBST([GUILE_LTLIBS]) ]) # GUILE_SITE_DIR -- find path to Guile "site" directory # # Usage: GUILE_SITE_DIR # # This looks for Guile's "site" directory, usually something like # PREFIX/share/guile/site, and sets var @var{GUILE_SITE} to the path. # Note that the var name is different from the macro name. # # The variable is marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_SITE_DIR], [AC_REQUIRE([GUILE_PROGS])dnl AC_MSG_CHECKING(for Guile site directory) GUILE_SITE=`[$GUILE_CONFIG] info sitedir` if test "$GUILE_SITE" = ""; then GUILE_SITE=`[$GUILE_CONFIG] info pkgdatadir`/site fi AC_MSG_RESULT($GUILE_SITE) AC_SUBST(GUILE_SITE) ]) # GUILE_EXT_DIR -- find path to Guile "extensiondir" directory # # Usage: GUILE_EXT_DIR # # This looks for Guile's "extensiondir" directory. # # The variable is marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_EXT_DIR], [AC_REQUIRE([GUILE_PROGS])dnl AC_MSG_CHECKING(for Guile extensions directory) GUILE_EXT=`[$GUILE_CONFIG] info extensiondir` if test "$GUILE_EXT" = ""; then AC_MSG_ERROR([could not determine extensions directory]) fi AC_MSG_RESULT($GUILE_EXT) AC_SUBST(GUILE_EXT) ]) # GUILE_CACHE_DIR -- find path to Guile "ccachedir" directory # # Usage: GUILE_CACHE_DIR # # This looks for Guile's "ccachedir" directory. # # The variable is marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_CACHE_DIR], [AC_REQUIRE([GUILE_PROGS])dnl AC_MSG_CHECKING(for Guile compiler cache directory) GUILE_CACHE=`[$GUILE] -c "(display (cdr (assoc 'ccachedir %guile-build-info)))"` if test "$GUILE_CACHE" = ""; then AC_MSG_ERROR([could not determine compiler cache directory]) fi AC_MSG_RESULT($GUILE_CACHE) AC_SUBST(GUILE_CACHE) ]) # GUILE_CHECK -- evaluate Guile Scheme code and capture the return value # # Usage: GUILE_CHECK_RETVAL(var,check) # # @var{var} is a shell variable name to be set to the return value. # @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and # returning either 0 or non-#f to indicate the check passed. # Non-0 number or #f indicates failure. # Avoid using the character "#" since that confuses autoconf. # AC_DEFUN([GUILE_CHECK], [AC_REQUIRE([GUILE_PROGS]) $GUILE -c "$2" > /dev/null 2>&1 $1=$? ]) # GUILE_MODULE_CHECK -- check feature of a Guile Scheme module # # Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) # # @var{var} is a shell variable name to be set to "yes" or "no". # @var{module} is a list of symbols, like: (ice-9 common-list). # @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. # @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). # AC_DEFUN([GUILE_MODULE_CHECK], [AC_MSG_CHECKING([if $2 $4]) GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi AC_MSG_RESULT($$1) ]) # GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module # # Usage: GUILE_MODULE_AVAILABLE(var,module) # # @var{var} is a shell variable name to be set to "yes" or "no". # @var{module} is a list of symbols, like: (ice-9 common-list). # AC_DEFUN([GUILE_MODULE_AVAILABLE], [GUILE_MODULE_CHECK($1,$2,0,is available) ]) # GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable # # Usage: GUILE_MODULE_REQUIRED(symlist) # # @var{symlist} is a list of symbols, WITHOUT surrounding parens, # like: ice-9 common-list. # AC_DEFUN([GUILE_MODULE_REQUIRED], [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) if test "$ac_guile_module_required" = "no" ; then AC_MSG_ERROR([required guile module not found: ($1)]) fi ]) # GUILE_MODULE_EXPORTS -- check if a module exports a variable # # Usage: GUILE_MODULE_EXPORTS(var,module,modvar) # # @var{var} is a shell variable to be set to "yes" or "no". # @var{module} is a list of symbols, like: (ice-9 common-list). # @var{modvar} is the Guile Scheme variable to check. # AC_DEFUN([GUILE_MODULE_EXPORTS], [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') ]) # GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable # # Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) # # @var{module} is a list of symbols, like: (ice-9 common-list). # @var{modvar} is the Guile Scheme variable to check. # AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) if test "$guile_module_required_export" = "no" ; then AC_MSG_ERROR([module $1 does not export $2; required]) fi ]) ## guile.m4 ends here aiscm-0.15.1/m4/ltsugar.m40000644000175000017500000001044013213600470012051 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) aiscm-0.15.1/aiscm/0000755000175000017500000000000013220531467010772 500000000000000aiscm-0.15.1/aiscm/util.c0000644000175000017500000000270313220457302012030 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" SCM gc_malloc(SCM scm_size) { size_t size = scm_to_int(scm_size); void *ptr = scm_gc_malloc(size, "scm_gc_malloc"); SCM *p = ptr; int i; for (i=0; i // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 void init_ringbuffer_tests(void); void init_ffmpeg_helpers_tests(void); void init_jit_tests(void); void init_util_helpers_tests(void); void init_samples_helpers_tests(void); void init_tests(void) { init_ringbuffer_tests(); init_ffmpeg_helpers_tests(); init_jit_tests(); init_util_helpers_tests(); init_samples_helpers_tests(); } aiscm-0.15.1/aiscm/ringbuffer.h0000644000175000017500000000255013213600050013201 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #pragma once struct ringbuffer_t { int fill; int read_offset; int write_offset; int size; char *buffer; }; typedef void (*ringbuffer_callback_t)(char *data, int count, int offset, void *userdata); void ringbuffer_init(struct ringbuffer_t *ringbuffer, int size); void ringbuffer_destroy(struct ringbuffer_t *ringbuffer); void ringbuffer_fetch(struct ringbuffer_t *ringbuffer, int count, ringbuffer_callback_t callback, void *userdata); void ringbuffer_store(struct ringbuffer_t *ringbuffer, const char *data, int count); void ringbuffer_flush(struct ringbuffer_t *ringbuffer); aiscm-0.15.1/aiscm/operation.scm0000644000175000017500000004112013213600050013377 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm operation) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (ice-9 curried-definitions) #:use-module (aiscm element) #:use-module (aiscm scalar) #:use-module (aiscm bool) #:use-module (aiscm int) #:use-module (aiscm pointer) #:use-module (aiscm sequence) #:use-module (aiscm asm) #:use-module (aiscm command) #:use-module (aiscm variable) #:use-module (aiscm expression) #:use-module (aiscm loop) #:use-module (aiscm method) #:use-module (aiscm util) #:export (make-constant-function native-const need-conversion? code-needs-intermediate? operand force-parameters cumulative-code operation-code mutating-code functional-code unary-extract convert-type ge gt le lt coerce-where-args -= ~= += *= <<= >>= &= |= ^= &&= ||= min= max= abs=) #:re-export (duplicate size-of min max + - && || ! == != ~ & | ^ << >> % =0 !=0 where abs) #:export-syntax (define-operator-mapping let-skeleton* let-parameter let-parameter*)) (define* ((native-data native) out) (list (MOV (get (delegate out)) (get native)))) (define (make-constant-function native) (make-function make-constant-function (const (return-type native)) (native-data native) '())) (define (native-const type value) (make-constant-function (native-value type value))) (define-method (operand (a )) (get a)) (define-method (operand (a >)) (if (pointer-offset a) (ptr (typecode a) (get a) (pointer-offset a)) (ptr (typecode a) (get a)))) (define-method (operand (a )) (operand (delegate a))) (define-method (need-conversion? target type) (not (eq? target type))) (define-method (need-conversion? (target >>) (type >>)) (not (eqv? (size-of target) (size-of type)))) (define-method (need-conversion? (target >) (type >>)) (not (eqv? (size-of target) (size-of type)))) (define-method (need-conversion? (target >>) (type >)) (not (eqv? (size-of target) (size-of type)))) (define-method (force-parameters (targets ) args predicate fun) (let* [(mask (map predicate targets args)) (intermediates (map-select mask (compose parameter car list) (compose cadr list) targets args)) (preamble (concatenate (map-select mask duplicate (const '()) intermediates args)))] (attach preamble (apply fun intermediates)))) (define-method (force-parameters target args predicate fun) (force-parameters (make-list (length args) target) args predicate fun)) (define-syntax let-prototype (lambda (x) (syntax-case x () ((let-prototype prototype [] body ...) #'(list body ...)) ((let-prototype prototype [(var type) definitions ...] body ...) #'(let [(var (prototype type))] (let-prototype prototype [definitions ...] body ...))) ((let-prototype prototype [(var type expr) definitions ...] body ...) #'(let [(var (prototype type))] (append (duplicate var expr) (let-prototype prototype [definitions ...] body ...))))))) (define-syntax-rule (let-parameter* definitions body ...) (let-prototype parameter definitions body ...)) (define-syntax-rule (let-skeleton* definitions body ...) (let-prototype skeleton definitions body ...)) (define-method (duplicate (a ) (b )) ((to-type (typecode a) (typecode b)) (parameter a) (parameter b))) (define-method (duplicate (a ) (b )) (list (MOV (operand a) b))) (define-method (duplicate (a >) (b >)) (let-skeleton* [(tmp (typecode a) b)] (duplicate a tmp))) (define-method (duplicate (a ) (b )) (duplicate (delegate a) (delegate b))) (define-method (duplicate (a ) (b )) (let [(dest (multi-loop a)) (source (multi-loop b))] (append (append-map loop-setup (loop-details dest)) (append-map loop-setup (loop-details source)) (repeat 0 (dimension a) (duplicate (body dest) (body source)) (append-map loop-increment (append (loop-details dest) (loop-details source))))))) (define-method (duplicate (out ) (fun )) (if (need-conversion? (typecode out) (type fun)) (let-skeleton* [(tmp (type fun) fun)] (duplicate out tmp)) ((term fun) (parameter out)))) (define-method (duplicate (out >) (fun )) (let-skeleton* [(tmp (typecode out) fun)] (duplicate out tmp))) (define-method (duplicate (out ) (fun )) (duplicate (delegate out) fun)) (define-method (duplicate (out ) (value )) (duplicate out (native-const (type out) value))) (define-method (duplicate (a ) (b )) (let [(t (multi-loop (delegate b) (index b)))] (append (append-map loop-setup (loop-details t)) (let-parameter* [(tmp (typecode a) (body t))] (append-map loop-increment (loop-details t)) (repeat 1 (dimension-hint (index b)) ((name b) tmp (body t)) (append-map loop-increment (loop-details t))) (duplicate a tmp))))) (define-method (duplicate (a ) (b )) (letrec* [(kernel-loop (lambda (tmp data kernel dsteps ksteps klowers kuppers kends) (let-parameter* [(dptr (array-pointer data)) (kptr (max (array-pointer kernel) (+ (array-pointer kernel) (last klowers)))) (klast (+ (array-pointer kernel) (min (last kends) (last kuppers))))] (if (<= (dimensions (type kernel)) 1) (append (duplicate tmp (* (rebase dptr data) (project (rebase kptr kernel)))) (+= kptr (last ksteps)) (-= dptr (last dsteps)) (each-element kptr klast (last ksteps) (+= tmp (* (rebase dptr data) (project (rebase kptr kernel)))) (-= dptr (last dsteps)))) (append (kernel-loop tmp (rebase dptr data) (project (rebase kptr kernel)) (all-but-last dsteps) (all-but-last ksteps) (all-but-last klowers) (all-but-last kuppers) (all-but-last kends)) (+= kptr (last ksteps)) (-= dptr (last dsteps)) (each-element kptr klast (last ksteps) (let-parameter* [(intermediate (type tmp))] (kernel-loop intermediate (rebase dptr data) (project (rebase kptr kernel)) (all-but-last dsteps) (all-but-last ksteps) (all-but-last klowers) (all-but-last kuppers) (all-but-last kends)) (+= tmp intermediate) (-= dptr (last dsteps))))))))) (data-loop (lambda (out data kernel kshape kstrides dsteps ksteps klowers kuppers kends) (let-parameter* [(offset (>> (last kshape))) (astep (* (stride out) (native-const (size-of (typecode out))))) (aptr (array-pointer out)) (alast (+ (array-pointer out) (* (dimension out) astep))) (dstep (* (stride data) (native-const (size-of (typecode data))))) (dupper (+ (array-pointer data) (* offset dstep))) (dlast (+ (array-pointer data) (- (* (dimension data) dstep) dstep))) (kstep (* (last kstrides) (native-const (size-of (typecode kernel))))) (klower (+ (* (- offset (dimension data)) kstep) kstep)) (kend (* (last kshape) kstep)) (kupper (+ (* offset kstep) kstep))] (each-element aptr alast astep (let-parameter* [(dptr (min dupper dlast))] (if (<= (dimensions (type data)) 1) (let-parameter* [(tmp (typecode out))] (kernel-loop tmp (project (rebase dptr data)) kernel (cons dstep dsteps) (cons kstep ksteps) (cons klower klowers) (cons kupper kuppers) (cons kend kends)) (duplicate (project (rebase aptr out)) tmp)) (data-loop (project (rebase aptr out)) (project (rebase dptr data)) kernel (all-but-last kshape) (all-but-last kstrides) (cons dstep dsteps) (cons kstep ksteps) (cons klower klowers) (cons kupper kuppers) (cons kend kends) ))) (+= klower kstep) (+= kupper kstep) (+= dupper dstep)))))] (data-loop a (car (delegate b)) (cadr (delegate b)) (shape (cadr (delegate b))) (strides (cadr (delegate b))) '() '() '() '() '()))) (define-method (size-of (self )) (apply * (native-const (size-of (typecode (type self)))) (shape self))) (define (code-needs-intermediate? t value) (or (is-a? value ) (is-a? value ) (need-conversion? t (type value)))) (define-method (convert-type (target >) (self >)) target) (define-method (convert-type (target >) (self >>)) (multiarray target (dimensions self))) (define (coerce-where-args m a b) "Coercion for boolean selection using 'where'" (let [(choice-type (coerce a b))] (list m choice-type choice-type))) (define (operation-code targets op out args) "Adapter for nested expressions" (force-parameters targets args code-needs-intermediate? (lambda intermediates (apply op (operand out) (map operand intermediates))))) (define ((cumulative-code op) out . args) "Adapter for cumulative operations" (operation-code (type out) op out args)) (define ((mutating-code name) out . args) "Adapter for machine code overwriting its first argument" (append (duplicate out (car args)) (apply name out (cdr args)))) (define ((functional-code coercion op) out . args) "Adapter for machine code without side effects on its arguments" (operation-code (apply coercion (map type args)) op out args)) (define ((unary-extract op) out . args) "Adapter for machine code to extract part of a composite value" (duplicate (delegate out) (apply op (map delegate args)))) (define-macro (define-operator-mapping name types fun) (let [(header (typed-header2 (symbol-list (length types)) types))] `(define-method (,name ,@header) ,fun))) (define-operator-mapping -= (>> ) (cumulative-code NEG )) (define-operator-mapping ~= (>> ) (cumulative-code NOT )) (define-operator-mapping abs= (>> ) (cumulative-code cmp-abs )) (define-operator-mapping <<= (>> ) (cumulative-code shl )) (define-operator-mapping >>= (>> ) (cumulative-code shr )) (define-operator-mapping += (>> >>) (cumulative-code ADD )) (define-operator-mapping -= (>> >>) (cumulative-code SUB )) (define-operator-mapping *= (>> >>) (cumulative-code IMUL )) (define-operator-mapping <<= (>> >>) (cumulative-code shl )) (define-operator-mapping >>= (>> >>) (cumulative-code shr )) (define-operator-mapping &= (>> >>) (cumulative-code AND )) (define-operator-mapping |= (>> >>) (cumulative-code OR )) (define-operator-mapping ^= (>> >>) (cumulative-code XOR )) (define-operator-mapping &&= (> > ) (cumulative-code bool-and)) (define-operator-mapping ||= (> > ) (cumulative-code bool-or )) (define-operator-mapping min= (>> >>) (cumulative-code minor )) (define-operator-mapping max= (>> >>) (cumulative-code major )) ; define unary and binary operations (define-method (+ (a )) a) (define-method (+ (a )) a) (define-method (* (a )) a) (define-method (* (a )) a) (define-operator-mapping - (>> ) (mutating-code -= )) (define-method (- (z ) (a >>)) (mutating-code -=)) (define-operator-mapping ~ (>> ) (mutating-code ~= )) (define-operator-mapping abs (>> ) (mutating-code abs=)) (define-operator-mapping =0 (>> ) (functional-code identity test-zero )) (define-operator-mapping !=0 (>> ) (functional-code identity test-non-zero )) (define-operator-mapping ! (> ) (functional-code identity test-zero )) (define-operator-mapping << (>> ) (mutating-code <<= )) (define-operator-mapping >> (>> ) (mutating-code >>= )) (define-operator-mapping + (>> >>) (mutating-code += )) (define-operator-mapping - (>> >>) (mutating-code -= )) (define-operator-mapping * (>> >>) (mutating-code *= )) (define-operator-mapping << (>> >>) (mutating-code <<= )) (define-operator-mapping >> (>> >>) (mutating-code >>= )) (define-operator-mapping & (>> >>) (mutating-code &= )) (define-operator-mapping | (>> >>) (mutating-code |= )) (define-operator-mapping ^ (>> >>) (mutating-code ^= )) (define-operator-mapping && (> > ) (mutating-code &&= )) (define-operator-mapping || (> > ) (mutating-code ||= )) (define-operator-mapping min (>> >>) (mutating-code min=)) (define-operator-mapping max (>> >>) (mutating-code max=)) (define-operator-mapping / (>> >>) (functional-code coerce div )) (define-operator-mapping % (>> >>) (functional-code coerce mod )) (define-operator-mapping == (>> >>) (functional-code coerce cmp-equal )) (define-operator-mapping != (>> >>) (functional-code coerce cmp-not-equal )) (define-operator-mapping lt (>> >>) (functional-code coerce cmp-lower-than )) (define-operator-mapping le (>> >>) (functional-code coerce cmp-lower-equal )) (define-operator-mapping gt (>> >>) (functional-code coerce cmp-greater-than )) (define-operator-mapping ge (>> >>) (functional-code coerce cmp-greater-equal)) (define-operator-mapping where (> >> >>) (functional-code coerce-where-args cmp-where)) aiscm-0.15.1/aiscm/magick.c0000644000175000017500000001022613213600050012275 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" SCM magick_read_image(SCM scm_file_name) { SCM retval = SCM_UNDEFINED; const char *file_name = scm_to_locale_string(scm_file_name); ExceptionInfo *exception_info = AcquireExceptionInfo(); ImageInfo *image_info = CloneImageInfo((ImageInfo *)NULL); CopyMagickString(image_info->filename, file_name, MaxTextExtent); Image *images = ReadImage(image_info, exception_info); if (exception_info->severity < ErrorException) { CatchException(exception_info); Image *image = RemoveFirstImageFromList(&images); char grey = image->colorspace == GRAYColorspace; const char *format = grey ? "I" : "RGB"; int width = image->columns; int height = image->rows; int bytes_per_pixel = grey ? 1 : 3; int size = width * height * bytes_per_pixel; void *base = scm_gc_malloc_pointerless(size + 15, "aiscm magick frame"); #if defined __x86_64__ void *mem = (void *)(((int64_t)base + 15) & -16); #else void *mem = (void *)(((int32_t)base + 15) & -16); #endif ExportImagePixels(image, 0, 0, width, height, format, CharPixel, mem, exception_info); if (exception_info->severity < ErrorException) { CatchException(exception_info); retval = scm_list_5(scm_from_locale_symbol(format), scm_list_2(scm_from_int(width), scm_from_int(height)), scm_from_pointer(base, NULL), scm_from_pointer(mem, NULL), scm_from_int(size)); }; DestroyImage(image); }; SCM scm_reason = exception_info->severity < ErrorException ? SCM_UNDEFINED : scm_from_locale_string(exception_info->reason); DestroyImageInfo(image_info); DestroyExceptionInfo(exception_info); if (scm_reason != SCM_UNDEFINED) scm_misc_error("magick-read-image", "~a", scm_list_1(scm_reason)); return retval; } SCM magick_write_image(SCM scm_format, SCM scm_shape, SCM scm_mem, SCM scm_file_name) { int width = scm_to_int(scm_car(scm_shape)); int height = scm_to_int(scm_cadr(scm_shape)); void *mem = scm_to_pointer(scm_mem); ExceptionInfo *exception_info = AcquireExceptionInfo(); ImageInfo *image_info = AcquireImageInfo(); GetImageInfo(image_info); const char *format = scm_to_locale_string(scm_symbol_to_string(scm_format)); Image *image = ConstituteImage(width, height, format, CharPixel, mem, exception_info); if (exception_info->severity < ErrorException) { CatchException(exception_info); Image *images = NewImageList(); AppendImageToList(&images, image); const char *file_name = scm_to_locale_string(scm_file_name); WriteImages(image_info, images, file_name, exception_info); if (exception_info->severity < ErrorException) CatchException(exception_info); DestroyImageList(images); }; SCM scm_reason = exception_info->severity < ErrorException ? SCM_UNDEFINED : scm_from_locale_string(exception_info->reason); DestroyImageInfo(image_info); DestroyExceptionInfo(exception_info); if (scm_reason != SCM_UNDEFINED) scm_misc_error("magick-write-image", "~a", scm_list_1(scm_reason)); return SCM_UNSPECIFIED; } void init_magick(void) { MagickCoreGenesis("libguile-magick", MagickTrue); scm_c_define_gsubr("magick-read-image" , 1, 0, 0, SCM_FUNC(magick_read_image )); scm_c_define_gsubr("magick-write-image", 4, 0, 0, SCM_FUNC(magick_write_image)); } aiscm-0.15.1/aiscm/xorg.c0000644000175000017500000006243413213600050012031 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" #include "aiscm.xpm" #ifndef timersub #define timersub(a, b, result) \ do { \ (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ if ((result)->tv_usec < 0) { \ --(result)->tv_sec; \ (result)->tv_usec += 1000000; \ } \ } while (0) #endif static scm_t_bits display_tag; static scm_t_bits window_tag; struct display_t { Display *display; SCM scm_windows; SCM scm_ports; char quit; }; struct window_t { struct display_t *display; Window window; enum {IO_XIMAGE, IO_OPENGL, IO_XVIDEO} io; int width; int height; Colormap color_map; XVisualInfo *visual_info; GC gc; SCM scm_image; SCM scm_converted; Atom wm_protocols; Atom wm_delete_window; XvPortID port; int require_color_key; int color_key; XvImage *xv_image; }; typedef struct { unsigned long flags; unsigned long functions; unsigned long decorations; long inputMode; unsigned long status; } Hints; static struct display_t *get_display_no_check(SCM scm_self) { return (struct display_t *)SCM_SMOB_DATA(scm_self); } static struct display_t *get_display(SCM scm_self) { scm_assert_smob_type(display_tag, scm_self); return get_display_no_check(scm_self); } static struct window_t *get_window_no_check(SCM scm_self) { return (struct window_t *)SCM_SMOB_DATA(scm_self); } static struct window_t *get_window(SCM scm_self) { scm_assert_smob_type(window_tag, scm_self); return get_window_no_check(scm_self); } SCM window_destroy(SCM scm_self); SCM display_destroy(SCM scm_self) { struct display_t *self = get_display_no_check(scm_self); while (!scm_is_null_and_not_nil(self->scm_windows)) window_destroy(scm_car(self->scm_windows)); if (self->display) { XCloseDisplay(self->display); self->display = NULL; }; return SCM_UNSPECIFIED; } size_t free_display(SCM scm_self) { struct display_t *self = get_display_no_check(scm_self); display_destroy(scm_self); scm_gc_free(self, sizeof(struct display_t), "display"); return 0; } SCM make_display(SCM scm_name) { SCM retval; struct display_t *self; const char *name = scm_to_locale_string(scm_name); Display *display = XOpenDisplay(*name == '\0' ? (const char *)NULL : name); if (!display) scm_syserror("make-display"); self = (struct display_t *)scm_gc_calloc(sizeof(struct display_t), "display"); SCM_NEWSMOB(retval, display_tag, self); self->scm_windows = SCM_EOL; self->scm_ports = SCM_EOL; self->display = display; return retval; } SCM display_shape(SCM scm_self) { struct display_t *self = get_display(scm_self); int width = DisplayWidth(self->display, DefaultScreen(self->display)); int height = DisplayHeight(self->display, DefaultScreen(self->display)); return scm_list_2(scm_from_int(width), scm_from_int(height)); } static Bool always_true(Display *display, XEvent *event, XPointer pointer) { return True; } void window_paint(struct window_t *window, int x11_event); void handle_event(struct display_t *self, XEvent *event) { SCM scm_windows = self->scm_windows; struct window_t *window = NULL; while (!scm_is_null_and_not_nil(scm_windows)) { struct window_t *w = get_window(scm_car(scm_windows)); if (w->window == event->xany.window) { window = w; break; }; scm_windows = scm_cdr(scm_windows); }; if (window) { switch (event->type) { case ClientMessage: if ((event->xclient.message_type == window->wm_protocols ) && ((Atom)event->xclient.data.l[0] == window->wm_delete_window)) self->quit = 1; break; case KeyPress: switch (event->xkey.keycode) { case 0x09: case 0x41: self->quit = 1; }; break; case ConfigureNotify: while (XCheckTypedWindowEvent(self->display, window->window, ConfigureNotify, event)); if (window->io == IO_XIMAGE) window->scm_converted = SCM_UNDEFINED; window->width = event->xconfigure.width; window->height = event->xconfigure.height; window_paint(window, 1); break; case Expose: while (XCheckTypedWindowEvent(self->display, window->window, Expose, event)); window_paint(window, 1); break; }; }; } SCM display_process_events(SCM scm_self) { XEvent event; struct display_t *self = get_display(scm_self); while (XCheckIfEvent(self->display, &event, always_true, NULL)) handle_event(self, &event); return scm_self; } SCM display_event_loop(SCM scm_self, SCM scm_timeout) { struct display_t *self = get_display(scm_self); if (!scm_is_false(scm_timeout)) { double timeout = scm_to_double(scm_timeout); struct timeval t0; double elapsed; gettimeofday(&t0, NULL); do { display_process_events(scm_self); struct timeval t; struct timeval difference; int usecs_remaining; gettimeofday(&t, NULL); timersub(&t, &t0, &difference); elapsed = difference.tv_sec + difference.tv_usec * 1.0E-6; usecs_remaining = (int)((timeout - elapsed) * 1.0E+6); if (usecs_remaining > 0) { struct timeval tval; tval.tv_usec = usecs_remaining % 1000000; tval.tv_sec = usecs_remaining / 1000000; int fd = ConnectionNumber(self->display); fd_set fds; FD_ZERO(&fds); FD_SET(fd, &fds); select(fd + 1, &fds, NULL, NULL, &tval); }; } while (!self->quit && elapsed < timeout); } else { while (!self->quit) { XEvent event; XNextEvent(self->display, &event); handle_event(self, &event); }; }; return scm_self; } SCM display_quit(SCM scm_self) { struct display_t *self = get_display(scm_self); return self->quit ? SCM_BOOL_T : SCM_BOOL_F; } SCM display_set_quit(SCM scm_self, SCM scm_quit) { struct display_t *self = get_display(scm_self); self->quit = scm_quit != SCM_BOOL_F; return display_quit(scm_self); } SCM window_destroy(SCM scm_self) { struct window_t *self = get_window_no_check(scm_self); if (self->xv_image) { XFree(self->xv_image); self->xv_image = NULL; }; if (self->port) { XvUngrabPort(self->display->display, self->port, CurrentTime); self->display->scm_ports = scm_delete(scm_from_int(self->port), self->display->scm_ports); self->port = 0; }; if (self->gc) { XFreeGC(self->display->display, self->gc); self->gc = 0; }; if (self->window) { XDestroyWindow(self->display->display, self->window); self->window = 0; }; if (self->color_map) { XFreeColormap(self->display->display, self->color_map); self->color_map = 0; }; if (self->display) { self->display->scm_windows = scm_delete(scm_self, self->display->scm_windows); self->display = NULL; }; return SCM_UNSPECIFIED; } size_t free_window(SCM scm_self) { struct window_t *self = get_window_no_check(scm_self); window_destroy(scm_self); scm_gc_free(self, sizeof(struct window_t), "window"); return 0; } Atom findAtom(Display *display, XvPortID port, const char *name) { XvAttribute *attributes; int numAttributes; Atom retVal = None; attributes = XvQueryPortAttributes(display, port, &numAttributes); if (attributes) { int i; for (i=0; iscm_image = SCM_UNDEFINED; self->scm_converted = SCM_UNDEFINED; struct display_t *display = get_display(scm_display); self->display = display; self->io = scm_to_int(scm_io); self->width = scm_to_int(scm_width); self->height = scm_to_int(scm_height); switch (self->io) { case IO_XIMAGE: self->visual_info = (XVisualInfo *)scm_gc_malloc_pointerless(sizeof(XVisualInfo), "XVisualInfo"); if (!XMatchVisualInfo(display->display, DefaultScreen(display->display), 24, TrueColor, self->visual_info)) scm_syserror("make-window"); break; case IO_OPENGL: { int attributes[] = {GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_DEPTH_SIZE, 0, None}; self->visual_info = glXChooseVisual(display->display, DefaultScreen(display->display), attributes); if (!self->visual_info) scm_syserror("make-window"); break;} case IO_XVIDEO: { XWindowAttributes attributes; XGetWindowAttributes(display->display, DefaultRootWindow(display->display), &attributes); int depth; switch ( attributes.depth ) { case 15: case 16: case 24: case 32: depth = attributes.depth; break; default: depth = 24; }; self->visual_info = (XVisualInfo *)scm_gc_malloc_pointerless(sizeof(XVisualInfo), "XVisualInfo"); if (!XMatchVisualInfo(display->display, DefaultScreen(display->display), depth, TrueColor, self->visual_info)) scm_syserror("make-window"); unsigned int ver, rel, req, ev, err; if (XvQueryExtension(display->display, &ver, &rel, &req, &ev, &err) != Success) scm_misc_error("make-xwindow", "Failure requesting X video extension", SCM_EOL); unsigned int numAdaptors; XvAdaptorInfo *adaptorInfo = NULL; if (XvQueryAdaptors(display->display, DefaultRootWindow(display->display), &numAdaptors, &adaptorInfo) != Success) scm_misc_error("make-xwindow", "Error requesting information about X video adaptors", SCM_EOL); int i; for (i=0; i<(signed)numAdaptors; i++) { int mask = XvInputMask | XvImageMask; if ((adaptorInfo[i].type & mask) == mask) { int p; int idBegin = adaptorInfo[i].base_id; int idEnd = idBegin + adaptorInfo[i].num_ports; for (p=idBegin; p!=idEnd; p++) if (scm_is_false_and_not_nil(scm_memv(scm_from_int(p), display->scm_ports)) && XvGrabPort(display->display, p, CurrentTime) == Success) { display->scm_ports = scm_cons(scm_from_int(p), display->scm_ports); self->port = p; break; }; }; if (self->port != 0) break; }; XvFreeAdaptorInfo(adaptorInfo); if (self->port == 0) scm_misc_error("make-xwindow", "Could not find a free port for X video output", SCM_EOL); Atom xvColorKey = findAtom(display->display, self->port, "XV_COLORKEY"); if (xvColorKey != None) { self->require_color_key = 1; if (XvGetPortAttribute(display->display, self->port, xvColorKey, &self->color_key) != Success) scm_misc_error("make-xwindow", "Error reading value of color-key", SCM_EOL); Atom xvAutoPaint = findAtom(display->display, self->port, "XV_AUTOPAINT_COLORKEY"); if (xvAutoPaint != None) XvSetPortAttribute(display->display, self->port, xvAutoPaint, 0); }; break;} }; self->color_map = XCreateColormap(display->display, DefaultRootWindow(display->display), self->visual_info->visual, AllocNone); if (!self->color_map) scm_syserror("make-window"); XSetWindowAttributes attributes; attributes.colormap = self->color_map; attributes.event_mask = KeyPressMask | ExposureMask | StructureNotifyMask; self->window = XCreateWindow(display->display, RootWindow(display->display, self->visual_info->screen), 0, 0, self->width, self->height, 0, self->visual_info->depth, InputOutput, self->visual_info->visual, CWColormap | CWEventMask, &attributes); if (!self->window) scm_syserror("make-window"); // Initialise graphics context XGCValues xgcv; self->gc = XCreateGC(display->display, self->window, 0L, &xgcv); if (!self->gc) scm_syserror("make-window"); // Do not delete window when it is closed. self->wm_protocols = XInternAtom(display->display, "WM_PROTOCOLS", False); self->wm_delete_window = XInternAtom(display->display, "WM_DELETE_WINDOW", False); XSetWMProtocols(display->display, self->window, &self->wm_delete_window, 1); // Set window icon XWMHints wm_hints; XpmCreatePixmapFromData(display->display, self->window, aiscm_xpm, &wm_hints.icon_pixmap, &wm_hints.icon_mask, 0); wm_hints.flags = IconPixmapHint | IconMaskHint; XSetWMHints(display->display, self->window, &wm_hints); display->scm_windows = scm_cons(retval, display->scm_windows); return retval; } static Bool wait_for_notify(Display *d, XEvent *e, char *arg) { return (e->type == MapNotify || e->type == UnmapNotify) && (e->xmap.window == (Window)arg); } void fullscreen_mode(Display *display, Window window, char on) { // Turn on/off fullscreen // https://pyra-handheld.com/boards/threads/x11-fullscreen-howto.70443/ XEvent event; Atom wm_state = XInternAtom(display, "_NET_WM_STATE", False); Atom fullscreen = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", False); memset(&event, 0, sizeof(event)); event.type = ClientMessage; event.xclient.window = window; event.xclient.message_type = wm_state; event.xclient.format = 32; event.xclient.data.l[0] = on; event.xclient.data.l[1] = fullscreen; event.xclient.data.l[2] = 0; XSendEvent(display, DefaultRootWindow(display), False, SubstructureRedirectMask | SubstructureNotifyMask, &event); } SCM window_show(SCM scm_self) { XEvent event; struct window_t *self = get_window(scm_self); Display *display = self->display->display; XMapWindow(display, self->window); fullscreen_mode(display, self->window, 0); XCheckIfEvent(display, &event, wait_for_notify, (char *)self->window); return scm_self; } SCM window_show_fullscreen(SCM scm_self) { XEvent event; struct window_t *self = get_window(scm_self); Display *display = self->display->display; XMapWindow(display, self->window); fullscreen_mode(display, self->window, 1); XCheckIfEvent(display, &event, wait_for_notify, (char *)self->window); return scm_self; } SCM window_title(SCM scm_self, SCM scm_title) { struct window_t *self = get_window(scm_self); XStoreName(self->display->display, self->window, scm_to_locale_string(scm_title)); return scm_title; } SCM window_resize(SCM scm_self, SCM scm_width, SCM scm_height) { struct window_t *self = get_window(scm_self); int width = scm_to_int(scm_width), height = scm_to_int(scm_height); XResizeWindow(self->display->display, self->window, width, height); self->width = width; self->height = height; XFlush(self->display->display); return scm_self; } SCM window_write(SCM scm_self, SCM scm_image) { struct window_t *self = get_window(scm_self); self->scm_image = scm_image; self->scm_converted = SCM_UNDEFINED; window_paint(self, 0); return scm_image; } SCM window_move(SCM scm_self, SCM scm_x, SCM scm_y) { XEvent event; struct window_t *self = get_window(scm_self); XMoveWindow(self->display->display, self->window, scm_to_int(scm_x), scm_to_int(scm_y)); XFlush(self->display->display); return scm_self; } SCM window_move_resize(SCM scm_self, SCM scm_x, SCM scm_y, SCM scm_width, SCM scm_height) { XEvent event; struct window_t *self = get_window(scm_self); XMoveResizeWindow(self->display->display, self->window, scm_to_int(scm_x), scm_to_int(scm_y), scm_to_int(scm_width), scm_to_int(scm_height)); XFlush(self->display->display); return scm_self; } SCM window_hide(SCM scm_self) { XEvent event; struct window_t *self = get_window(scm_self); XUnmapWindow(self->display->display, self->window); XCheckIfEvent(self->display->display, &event, wait_for_notify, (char *)self->window); return scm_self; } static SCM scm_convert_image; void gl_error(const char *context) { SCM msg = SCM_EOL; while (1) { GLenum err = glGetError(); if (err == GL_NO_ERROR) break; msg = scm_cons(scm_from_locale_string((const char *)gluErrorString(err)), msg); }; SCM str = scm_list_1(scm_string_join(msg, scm_from_locale_string(", "), scm_from_locale_symbol("infix"))); scm_misc_error(context, "~a", scm_list_1(str)); } SCM scm_xv_formats(Display *display, int port) { SCM retval = SCM_EOL; int n; XvImageFormatValues *formats = XvListImageFormats(display, port, &n); int i; for (i=0; iscm_image)) { switch (self->io) { case IO_XIMAGE: { if (SCM_UNBNDP(self->scm_converted)) self->scm_converted = scm_call_3(scm_convert_image, self->scm_image, scm_from_locale_symbol("BGRA"), scm_list_2(scm_from_int(self->width), scm_from_int(self->height))); char *data = image_data(self->scm_converted); XImage *img = XCreateImage(self->display->display, self->visual_info->visual, 24, ZPixmap, 0, data, self->width, self->height, 32, self->width * 4); if (!img) scm_syserror("window-paint"); img->byte_order = LSBFirst; XPutImage(self->display->display, self->window, self->gc, img, 0, 0, 0, 0, self->width, self->height); img->data = (char *)NULL; XDestroyImage(img); break;} case IO_OPENGL: { if (SCM_UNBNDP(self->scm_converted)) self->scm_converted = scm_call_2(scm_convert_image, self->scm_image, scm_from_locale_symbol("RGB")); GLXContext context = glXCreateContext(self->display->display, self->visual_info, 0, GL_TRUE); if (!context) gl_error("window-paint"); if (!glXMakeCurrent(self->display->display, self->window, context)) gl_error("window-paint"); glLoadIdentity(); glViewport(0, 0, self->width, self->height); glOrtho(0, self->width, self->height, 0, -1.0, 1.0); glDisable(GL_DITHER); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glRasterPos2i(0, 0); SCM shape = scm_slot_ref(self->scm_converted, scm_from_locale_symbol("shape")); int width = scm_to_int(scm_car(shape)), height = scm_to_int(scm_cadr(shape)); char *data = image_data(self->scm_converted); glPixelZoom((float)self->width / width, -(float)self->height / height); glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, data); glEnable(GL_DITHER); glFinish(); glXDestroyContext(self->display->display, context); break;}; case IO_XVIDEO: { if (x11_event && self->require_color_key) { XSetForeground(self->display->display, self->gc, self->color_key); XFillRectangle(self->display->display, self->window, self->gc, 0, 0, self->width, self->height); }; SCM scm_formats = scm_xv_formats(self->display->display, self->port); SCM scm_format = scm_slot_ref(self->scm_image, scm_from_locale_symbol("format")); SCM scm_target = scm_assoc(scm_format, scm_formats); if (scm_is_false_and_not_nil(scm_target)) scm_target = scm_car(scm_formats); int uid = scm_to_int(scm_cdr(scm_target)); SCM scm_shape = scm_slot_ref(self->scm_image, scm_from_locale_symbol("shape")); int width = scm_to_int(scm_car(scm_shape)), height = scm_to_int(scm_cadr(scm_shape)); if (self->xv_image) if (self->xv_image->id != uid || self->xv_image->width != width || self->xv_image->height != height) { XFree(self->xv_image); self->xv_image = NULL; }; if (!self->xv_image) self->xv_image = XvCreateImage(self->display->display, self->port, uid, NULL, width, height); if (SCM_UNBNDP(self->scm_converted)) { SCM scm_offsets = scm_int_list(self->xv_image->num_planes, self->xv_image->offsets); SCM scm_pitches = scm_int_list(self->xv_image->num_planes, self->xv_image->pitches); self->scm_converted = scm_call_5(scm_convert_image, self->scm_image, scm_car(scm_target), scm_shape, scm_offsets, scm_pitches); }; self->xv_image->data = image_data(self->scm_converted); XvPutImage(self->display->display, self->port, self->window, self->gc, self->xv_image, 0, 0, width, height, 0, 0, self->width, self->height); break;} }; }; } void init_xorg(void) { scm_convert_image = scm_c_public_ref("aiscm image", "convert-image"); display_tag = scm_make_smob_type("display", sizeof(struct display_t)); window_tag = scm_make_smob_type("window", sizeof(struct window_t)); scm_set_smob_free(display_tag, free_display); scm_set_smob_free(window_tag, free_window); scm_c_define("IO-XIMAGE" ,scm_from_int(IO_XIMAGE)); scm_c_define("IO-OPENGL" ,scm_from_int(IO_OPENGL)); scm_c_define("IO-XVIDEO" ,scm_from_int(IO_XVIDEO)); scm_c_define_gsubr("make-display" , 1, 0, 0, SCM_FUNC(make_display )); scm_c_define_gsubr("display-shape" , 1, 0, 0, SCM_FUNC(display_shape )); scm_c_define_gsubr("display-process-events", 1, 0, 0, SCM_FUNC(display_process_events)); scm_c_define_gsubr("display-event-loop" , 2, 0, 0, SCM_FUNC(display_event_loop )); scm_c_define_gsubr("display-quit?" , 1, 0, 0, SCM_FUNC(display_quit )); scm_c_define_gsubr("display-quit=" , 2, 0, 0, SCM_FUNC(display_set_quit )); scm_c_define_gsubr("display-destroy" , 1, 0, 0, SCM_FUNC(display_destroy )); scm_c_define_gsubr("make-window" , 4, 0, 0, SCM_FUNC(make_window )); scm_c_define_gsubr("window-show" , 1, 0, 0, SCM_FUNC(window_show )); scm_c_define_gsubr("window-show-fullscreen", 1, 0, 0, SCM_FUNC(window_show_fullscreen)); scm_c_define_gsubr("window-title=" , 2, 0, 0, SCM_FUNC(window_title )); scm_c_define_gsubr("window-resize" , 3, 0, 0, SCM_FUNC(window_resize )); scm_c_define_gsubr("window-move-resize" , 5, 0, 0, SCM_FUNC(window_move_resize )); scm_c_define_gsubr("window-write" , 2, 0, 0, SCM_FUNC(window_write )); scm_c_define_gsubr("window-move" , 3, 0, 0, SCM_FUNC(window_move )); scm_c_define_gsubr("window-hide" , 1, 0, 0, SCM_FUNC(window_hide )); scm_c_define_gsubr("window-destroy" , 1, 0, 0, SCM_FUNC(window_destroy )); } aiscm-0.15.1/aiscm/magick.scm0000644000175000017500000000461513213600050012642 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm magick) #:use-module (oop goops) #:use-module (aiscm util) #:use-module (aiscm mem) #:use-module (aiscm element) #:use-module (aiscm pointer) #:use-module (aiscm rgb) #:use-module (aiscm int) #:use-module (aiscm sequence) #:use-module (aiscm jit) #:re-export (> >> >> >>> read-image write-image)) (load-extension "libguile-aiscm-magick" "init_magick") (define-method (read-image (file-name )) (let [(picture (magick-read-image file-name)) (array-type (lambda (format) (multiarray (if (eq? format 'I) ) 2))) (memory (lambda (base mem size) (make #:base base #:memory mem #:size size))) (array (lambda (array-type shape memory) (make array-type #:shape shape #:value memory)))] (apply (lambda (format shape base mem size) (array (array-type format) shape (memory base mem size))) picture))) (define-method (write-image (img >) (file-name )) (let [(format (cond ((eq? (typecode img) ) 'I) ((eq? (typecode img) ) 'RGB) (else #f))) (compacted (ensure-default-strides img))] (if (not format) (aiscm-error 'write-image "Saving of typecode ~a not supported" (typecode img))) (if (not (eqv? (dimensions img) 2)) (aiscm-error 'write-image "Image must have 2 dimensions but had ~a" (dimensions img))) (magick-write-image format (shape compacted) (get-memory (value compacted)) file-name) img)) aiscm-0.15.1/aiscm/samples-helpers-tests.c0000644000175000017500000000303513213600050015306 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "samples-helpers.h" #include "util-helpers.h" SCM first_pointer_from_offset(void) { uint8_t buffer[4] = {2, 3, 5, 7}; uint8_t *p = &buffer[0]; uint8_t *data[1]; int64_t offsets[1] = {3}; pointers_from_offsets(p, offsets, data, 1); return scm_from_bool(7 == *data[0]); } SCM second_pointer_from_offset(void) { uint8_t buffer[4] = {2, 3, 5, 7}; uint8_t *p = &buffer[0]; uint8_t *data[2]; int64_t offsets[2] = {3, 2}; pointers_from_offsets(p, offsets, data, 2); return scm_from_bool(5 == *data[1]); } void init_samples_helpers_tests(void) { scm_c_define_gsubr("first-pointer-from-offset" , 0, 0, 0, SCM_FUNC(first_pointer_from_offset )); scm_c_define_gsubr("second-pointer-from-offset", 0, 0, 0, SCM_FUNC(second_pointer_from_offset)); } aiscm-0.15.1/aiscm/sequence.scm0000644000175000017500000002325413213600050013217 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm sequence) #:use-module (oop goops) #:use-module (ice-9 optargs) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (system foreign) #:use-module (aiscm element) #:use-module (aiscm int) #:use-module (aiscm pointer) #:use-module (aiscm util) #:use-module (aiscm mem) #:export (>> > sequence seq multiarray to-list to-array default-strides dump crop project roll unroll downsample dimension stride element) #:export-syntax (arr) #:re-export (> >> >> >>>)) (define-class* > >> > (shape #:init-keyword #:shape #:getter shape) (strides #:init-keyword #:strides #:getter strides)) (define (default-strides shape) (map (compose (cut apply * <>) (cut list-head shape <>)) (iota (length shape)))) (define (sequence type . args) (if (is-a? type >) (if (null? args) (template-class (sequence type) > (lambda (class metaclass) (define-method (initialize (self class) initargs) (let-keywords initargs #f (shape size value strides) (let* [(value (or value (make #:pointerless (pointerless? type) #:size (* (size-of (typecode type)) (or size (apply * shape)))))) (shape (or shape (list size))) (strides (or strides (default-strides shape)))] (next-method self (list #:value value #:shape shape #:strides strides))))) (define-method (project (self metaclass)) (pointer type)) (define-method (dimensions (self metaclass)) (1+ (dimensions type))) (define-method (typecode (self metaclass)) (typecode type)))) (to-array type args)) (to-array (cons type args)))) (define seq sequence) (define-syntax-rule (arr arg1 args ...) (if (is-a? (quote arg1) ) (to-array arg1 '(args ...)) (to-array '(arg1 args ...)))) (define-method (pointerless? (self >>)) (pointerless? (typecode self))) (define-method (pointer (target-class >>)) target-class) (define (multiarray type dimensions) (if (zero? dimensions) (pointer type) (multiarray (sequence type) (1- dimensions)))) (define-method (stride (self >)) (last (strides self))) (define-method (dimension (self >)) (last (shape self))) (define-method (size (self >)) (apply * (shape self))) (define-method (size-of (self >)) (* (size self) (size-of (typecode self)))) (define-method (project (self >)) (make (project (class-of self)) #:value (value self) #:shape (all-but-last (shape self)) #:strides (all-but-last (strides self)))) (define-method (crop (n ) (self >)) (make (class-of self) #:value (value self) #:shape (attach (all-but-last (shape self)) n) #:strides (strides self))) (define-method (crop (n ) (self >)) self) (define-method (crop (n ) (self >)) (crop (last n) (roll (crop (all-but-last n) (unroll self))))) (define-method (rebase value (self >)) (make (class-of self) #:value value #:shape (shape self) #:strides (strides self))) (define-method (dump (offset ) (self >)) (let [(value (+ (value self) (* offset (last (strides self)) (size-of (typecode self)))))] (rebase value (crop (- (last (shape self)) offset) self)))) (define-method (dump (n ) (self >)) self) (define-method (dump (n ) (self >)) (dump (last n) (roll (dump (all-but-last n) (unroll self))))) (define-method (element (offset ) self) (project (dump offset self))) (define-method (element (offset ) self) (unroll (crop (- (cdr offset) (car offset)) (dump (car offset) self)))) (define-method (fetch (self >)) self) (define-method (get (self >) . args) (if (null? args) self (get (fetch (fold-right element self args))))) (define-method (store (self >) value) (for-each (compose (cut store <> value) (cut element <> self)) (iota (last (shape self)))) value) (define-method (store (self >) (value )) value) (define-method (store (self >) (value )) (store (project self) (car value)) (store (dump 1 self) (cdr value)) value) (define-method (to-list self) self) (define-method (to-list (self >)) (map (compose to-list (cut get self <>)) (iota (last (shape self))))) (define-method (shape (self )) #f) (define-method (shape (self )) (attach (shape (car self)) (length self))) (define-method (to-array (lst )) (to-array (apply native-type (flatten lst)) lst)) (define-method (to-array (typecode >) (lst )) (let* [(shape (shape lst)) (retval (make (multiarray typecode (length shape)) #:shape shape))] (store retval lst) retval)) (define (print-columns self first infix count width port) (if (zero? count) (begin (if first (display "(" port)) (display ")" port)) (let* [(text (call-with-output-string (cut display (get (fetch (project self))) <>))) (remaining (- width (string-length text) 1))] (display (if first "(" infix) port) (if (positive? remaining) (begin (display text port) (print-columns (dump 1 self) #f infix (1- count) remaining port)) (begin (display "...)" port))))) 1) (define (print-rows self first infix count height port) (if (zero? count) (begin (if first (display "(" port)) (if (positive? height) (display ")" port)) height) (if (> height 0) (begin (display (if first "(" infix) port) (let [(h (if (> (dimensions self) 2) (print-rows (project self) #t (string-append infix " ") (last (shape (project self))) height port) (begin (print-columns (project self) #t " " (car (shape self)) (- 80 2) port) (if (= height 1) (display "\n ..." port)) (1- height))))] (print-rows (dump 1 self) #f infix (1- count) h port))) height))) (define (print-elements self port) (if (> (dimensions self) 1) (print-rows self #t "\n " (last (shape self)) (- 11 1) port) (print-columns self #t " " (car (shape self)) (- 80 2) port))) (define-method (write (self >) port) (if (is-a? (value self) ) (begin (format port "#~a:~%" (class-name (class-of self))) (print-elements self port)) (format port "#<~a ~a ~a ~a>" (class-name (class-of self)) (value self) (shape self) (strides self)))) (define-method (coerce (a >>) (b >)) (multiarray (coerce (typecode a) b) (dimensions a))) (define-method (coerce (a >) (b >>)) (multiarray (coerce a (typecode b)) (dimensions b))) (define-method (coerce (a >>) (b >>)) (multiarray (coerce (typecode a) (typecode b)) (max (dimensions a) (dimensions b)))) (define (roll self) (make (class-of self) #:value (value self) #:shape (cycle (shape self)) #:strides (cycle (strides self)))) (define (unroll self) (make (class-of self) #:value (value self) #:shape (uncycle (shape self)) #:strides (uncycle (strides self)))) (define-method (downsample (n ) (self >)) (let [(shape (shape self)) (strides (strides self))] (make (class-of self) #:value (value self) #:shape (attach (all-but-last shape) (quotient (+ (1- n) (last shape)) n)) #:strides (attach (all-but-last strides) (* n (last strides)))))) (define-method (downsample (n ) (self >)) self) (define-method (downsample (n ) (self >)) (downsample (last n) (roll (downsample (all-but-last n) (unroll self))))) (define-method (build (self >>) lst) (let [(shape (reverse (map (cut list-ref lst <>) (iota (dimensions self) 0 2)))) (strides (reverse (map (cut list-ref lst <>) (iota (dimensions self) 1 2))))] (make self #:strides strides #:shape shape #:value (make #:base (make-pointer (last lst)) #:size (apply * (size-of (typecode self)) shape))))) (define-method (unbuild (type >>) self) (cons (dimension self) (cons (stride self) (unbuild (project type) (project self))))) (define-method (content (type >>) (self >)) (cons (make #:value (dimension self)) (cons (make #:value (stride self)) (content (project type) (project self))))) (define-method (signed? (self >>)) (signed? (typecode self))) aiscm-0.15.1/aiscm/mem.scm0000644000175000017500000000533313213600050012163 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm mem) #:use-module (oop goops) #:use-module (ice-9 optargs) #:use-module (ice-9 format) #:use-module (rnrs bytevectors) #:use-module (system foreign) #:use-module (aiscm element) #:use-module (aiscm util) #:export ( get-memory read-bytes write-bytes)) (define-class () (memory #:init-keyword #:memory #:getter get-memory) (base #:init-keyword #:base) (size #:init-value 0 #:init-keyword #:size #:getter get-size)) (define (align16 ptr) (make-pointer (logand (+ (pointer-address ptr) #xf) #x-10))) (define-method (initialize (self ) initargs) (let-keywords initargs #f (memory base size pointerless) (if base (next-method self (list #:memory (or memory base) #:base base #:size size)) (let* [(malloc (if pointerless gc-malloc-pointerless gc-malloc)) (ptr (malloc (+ size 15)))] (next-method self (list #:memory (align16 ptr) #:base ptr #:size size)))))) (define-generic +) (define-method (+ (self ) (offset )) (let [(size (get-size self))] (if (negative? offset) (aiscm-error '+ "Offset not be lower than zero but was ~a" offset) (make #:memory (make-pointer (+ offset (pointer-address (get-memory self)))) #:base (slot-ref self 'base) #:size (- size offset))))) (define-method (equal? (a ) (b )) (equal? (get-memory a) (get-memory b))) (define-method (read-bytes (self ) (size )) (if (> size (get-size self)) (aiscm-error 'read-bytes "Attempt to read ~a bytes from memory of size ~a" size (get-size self)) (pointer->bytevector (get-memory self) size))) (define-method (write-bytes (self ) (bv )) (bytevector-copy! bv 0 (pointer->bytevector (get-memory self) (get-size self)) 0 (bytevector-length bv))) (define-method (write (self ) port) (format port "#< #x~x ~a>" (pointer-address (get-memory self)) (get-size self))) aiscm-0.15.1/aiscm/samples.scm0000644000175000017500000001150613213600050013050 00000000000000(define-module (aiscm samples) #:use-module (oop goops) #:use-module (ice-9 optargs) #:use-module (srfi srfi-1) #:use-module (aiscm mem) #:use-module (aiscm util) #:use-module (aiscm element) #:use-module (aiscm int) #:use-module (aiscm float) #:use-module (aiscm sequence) #:use-module (aiscm jit) #:export ( > AV_SAMPLE_FMT_U8 AV_SAMPLE_FMT_S16 AV_SAMPLE_FMT_S32 AV_SAMPLE_FMT_FLT AV_SAMPLE_FMT_DBL AV_SAMPLE_FMT_U8P AV_SAMPLE_FMT_S16P AV_SAMPLE_FMT_S32P AV_SAMPLE_FMT_FLTP AV_SAMPLE_FMT_DBLP planar? to-samples convert-samples convert-samples-from! type+planar->sample-format sample-format->type sample-format->planar) #:re-export (typecode shape channels rate to-array size-of)) (load-extension "libguile-aiscm-samples" "init_samples") (define-class* > (typecode #:init-keyword #:typecode #:getter typecode) (shape #:init-keyword #:shape #:getter shape ) (rate #:init-keyword #:rate #:getter rate ) (offsets #:init-keyword #:offsets #:getter offsets ) (planar #:init-keyword #:planar #:getter planar? ) (mem #:init-keyword #:mem )) (define-method (initialize (self ) initargs) "Convert for images" (let-keywords initargs #f (typecode shape rate offsets planar mem) (let [(offsets (or offsets (if planar (iota (car shape) 0 (* (size-of typecode) (cadr shape))) '(0)))) (mem (or mem (make #:size (apply * (size-of typecode) shape) #:pointerless #t)))] (next-method self (list #:typecode typecode #:shape shape #:rate rate #:offsets offsets #:planar planar #:mem mem))))) (define-method (channels (self )) "Get number of audio channels of audio samples" (car (shape self))) (define-method (size-of (self )) "Memory size of audio samples in bytes" (apply * (size-of (typecode self)) (shape self))) (define-method (to-array (self )) "Convert audio samples to a numerical array" (if (planar? self) (to-array (convert-samples self (typecode self) #f)) (make (multiarray (typecode self) 2) #:shape (shape self) #:value (slot-ref self 'mem)))) (define (to-samples self rate) "Convert numerical array to audio samples" (let [(shape (if (eqv? (dimensions self) 1) (cons 1 (shape self)) (shape self))) (compacted (ensure-default-strides self))] (make #:typecode (typecode self) #:shape shape #:planar #f #:rate rate #:mem (slot-ref compacted 'value)))) (define typemap-packed (list (cons AV_SAMPLE_FMT_U8 ) (cons AV_SAMPLE_FMT_S16 ) (cons AV_SAMPLE_FMT_S32 ) (cons AV_SAMPLE_FMT_FLT ) (cons AV_SAMPLE_FMT_DBL ))) (define typemap-planar (list (cons AV_SAMPLE_FMT_U8P ) (cons AV_SAMPLE_FMT_S16P) (cons AV_SAMPLE_FMT_S32P) (cons AV_SAMPLE_FMT_FLTP) (cons AV_SAMPLE_FMT_DBLP))) (define inverse-typemap (append (alist-invert typemap-packed) (alist-invert typemap-planar))) (define (type+planar->sample-format type planar) "Convert type and planar/packed information to type tag" (or (assq-ref (if planar typemap-planar typemap-packed) type) (aiscm-error 'type+planar->sample-format "Type ~a not supported by FFmpeg audio" type))) (define (sample-format->type sample-format) "Get type information for type tag" (assq-ref inverse-typemap sample-format)) (define (sample-format->planar sample-format) "Check whether a sample format is planar" (not (memv sample-format (map cdr typemap-packed)))) (define (descriptor self) (list (type+planar->sample-format (typecode self) (planar? self)) (shape self) (rate self) (offsets self))) (define (convert-samples-from! destination source) "Convert audio samples from source to destination format" (let [(source-type (descriptor source)) (dest-type (descriptor destination))] (samples-convert (get-memory (slot-ref source 'mem)) source-type (get-memory (slot-ref destination 'mem)) dest-type))) (define (convert-samples self typecode planar) "Convert audio samples using the specified attributes" (let* [(size (apply * (size-of typecode) (shape self))) (destination (make #:typecode typecode #:shape (shape self) #:rate (rate self) #:planar planar #:mem (make #:size size #:pointerless #t)))] (convert-samples-from! destination self) destination)) aiscm-0.15.1/aiscm/loop.scm0000644000175000017500000000673313213600050012363 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm loop) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (aiscm int) #:use-module (aiscm asm) #:use-module (aiscm element) #:use-module (aiscm sequence) #:use-module (aiscm variable) #:use-module (aiscm expression) #:export ( iterator step loop-setup loop-increment loop-details body multi-loop) #:re-export (typecode stride base)) (define-class () (typecode #:init-keyword #:typecode #:getter typecode) (iterator #:init-keyword #:iterator #:getter iterator) (step #:init-keyword #:step #:getter step ) (stride #:init-keyword #:stride #:getter stride ) (base #:init-keyword #:base #:getter base )) (define (loop-setup self) (list (IMUL (step self) (value (stride self)) (size-of (typecode self))) (MOV (iterator self) (base self)))) (define (loop-increment self) (list (ADD (iterator self) (step self)))) (define-class () (loop-details #:init-keyword #:loop-details #:getter loop-details) (body #:init-keyword #:body #:getter body )) (define-method (multi-loop (self ) (idx )) (if (eq? idx (index self)) (let* [(iterator (var )) (step (var )) (loop-detail (make #:typecode (typecode self) #:iterator iterator #:step step #:stride (stride self) #:base (value self)))] (make #:loop-details (list loop-detail) #:body (rebase iterator (delegate self)))) (let [(t (multi-loop (delegate self) idx))] (make #:loop-details (loop-details t) #:body (lookup (index self) (body t) (stride self)))))) (define-method (multi-loop (self ) (idx )) (let [(t (multi-loop (delegate self) idx))] (make #:loop-details (loop-details t) #:body (indexer (index self) (body t) (dimension self))))) (define-method (multi-loop (self )) (multi-loop (delegate self) (index self))) (define-method (multi-loop (self ) . idx) (let* [(arguments (map (cut apply multi-loop <> idx) (delegate self))) (details (append-map loop-details arguments)) (bodies (map body arguments))] (make #:loop-details details #:body (apply (name self) bodies)))) (define-method (multi-loop (self ) . idx) (make #:loop-details '() #:body self)) aiscm-0.15.1/aiscm/image.c0000644000175000017500000000744313213600050012133 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" static void image_setup(SCM scm_type, enum AVPixelFormat *format, int *width, int *height, uint8_t *data[], int32_t pitches[], void *ptr) { int i; int64_t offsets[8]; memset(offsets, 0, sizeof(offsets)); *format = scm_to_int(scm_car(scm_type)); *width = scm_to_int(scm_caadr(scm_type)), *height = scm_to_int(scm_cadadr(scm_type)); scm_to_long_array(scm_caddr(scm_type), offsets); scm_to_int_array(scm_cadddr(scm_type), pitches); for (i=0; i<8; i++) data[i] = (uint8_t *)ptr + offsets[i]; } SCM image_convert(SCM scm_ptr, SCM scm_source_type, SCM scm_dest_ptr, SCM scm_dest_type) { enum AVPixelFormat format; int width, height; void *ptr = scm_to_pointer(scm_ptr); uint8_t *source_data[8]; int32_t source_pitches[8]; memset(source_pitches, 0, sizeof(source_pitches)); image_setup(scm_source_type, &format, &width, &height, source_data, source_pitches, ptr); enum AVPixelFormat dest_format; int dest_width, dest_height; void *dest_ptr = scm_to_pointer(scm_dest_ptr); uint8_t *dest_data[8]; int32_t dest_pitches[8]; memset(dest_pitches, 0, sizeof(dest_pitches)); image_setup(scm_dest_type, &dest_format, &dest_width, &dest_height, dest_data, dest_pitches, dest_ptr); struct SwsContext *sws_context = sws_getContext(width, height, format, dest_width, dest_height, dest_format, SWS_FAST_BILINEAR, 0, 0, 0); sws_scale(sws_context, (const uint8_t * const *)source_data, source_pitches, 0, height, dest_data, dest_pitches); sws_freeContext(sws_context); return SCM_UNSPECIFIED; } SCM mjpeg_to_yuv420p(SCM scm_source_ptr, SCM scm_shape, SCM scm_dest_ptr, SCM scm_offsets) { unsigned char *source_ptr = scm_to_pointer(scm_source_ptr); unsigned char *dest_ptr = scm_to_pointer(scm_dest_ptr); int width = scm_to_int(scm_car(scm_shape)); int height = scm_to_int(scm_cadr(scm_shape)); int64_t offsets[3]; memset(offsets, 0, sizeof(offsets)); scm_to_long_array(scm_offsets, offsets); decode_jpeg_raw(source_ptr, width * height * 2, Y4M_ILACE_NONE, 0, width, height, dest_ptr + offsets[0], dest_ptr + offsets[2], dest_ptr + offsets[1]); return SCM_UNSPECIFIED; } void init_image(void) { scm_c_define("AV_PIX_FMT_RGB24" , scm_from_int(AV_PIX_FMT_RGB24)); scm_c_define("AV_PIX_FMT_BGR24" , scm_from_int(AV_PIX_FMT_BGR24)); scm_c_define("AV_PIX_FMT_BGRA" , scm_from_int(AV_PIX_FMT_BGRA)); scm_c_define("AV_PIX_FMT_GRAY8" , scm_from_int(AV_PIX_FMT_GRAY8)); scm_c_define("AV_PIX_FMT_YUV420P", scm_from_int(AV_PIX_FMT_YUV420P)); scm_c_define("AV_PIX_FMT_UYVY422", scm_from_int(AV_PIX_FMT_UYVY422)); scm_c_define("AV_PIX_FMT_YUYV422", scm_from_int(AV_PIX_FMT_YUYV422)); scm_c_define_gsubr("image-convert" , 4, 0, 0, SCM_FUNC(image_convert )); scm_c_define_gsubr("mjpeg-to-yuv420p", 4, 0, 0, SCM_FUNC(mjpeg_to_yuv420p)); } aiscm-0.15.1/aiscm/ringbuffer-tests.c0000644000175000017500000001746213213600050014344 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "ringbuffer.h" #include "util-helpers.h" static void test_empty_callback(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 0; } SCM ringbuffer_fetch_empty(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 1024); char retval = 0; ringbuffer_fetch(&ringbuffer, 123, test_empty_callback, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } SCM ringbuffer_initial_size(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 1024); SCM retval = scm_from_bool(ringbuffer.size == 1024); ringbuffer_destroy(&ringbuffer); return retval; } SCM ringbuffer_add_data(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 1024); char data[100]; ringbuffer_store(&ringbuffer, data, 100); SCM retval = scm_from_bool(ringbuffer.fill == 100); ringbuffer_destroy(&ringbuffer); return retval; } static void test_fetch_callback(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 5 && strcmp(data, "test") == 0; } SCM ringbuffer_store_and_fetch(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 1024); ringbuffer_store(&ringbuffer, "test", 5); char retval = 0; ringbuffer_fetch(&ringbuffer, 123, test_fetch_callback, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } static void test_append_callback(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 9 && strcmp(data, "testmore") == 0; } SCM ringbuffer_store_appends_data(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 1024); ringbuffer_store(&ringbuffer, "test", 4); ringbuffer_store(&ringbuffer, "more", 5); char retval = 0; ringbuffer_fetch(&ringbuffer, 123, test_append_callback, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } static void test_limit_callback(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 4 && strncmp(data, "test", 4) == 0; } SCM ringbuffer_fetch_limit(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 1024); ringbuffer_store(&ringbuffer, "testmore", 9); char retval = 0; ringbuffer_fetch(&ringbuffer, 4, test_limit_callback, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } static void test_advances_callback(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 4 && strncmp(data, "more", 4) == 0; } SCM ringbuffer_fetching_advances(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 1024); ringbuffer_store(&ringbuffer, "testmore", 9); char retval = 0; ringbuffer_fetch(&ringbuffer, 4, test_advances_callback, &retval); ringbuffer_fetch(&ringbuffer, 4, test_advances_callback, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } static void test_offset_callback(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 4 && strncmp(data, "cdef", 4) == 0; } SCM ringbuffer_storing_respects_offset(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 1024); char retval = 0; ringbuffer_store(&ringbuffer, "abcd", 4); ringbuffer_fetch(&ringbuffer, 2, test_offset_callback, &retval); ringbuffer_store(&ringbuffer, "ef", 3); ringbuffer_fetch(&ringbuffer, 4, test_offset_callback, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } static void test_wrap_callback(char *data, int count, int offset, void *userdata) { memcpy((char *)userdata + offset, data, count); } SCM ringbuffer_wrap_around(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 4); char buf[5]; buf[4] = '\0'; ringbuffer_store(&ringbuffer, "abcd", 4); ringbuffer_fetch(&ringbuffer, 2, test_wrap_callback, buf); ringbuffer_store(&ringbuffer, "ef", 2); ringbuffer_fetch(&ringbuffer, 4, test_wrap_callback, buf); SCM retval = scm_from_bool(!strncmp(ringbuffer.buffer, "efcd", 4) && !strcmp(buf, "cdef") && ringbuffer.read_offset == 2); ringbuffer_destroy(&ringbuffer); return retval; } static void test_grow_callback(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 8 && strncmp(data, "abcdefgh", 8) == 0; } SCM ringbuffer_grow(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 4); ringbuffer_store(&ringbuffer, "abcdefgh", 8); char retval = 0; ringbuffer_fetch(&ringbuffer, 8, test_grow_callback, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } static void test_wrap_write_callback(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 2 && strncmp(data, "ef", 2) == 0; } SCM ringbuffer_wrap_write(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 4); ringbuffer_store(&ringbuffer, "abc", 3); char retval = 0; ringbuffer_fetch(&ringbuffer, 2, test_wrap_write_callback, &retval); ringbuffer_store(&ringbuffer, "de", 2); ringbuffer_store(&ringbuffer, "f", 1); ringbuffer_fetch(&ringbuffer, 2, test_wrap_write_callback, &retval); ringbuffer_fetch(&ringbuffer, 2, test_wrap_write_callback, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } static void test_flushing(char *data, int count, int offset, void *userdata) { *(char *)userdata = count == 2 && strncmp(data, "cd", 2) == 0; } SCM ringbuffer_flushing(void) { struct ringbuffer_t ringbuffer; ringbuffer_init(&ringbuffer, 4); ringbuffer_store(&ringbuffer, "ab", 2); ringbuffer_flush(&ringbuffer); ringbuffer_store(&ringbuffer, "cd", 2); char retval = 0; ringbuffer_fetch(&ringbuffer, 2, test_flushing, &retval); ringbuffer_destroy(&ringbuffer); return scm_from_bool(retval); } void init_ringbuffer_tests(void) { scm_c_define_gsubr("ringbuffer-fetch-empty" , 0, 0, 0, SCM_FUNC(ringbuffer_fetch_empty)); scm_c_define_gsubr("ringbuffer-initial-size" , 0, 0, 0, SCM_FUNC(ringbuffer_initial_size)); scm_c_define_gsubr("ringbuffer-add-data" , 0, 0, 0, SCM_FUNC(ringbuffer_add_data)); scm_c_define_gsubr("ringbuffer-store-and-fetch" , 0, 0, 0, SCM_FUNC(ringbuffer_store_and_fetch)); scm_c_define_gsubr("ringbuffer-store-appends-data" , 0, 0, 0, SCM_FUNC(ringbuffer_store_appends_data)); scm_c_define_gsubr("ringbuffer-fetch-limit" , 0, 0, 0, SCM_FUNC(ringbuffer_fetch_limit)); scm_c_define_gsubr("ringbuffer-fetching-advances" , 0, 0, 0, SCM_FUNC(ringbuffer_fetching_advances)); scm_c_define_gsubr("ringbuffer-storing-respects-offset", 0, 0, 0, SCM_FUNC(ringbuffer_storing_respects_offset)); scm_c_define_gsubr("ringbuffer-wrap-around" , 0, 0, 0, SCM_FUNC(ringbuffer_wrap_around)); scm_c_define_gsubr("ringbuffer-grow" , 0, 0, 0, SCM_FUNC(ringbuffer_grow)); scm_c_define_gsubr("ringbuffer-wrap-write" , 0, 0, 0, SCM_FUNC(ringbuffer_wrap_write)); scm_c_define_gsubr("ringbuffer-flushing" , 0, 0, 0, SCM_FUNC(ringbuffer_flushing)); } aiscm-0.15.1/aiscm/scalar.scm0000644000175000017500000000176413213600050012656 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm scalar) #:use-module (oop goops) #:use-module (aiscm util) #:use-module (aiscm element) #:export ( >)) (define-class* > >) aiscm-0.15.1/aiscm/method.scm0000644000175000017500000000346313213600050012667 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm method) #:use-module (oop goops) #:use-module (aiscm element) #:use-module (aiscm int) #:export ( make-native-method function-pointer return-type argument-types native-value) #:re-export (get)) (define-class () (function-pointer #:init-keyword #:function-pointer #:getter function-pointer) (return-type #:init-keyword #:return-type #:getter return-type) (argument-types #:init-keyword #:argument-types #:getter argument-types)) (define (make-native-method return-type argument-types function-pointer) (make #:function-pointer function-pointer #:return-type return-type #:argument-types argument-types)) (define-class () (value #:init-keyword #:value #:getter get) (return-type #:init-keyword #:return-type #:getter return-type)) (define (native-value return-type value) (make #:value value #:return-type return-type)) aiscm-0.15.1/aiscm/util-helpers-tests.c0000644000175000017500000000746013213600050014625 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" SCM scm_to_int_array_one_element(SCM source) { int dest[1]; scm_to_int_array(source, dest); return scm_from_bool(dest[0] == 123); } SCM scm_to_int_array_second_element(SCM source) { int dest[2]; scm_to_int_array(source, dest); return scm_from_bool(dest[1] == 456); } SCM scm_to_long_array_one_element(SCM source) { long dest[1]; scm_to_long_array(source, dest); return scm_from_bool(dest[0] == (123L << 32)); } SCM scm_to_long_array_second_element(SCM source) { long dest[2]; scm_to_long_array(source, dest); return scm_from_bool(dest[1] == (456L << 32)); } static scm_t_bits test_type_tag; struct test_type_t { char *ptr; }; SCM cleanup_test_type(SCM scm_self) { struct test_type_t *self = (struct test_type_t *)SCM_SMOB_DATA(scm_self); *self->ptr = 1; return SCM_UNSPECIFIED; } SCM call_scheme_function(SCM scm_fun, SCM scm_arg) { return clean_up_on_failure(SCM_UNDEFINED, NULL, scm_fun, scm_arg); } static SCM call_clean_up_on_failure(void *data) { SCM *body_data = (SCM *)data; SCM test_object = body_data[0]; SCM scm_fun = body_data[1]; return clean_up_on_failure(test_object, cleanup_test_type, scm_fun, SCM_UNDEFINED); } static SCM ignore_exception(void *data, SCM tag, SCM throw_args) { return SCM_BOOL_F; } SCM cleanup_when_exception(SCM scm_fun) { char cleaned = 0; SCM test_object; struct test_type_t *self = (struct test_type_t *)scm_gc_calloc(sizeof(struct test_type_t), "testing"); SCM_NEWSMOB(test_object, test_type_tag, self); self->ptr = &cleaned; SCM body_data[2]; body_data[0] = test_object; body_data[1] = scm_fun; scm_c_catch(SCM_BOOL_T, call_clean_up_on_failure, &body_data, ignore_exception, NULL, NULL, NULL); char retval = cleaned; scm_remember_upto_here_1(test_object); return scm_from_bool(retval); } SCM throw_exception_after_cleanup(SCM scm_fun) { char cleaned; SCM test_object; struct test_type_t *self = (struct test_type_t *)scm_gc_calloc(sizeof(struct test_type_t), "testing"); SCM_NEWSMOB(test_object, test_type_tag, self); self->ptr = &cleaned; clean_up_on_failure(test_object, cleanup_test_type, scm_fun, SCM_UNDEFINED); return SCM_UNDEFINED; } void init_util_helpers_tests(void) { test_type_tag = scm_make_smob_type("test-type", sizeof(struct test_type_t)); scm_c_define_gsubr("scm-to-int-array-one-element" , 1, 0, 0, SCM_FUNC(scm_to_int_array_one_element )); scm_c_define_gsubr("scm-to-int-array-second-element" , 1, 0, 0, SCM_FUNC(scm_to_int_array_second_element )); scm_c_define_gsubr("scm-to-long-array-one-element" , 1, 0, 0, SCM_FUNC(scm_to_long_array_one_element )); scm_c_define_gsubr("scm-to-long-array-second-element", 1, 0, 0, SCM_FUNC(scm_to_long_array_second_element)); scm_c_define_gsubr("call-scheme-function" , 2, 0, 0, SCM_FUNC(call_scheme_function )); scm_c_define_gsubr("cleanup-when-exception" , 1, 0, 0, SCM_FUNC(cleanup_when_exception )); scm_c_define_gsubr("throw-exception-after-cleanup" , 1, 0, 0, SCM_FUNC(throw_exception_after_cleanup )); } aiscm-0.15.1/aiscm/jit-tests.c0000644000175000017500000000256013213600050012772 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" static int side_effect; SCM jit_reset_side_effect(void) { int retval = side_effect; side_effect = 0; return scm_from_int(retval); } void jit_side_effect(void) { side_effect = 42; } int jit_constant_fun(void) { return 42; } int jit_subtracting_fun(int a, int b) { return a - b; } int jit_seven_arguments(int a, int b, int c, int d, int e, int f, int g) { return g; } char jit_boolean_not(char x) { return !x; } void init_jit_tests(void) { scm_c_define_gsubr("jit-reset-side-effect", 0, 0, 0, SCM_FUNC(jit_reset_side_effect)); } aiscm-0.15.1/aiscm/live-analysis.scm0000644000175000017500000000426313213600050014166 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm live-analysis) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (oop goops) #:use-module (aiscm util) #:use-module (aiscm asm) #:use-module (aiscm command) #:use-module (aiscm program) #:export (next-indices live-analysis flow)) (define-method (next-indices labels cmd k) "Determine next program indices for a statement" (if (equal? cmd (RET)) '() (list (1+ k)))) (define-method (next-indices labels (cmd ) k) "Determine next program indices for a (conditional) jump" (let [(target (assq-ref labels (get-target cmd)))] (if (conditional? cmd) (list (1+ k) target) (list target)))) (define (flow prog) (let [(labels (labels prog))] (map (cut next-indices labels <...>) prog (iota (length prog))))) (define (live-analysis prog results) "Get list of live variables for program terminated by RET statement" (let* [(inputs (inputs prog results)) (outputs (outputs prog)) (flow (flow prog)) (same? (cut every (cut lset= equal? <...>) <...>)) (track (lambda (value) (lambda (input indices output) (union input (difference (apply union (map (cut list-ref value <>) indices)) output))))) (initial inputs) (iteration (lambda (value) (map (track value) inputs flow outputs)))] (map union (fixed-point initial iteration same?) outputs))) aiscm-0.15.1/aiscm/xorg.scm0000644000175000017500000001443413213600050012366 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm xorg) #:use-module (oop goops) #:use-module (srfi srfi-26) #:use-module (ice-9 optargs) #:use-module (aiscm util) #:use-module (aiscm element) #:use-module (aiscm int) #:use-module (aiscm sequence) #:use-module (aiscm pointer) #:use-module (aiscm image) #:export ( > > process-events event-loop quit? quit= show show-fullscreen hide title= move resize move-resize window-size fullscreen-flag xorg-io-type IO-XIMAGE IO-OPENGL IO-XVIDEO) #:re-export (destroy write-image)) (load-extension "libguile-aiscm-xorg" "init_xorg") (define-class* > (display #:init-keyword #:display #:getter get-display)) (define-method (initialize (self ) initargs) (let-keywords initargs #f (name) (let [(name (or name ":0.0"))] (next-method self (list #:display (make-display name)))))) (define-method (shape (self )) (display-shape (get-display self))) (define-method (process-events (self )) (display-process-events (get-display self))) (define-method (event-loop (self ) timeout) (display-event-loop (get-display self) timeout)) (define-method (event-loop (self )) (cut event-loop self <>)) (define-method (destroy (self )) (display-destroy (get-display self))) (define-method (quit? (self )) (display-quit? (get-display self))) (define-method (quit= (self ) (value )) (display-quit= (get-display self) value)) (define-class* > (window #:init-keyword #:window #:getter get-window)) (define-method (initialize (self ) initargs) (let-keywords initargs #f (display shape io) (let [(io (or io IO-XIMAGE))] (next-method self (list #:window (make-window (get-display display) (car shape) (cadr shape) io)))))) (define (window-size img . args) "Determine window size for an image and some optional keyword arguments" (let* [(shp (shape img)) (w (car shp)) (h (cadr shp))] (or (let-keywords args #t (shape width height) (or shape (and width (list width (round (* (/ width w) h)))) (and height (list (round (* (/ height h) w)) height)))) shp))) (define-syntax-rule (flag? name args) (let-keywords args #t (name) name)) (define (fullscreen-flag . args) "Check whether fullscreen keyword is set to true" (flag? fullscreen args)) (define (xorg-io-type is-video images . args) "Select X.Org IO type" (let-keywords args #t (io) (or io (if is-video (if (null? (cdr images)) IO-XVIDEO IO-OPENGL) IO-XIMAGE)))) (define-method (show (self )) (window-show (get-window self))) (define-method (show (self ) . args) (apply show (list self) args) self) (define-method (show (self >) . args) (apply show (list self) args) self) (define-method (show (self ) . args) (let* [(dsp (make )) (io (apply xorg-io-type #f self args)) (images (map to-image self)) (shapes (map (cut apply window-size <> args) images)) (fullscreen (apply fullscreen-flag args)) (show-method(if fullscreen show-fullscreen show)) (window (cut make #:display dsp #:shape <> #:io io)) (windows (map window shapes))] (for-each (cut title= <> "AIscm") windows) (for-each write-image images windows) (for-each show-method windows) (event-loop dsp #f) (for-each hide windows) (destroy dsp) self)) (define-method (show (self ) . args) (let* [(dsp (make )) (result (self dsp)) (results (if (list? result) result (list result))) (io (apply xorg-io-type #t results args)) (images (map to-image results)) (shapes (map (cut apply window-size <> args) images)) (fullscreen (apply fullscreen-flag args)) (show-method (if fullscreen show-fullscreen show)) (window (cut make #:display dsp #:shape <> #:io io)) (windows (map window shapes))] (for-each (cut title= <> "AIscm") windows) (for-each write-image images windows) (for-each show-method windows) (while (not (quit? dsp)) (set! result (self dsp)) (if result (begin (set! results (if (list? result) result (list result))) (set! images (map to-image results)) (for-each write-image images windows) (process-events dsp)) (quit= dsp #t))) (for-each hide windows) (destroy dsp) result)) (define-method (show-fullscreen (self )) (window-show-fullscreen (get-window self))) (define-method (hide (self )) (window-hide (get-window self))) (define-method (destroy (self )) (window-destroy (get-window self))) (define-method (title= (self ) (title )) (window-title= (get-window self) title)) (define-method (move (self ) (x ) (y )) (window-move (get-window self) x y)) (define-method (resize (self ) (w ) (h )) (window-resize (get-window self) w h)) (define-method (move-resize (self ) (x ) (y ) (w ) (h )) (window-move-resize (get-window self) x y w h)) (define-method (write-image (image ) (self )) (window-write (get-window self) image)) (define-method (write-image (arr >) (self )) (show self (to-image arr)) arr) aiscm-0.15.1/aiscm/rgb.scm0000644000175000017500000002170113213600050012154 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm rgb) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (rnrs bytevectors) #:use-module (ice-9 optargs) #:use-module (aiscm util) #:use-module (aiscm element) #:use-module (aiscm composite) #:use-module (aiscm bool) #:use-module (aiscm pointer) #:use-module (aiscm int) #:use-module (aiscm asm) #:use-module (aiscm variable) #:use-module (aiscm command) #:use-module (aiscm jit) #:use-module (aiscm operation) #:use-module (aiscm expression) #:use-module (aiscm sequence) #:export ( > >> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> rgb red green blue coerce-rgb) #:re-export (== != - ~ + * & | ^ << >> / % max min += *= max= min= where)) (define ctx (make )) (define-class () (red #:init-keyword #:red #:getter red) (green #:init-keyword #:green #:getter green) (blue #:init-keyword #:blue #:getter blue)) (define-method (rgb r g b) (make #:red r #:green g #:blue b)) (define-method (write (self ) port) (format port "(rgb ~a ~a ~a)" (red self) (green self) (blue self))) (define-method (red self) self) (define-method (green self) self) (define-method (blue self) self) (define-class* > >> >) (define-method (rgb (t >)) (template-class (rgb t) > (lambda (class metaclass) (define-method (base (self metaclass))t) (define-method (size-of (self metaclass)) (* 3 (size-of t)))))) (define-method (components (self >>)) (list red green blue)) (define-method (rgb (t >>)) (multiarray (rgb (typecode t)) (dimensions t))) (define-method (coerce-rgb (r >) (g >) (b >)) (rgb (reduce coerce #f (list r g b)))) (define-method (rgb (r >) (g >) (b >)) (lambda (out r g b) (append-map duplicate (content > out) (list r g b)))) (define-method (red (self >)) (make (base (class-of self)) #:value (red (get self)))) (define-method (green (self >)) (make (base (class-of self)) #:value (green (get self)))) (define-method (blue (self >)) (make (base (class-of self)) #:value (blue (get self)))) (define-method (write (self >) port) (format port "#<~a ~a>" (class-name (class-of self)) (get self))) (define-method (base (self >>)) (multiarray (base (typecode self)) (dimensions self))) (define-method (pack (self >)) (bytevector-concat (map pack (content (class-of self) self)))) (define-method (unpack (self >>) (packed )) (let* [(size (size-of (base self))) (vectors (map (cut bytevector-sub packed <> size) (map (cut * size <>) (iota 3))))] (make self #:value (apply rgb (map (lambda (vec) (get (unpack (base self) vec))) vectors))))) (define (rgb )) (define (rgb )) (define (rgb )) (define (rgb )) (define (rgb )) (define (rgb )) (define (rgb )) (define (rgb )) (define-method (coerce (a >>) (b >)) (rgb (coerce (base a) b))) (define-method (coerce (a >) (b >>)) (rgb (coerce a (base b)))) (define-method (coerce (a >>) (b >>)) (rgb (coerce (base a) (base b)))) (define-method (coerce (a >>) (b >>)) (multiarray (coerce a (typecode b)) (dimensions b))) (define-method (native-type (c ) . args) (rgb (apply native-type (concatenate (map-if (cut is-a? <> ) (cut deconstruct > <>) list (cons c args)))))) (define-method (build (self >>) value) (apply rgb value)) (define-method (unbuild (type >>) self) (append-map (cut unbuild (base type) <>) (deconstruct type self))) (define-method (content (type >>) (self )) (append-map (cut content (base type) <>) (deconstruct type self))) (define-method (content (type >>) (self >)) (append-map (cut content (base type) <>) (deconstruct type self))) (define-method (typecode (self )) (rgb (reduce coerce #f (map typecode (content > self))))) (define-syntax-rule (unary-rgb-op op) (define-method (op (a )) (apply rgb (map op (content > a))))) (unary-rgb-op -) (unary-rgb-op ~) (unary-rgb-op <<) (unary-rgb-op >>) (define-method (+= (a ) (b )) (append-map += (content > a) (content > b))) (define-method (*= (a ) (b )) (append-map *= (content > a) (content > b))) (define-method (max= (a ) (b )) (append-map max= (content > a) (content > b))) (define-method (min= (a ) (b )) (append-map min= (content > a) (content > b))) (define-syntax-rule (binary-rgb-op op) (begin (define-method (op (a ) b ) (apply rgb (map (cut op <> b) (content > a) ))) (define-method (op a (b )) (apply rgb (map (cut op a <>) (content > b)))) (define-method (op (a ) (b )) (apply rgb (map op (content > a) (content > b)))) (define-method (op (a ) (b )) (op (wrap a) b)) (define-method (op (a ) (b ) ) (op a (wrap b))))) (binary-rgb-op + ) (binary-rgb-op - ) (binary-rgb-op * ) (binary-rgb-op & ) (binary-rgb-op | ) (binary-rgb-op ^ ) (binary-rgb-op << ) (binary-rgb-op >> ) (binary-rgb-op / ) (binary-rgb-op % ) (binary-rgb-op max) (binary-rgb-op min) (define-syntax-rule (binary-rgb-cmp op f) (begin (define-method (op (a ) b ) (apply f (map (cut op <> b) (content > a) ))) (define-method (op a (b )) (apply f (map (cut op a <>) (content > b)))) (define-method (op (a ) (b )) (apply f (map op (content > a) (content > b)))))) (binary-rgb-cmp equal? equal?) (binary-rgb-cmp == &&) (binary-rgb-cmp != ||) (define-method (where (m ) (a ) (b )) (apply rgb (map (cut where m <...>) (content > a) (content > b)))) (define-method (where (m ) (a ) b ) (apply rgb (map (cut where m <> b) (content > a)))) (define-method (where (m ) a (b )) (apply rgb (map (cut where m a <>) (content > b)))) (define-method (var (self >>)) (let [(type (base self))] (rgb (var type) (var type) (var type)))) (pointer >) (define-method (red (self >)) self) (define-method (green (self >)) self) (define-method (blue (self >)) self) (define-method (red (self >>)) (component (typecode self) self 0)) (define-method (green (self >>)) (component (typecode self) self 1)) (define-method (blue (self >>)) (component (typecode self) self 2)) (define-operator-mapping red (>) (unary-extract red )) (define-operator-mapping green (>) (unary-extract green)) (define-operator-mapping blue (>) (unary-extract blue )) (define-jit-method base red 1) (define-jit-method base green 1) (define-jit-method base blue 1) (define-jit-method coerce-rgb rgb 3) (define-method (decompose-value (target >>) x) (make #:red (parameter (red (delegate x))) #:green (parameter (green (delegate x))) #:blue (parameter (blue (delegate x))))) (define-method (to-type (target >>) (self )) (apply rgb (map (cut to-type (base target) <>) (content > self)))) aiscm-0.15.1/aiscm/Makefile.in0000644000175000017500000022212013220460252012747 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = aiscm ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_opengl.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/guile.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(extensiondir)" "$(DESTDIR)$(cachedir)" \ "$(DESTDIR)$(sitedir)" LTLIBRARIES = $(extension_LTLIBRARIES) am__DEPENDENCIES_1 = libguile_aiscm_ffmpeg_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libguile_aiscm_ffmpeg_la_OBJECTS = \ libguile_aiscm_ffmpeg_la-ffmpeg.lo \ libguile_aiscm_ffmpeg_la-ffmpeg-helpers.lo \ libguile_aiscm_ffmpeg_la-ringbuffer.lo \ libguile_aiscm_ffmpeg_la-util-helpers.lo libguile_aiscm_ffmpeg_la_OBJECTS = \ $(am_libguile_aiscm_ffmpeg_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 = libguile_aiscm_ffmpeg_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_ffmpeg_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_image_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libguile_aiscm_image_la_OBJECTS = libguile_aiscm_image_la-image.lo \ libguile_aiscm_image_la-util-helpers.lo libguile_aiscm_image_la_OBJECTS = \ $(am_libguile_aiscm_image_la_OBJECTS) libguile_aiscm_image_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_image_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_image_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_jit_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libguile_aiscm_jit_la_OBJECTS = libguile_aiscm_jit_la-jit.lo libguile_aiscm_jit_la_OBJECTS = $(am_libguile_aiscm_jit_la_OBJECTS) libguile_aiscm_jit_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_jit_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_jit_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_magick_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libguile_aiscm_magick_la_OBJECTS = \ libguile_aiscm_magick_la-magick.lo libguile_aiscm_magick_la_OBJECTS = \ $(am_libguile_aiscm_magick_la_OBJECTS) libguile_aiscm_magick_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_magick_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_magick_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_obj_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libguile_aiscm_obj_la_OBJECTS = libguile_aiscm_obj_la-obj.lo libguile_aiscm_obj_la_OBJECTS = $(am_libguile_aiscm_obj_la_OBJECTS) libguile_aiscm_obj_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_obj_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_obj_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_pulse_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libguile_aiscm_pulse_la_OBJECTS = libguile_aiscm_pulse_la-pulse.lo \ libguile_aiscm_pulse_la-ringbuffer.lo libguile_aiscm_pulse_la_OBJECTS = \ $(am_libguile_aiscm_pulse_la_OBJECTS) libguile_aiscm_pulse_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_pulse_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_pulse_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_samples_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libguile_aiscm_samples_la_OBJECTS = \ libguile_aiscm_samples_la-samples.lo \ libguile_aiscm_samples_la-samples-helpers.lo \ libguile_aiscm_samples_la-util-helpers.lo libguile_aiscm_samples_la_OBJECTS = \ $(am_libguile_aiscm_samples_la_OBJECTS) libguile_aiscm_samples_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_samples_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_samples_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_tests_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libguile_aiscm_tests_la_OBJECTS = libguile_aiscm_tests_la-tests.lo \ libguile_aiscm_tests_la-ffmpeg-helpers.lo \ libguile_aiscm_tests_la-ffmpeg-helpers-tests.lo \ libguile_aiscm_tests_la-ringbuffer.lo \ libguile_aiscm_tests_la-ringbuffer-tests.lo \ libguile_aiscm_tests_la-jit-tests.lo \ libguile_aiscm_tests_la-util-helpers.lo \ libguile_aiscm_tests_la-util-helpers-tests.lo \ libguile_aiscm_tests_la-samples-helpers.lo \ libguile_aiscm_tests_la-samples-helpers-tests.lo libguile_aiscm_tests_la_OBJECTS = \ $(am_libguile_aiscm_tests_la_OBJECTS) libguile_aiscm_tests_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_tests_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_util_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libguile_aiscm_util_la_OBJECTS = libguile_aiscm_util_la-util.lo libguile_aiscm_util_la_OBJECTS = $(am_libguile_aiscm_util_la_OBJECTS) libguile_aiscm_util_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_util_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_util_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_v4l2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libguile_aiscm_v4l2_la_OBJECTS = libguile_aiscm_v4l2_la-v4l2.lo \ libguile_aiscm_v4l2_la-util-helpers.lo libguile_aiscm_v4l2_la_OBJECTS = $(am_libguile_aiscm_v4l2_la_OBJECTS) libguile_aiscm_v4l2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_v4l2_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_v4l2_la_LDFLAGS) $(LDFLAGS) -o $@ libguile_aiscm_xorg_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libguile_aiscm_xorg_la_OBJECTS = libguile_aiscm_xorg_la-xorg.lo libguile_aiscm_xorg_la_OBJECTS = $(am_libguile_aiscm_xorg_la_OBJECTS) libguile_aiscm_xorg_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(libguile_aiscm_xorg_la_CFLAGS) $(CFLAGS) \ $(libguile_aiscm_xorg_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)/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 = $(libguile_aiscm_ffmpeg_la_SOURCES) \ $(libguile_aiscm_image_la_SOURCES) \ $(libguile_aiscm_jit_la_SOURCES) \ $(libguile_aiscm_magick_la_SOURCES) \ $(libguile_aiscm_obj_la_SOURCES) \ $(libguile_aiscm_pulse_la_SOURCES) \ $(libguile_aiscm_samples_la_SOURCES) \ $(libguile_aiscm_tests_la_SOURCES) \ $(libguile_aiscm_util_la_SOURCES) \ $(libguile_aiscm_v4l2_la_SOURCES) \ $(libguile_aiscm_xorg_la_SOURCES) DIST_SOURCES = $(libguile_aiscm_ffmpeg_la_SOURCES) \ $(libguile_aiscm_image_la_SOURCES) \ $(libguile_aiscm_jit_la_SOURCES) \ $(libguile_aiscm_magick_la_SOURCES) \ $(libguile_aiscm_obj_la_SOURCES) \ $(libguile_aiscm_pulse_la_SOURCES) \ $(libguile_aiscm_samples_la_SOURCES) \ $(libguile_aiscm_tests_la_SOURCES) \ $(libguile_aiscm_util_la_SOURCES) \ $(libguile_aiscm_v4l2_la_SOURCES) \ $(libguile_aiscm_xorg_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 = $(cache_DATA) $(site_DATA) HEADERS = $(noinst_HEADERS) am__extra_recursive_targets = bench-recursive recheck-recursive \ integration-recursive reintegration-recursive 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)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVCODEC_CFLAGS = @AVCODEC_CFLAGS@ AVCODEC_LIBS = @AVCODEC_LIBS@ AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@ AVFORMAT_LIBS = @AVFORMAT_LIBS@ AVRESAMPLE_CFLAGS = @AVRESAMPLE_CFLAGS@ AVRESAMPLE_LIBS = @AVRESAMPLE_LIBS@ AVUTIL_CFLAGS = @AVUTIL_CFLAGS@ AVUTIL_LIBS = @AVUTIL_LIBS@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ GUILE = @GUILE@ GUILE_CACHE = @GUILE_CACHE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_EFFECTIVE_VERSION = @GUILE_EFFECTIVE_VERSION@ GUILE_EXT = @GUILE_EXT@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ GUILE_LIBS = @GUILE_LIBS@ GUILE_LTLIBS = @GUILE_LTLIBS@ GUILE_SITE = @GUILE_SITE@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAGICK_CFLAGS = @MAGICK_CFLAGS@ MAGICK_LIBS = @MAGICK_LIBS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MJPEG_CFLAGS = @MJPEG_CFLAGS@ MJPEG_LIBS = @MJPEG_LIBS@ MKDIR_P = @MKDIR_P@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWRESAMPLE_CFLAGS = @SWRESAMPLE_CFLAGS@ SWRESAMPLE_LIBS = @SWRESAMPLE_LIBS@ SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ SWSCALE_LIBS = @SWSCALE_LIBS@ TOUCH = @TOUCH@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUFFIXES = .c .scm .go sitedir = $(GUILE_SITE)/aiscm site_DATA = jit.scm mem.scm element.scm scalar.scm bool.scm int.scm pointer.scm rgb.scm complex.scm float.scm \ sequence.scm asm.scm image.scm ffmpeg.scm util.scm magick.scm pulse.scm v4l2.scm xorg.scm \ obj.scm composite.scm method.scm samples.scm tensor.scm variable.scm command.scm program.scm \ live-analysis.scm register-allocate.scm compile.scm expression.scm loop.scm operation.scm \ convolution.scm extensiondir = $(GUILE_EXT) extension_LTLIBRARIES = libguile-aiscm-util.la libguile-aiscm-jit.la libguile-aiscm-ffmpeg.la libguile-aiscm-image.la \ libguile-aiscm-magick.la libguile-aiscm-pulse.la libguile-aiscm-v4l2.la libguile-aiscm-xorg.la \ libguile-aiscm-obj.la libguile-aiscm-samples.la check_LTLIBRARIES = libguile-aiscm-tests.la noinst_HEADERS = ffmpeg-helpers.h util-helpers.h ringbuffer.h samples-helpers.h cachedir = $(GUILE_CACHE)/aiscm cache_DATA = $(site_DATA:.scm=.go) AISCM_LDFLAGS = -no-undefined -module -shared -avoid-version libguile_aiscm_tests_la_SOURCES = tests.c ffmpeg-helpers.c ffmpeg-helpers-tests.c ringbuffer.c ringbuffer-tests.c jit-tests.c \ util-helpers.c util-helpers-tests.c samples-helpers.c samples-helpers-tests.c libguile_aiscm_tests_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_tests_la_LDFLAGS = -no-undefined -module -shared -avoid-version -rpath /tmp libguile_aiscm_tests_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_util_la_SOURCES = util.c libguile_aiscm_util_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_util_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_util_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_jit_la_SOURCES = jit.c libguile_aiscm_jit_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_jit_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_jit_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_obj_la_SOURCES = obj.c libguile_aiscm_obj_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_obj_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_obj_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_ffmpeg_la_SOURCES = ffmpeg.c ffmpeg-helpers.c ringbuffer.c util-helpers.c libguile_aiscm_ffmpeg_la_CFLAGS = $(GUILE_CFLAGS) $(AVFORMAT_CFLAGS) $(AVCODEC_CFLAGS) $(AVUTIL_CFLAGS) libguile_aiscm_ffmpeg_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_ffmpeg_la_LIBADD = $(GUILE_LIBS) $(AVFORMAT_LIBS) $(AVCODEC_LIBS) $(AVUTIL_LIBS) libguile_aiscm_image_la_SOURCES = image.c util-helpers.c libguile_aiscm_image_la_CFLAGS = $(GUILE_CFLAGS) $(SWSCALE_CFLAGS) $(MJPEG_CFLAGS) libguile_aiscm_image_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_image_la_LIBADD = $(GUILE_LIBS) $(SWSCALE_LIBS) $(MJPEG_LIBS) -llavjpeg libguile_aiscm_magick_la_SOURCES = magick.c libguile_aiscm_magick_la_CFLAGS = $(GUILE_CFLAGS) $(MAGICK_CFLAGS) libguile_aiscm_magick_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_magick_la_LIBADD = $(GUILE_LIBS) $(MAGICK_LIBS) libguile_aiscm_pulse_la_SOURCES = pulse.c ringbuffer.c libguile_aiscm_pulse_la_CFLAGS = $(GUILE_CFLAGS) $(PULSE_CFLAGS) $(PTHREAD_CFLAGS) libguile_aiscm_pulse_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_pulse_la_LIBADD = $(GUILE_LIBS) $(PULSE_LIBS) $(PTHREAD_LIBS) libguile_aiscm_v4l2_la_SOURCES = v4l2.c util-helpers.c libguile_aiscm_v4l2_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_v4l2_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_v4l2_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_xorg_la_SOURCES = xorg.c libguile_aiscm_xorg_la_CFLAGS = $(GUILE_CFLAGS) $(X_CFLAGS) libguile_aiscm_xorg_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_xorg_la_LIBADD = $(GUILE_LIBS) $(GL_LIBS) $(X_PRE_LIBS) $(X_LIBS) -lX11 $(X_EXTRA_LIBS) -lXv -lXpm libguile_aiscm_samples_la_SOURCES = samples.c samples-helpers.c util-helpers.c libguile_aiscm_samples_la_CFLAGS = $(GUILE_CFLAGS) $(SWRESAMPLE_CFLAGS) $(AVRESAMPLE_CFLAGS) $(AVUTIL_CFLAGS) libguile_aiscm_samples_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_samples_la_LIBADD = $(GUILE_LIBS) $(SWRESAMPLE_LIBS) $(AVRESAMPLE_LIBS) $(AVUTIL_LIBS) EXTRA_DIST = $(site_DATA) aiscm.xpm CLEANFILES = *.tmp *.go* MAINTAINERCLEANFILES = Makefile.in all: all-am .SUFFIXES: .SUFFIXES: .c .scm .go .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) --foreign aiscm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign aiscm/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-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_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}; \ } install-extensionLTLIBRARIES: $(extension_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(extension_LTLIBRARIES)'; test -n "$(extensiondir)" || 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)$(extensiondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(extensiondir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(extensiondir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(extensiondir)"; \ } uninstall-extensionLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(extension_LTLIBRARIES)'; test -n "$(extensiondir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(extensiondir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(extensiondir)/$$f"; \ done clean-extensionLTLIBRARIES: -test -z "$(extension_LTLIBRARIES)" || rm -f $(extension_LTLIBRARIES) @list='$(extension_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}; \ } libguile-aiscm-ffmpeg.la: $(libguile_aiscm_ffmpeg_la_OBJECTS) $(libguile_aiscm_ffmpeg_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_ffmpeg_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_ffmpeg_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_ffmpeg_la_OBJECTS) $(libguile_aiscm_ffmpeg_la_LIBADD) $(LIBS) libguile-aiscm-image.la: $(libguile_aiscm_image_la_OBJECTS) $(libguile_aiscm_image_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_image_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_image_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_image_la_OBJECTS) $(libguile_aiscm_image_la_LIBADD) $(LIBS) libguile-aiscm-jit.la: $(libguile_aiscm_jit_la_OBJECTS) $(libguile_aiscm_jit_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_jit_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_jit_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_jit_la_OBJECTS) $(libguile_aiscm_jit_la_LIBADD) $(LIBS) libguile-aiscm-magick.la: $(libguile_aiscm_magick_la_OBJECTS) $(libguile_aiscm_magick_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_magick_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_magick_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_magick_la_OBJECTS) $(libguile_aiscm_magick_la_LIBADD) $(LIBS) libguile-aiscm-obj.la: $(libguile_aiscm_obj_la_OBJECTS) $(libguile_aiscm_obj_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_obj_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_obj_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_obj_la_OBJECTS) $(libguile_aiscm_obj_la_LIBADD) $(LIBS) libguile-aiscm-pulse.la: $(libguile_aiscm_pulse_la_OBJECTS) $(libguile_aiscm_pulse_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_pulse_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_pulse_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_pulse_la_OBJECTS) $(libguile_aiscm_pulse_la_LIBADD) $(LIBS) libguile-aiscm-samples.la: $(libguile_aiscm_samples_la_OBJECTS) $(libguile_aiscm_samples_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_samples_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_samples_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_samples_la_OBJECTS) $(libguile_aiscm_samples_la_LIBADD) $(LIBS) libguile-aiscm-tests.la: $(libguile_aiscm_tests_la_OBJECTS) $(libguile_aiscm_tests_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_tests_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_tests_la_LINK) $(libguile_aiscm_tests_la_OBJECTS) $(libguile_aiscm_tests_la_LIBADD) $(LIBS) libguile-aiscm-util.la: $(libguile_aiscm_util_la_OBJECTS) $(libguile_aiscm_util_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_util_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_util_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_util_la_OBJECTS) $(libguile_aiscm_util_la_LIBADD) $(LIBS) libguile-aiscm-v4l2.la: $(libguile_aiscm_v4l2_la_OBJECTS) $(libguile_aiscm_v4l2_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_v4l2_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_v4l2_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_v4l2_la_OBJECTS) $(libguile_aiscm_v4l2_la_LIBADD) $(LIBS) libguile-aiscm-xorg.la: $(libguile_aiscm_xorg_la_OBJECTS) $(libguile_aiscm_xorg_la_DEPENDENCIES) $(EXTRA_libguile_aiscm_xorg_la_DEPENDENCIES) $(AM_V_CCLD)$(libguile_aiscm_xorg_la_LINK) -rpath $(extensiondir) $(libguile_aiscm_xorg_la_OBJECTS) $(libguile_aiscm_xorg_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_ffmpeg_la-ffmpeg-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_ffmpeg_la-ffmpeg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_ffmpeg_la-ringbuffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_ffmpeg_la-util-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_image_la-image.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_image_la-util-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_jit_la-jit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_magick_la-magick.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_obj_la-obj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_pulse_la-pulse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_pulse_la-ringbuffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_samples_la-samples-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_samples_la-samples.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_samples_la-util-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-ffmpeg-helpers-tests.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-ffmpeg-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-jit-tests.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-ringbuffer-tests.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-ringbuffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-samples-helpers-tests.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-samples-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-tests.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-util-helpers-tests.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_tests_la-util-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_util_la-util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_v4l2_la-util-helpers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_v4l2_la-v4l2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libguile_aiscm_xorg_la-xorg.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libguile_aiscm_ffmpeg_la-ffmpeg.lo: ffmpeg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_ffmpeg_la-ffmpeg.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_ffmpeg_la-ffmpeg.Tpo -c -o libguile_aiscm_ffmpeg_la-ffmpeg.lo `test -f 'ffmpeg.c' || echo '$(srcdir)/'`ffmpeg.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_ffmpeg_la-ffmpeg.Tpo $(DEPDIR)/libguile_aiscm_ffmpeg_la-ffmpeg.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ffmpeg.c' object='libguile_aiscm_ffmpeg_la-ffmpeg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_ffmpeg_la-ffmpeg.lo `test -f 'ffmpeg.c' || echo '$(srcdir)/'`ffmpeg.c libguile_aiscm_ffmpeg_la-ffmpeg-helpers.lo: ffmpeg-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_ffmpeg_la-ffmpeg-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_ffmpeg_la-ffmpeg-helpers.Tpo -c -o libguile_aiscm_ffmpeg_la-ffmpeg-helpers.lo `test -f 'ffmpeg-helpers.c' || echo '$(srcdir)/'`ffmpeg-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_ffmpeg_la-ffmpeg-helpers.Tpo $(DEPDIR)/libguile_aiscm_ffmpeg_la-ffmpeg-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ffmpeg-helpers.c' object='libguile_aiscm_ffmpeg_la-ffmpeg-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_ffmpeg_la-ffmpeg-helpers.lo `test -f 'ffmpeg-helpers.c' || echo '$(srcdir)/'`ffmpeg-helpers.c libguile_aiscm_ffmpeg_la-ringbuffer.lo: ringbuffer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_ffmpeg_la-ringbuffer.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_ffmpeg_la-ringbuffer.Tpo -c -o libguile_aiscm_ffmpeg_la-ringbuffer.lo `test -f 'ringbuffer.c' || echo '$(srcdir)/'`ringbuffer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_ffmpeg_la-ringbuffer.Tpo $(DEPDIR)/libguile_aiscm_ffmpeg_la-ringbuffer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ringbuffer.c' object='libguile_aiscm_ffmpeg_la-ringbuffer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_ffmpeg_la-ringbuffer.lo `test -f 'ringbuffer.c' || echo '$(srcdir)/'`ringbuffer.c libguile_aiscm_ffmpeg_la-util-helpers.lo: util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_ffmpeg_la-util-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_ffmpeg_la-util-helpers.Tpo -c -o libguile_aiscm_ffmpeg_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_ffmpeg_la-util-helpers.Tpo $(DEPDIR)/libguile_aiscm_ffmpeg_la-util-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util-helpers.c' object='libguile_aiscm_ffmpeg_la-util-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_ffmpeg_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_ffmpeg_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c libguile_aiscm_image_la-image.lo: image.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_image_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_image_la-image.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_image_la-image.Tpo -c -o libguile_aiscm_image_la-image.lo `test -f 'image.c' || echo '$(srcdir)/'`image.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_image_la-image.Tpo $(DEPDIR)/libguile_aiscm_image_la-image.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='image.c' object='libguile_aiscm_image_la-image.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_image_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_image_la-image.lo `test -f 'image.c' || echo '$(srcdir)/'`image.c libguile_aiscm_image_la-util-helpers.lo: util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_image_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_image_la-util-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_image_la-util-helpers.Tpo -c -o libguile_aiscm_image_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_image_la-util-helpers.Tpo $(DEPDIR)/libguile_aiscm_image_la-util-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util-helpers.c' object='libguile_aiscm_image_la-util-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_image_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_image_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c libguile_aiscm_jit_la-jit.lo: jit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_jit_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_jit_la-jit.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_jit_la-jit.Tpo -c -o libguile_aiscm_jit_la-jit.lo `test -f 'jit.c' || echo '$(srcdir)/'`jit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_jit_la-jit.Tpo $(DEPDIR)/libguile_aiscm_jit_la-jit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jit.c' object='libguile_aiscm_jit_la-jit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_jit_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_jit_la-jit.lo `test -f 'jit.c' || echo '$(srcdir)/'`jit.c libguile_aiscm_magick_la-magick.lo: magick.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_magick_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_magick_la-magick.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_magick_la-magick.Tpo -c -o libguile_aiscm_magick_la-magick.lo `test -f 'magick.c' || echo '$(srcdir)/'`magick.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_magick_la-magick.Tpo $(DEPDIR)/libguile_aiscm_magick_la-magick.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='magick.c' object='libguile_aiscm_magick_la-magick.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_magick_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_magick_la-magick.lo `test -f 'magick.c' || echo '$(srcdir)/'`magick.c libguile_aiscm_obj_la-obj.lo: obj.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_obj_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_obj_la-obj.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_obj_la-obj.Tpo -c -o libguile_aiscm_obj_la-obj.lo `test -f 'obj.c' || echo '$(srcdir)/'`obj.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_obj_la-obj.Tpo $(DEPDIR)/libguile_aiscm_obj_la-obj.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='obj.c' object='libguile_aiscm_obj_la-obj.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_obj_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_obj_la-obj.lo `test -f 'obj.c' || echo '$(srcdir)/'`obj.c libguile_aiscm_pulse_la-pulse.lo: pulse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_pulse_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_pulse_la-pulse.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_pulse_la-pulse.Tpo -c -o libguile_aiscm_pulse_la-pulse.lo `test -f 'pulse.c' || echo '$(srcdir)/'`pulse.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_pulse_la-pulse.Tpo $(DEPDIR)/libguile_aiscm_pulse_la-pulse.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pulse.c' object='libguile_aiscm_pulse_la-pulse.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_pulse_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_pulse_la-pulse.lo `test -f 'pulse.c' || echo '$(srcdir)/'`pulse.c libguile_aiscm_pulse_la-ringbuffer.lo: ringbuffer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_pulse_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_pulse_la-ringbuffer.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_pulse_la-ringbuffer.Tpo -c -o libguile_aiscm_pulse_la-ringbuffer.lo `test -f 'ringbuffer.c' || echo '$(srcdir)/'`ringbuffer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_pulse_la-ringbuffer.Tpo $(DEPDIR)/libguile_aiscm_pulse_la-ringbuffer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ringbuffer.c' object='libguile_aiscm_pulse_la-ringbuffer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_pulse_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_pulse_la-ringbuffer.lo `test -f 'ringbuffer.c' || echo '$(srcdir)/'`ringbuffer.c libguile_aiscm_samples_la-samples.lo: samples.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_samples_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_samples_la-samples.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_samples_la-samples.Tpo -c -o libguile_aiscm_samples_la-samples.lo `test -f 'samples.c' || echo '$(srcdir)/'`samples.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_samples_la-samples.Tpo $(DEPDIR)/libguile_aiscm_samples_la-samples.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='samples.c' object='libguile_aiscm_samples_la-samples.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_samples_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_samples_la-samples.lo `test -f 'samples.c' || echo '$(srcdir)/'`samples.c libguile_aiscm_samples_la-samples-helpers.lo: samples-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_samples_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_samples_la-samples-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_samples_la-samples-helpers.Tpo -c -o libguile_aiscm_samples_la-samples-helpers.lo `test -f 'samples-helpers.c' || echo '$(srcdir)/'`samples-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_samples_la-samples-helpers.Tpo $(DEPDIR)/libguile_aiscm_samples_la-samples-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='samples-helpers.c' object='libguile_aiscm_samples_la-samples-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_samples_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_samples_la-samples-helpers.lo `test -f 'samples-helpers.c' || echo '$(srcdir)/'`samples-helpers.c libguile_aiscm_samples_la-util-helpers.lo: util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_samples_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_samples_la-util-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_samples_la-util-helpers.Tpo -c -o libguile_aiscm_samples_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_samples_la-util-helpers.Tpo $(DEPDIR)/libguile_aiscm_samples_la-util-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util-helpers.c' object='libguile_aiscm_samples_la-util-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_samples_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_samples_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c libguile_aiscm_tests_la-tests.lo: tests.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-tests.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-tests.Tpo -c -o libguile_aiscm_tests_la-tests.lo `test -f 'tests.c' || echo '$(srcdir)/'`tests.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-tests.Tpo $(DEPDIR)/libguile_aiscm_tests_la-tests.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests.c' object='libguile_aiscm_tests_la-tests.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-tests.lo `test -f 'tests.c' || echo '$(srcdir)/'`tests.c libguile_aiscm_tests_la-ffmpeg-helpers.lo: ffmpeg-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-ffmpeg-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-ffmpeg-helpers.Tpo -c -o libguile_aiscm_tests_la-ffmpeg-helpers.lo `test -f 'ffmpeg-helpers.c' || echo '$(srcdir)/'`ffmpeg-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-ffmpeg-helpers.Tpo $(DEPDIR)/libguile_aiscm_tests_la-ffmpeg-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ffmpeg-helpers.c' object='libguile_aiscm_tests_la-ffmpeg-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-ffmpeg-helpers.lo `test -f 'ffmpeg-helpers.c' || echo '$(srcdir)/'`ffmpeg-helpers.c libguile_aiscm_tests_la-ffmpeg-helpers-tests.lo: ffmpeg-helpers-tests.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-ffmpeg-helpers-tests.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-ffmpeg-helpers-tests.Tpo -c -o libguile_aiscm_tests_la-ffmpeg-helpers-tests.lo `test -f 'ffmpeg-helpers-tests.c' || echo '$(srcdir)/'`ffmpeg-helpers-tests.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-ffmpeg-helpers-tests.Tpo $(DEPDIR)/libguile_aiscm_tests_la-ffmpeg-helpers-tests.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ffmpeg-helpers-tests.c' object='libguile_aiscm_tests_la-ffmpeg-helpers-tests.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-ffmpeg-helpers-tests.lo `test -f 'ffmpeg-helpers-tests.c' || echo '$(srcdir)/'`ffmpeg-helpers-tests.c libguile_aiscm_tests_la-ringbuffer.lo: ringbuffer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-ringbuffer.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-ringbuffer.Tpo -c -o libguile_aiscm_tests_la-ringbuffer.lo `test -f 'ringbuffer.c' || echo '$(srcdir)/'`ringbuffer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-ringbuffer.Tpo $(DEPDIR)/libguile_aiscm_tests_la-ringbuffer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ringbuffer.c' object='libguile_aiscm_tests_la-ringbuffer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-ringbuffer.lo `test -f 'ringbuffer.c' || echo '$(srcdir)/'`ringbuffer.c libguile_aiscm_tests_la-ringbuffer-tests.lo: ringbuffer-tests.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-ringbuffer-tests.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-ringbuffer-tests.Tpo -c -o libguile_aiscm_tests_la-ringbuffer-tests.lo `test -f 'ringbuffer-tests.c' || echo '$(srcdir)/'`ringbuffer-tests.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-ringbuffer-tests.Tpo $(DEPDIR)/libguile_aiscm_tests_la-ringbuffer-tests.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ringbuffer-tests.c' object='libguile_aiscm_tests_la-ringbuffer-tests.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-ringbuffer-tests.lo `test -f 'ringbuffer-tests.c' || echo '$(srcdir)/'`ringbuffer-tests.c libguile_aiscm_tests_la-jit-tests.lo: jit-tests.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-jit-tests.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-jit-tests.Tpo -c -o libguile_aiscm_tests_la-jit-tests.lo `test -f 'jit-tests.c' || echo '$(srcdir)/'`jit-tests.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-jit-tests.Tpo $(DEPDIR)/libguile_aiscm_tests_la-jit-tests.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jit-tests.c' object='libguile_aiscm_tests_la-jit-tests.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-jit-tests.lo `test -f 'jit-tests.c' || echo '$(srcdir)/'`jit-tests.c libguile_aiscm_tests_la-util-helpers.lo: util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-util-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-util-helpers.Tpo -c -o libguile_aiscm_tests_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-util-helpers.Tpo $(DEPDIR)/libguile_aiscm_tests_la-util-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util-helpers.c' object='libguile_aiscm_tests_la-util-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c libguile_aiscm_tests_la-util-helpers-tests.lo: util-helpers-tests.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-util-helpers-tests.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-util-helpers-tests.Tpo -c -o libguile_aiscm_tests_la-util-helpers-tests.lo `test -f 'util-helpers-tests.c' || echo '$(srcdir)/'`util-helpers-tests.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-util-helpers-tests.Tpo $(DEPDIR)/libguile_aiscm_tests_la-util-helpers-tests.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util-helpers-tests.c' object='libguile_aiscm_tests_la-util-helpers-tests.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-util-helpers-tests.lo `test -f 'util-helpers-tests.c' || echo '$(srcdir)/'`util-helpers-tests.c libguile_aiscm_tests_la-samples-helpers.lo: samples-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-samples-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-samples-helpers.Tpo -c -o libguile_aiscm_tests_la-samples-helpers.lo `test -f 'samples-helpers.c' || echo '$(srcdir)/'`samples-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-samples-helpers.Tpo $(DEPDIR)/libguile_aiscm_tests_la-samples-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='samples-helpers.c' object='libguile_aiscm_tests_la-samples-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-samples-helpers.lo `test -f 'samples-helpers.c' || echo '$(srcdir)/'`samples-helpers.c libguile_aiscm_tests_la-samples-helpers-tests.lo: samples-helpers-tests.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_tests_la-samples-helpers-tests.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_tests_la-samples-helpers-tests.Tpo -c -o libguile_aiscm_tests_la-samples-helpers-tests.lo `test -f 'samples-helpers-tests.c' || echo '$(srcdir)/'`samples-helpers-tests.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_tests_la-samples-helpers-tests.Tpo $(DEPDIR)/libguile_aiscm_tests_la-samples-helpers-tests.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='samples-helpers-tests.c' object='libguile_aiscm_tests_la-samples-helpers-tests.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_tests_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_tests_la-samples-helpers-tests.lo `test -f 'samples-helpers-tests.c' || echo '$(srcdir)/'`samples-helpers-tests.c libguile_aiscm_util_la-util.lo: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_util_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_util_la-util.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_util_la-util.Tpo -c -o libguile_aiscm_util_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_util_la-util.Tpo $(DEPDIR)/libguile_aiscm_util_la-util.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='libguile_aiscm_util_la-util.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_util_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_util_la-util.lo `test -f 'util.c' || echo '$(srcdir)/'`util.c libguile_aiscm_v4l2_la-v4l2.lo: v4l2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_v4l2_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_v4l2_la-v4l2.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_v4l2_la-v4l2.Tpo -c -o libguile_aiscm_v4l2_la-v4l2.lo `test -f 'v4l2.c' || echo '$(srcdir)/'`v4l2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_v4l2_la-v4l2.Tpo $(DEPDIR)/libguile_aiscm_v4l2_la-v4l2.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='v4l2.c' object='libguile_aiscm_v4l2_la-v4l2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_v4l2_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_v4l2_la-v4l2.lo `test -f 'v4l2.c' || echo '$(srcdir)/'`v4l2.c libguile_aiscm_v4l2_la-util-helpers.lo: util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_v4l2_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_v4l2_la-util-helpers.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_v4l2_la-util-helpers.Tpo -c -o libguile_aiscm_v4l2_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_v4l2_la-util-helpers.Tpo $(DEPDIR)/libguile_aiscm_v4l2_la-util-helpers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util-helpers.c' object='libguile_aiscm_v4l2_la-util-helpers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_v4l2_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_v4l2_la-util-helpers.lo `test -f 'util-helpers.c' || echo '$(srcdir)/'`util-helpers.c libguile_aiscm_xorg_la-xorg.lo: xorg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_xorg_la_CFLAGS) $(CFLAGS) -MT libguile_aiscm_xorg_la-xorg.lo -MD -MP -MF $(DEPDIR)/libguile_aiscm_xorg_la-xorg.Tpo -c -o libguile_aiscm_xorg_la-xorg.lo `test -f 'xorg.c' || echo '$(srcdir)/'`xorg.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libguile_aiscm_xorg_la-xorg.Tpo $(DEPDIR)/libguile_aiscm_xorg_la-xorg.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xorg.c' object='libguile_aiscm_xorg_la-xorg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libguile_aiscm_xorg_la_CFLAGS) $(CFLAGS) -c -o libguile_aiscm_xorg_la-xorg.lo `test -f 'xorg.c' || echo '$(srcdir)/'`xorg.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-cacheDATA: $(cache_DATA) @$(NORMAL_INSTALL) @list='$(cache_DATA)'; test -n "$(cachedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(cachedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cachedir)" || 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)$(cachedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(cachedir)" || exit $$?; \ done uninstall-cacheDATA: @$(NORMAL_UNINSTALL) @list='$(cache_DATA)'; test -n "$(cachedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(cachedir)'; $(am__uninstall_files_from_dir) install-siteDATA: $(site_DATA) @$(NORMAL_INSTALL) @list='$(site_DATA)'; test -n "$(sitedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sitedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sitedir)" || 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)$(sitedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sitedir)" || exit $$?; \ done uninstall-siteDATA: @$(NORMAL_UNINSTALL) @list='$(site_DATA)'; test -n "$(sitedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sitedir)'; $(am__uninstall_files_from_dir) bench-local: recheck-local: integration-local: reintegration-local: 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 $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(extensiondir)" "$(DESTDIR)$(cachedir)" "$(DESTDIR)$(sitedir)"; 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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) bench: bench-am bench-am: bench-local clean: clean-am clean-am: clean-checkLTLIBRARIES clean-extensionLTLIBRARIES \ 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-cacheDATA install-extensionLTLIBRARIES \ install-siteDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook 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: integration: integration-am integration-am: integration-local maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: recheck: recheck-am recheck-am: recheck-local reintegration: reintegration-am reintegration-am: reintegration-local uninstall-am: uninstall-cacheDATA uninstall-extensionLTLIBRARIES \ uninstall-siteDATA .MAKE: check-am install-am install-data-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am bench-am bench-local check \ check-am clean clean-checkLTLIBRARIES \ clean-extensionLTLIBRARIES 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-cacheDATA install-data install-data-am \ install-data-hook install-dvi install-dvi-am install-exec \ install-exec-am install-extensionLTLIBRARIES install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-siteDATA install-strip installcheck installcheck-am \ installdirs integration-am integration-local maintainer-clean \ maintainer-clean-generic maintainer-clean-local mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am recheck-am recheck-local reintegration-am \ reintegration-local tags tags-am uninstall uninstall-am \ uninstall-cacheDATA uninstall-extensionLTLIBRARIES \ uninstall-siteDATA .PRECIOUS: Makefile install-data-hook: $(TOUCH) $(addprefix $(DESTDIR)$(cachedir)/,$(cache_DATA)) .scm.go: LD_LIBRARY_PATH=$(srcdir)/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 $(GUILE_TOOLS) compile -L$(top_builddir) -o $@ $< $(cache_DATA): $(extension_LTLIBRARIES) maintainer-clean-local: rm -Rf .deps # 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: aiscm-0.15.1/aiscm/jit.scm0000644000175000017500000004514513213600050012200 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm jit) #:use-module (oop goops) #:use-module (ice-9 optargs) #:use-module (ice-9 curried-definitions) #:use-module (ice-9 binary-ports) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (aiscm util) #:use-module (aiscm asm) #:use-module (aiscm element) #:use-module (aiscm scalar) #:use-module (aiscm pointer) #:use-module (aiscm bool) #:use-module (aiscm int) #:use-module (aiscm float) #:use-module (aiscm obj) #:use-module (aiscm composite) #:use-module (aiscm sequence) #:use-module (aiscm variable) #:use-module (aiscm command) #:use-module (aiscm program) #:use-module (aiscm register-allocate) #:use-module (aiscm expression) #:use-module (aiscm loop) #:use-module (aiscm compile) #:use-module (aiscm operation) #:use-module (aiscm method) #:export (virtual-variables assemble build-list package-return-content content-vars jit fill is-pointer? call-needs-intermediate? ensure-default-strides decompose-value decompose-arg delegate-fun force-composite-parameters generate-return-code make-native-function native-call scm-eol scm-cons scm-gc-malloc-pointerless scm-gc-malloc operations coerce-where) #:re-export (min max to-type + - * == && || ! != ~ & | ^ << >> % =0 !=0 lt le gt ge -= ~= abs= += *= <<= >>= &= |= ^= &&= ||= min= max= set) #:export-syntax (define-jit-method pass-parameters)) (define ctx (make )) (define* (virtual-variables results parameters instructions #:key (registers default-registers)) (jit-compile (flatten-code (relabel (filter-blocks instructions))) #:registers registers #:parameters parameters #:results results #:blocked (blocked-intervals instructions))) (define (is-pointer? value) (and (delegate value) (is-a? (delegate value) >))) (define (call-needs-intermediate? t value) (or (is-pointer? value) (code-needs-intermediate? t value))) (define ((delegate-fun name) . args) (apply (apply name (map type (cdr args))) args)) (define ((delegate-cumulative name) . args) (apply (apply name (map type args)) args)) (define-syntax-rule (n-ary-base name arity coercion fun) (define-nary-typed-method name arity (lambda args (make-function name coercion fun args)))) (define (force-composite-parameters targets args fun) (force-parameters targets args code-needs-intermediate? (lambda intermediates (apply fun (map (lambda (arg) (decompose-value (type arg) arg)) intermediates))))) (define-syntax-rule (define-composite-collect name arity) (define-cycle-method name arity > > (lambda targets (lambda (out . args) (force-composite-parameters targets args (lambda intermediates (let [(result (apply name intermediates))] (append-map duplicate (content (type out) out) (content (type result) result))))))))) (define-syntax-rule (define-jit-method coercion name arity) (begin (set! operations (cons (quote name) operations)) (n-ary-base name arity coercion (delegate-fun name)) (define-nary-collect name arity) (define-composite-collect name arity) (define-jit-dispatch name arity name))) (define-syntax-rule (define-cumulative name arity) (define-nary-typed-method name arity (delegate-cumulative name))) (define-syntax-rule (define-composite-cumulative name arity) (define-nary-typed-method name arity > (lambda types (lambda args (force-composite-parameters types args name))))) (define-syntax-rule (define-cumulative-method name arity) (begin (define-cumulative name arity) (define-composite-cumulative name arity))) (define-cumulative-method -= 1) (define-cumulative-method ~= 1) (define-cumulative-method abs= 1) (define-cumulative-method <<= 1) (define-cumulative-method >>= 1) (define-cumulative-method += 2) (define-cumulative-method -= 2) (define-cumulative-method *= 2) (define-cumulative-method <<= 2) (define-cumulative-method >>= 2) (define-cumulative-method &= 2) (define-cumulative-method |= 2) (define-cumulative-method ^= 2) (define-cumulative-method &&= 2) (define-cumulative-method ||= 2) (define-cumulative-method min= 2) (define-cumulative-method max= 2) (define-operator-mapping - (> ) (native-fun obj-negate )) (define-method (- (z ) (a >)) (native-fun obj-negate)) (define-operator-mapping ~ (> ) (native-fun scm-lognot )) (define-operator-mapping abs (> ) (native-fun scm-abs )) (define-operator-mapping =0 (> ) (native-fun obj-zero-p )) (define-operator-mapping !=0 (> ) (native-fun obj-nonzero-p )) (define-operator-mapping ! (> ) (native-fun obj-not )) (define-operator-mapping << (> ) (native-fun obj-shl1 )) (define-operator-mapping >> (> ) (native-fun obj-shr1 )) (define-operator-mapping + (> >) (native-fun scm-sum )) (define-operator-mapping - (> >) (native-fun scm-difference)) (define-operator-mapping * (> >) (native-fun scm-product )) (define-operator-mapping / (> >) (native-fun scm-divide )) (define-operator-mapping % (> >) (native-fun scm-remainder )) (define-operator-mapping << (> >) (native-fun scm-ash )) (define-operator-mapping >> (> >) (native-fun obj-shr )) (define-operator-mapping & (> >) (native-fun scm-logand )) (define-operator-mapping | (> >) (native-fun scm-logior )) (define-operator-mapping ^ (> >) (native-fun scm-logxor )) (define-operator-mapping && (> >) (native-fun obj-and )) (define-operator-mapping || (> >) (native-fun obj-or )) (define-operator-mapping == (> >) (native-fun obj-equal-p )) (define-operator-mapping != (> >) (native-fun obj-nequal-p )) (define-operator-mapping lt (> >) (native-fun obj-less-p )) (define-operator-mapping le (> >) (native-fun obj-leq-p )) (define-operator-mapping gt (> >) (native-fun obj-gr-p )) (define-operator-mapping ge (> >) (native-fun obj-geq-p )) (define-operator-mapping min (> >) (native-fun scm-min )) (define-operator-mapping max (> >) (native-fun scm-max )) (define-operator-mapping where (> > >) (native-fun obj-where )) (define-syntax-rule (define-object-cumulative name basis) (define-method (name (a >) (b >)) (lambda args (duplicate (car args) (apply basis args))))) (define-object-cumulative += + ) (define-object-cumulative *= * ) (define-object-cumulative max= max) (define-object-cumulative min= min) (define-method (decompose-value (target >) self) self) (define-method (type (self )) (apply (coercion self) (map type (delegate self)))) (define (content-vars args) (map get (append-map content (map class-of args) args))) (define (assemble return-args args instructions) "Determine result variables, argument variables, and instructions" (list (content-vars return-args) (content-vars args) (attach instructions (RET)))) (define (build-list . args) "Generate code to package ARGS in a Scheme list" (fold-right scm-cons scm-eol args)) (define (package-return-content value) "Generate code to package parameter VALUE in a Scheme list" (apply build-list (content (type value) value))) (define-method (construct-value result-type retval expr) '()) (define-method (construct-value (result-type >>) retval expr) (let [(malloc (if (pointerless? result-type) scm-gc-malloc-pointerless scm-gc-malloc))] (append (append-map duplicate (shape retval) (shape expr)) (duplicate (last (content result-type retval)) (malloc (size-of retval))) (append-map duplicate (strides retval) (default-strides (shape retval)))))) (define (generate-return-code args intermediate expr) (let [(retval (skeleton ))] (list (list retval) args (append (construct-value (type intermediate) intermediate expr) (duplicate intermediate expr) (duplicate (parameter retval) (package-return-content intermediate)))))) (define (jit context classes proc) (let* [(args (map skeleton classes)) (parameters (map parameter args)) (expr (apply proc parameters)) (result-type (type expr)) (intermediate (parameter result-type)) (result (generate-return-code args intermediate expr)) (commands (apply virtual-variables (apply assemble result))) (instructions (asm context (map typecode (content-vars args)) commands)) (fun (lambda header (apply instructions (append-map unbuild classes header))))] (lambda args (build result-type (address->scm (apply fun args)))))) (define-method (compiled-copy self value) (let* [(classes (list (class-of self) (class-of value))) (args (map skeleton classes)) (parameters (map parameter args)) (commands (virtual-variables '() (content-vars args) (attach (apply duplicate parameters) (RET)))) (instructions (asm ctx (map typecode (content-vars args)) commands)) (proc (lambda header (apply instructions (append-map unbuild classes header))))] (add-method! compiled-copy (make #:specializers classes #:procedure (lambda (self value) (proc self (get value)) (get value)))) (compiled-copy self value))) (define-method (set (self >) value) (compiled-copy self (wrap value))) (define-method (set (self >) . args) (compiled-copy (fold-right element self (all-but-last args)) (wrap (last args)))) (define-method (fill type shape value) (let [(retval (make (multiarray type (length shape)) #:shape shape))] (set retval value) (get (fetch retval)))) (define-syntax-rule (define-jit-dispatch name arity delegate) (define-nary-typed-method name arity (lambda args (let [(f (jit ctx (map class-of args) delegate))] (add-method! name (make #:specializers (map class-of args) #:procedure (lambda args (apply f (map get args)))))) (apply name args)))) (define-macro (define-cycle-method name arity target other fun); TODO: put under test (let* [(types (cons target (make-list (1- arity) other)))] `(begin ,@(map (lambda (i) `(define-typed-method ,name ,(cycle-times types i) ,fun)) (iota arity))))) (define-syntax-rule (define-nary-collect name arity) "Dispatch for n-ary operation with Scheme numerical types" (define-cycle-method name arity (lambda args (apply name (map wrap args))))) (define operations '()) (define-method (to-bool a) (convert-type a)) (define-method (to-bool a b) (coerce (to-bool a) (to-bool b))) (define (coerce-where m a b) "Coercion for selecting values using a boolean mask with 'where'" (convert-type (typecode (coerce a b)) (reduce coerce #f (list m a b)))) (define-jit-dispatch duplicate 1 identity) (define-jit-method identity - 1) (define-jit-method identity ~ 1) (define-jit-method identity abs 1) (define-jit-method to-bool =0 1) (define-jit-method to-bool !=0 1) (define-jit-method to-bool ! 1) (define-jit-method identity << 1) (define-jit-method identity >> 1) (define-jit-method coerce + 2) (define-jit-method coerce - 2) (define-jit-method coerce * 2) (define-jit-method coerce / 2) (define-jit-method coerce % 2) (define-jit-method coerce << 2) (define-jit-method coerce >> 2) (define-jit-method coerce & 2) (define-jit-method coerce | 2) (define-jit-method coerce ^ 2) (define-jit-method coerce && 2) (define-jit-method coerce || 2) (define-jit-method to-bool == 2) (define-jit-method to-bool != 2) (define-jit-method to-bool lt 2) (define-jit-method to-bool le 2) (define-jit-method to-bool gt 2) (define-jit-method to-bool ge 2) (define-jit-method coerce min 2) (define-jit-method coerce max 2) (define-jit-method coerce-where where 3) (define-method (to-type (target >) (source > )) (native-fun scm-to-uint8 )) (define-method (to-type (target > ) (source > )) (native-fun scm-to-int8 )) (define-method (to-type (target >) (source > )) (native-fun scm-to-uint16 )) (define-method (to-type (target > ) (source > )) (native-fun scm-to-int16 )) (define-method (to-type (target > ) (source > )) (native-fun scm-to-uint32 )) (define-method (to-type (target > ) (source > )) (native-fun scm-to-int32 )) (define-method (to-type (target >) (source > )) (native-fun scm-to-uint64 )) (define-method (to-type (target > ) (source > )) (native-fun scm-to-int64 )) (define-method (to-type (target >>) (source >>)) (functional-code identity mov)) (define-method (to-type (target >>) (source > )) (functional-code identity mov)) (define-method (to-type (target > ) (source > )) (functional-code identity mov)) (define-method (to-type (target > ) (source >>)) (functional-code identity mov)) (define-method (to-type (target > ) (source > )) (native-fun scm-to-bool )) (define-method (to-type (target > ) (source > )) (functional-code identity mov)) (define-method (to-type (target > ) (source >)) (native-fun scm-from-uint8 )) (define-method (to-type (target > ) (source > )) (native-fun scm-from-int8 )) (define-method (to-type (target > ) (source >)) (native-fun scm-from-uint16)) (define-method (to-type (target > ) (source > )) (native-fun scm-from-int16 )) (define-method (to-type (target > ) (source > )) (native-fun scm-from-uint32)) (define-method (to-type (target > ) (source > )) (native-fun scm-from-int32 )) (define-method (to-type (target > ) (source >)) (native-fun scm-from-uint64)) (define-method (to-type (target > ) (source > )) (native-fun scm-from-int64 )) (define-method (to-type (target > ) (source > )) (native-fun obj-from-bool )) (define-method (to-type (target >) (source >)) (lambda (out arg) (append-map (lambda (channel) (duplicate (channel (delegate out)) (channel (delegate arg)))) (components source)))) (define-method (to-type (target >) (a )) (let [(to-target (cut to-type target <>)) (coercion (cut convert-type target <>))] (make-function to-target coercion (delegate-fun to-target) (list a)))) (define-method (to-type (target >) (self )) (let [(f (jit ctx (list (class-of self)) (cut to-type target <>)))] (add-method! to-type (make #:specializers (map class-of (list target self)) #:procedure (lambda (target self) (f (get self))))) (to-type target self))) (define (ensure-default-strides img) "Create a duplicate of the array unless it is compact" (if (equal? (strides img) (default-strides (shape img))) img (duplicate img))) (define-syntax-rule (pass-parameters parameters body ...) (let [(first-six-parameters (take-up-to parameters 6)) (remaining-parameters (drop-up-to parameters 6))] (append (map (lambda (register parameter) (MOV (to-type (native-equivalent (type parameter)) register) (get (delegate parameter)))) parameter-registers first-six-parameters) (map (lambda (parameter) (PUSH (get (delegate parameter)))) remaining-parameters) (list body ...) (list (ADD RSP (* 8 (length remaining-parameters))))))) (define* ((native-fun native) out . args) (force-parameters (argument-types native) args call-needs-intermediate? (lambda intermediates (blocked caller-saved (pass-parameters intermediates (MOV RAX (function-pointer native)) (CALL RAX) (MOV (get (delegate out)) (to-type (native-equivalent (return-type native)) RAX))))))) (define (make-native-function native . args) (make-function make-native-function (const (return-type native)) (native-fun native) args)) (define (native-call return-type argument-types function-pointer) (cut make-native-function (make-native-method return-type argument-types function-pointer) <...>)) ; Scheme list manipulation (define main (dynamic-link)) (define scm-eol (native-const (scm->address '()))) (define scm-cons (native-call (list ) (dynamic-func "scm_cons" main))) (define scm-gc-malloc-pointerless (native-call (list ) (dynamic-func "scm_gc_malloc_pointerless" main))) (define scm-gc-malloc (native-call (list ) (dynamic-func "scm_gc_malloc" main))) aiscm-0.15.1/aiscm/pulse.c0000644000175000017500000002451613213600050012201 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "ringbuffer.h" #include "util-helpers.h" // https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/Developer/ // http://freedesktop.org/software/pulseaudio/doxygen/pacat-simple_8c-example.html // https://jan.newmarch.name/LinuxSound/Sampled/PulseAudio/ static scm_t_bits pulsedev_tag; struct pulsedev_t { pa_sample_spec sample_spec; struct ringbuffer_t audio_buffer; pa_threaded_mainloop *mainloop; pa_mainloop_api *mainloop_api; pa_context *context; pa_stream *stream; }; static struct pulsedev_t *get_self_no_check(SCM scm_self) { return (struct pulsedev_t *)SCM_SMOB_DATA(scm_self); } static struct pulsedev_t *get_self(SCM scm_self) { scm_assert_smob_type(pulsedev_tag, scm_self); return get_self_no_check(scm_self); } static pa_threaded_mainloop *get_mainloop(struct pulsedev_t *self) { if (!self->mainloop) scm_misc_error("pulsedev", "Device is not open. Did you call 'destroy' before?", SCM_EOL); return self->mainloop; } SCM pulsedev_destroy(SCM scm_self) { struct pulsedev_t *self = get_self_no_check(scm_self); if (self->stream) { pa_stream_disconnect(self->stream); pa_stream_unref(self->stream); self->stream = NULL; }; if (self->context) { pa_context_disconnect(self->context); pa_context_unref(self->context); self->context = NULL; }; if (self->mainloop) { pa_threaded_mainloop_stop(self->mainloop); pa_threaded_mainloop_free(self->mainloop); self->mainloop = NULL; self->mainloop_api = NULL; }; if (self->audio_buffer.buffer) { ringbuffer_destroy(&self->audio_buffer); self->audio_buffer.buffer = NULL; }; return SCM_UNSPECIFIED; } size_t free_pulsedev(SCM scm_self) { struct pulsedev_t *self = get_self_no_check(scm_self); pulsedev_destroy(scm_self); scm_gc_free(self, sizeof(struct pulsedev_t), "pulse"); return 0; } static void write_from_ringbuffer(char *data, int count, int offset, void *userdata) { pa_stream_write((pa_stream *)userdata, data, count, NULL, 0LL, PA_SEEK_RELATIVE); } static void stream_write_callback(pa_stream *s, size_t length, void *userdata) { struct pulsedev_t *self = (struct pulsedev_t *)userdata; if (self->audio_buffer.fill) ringbuffer_fetch(&self->audio_buffer, length, write_from_ringbuffer, self->stream); else pa_threaded_mainloop_signal(self->mainloop, 0); } static void stream_read_callback(pa_stream *s, size_t length, void *userdata) { struct pulsedev_t *self = (struct pulsedev_t *)userdata; while (pa_stream_readable_size(self->stream) > 0) { const void *data; size_t count; pa_stream_peek(s, &data, &count); ringbuffer_store(&self->audio_buffer, data, count); pa_stream_drop(self->stream); }; pa_threaded_mainloop_signal(self->mainloop, 0); } static void initialise_mainloop(struct pulsedev_t *self) { self->mainloop = pa_threaded_mainloop_new(); self->mainloop_api = pa_threaded_mainloop_get_api(self->mainloop); } void context_state_callback(pa_context *context, void *userdata) { *(pa_context_state_t *)userdata = pa_context_get_state(context); } static void initialise_context(struct pulsedev_t *self) { self->context = pa_context_new(self->mainloop_api, "aiscm"); pa_context_connect(self->context, NULL, 0, NULL); pa_context_state_t context_state = PA_CONTEXT_UNCONNECTED; pa_context_set_state_callback(self->context, context_state_callback, &context_state); if (pa_threaded_mainloop_start(self->mainloop) != PA_OK) scm_misc_error("make-pulsedev", "Error starting threaded mainloop: ~a", scm_list_1(scm_from_locale_string(pa_strerror(pa_context_errno(self->context))))); while (context_state != PA_CONTEXT_READY) pa_threaded_mainloop_wait(self->mainloop); } static void initialise_stream(struct pulsedev_t *self, char playback) { self->stream = pa_stream_new(self->context, "playback", &self->sample_spec, NULL); if (!self->stream) scm_misc_error("make-pulsedev", "Error creating audio stream: ~a", scm_list_1(scm_from_locale_string(pa_strerror(pa_context_errno(self->context))))); if (playback) pa_stream_set_write_callback(self->stream, stream_write_callback, self); else pa_stream_set_read_callback(self->stream, stream_read_callback, self); } static void connect_stream(struct pulsedev_t *self, const char *name, char playback, pa_usec_t latency) { static pa_stream_flags_t flags = PA_STREAM_ADJUST_LATENCY | PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_AUTO_TIMING_UPDATE; pa_buffer_attr buffer_attr; memset(&buffer_attr, 0, sizeof(buffer_attr)); buffer_attr.fragsize = pa_usec_to_bytes(latency, &self->sample_spec); buffer_attr.tlength = pa_usec_to_bytes(latency, &self->sample_spec); buffer_attr.maxlength = (uint32_t)-1; buffer_attr.minreq = pa_usec_to_bytes(0, &self->sample_spec); if (playback) pa_stream_connect_playback(self->stream, name, &buffer_attr, flags, NULL, NULL); else pa_stream_connect_record(self->stream, name, &buffer_attr, flags); } SCM make_pulsedev(SCM scm_name, SCM scm_type, SCM scm_playback, SCM scm_channels, SCM scm_rate, SCM scm_latency) { SCM retval; struct pulsedev_t *self = (struct pulsedev_t *)scm_gc_calloc(sizeof(struct pulsedev_t), "pulsedev"); SCM_NEWSMOB(retval, pulsedev_tag, self); const char *name = scm_is_string(scm_name) ? scm_to_locale_string(scm_name) : NULL; char playback = scm_is_true(scm_playback); pa_usec_t latency = (pa_usec_t)(scm_to_double(scm_latency) * 1e6); self->sample_spec.format = scm_to_int(scm_type); self->sample_spec.rate = scm_to_int(scm_rate); self->sample_spec.channels = scm_to_int(scm_channels); ringbuffer_init(&self->audio_buffer, 1024); initialise_mainloop(self); initialise_context(self); initialise_stream(self, playback); connect_stream(self, name, playback, latency); return retval; } SCM pulsedev_write(SCM scm_self, SCM scm_data, SCM scm_bytes) { struct pulsedev_t *self = get_self(scm_self); pa_threaded_mainloop *mainloop = get_mainloop(self); pa_threaded_mainloop_lock(mainloop); ringbuffer_store(&self->audio_buffer, scm_to_pointer(scm_data), scm_to_int(scm_bytes)); pa_threaded_mainloop_unlock(mainloop); return SCM_UNSPECIFIED; } void wait_for_flush(pa_stream *stream, int success, void *userdata) { pa_threaded_mainloop_signal(userdata, 0); } SCM pulsedev_flush(SCM scm_self)// TODO: check audio device still open { struct pulsedev_t *self = get_self(scm_self); pa_threaded_mainloop *mainloop = get_mainloop(self); pa_threaded_mainloop_lock(mainloop); ringbuffer_flush(&self->audio_buffer); pa_operation *operation = pa_stream_flush(self->stream, wait_for_flush, mainloop); while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) pa_threaded_mainloop_wait(mainloop); pa_operation_unref(operation); pa_threaded_mainloop_unlock(mainloop); return SCM_UNSPECIFIED; } useconds_t latency_usec(struct pulsedev_t *self) { pa_threaded_mainloop *mainloop = get_mainloop(self); pa_threaded_mainloop_lock(mainloop); pa_usec_t ringbuffer_usec = pa_bytes_to_usec(self->audio_buffer.fill, &self->sample_spec); pa_usec_t pulse_usec; int negative; pa_stream_get_latency(self->stream, &pulse_usec, &negative); useconds_t retval = negative ? ringbuffer_usec - pulse_usec : ringbuffer_usec + pulse_usec; pa_threaded_mainloop_unlock(mainloop); return retval; } SCM pulsedev_drain(SCM scm_self) { struct pulsedev_t *self = get_self(scm_self); pa_threaded_mainloop *mainloop = get_mainloop(self); pa_threaded_mainloop_lock(mainloop); while (self->audio_buffer.fill > 0) pa_threaded_mainloop_wait(mainloop); useconds_t usecs_remaining = latency_usec(self); pa_threaded_mainloop_unlock(mainloop); usleep(usecs_remaining); return SCM_UNSPECIFIED; } SCM pulsedev_latency(SCM scm_self) { struct pulsedev_t *self = get_self(scm_self); return scm_from_double(1e-6 * latency_usec(self)); } static void fetch_callback(char *data, int count, int offset, void *userdata) { memcpy((char *)userdata + offset, data, count); } SCM pulsedev_read(SCM scm_self, SCM scm_bytes)// TODO: check audio device still open { struct pulsedev_t *self = get_self(scm_self); pa_threaded_mainloop *mainloop = get_mainloop(self); pa_threaded_mainloop_lock(mainloop); int bytes = scm_to_int(scm_bytes); void *buffer = scm_gc_malloc_pointerless(bytes, "aiscm pulse frame"); while (self->audio_buffer.fill < bytes) pa_threaded_mainloop_wait(mainloop); ringbuffer_fetch(&self->audio_buffer, bytes, fetch_callback, buffer); pa_threaded_mainloop_unlock(mainloop); return scm_from_pointer(buffer, NULL); } void init_pulse(void) { pulsedev_tag = scm_make_smob_type("pulsedev", sizeof(struct pulsedev_t)); scm_set_smob_free(pulsedev_tag, free_pulsedev); scm_c_define("PA_SAMPLE_U8" , scm_from_int(PA_SAMPLE_U8 )); scm_c_define("PA_SAMPLE_S16LE" , scm_from_int(PA_SAMPLE_S16LE )); scm_c_define("PA_SAMPLE_S32LE" , scm_from_int(PA_SAMPLE_S32LE )); scm_c_define("PA_SAMPLE_FLOAT32LE", scm_from_int(PA_SAMPLE_FLOAT32LE)); scm_c_define_gsubr("make-pulsedev" , 6, 0, 0, SCM_FUNC(make_pulsedev )); scm_c_define_gsubr("pulsedev-destroy" , 1, 0, 0, SCM_FUNC(pulsedev_destroy)); scm_c_define_gsubr("pulsedev-write" , 3, 0, 0, SCM_FUNC(pulsedev_write )); scm_c_define_gsubr("pulsedev-flush" , 1, 0, 0, SCM_FUNC(pulsedev_flush )); scm_c_define_gsubr("pulsedev-drain" , 1, 0, 0, SCM_FUNC(pulsedev_drain )); scm_c_define_gsubr("pulsedev-latency" , 1, 0, 0, SCM_FUNC(pulsedev_latency)); scm_c_define_gsubr("pulsedev-read" , 2, 0, 0, SCM_FUNC(pulsedev_read )); } aiscm-0.15.1/aiscm/util.scm0000644000175000017500000002444013213600050012362 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm util) #:use-module (oop goops) #:use-module (rnrs bytevectors) #:use-module (srfi srfi-1) #:use-module (srfi srfi-19) #:use-module (srfi srfi-26) #:use-module (ice-9 optargs) #:use-module (ice-9 binary-ports) #:use-module (ice-9 curried-definitions) #:use-module (system foreign) #:export (toplevel-define! super gc-malloc gc-malloc-pointerless destroy xor attach index-of all-but-last drop-up-to take-up-to flatten cycle uncycle cycle-times integral alist-invert assq-set assq-remove product sort-by sort-by-pred partial-sort argmin argmax gather pair->list nodes live-intervals overlap-interval overlap color-intervals union difference fixed-point first-index last-index compact bytevector-sub bytevector-concat objdump map-if map-select aiscm-error symbol-list typed-header typed-header2 clock elapsed object-slots scm->address address->scm list-with) #:export-syntax (define-class* template-class synchronise define-typed-method define-nary-typed-method)) (load-extension "libguile-aiscm-util" "init_util") (define (toplevel-define! name val) "Create a definition in the top level context" (module-define! (current-module) name val) val) (define (super class) "Get (first) direct super class of a class" (let [(supers (class-direct-supers class))] (if (null? supers) (scm-error 'misc-error 'super "Class ~a has no super class" (list class) #f) (car supers)))) (define-syntax-rule (define-class* name super metaname metasuper slots ...) "Define a class with corresponding meta class and set up inheritance for both classes" (begin (define-class metaname (metasuper)) (define-class name (super) slots ... #:metaclass metaname))) (define-method (member-string x) "Convert value to string" (format #f "~a" x)) (define-method (member-string (x )) "Get class name and remove leading '<' character and trailing '>' character" (let [(name (format #f "~a" (class-name x)))] (xsubstring name 1 (1- (string-length name))))) (define-syntax-rule (template-class (base args ...) super finaliser ...) "Define a parametric class deriving from BASE using multiple ARGS as parameters" (let* [(members (map member-string (list args ...))) (name (string->symbol (format #f "<~a<~a>>" (quote base) (string-join members ",")))) (metaname (string->symbol (format #f "" name)))] (if (not (defined? name (current-module))) (let* [(metaclass (make #:dsupers (list (class-of super)) #:name metaname)) (class (make metaclass #:dsupers (list super) #:name name))] (toplevel-define! metaname metaclass) (toplevel-define! name class) (for-each (lambda (fun) (fun class metaclass)) (list finaliser ...)) class) (primitive-eval name)))) (define-generic destroy) (define (xor a b) (not (eq? a b))) (define (attach lst x) (reverse (cons x (reverse lst)))) (define (index-of a b) (let [(tail (member a (reverse b)))] (and tail (length (cdr tail))))) (define (all-but-last lst) "Return all but last element of LST." (reverse (cdr (reverse lst)))) (define (drop-up-to lst n) "Return the list LST after dropping up to N elements." (if (null? lst) lst (if (zero? n) lst (drop-up-to (cdr lst) (1- n))))) (define (take-up-to lst n) "Return up to N elements of the list LST." (if (zero? n) '() (if (null? lst) lst (cons (car lst) (take-up-to (cdr lst) (1- n)))))) (define (flatten x) (cond ((null? x) x) ((pair? x) (append (flatten (car x)) (flatten (cdr x)))) (else (list x)))) (define (cycle lst) (attach (cdr lst) (car lst))) (define (uncycle lst) (cons (last lst) (all-but-last lst))) (define (cycle-times lst n) (cond ((> n 0) (cycle-times (cycle lst) (1- n))) ((< n 0) (cycle-times (uncycle lst) (1+ n))) (else lst))) (define (integral lst) (letrec [(accumulate (lambda (lst x) (if (null? lst) lst (let [(xs (+ (car lst) x))] (cons xs (accumulate (cdr lst) xs))))))] (accumulate lst 0))) (define (alist-invert alist) (map (lambda (x) (cons (cdr x) (car x))) alist)) (define (alist-set = alist key val) (if (null? alist) (list (cons key val)) (if (= (caar alist) key) (cons (cons key val) (cdr alist)) (cons (car alist) (assq-set (cdr alist) key val))))) (define (assq-set alist key val) (alist-set eq? alist key val)) (define (assq-remove alist . keys) (filter (compose not (cut memv <> keys) car) alist)) (define (product lst1 lst2) (append-map (lambda (x) (map (cut cons x <>) lst2)) lst1)) (define (sort-by lst fun) "Sort LST by return values of FUN" (sort-list lst (lambda args (apply < (map fun args))))) (define (sort-by-pred lst pred) "Sort LST by boolean return value of PRED" (sort-by lst (lambda (arg) (if (pred arg) 1 0)))) (define (partial-sort lst less) "Sort the list LST. LESS is a partial order used for comparing elements." (or (and (null? lst) '()) (if (every (compose not (cut less <> (car lst))) (cdr lst)) (cons (car lst) (partial-sort (cdr lst) less)) (partial-sort (cycle lst) less)))) (define (argop op fun lst) (let* [(vals (map fun lst)) (opval (apply op vals))] (list-ref (reverse lst) (1- (length (member opval vals)))))) (define (argmin fun lst) (argop min fun lst)) (define (argmax fun lst) (argop max fun lst)) (define (gather sizes lst) (if (null? sizes) '() (let [(n (car sizes))] (cons (list-head lst n) (gather (cdr sizes) (list-tail lst n)))))) (define (fixed-point initial iteration compare?) (let [(successor (iteration initial))] (if (compare? initial successor) initial (fixed-point successor iteration compare?)))) (define (union . args) (apply lset-union (cons equal? args))) (define (difference . args) (apply lset-difference (cons equal? args))) (define (pair->list pair) (list (car pair) (cdr pair))) (define (live-intervals live variables) (map (lambda (v) (cons v (cons (first-index (cut memv v <>) live) (last-index (cut memv v <>) live)))) variables)) (define ((overlap-interval intervals) interval) "Get list of variables with overlapping intervals" (map car (filter (lambda (x) (and (>= (cddr x) (car interval)) (<= (cadr x) (cdr interval)))) intervals))) (define (first-index pred lst) (and (not (null? lst)) (if (pred (car lst)) 0 (let [(idx (first-index pred (cdr lst)))] (and idx (1+ idx)))))) (define (last-index pred lst) (and (not (null? lst)) (let [(idx (last-index pred (cdr lst)))] (if idx (1+ idx) (and (pred (car lst)) 0))))) (define (compact . args) (filter identity args)) (define (bytevector-sub bv offset len) (let [(retval (make-bytevector len))] (bytevector-copy! bv offset retval 0 len) retval)) (define (bytevector-concat lst) (let* [(lengths (map bytevector-length lst)) (steps (integral lengths)) (offsets (cons 0 (all-but-last steps))) (retval (make-bytevector (last steps)))] (for-each (lambda (arg offset len) (bytevector-copy! arg 0 retval offset len)) lst offsets lengths) retval)) (define (objdump code) "dump machine CODE to temporary file and deassemble using the 'objdump' tool" (let [(filename (string-append (tmpnam) ".bin"))] (call-with-output-file filename (cut put-bytevector <> (u8-list->bytevector (flatten code)))) (system (format #f "objdump -D -b binary -Mintel -mi386:x86-64 ~a" filename)) code)) (define (map-if pred fun1 fun2 . lsts) (apply map (lambda args (apply (if (apply pred args) fun1 fun2) args)) lsts)) (define (map-select select fun1 fun2 . lsts) (apply map (lambda (val . args) (apply (if val fun1 fun2) args)) select lsts)) (define (symbol-list n) (map (lambda _ (gensym)) (iota n))) (define (typed-header lst tag) (map (cut list <> tag) lst)) (define (typed-header2 lst tags) (map list lst tags)) (define (delete-ref lst k) (if (zero? k) (cdr lst) (cons (car lst) (delete-ref (cdr lst) (1- k))))) (define (aiscm-error context msg . args) (scm-error 'misc-error context msg args #f)); also see source code of srfi-37 (define (clock) "Get current time with high precision" (current-time)) (define* (elapsed reference #:optional (reset #f)) "Return time elapsed and optionally reset the clock" (let [(difference (time-difference (current-time) reference))] (if reset (add-duration! reference difference)) (+ (time-second difference) (* 1e-9 (time-nanosecond difference))))) (define-syntax-rule (synchronise expr time-remaining method) "Abstract time synchronisation method" (let [(result expr)] (method (max 0 time-remaining)) result)) (define (object-slots obj) (map (compose (cut slot-ref obj <>) slot-definition-name) (class-slots (class-of obj)))) (define (scm->address scm) (pointer-address (scm->pointer scm))) (define (address->scm address) (pointer->scm (make-pointer address))) (define (list-with lst idx val) (if (null? lst) lst (cons (if (zero? idx) val (car lst)) (list-with (cdr lst) (1- idx) val)))) (define-macro (define-typed-method name types fun) "Define a method for a combination of types" (let* [(args (symbol-list (length types))) (header (map list args types))] `(define-method (,name ,@header) (,fun ,@args)))) (define-macro (define-nary-typed-method name arity type fun) "Define an n-ary method with arguments of a specified type" `(define-typed-method ,name ,(make-list arity type) ,fun)) aiscm-0.15.1/aiscm/Makefile.am0000644000175000017500000001035413220457302012744 00000000000000SUFFIXES = .c .scm .go sitedir = $(GUILE_SITE)/aiscm site_DATA = jit.scm mem.scm element.scm scalar.scm bool.scm int.scm pointer.scm rgb.scm complex.scm float.scm \ sequence.scm asm.scm image.scm ffmpeg.scm util.scm magick.scm pulse.scm v4l2.scm xorg.scm \ obj.scm composite.scm method.scm samples.scm tensor.scm variable.scm command.scm program.scm \ live-analysis.scm register-allocate.scm compile.scm expression.scm loop.scm operation.scm \ convolution.scm extensiondir = $(GUILE_EXT) extension_LTLIBRARIES = libguile-aiscm-util.la libguile-aiscm-jit.la libguile-aiscm-ffmpeg.la libguile-aiscm-image.la \ libguile-aiscm-magick.la libguile-aiscm-pulse.la libguile-aiscm-v4l2.la libguile-aiscm-xorg.la \ libguile-aiscm-obj.la libguile-aiscm-samples.la check_LTLIBRARIES = libguile-aiscm-tests.la noinst_HEADERS = ffmpeg-helpers.h util-helpers.h ringbuffer.h samples-helpers.h cachedir = $(GUILE_CACHE)/aiscm cache_DATA = $(site_DATA:.scm=.go) AISCM_LDFLAGS = -no-undefined -module -shared -avoid-version libguile_aiscm_tests_la_SOURCES = tests.c ffmpeg-helpers.c ffmpeg-helpers-tests.c ringbuffer.c ringbuffer-tests.c jit-tests.c \ util-helpers.c util-helpers-tests.c samples-helpers.c samples-helpers-tests.c libguile_aiscm_tests_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_tests_la_LDFLAGS = -no-undefined -module -shared -avoid-version -rpath /tmp libguile_aiscm_tests_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_util_la_SOURCES = util.c libguile_aiscm_util_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_util_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_util_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_jit_la_SOURCES = jit.c libguile_aiscm_jit_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_jit_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_jit_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_obj_la_SOURCES = obj.c libguile_aiscm_obj_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_obj_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_obj_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_ffmpeg_la_SOURCES = ffmpeg.c ffmpeg-helpers.c ringbuffer.c util-helpers.c libguile_aiscm_ffmpeg_la_CFLAGS = $(GUILE_CFLAGS) $(AVFORMAT_CFLAGS) $(AVCODEC_CFLAGS) $(AVUTIL_CFLAGS) libguile_aiscm_ffmpeg_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_ffmpeg_la_LIBADD = $(GUILE_LIBS) $(AVFORMAT_LIBS) $(AVCODEC_LIBS) $(AVUTIL_LIBS) libguile_aiscm_image_la_SOURCES = image.c util-helpers.c libguile_aiscm_image_la_CFLAGS = $(GUILE_CFLAGS) $(SWSCALE_CFLAGS) $(MJPEG_CFLAGS) libguile_aiscm_image_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_image_la_LIBADD = $(GUILE_LIBS) $(SWSCALE_LIBS) $(MJPEG_LIBS) -llavjpeg libguile_aiscm_magick_la_SOURCES = magick.c libguile_aiscm_magick_la_CFLAGS = $(GUILE_CFLAGS) $(MAGICK_CFLAGS) libguile_aiscm_magick_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_magick_la_LIBADD = $(GUILE_LIBS) $(MAGICK_LIBS) libguile_aiscm_pulse_la_SOURCES = pulse.c ringbuffer.c libguile_aiscm_pulse_la_CFLAGS = $(GUILE_CFLAGS) $(PULSE_CFLAGS) $(PTHREAD_CFLAGS) libguile_aiscm_pulse_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_pulse_la_LIBADD = $(GUILE_LIBS) $(PULSE_LIBS) $(PTHREAD_LIBS) libguile_aiscm_v4l2_la_SOURCES = v4l2.c util-helpers.c libguile_aiscm_v4l2_la_CFLAGS = $(GUILE_CFLAGS) libguile_aiscm_v4l2_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_v4l2_la_LIBADD = $(GUILE_LIBS) libguile_aiscm_xorg_la_SOURCES = xorg.c libguile_aiscm_xorg_la_CFLAGS = $(GUILE_CFLAGS) $(X_CFLAGS) libguile_aiscm_xorg_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_xorg_la_LIBADD = $(GUILE_LIBS) $(GL_LIBS) $(X_PRE_LIBS) $(X_LIBS) -lX11 $(X_EXTRA_LIBS) -lXv -lXpm libguile_aiscm_samples_la_SOURCES = samples.c samples-helpers.c util-helpers.c libguile_aiscm_samples_la_CFLAGS = $(GUILE_CFLAGS) $(SWRESAMPLE_CFLAGS) $(AVRESAMPLE_CFLAGS) $(AVUTIL_CFLAGS) libguile_aiscm_samples_la_LDFLAGS = $(AISCM_LDFLAGS) libguile_aiscm_samples_la_LIBADD = $(GUILE_LIBS) $(SWRESAMPLE_LIBS) $(AVRESAMPLE_LIBS) $(AVUTIL_LIBS) install-data-hook: $(TOUCH) $(addprefix $(DESTDIR)$(cachedir)/,$(cache_DATA)) .scm.go: LD_LIBRARY_PATH=$(srcdir)/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 $(GUILE_TOOLS) compile -L$(top_builddir) -o $@ $< $(cache_DATA): $(extension_LTLIBRARIES) EXTRA_DIST = $(site_DATA) aiscm.xpm CLEANFILES = *.tmp *.go* MAINTAINERCLEANFILES = Makefile.in maintainer-clean-local: rm -Rf .deps aiscm-0.15.1/aiscm/aiscm.xpm0000644000175000017500000002370513213600050012526 00000000000000/* XPM */ static char * aiscm_xpm[] = { "32 32 497 2", " c None", ". c #B3B4A9", "+ c #B5B6A9", "@ c #696A8D", "# c #47477A", "$ c #3E3E78", "% c #898A9B", "& c #B0B1A9", "* c #47479C", "= c #0B0B73", "- c #080861", "; c #070762", "> c #26276C", ", c #ACADA4", "' c #B2B4A6", ") c #AFB0A8", "! c #B1B2AA", "~ c #3C3D9E", "{ c #101081", "] c #111164", "^ c #0A0A63", "/ c #4D4D7B", "( c #9E9FA1", "_ c #44457B", ": c #383874", "< c #4F5080", "[ c #A7A89E", "} c #AAACA0", "| c #848676", "1 c #7B7D76", "2 c #6E7089", "3 c #818293", "4 c #8D8E98", "5 c #A5A6A3", "6 c #21218D", "7 c #0A0A6C", "8 c #090964", "9 c #060662", "0 c #56577C", "a c #A9AA9B", "b c #ACAD9A", "c c #ABADA1", "d c #9FA292", "e c #949685", "f c #73745F", "g c #676857", "h c #6F7267", "i c #9A9C92", "j c #A1A2A0", "k c #272799", "l c #111173", "m c #1A1A6B", "n c #121265", "o c #88898E", "p c #888990", "q c #2B2B6E", "r c #2D2E6F", "s c #4C4D74", "t c #999A8D", "u c #98998C", "v c #A4A59A", "w c #A9AB9F", "x c #A5A897", "y c #9FA291", "z c #949786", "A c #777864", "B c #72735D", "C c #6C6D57", "D c #696A55", "E c #7C7E6B", "F c #726F73", "G c #5E5C7C", "H c #6A6B85", "I c #949691", "J c #898A95", "K c #121381", "L c #0B0B65", "M c #090960", "N c #68697A", "O c #949584", "P c #9D9F8D", "Q c #8F9082", "R c #959787", "S c #A5A898", "T c #A4A797", "U c #9C9F8F", "V c #969987", "W c #7B7D69", "X c #767763", "Y c #72735E", "Z c #6D6E58", "` c #6A6B54", " . c #62604C", ".. c #686652", "+. c #837E71", "@. c #969688", "#. c #828393", "$. c #111183", "%. c #131368", "&. c #131365", "*. c #101062", "=. c #6C6D77", "-. c #919280", ";. c #868774", ">. c #939486", ",. c #9EA091", "'. c #A8AB9B", "). c #A3A696", "!. c #9D9F8F", "~. c #979B89", "{. c #7F816E", "]. c #7B7C69", "^. c #767764", "/. c #6E6F59", "(. c #696A54", "_. c #676752", ":. c #666753", "<. c #707161", "[. c #66616E", "}. c #686981", "|. c #636478", "1. c #7B7B79", "2. c #8C8E7C", "3. c #979984", "4. c #848672", "5. c #B9BBAD", "6. c #9A9B8E", "7. c #9A9B8D", "8. c #A4A898", "9. c #A7AA9A", "0. c #A1A494", "a. c #9EA190", "b. c #919382", "c. c #838572", "d. c #7F806E", "e. c #6A6B55", "f. c #645F4B", "g. c #7B7C66", "h. c #8A8B77", "i. c #8B8C7A", "j. c #9B9D89", "k. c #999B86", "l. c #999C87", "m. c #9D9E92", "n. c #9D9F91", "o. c #A6AA9A", "p. c #9EA292", "q. c #878778", "r. c #898A79", "s. c #848574", "t. c #80816F", "u. c #7C7D6A", "v. c #727460", "w. c #6F705A", "x. c #80816E", "y. c #898A78", "z. c #9C9F8B", "A. c #A2A692", "B. c #8F907D", "C. c #9FA18D", "D. c #B8BBAC", "E. c #A0A096", "F. c #A2A596", "G. c #A6A999", "H. c #9EA191", "I. c #9DA191", "J. c #50342E", "K. c #3B2923", "L. c #594B40", "M. c #7F7F6E", "N. c #80826F", "O. c #787965", "P. c #747560", "Q. c #6A6C55", "R. c #7E7F6B", "S. c #848573", "T. c #A5A794", "U. c #9EA18D", "V. c #90927F", "W. c #A0A38F", "X. c #B7B9AB", "Y. c #A2A399", "Z. c #A1A397", "`. c #A3A695", " + c #A4A897", ".+ c #9EA291", "++ c #989B8C", "@+ c #776B61", "#+ c #2B1915", "$+ c #3F2821", "%+ c #4C3F34", "&+ c #828371", "*+ c #747561", "=+ c #71725D", "-+ c #828370", ";+ c #8C8D7A", ">+ c #A4A794", ",+ c #A5A895", "'+ c #8D8E7A", ")+ c #A1A490", "!+ c #B4B6A6", "~+ c #A1A396", "{+ c #A1A493", "]+ c #A1A594", "^+ c #9DA08F", "/+ c #929385", "(+ c #2E1D1A", "_+ c #3B1D19", ":+ c #472E27", "<+ c #838575", "[+ c #808170", "}+ c #7C7D6B", "|+ c #787966", "1+ c #757662", "2+ c #8D8E7B", "3+ c #ABAD9B", "4+ c #A8AB98", "5+ c #8D8F7B", "6+ c #A5A894", "7+ c #A3A692", "8+ c #959784", "9+ c #A1A298", "0+ c #A0A197", "a+ c #9FA390", "b+ c #9C9F8E", "c+ c #9A9D8C", "d+ c #9C9E8F", "e+ c #9A9B8F", "f+ c #827E73", "g+ c #391A18", "h+ c #412822", "i+ c #482F29", "j+ c #878979", "k+ c #878878", "l+ c #818270", "m+ c #7D7E6B", "n+ c #797A66", "o+ c #A6A997", "p+ c #ABAE9C", "q+ c #AAAD9A", "r+ c #9A9D89", "s+ c #979A86", "t+ c #8B8D7A", "u+ c #969884", "v+ c #9EA08C", "w+ c #9E9F95", "x+ c #9FA094", "y+ c #999E8B", "z+ c #9CA08D", "A+ c #999C8B", "B+ c #989C8A", "C+ c #9C9E91", "D+ c #908F84", "E+ c #482825", "F+ c #301816", "G+ c #372822", "H+ c #472D28", "I+ c #8A8C7C", "J+ c #8B8C7C", "K+ c #828470", "L+ c #B0B3A2", "M+ c #ADB09E", "N+ c #ADAF9D", "O+ c #999B88", "P+ c #939581", "Q+ c #8E917E", "R+ c #959A85", "S+ c #9FA28E", "T+ c #A0A38E", "U+ c #9EA18C", "V+ c #9FA18C", "W+ c #9C9C90", "X+ c #999B8B", "Y+ c #979B87", "Z+ c #979B88", "`+ c #949785", " @ c #918F84", ".@ c #492725", "+@ c #351C1A", "@@ c #2C1917", "#@ c #3D2620", "$@ c #584E44", "%@ c #939586", "&@ c #8D8F7F", "*@ c #8A8B7C", "=@ c #80806E", "-@ c #A3A593", ";@ c #B1B4A3", ">@ c #AEB19F", ",@ c #A8AA97", "'@ c #898B77", ")@ c #868874", "!@ c #838674", "~@ c #A3A591", "{@ c #9DA08B", "]@ c #97988A", "^@ c #949784", "/@ c #949884", "(@ c #919582", "_@ c #939683", ":@ c #8B8C7F", "<@ c #412624", "[@ c #39231F", "}@ c #4C2B24", "|@ c #3C1A18", "1@ c #482721", "2@ c #5D5147", "3@ c #96988A", "4@ c #909183", "5@ c #8D8E7F", "6@ c #878877", "7@ c #B3B5A5", "8@ c #B0B2A1", "9@ c #909380", "0@ c #757863", "a@ c #A4A793", "b@ c #747660", "c@ c #919581", "d@ c #929682", "e@ c #8F927E", "f@ c #8F9180", "g@ c #58403B", "h@ c #351E1B", "i@ c #4D2C26", "j@ c #583E37", "k@ c #461B19", "l@ c #472F27", "m@ c #5D574C", "n@ c #989A8D", "o@ c #909182", "p@ c #8A8B7B", "q@ c #9C9D8D", "r@ c #B5B7A7", "s@ c #AFB3A1", "t@ c #A1A391", "u@ c #8C8F7C", "v@ c #8A8D7A", "w@ c #A7AA97", "x@ c #A2A691", "y@ c #686953", "z@ c #878A75", "A@ c #8E927D", "B@ c #8C907C", "C@ c #99998D", "D@ c #725D53", "E@ c #6C665A", "F@ c #858076", "G@ c #451B19", "H@ c #443026", "I@ c #5A594D", "J@ c #9A9C8E", "K@ c #959689", "L@ c #8C8D7D", "M@ c #AFB2A2", "N@ c #B6B9A9", "O@ c #B4B7A6", "P@ c #ADAF9E", "Q@ c #929580", "R@ c #7B7E6F", "S@ c #A1A491", "T@ c #A1A38F", "U@ c #919384", "V@ c #97988B", "W@ c #98998D", "X@ c #9C9E92", "Y@ c #9D9F93", "Z@ c #8C887D", "`@ c #3A1715", " # c #30211C", ".# c #4A4438", "+# c #8A8C7F", "@# c #96978A", "## c #949688", "$# c #9A9B8C", "%# c #B9BCAD", "&# c #B7BAAB", "*# c #B7BAAA", "=# c #959783", "-# c #8E907E", ";# c #818474", "># c #A6A995", ",# c #A1A48F", "'# c #7C7F69", ")# c #929482", "!# c #929384", "~# c #949587", "{# c #969789", "]# c #97988C", "^# c #999A8E", "/# c #8B847A", "(# c #5F534A", "_# c #62584F", ":# c #96978B", "<# c #939487", "[# c #A4A698", "}# c #BCBFB0", "|# c #B8BBAB", "1# c #B2B5A5", "2# c #8B8D7B", "3# c #848876", "4# c #919482", "5# c #A9AC99", "6# c #A6A996", "7# c #676854", "8# c #454664", "9# c #7F8175", "0# c #959688", "a# c #9C9D91", "b# c #9B9D91", "c# c #9FA190", "d# c #9EA090", "e# c #AEB09E", "f# c #A2A591", "g# c #646555", "h# c #0B0B60", "i# c #0F0F5D", "j# c #64665D", "k# c #838571", "l# c #919283", "m# c #A9AA9D", "n# c #BEC0B2", "o# c #BCBFB1", "p# c #BABDAE", "q# c #979987", "r# c #A3A694", "s# c #838673", "t# c #A8AA9A", "u# c #ABAD9C", "v# c #444559", "w# c #12115F", "x# c #5D5E57", "y# c #666856", "z# c #5F5E4F", "A# c #97998B", "B# c #B0B3A5", "C# c #BBBEAF", "D# c #A4A695", "E# c #8D8F7C", "F# c #A3A69A", "G# c #B5B8A9", "H# c #AFB1A0", "I# c #ACAF9D", "J# c #A9AC9A", "K# c #36375B", "L# c #1D1E5E", "M# c #5A5A56", "N# c #21215E", "O# c #1B1C60", "P# c #555661", "Q# c #8D8E81", "R# c #999B8E", "S# c #7E806D", "T# c #BABCAD", "U# c #A6A998", "V# c #A5A797", "W# c #9EA092", "X# c #929481", "Y# c #AAAD9B", "Z# c #484958", "`# c #0A0A60", " $ c #0C0C60", ".$ c #565757", "+$ c #5F604B", "@$ c #6D6F60", "#$ c #9A9C8F", "$$ c #64654E", "%$ c #B6B8A9", "&$ c #969886", "*$ c #32325C", "=$ c #0D0D60", "-$ c #20205E", ";$ c #5B5C56", ">$ c #31315B", ",$ c #58595C", "'$ c #65654F", ")$ c #A7AA99", "!$ c #B1B3A3", "~$ c #B2B4A4", "{$ c #555657", "]$ c #585956", "^$ c #525357", "/$ c #080860", "($ c #676852", "_$ c #ACAE9C", ":$ c #999C88", "<$ c #9C9F8C", "[$ c #6D6E53", "}$ c #393A5A", "|$ c #585955", "1$ c #82846F", "2$ c #434359", "3$ c #17175F", "4$ c #494A58", "5$ c #74765E", "6$ c #989A85", "7$ c #9B9D88", "8$ c #8E917A", " . ", " + @ # $ % ", " & * = - ; > , ' ", " ) ! ~ { ] ^ / ( _ : < [ ", " ) ) } | 1 2 3 4 5 6 7 8 9 0 a b ", " ) ) c d e f g h i j k l m n o p q r s t ", " u v w x y z A B C D E F G H I J K L M M N O P ", " Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;. ", " >.,.'.).!.~.{.].^.Y /.` (._.:.<.[.}.|.1.2.3.4.5. ", " 6.7.8.9.0.a.b.c.d.].A f /.e.(.(.(.f.g.h.i.j.k.l.5. ", " m.n.o.S d p.q.r.s.t.u.A v.w.e.(.(.C x.y.z.A.B.C.D. ", " E.F.G.).H.I.J.K.L.M.N.u.O.P.w.Q.C R.S.z.T.U.V.W.X. ", " Y.Z.`. +.+a.++@+#+$+%+&+t.u.O.*+=+R.-+;+>+,+'+j.)+!+ ", " Y.~+{+]+^+U u /+(+_+:+<+S.[+}+|+1+P.2+3+4+,+5+6+7+8+ ", " 9+0+a.a+b+c+d+e+f+g+h+i+j+k+S.l+m+n+*+o+p+q+r+s+W.z.t+u+v+ ", " w+x+y+z+A+B+C+D+E+F+G+H+I+J+k+s.l+u.K+L+M+N+O+P+Q+R+S+T+U+V+ ", " W+X+Y+Z+`+A+ @.@+@@@#@$@%@&@*@k+S.=@-@;@>@,@'@)@!@W.~@W.U+{@ ", " ]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@*@6@r.7@;@8@O+9@0@Q+a@~@W.U+{@ ", " b@c@d@e@f@g@h@i@j@k@l@m@n@>.o@5@p@q@r@7@s@t@u@v@w@6+x@W.U+ ", " y@z@A@B@3@C@D@E@F@G@H@I@J@K@>.o@L@M@N@O@P@Q@R@S@4+,+7+T@U+ ", " y@z@Q+U@V@W@X@Y@Z@`@ #.#+#@###/+$#%#&#*#=#-#;#q+4+>#7+,#C. ", " y@'#)#!#~#{#]#^#n@/#(#_#:#u @#<#[#}#|#1#2#3#4#p+5#6#a@)+ ", " 7#8#9#R 0#{#V@W@6.a#b#^#W@V@u D.}#%#c#a.!@d#e#q+w@T.f# ", " g#h#i#j#k#l#~#V@u W@t t W@:#m#n#o#p#q#r#s#t#>@u#4+,+ ", " ` v#- w#x#y#z#A#V@u u ^#>.V@B#n#}#C#D#E#F#G#H#I#J# ", " K#L#M#N#O#P#s.Q#R#e+1+S#5.p#T#D.U#V#W#X#L+M+Y# ", " ` Z#`# $.$+$@$#$k+$$r@N@%$G#&$r@ ", " *$=$-$;$>$,$m+'$)$!$;@>@q#~$ ", " {$]$^$h#/$>$($2+q+_$:$<$ ", " [$}$h# $|$1$f#7+ ", " 2$3$4$5$6$7$ ", " (./.8$ "}; aiscm-0.15.1/aiscm/composite.scm0000644000175000017500000000307313213600050013406 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm composite) #:use-module (oop goops) #:use-module (srfi srfi-26) #:use-module (aiscm pointer) #:use-module (aiscm util) #:use-module (aiscm element) #:export ( > components deconstruct)) (define-class* > >) (define-method (pointerless? (self >)) (pointerless? (base self))) (define-generic components) (define-method (component (type >) self offset) "Get component of a composite value" (let* [(type (base (typecode self)))] (set-pointer-offset (pointer-cast type self) (* offset (size-of type))))) (define-generic components) (define (deconstruct type self) "Split up value into its components" (map (cut <> self) (components type))) aiscm-0.15.1/aiscm/ffmpeg-helpers-tests.c0000644000175000017500000001237213213600050015112 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "ffmpeg-helpers.h" #include "util-helpers.h" SCM int_array_to_long_one_element(void) { int32_t array[1] = {42}; int64_t result[1]; int_array_to_long(result, array, 1); return scm_from_bool(result[0] == 42); } SCM int_array_to_long_second_element(void) { int32_t array[2] = {42, 56}; int64_t result[2]; int_array_to_long(result, array, 2); return scm_from_bool(result[1] == 56); } SCM from_array_empty(void) { return from_non_zero_array(NULL, 0, 0); } SCM from_array_three_elements(void) { int64_t array[3] = {2, 3, 5}; return from_non_zero_array(array, 3, 1); } SCM from_array_stop_at_zero(void) { int64_t array[5] = {2, 3, 5, 0, 7}; return from_non_zero_array(array, 5, 1); } SCM from_array_at_least_one(void) { int64_t array[3] = {0, 0, 0}; return from_non_zero_array(array, 3, 1); } SCM from_array_long_integers(void) { int64_t array[1] = {42L << 32}; return from_non_zero_array(array, 1, 1); } SCM first_offset_is_zero(void) { uint8_t buffer[1024]; uint8_t *data[1] = {buffer}; int64_t offsets[1]; offsets_from_pointers(data, offsets, 1); return scm_from_bool(offsets[0] == 0); } SCM second_offset_correct(void) { uint8_t buffer[1024]; uint8_t *data[2] = {buffer, buffer + 12}; int64_t offsets[2]; offsets_from_pointers(data, offsets, 2); return scm_from_bool(offsets[1] == 12); } SCM zero_offset_for_null_pointer(void) { uint8_t buffer[1024]; uint8_t *data[2] = {buffer, NULL}; int64_t offsets[2]; offsets_from_pointers(data, offsets, 2); return scm_from_bool(offsets[1] == 0); } SCM offsets_have_64_bit(SCM scm_offset) { // This test might trigger a warning on Debian QA [1]. // // ``` // warning: array subscript is above array bounds [-Warray-bounds] // ``` // // Note that the out-of-bounds pointer is merely used for testing offset computation. // // [1]: https://qa.debian.org/bls/packages/a/aiscm.html uint8_t buffer[1024]; uint8_t *data[2]; data[0] = buffer; data[1] = buffer + scm_to_long(scm_offset); int64_t offsets[2]; offsets_from_pointers(data, offsets, 2); return scm_from_bool(offsets[1] != 0); } SCM pack_byte_audio_sample(void) { uint8_t a[1] = {1}; uint8_t b[1] = {2}; uint8_t *data[2] = {a, b}; uint8_t destination[2]; pack_audio(data, 2, 1, sizeof(uint8_t), destination); return scm_from_bool(destination[0] == 1 && destination[1] == 2); } SCM pack_byte_audio_samples(void) { uint8_t a[3] = {1, 3, 5}; uint8_t b[3] = {2, 4, 6}; uint8_t *data[2] = {a, b}; uint8_t destination[6]; pack_audio(data, 2, 3, sizeof(uint8_t), destination); return scm_from_bool(destination[4] == 5 && destination[5] == 6); } SCM pack_short_int_audio_samples(void) { int16_t a[3] = {1, 3, 5}; int16_t b[3] = {2, 4, 6}; uint8_t *data[2] = {(uint8_t *)a, (uint8_t *)b}; uint16_t destination[6]; pack_audio(data, 2, 3, sizeof(uint16_t), (uint8_t *)destination); return scm_from_bool(destination[4] == 5 && destination[5] == 6); } void init_ffmpeg_helpers_tests(void) { scm_c_define_gsubr("int-array-to-long-one-element" , 0, 0, 0, SCM_FUNC(int_array_to_long_one_element )); scm_c_define_gsubr("int-array-to-long-second-element", 0, 0, 0, SCM_FUNC(int_array_to_long_second_element)); scm_c_define_gsubr("from-array-empty" , 0, 0, 0, SCM_FUNC(from_array_empty )); scm_c_define_gsubr("from-array-three-elements" , 0, 0, 0, SCM_FUNC(from_array_three_elements )); scm_c_define_gsubr("from-array-stop-at-zero" , 0, 0, 0, SCM_FUNC(from_array_stop_at_zero )); scm_c_define_gsubr("from-array-at-least-one" , 0, 0, 0, SCM_FUNC(from_array_at_least_one )); scm_c_define_gsubr("from-array-long-integers" , 0, 0, 0, SCM_FUNC(from_array_long_integers )); scm_c_define_gsubr("first-offset-is-zero" , 0, 0, 0, SCM_FUNC(first_offset_is_zero )); scm_c_define_gsubr("second-offset-correct" , 0, 0, 0, SCM_FUNC(second_offset_correct )); scm_c_define_gsubr("zero-offset-for-null-pointer" , 0, 0, 0, SCM_FUNC(zero_offset_for_null_pointer )); scm_c_define_gsubr("offsets-have-64-bit" , 1, 0, 0, SCM_FUNC(offsets_have_64_bit )); scm_c_define_gsubr("pack-byte-audio-sample" , 0, 0, 0, SCM_FUNC(pack_byte_audio_sample )); scm_c_define_gsubr("pack-byte-audio-samples" , 0, 0, 0, SCM_FUNC(pack_byte_audio_samples )); scm_c_define_gsubr("pack-short-int-audio-samples" , 0, 0, 0, SCM_FUNC(pack_short_int_audio_samples )); } aiscm-0.15.1/aiscm/samples-helpers.c0000644000175000017500000000173113213600050014147 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "samples-helpers.h" void pointers_from_offsets(uint8_t *pointer, int64_t offsets[], uint8_t *pointers[], int n) { int i; for (i=0; i // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #pragma once #include void pointers_from_offsets(uint8_t *pointer, int64_t offsets[], uint8_t *pointers[], int n); aiscm-0.15.1/aiscm/compile.scm0000644000175000017500000002211413213600050013031 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm compile) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (ice-9 curried-definitions) #:use-module (aiscm element) #:use-module (aiscm int) #:use-module (aiscm asm) #:use-module (aiscm util) #:use-module (aiscm command) #:use-module (aiscm variable) #:use-module (aiscm program) #:use-module (aiscm live-analysis) #:use-module (aiscm register-allocate) #:export (replace-variables adjust-stack-pointer default-registers callee-saved caller-saved parameter-registers register-parameters stack-parameters register-parameter-locations stack-parameter-locations parameter-locations add-stack-parameter-information used-callee-saved temporary-variables unit-intervals temporary-registers need-to-copy-first move-variable-content update-parameter-locations place-result-variable backup-registers jit-compile)) (define (replace-variables allocation cmd temporaries) "Substitute variables with registers and add spill code using temporary registers if necessary" (let [(substituted (substitute-variables cmd allocation)) (spilled? (lambda (var) (is-a? (assq-ref allocation var)
)))] (if (is-a? substituted ) (let* [(target (car (append (filter spilled? (append (get-ptr-args cmd) (output cmd) (input cmd)))))) (location (assq-ref allocation target)) (is-input (memv target (input cmd))) (is-output (memv target (output cmd))) (temporary (car temporaries)) (typed-tmp (to-type (typecode target) temporary))] (filter identity (append (list (and is-input (MOV typed-tmp location))) (replace-variables allocation (substitute-variables cmd (list (cons target temporary))) (cdr temporaries)) (list (and is-output (MOV location typed-tmp)))))) (list (substitute-variables cmd allocation))))) (define (adjust-stack-pointer offset prog) "Adjust stack pointer offset at beginning and end of program" (append (list (SUB RSP offset)) (all-but-last prog) (list (ADD RSP offset) (RET)))) ;RSP is not included because it is used as a stack pointer (define default-registers (list RAX RCX RDX RSI RDI R10 R11 R9 R8 R12 R13 R14 R15 RBX RBP)) (define callee-saved (list RBX RBP RSP R12 R13 R14 R15)) (define caller-saved (list RAX RCX RDX RSI RDI R10 R11 R9 R8)) (define parameter-registers (list RDI RSI RDX RCX R8 R9)) (define (register-parameters parameters) "Return the parameters which are stored in registers according to the x86 ABI" (take-up-to parameters 6)) (define (stack-parameters parameters) "Return the parameters which are stored on the stack according to the x86 ABI" (drop-up-to parameters 6)) (define (register-parameter-locations parameters) "Create an association list with the initial parameter locations" (map cons parameters parameter-registers)) (define (stack-parameter-locations parameters offset) "Determine initial locations of stack parameters" (map (lambda (parameter index) (cons parameter (ptr RSP index))) parameters (iota (length parameters) (+ 8 offset) 8))) (define (parameter-locations parameters offset) "return association list with default locations for the method parameters" (let [(register-parameters (register-parameters parameters)) (stack-parameters (stack-parameters parameters))] (append (register-parameter-locations register-parameters) (stack-parameter-locations stack-parameters offset)))) (define (add-stack-parameter-information allocation stack-parameter-locations) "Add the stack location for stack parameters which do not have a register allocated" (map (lambda (variable location) (cons variable (or location (assq-ref stack-parameter-locations variable)))) (map car allocation) (map cdr allocation))) (define (used-callee-saved allocation) "Return the list of callee saved registers in use" (delete-duplicates (lset-intersection eq? (apply compact (map cdr allocation)) callee-saved))) (define (temporary-variables cmd) "Allocate temporary variable for each instruction which has a variable as first argument" (let [(arg (first-argument cmd))] (cond ((is-a? arg ) (list (var ) (var ))) ((not (null? (get-ptr-args cmd))) (list (var ))) ((is-a? arg ) (list (var ))) (else '())))) (define (unit-intervals temporaries) "Generate intervals of length one for each temporary variable" (append-map (lambda (vars index) (map (cut cons <> (cons index index)) vars)) temporaries (iota (length temporaries)))) (define ((temporary-registers allocation) variables) "Look up register for each temporary variable given the result of a register allocation" (map (cut assq-ref allocation <>) variables)) (define (need-to-copy-first initial targets a b) "Check whether parameter A needs to be copied before B given INITIAL and TARGETS locations" (eq? (assq-ref initial a) (assq-ref targets b))) (define (move-variable-content variable source destination) "move VARIABLE content from SOURCE to DESTINATION unless source and destination are the same" (let [(adapt (cut to-type (typecode variable) <>))] (if (or (not destination) (equal? source destination)) '() (MOV (adapt destination) (adapt source))))) (define (update-parameter-locations parameters locations offset) "Generate the required code to update the parameter locations according to the register allocation" (let* [(initial (parameter-locations parameters offset)) (ordered-parameters (partial-sort parameters (cut need-to-copy-first initial locations <...>)))] (filter (compose not null?) (map (lambda (parameter) (move-variable-content parameter (assq-ref initial parameter) (assq-ref locations parameter))) ordered-parameters)))) (define (place-result-variable results locations code) "add code for placing result variable in register RAX if required" (filter (compose not null?) (attach (append (all-but-last code) (map (lambda (result) (move-variable-content result (assq-ref locations result) RAX)) results)) (RET)))) (define (backup-registers registers code) "Store register content on stack and restore it after executing the code" (append (map (cut PUSH <>) registers) (all-but-last code) (map (cut POP <>) (reverse registers)) (list (RET)))) (define* (jit-compile prog #:key (registers default-registers) (parameters '()) (blocked '()) (results '())) "Linear scan register allocation for a given program" (let* [(live (live-analysis prog results)) (temp-vars (map temporary-variables prog)) (intervals (append (live-intervals live (variables prog)) (unit-intervals temp-vars))) (predefined-registers (register-parameter-locations (register-parameters parameters))) (parameters-to-move (blocked-predefined predefined-registers intervals blocked)) (remaining-predefines (non-blocked-predefined predefined-registers parameters-to-move)) (stack-parameters (stack-parameters parameters)) (colors (linear-scan-coloring intervals registers remaining-predefines blocked)) (callee-saved (used-callee-saved colors)) (stack-offset (* 8 (1+ (number-spilled-variables colors stack-parameters)))) (parameter-offset (+ stack-offset (* 8 (length callee-saved)))) (stack-locations (stack-parameter-locations stack-parameters parameter-offset)) (allocation (add-stack-parameter-information colors stack-locations)) (temporaries (map (temporary-registers allocation) temp-vars)) (locations (add-spill-information allocation 8 8))] (backup-registers callee-saved (adjust-stack-pointer stack-offset (place-result-variable results locations (append (update-parameter-locations parameters locations parameter-offset) (append-map (cut replace-variables locations <...>) prog temporaries))))))) aiscm-0.15.1/aiscm/obj.scm0000644000175000017500000002064013213600050012155 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm obj) #:use-module (oop goops) #:use-module (system foreign) #:use-module (rnrs bytevectors) #:use-module (aiscm util) #:use-module (aiscm element) #:use-module (aiscm bool) #:use-module (aiscm int) #:use-module (aiscm pointer) #:use-module (aiscm method) #:use-module (aiscm asm) #:use-module (aiscm scalar) #:export ( > > >> obj-negate scm-lognot obj-zero-p obj-nonzero-p obj-not obj-shl1 obj-shr1 scm-sum scm-difference scm-product scm-divide scm-remainder scm-logand scm-logior scm-logxor obj-and obj-or scm-min scm-max scm-ash obj-shr obj-where scm-abs obj-equal-p obj-nequal-p obj-less-p obj-leq-p obj-gr-p obj-geq-p obj-from-bool scm-to-bool scm-to-uint8 scm-from-uint8 scm-to-int8 scm-from-int8 scm-to-uint16 scm-from-uint16 scm-to-int16 scm-from-int16 scm-to-uint32 scm-from-uint32 scm-to-int32 scm-from-int32 scm-to-uint64 scm-from-uint64 scm-to-int64 scm-from-int64)) (define-class* > >) (define-method (size-of (self >)) 8) (define-method (pack (self )) (uint-list->bytevector (list (scm->address (get self))) (native-endianness) 8)) (define-method (unpack (self >) (packed )) (let [(value (car (bytevector->uint-list packed (native-endianness) (size-of self))))] (make self #:value (address->scm value)))) (define-method (coerce a b) ) (define-method (write (self ) port) (format port "#<~a ~a>" (class-name (class-of self)) (get self))) (define-method (native-type o . args) ) (define-method (unbuild (type >) self) (list (scm->address self))) (define-method (pointerless? (self >)) #f) (define-method (signed? (self >)) #f) (pointer ) (define main (dynamic-link)) (define guile-aiscm-obj (dynamic-link "libguile-aiscm-obj")) ; various operations for Scheme objects (SCM values) (define obj-negate (make-native-method (list ) (dynamic-func "obj_negate" guile-aiscm-obj))) (define scm-lognot (make-native-method (list ) (dynamic-func "scm_lognot" main ))) (define scm-abs (make-native-method (list ) (dynamic-func "scm_abs" main ))) (define obj-zero-p (make-native-method (list ) (dynamic-func "obj_zero_p" guile-aiscm-obj))) (define obj-nonzero-p (make-native-method (list ) (dynamic-func "obj_nonzero_p" guile-aiscm-obj))) (define obj-not (make-native-method (list ) (dynamic-func "obj_not" guile-aiscm-obj))) (define obj-shl1 (make-native-method (list ) (dynamic-func "obj_shl1" guile-aiscm-obj))) (define obj-shr1 (make-native-method (list ) (dynamic-func "obj_shr1" guile-aiscm-obj))) (define scm-sum (make-native-method (list ) (dynamic-func "scm_sum" main ))) (define scm-difference (make-native-method (list ) (dynamic-func "scm_difference" main ))) (define scm-product (make-native-method (list ) (dynamic-func "scm_product" main ))) (define scm-divide (make-native-method (list ) (dynamic-func "scm_divide" main ))) (define scm-remainder (make-native-method (list ) (dynamic-func "scm_remainder" main ))) (define scm-logand (make-native-method (list ) (dynamic-func "scm_logand" main ))) (define scm-logior (make-native-method (list ) (dynamic-func "scm_logior" main ))) (define scm-logxor (make-native-method (list ) (dynamic-func "scm_logxor" main ))) (define obj-and (make-native-method (list ) (dynamic-func "obj_and" guile-aiscm-obj))) (define obj-or (make-native-method (list ) (dynamic-func "obj_or" guile-aiscm-obj))) (define scm-ash (make-native-method (list ) (dynamic-func "scm_ash" main ))) (define obj-shr (make-native-method (list ) (dynamic-func "obj_shr" guile-aiscm-obj))) (define obj-equal-p (make-native-method (list ) (dynamic-func "obj_equal_p" guile-aiscm-obj))) (define obj-nequal-p (make-native-method (list ) (dynamic-func "obj_nequal_p" guile-aiscm-obj))) (define obj-less-p (make-native-method (list ) (dynamic-func "obj_less_p" guile-aiscm-obj))) (define obj-leq-p (make-native-method (list ) (dynamic-func "obj_leq_p" guile-aiscm-obj))) (define obj-gr-p (make-native-method (list ) (dynamic-func "obj_gr_p" guile-aiscm-obj))) (define obj-geq-p (make-native-method (list ) (dynamic-func "obj_geq_p" guile-aiscm-obj))) (define scm-min (make-native-method (list ) (dynamic-func "scm_min" main ))) (define scm-max (make-native-method (list ) (dynamic-func "scm_max" main ))) (define obj-where (make-native-method (list ) (dynamic-func "obj_where" guile-aiscm-obj))) ; conversions for Scheme objects (SCM values) (define scm-to-bool (make-native-method (list ) (dynamic-func "scm_to_bool" main ))) (define obj-from-bool (make-native-method (list ) (dynamic-func "obj_from_bool" guile-aiscm-obj))) (define scm-to-uint8 (make-native-method (list ) (dynamic-func "scm_to_uint8" main ))) (define scm-from-uint8 (make-native-method (list ) (dynamic-func "scm_from_uint8" main ))) (define scm-to-int8 (make-native-method (list ) (dynamic-func "scm_to_int8" main ))) (define scm-from-int8 (make-native-method (list ) (dynamic-func "scm_from_int8" main ))) (define scm-to-uint16 (make-native-method (list ) (dynamic-func "scm_to_uint16" main ))) (define scm-from-uint16 (make-native-method (list ) (dynamic-func "scm_from_uint16" main ))) (define scm-to-int16 (make-native-method (list ) (dynamic-func "scm_to_int16" main ))) (define scm-from-int16 (make-native-method (list ) (dynamic-func "scm_from_int16" main ))) (define scm-to-uint32 (make-native-method (list ) (dynamic-func "scm_to_uint32" main ))) (define scm-from-uint32 (make-native-method (list ) (dynamic-func "scm_from_uint32" main ))) (define scm-to-int32 (make-native-method (list ) (dynamic-func "scm_to_int32" main ))) (define scm-from-int32 (make-native-method (list ) (dynamic-func "scm_from_int32" main ))) (define scm-to-uint64 (make-native-method (list ) (dynamic-func "scm_to_uint64" main ))) (define scm-from-uint64 (make-native-method (list ) (dynamic-func "scm_from_uint64" main ))) (define scm-to-int64 (make-native-method (list ) (dynamic-func "scm_to_int64" main ))) (define scm-from-int64 (make-native-method (list ) (dynamic-func "scm_from_int64" main ))) aiscm-0.15.1/aiscm/ffmpeg.scm0000644000175000017500000003302013213600050012643 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm ffmpeg) #:use-module (ice-9 optargs) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (oop goops) #:use-module (aiscm mem) #:use-module (aiscm element) #:use-module (aiscm int) #:use-module (aiscm sequence) #:use-module (aiscm float) #:use-module (aiscm mem) #:use-module (aiscm samples) #:use-module (aiscm image) #:use-module (aiscm jit) #:use-module (aiscm util) #:export ( open-ffmpeg-input open-ffmpeg-output is-input? frame-rate video-pts audio-pts pts= video-bit-rate aspect-ratio video-buffer-push video-buffer-pop select-rate target-video-frame select-sample-typecode typecodes-of-sample-formats best-sample-format select-sample-format target-audio-frame packed-audio-frame audio-buffer-fill video-buffer-fill have-audio? have-video? buffer-timestamped-video buffer-timestamped-audio buffer-audio fetch-audio decode-audio/video crop-audio-frame-size) #:re-export (destroy read-image write-image read-audio write-audio rate channels typecode)) (load-extension "libguile-aiscm-ffmpeg" "init_ffmpeg") (define-class* > (ffmpeg #:init-keyword #:ffmpeg) (video-buffer #:init-value '()) (is-input #:init-keyword #:is-input #:getter is-input?) (audio-pts #:init-value 0 #:getter audio-pts) (video-pts #:init-value 0 #:getter video-pts)) (define typemap (list (cons AV_SAMPLE_FMT_U8P ) (cons AV_SAMPLE_FMT_S16P) (cons AV_SAMPLE_FMT_S32P) (cons AV_SAMPLE_FMT_FLTP) (cons AV_SAMPLE_FMT_DBLP))) (define inverse-typemap (alist-invert typemap)) (define (open-ffmpeg-input file-name) "Open audio/video input file FILE-NAME using FFmpeg library" (let [(debug (equal? "YES" (getenv "DEBUG")))] (make #:ffmpeg (make-ffmpeg-input file-name debug) #:is-input #t))) (define (select-rate rate) "Check that the sample rate is supported or raise an exception" (if (number? rate) (lambda (rates) (if (or (null? rates) (memv rate rates)) rate (aiscm-error 'select-rate "Sampling rate ~a not supported (supported rates are ~a)" rate rates))) rate)) (define (select-sample-typecode typecode supported-types) "Select the internal sample type for the FFmpeg encoder buffer. The type needs to be the same or larger than the type of the audio samples provided." (let* [(rank (lambda (t) (+ (size-of t) (if (is-a? t >>) 1 0)))) (sufficient? (lambda (t) (<= (rank typecode) (rank t)))) (relevant-types (filter sufficient? (sort-by supported-types rank)))] (if (null? supported-types) typecode (if (null? relevant-types) (aiscm-error 'select-sample-typecode "Sample type ~a or larger type is not supported" typecode) (car relevant-types))))) (define (typecodes-of-sample-formats sample-formats) "Get typecodes for a list of supported sample types" (delete-duplicates (map sample-format->type sample-formats))) (define (best-sample-format selected-type sample-formats) "Select sample format with spcecified typecode. Prefer packed format over planar format." (let [(packed (type+planar->sample-format selected-type #f)) (planar (type+planar->sample-format selected-type #t))] (if (memv packed sample-formats) packed planar))) (define* ((select-sample-format typecode) supported-formats) "Select most suitable sample format for audio encoding" (best-sample-format (select-sample-typecode typecode (typecodes-of-sample-formats supported-formats)) supported-formats)) (define (open-ffmpeg-output file-name . initargs) "Open audio/video output file FILE-NAME using FFmpeg library" (let-keywords initargs #f (format-name shape frame-rate video-bit-rate aspect-ratio channels rate typecode audio-bit-rate) (let* [(have-audio (or rate channels audio-bit-rate)) (have-video (or (not have-audio) shape frame-rate video-bit-rate aspect-ratio)) (shape (or shape '(384 288))) (frame-rate (or frame-rate 25)) (video-bit-rate (or video-bit-rate (apply * 3 shape))) (aspect-ratio (or aspect-ratio 1)) (select-rate (select-rate (or rate 44100))) (typecode (or typecode )) (sample-format (type+planar->sample-format typecode #t)) (select-format (select-sample-format typecode)) (channels (or channels 2)) (audio-bit-rate (or audio-bit-rate (round (/ (* 3 44100) 2)))) (debug (equal? "YES" (getenv "DEBUG")))] (make #:ffmpeg (make-ffmpeg-output file-name format-name (list shape frame-rate video-bit-rate aspect-ratio) have-video (list select-rate channels audio-bit-rate select-format) have-audio debug) #:is-input #f)))) (define-method (destroy (self )) "Destructor" (if (and (not (is-input? self)) (have-audio? self)) (begin (crop-audio-frame-size self (/ (audio-buffer-fill self) (sample-size self))) (encode-audio self))) (ffmpeg-destroy (slot-ref self 'ffmpeg))) (define-method (shape (self )) "Get two-dimensional shape of video frames" (ffmpeg-shape (slot-ref self 'ffmpeg))) (define (frame-rate self) "Query (average) frame rate of video" (ffmpeg-frame-rate (slot-ref self 'ffmpeg))) (define (video-bit-rate self) "Query bit rate of video stream" (ffmpeg-video-bit-rate (slot-ref self 'ffmpeg))) (define (aspect-ratio self) "Query pixel aspect ratio of video" (let [(ratio (ffmpeg-aspect-ratio (slot-ref self 'ffmpeg)))] (if (zero? ratio) 1 ratio))) (define (make-memory data size) "Construct a pointerless memory object" (make #:base data #:size size #:pointerless #t)) (define (make-video-frame format shape offsets pitches data size) "Construct a video frame from the specified information" (make #:format (format->symbol format) #:shape shape #:offsets offsets #:pitches pitches #:mem (make-memory data size))) (define (make-audio-frame sample-format shape rate offsets data size) "Construct an audio frame from the specified information" (make #:typecode (sample-format->type sample-format) #:shape shape #:rate rate #:offsets offsets #:planar (sample-format->planar sample-format) #:mem (make-memory data size))) (define (video-buffer-push self pts-and-frame) "Store frame and time stamp in the specified buffer" (slot-set! self 'video-buffer (attach (slot-ref self 'video-buffer) pts-and-frame)) #t) (define (video-buffer-pop self) "Retrieve frame and timestamp from the specified buffer" (let [(lst (slot-ref self 'video-buffer))] (and (not (null? lst)) (begin (slot-set! self 'video-pts (caar lst)) (slot-set! self 'video-buffer (cdr lst)) (cdar lst))))) (define (decode-audio/video self) "Decode audio/video frames" (ffmpeg-decode-audio/video (slot-ref self 'ffmpeg))) (define (buffer-audio/video self) "Decode and buffer audio/video frames" (let [(info (decode-audio/video self))] (and info (case (car info) ((audio) (buffer-timestamped-audio (cadr info) self)) ((video) (buffer-timestamped-video (cadr info) self)))))) (define (sample-size self) "Get size of audio sample in bytes" (* (size-of (typecode self)) (channels self))) (define-method (read-audio (self ) (count )) "Retrieve audio samples from input audio stream" (and (have-audio? self) (begin (while (< (audio-buffer-fill self) (* count (sample-size self))) (or (buffer-audio/video self) (break))) (and (not (zero? (audio-buffer-fill self))) (let* [(actual (min count (/ (audio-buffer-fill self) (sample-size self)))) (result (make #:typecode (typecode self) #:shape (list (channels self) actual) #:rate (rate self) #:planar #f))] (fetch-audio self result) result))))) (define-method (read-image (self )) "Retrieve the next video frame" (and (have-video? self) (or (video-buffer-pop self) (and (buffer-audio/video self) (read-image self))))) (define (target-audio-frame self) "Get target audio frame for audio encoding" (apply make-audio-frame (ffmpeg-target-audio-frame (slot-ref self 'ffmpeg)))) (define (packed-audio-frame self) "Get packed audio frame for converting from/to audio buffer data" (apply make-audio-frame (ffmpeg-packed-audio-frame (slot-ref self 'ffmpeg)))) (define (video-buffer-fill self) "Get number of frames in video buffer" (length (slot-ref self 'video-buffer))) (define (have-audio? self) "Check whether the file has an audio stream" (ffmpeg-have-audio? (slot-ref self 'ffmpeg))) (define (have-video? self) "Check whether the file has a video stream" (ffmpeg-have-video? (slot-ref self 'ffmpeg))) (define (audio-buffer-fill self) "Get number of bytes available in audio buffer" (ffmpeg-audio-buffer-fill (slot-ref self 'ffmpeg))) (define (buffer-timestamped-video timestamp self) "Buffer a video frame" (video-buffer-push self (cons timestamp (duplicate (target-video-frame self))))) (define (buffer-timestamped-audio timestamp self) "Buffer an audio frame" (buffer-audio (convert-samples (target-audio-frame self) (typecode self) #f) self)) (define (buffer-audio samples self) "Append audio data to audio buffer" (if (not (eqv? (channels self) (channels samples))) (aiscm-error 'buffer-audio "Sample need to have ~a channels but had ~a" (channels self) (channels samples))) (if (not (eq? (typecode self) (typecode samples))) (aiscm-error 'buffer-audio "Expected samples of type ~a but got samples of type ~a" (typecode self) (typecode samples))) (if (not (eqv? (rate self) (rate samples))) (aiscm-error 'buffer-audio "Samples need to have a rate of ~a Hz but had ~a Hz" (rate self) (rate samples))) (ffmpeg-buffer-audio (slot-ref self 'ffmpeg) (get-memory (slot-ref samples 'mem)) (size-of samples))) (define (fetch-audio self samples); TODO: fill target frame with desired number of packed samples "Fetch data from the audio buffer and put it into the samples" (ffmpeg-fetch-audio (slot-ref self 'ffmpeg) (get-memory (slot-ref samples 'mem)) (size-of samples)) (slot-set! self 'audio-pts (+ (slot-ref self 'audio-pts) (/ (cadr (shape samples)) (rate self))))) (define (encode-audio self) "Encode buffered audio frames" (let* [(packed (packed-audio-frame self)) (target (target-audio-frame self))] (while (>= (audio-buffer-fill self) (size-of packed)) (fetch-audio self packed) (convert-samples-from! target packed) (ffmpeg-encode-audio (slot-ref self 'ffmpeg))))) (define-method (write-audio (samples ) (self )) "Write audio frame to output stream" (buffer-audio samples self) (encode-audio self) samples) (define-method (write-audio (samples >) (self )) "Write audio data to output stream" (write-audio (to-samples samples (rate self)) self) samples) (define (target-video-frame self) "Get target video frame for video encoding" (apply make-video-frame (ffmpeg-target-video-frame (slot-ref self 'ffmpeg)))) (define-method (write-image (img ) (self )) "Write video frame to output file" (convert-image-from! (target-video-frame self) img) (ffmpeg-encode-video (slot-ref self 'ffmpeg)) img) (define-method (write-image (img >) (self )) "Write array representing video frame to output video" (write-image (to-image img) self) img) (define (pts= self position) "Set audio/video position (in seconds)" (ffmpeg-seek (slot-ref self 'ffmpeg) position) (ffmpeg-flush (slot-ref self 'ffmpeg)) (slot-set! self 'video-buffer '()) position) (define-method (channels (self )) "Query number of audio channels" (ffmpeg-channels (slot-ref self 'ffmpeg))) (define-method (rate (self )) "Get audio sampling rate of file" (ffmpeg-rate (slot-ref self 'ffmpeg))) (define-method (typecode (self )) "Query audio type of file" (assq-ref inverse-typemap (ffmpeg-typecode (slot-ref self 'ffmpeg)))) (define (crop-audio-frame-size self size) "Crop encoder audio frames to size of final audio frame (specified size)" (if (not (zero? size)) (ffmpeg-crop-audio-frame-size (slot-ref self 'ffmpeg) size))) aiscm-0.15.1/aiscm/pointer.scm0000644000175000017500000000657613213600050013077 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm pointer) #:use-module (oop goops) #:use-module (ice-9 optargs) #:use-module (aiscm element) #:use-module (aiscm util) #:use-module (aiscm mem) #:use-module (aiscm int) #:use-module (system foreign) #:use-module (rnrs bytevectors) #:export (> >> > >> >> >>> pointer fetch store rebase pointer-cast pointer-offset set-pointer-offset)) (define-class* > >> >) (define-class* > > >> >>) (define-method (pointer (target >)) (template-class (pointer target) (pointer (super target)) (lambda (class metaclass) (define-method (initialize (self class) initargs) (let-keywords initargs #t (value) (let [(value (or value (make #:size (size-of target) #:pointerless (pointerless? target))))] (next-method self (list #:value value))))) (define-method (typecode (self metaclass)) target)))) (define-method (write (self >) port) (if (is-a? (get self) ) (format port "#<~a #x~16,'0x>" (class-name (class-of self)) (pointer-address (get-memory (get self)))) (format port "#<~a ~a>" (class-name (class-of self)) (get self)))) (define-method (fetch (self >)) (let [(t (typecode self))] (unpack t (read-bytes (get self) (size-of t))))) (define-method (store (self >) value) (write-bytes (get self) (pack (make (typecode self) #:value value)))) (define-method (+ (self >) (offset )) (make (class-of self) #:value (+ (get self) (* offset ((compose size-of typecode) self))))) (define-method (pack (self >)) (pack (make #:value ((compose pointer-address get-memory get) self)))) (define-method (unbuild (type >>) self) (list (pointer-address (get-memory (get self))))) (define-method (content (type >>) (self >)) (list (make #:value (get self)))) (define-method (rebase value (self >)) (make (class-of self) #:value value)) (define (pointer-cast target self) (make (pointer target) #:value (get self))) (define pointer-offset (make-object-property)) (define (set-pointer-offset p offset) (let [(retval (make (class-of p) #:value (get p)))] (set! (pointer-offset retval) offset) retval)) (define-method (pointerless? (self >>)) (pointerless? (typecode self))) (pointer >) aiscm-0.15.1/aiscm/variable.scm0000644000175000017500000000542213213600050013171 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm variable) #:use-module (oop goops) #:use-module (aiscm element) #:use-module (aiscm pointer) #:use-module (aiscm bool) #:use-module (aiscm int) #:use-module (aiscm float) #:use-module (aiscm obj) #:use-module (aiscm asm) #:use-module (aiscm util) #:export ( var native-equivalent variables get-args) #:re-export (typecode signed? size-of ptr)) (define-method (get-args self) '()) (define-class () (type #:init-keyword #:type #:getter typecode) (symbol #:init-keyword #:symbol #:init-form (gensym))) (define-method (write (self ) port) (format port "~a:~a" (symbol->string (slot-ref self 'symbol)) (class-name (slot-ref self 'type)))) (define-method (size-of (self )) (size-of (typecode self))) (define-method (var self) (make #:type (native-equivalent self))) (define-class () (type #:init-keyword #:type #:getter typecode) (args #:init-keyword #:args #:getter get-args)) (define-method (write (self ) port) (display (cons 'ptr (cons (class-name (typecode self)) (get-args self))) port)) (define-method (equal? (a ) (b )) (equal? (object-slots a) (object-slots b))) (define-method (ptr (type >) . args) (make #:type type #:args args)) (define-method (size-of (p )) (size-of (typecode p))) (define-method (native-equivalent self ) #f ) (define-method (native-equivalent (self > )) ) (define-method (native-equivalent (self >> )) self ) (define-method (native-equivalent (self >> )) self ) (define-method (native-equivalent (self > )) ) (define-method (native-equivalent (self >>)) ) (define-method (variables self) '()) (define-method (variables (self )) (list self)) (define-method (variables (self )) (variables (get-args self))) (define-method (signed? (x )) (signed? (typecode x))) (define-method (signed? (x )) (signed? (typecode x))) aiscm-0.15.1/aiscm/tensor.scm0000644000175000017500000001204513213600050012715 00000000000000(define-module (aiscm tensor) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (ice-9 curried-definitions) #:use-module (aiscm asm) #:use-module (aiscm variable) #:use-module (aiscm command) #:use-module (aiscm expression) #:use-module (aiscm loop) #:use-module (aiscm element) #:use-module (aiscm int) #:use-module (aiscm pointer) #:use-module (aiscm util) #:use-module (aiscm jit) #:use-module (aiscm operation) #:export (tensor-operations expression->identifier identifier->symbol tensor-variables build-expression consume-variables identifier->expression tensor-ctx) #:re-export (define-method class-of add-method! make jit get wrap multi-loop) #:export-syntax (tensor tensor-body sum prod largest smallest)) (define tensor-ctx (make )) (define-syntax-rule (define-tensor-operation name op) (define-syntax-rule (name index delegate) (inject op index delegate))) (define ((cmovxx set-signed set-unsigned jmp-signed jmp-unsigned) a b) (if (eqv? 1 (size-of a)) (append (cmp a b) (list ((if (signed? a) jmp-signed jmp-unsigned) 'skip)) (mov a b) (list 'skip)) (append (cmp a b) (list ((if (signed? a) set-signed set-unsigned) a b))))) (define minor= (cmovxx CMOVNLE CMOVNBE JL JB )) (define major= (cmovxx CMOVL CMOVB JNLE JNBE)) (define-tensor-operation sum += ) (define-tensor-operation prod *= ) (define-tensor-operation largest max=) (define-tensor-operation smallest min=) (define-method (multi-loop (self ) . idx) (let [(t (apply multi-loop (delegate self) idx))] (make #:loop-details (loop-details t) #:body (injecter (name self) (index self) (body t))))) (define (tensor-operations expr) "Check whether expression is a tensor operation" (define (argument-mask expr . indices) (map (lambda (idx) (and (memv idx indices) #t)) (iota (length expr)))) (and (list? expr) (if (memv (car expr) operations) (argument-mask expr 0) (case (car expr) ((get) (apply argument-mask expr 0 (iota (- (length expr) 2) 2))) ((dim) (apply argument-mask expr (iota (- (length expr) 1)))) ((inject) (argument-mask expr 0 1 2)) ((sum) (argument-mask expr 0 1)) ((prod) (argument-mask expr 0 1)) ((largest) (argument-mask expr 0 1)) ((smallest) (argument-mask expr 0 1)) (else #f))))) (define (expression->identifier expr) "Extract structure of tensor and convert to identifier" (let [(mask (tensor-operations expr))] (if mask (map-select mask identity expression->identifier expr) '_))) (define (identifier->symbol identifier) "Convert identifier to a symbol which can be used as a method name" (string->symbol (call-with-output-string (cut write identifier <>)))) (define (tensor-variables expr) "Return variables of tensor expression" (let [(mask (tensor-operations expr))] (if mask (concatenate (map-select mask (const '()) tensor-variables expr)) (list expr)))) (define (consume-variables mask identifier variables) "Build arguments of expression and return remaining variables" (if (null? identifier) (cons identifier variables) (let* [(head (if (car mask) (cons (car identifier) variables) (build-expression (car identifier) variables))) (tail (consume-variables (cdr mask) (cdr identifier) (cdr head)))] (cons (cons (car head) (car tail)) (cdr tail))))) (define (build-expression identifier variables) "Build a tensor expression and return remaining variables" (let [(mask (tensor-operations identifier))] (if mask (consume-variables mask identifier variables) variables))) (define (identifier->expression identifier variables) "Convert identifier to tensor expression with variables" (car (build-expression identifier variables))) (define-macro (tensor-body expr) "Instantiate a compiled tensor expression" (let* [(vars (tensor-variables expr)) (identifier (expression->identifier expr)) (args (symbol-list (length vars))) (name (identifier->symbol identifier)) (prog (identifier->expression identifier args))] `(begin (if (not (defined? (quote ,name) (current-module))) (define-method (,name ,@args) (let [(fun (jit tensor-ctx (map class-of (list ,@args)) (lambda ,args ,prog)))] (add-method! ,name (make #:specializers (map class-of (list ,@args)) #:procedure (lambda args (apply fun (map get args)))))) (apply ,name (map wrap (list ,@args))))) (apply ,name (map wrap (list ,@vars)))))) (define-macro (tensor . args) "Shortcut for tensor with indices" (let [(expr (last args)) (indices (all-but-last args))] (if (null? indices) `(tensor-body ,expr) `(tensor (dim ,(car indices) ,@(attach (cdr indices) expr)))))) aiscm-0.15.1/aiscm/jit.c0000644000175000017500000000455413213600050011637 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" // http://blog.reverberate.org/2012/12/hello-jit-world-joy-of-simple-jits.html static scm_t_bits mmap_tag; struct mmap_t { void *mem; int len; }; static struct mmap_t *get_self_no_check(SCM scm_self) { return (struct mmap_t *)SCM_SMOB_DATA(scm_self); } static struct mmap_t *get_self(SCM scm_self) { scm_assert_smob_type(mmap_tag, scm_self); return get_self_no_check(scm_self); } size_t free_mmap(SCM scm_self) { struct mmap_t *self = get_self_no_check(scm_self); munmap(self->mem, self->len); scm_gc_free(self, sizeof(struct mmap_t), "mmap"); return 0; } SCM make_mmap(SCM code) { SCM retval; struct mmap_t *mem; mem = (struct mmap_t *)scm_gc_malloc_pointerless(sizeof(struct mmap_t), "mmap"); mem->len = SCM_BYTEVECTOR_LENGTH(code); mem->mem = mmap(NULL, mem->len, PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); SCM_NEWSMOB(retval, mmap_tag, mem); memcpy(mem->mem, SCM_BYTEVECTOR_CONTENTS(code), SCM_BYTEVECTOR_LENGTH(code)); scm_gc_register_allocation(mem->len); return retval; } SCM mmap_address(SCM scm_self) { struct mmap_t *self = get_self(scm_self); #if defined __x86_64__ return scm_from_int64((int64_t)self->mem); #else return scm_from_int32((int32_t)self->mem); #endif } void init_jit(void) { mmap_tag = scm_make_smob_type("mmap", sizeof(struct mmap_t)); scm_set_smob_free(mmap_tag, free_mmap); scm_c_define_gsubr("make-mmap" , 1, 0, 0, SCM_FUNC(make_mmap )); scm_c_define_gsubr("mmap-address", 1, 0, 0, SCM_FUNC(mmap_address)); } aiscm-0.15.1/aiscm/ffmpeg-helpers.c0000644000175000017500000000364413213600050013754 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "ffmpeg-helpers.h" void int_array_to_long(int64_t destination[], int32_t source[], int n) { int i; for (i=0; i 0 || (upto > 0 && *source)) retval = scm_cons(scm_from_long(*source), from_non_zero_array(source + 1, upto - 1, atleast - 1)); else retval = SCM_EOL; return retval; } // Get offsets from pointer array. void offsets_from_pointers(uint8_t *pointers[], int64_t offsets[], int n) { int i; for (i=0; i ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm v4l2) #:use-module (oop goops) #:use-module (ice-9 optargs) #:use-module (ice-9 format) #:use-module (srfi srfi-1) #:use-module (aiscm util) #:use-module (aiscm element) #:use-module (aiscm mem) #:use-module (aiscm int) #:use-module (aiscm image) #:use-module (aiscm sequence) #:use-module (system foreign) #:export ( >) #:re-export (destroy read-image)) (load-extension "libguile-aiscm-v4l2" "init_v4l2") (define-class* > (videodev2 #:init-keyword #:videodev2)) (define formats (list (cons 'RGB V4L2_PIX_FMT_RGB24 ) (cons 'BGR V4L2_PIX_FMT_BGR24 ) (cons 'I420 V4L2_PIX_FMT_YUV420) (cons 'UYVY V4L2_PIX_FMT_UYVY ) (cons 'YUY2 V4L2_PIX_FMT_YUYV ) (cons 'GRAY V4L2_PIX_FMT_GREY ) (cons 'MJPG V4L2_PIX_FMT_MJPEG ))) (define symbols (alist-invert formats)) (define (symbol->v4l2-format sym) (assq-ref formats sym)) (define (v4l2-format->symbol fmt) (assq-ref symbols fmt)) (define (supported? fmt) (or (v4l2-format->symbol (car fmt)) (begin (warn (format #f "Unsupported V4L2 format 0x~x" (car fmt))) #f))) (define format-order (map car formats)) (define (format< x y) (let [(ord-x (index-of (car x) format-order)) (ord-y (index-of (car y) format-order)) (size-x (apply * (cdr x))) (size-y (apply * (cdr y)))] (or (< ord-x ord-y) (and (= ord-x ord-y) (< size-x size-y))))) (define-method (initialize (self ) initargs) (let-keywords initargs #f (device channel select) (let* [(device (or device "/dev/video0")) (channel (or channel 0)) (select (or select last)) (decode (lambda (f) (cons (v4l2-format->symbol (car f)) (cdr f)))) (encode (lambda (f) (cons (symbol->v4l2-format (car f)) (cdr f)))) (selection (lambda (formats) (encode (select (sort (map decode (filter supported? formats)) format<)))))] (next-method self (list #:videodev2 (make-videodev2 device channel selection)))))) (define-method (destroy (self )) (videodev2-destroy (slot-ref self 'videodev2))) (define-method (shape (self )) (videodev2-shape (slot-ref self 'videodev2))) (define-method (read-image (self )) (let [(picture (videodev2-read-image (slot-ref self 'videodev2))) (memory (lambda (base size) (make #:base base #:size size)))] (apply (lambda (format shape base size) (make #:format (v4l2-format->symbol format) #:shape shape #:mem (memory base size))) picture))) aiscm-0.15.1/aiscm/float.scm0000644000175000017500000000647113213600050012516 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm float) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (system foreign) #:use-module (rnrs bytevectors) #:use-module (aiscm util) #:use-module (aiscm element) #:use-module (aiscm int) #:use-module (aiscm obj) #:use-module (aiscm scalar) #:export (floating-point single-precision double-precision precision double? > >> > >> > >>)) (define single-precision 'single) (define double-precision 'double) (define-class* > >> >) (define-method (write (self >) port) (format port "#<~a ~a>" (class-name (class-of self)) (get self))) (define-generic precision) (define (floating-point prec) (template-class (float prec) > (lambda (class metaclass) (define-method (precision (self metaclass)) prec) ))) (define (floating-point single-precision)) (define (floating-point double-precision)) (define-method (foreign-type (t >>)) float) (define-method (foreign-type (t >>)) double) (define (double? self) (eq? double-precision (precision self))) (define-method (size-of (self >>)) 4) (define-method (size-of (self >>)) 8) (define-method (pack (self >)) (let* [(typecode (class-of self)) (retval (make-bytevector (size-of typecode))) (setter (if (double? typecode) bytevector-ieee-double-native-set! bytevector-ieee-single-native-set!))] (setter retval 0 (get self)) retval)) (define-method (unpack (self >>) (packed )) (let* [(ref (if (double? self) bytevector-ieee-double-native-ref bytevector-ieee-single-native-ref)) (value (ref packed 0))] (make self #:value value))) (define-method (coerce (a >>) (b >>)) a) (define-method (coerce (a >>) (b >>)) b) (define-method (coerce (a >>) (b >>)) (floating-point (if (or (double? a) (double? b)) double-precision single-precision))) (define-method (native-type (i ) . args) (if (every real? args) (apply native-type (sort-by-pred (cons i args) real?)))) (define-method (native-type (i ) . args); TODO: remove this when floating point support is ready (if (every real? args) (apply native-type (sort-by-pred (cons i args) real?)))) aiscm-0.15.1/aiscm/bool.scm0000644000175000017500000000417113213600050012337 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm bool) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (rnrs bytevectors) #:use-module (aiscm util) #:use-module (aiscm element) #:use-module (aiscm scalar) #:export ( > && || ! == != where) #:re-export (=)) (define-class* > >) (define-method (size-of (self >)) 1) (define-method (pack (self )) (u8-list->bytevector (list (if (get self) 1 0)))) (define-method (unpack (self >) (packed )) (make #:value (if (eq? (car (bytevector->u8-list packed)) 0) #f #t))) (define-method (coerce (a >) (b >)) ) (define-method (write (self ) port) (format port "#< ~a>" (get self))) (define-method (native-type (b ) . args) (if (every boolean? args) (next-method))) (define-method (unbuild (type >) self) (list (if self 1 0))) (define-method (&& a) a) (define-method (&& (a ) (b )) (and a b)) (define-method (&& a b c . args) (apply && (&& (&& a b) c) args)) (define-method (|| a) a) (define-method (|| (a ) (b )) (or a b)) (define-method (|| a b c . args) (apply || (|| (|| a b) c) args)) (define-generic !=) (define-generic ==) (define-method (! (a )) (not a)) (define-method (where m a b) (if m a b)) aiscm-0.15.1/aiscm/convolution.scm0000644000175000017500000000272113213600050013762 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm convolution) #:use-module (oop goops) #:use-module (aiscm element) #:use-module (aiscm asm) #:use-module (aiscm jit) #:use-module (aiscm expression) #:export (convolve)) (define ctx (make )) (define-method (convolve data kernel) (convolve data (wrap kernel))); TODO: wrap data? (define-method (convolve (data ) (kernel )) (let* [(types (map class-of (list data kernel))) (f (jit ctx types convolution))] (add-method! convolve (make #:specializers types #:procedure (lambda (data kernel) (f data (get kernel))))) (convolve data kernel))) aiscm-0.15.1/aiscm/samples.c0000644000175000017500000001175113213600050012512 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "config.h" #include #include #include #ifndef HAVE_SWRESAMPLE #include #else #include #endif #include "samples-helpers.h" #include "util-helpers.h" static void samples_setup(SCM scm_type, enum AVSampleFormat *format, int *rate, int64_t *layout, int *samples, int64_t offsets[], uint8_t *data[], void *ptr) { *format = scm_to_int(scm_car(scm_type)); *rate = scm_to_int(scm_caddr(scm_type)); *layout = av_get_default_channel_layout(scm_to_int(scm_caadr(scm_type))); *samples = scm_to_int(scm_cadadr(scm_type)); scm_to_long_array(scm_cadddr(scm_type), offsets); pointers_from_offsets(ptr, offsets, data, AV_NUM_DATA_POINTERS); } SCM samples_convert(SCM scm_source_ptr, SCM scm_source_type, SCM scm_dest_ptr, SCM scm_dest_type) { enum AVSampleFormat source_format; int source_rate; int64_t source_layout; int source_samples; int64_t source_offsets[AV_NUM_DATA_POINTERS]; uint8_t *source_data[AV_NUM_DATA_POINTERS]; void *source_ptr = scm_to_pointer(scm_source_ptr); samples_setup(scm_source_type, &source_format, &source_rate, &source_layout, &source_samples, source_offsets, source_data, source_ptr); enum AVSampleFormat dest_format; int dest_rate; int64_t dest_layout; int dest_samples; int64_t dest_offsets[AV_NUM_DATA_POINTERS]; uint8_t *dest_data[AV_NUM_DATA_POINTERS]; void *dest_ptr = scm_to_pointer(scm_dest_ptr); samples_setup(scm_dest_type, &dest_format, &dest_rate, &dest_layout, &dest_samples, dest_offsets, dest_data, dest_ptr); #ifndef HAVE_SWRESAMPLE AVAudioResampleContext *ctx = avresample_alloc_context(); av_opt_set_int(ctx, "in_channel_layout" , source_layout, 0); av_opt_set_int(ctx, "out_channel_layout", dest_layout , 0); av_opt_set_int(ctx, "in_sample_rate" , source_rate , 0); av_opt_set_int(ctx, "out_sample_rate" , dest_rate , 0); av_opt_set_int(ctx, "in_sample_fmt" , source_format, 0); av_opt_set_int(ctx, "out_sample_fmt" , dest_format , 0); #else SwrContext *ctx = swr_alloc_set_opts(NULL, dest_layout, dest_format, dest_rate, source_layout, source_format, source_rate, 0, NULL); #endif if (!ctx) scm_misc_error("samples-convert", "Could not allocate resampler context", SCM_EOL); #ifndef HAVE_SWRESAMPLE // TODO: decode AVERROR codes int err = avresample_open(ctx); if (err < 0) { avresample_free(&ctx); scm_misc_error("samples-convert", "Could not initialize AV resampler context", SCM_EOL); }; #else int err = swr_init(ctx); if (err < 0) { swr_free(&ctx); scm_misc_error("samples-convert", "Could not initialize SW resampler context", SCM_EOL); }; #endif #ifndef HAVE_SWRESAMPLE err = avresample_convert(ctx, dest_data, 0, dest_samples, source_data, 0, source_samples); if (err < 0) { avresample_free(&ctx); scm_misc_error("samples-convert", "Error converting samples", SCM_EOL); }; #else // Note: delay (swr_get_delay) not supported, i.e. converting to a different sampling rate is not supported. err = swr_convert(ctx, dest_data, dest_samples, (const uint8_t **)source_data, source_samples); if (err < 0) { swr_free(&ctx); scm_misc_error("samples-convert", "Error converting samples", SCM_EOL); }; #endif #ifndef HAVE_SWRESAMPLE avresample_free(&ctx); #else swr_free(&ctx); #endif return SCM_UNSPECIFIED; } void init_samples(void) { scm_c_define_gsubr("samples-convert", 4, 0, 0, SCM_FUNC(samples_convert)); scm_c_define("AV_SAMPLE_FMT_U8" ,scm_from_int(AV_SAMPLE_FMT_U8 )); scm_c_define("AV_SAMPLE_FMT_S16" ,scm_from_int(AV_SAMPLE_FMT_S16 )); scm_c_define("AV_SAMPLE_FMT_S32" ,scm_from_int(AV_SAMPLE_FMT_S32 )); scm_c_define("AV_SAMPLE_FMT_FLT" ,scm_from_int(AV_SAMPLE_FMT_FLT )); scm_c_define("AV_SAMPLE_FMT_DBL" ,scm_from_int(AV_SAMPLE_FMT_DBL )); scm_c_define("AV_SAMPLE_FMT_U8P" ,scm_from_int(AV_SAMPLE_FMT_U8P )); scm_c_define("AV_SAMPLE_FMT_S16P",scm_from_int(AV_SAMPLE_FMT_S16P)); scm_c_define("AV_SAMPLE_FMT_S32P",scm_from_int(AV_SAMPLE_FMT_S32P)); scm_c_define("AV_SAMPLE_FMT_FLTP",scm_from_int(AV_SAMPLE_FMT_FLTP)); scm_c_define("AV_SAMPLE_FMT_DBLP",scm_from_int(AV_SAMPLE_FMT_DBLP)); } aiscm-0.15.1/aiscm/register-allocate.scm0000644000175000017500000001574213213600050015020 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm register-allocate) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (ice-9 curried-definitions) #:use-module (oop goops) #:use-module (aiscm util) #:use-module (aiscm int) #:use-module (aiscm asm) #:use-module (aiscm variable) #:use-module (aiscm command) #:use-module (aiscm program) #:export (initial-register-use sort-live-intervals find-available-register mark-used-till spill-candidate ignore-spilled-variables ignore-blocked-registers unallocated-variables register-allocations assign-spill-locations add-spill-information blocked-predefined move-blocked-predefined non-blocked-predefined linear-scan-coloring number-spilled-variables filter-blocks blocked-intervals)) (define (initial-register-use registers) "Initially all registers are available from index zero on" (map (cut cons <> 0) registers)) (define (sort-live-intervals live-intervals predefined-variables) "Sort live intervals predefined variables first and then lexically by start point and length of interval" (sort-by live-intervals (lambda (live) (if (memv (car live) predefined-variables) -1 (- (cadr live) (/ 1 (+ 2 (cddr live)))))))) (define (find-available-register availability first-index) "Find register available from the specified first program index onwards" (car (or (find (compose (cut <= <> first-index) cdr) availability) '(#f)))) (define (mark-used-till availability element last-index) "Mark element in use up to specified index" (assq-set availability element (1+ last-index))) (define (spill-candidate variable-use) "Select variable blocking for the longest time as a spill candidate" (car (argmax cdr variable-use))) (define (ignore-spilled-variables variable-use allocation) "Remove spilled variables from the variable use list" (filter (compose (lambda (var) (cdr (or (assq var allocation) (cons var #t)))) car) variable-use)) (define (unallocated-variables allocation) "Return a list of unallocated variables" (map car (filter (compose not cdr) allocation))) (define (number-spilled-variables allocation stack-parameters) "Count the number of spilled variables" (length (difference (unallocated-variables allocation) stack-parameters))) (define (register-allocations allocation) "Return a list of variables with register allocated" (filter cdr allocation)) (define (assign-spill-locations variables offset increment) "Assign spill locations to a list of variables" (map (lambda (variable index) (cons variable (ptr RSP index))) variables (iota (length variables) offset increment))) (define (add-spill-information allocation offset increment) "Allocate spill locations for spilled variables" (append (register-allocations allocation) (assign-spill-locations (unallocated-variables allocation) offset increment))) (define (filter-blocks prog) (cond ((is-a? prog ) (filter-blocks (get-code prog))) ((list? prog) (map filter-blocks prog)) (else prog))) (define (blocked-intervals prog) (define code-length (compose length flatten-code filter-blocks)) (define ((bump-interval offset) interval) (cons (car interval) (cons (+ (cadr interval) offset) (+ (cddr interval) offset)))) (cond ((is-a? prog ) (cons (cons (get-reg prog) (cons 0 (1- (code-length (get-code prog))))) (blocked-intervals (get-code prog)))) ((pair? prog) (append (blocked-intervals (car prog)) (map (bump-interval (code-length (list (car prog)))) (blocked-intervals (cdr prog))))) (else '()))) (define (ignore-blocked-registers availability interval blocked) "Remove blocked registers from the availability list" (apply assq-remove availability ((overlap-interval blocked) interval))) (define (blocked-predefined predefined intervals blocked) "Get blocked predefined registers" (filter (lambda (pair) (let [(variable (car pair)) (register (cdr pair))] (and (assq-ref intervals variable) (memv register ((overlap-interval blocked) (assq-ref intervals variable)))))) predefined)) (define (move-blocked-predefined blocked-predefined) "Generate code for blocked predefined variables" (map (compose MOV car+cdr) blocked-predefined)) (define (non-blocked-predefined predefined blocked-predefined) "Compute the set difference of the predefined variables and the variables with blocked registers" (difference predefined blocked-predefined)) (define (linear-scan-coloring live-intervals registers predefined blocked) "Linear scan register allocation based on live intervals" (define (linear-allocate live-intervals register-use variable-use allocation) (if (null? live-intervals) allocation (let* [(candidate (car live-intervals)) (variable (car candidate)) (interval (cdr candidate)) (first-index (car interval)) (last-index (cdr interval)) (variable-use (mark-used-till variable-use variable last-index)) (availability (ignore-blocked-registers register-use interval blocked)) (register (or (assq-ref predefined variable) (find-available-register availability first-index))) (recursion (lambda (allocation register) (linear-allocate (cdr live-intervals) (mark-used-till register-use register last-index) variable-use (assq-set allocation variable register))))] (if register (recursion allocation register) (let* [(spill-targets (ignore-spilled-variables variable-use allocation)) (target (spill-candidate spill-targets)) (register (assq-ref allocation target))] (recursion (assq-set allocation target #f) register)))))) (linear-allocate (sort-live-intervals live-intervals (map car predefined)) (initial-register-use registers) '() '())) aiscm-0.15.1/aiscm/expression.scm0000644000175000017500000002047313213600050013606 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm expression) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (aiscm element) #:use-module (aiscm scalar) #:use-module (aiscm composite) #:use-module (aiscm int) #:use-module (aiscm pointer) #:use-module (aiscm sequence) #:use-module (aiscm variable) #:use-module (aiscm util) #:export ( skeleton delegate parameter lookup indexer index name coercion term type make-function subst dimension-hint injecter convolution array-pointer) #:re-export (typecode value get project shape strides rebase content) #:export-syntax (inject dim)) (define-method (skeleton (self >)) (make self #:value (var self))) (define-method (skeleton (self >)) (make self #:value (var self))) (define-method (skeleton (self >>)) (let [(slice (skeleton (project self)))] (make self #:value (value slice) #:shape (cons (var ) (shape slice)) #:strides (cons (var ) (strides slice))))) (define-class () (delegate #:init-keyword #:delegate #:getter delegate)) (define-method (parameter (self )) (make #:delegate self)) (define-method (parameter (self >)) (let [(idx (var ))] (indexer idx (lookup idx (parameter (project self)) (parameter (make #:value (stride self)))) (parameter (make #:value (dimension self)))))) (define-method (parameter (self >)) (parameter (skeleton self))) (define-class () (dimension #:init-keyword #:dimension #:getter dimension) (index #:init-keyword #:index #:getter index)) (define (indexer index delegate dimension) (make #:dimension dimension #:index index #:delegate delegate)) (define-syntax dim (lambda (x) (syntax-case x () ((dim expr) #'expr) ((dim indices ... index expr) #'(let [(index (var ))] (indexer index (dim indices ... expr) (dimension-hint index))))))) (define-class () (index #:init-keyword #:index #:getter index ) (stride #:init-keyword #:stride #:getter stride )) (define-method (lookup index delegate stride) (make #:index index #:delegate delegate #:stride stride)) (define-method (lookup idx (obj ) stride) (indexer (index obj) (lookup idx (delegate obj) stride) (dimension obj))) (define-class () (coercion #:init-keyword #:coercion #:getter coercion) (name #:init-keyword #:name #:getter name) (term #:init-keyword #:term #:getter term)) (define (make-function name coercion fun args) (make #:delegate args #:coercion coercion #:name name #:term (lambda (out) (apply fun out args)))) (define-class () (name #:init-keyword #:name #:getter name) (index #:init-keyword #:index #:getter index)) (define (injecter name index delegate) (make #:name name #:index index #:delegate delegate)) (define-syntax-rule (inject name index delegate) (let [(index (var ))] (injecter name index delegate))) (define-class ()) (define (convolution data kernel) (make #:delegate (list data kernel))) (define-method (type (self )) (typecode (delegate self))) (define-method (type (self )) (sequence (type (delegate self)))) (define-method (type (self )) (type (delegate self))) (define-method (type (self )) (apply (coercion self) (map type (delegate self)))) (define-method (type (self )) (type (delegate self))) (define-method (type (self )) (apply coerce (map type (delegate self)))) (define-method (typecode (self )) (typecode (type self))) (define-method (value (self )) (value (delegate self))) (define-method (value (self )) (value (delegate self))) (define-method (value (self )) (value (delegate self))) (define dimension-hint (make-object-property)) (define-method (element (self ) idx) "Broadcast dimensions when evaluating tensor expressions" self) (define-method (element (self ) idx) "Index an array in a tensor expression" (set! (dimension-hint idx) (dimension self)) (subst (delegate self) (index self) idx)) (define-method (element (self ) idx) "Index a function in a tensor" (apply (name self) (map (cut element <> idx) (delegate self)))) (define-method (element (self ) idx) "Index a injection in a tensor" (injecter (name self) (index self) (element (delegate self) idx))) (define-method (get (self ) . args) "Use multiple indices to access elements" (if (null? args) self (apply get (element self (last args)) (all-but-last args)))) (define-method (subst self candidate replacement) self) (define-method (subst (self ) candidate replacement) (indexer (index self) (subst (delegate self) candidate replacement) (dimension self))) (define-method (subst (self ) candidate replacement) (lookup (if (eq? (index self) candidate) replacement (index self)) (subst (delegate self) candidate replacement) (stride self))) (define-method (project (self )) (project (delegate self) (index self))) (define-method (project (self ) (idx )) (indexer (index self) (project (delegate self) idx) (dimension self))) (define-method (project (self ) (idx )) (if (eq? (index self) idx) (delegate self) (lookup (index self) (project (delegate self) idx) (stride self)))) (define-method (shape (self )) (attach (shape (delegate self)) (dimension self))) (define-method (shape (self )) (argmax length (map shape (delegate self)))) (define-method (shape (self )) (shape (delegate self))) (define-method (shape (self )) (let [(shapes (map shape (delegate self)))] (append (car shapes) (list-tail (cadr shapes) (apply min (map length shapes)))))) (define-method (dimension (self )) (last (shape self))) (define-method (strides (self )) (attach (strides (delegate self)) (stride (lookup self (index self))))) (define-method (lookup (self )) (lookup self (index self))) (define-method (lookup (self ) (idx )) (lookup (delegate self) idx)) (define-method (lookup (self ) (idx )) (if (eq? (index self) idx) self (lookup (delegate self) idx))) (define-method (stride (self )) (stride (lookup self))) (define-method (rebase (value ) (self )) (parameter (rebase value (delegate self)))) (define-method (rebase (value ) (self )) (indexer (index self) (rebase value (delegate self)) (dimension self))) (define-method (rebase (value ) (self )) (lookup (index self) (rebase value (delegate self)) (stride self))) (define-method (rebase (param ) (self )) (rebase (value param) self)) (define-method (content (type >) (self )) (map parameter (content type (delegate self)))) (define-method (content (type >) (self )) (list self)) (define-method (content (type >) (self )) (delegate self)) (define-method (content (type >>) (self )) (cons (dimension self) (cons (stride self) (content (project type) (project self))))) (define (array-pointer self) "Extract array pointer and return as a parameter" (parameter (make #:value (value self)))) aiscm-0.15.1/aiscm/ffmpeg-helpers.h0000644000175000017500000000311213213600050013747 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #pragma once #include void int_array_to_long(int64_t destination[], int32_t source[], int n); SCM from_non_zero_array(int64_t source[], int upto, int atleast); void offsets_from_pointers(uint8_t *pointers[], int64_t offsets[], int n); void pack_audio(uint8_t *pointers[], int channels, int nb_samples, int data_size, uint8_t *destination); struct ring_buffer_t { void **buffer; int size; int count; int offset; }; void ring_buffer_init(struct ring_buffer_t *ring_buffer, int size); void ring_buffer_free(struct ring_buffer_t *ring_buffer); void ring_buffer_push(struct ring_buffer_t *ring_buffer, void *element); void *ring_buffer_pop(struct ring_buffer_t *ring_buffer); int ring_buffer_full(struct ring_buffer_t *ring_buffer); int ring_buffer_empty(struct ring_buffer_t *ring_buffer); aiscm-0.15.1/aiscm/command.scm0000644000175000017500000002351313213600050013023 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm command) #:use-module (oop goops) #:use-module (ice-9 curried-definitions) #:use-module (ice-9 optargs) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (aiscm asm) #:use-module (aiscm element) #:use-module (aiscm bool) #:use-module (aiscm int) #:use-module (aiscm variable) #:use-module (aiscm util) #:export ( get-op get-ptr-args input output first-argument mov blocked sign-extend-ax div mod shl shr test-zero test-non-zero bool-and bool-or cmp cmp-equal cmp-not-equal cmp-lower-than cmp-lower-equal cmp-greater-than cmp-greater-equal minor major cmp-where cmp-abs repeat each-element) #:re-export (variables get-args get-reg get-code)) (define-method (input self) '()) (define-method (output self) '()) (define-class () (op #:init-keyword #:op #:getter get-op) (args #:init-keyword #:args #:getter get-args) (input #:init-keyword #:input #:getter get-input) (output #:init-keyword #:output #:getter get-output)) (define-method (initialize (self ) initargs) (let-keywords initargs #f (op (out '()) (io '()) (in '())) (next-method self (list #:op op #:args (append out io in) #:input (append io in) #:output (append io out))))) (define-method (write (self ) port) (write (cons (generic-function-name (get-op self)) (get-args self)) port)) (define-method (equal? (a ) (b )) (equal? (object-slots a) (object-slots b))) (define-method (input (self )) (delete-duplicates (variables (append (get-input self) (filter (cut is-a? <> ) (get-args self)))))) (define-method (output (self )) (filter (cut is-a? <> ) (get-output self))) (define-method (variables (self )) (variables (get-args self))) (define-method (variables (self )) (delete-duplicates (append-map variables self))) (define (get-ptr-args cmd) "get variables used as a pointer in a command" (filter (cut is-a? <> ) (append-map get-args (filter (cut is-a? <> ) (get-args cmd))))) (define-method (first-argument self) "Return false for compiled instructions" #f) (define-method (first-argument (self )) "Get first argument of machine instruction" (car (get-args self))) (define-method (movsx a b) (list (MOVSX a b))) (define-method (movsx (a ) b) (let [(intermediate (var (typecode a)))] (attach (movsx intermediate b) (MOV a intermediate)))) (define-method (movzx a b) (list (MOVZX a b))) (define-method (movzx (a ) b) (let [(intermediate (var (typecode a)))] (attach (movzx intermediate b) (MOV a intermediate)))) (define-method (mov-part a (b )) (MOV a (to-type (integer (* 8 (size-of a)) signed) b))) (define-method (mov-part (a ) b) (MOV a (to-type (integer (* 8 (size-of a)) signed) b))) (define-method (movzx32 (a ) b) (MOV (to-type (integer (* 8 (size-of b))unsigned) a) b)) (define (mov a b) (cond ((eqv? (size-of a) (size-of b)) (list (MOV a b))) ((< (size-of a) (size-of b)) (list (mov-part a b))) ((eqv? (size-of b) 4) (list (movzx32 a b))) (else ((if (signed? b) movsx movzx) a b)))) (define-syntax-rule (mutating-op op) (define-method (op . args) (make #:op op #:io (list (car args)) #:in (cdr args)))) (define-syntax-rule (functional-op op) (define-method (op . args) (make #:op op #:out (list (car args)) #:in (cdr args)))) (define-syntax-rule (state-setting-op op) (define-method (op . args) (make #:op op #:in args))) (define-syntax-rule (state-reading-op op) (define-method (op . args) (make #:op op #:out args))) (functional-op mov-part ) (functional-op movzx32 ) (functional-op MOV ) (functional-op MOVSX ) (functional-op MOVZX ) (functional-op LEA ) (mutating-op SHL ) (mutating-op SHR ) (mutating-op SAL ) (mutating-op SAR ) (state-setting-op PUSH ) (state-reading-op POP ) (mutating-op NEG ) (mutating-op NOT ) (mutating-op AND ) (mutating-op OR ) (mutating-op XOR ) (mutating-op INC ) (mutating-op ADD ) (mutating-op SUB ) (mutating-op IMUL ) (mutating-op IDIV ) (mutating-op DIV ) (state-setting-op CMP ) (state-setting-op TEST ) (state-reading-op SETB ) (state-reading-op SETNB ) (state-reading-op SETE ) (state-reading-op SETNE ) (state-reading-op SETBE ) (state-reading-op SETNBE ) (state-reading-op SETL ) (state-reading-op SETNL ) (state-reading-op SETLE ) (state-reading-op SETNLE ) (mutating-op CMOVB ) (mutating-op CMOVNB ) (mutating-op CMOVE ) (mutating-op CMOVNE ) (mutating-op CMOVBE ) (mutating-op CMOVNBE ) (mutating-op CMOVL ) (mutating-op CMOVNL ) (mutating-op CMOVLE ) (mutating-op CMOVNLE ) (define-class () (reg #:init-keyword #:reg #:getter get-reg) (code #:init-keyword #:code #:getter get-code)) (define-method (blocked (reg ) . body) "reserve a register so that the register allocator will not use it" (make #:reg reg #:code body)) (define-method (blocked (lst ) . body) "reserve empty list of registers (no effect)" body) (define-method (blocked (lst ) . body) "reserve multiple registers so that the register allocator will not use them" (blocked (car lst) (apply blocked (cdr lst) body))) (define (sign-extend-ax size) (case size ((1) (CBW)) ((2) (CWD)) ((4) (CDQ)) ((8) (CQO)))) (define (div/mod-prepare-signed r a) (list (MOV (to-type (typecode r) RAX) a) (sign-extend-ax (size-of r)))) (define (div/mod-prepare-unsigned r a) (if (eqv? 1 (size-of r)) (list (MOVZX AX a)) (list (MOV (to-type (typecode r) RAX) a) (MOV (to-type (typecode r) RDX) 0)))) (define (div/mod-signed r a b) (attach (div/mod-prepare-signed r a) (IDIV b))) (define (div/mod-unsigned r a b) (attach (div/mod-prepare-unsigned r a) (DIV b))) (define (div/mod-block-registers r . code) (blocked RAX (if (eqv? 1 (size-of r)) code (blocked RDX code)))) (define (div/mod r a b . finalise) (div/mod-block-registers r ((if (signed? r) div/mod-signed div/mod-unsigned) r a b) finalise)) (define (div r a b) (div/mod r a b (MOV r (to-type (typecode r) RAX)))) (define (mod r a b) (div/mod r a b (if (eqv? 1 (size-of r)) (list (MOV AL AH) (MOV r AL)) (MOV r DX)))) (define* ((shx shift-signed shift-unsigned) r . x) (let [(shift (if (signed? r) shift-signed shift-unsigned))] (if (null? x) (list (shift r)) (blocked RCX (apply mov CL x) (shift r CL))))) (define (shl r . x) (apply (shx SAL SHL) r x)) (define (shr r . x) (apply (shx SAR SHR) r x)) (define-method (test (a )) (list (TEST a a))) (define-method (test (a )) (let [(intermediate (var (typecode a)))] (list (MOV intermediate a) (test intermediate)))) (define (test-zero r a) (attach (test a) (SETE r))) (define (test-non-zero r a) (attach (test a) (SETNE r))) (define ((binary-bool op) a b) (let [(intermediate (var ))] (attach (append (test-non-zero a a) (test-non-zero intermediate b)) (op a intermediate)))) (define bool-and (binary-bool AND)) (define bool-or (binary-bool OR)) (define-method (cmp a b) (list (CMP a b))) (define-method (cmp (a ) (b )) (let [(intermediate (var (typecode a)))] (cons (MOV intermediate a) (cmp intermediate b)))) (define ((cmp-setxx set-signed set-unsigned) out a b) (let [(set (if (or (signed? a) (signed? b)) set-signed set-unsigned))] (attach (cmp a b) (set out)))) (define cmp-equal (cmp-setxx SETE SETE )) (define cmp-not-equal (cmp-setxx SETNE SETNE )) (define cmp-lower-than (cmp-setxx SETL SETB )) (define cmp-lower-equal (cmp-setxx SETLE SETBE )) (define cmp-greater-than (cmp-setxx SETNLE SETNBE)) (define cmp-greater-equal (cmp-setxx SETNL SETNB )) (define ((cmp-cmovxx set-signed set-unsigned jmp-signed jmp-unsigned) a b) (if (eqv? 1 (size-of a)) (append (cmp a b) (list ((if (signed? a) jmp-signed jmp-unsigned) 'skip)) (mov a b) (list 'skip)) (append (cmp a b) (list ((if (signed? a) set-signed set-unsigned) a b))))) (define minor (cmp-cmovxx CMOVNLE CMOVNBE JL JB )) (define major (cmp-cmovxx CMOVL CMOVB JNLE JNBE)) (define (cmp-where out m a b) "Select value using boolean variable" (list (test m) (JE 'zero) (mov out a) (JMP 'finish) 'zero (mov out b) 'finish)) (define (cmp-abs out) "Compute absolute value of signed or unsigned integers" (if (signed? out) (list (cmp out 0) (JNLE 'skip) (NEG out) 'skip) '())) (define (repeat start end . body) "Repeat loop" (let [(i (var (typecode end)))] (list (MOV i start) 'begin (CMP i (value end)) (JNL 'end) (INC i) body (JMP 'begin) 'end))) (define (each-element iterator end step . body) (list 'begin (CMP (value iterator) (value end)) (JNL 'end) body (ADD (value iterator) (value step)) (JMP 'begin) 'end)) aiscm-0.15.1/aiscm/int.scm0000644000175000017500000001436313213600050012202 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm int) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (rnrs bytevectors) #:use-module (system foreign) #:use-module (aiscm element) #:use-module (aiscm scalar) #:use-module (aiscm bool) #:use-module (aiscm util) #:export (signed unsigned bits signed? integer > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> ~ & | ^ << >> % =0 !=0 conj)) (define signed 'signed) (define unsigned 'unsigned) (define-class* > >> >) (define-method (write (self >) port) (format port "#<~a ~a>" (class-name (class-of self)) (get self))) (define-method (signed? (self )) (signed? (class-of self))) (define-method (bits (self >)) (bits (class-of self))) (define (integer nbits sgn) (template-class (int nbits sgn) > (lambda (class metaclass) (define-method (bits (self metaclass)) nbits) (define-method (signed? (self metaclass)) (eq? sgn 'signed)) (define-method (size-of (self metaclass)) (quotient (+ nbits 7) 8))))) (define native-bits (* (sizeof '*) 8)) (define (integer 8 unsigned)) (define > (class-of )) (define (integer 8 signed )) (define > (class-of )) (define (integer 16 unsigned)) (define > (class-of )) (define (integer 16 signed )) (define > (class-of )) (define (integer 32 unsigned)) (define > (class-of )) (define (integer 32 signed )) (define > (class-of )) (define (integer 64 unsigned)) (define > (class-of )) (define (integer 64 signed )) (define > (class-of )) (define (integer native-bits signed)) (define-method (foreign-type (t >> )) uint8) (define-method (foreign-type (t >> )) int8) (define-method (foreign-type (t >>)) uint16) (define-method (foreign-type (t >> )) int16) (define-method (foreign-type (t >>)) uint32) (define-method (foreign-type (t >> )) int32) (define-method (foreign-type (t >>)) uint64) (define-method (foreign-type (t >> )) int64) (define-method (pack (self >)) (let [(converter (if (signed? self) sint-list->bytevector uint-list->bytevector))] (converter (list (inexact->exact (get self))) (native-endianness) (size-of self)))) (define-method (unpack (self >>) (packed )) (let* [(converter (if (signed? self) bytevector->sint-list bytevector->uint-list)) (value (car (converter packed (native-endianness) (size-of self))))] (make self #:value value))) (define-method (coerce (a >>) (b >>)) (let [(max-bits (min 64 (max (bits a) (bits b)))) (to-signed (lambda (t) (integer (* 2 (bits t)) signed)))] (if (signed? a) (if (signed? b) (integer max-bits signed) (coerce a (to-signed b))) (if (signed? b) (coerce (to-signed a) b) (integer max-bits unsigned))))) (define-method (native-type (i ) . args) (if (every integer? args) (let [(lower (apply min (cons i args))) (upper (apply max (cons i args)))] (if (>= lower 0) (cond ((< upper (ash 1 8)) ) ((< upper (ash 1 16)) ) ((< upper (ash 1 32)) ) ((< upper (ash 1 64)) ) (else (next-method))) (let [(nlower (max (lognot lower) upper))] (cond ((< nlower (ash 1 7)) ) ((< nlower (ash 1 15)) ) ((< nlower (ash 1 31)) ) ((< nlower (ash 1 63)) ) (else (next-method)))))) (apply native-type (sort-by-pred (cons i args) integer?)))) (define-method (~ (self )) (lognot self)) (define-method (=0 (self )) (zero? self)) (define-method (!=0 (self )) (not (zero? self))) (define-method (& a) a) (define-method (& (a ) (b )) (logand a b)) (define-method (& a b c . args) (apply & (cons (& a b) (cons c args)))) (define-method (| a) a) (define-method (| (a ) (b )) (logior a b)) (define-method (| a b c . args) (apply | (cons (| a b) (cons c args)))) (define-method (^ a) a) (define-method (^ (a ) (b )) (logxor a b)) (define-method (^ a b c . args) (apply ^ (cons (^ a b) (cons c args)))) (define-method (<< (a ) (b )) (ash a b)) (define-method (<< (a )) (<< a 1)) (define-method (>> (a ) (b )) (ash a (- b))) (define-method (>> (a )) (>> a 1)) (define-method (% (a ) (b )) (modulo a b)) (define-method (== (a ) (b )) (= a b)) (define-method (!= (a ) (b )) (not (= a b))) (define-method (conj (a )) a) aiscm-0.15.1/aiscm/ringbuffer.c0000644000175000017500000000617413213600050013202 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "ringbuffer.h" void ringbuffer_init(struct ringbuffer_t *ringbuffer, int size) { ringbuffer->size = size; ringbuffer->buffer = malloc(size); ringbuffer_flush(ringbuffer); } void ringbuffer_destroy(struct ringbuffer_t *ringbuffer) { free(ringbuffer->buffer); } void ringbuffer_fetch(struct ringbuffer_t *ringbuffer, int count, ringbuffer_callback_t callback, void *userdata) { if (count > ringbuffer->fill) ringbuffer_fetch(ringbuffer, ringbuffer->fill, callback, userdata); else { int boundary = ringbuffer->size - ringbuffer->read_offset; if (count >= boundary) { (*callback)(ringbuffer->buffer + ringbuffer->read_offset, boundary, 0, userdata); (*callback)(ringbuffer->buffer, count - boundary, boundary, userdata); ringbuffer->read_offset = count - boundary; } else { (*callback)(ringbuffer->buffer + ringbuffer->read_offset, count, 0, userdata); ringbuffer->read_offset += count; }; ringbuffer->fill -= count; } } static void ringbuffer_copy_callback(char *data, int count, int offset, void *userdata) { ringbuffer_store((struct ringbuffer_t *)userdata, data, count); } static void ringbuffer_resize(struct ringbuffer_t *ringbuffer, int size) { struct ringbuffer_t resize; ringbuffer_init(&resize, size); ringbuffer_fetch(ringbuffer, ringbuffer->fill, ringbuffer_copy_callback, &resize); ringbuffer_destroy(ringbuffer); memcpy(ringbuffer, &resize, sizeof(struct ringbuffer_t)); } void ringbuffer_store(struct ringbuffer_t *ringbuffer, const char *data, int count) { if (ringbuffer->fill + count > ringbuffer->size) { ringbuffer_resize(ringbuffer, ringbuffer->fill + count + ringbuffer->size); ringbuffer_store(ringbuffer, data, count); } else { int boundary = ringbuffer->size - ringbuffer->write_offset; if (count >= boundary) { memcpy(ringbuffer->buffer + ringbuffer->write_offset, data, boundary); memcpy(ringbuffer->buffer, data + boundary, count - boundary); ringbuffer->write_offset = count - boundary; } else { memcpy(ringbuffer->buffer + ringbuffer->write_offset, data, count); ringbuffer->write_offset += count; }; ringbuffer->fill += count; }; } void ringbuffer_flush(struct ringbuffer_t *ringbuffer) { ringbuffer->fill = 0; ringbuffer->read_offset = 0; ringbuffer->write_offset = 0; } aiscm-0.15.1/aiscm/asm.scm0000644000175000017500000005026413213600050012170 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm asm) #:use-module (oop goops) #:use-module (system foreign) #:use-module (ice-9 binary-ports) #:use-module (rnrs bytevectors) #:use-module (srfi srfi-26) #:use-module (aiscm util) #:use-module (aiscm mem) #:use-module (aiscm element) #:use-module (aiscm int) #:export (
reg get-code xmm AL CL DL BL SPL BPL SIL DIL AH CH DH BH R8L R9L R10L R11L R12L R13L R14L R15L AX CX DX BX SP BP SI DI R8W R9W R10W R11W R12W R13W R14W R15W EAX ECX EDX EBX ESP EBP ESI EDI R8D R9D R10D R11D R12D R13D R14D R15D RAX RCX RDX RBX RSP RBP RSI RDI R8 R9 R10 R11 R12 R13 R14 R15 XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 XMM9 XMM10 XMM11 XMM12 XMM13 XMM14 XMM15 resolve-jumps get-target retarget asm obj ptr get-reg get-disp get-index ADD MOV MOVSX MOVZX LEA NOP RET PUSH POP SAL SAR SHL SHR NOT NEG INC SUB IMUL IDIV DIV AND OR XOR CBW CWDE CDQE CWD CDQ CQO CMP TEST SETB SETNB SETE SETNE SETBE SETNBE SETL SETNL SETLE SETNLE JMP JB JNB JE JNE JBE JNBE JL JNL JLE JNLE conditional? CMOVB CMOVNB CMOVE CMOVNE CMOVBE CMOVNBE CMOVL CMOVNL CMOVLE CMOVNLE CALL ModR/M bits3 bit4)) ; http://www.drpaulcarter.com/pcasm/ ; http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html (load-extension "libguile-aiscm-jit" "init_jit") (define-class () (binaries #:init-value '())) (define-class ()) (define-class () (size #:init-keyword #:size #:getter size-of) (code #:init-keyword #:code #:getter get-code) (symbol #:init-keyword #:symbol)) (define-method (write (self ) port) (format port "~a" (slot-ref self 'symbol))) (define reg-symbols '((1 AL CL DL BL SPL BPL SIL DIL R8L R9L R10L R11L R12L R13L R14L R15L) (2 AX CX DX BX SP BP SI DI R8W R9W R10W R11W R12W R13W R14W R15W) (4 EAX ECX EDX EBX ESP EBP ESI EDI R8D R9D R10D R11D R12D R13D R14D R15D) (8 RAX RCX RDX RBX RSP RBP RSI RDI R8 R9 R10 R11 R12 R13 R14 R15))) (define (reg-list bytes lst) (map (lambda (sym code) (make #:size bytes #:code code #:symbol sym)) lst (iota #x10))) (define regs (map (lambda (pair) (cons (car pair) (reg-list (car pair) (cdr pair)))) reg-symbols)) (define-method (reg (size ) (code )) (list-ref (assq-ref regs size) code)) (define-method (reg (type >>) (code )) (reg (size-of type) code)) (for-each (lambda (pair) (for-each (lambda (sym code) (toplevel-define! sym (reg (car pair) code))) (cdr pair) (iota #x10))) reg-symbols) (define AH (make #:size 1 #:code 4 #:symbol 'AH)) (define CH (make #:size 1 #:code 5 #:symbol 'CH)) (define DH (make #:size 1 #:code 6 #:symbol 'DH)) (define BH (make #:size 1 #:code 7 #:symbol 'BH)) (define-method (to-type (typecode >>) (self )) (reg (size-of typecode) (get-code self))) (define-class () (code #:init-keyword #:code #:getter get-code) (symbol #:init-keyword #:symbol)) (define-method (write (self ) port) (format port "~a" (slot-ref self 'symbol))) (define xmm-symbols '(XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 XMM9 XMM10 XMM11 XMM12 XMM13 XMM14 XMM15)) (define xmms (map (lambda (sym code) (make #:code code #:symbol sym)) xmm-symbols (iota #x10))) (define (xmm code) (list-ref xmms code)) (for-each (lambda (sym code) (toplevel-define! sym (xmm code))) xmm-symbols (iota #x10)) (define-class
() (type #:init-keyword #:type #:getter get-type) (reg #:init-keyword #:reg #:getter get-reg) (disp #:init-keyword #:disp #:getter get-disp #:init-value #f) (index #:init-keyword #:index #:getter get-index #:init-value #f)) (define-method (write (self
) port) (format port "~a" (compact 'ptr (class-name (get-type self)) (get-reg self) (get-index self) (get-disp self)))) (define-method (equal? (a
) (b
)) (equal? (object-slots a) (object-slots b))) (define-method (size-of (self
)) (size-of (get-type self))) (define-method (ptr (type >) (reg )) (make
#:type type #:reg reg)) (define-method (ptr (type >) (reg ) (disp )) (make
#:type type #:reg reg #:disp disp)) (define-method (ptr (type >) (reg ) (index )) (make
#:type type #:reg reg #:index index)) (define-method (ptr (type >) (reg ) (index ) (disp )) (make
#:type type #:reg reg #:index index #:disp disp)) (define-method (to-type (typecode >>) (self
)) (make
#:type typecode #:reg (get-reg self) #:disp (get-disp self) #:index (get-index self))) (define-method (raw64 (imm ) (size )) '()) (define-method (raw64 (imm ) (size )) (bytevector->u8-list (pack (make (integer (* 8 size) (if (negative? imm) signed unsigned)) #:value imm)))) (define-method (raw64 (imm ) (size )) (raw64 (pointer-address (get-memory imm)) size)) (define (raw32 imm size) (raw64 imm (min 4 size))) (define-method (bits3 (x )) (logand x #b111)) (define-method (bits3 (x )) (bits3 (get-code x))) (define-method (bits3 (x
)) (bits3 (get-reg x))) (define-method (get-reg (x )) #f) (define-method (get-index (x )) #f) (define-method (get-disp (x )) #f) (define-method (bit4 (x )) 0) (define-method (bit4 (x )) (logand x #b1)) (define-method (bit4 (x )) (bit4 (ash (get-code x) -3))) (define-method (bit4 (x
)) (bit4 (get-reg x))) (define-method (disp-value (x )) #f) (define-method (disp-value (x
)) (or (get-disp x) (if (memv (get-reg x) (list RBP R13)) 0 #f))) (define (opcode code reg) (list (logior code (bits3 reg)))) (define (if8 reg a b) (list (if (= (size-of reg) 1) a b))) (define (opcode-if8 reg code1 code2) (opcode (car (if8 reg code1 code2)) reg)) (define-method (op16 (x )) (if (= x 2) (list #x66) '())) (define-method (op16 (x )) (op16 (size-of x))) (define-method (disp8? (disp )) #f) (define-method (disp8? (disp )) (and (>= disp -128) (< disp 128))) (define-method (mod (r/m )) #b00) (define-method (mod (r/m )) (if (disp8? r/m) #b01 #b10)) (define-method (mod (r/m )) #b11) (define-method (mod (r/m
)) (mod (disp-value r/m))) (define-method (ModR/M mod reg/opcode r/m) (list (logior (ash mod 6) (ash (bits3 reg/opcode) 3) (bits3 r/m)))) (define-method (ModR/M reg/opcode (r/m )) (ModR/M (mod r/m) reg/opcode r/m)) (define-method (ModR/M reg/opcode (r/m
)) (if (get-index r/m) (ModR/M (mod r/m) reg/opcode #b100) (ModR/M (mod r/m) reg/opcode (get-reg r/m)))) (define (need-rex? r) (member r (list SPL BPL SIL DIL))); need REX to differentiate from AH, CH, DH, and BH (define (REX W r r/m) (let [(flags (logior (ash (if (= (size-of W) 8) 1 0) 3) (ash (bit4 r) 2) (ash (bit4 (get-index r/m)) 1) (bit4 r/m)))] (if (or (not (zero? flags)) (need-rex? r) (need-rex? r/m)) (list (logior (ash #b0100 4) flags)) '()))) (define (scale s) (index-of s '(1 2 4 8))) (define (SIB r/m) (if (get-index r/m) (list (logior (ash (scale (size-of (get-type r/m))) 6) (ash (bits3 (get-index r/m)) 3) (bits3 (get-reg r/m)))) (if (memv (get-reg r/m) (list RSP R12)) (list #b00100100) '()))) (define-method (prefixes (r/m )) (append (op16 r/m) (REX r/m 0 r/m))) (define-method (prefixes (r ) (r/m )) (append (op16 r) (REX r r r/m))) (define (postfixes reg/opcode r/m) (append (ModR/M reg/opcode r/m) (SIB r/m) (raw32 (disp-value r/m) (if (disp8? (disp-value r/m)) 1 4)))) (define (NOP) '(#x90)) (define (RET) '(#xc3)) (define-method (MOV (m
) (r )) (append (prefixes r m) (if8 r #x88 #x89) (postfixes r m))) (define-method (MOV (r ) (imm )) (append (prefixes r) (opcode-if8 r #xb0 #xb8) (raw64 imm (size-of r)))) (define-method (MOV (m
) (imm )) (append (prefixes m) (if8 m #xc6 #xc7) (postfixes 0 m) (raw32 imm (size-of m)))) (define-method (MOV (r ) (imm )) (append (prefixes r) (opcode-if8 r #xb0 #xb8) (raw64 imm (size-of r)))) (define-method (MOV (m
) (imm )) (append (prefixes m) (if8 m #xc6 #xc7) (postfixes 0 m) (raw32 imm (size-of m)))) (define-method (MOV (r ) (r/m )) (append (prefixes r r/m) (if8 r #x8a #x8b) (postfixes r r/m))) (define-method (MOV (r ) (imm )) (MOV r (pointer-address imm))) (define-method (MOVSX (r ) (r/m )) (let* [(size (size-of r/m)) (opcode (case size ((1) (list #x0f #xbe)) ((2) (list #x0f #xbf)) ((4) (list #x63))))] (append (prefixes r r/m) opcode (postfixes r r/m)))) (define-method (MOVZX (r ) (r/m )) (let* [(size (size-of r/m)) (opcode (case size ((1) (list #x0f #xb6)) ((2) (list #x0f #xb7)) ((4) (aiscm-error 'MOVZX "MOVZX does not support 32-bit input"))))] (append (prefixes r r/m) opcode (postfixes r r/m)))) (define (CBW) '(#x66 #x98)) (define (CWDE) '(#x98)) (define (CDQE) '(#x48 #x98)) (define (CWD) '(#x66 #x99)) (define (CDQ) '(#x99)) (define (CQO) '(#x48 #x99)) (define-method (LEA (r ) (m
)) (append (prefixes r m) (list #x8d) (postfixes r m))) (define-method (SHL (r/m )) (append (prefixes r/m) (if8 r/m #xd0 #xd1) (postfixes 4 r/m))) (define-method (SHL (r/m ) (r )) (append (prefixes r/m) (if8 r/m #xd2 #xd3) (postfixes 4 r/m))) (define-method (SHR (r/m )) (append (prefixes r/m) (if8 r/m #xd0 #xd1) (postfixes 5 r/m))) (define-method (SHR (r/m ) (r )) (append (prefixes r/m) (if8 r/m #xd2 #xd3) (postfixes 5 r/m))) (define-method (SAL (r/m )) (append (prefixes r/m) (if8 r/m #xd0 #xd1) (postfixes 4 r/m))) (define-method (SAL (r/m ) (r )) (append (prefixes r/m) (if8 r/m #xd2 #xd3) (postfixes 4 r/m))) (define-method (SAR (r/m )) (append (prefixes r/m) (if8 r/m #xd0 #xd1) (postfixes 7 r/m))) (define-method (SAR (r/m ) (r )) (append (prefixes r/m) (if8 r/m #xd2 #xd3) (postfixes 7 r/m))) (define-method (ADD (m
) (r )) (append (prefixes r m) (if8 m #x00 #x01) (postfixes r m))) (define-method (ADD (r ) (imm )) (if (equal? (get-code r) 0) (append (prefixes r) (if8 r #x04 #x05) (raw32 imm (size-of r))) (next-method))) (define-method (ADD (r/m ) (imm )) (append (prefixes r/m) (if8 r/m #x80 #x81) (postfixes 0 r/m) (raw32 imm (size-of r/m)))) (define-method (ADD (r ) (r/m )) (append (prefixes r r/m) (if8 r #x02 #x03) (postfixes r r/m))) (define-method (PUSH (r )) (append (prefixes r) (opcode #x50 r))) (define-method (POP (r )) (append (prefixes r) (opcode #x58 r))) (define-method (NOT (r/m )) (append (prefixes r/m) (if8 r/m #xf6 #xf7) (postfixes 2 r/m))) (define-method (NEG (r/m )) (append (prefixes r/m) (if8 r/m #xf6 #xf7) (postfixes 3 r/m))) (define-method (INC (r/m )) (append (prefixes r/m) (if8 r/m #xfe #xff) (postfixes 0 r/m))) (define-method (SUB (m
) (r )) (append (prefixes r m) (if8 m #x28 #x29) (postfixes r m))) (define-method (SUB (r ) (imm )) (if (equal? (get-code r) 0) (append (prefixes r) (if8 r #x2c #x2d) (raw32 imm (size-of r))) (next-method))) (define-method (SUB (r/m ) (imm )) (append (prefixes r/m) (if8 r/m #x80 #x81) (postfixes 5 r/m) (raw32 imm (size-of r/m)))) (define-method (SUB (r ) (r/m )) (append (prefixes r r/m) (if8 r/m #x2a #x2b) (postfixes r r/m))) (define-method (IMUL (r ) (r/m )) (append (prefixes r r/m) (list #x0f #xaf) (postfixes r r/m))) (define-method (IMUL (r ) (r/m ) (imm )) (if (and (< imm 128) (>= imm -128)) (append (prefixes r r/m) (list #x6b) (postfixes r r/m) (raw32 imm 1)) (append (prefixes r r/m) (list #x69) (postfixes r r/m) (raw32 imm (size-of r/m))))) (define-method (IDIV (r/m )) (append (prefixes r/m) (if8 r/m #xf6 #xf7) (postfixes 7 r/m))) (define-method (DIV (r/m )) (append (prefixes r/m) (if8 r/m #xf6 #xf7) (postfixes 6 r/m))) (define-method (AND (m
) (r )) (append (prefixes r m) (if8 m #x20 #x21) (postfixes r m))) (define-method (AND (r ) (imm )) (if (equal? (get-code r) 0) (append (prefixes r) (if8 r #x24 #x25) (raw32 imm (size-of r))) (next-method))) (define-method (AND (r/m ) (imm )) (append (prefixes r/m) (if8 r/m #x80 #x81) (postfixes 4 r/m) (raw32 imm (size-of r/m)))) (define-method (AND (r ) (r/m )) (append (prefixes r r/m) (if8 r #x22 #x23) (postfixes r r/m))) (define-method (OR (m
) (r )) (append (prefixes r m) (if8 m #x08 #x09) (postfixes r m))) (define-method (OR (r ) (imm )) (if (equal? (get-code r) 0) (append (prefixes r) (if8 r #x0c #x0d) (raw32 imm (size-of r))) (next-method))) (define-method (OR (r/m ) (imm )) (append (prefixes r/m) (if8 r/m #x80 #x81) (postfixes 1 r/m) (raw32 imm (size-of r/m)))) (define-method (OR (r ) (r/m )) (append (prefixes r r/m) (if8 r #x0a #x0b) (postfixes r r/m))) (define-method (XOR (m
) (r )) (append (prefixes r m) (if8 m #x30 #x31) (postfixes r m))) (define-method (XOR (r ) (imm )) (if (equal? (get-code r) 0) (append (prefixes r) (if8 r #x34 #x35) (raw32 imm (size-of r))) (next-method))) (define-method (XOR (r/m ) (imm )) (append (prefixes r/m) (if8 r/m #x80 #x81) (postfixes 6 r/m) (raw32 imm (size-of r/m)))) (define-method (XOR (r ) (r/m )) (append (prefixes r r/m) (if8 r #x32 #x33) (postfixes r r/m))) (define-method (CMP (m
) (r )) (append (prefixes r m) (if8 m #x38 #x39) (postfixes r m))) (define-method (CMP (r ) (imm )) (if (equal? (get-code r) 0) (append (prefixes r) (if8 r #x3c #x3d) (raw32 imm (size-of r))) (next-method))) (define-method (CMP (r/m ) (imm )) (append (prefixes r/m) (if8 r/m #x80 #x81) (postfixes 7 r/m) (raw32 imm (size-of r/m)))) (define-method (CMP (r ) (r/m )) (append (prefixes r r/m) (if8 r/m #x3a #x3b) (postfixes r r/m))) (define-method (TEST (r ) (imm )) (if (equal? (get-code r) 0) (append (prefixes r) (if8 r #xa8 #xa9) (raw32 imm (size-of r))) (next-method))) (define-method (TEST (r/m ) (imm )) (append (prefixes r/m) (if8 r/m #xf6 #xf7) (postfixes 0 r/m) (raw32 imm (size-of r/m)))) (define-method (TEST (r/m ) (r )) (append (prefixes r r/m) (if8 r/m #x84 #x85) (postfixes r r/m))) (define-class () (target #:init-keyword #:target #:getter get-target) (code8 #:init-keyword #:code8 #:getter get-code8) (code32 #:init-keyword #:code32 #:getter get-code32)) (define-method (write (self ) port) (format port "(Jcc ~a)" (get-target self))) (define-method (instruction-length self) 0) (define-method (instruction-length (self )) (length self)) (define-method (Jcc target code8 code32) (make #:target target #:code8 code8 #:code32 code32)) (define (conditional? self) (not (= #xeb (get-code8 self)))) (define-method (Jcc (target ) code8 code32) (append (if (disp8? target) (list code8) code32) (raw32 target (if (disp8? target) 1 4)))) (define (retarget jcc target) (Jcc target (get-code8 jcc) (get-code32 jcc))) (define-method (apply-offset self offsets) self) (define-method (apply-offset (self ) offsets) (let [(pos (assq-ref offsets self)) (target (assq-ref offsets (get-target self)))] (retarget self (if target (- target pos) 0)))) (define (apply-offsets commands offsets) (map (cut apply-offset <> offsets) commands)) (define (stabilize-jumps commands guess) (let* [(applied (apply-offsets commands guess)) (sizes (map instruction-length applied)) (offsets (map cons commands (integral sizes)))] (if (equal? offsets guess) (filter (compose not symbol?) applied) (stabilize-jumps commands offsets)))) (define (resolve-jumps commands) (stabilize-jumps commands '())) (define (JMP target) (Jcc target #xeb (list #xe9))) (define (JB target) (Jcc target #x72 (list #x0f #x82))) (define (JNB target) (Jcc target #x73 (list #x0f #x83))) (define (JE target) (Jcc target #x74 (list #x0f #x84))) (define (JNE target) (Jcc target #x75 (list #x0f #x85))) (define (JBE target) (Jcc target #x76 (list #x0f #x86))) (define (JNBE target) (Jcc target #x77 (list #x0f #x87))) (define (JL target) (Jcc target #x7c (list #x0f #x8c))) (define (JNL target) (Jcc target #x7d (list #x0f #x8d))) (define (JLE target) (Jcc target #x7e (list #x0f #x8e))) (define (JNLE target) (Jcc target #x7f (list #x0f #x8f))) (define (obj commands) (u8-list->bytevector (flatten (resolve-jumps commands)))) (define (asm ctx return-type arg-types commands) (let* [(code (obj commands)) (mapped (make-mmap code))] (if (equal? "YES" (getenv "DEBUG")) (objdump (bytevector->u8-list code))) (slot-set! ctx 'binaries (cons mapped (slot-ref ctx 'binaries))) (pointer->procedure (foreign-type return-type) (make-pointer (mmap-address mapped)) (map foreign-type arg-types)))) (define (SETcc code r/m) (append (prefixes r/m) (list #x0f code) (postfixes 0 r/m))) (define-method (SETB (r/m )) (SETcc #x92 r/m)) (define-method (SETNB (r/m )) (SETcc #x93 r/m)) (define-method (SETE (r/m )) (SETcc #x94 r/m)) (define-method (SETNE (r/m )) (SETcc #x95 r/m)) (define-method (SETBE (r/m )) (SETcc #x96 r/m)) (define-method (SETNBE (r/m )) (SETcc #x97 r/m)) (define-method (SETL (r/m )) (SETcc #x9c r/m)) (define-method (SETNL (r/m )) (SETcc #x9d r/m)) (define-method (SETLE (r/m )) (SETcc #x9e r/m)) (define-method (SETNLE (r/m )) (SETcc #x9f r/m)) (define (CMOVcc code r r/m) (append (prefixes r r/m) (list #x0f code) (postfixes r r/m))) (define-method (CMOVB (r ) (r/m )) (CMOVcc #x42 r r/m)) (define-method (CMOVNB (r ) (r/m )) (CMOVcc #x43 r r/m)) (define-method (CMOVE (r ) (r/m )) (CMOVcc #x44 r r/m)) (define-method (CMOVNE (r ) (r/m )) (CMOVcc #x45 r r/m)) (define-method (CMOVBE (r ) (r/m )) (CMOVcc #x46 r r/m)) (define-method (CMOVNBE (r ) (r/m )) (CMOVcc #x47 r r/m)) (define-method (CMOVL (r ) (r/m )) (CMOVcc #x4c r r/m)) (define-method (CMOVNL (r ) (r/m )) (CMOVcc #x4d r r/m)) (define-method (CMOVLE (r ) (r/m )) (CMOVcc #x4e r r/m)) (define-method (CMOVNLE (r ) (r/m )) (CMOVcc #x4f r r/m)) (define-method (CALL (r/m )) (append (prefixes r/m) (list #xff) (postfixes 2 r/m))) aiscm-0.15.1/aiscm/ffmpeg.c0000644000175000017500000010412113213600050012304 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "config.h" #include "ffmpeg-helpers.h" #include "ringbuffer.h" #include "util-helpers.h" // http://dranger.com/ffmpeg/ // https://github.com/FFmpeg/FFmpeg/tree/n2.6.9/doc/examples // https://raw.githubusercontent.com/FFmpeg/FFmpeg/n2.6.9/doc/examples/demuxing_decoding.c // https://raw.githubusercontent.com/FFmpeg/FFmpeg/n2.6.9/doc/examples/filtering_video.c // https://raw.githubusercontent.com/FFmpeg/FFmpeg/n2.6.9/doc/examples/muxing.c #ifndef HAVE_FRAME_ALLOC #define av_frame_alloc avcodec_alloc_frame #define av_frame_free avcodec_free_frame #define av_frame_unref avcodec_get_frame_defaults #endif #ifndef HAVE_AV_PACKET_UNREF #define av_packet_unref av_free_packet #endif #define PIX_FMT AV_PIX_FMT_YUV420P static scm_t_bits ffmpeg_tag; struct ffmpeg_t { AVFormatContext *fmt_ctx; AVCodecContext *video_codec_ctx; AVCodecContext *audio_codec_ctx; int video_stream_idx; int audio_stream_idx; long output_video_pts; char header_written; char output_file; AVPacket pkt; AVPacket orig_pkt; AVFrame *video_target_frame; AVFrame *audio_packed_frame; AVFrame *audio_target_frame; int samples_count; struct ringbuffer_t audio_buffer; }; static SCM get_error_text(int err) { static char buf[255]; av_strerror(err, buf, sizeof(buf)); return scm_from_locale_string(buf); } static struct ffmpeg_t *get_self_no_check(SCM scm_self) { return (struct ffmpeg_t *)SCM_SMOB_DATA(scm_self); } static struct ffmpeg_t *get_self(SCM scm_self) { scm_assert_smob_type(ffmpeg_tag, scm_self); return get_self_no_check(scm_self); } static AVCodecContext *video_codec_ctx(struct ffmpeg_t *self) { if (!self->video_codec_ctx) scm_misc_error("video-codec-ctx", "File format does not have a video stream", SCM_EOL); return self->video_codec_ctx; } static AVCodecContext *audio_codec_ctx(struct ffmpeg_t *self) { if (!self->audio_codec_ctx) scm_misc_error("audio-codec-ctx", "File format does not have an audio stream", SCM_EOL); return self->audio_codec_ctx; } static AVStream *video_stream(struct ffmpeg_t *self) { if (self->video_stream_idx < 0) scm_misc_error("video-stream", "File format does not have a video stream", SCM_EOL); return self->fmt_ctx->streams[self->video_stream_idx]; } static AVStream *audio_stream(struct ffmpeg_t *self) { if (self->audio_stream_idx < 0) scm_misc_error("audio-stream", "File format does not have an audio stream", SCM_EOL); return self->fmt_ctx->streams[self->audio_stream_idx]; } static char is_input_context(struct ffmpeg_t *self) { return self->fmt_ctx->iformat != NULL; } static void write_frame(struct ffmpeg_t *self, AVPacket *packet, AVCodecContext *codec, AVStream *stream, int stream_idx) { #ifdef HAVE_AV_PACKET_RESCALE_TS av_packet_rescale_ts(packet, codec->time_base, stream->time_base); #else if (codec->coded_frame->pts != AV_NOPTS_VALUE) packet->pts = av_rescale_q(codec->coded_frame->pts, codec->time_base, stream->time_base); #endif packet->stream_index = stream_idx; int err = av_interleaved_write_frame(self->fmt_ctx, packet); if (err < 0) scm_misc_error("write-frame", "Error writing video frame: ~a", scm_list_1(get_error_text(err))); } static int encode_video(struct ffmpeg_t *self, AVFrame *video_frame) { AVCodecContext *codec = video_codec_ctx(self); // Initialise data packet AVPacket pkt = { 0 }; av_init_packet(&pkt); // Encode the video frame int got_packet; int err = avcodec_encode_video2(codec, &pkt, video_frame, &got_packet); if (err < 0) scm_misc_error("encode-video", "Error encoding video frame: ~a", scm_list_1(get_error_text(err))); // Write any new video packets if (got_packet) write_frame(self, &pkt, codec, video_stream(self), self->video_stream_idx); return got_packet; } static int encode_audio(struct ffmpeg_t *self, AVFrame *audio_frame) { AVCodecContext *codec = audio_codec_ctx(self); // Initialise data packet AVPacket pkt = { 0 }; av_init_packet(&pkt); // Encode the audio frame int got_packet; int err = avcodec_encode_audio2(codec, &pkt, audio_frame, &got_packet); if (err < 0) scm_misc_error("encode-audio", "Error encoding audio frame: ~a", scm_list_1(get_error_text(err))); // Write any new audio packets if (got_packet) write_frame(self, &pkt, codec, audio_stream(self), self->audio_stream_idx); return got_packet; } SCM ffmpeg_destroy(SCM scm_self) { struct ffmpeg_t *self = get_self_no_check(scm_self); if (self->header_written) { // Clear audio encoder pipeline if (self->audio_codec_ctx) while (encode_audio(self, NULL)); // Clear video encoder pipeline if (self->video_codec_ctx) while (encode_video(self, NULL)); }; if (self->video_target_frame) { av_frame_unref(self->video_target_frame); av_frame_free(&self->video_target_frame); self->video_target_frame = NULL; }; if (self->audio_packed_frame) { av_frame_unref(self->audio_packed_frame); av_frame_free(&self->audio_packed_frame); self->audio_packed_frame = NULL; }; if (self->audio_target_frame) { av_frame_unref(self->audio_target_frame); av_frame_free(&self->audio_target_frame); self->audio_target_frame = NULL; }; if (self->audio_buffer.buffer) { ringbuffer_destroy(&self->audio_buffer); self->audio_buffer.buffer = NULL; }; if (self->header_written) { av_write_trailer(self->fmt_ctx); self->header_written = 0; }; if (self->orig_pkt.data) { av_packet_unref(&self->orig_pkt); self->orig_pkt.data = NULL; }; if (self->audio_codec_ctx) { avcodec_close(self->audio_codec_ctx); self->audio_codec_ctx = NULL; }; if (self->video_codec_ctx) { avcodec_close(self->video_codec_ctx); self->video_codec_ctx = NULL; }; if (self->output_file) { avio_close(self->fmt_ctx->pb); self->output_file = 0; }; if (self->fmt_ctx) { if (is_input_context(self)) avformat_close_input(&self->fmt_ctx); else avformat_free_context(self->fmt_ctx); self->fmt_ctx = NULL; }; return SCM_UNSPECIFIED; } size_t free_ffmpeg(SCM scm_self) { struct ffmpeg_t *self = get_self_no_check(scm_self); ffmpeg_destroy(scm_self); scm_gc_free(self, sizeof(struct ffmpeg_t), "ffmpeg"); return 0; } static AVCodecContext *open_codec(SCM scm_self, AVCodecContext *codec_ctx, AVCodec *codec, const char *media_type, SCM scm_file_name) { int err = avcodec_open2(codec_ctx, codec, NULL); if (err < 0) { ffmpeg_destroy(scm_self); scm_misc_error("open-codec", "Failed to open ~a codec for file '~a'", scm_list_2(scm_from_locale_string(media_type), scm_file_name)); }; return codec_ctx; } static AVCodecContext *open_decoder(SCM scm_self, SCM scm_file_name, AVStream *stream, const char *media_type) { AVCodecContext *dec_ctx = stream->codec; AVCodec *decoder = avcodec_find_decoder(dec_ctx->codec_id); if (!decoder) { ffmpeg_destroy(scm_self); scm_misc_error("open-codec", "Failed to find ~a codec for file '~a'", scm_list_2(scm_from_locale_string(media_type), scm_file_name)); }; return open_codec(scm_self, dec_ctx, decoder, media_type, scm_file_name); } static AVFrame *allocate_frame(SCM scm_self) { AVFrame *retval = av_frame_alloc(); if (!retval) { ffmpeg_destroy(scm_self); scm_misc_error("allocate-frame", "Error allocating frame", SCM_EOL); }; memset(retval, 0, sizeof(AVFrame)); return retval; } SCM make_ffmpeg_input(SCM scm_file_name, SCM scm_debug) { SCM retval; struct ffmpeg_t *self; const char *file_name = scm_to_locale_string(scm_file_name); self = (struct ffmpeg_t *)scm_gc_calloc(sizeof(struct ffmpeg_t), "ffmpeg"); self->video_stream_idx = -1; self->audio_stream_idx = -1; SCM_NEWSMOB(retval, ffmpeg_tag, self); int err; err = avformat_open_input(&self->fmt_ctx, file_name, NULL, NULL); if (err < 0) { ffmpeg_destroy(retval); scm_misc_error("make-ffmpeg-input", "Error opening file '~a': ~a", scm_list_2(scm_file_name, get_error_text(err))); }; err = avformat_find_stream_info(self->fmt_ctx, NULL); if (err < 0) { ffmpeg_destroy(retval); scm_misc_error("make-ffmpeg-input", "No stream information in file '~a': ~a", scm_list_2(scm_file_name, get_error_text(err))); }; // TODO: only open desired streams // Open video stream self->video_stream_idx = av_find_best_stream(self->fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0); if (self->video_stream_idx >= 0) self->video_codec_ctx = open_decoder(retval, scm_file_name, video_stream(self), "video"); // Open audio stream self->audio_stream_idx = av_find_best_stream(self->fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0); if (self->audio_stream_idx >= 0) self->audio_codec_ctx = open_decoder(retval, scm_file_name, audio_stream(self), "audio"); // Print debug information if (scm_is_true(scm_debug)) av_dump_format(self->fmt_ctx, 0, file_name, 0); // Allocate input frames self->video_target_frame = allocate_frame(retval); self->audio_target_frame = allocate_frame(retval); // Initialise data packet av_init_packet(&self->pkt); self->pkt.data = NULL; self->pkt.size = 0; return retval; } static AVCodec *find_encoder(SCM scm_self, enum AVCodecID codec_id, const char *output_type) { if (codec_id == AV_CODEC_ID_NONE) {// TODO: test (needs wav or mp3 container selection above first) ffmpeg_destroy(scm_self); scm_misc_error("make-ffmpeg-output", "File format does not support ~a encoding", scm_list_1(scm_from_locale_string(output_type))); }; AVCodec *retval = avcodec_find_encoder(codec_id);// TODO: autodetect or select video codec if (!retval) { ffmpeg_destroy(scm_self); scm_misc_error("make-ffmpeg-output", "Error finding encoder for codec '~a'", scm_list_1(scm_from_locale_string(avcodec_descriptor_get(codec_id)->name))); }; return retval; } static AVStream *open_output_stream(SCM scm_self, AVCodec *encoder, int *stream_idx, const char *output_type, SCM scm_file_name) { struct ffmpeg_t *self = get_self(scm_self); AVStream *retval = avformat_new_stream(self->fmt_ctx, encoder); if (!retval) { ffmpeg_destroy(scm_self); scm_misc_error("make-ffmpeg-output", "Error allocating ~a stream for file '~a'", scm_list_2(scm_from_locale_string(output_type), scm_file_name)); }; retval->id = self->fmt_ctx->nb_streams - 1; *stream_idx = retval->id; return retval; } static AVCodecContext *configure_output_video_codec(AVStream *video_stream, enum AVCodecID video_codec_id, SCM scm_video_bit_rate, SCM scm_shape, SCM scm_frame_rate, SCM scm_aspect_ratio) { // Get codec context AVCodecContext *retval = video_stream->codec; // Set codec id retval->codec_id = video_codec_id; retval->codec_type = AVMEDIA_TYPE_VIDEO; // Set encoder bit rate retval->bit_rate = scm_to_int(scm_video_bit_rate); // Set video frame width and height retval->width = scm_to_int(scm_car(scm_shape)); retval->height = scm_to_int(scm_cadr(scm_shape)); // Set video frame rate video_stream->avg_frame_rate.num = scm_to_int(scm_numerator(scm_frame_rate)); video_stream->avg_frame_rate.den = scm_to_int(scm_denominator(scm_frame_rate)); video_stream->time_base.num = video_stream->avg_frame_rate.den; video_stream->time_base.den = video_stream->avg_frame_rate.num; retval->time_base = video_stream->time_base; // Set intra frame lower limit retval->gop_size = 12; // Set pixel format retval->pix_fmt = PIX_FMT; if (retval->codec_id == AV_CODEC_ID_MPEG1VIDEO) retval->mb_decision = 2; // Set aspect ratio video_stream->sample_aspect_ratio.num = scm_to_int(scm_numerator(scm_aspect_ratio)); video_stream->sample_aspect_ratio.den = scm_to_int(scm_denominator(scm_aspect_ratio)); retval->sample_aspect_ratio = video_stream->sample_aspect_ratio; return retval; } static AVCodecContext *configure_output_audio_codec(SCM scm_self, AVStream *audio_stream, enum AVCodecID audio_codec_id, SCM scm_select_rate, SCM scm_channels, SCM scm_audio_bit_rate, SCM scm_select_format) { // Get codec context AVCodecContext *retval = audio_stream->codec; const AVCodec *codec = retval->codec; // Select sample format SCM scm_sample_formats = SCM_EOL; if (codec->sample_fmts) { int i; for (i=0; codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++) scm_sample_formats = scm_cons(scm_from_int(codec->sample_fmts[i]), scm_sample_formats); }; SCM scm_sample_format = clean_up_on_failure(scm_self, ffmpeg_destroy, scm_select_format, scm_sample_formats); // Set sample format retval->sample_fmt = scm_to_int(scm_sample_format); // Select sample rate SCM scm_rates = SCM_EOL; if (codec->supported_samplerates) { int i; for (i=0; codec->supported_samplerates[i] != 0; i++) scm_rates = scm_cons(scm_from_int(codec->supported_samplerates[i]), scm_rates); }; SCM scm_rate = clean_up_on_failure(scm_self, ffmpeg_destroy, scm_select_rate, scm_rates); // Set sample rate retval->sample_rate = scm_to_int(scm_rate); audio_stream->time_base.num = 1; audio_stream->time_base.den = retval->sample_rate; retval->time_base = audio_stream->time_base; // Set channels retval->channels = scm_to_int(scm_channels); retval->channel_layout = av_get_default_channel_layout(retval->channels); // Set bit rate retval->bit_rate = scm_to_int(scm_audio_bit_rate); return retval; } static AVFrame *allocate_output_video_frame(SCM scm_self, AVCodecContext *video_context) { AVFrame *retval = allocate_frame(scm_self); int width = video_context->width; int height = video_context->height; retval->format = PIX_FMT; retval->width = width; retval->height = height; #ifdef HAVE_AV_FRAME_GET_BUFFER int err = av_frame_get_buffer(retval, 32); if (err < 0) { ffmpeg_destroy(scm_self); scm_misc_error("allocate-output-frame", "Error allocating frame buffer: ~a", scm_list_1(get_error_text(err))); }; #else int size = avpicture_get_size(PIX_FMT, width, height); uint8_t *frame_buffer = (uint8_t *)av_malloc(size); if (!frame_buffer) { ffmpeg_destroy(scm_self); scm_misc_error("allocate-output-video-frame", "Error allocating video frame memory", SCM_EOL); }; avpicture_fill((AVPicture *)retval, frame_buffer, PIX_FMT, width, height); #endif return retval; } static AVFrame *allocate_output_audio_frame(SCM scm_self, AVCodecContext *audio_codec, enum AVSampleFormat sample_fmt) { AVFrame *retval = allocate_frame(scm_self); retval->format = sample_fmt; retval->channel_layout = audio_codec->channel_layout; retval->sample_rate = audio_codec->sample_rate; if (audio_codec->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE) retval->nb_samples = 2 * FF_MIN_BUFFER_SIZE; else retval->nb_samples = audio_codec->frame_size; #ifdef HAVE_AV_FRAME_GET_BUFFER int err = av_frame_get_buffer(retval, 0); if (err < 0) { ffmpeg_destroy(scm_self); scm_misc_error("allocate-output-audio-frame", "Error allocating audio frame memory", SCM_EOL); }; #else int channels = av_get_channel_layout_nb_channels(retval->channel_layout); int err = av_samples_alloc(retval->data, &retval->linesize[0], channels, retval->nb_samples, retval->format, 0); // TODO: need av_freep? if (err < 0) { ffmpeg_destroy(scm_self); scm_misc_error("allocate-output-audio-frame", "Could not allocate audio buffer", SCM_EOL); }; #endif return retval; } SCM make_ffmpeg_output(SCM scm_file_name, SCM scm_format_name, SCM scm_video_parameters, SCM scm_have_video, SCM scm_audio_parameters, SCM scm_have_audio, SCM scm_debug) { SCM retval; struct ffmpeg_t *self; const char *file_name = scm_to_locale_string(scm_file_name); self = (struct ffmpeg_t *)scm_gc_calloc(sizeof(struct ffmpeg_t), "ffmpeg"); self->video_stream_idx = -1; self->audio_stream_idx = -1; SCM_NEWSMOB(retval, ffmpeg_tag, self); int err; const char *format_name = NULL; if (!scm_is_false(scm_format_name)) format_name = scm_to_locale_string(scm_symbol_to_string(scm_format_name)); #ifdef HAVE_AVFORMAT_ALLOC_OUTPUT_CONTEXT2 err = avformat_alloc_output_context2(&self->fmt_ctx, NULL, format_name, file_name); if (!self->fmt_ctx) { ffmpeg_destroy(retval); scm_misc_error("make-ffmpeg-output", "Error initializing output format for file '~a': ~a", scm_list_2(scm_file_name, get_error_text(err))); }; #else AVOutputFormat *format; if (format_name) format = av_guess_format(format_name, NULL, NULL); else format = av_guess_format(NULL, file_name, NULL); if (!format) { ffmpeg_destroy(retval); scm_misc_error("make-ffmpeg-output", "Unable to determine file format for file '~a'", scm_list_1(scm_file_name)); }; self->fmt_ctx = avformat_alloc_context(); if (!self->fmt_ctx) { ffmpeg_destroy(retval); scm_misc_error("make-ffmpeg-output", "Error initializing output format for file '~a'", scm_list_1(scm_file_name)); }; self->fmt_ctx->oformat = format; strncpy(self->fmt_ctx->filename, file_name, sizeof(self->fmt_ctx->filename)); #endif char have_video = scm_is_true(scm_have_video); if (have_video) { // Open codec and video stream enum AVCodecID video_codec_id = self->fmt_ctx->oformat->video_codec; AVCodec *video_encoder = find_encoder(retval, video_codec_id, "video"); AVStream *video_stream = open_output_stream(retval, video_encoder, &self->video_stream_idx, "video", scm_file_name); // Get video parameters SCM scm_shape = scm_car(scm_video_parameters); SCM scm_frame_rate = scm_cadr(scm_video_parameters); SCM scm_video_bit_rate = scm_caddr(scm_video_parameters); SCM scm_aspect_ratio = scm_cadddr(scm_video_parameters); // Configure the output video codec self->video_codec_ctx = configure_output_video_codec(video_stream, video_codec_id, scm_video_bit_rate, scm_shape, scm_frame_rate, scm_aspect_ratio); // Some formats want stream headers to be separate. if (self->fmt_ctx->oformat->flags & AVFMT_GLOBALHEADER) self->video_codec_ctx->flags |= CODEC_FLAG_GLOBAL_HEADER; // Open output video codec open_codec(retval, self->video_codec_ctx, video_encoder, "video", scm_file_name); // Allocate frame self->video_target_frame = allocate_output_video_frame(retval, self->video_codec_ctx); }; char have_audio = scm_is_true(scm_have_audio); if (have_audio) { // Open audio codec and stream enum AVCodecID audio_codec_id = self->fmt_ctx->oformat->audio_codec; AVCodec *audio_encoder = find_encoder(retval, audio_codec_id, "audio"); AVStream *audio_stream = open_output_stream(retval, audio_encoder, &self->audio_stream_idx, "audio", scm_file_name); // Get audio parameters SCM scm_select_rate = scm_car(scm_audio_parameters); SCM scm_channels = scm_cadr(scm_audio_parameters); SCM scm_audio_bit_rate = scm_caddr(scm_audio_parameters); SCM scm_select_format = scm_cadddr(scm_audio_parameters); // Configure the output audio codec self->audio_codec_ctx = configure_output_audio_codec(retval, audio_stream, audio_codec_id, scm_select_rate, scm_channels, scm_audio_bit_rate, scm_select_format); // Some formats want stream headers to be separate. if (self->fmt_ctx->oformat->flags & AVFMT_GLOBALHEADER) self->audio_codec_ctx->flags |= CODEC_FLAG_GLOBAL_HEADER; // Open output audio codec open_codec(retval, self->audio_codec_ctx, audio_encoder, "audio", scm_file_name); // Allocate audio frame self->audio_target_frame = allocate_output_audio_frame(retval, self->audio_codec_ctx, self->audio_codec_ctx->sample_fmt); self->audio_packed_frame = allocate_output_audio_frame(retval, self->audio_codec_ctx, av_get_packed_sample_fmt(self->audio_codec_ctx->sample_fmt)); // Initialise audio buffer ringbuffer_init(&self->audio_buffer, 1024); }; if (scm_is_true(scm_debug)) av_dump_format(self->fmt_ctx, 0, file_name, 1); // Open the output file if needed if (!(self->fmt_ctx->oformat->flags & AVFMT_NOFILE)) { int err = avio_open(&self->fmt_ctx->pb, file_name, AVIO_FLAG_WRITE); if (err < 0) { ffmpeg_destroy(retval); scm_misc_error("make-ffmpeg-output", "Could not open '~a': ~a", scm_list_2(scm_file_name, get_error_text(err))); } self->output_file = 1; } // Write video file header err = avformat_write_header(self->fmt_ctx, NULL); if (err < 0) { ffmpeg_destroy(retval); scm_misc_error("make-ffmpeg-output", "Error writing header of video '~a': ~a", scm_list_2(scm_file_name, get_error_text(err))); }; self->header_written = 1; return retval; } SCM ffmpeg_have_video(SCM scm_self) { struct ffmpeg_t *self = get_self(scm_self); return scm_from_bool(self->video_codec_ctx); } SCM ffmpeg_have_audio(SCM scm_self) { struct ffmpeg_t *self = get_self(scm_self); return scm_from_bool(self->audio_codec_ctx); } SCM ffmpeg_shape(SCM scm_self) { AVCodecContext *ctx = video_codec_ctx(get_self(scm_self)); return scm_list_2(scm_from_int(ctx->width), scm_from_int(ctx->height)); } static SCM rational(int numerator, int denominator) { return scm_divide(scm_from_int(numerator), scm_from_int(denominator)); } static SCM time_base(AVStream *stream) { AVRational time_base = stream->time_base; return rational(time_base.num, time_base.den); } SCM ffmpeg_frame_rate(SCM scm_self) { AVRational avg_frame_rate = video_stream(get_self(scm_self))->avg_frame_rate; return rational(avg_frame_rate.num, avg_frame_rate.den); } SCM ffmpeg_video_bit_rate(SCM scm_self) { return scm_from_int(video_codec_ctx(get_self(scm_self))->bit_rate); } SCM ffmpeg_aspect_ratio(SCM scm_self) { AVRational aspect_ratio = video_stream(get_self(scm_self))->sample_aspect_ratio; return rational(aspect_ratio.num, aspect_ratio.den); } SCM ffmpeg_seek(SCM scm_self, SCM scm_position) { struct ffmpeg_t *self = get_self(scm_self); if (!is_input_context(self)) scm_misc_error("ffmpeg-seek", "Attempt to seek in FFmpeg output video", SCM_EOL); int64_t position = (int64_t)(scm_to_double(scm_position) * AV_TIME_BASE); av_seek_frame(self->fmt_ctx, -1, position, AVSEEK_FLAG_ANY);// TODO: check error return scm_position; } SCM ffmpeg_flush(SCM scm_self) { struct ffmpeg_t *self = get_self(scm_self); if (self->video_codec_ctx) avcodec_flush_buffers(self->video_codec_ctx); if (self->audio_codec_ctx) avcodec_flush_buffers(self->audio_codec_ctx); if (self->audio_buffer.buffer) ringbuffer_flush(&self->audio_buffer); return scm_self; } static void read_packet(struct ffmpeg_t *self) { if (self->orig_pkt.data) { av_packet_unref(&self->orig_pkt); self->orig_pkt.data = NULL; self->orig_pkt.size = 0; }; int err = av_read_frame(self->fmt_ctx, &self->pkt); if (err >= 0) self->orig_pkt = self->pkt; else { self->pkt.data = NULL; self->pkt.size = 0; if (err != AVERROR_EOF) scm_misc_error("read-packet", "Error reading frame: ~a", scm_list_1(get_error_text(err))); }; } static void consume_packet_data(AVPacket *pkt, int decoded) { pkt->data += decoded; pkt->size -= decoded; } static int64_t frame_timestamp(AVFrame *frame) { int64_t retval; #ifdef HAVE_AV_FRAME_PTS if (frame->pts != AV_NOPTS_VALUE) retval = frame->pts; #else if (frame->pkt_pts != AV_NOPTS_VALUE) retval = frame->pkt_pts; #endif else if (frame->pkt_dts != AV_NOPTS_VALUE) retval = frame->pkt_dts; else retval = 0; return retval; } static SCM list_audio_frame_info(struct ffmpeg_t *self, AVFrame *frame) { int channels = av_get_channel_layout_nb_channels(frame->channel_layout); int64_t offsets[AV_NUM_DATA_POINTERS]; offsets_from_pointers(frame->data, offsets, AV_NUM_DATA_POINTERS); int frame_size = av_samples_get_buffer_size(NULL, channels, frame->nb_samples, frame->format, 1); return scm_list_n(scm_from_int(frame->format), scm_list_2(scm_from_int(channels), scm_from_int(frame->nb_samples)), scm_from_int(self->audio_codec_ctx->sample_rate), from_non_zero_array(offsets, AV_NUM_DATA_POINTERS, 1), scm_from_pointer(*frame->data, NULL), scm_from_int(frame_size), SCM_UNDEFINED); } static SCM list_timestamped_audio(struct ffmpeg_t *self, AVFrame *frame) { return scm_list_2(scm_from_locale_symbol("audio"), scm_product(scm_from_int(frame_timestamp(frame)), time_base(audio_stream(self)))); } static SCM decode_audio(struct ffmpeg_t *self, AVPacket *pkt, AVFrame *frame) { int got_frame; int len = avcodec_decode_audio4(self->audio_codec_ctx, frame, &got_frame, pkt); if (len < 0) scm_misc_error("ffmpeg-decode-audio/video", "Error decoding frame: ~a", scm_list_1(get_error_text(len))); consume_packet_data(pkt, FFMIN(pkt->size, len)); return got_frame ? list_timestamped_audio(self, frame) : SCM_BOOL_F; } static SCM list_video_frame_info(struct ffmpeg_t *self, AVFrame *frame) { // note that the pointer offsets can be negative for FFmpeg frames because av_frame_get_buffer // allocates separate memory locations for each image plane. int64_t offsets[AV_NUM_DATA_POINTERS]; offsets_from_pointers(frame->data, offsets, AV_NUM_DATA_POINTERS); int64_t linesize[AV_NUM_DATA_POINTERS]; int_array_to_long(linesize, frame->linesize, AV_NUM_DATA_POINTERS); #ifdef HAVE_IMAGE_BUFFER_SIZE int size = av_image_get_buffer_size(frame->format, frame->width, frame->height, 32); #else int size = avpicture_get_size(frame->format, frame->width, frame->height); #endif return scm_list_n(scm_from_int(frame->format), scm_list_2(scm_from_int(frame->width), scm_from_int(frame->height)), from_non_zero_array(offsets, AV_NUM_DATA_POINTERS, 1), from_non_zero_array(linesize, AV_NUM_DATA_POINTERS, 1), scm_from_pointer(*frame->data, NULL), scm_from_int(size), SCM_UNDEFINED); } static void make_frame_writable(AVFrame *frame) { #ifdef HAVE_AV_FRAME_MAKE_WRITABLE // Make frame writeable int err = av_frame_make_writable(frame); if (err < 0) scm_misc_error("make-frame-writable", "Error making frame writeable: ~a", scm_list_1(get_error_text(err))); #endif } SCM ffmpeg_target_video_frame(SCM scm_self) { struct ffmpeg_t *self = get_self(scm_self); if (!is_input_context(self)) make_frame_writable(self->video_target_frame); return list_video_frame_info(self, self->video_target_frame); } SCM ffmpeg_target_audio_frame(SCM scm_self) { struct ffmpeg_t *self = get_self(scm_self); if (!is_input_context(self)) make_frame_writable(self->audio_target_frame); return list_audio_frame_info(self, self->audio_target_frame); } SCM ffmpeg_packed_audio_frame(SCM scm_self) { struct ffmpeg_t *self = get_self(scm_self); return list_audio_frame_info(self, self->audio_packed_frame); } static SCM list_timestamped_video(struct ffmpeg_t *self, AVFrame *frame) { return scm_list_2(scm_from_locale_symbol("video"), scm_product(scm_from_int(frame_timestamp(frame)), time_base(video_stream(self)))); } static SCM decode_video(struct ffmpeg_t *self, AVPacket *pkt, AVFrame *frame) { int got_frame; int len = avcodec_decode_video2(self->video_codec_ctx, frame, &got_frame, pkt); if (len < 0) scm_misc_error("ffmpeg-decode-audio/video", "Error decoding frame: ~a", scm_list_1(get_error_text(len))); consume_packet_data(pkt, pkt->size); return got_frame ? list_timestamped_video(self, frame) : SCM_BOOL_F; } static int packet_empty(struct ffmpeg_t *self) { return self->pkt.size <= 0; } SCM ffmpeg_channels(SCM scm_self) { return scm_from_int(audio_codec_ctx(get_self(scm_self))->channels); } SCM ffmpeg_rate(SCM scm_self) { return scm_from_int(audio_codec_ctx(get_self(scm_self))->sample_rate); } SCM ffmpeg_typecode(SCM scm_self) { return scm_from_int(audio_codec_ctx(get_self(scm_self))->sample_fmt); } SCM ffmpeg_decode_audio_video(SCM scm_self) { SCM retval = SCM_BOOL_F; struct ffmpeg_t *self = get_self(scm_self); if (!is_input_context(self)) scm_misc_error("ffmpeg-decode-audio/video", "Attempt to read frame from FFmpeg output video", SCM_EOL); while (scm_is_false(retval)) { if (packet_empty(self)) read_packet(self); int reading_cache = packet_empty(self); if (self->pkt.stream_index == self->audio_stream_idx) { av_frame_unref(self->audio_target_frame); retval = decode_audio(self, &self->pkt, self->audio_target_frame); } else if (self->pkt.stream_index == self->video_stream_idx) { av_frame_unref(self->video_target_frame); retval = decode_video(self, &self->pkt, self->video_target_frame); } else consume_packet_data(&self->pkt, self->pkt.size); if (scm_is_false(retval) && reading_cache) break; }; return retval; } SCM ffmpeg_encode_video(SCM scm_self) { // TODO: AVFMT_RAWPICTURE struct ffmpeg_t *self = get_self(scm_self); if (is_input_context(self)) scm_misc_error("ffmpeg-encode-video", "Attempt to write to FFmpeg input video", SCM_EOL); // Set frame timestamp self->video_target_frame->pts = self->output_video_pts++; encode_video(self, self->video_target_frame); return SCM_UNSPECIFIED; } SCM ffmpeg_audio_buffer_fill(SCM scm_self) { struct ffmpeg_t *self = get_self(scm_self); return scm_from_int(self->audio_buffer.fill); } SCM ffmpeg_buffer_audio(SCM scm_self, SCM scm_data, SCM scm_bytes) { struct ffmpeg_t *self = get_self(scm_self); ringbuffer_store(&self->audio_buffer, scm_to_pointer(scm_data), scm_to_int(scm_bytes)); return SCM_UNSPECIFIED; } static void fetch_buffered_audio_data(char *data, int count, int offset, void *userdata) { memcpy((char *)userdata + offset, data, count); } SCM ffmpeg_fetch_audio(SCM scm_self, SCM scm_data, SCM scm_bytes) { struct ffmpeg_t *self = get_self(scm_self); ringbuffer_fetch(&self->audio_buffer, scm_to_int(scm_bytes), fetch_buffered_audio_data, scm_to_pointer(scm_data)); return SCM_UNSPECIFIED; } SCM ffmpeg_encode_audio(SCM scm_self) { struct ffmpeg_t *self = get_self(scm_self); AVCodecContext *codec = audio_codec_ctx(self); AVFrame *audio_frame = self->audio_target_frame; audio_frame->pts = av_rescale_q(self->samples_count, (AVRational){1, codec->sample_rate}, codec->time_base); self->samples_count += audio_frame->nb_samples; encode_audio(self, self->audio_target_frame); return SCM_UNSPECIFIED; } SCM ffmpeg_crop_audio_frame_size(SCM scm_self, SCM scm_size) { struct ffmpeg_t *self = get_self(scm_self); self->audio_target_frame->nb_samples = scm_to_int(scm_size); self->audio_packed_frame->nb_samples = scm_to_int(scm_size); return SCM_UNSPECIFIED; } void init_ffmpeg(void) { av_register_all(); avformat_network_init(); ffmpeg_tag = scm_make_smob_type("ffmpeg", sizeof(struct ffmpeg_t)); scm_set_smob_free(ffmpeg_tag, free_ffmpeg); scm_c_define_gsubr("make-ffmpeg-input" , 2, 0, 0, SCM_FUNC(make_ffmpeg_input )); scm_c_define_gsubr("make-ffmpeg-output" , 7, 0, 0, SCM_FUNC(make_ffmpeg_output )); scm_c_define_gsubr("ffmpeg-have-video?" , 1, 0, 0, SCM_FUNC(ffmpeg_have_video )); scm_c_define_gsubr("ffmpeg-have-audio?" , 1, 0, 0, SCM_FUNC(ffmpeg_have_audio )); scm_c_define_gsubr("ffmpeg-shape" , 1, 0, 0, SCM_FUNC(ffmpeg_shape )); scm_c_define_gsubr("ffmpeg-destroy" , 1, 0, 0, SCM_FUNC(ffmpeg_destroy )); scm_c_define_gsubr("ffmpeg-frame-rate" , 1, 0, 0, SCM_FUNC(ffmpeg_frame_rate )); scm_c_define_gsubr("ffmpeg-video-bit-rate" , 1, 0, 0, SCM_FUNC(ffmpeg_video_bit_rate )); scm_c_define_gsubr("ffmpeg-aspect-ratio" , 1, 0, 0, SCM_FUNC(ffmpeg_aspect_ratio )); scm_c_define_gsubr("ffmpeg-channels" , 1, 0, 0, SCM_FUNC(ffmpeg_channels )); scm_c_define_gsubr("ffmpeg-rate" , 1, 0, 0, SCM_FUNC(ffmpeg_rate )); scm_c_define_gsubr("ffmpeg-typecode" , 1, 0, 0, SCM_FUNC(ffmpeg_typecode )); scm_c_define_gsubr("ffmpeg-decode-audio/video" , 1, 0, 0, SCM_FUNC(ffmpeg_decode_audio_video )); scm_c_define_gsubr("ffmpeg-target-video-frame" , 1, 0, 0, SCM_FUNC(ffmpeg_target_video_frame )); scm_c_define_gsubr("ffmpeg-target-audio-frame" , 1, 0, 0, SCM_FUNC(ffmpeg_target_audio_frame )); scm_c_define_gsubr("ffmpeg-packed-audio-frame" , 1, 0, 0, SCM_FUNC(ffmpeg_packed_audio_frame )); scm_c_define_gsubr("ffmpeg-encode-video" , 1, 0, 0, SCM_FUNC(ffmpeg_encode_video )); scm_c_define_gsubr("ffmpeg-audio-buffer-fill" , 1, 0, 0, SCM_FUNC(ffmpeg_audio_buffer_fill )); scm_c_define_gsubr("ffmpeg-buffer-audio" , 3, 0, 0, SCM_FUNC(ffmpeg_buffer_audio )); scm_c_define_gsubr("ffmpeg-fetch-audio" , 3, 0, 0, SCM_FUNC(ffmpeg_fetch_audio )); scm_c_define_gsubr("ffmpeg-encode-audio" , 1, 0, 0, SCM_FUNC(ffmpeg_encode_audio )); scm_c_define_gsubr("ffmpeg-seek" , 2, 0, 0, SCM_FUNC(ffmpeg_seek )); scm_c_define_gsubr("ffmpeg-flush" , 1, 0, 0, SCM_FUNC(ffmpeg_flush )); scm_c_define_gsubr("ffmpeg-crop-audio-frame-size", 2, 0, 0, SCM_FUNC(ffmpeg_crop_audio_frame_size)); } aiscm-0.15.1/aiscm/image.scm0000644000175000017500000002114613213600050012467 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm image) #:use-module (oop goops) #:use-module (srfi srfi-26) #:use-module (ice-9 optargs) #:use-module (system foreign) #:use-module (aiscm util) #:use-module (aiscm mem) #:use-module (aiscm element) #:use-module (aiscm pointer) #:use-module (aiscm int) #:use-module (aiscm rgb) #:use-module (aiscm sequence) #:use-module (aiscm asm) #:use-module (aiscm jit) #:export ( > get-format convert-image to-image symbol->format format->symbol convert-image-from!) #:re-export (to-array)) (load-extension "libguile-aiscm-image" "init_image") (define-class* > (format #:init-keyword #:format #:getter get-format) (shape #:init-keyword #:shape #:getter shape ) (offsets #:init-keyword #:offsets #:getter offsets ) (pitches #:init-keyword #:pitches #:getter pitches ) (mem #:init-keyword #:mem )) (define-method (initialize (self ) initargs) "Constructor for images" (let-keywords initargs #f (format shape offsets pitches mem) (let* [(pitches (or pitches (default-pitches format (car shape)))) (offsets (or offsets (default-offsets format pitches (cadr shape))))] (next-method self (list #:format format #:shape shape #:offsets offsets #:pitches pitches #:mem mem))))) (define formats (list (cons 'RGB AV_PIX_FMT_RGB24) (cons 'BGR AV_PIX_FMT_BGR24) (cons 'BGRA AV_PIX_FMT_BGRA) (cons 'GRAY AV_PIX_FMT_GRAY8) (cons 'I420 AV_PIX_FMT_YUV420P) (cons 'YV12 AV_PIX_FMT_YUV420P) (cons 'UYVY AV_PIX_FMT_UYVY422) (cons 'YUY2 AV_PIX_FMT_YUYV422) (cons 'MJPG 0))) (define symbols (alist-invert formats)) (define (symbol->format sym) (assq-ref formats sym)) (define (format->symbol fmt) (assq-ref symbols fmt)) (define (image-size format pitches height) (case format ((RGB) (* (car pitches) height)) ((BGR) (* (car pitches) height)) ((BGRA) (* (car pitches) height)) ((GRAY) (* (car pitches) height)) ((I420) (+ (* (car pitches) height) (* 2 (cadr pitches) (ash (+ height 1) -1)))) ((YV12) (+ (* (car pitches) height) (* 2 (cadr pitches) (ash (+ height 1) -1)))) ((UYVY) (* (car pitches) height 2)) ((YUY2) (* (car pitches) height 2)) ((MJPG) (* (car pitches) height 2)))) (define (default-offsets format pitches height) (case format ((RGB) (list 0)) ((BGR) (list 0)) ((BGRA) (list 0)) ((GRAY) (list 0)) ((I420) (list 0 (* (car pitches) height) (+ (* (car pitches) height) (* (cadr pitches) (ash (+ height 1) -1))))) ((YV12) (list 0 (* (car pitches) height) (+ (* (car pitches) height) (* (cadr pitches) (ash (+ height 1) -1))))) ((UYVY) (list 0)) ((YUY2) (list 0)) ((MJPG) (list 0)))) (define (default-pitches format width) (case format ((RGB) (list (* width 3))) ((BGR) (list (* width 3))) ((BGRA) (list (* width 4))) ((GRAY) (list width)) ((I420) (list width (ash (+ width 1) -1) (ash (+ width 1) -1))) ((YV12) (list width (ash (+ width 1) -1) (ash (+ width 1) -1))) ((UYVY) (list (* 2 (logand (+ width 3) (lognot #x3))))) ((YUY2) (list (* 2 (logand (+ width 3) (lognot #x3))))) ((MJPG) (list)))) (define (warp lst indices) (map (cut list-ref lst <>) indices)) (define-method (descriptor (format ) (shape ) (offsets ) (pitches )) (list (symbol->format format) shape (if (eqv? format 'YV12) (warp offsets '(0 2 1)) offsets) (if (eqv? format 'YV12) (warp pitches '(0 2 1)) pitches))) (define-method (descriptor (self )) (descriptor (get-format self) (shape self) (offsets self) (pitches self))) (define (memalign size alignment) (let* [(offset (1- alignment)) (extended-size (+ size offset)) (mem (make #:size extended-size #:pointerless #t)) (base (get-memory mem)) (memory (make-pointer (logand (+ (pointer-address base) offset) (lognot offset))))] (make #:memory memory #:base base #:size size))) (define-method (convert-image-from! (self ) (source )) "Convert image and write it to the specified target location" (let [(dest-type (descriptor self)) (source-type (descriptor source))] (if (eq? (get-format source) 'MJPG) (if (and (memv (get-format self) '(YV12 I420)) (equal? (shape self) (shape source)) (equal? (pitches self) (default-pitches 'YV12 (car (shape self))))) (mjpeg-to-yuv420p (get-memory (slot-ref source 'mem)) (shape self) (get-memory (slot-ref self 'mem)) (offsets self)) (convert-image-from! self (convert-image source 'YV12))) (image-convert (get-memory (slot-ref source 'mem)) source-type (get-memory (slot-ref self 'mem)) dest-type)) self)) (define-method (convert-image (self ) (fmt ) (shape ) (offsets ) (pitches )) "Convert image using the specified attributes" (let* [(dest-size (image-size fmt pitches (cadr shape))) (destination (make #:format fmt #:shape shape #:mem (memalign dest-size 16) #:offsets offsets #:pitches pitches))] (convert-image-from! destination self))) (define-method (convert-image (self ) (format ) (shape )) (let* [(pitches (default-pitches format (car shape))) (offsets (default-offsets format pitches (cadr shape)))] (convert-image self format shape offsets pitches))) (define-method (convert-image (self ) (format )) (convert-image self format (shape self))) (define-method (duplicate (self )) (convert-image self (get-format self))) (define-method (write (self ) port) (format port "#< ~a ~a>" (get-format self) (shape self))) (define-method (to-array (self )) (case (get-format self) ((GRAY) (let* [(shape (shape self)) (pitches (pitches self)) (size (image-size 'GRAY pitches (cadr shape))) (mem (slot-ref self 'mem))] (make (multiarray 2) #:value mem #:shape shape #:strides (cons 1 pitches)))) ((RGB) (let* [(shape (shape self)) (pitches (pitches self)) (size (image-size 'BGR pitches (cadr shape))) (mem (slot-ref self 'mem))] (make (multiarray 2) #:value mem #:shape shape #:strides (list 1 (/ (car pitches) 3))))) (else (to-array (convert-image self 'RGB))))) (define-method (to-image (self )) self) (define-method (to-image (self >)) (cond ((equal? (typecode self)) (if (= (car (strides self)) 1) (make #:format 'GRAY #:shape (shape self) #:mem (value self) #:offsets '(0) #:pitches (list (cadr (strides self)))) (to-image (duplicate self)))) ((is-a? (typecode self) >>) (to-image (to-type self))) ((equal? (typecode self)) (if (= (car (strides self)) 1) (make #:format 'RGB #:shape (shape self) #:mem (value self) #:offsets '(0) #:pitches (list (* 3 (cadr (strides self))))) (to-image (duplicate self)))) (else (to-image (to-type self))))) aiscm-0.15.1/aiscm/element.scm0000644000175000017500000000543513213600050013041 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm element) #:use-module (oop goops) #:use-module (aiscm util) #:use-module (system foreign) #:export ( > value get set size-of foreign-type pack unpack channels rate typecode size shape strides dimensions coerce native-type wrap get-size build content unbuild component base to-type duplicate read-image read-audio write-image write-audio pointerless?)) (define-class* > (value #:init-keyword #:value #:getter value)) (define-method (size-of (self )) (size-of (class-of self))) (define-method (foreign-type (t )) void) (define-generic pack) (define-generic unpack) (define-generic channels) (define-generic rate) (define-method (equal? (a ) (b )) (equal? (get a) (get b))) (define-method (size (self )) 1) (define-method (shape self) '()) (define-method (strides self) '()) (define-method (dimensions (self >)) 0) (define-method (dimensions (self )) (dimensions (class-of self))) (define-method (typecode (self >)) self) (define-method (typecode (self )) (typecode (class-of self))) (define-method (get (self )) (value self)) (define-method (set (self ) value) (slot-set! self 'value value) value) (define-generic slice) (define-generic coerce) (define-generic native-type) (define-method (wrap self) (make (native-type self) #:value self)) (define-method (wrap (self )) self) (define-generic get-size) (define-method (build self value) (car value)) (define-method (content (type >) self) (list self)) (define-method (unbuild (type >) self) (list self)) (define-method (component type self offset) self) (define-method (base self) self) (define-generic to-type) (define-generic duplicate) (define-generic read-image) (define-generic read-audio) (define-generic write-image) (define-generic write-audio) (define-method (pointerless? self) #t) aiscm-0.15.1/aiscm/pulse.scm0000644000175000017500000001057613213600050012542 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm pulse) #:use-module (oop goops) #:use-module (ice-9 optargs) #:use-module (aiscm mem) #:use-module (aiscm element) #:use-module (aiscm int) #:use-module (aiscm float) #:use-module (aiscm sequence) #:use-module (aiscm samples) #:use-module (aiscm jit) #:use-module (aiscm util) #:export ( > > > PA_SAMPLE_U8 PA_SAMPLE_S16LE PA_SAMPLE_S32LE PA_SAMPLE_FLOAT32LE type->pulse-type pulse-type->type flush drain latency) #:re-export (destroy read-audio write-audio channels rate typecode)) (load-extension "libguile-aiscm-pulse" "init_pulse") (define-class* > (pulsedev #:init-keyword #:pulsedev ) (channels #:init-keyword #:channels #:getter channels) (rate #:init-keyword #:rate #:getter rate ) (typecode #:init-keyword #:typecode #:getter typecode)) (define-method (initialize (self ) initargs) (let-keywords initargs #f (device typecode channels rate latency playback) (let* [(pulse-type (type->pulse-type (or typecode ))) (channels (or channels 2)) (rate (or rate 44100)) (latency (or latency 0.2)) (pulsedev (make-pulsedev device pulse-type playback channels rate latency))] (next-method self (list #:pulsedev pulsedev #:channels channels #:rate rate #:typecode typecode))))) (define-class* > >) (define-method (initialize (self ) initargs) (next-method self (append initargs (list #:playback #t)))) (define-class* > >) (define-method (initialize (self ) initargs) (next-method self (append initargs (list #:playback #f)))) (define typemap (list (cons PA_SAMPLE_U8) (cons PA_SAMPLE_S16LE) (cons PA_SAMPLE_S32LE) (cons PA_SAMPLE_FLOAT32LE))) (define inverse-typemap (alist-invert typemap)) (define (type->pulse-type type) "convert type class to Pulse audio type tag" (or (assq-ref typemap type) (aiscm-error 'type->pulse-type "Type ~a not supported by Pulse audio" type))) (define (pulse-type->type pulse-type) "convert Pulse audio type tag to type class" (assq-ref inverse-typemap pulse-type)) (define-method (destroy (self )) (pulsedev-destroy (slot-ref self 'pulsedev))) (define-method (write-audio (samples >) (self )); TODO: check type (pulsedev-write (slot-ref self 'pulsedev) (get-memory (value (ensure-default-strides samples))) (size-of samples)) samples) (define-method (write-audio (samples ) (self )); TODO: check type (write-audio (to-array samples) self) samples) (define-method (write-audio (samples ) (self )) (let [(result (samples))] (while result (write-audio result self) (set! result (samples))))) (define-method (read-audio (self ) (count )) (let* [(size (* count (channels self) (size-of (typecode self)))) (samples (pulsedev-read (slot-ref self 'pulsedev) size)) (memory (make #:base samples #:size size #:pointerless #t))] (make (multiarray (typecode self) 2) #:shape (list (channels self) count) #:value memory))) (define (flush self) (pulsedev-flush (slot-ref self 'pulsedev))) (define (drain self) (pulsedev-drain (slot-ref self 'pulsedev))) (define (latency self) (pulsedev-latency (slot-ref self 'pulsedev))) aiscm-0.15.1/aiscm/util-helpers.c0000644000175000017500000000403513213600050013460 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" void scm_to_int_array(SCM source, int32_t dest[]) { if (!scm_is_null_and_not_nil(source)) { *dest = scm_to_int(scm_car(source)); scm_to_int_array(scm_cdr(source), dest + 1); }; } void scm_to_long_array(SCM source, int64_t dest[]) { if (!scm_is_null_and_not_nil(source)) { *dest = scm_to_long(scm_car(source)); scm_to_long_array(scm_cdr(source), dest + 1); }; } static SCM do_function_call(void *data) { SCM *args = (SCM *)data; return scm_call_1(args[0], args[1]); } struct cleanup_t { SCM scm_object; SCM (*cleanup_method)(SCM); }; static SCM do_clean_up(void *data, SCM tag, SCM throw_args) { struct cleanup_t *args = (struct cleanup_t *)data; SCM scm_object = args->scm_object; SCM (*cleanup_method)(SCM) = args->cleanup_method; (*cleanup_method)(scm_object); scm_throw(tag, throw_args); return SCM_UNDEFINED; } SCM clean_up_on_failure(SCM scm_object, SCM (*cleanup_method)(SCM), SCM scm_fun, SCM scm_arg) { SCM body_data[2]; body_data[0] = scm_fun; body_data[1] = scm_arg; struct cleanup_t handler_data; handler_data.scm_object = scm_object; handler_data.cleanup_method = cleanup_method; return scm_c_catch(SCM_BOOL_T, do_function_call, &body_data, do_clean_up, &handler_data, NULL, NULL); } aiscm-0.15.1/aiscm/util-helpers.h0000644000175000017500000000206013213600050013461 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #pragma once #include #define SCM_FUNC(ptr) ((void *)(size_t)ptr) void scm_to_int_array(SCM source, int32_t dest[]); void scm_to_long_array(SCM source, int64_t dest[]); SCM clean_up_on_failure(SCM scm_object, SCM (*cleanup_method)(SCM), SCM scm_fun, SCM scm_arg); aiscm-0.15.1/aiscm/program.scm0000644000175000017500000000610513213600050013052 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm program) #:use-module (oop goops) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (aiscm util) #:use-module (aiscm element) #:use-module (aiscm util) #:use-module (aiscm asm) #:use-module (aiscm variable) #:use-module (aiscm command) #:export (labels substitute-variables relabel flatten-code inputs outputs)) (define (inputs self results) "Get input variables of each statement" (map-if (cut equal? (RET) <>) (const results) input self)) (define (outputs self) "Get output variables of each statement" (map output self)) (define (labels prog) "Get positions of labels in program" (filter (compose symbol? car) (map cons prog (iota (length prog))))) (define-method (substitute-variables self alist) self) (define-method (substitute-variables (self ) alist) "replace variable with associated value if there is one" (let [(target (assq-ref alist self))] (if (or (is-a? target ) (is-a? target
)) (to-type (typecode self) target) (or target self)))) (define-method (substitute-variables (self ) alist) (let [(target (substitute-variables (car (get-args self)) alist))] (if (is-a? target ) (ptr (typecode self) (car target) (+ (cadr (get-args self)) (cdr target))) (apply ptr (typecode self) target (cdr (get-args self)))))) (define-method (substitute-variables (self ) alist) (apply (get-op self) (map (cut substitute-variables <> alist) (get-args self)))) (define-method (substitute-variables (self ) alist) (map (cut substitute-variables <> alist) self)) (define (relabel prog) "Use distinct name for each label" (let* [(labels (filter symbol? prog)) (replacements (map (compose gensym symbol->string) labels)) (translations (map cons labels replacements))] (map (lambda (x) (cond ((symbol? x) (assq-ref translations x)) ((is-a? x ) (retarget x (assq-ref translations (get-target x)))) ((list? x) (relabel x)) (else x))) prog))) (define (flatten-code prog) "Remove nested lists used for separating namespaces" (let [(instruction? (lambda (x) (and (list? x) (not (every integer? x)))))] (concatenate (map-if instruction? flatten-code list prog)))) aiscm-0.15.1/aiscm/complex.scm0000644000175000017500000002162013213600050013051 00000000000000;; AIscm - Guile extension for numerical arrays and tensors. ;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General 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-module (aiscm complex) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (oop goops) #:use-module (aiscm element) #:use-module (aiscm composite) #:use-module (aiscm int) #:use-module (aiscm pointer) #:use-module (aiscm sequence) #:use-module (aiscm asm) #:use-module (aiscm variable) #:use-module (aiscm command) #:use-module (aiscm expression) #:use-module (aiscm operation) #:use-module (aiscm jit) #:use-module (aiscm util) #:export ( > >> >> >>> complex coerce-complex) #:re-export (> >> real-part imag-part to-type conj - + * / += *= max= min= where)) (define ctx (make )) (define-method (conj self) self) (define-method (conj (self )) (make-rectangular (real-part self) (- (imag-part self)))) (define-class () (real #:init-keyword #:real-part #:getter real-part) (imag #:init-keyword #:imag-part #:getter imag-part)) (define-method (complex re im) (make #:real-part re #:imag-part im)) (define-method (write (self ) port) (format port "(complex ~a ~a)" (real-part self) (imag-part self))) (define-class* > >> >) (define-method (complex (t >)) (template-class (complex t) > (lambda (class metaclass) (define-method (base (self metaclass))t) (define-method (size-of (self metaclass)) (* 2 (size-of t)))))) (define-method (components (self >>)) (list real-part imag-part)) (define-method (complex (t >>)) (multiarray (complex (typecode t)) (dimensions t))) (define-method (coerce-complex (re >) (im >)) (complex (coerce re im))) (define-method (complex (re >) (im >)) (lambda (out a b) (append-map duplicate (content > out) (list a b)))) (define-method (real-part (self >)) self); TODO: use a number type (define-method (imag-part (self >)) 0) (define-method (real-part (self >)) (make (base (class-of self)) #:value (real-part (get self)))) (define-method (imag-part (self >)) (make (base (class-of self)) #:value (imag-part (get self)))) (define-method (pack (self >)) (bytevector-concat (map pack (content (class-of self) self)))) (define-method (unpack (self >>) (packed )) (let* [(size (size-of (base self))) (vectors (map (cut bytevector-sub packed <> size) (map (cut * size <>) (iota 2))))] (make self #:value (apply make-rectangular (map (lambda (vec) (get (unpack (base self) vec))) vectors))))) (define-method (coerce (a >>) (b >)) (complex (coerce (base a) b))) (define-method (coerce (a >) (b >>)) (complex (coerce a (base b)))) (define-method (coerce (a >>) (b >>)) (complex (coerce (base a) (base b)))) (define-method (coerce (a >>) (b >>)) (multiarray (coerce a (typecode b)) (dimensions b))) (define-method (native-type (c ) . args) (complex (apply native-type (concatenate (map-if (cut is-a? <> ) (lambda (v) (map inexact->exact (deconstruct > v))) list (cons c args)))))) (define-method (build (self >>) value) (apply make-rectangular value)) (define-method (unbuild (type >>) self) (append-map (cut unbuild (base type) <>) (map inexact->exact (deconstruct type self)))) (define-method (content (type >>) (self >)) (append-map (cut content (base type) <>) (deconstruct type self))) (define-method (content (type >>) (self )) (append-map (cut content (base type) <>) (deconstruct type self))) (define-method (base (self >>)) (multiarray (base (typecode self)) (dimensions self))) (define-syntax-rule (unary-complex-op op) (define-method (op (a )) (apply complex (map op (content > a))))) (unary-complex-op -) (define-method (+= (a ) (b )) (append-map += (content > a) (content > b))) (define-method (*= (a ) (b )) (let [(intermediate (parameter (complex (type (real-part a)))))] (append (append-map duplicate (content > intermediate) (content > (* a b))) (append-map duplicate (content > a) (content > intermediate))))) (define-method (max= (a ) (b )) (append-map max= (content > a) (content > b))) (define-method (min= (a ) (b )) (append-map min= (content > a) (content > b))) (define-syntax-rule (binary-complex-op op) (begin (define-method (op (a ) b) (complex (op (real-part a) b) (imag-part a))) (define-method (op a (b )) (complex (op a (real-part b)) (imag-part b))) (define-method (op (a ) (b )) (apply complex (map op (content > a) (content > b)))))) (define-method (conj (self >)) self) (define-method (conj (self >>)) self) (define-method (conj (a )) (complex (real-part a) (- (imag-part a)))) (binary-complex-op +) (binary-complex-op -) (define-method (* (a ) b) (apply complex (map (cut * <> b) (content > a)))) (define-method (* a (b )) (apply complex (map (cut * a <>) (content > b)))) (define-method (* (a ) (b )) (complex (- (* (real-part a) (real-part b)) (* (imag-part a) (imag-part b))) (+ (* (real-part a) (imag-part b)) (* (imag-part a) (real-part b))))) (define-method (/ (a ) b) (apply complex (map (cut / <> b) (content > a)))) (define (arg2 b) (apply + (map * (content > b) (content > b)))) (define-method (/ a (b )) (let [(denom (arg2 b))] (complex (/ (* a (real-part b)) denom) (- (/ (* a (imag-part b)) denom))))) (define-method (/ (a ) (b )) (let [(denom (arg2 b))] (complex (/ (+ (* (real-part a) (real-part b)) (* (imag-part a) (imag-part b))) denom) (/ (- (* (imag-part a) (real-part b)) (* (real-part a) (imag-part b))) denom)))) (define-method (where (m ) (a ) (b )) (apply complex (map (cut where m <...>) (content > a) (content > b)))) (define-method (where (m ) (a ) b ) (apply complex (map (cut where m <...>) (content > a) (list b (native-const (type b) 0))))) (define-method (where (m ) a (b )) (apply complex (map (cut where m <...>) (list a (native-const (type a) 0)) (content > b)))) (define-method (var (self >>)) (let [(type (base self))] (complex (var type) (var type)))); TODO: test (pointer >) (define-method (real-part (self >)) self) (define-method (imag-part (self >)) 0) (define-method (real-part (self >>)) (component (typecode self) self 0)) (define-method (imag-part (self >>)) (component (typecode self) self 1)) (define-operator-mapping real-part (>) (unary-extract real-part)) (define-operator-mapping imag-part (>) (unary-extract imag-part)) (define-operator-mapping conj (>) (unary-extract conj )) (define-jit-method base real-part 1) (define-jit-method base imag-part 1) (define-jit-method identity conj 1) (define-jit-method coerce-complex complex 2) (define-method (decompose-value (target >>) x) (make #:real-part (parameter (real-part (delegate x))) #:imag-part (parameter (imag-part (delegate x))))) (define-method (to-type (target >>) (self )) (apply complex (map (cut to-type (base target) <>) (content > self)))) aiscm-0.15.1/aiscm/obj.c0000644000175000017500000000376413213600050011625 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 SCM obj_negate(SCM x) { return scm_difference(x, SCM_UNDEFINED); } unsigned char obj_zero_p(SCM x) { return scm_is_true(scm_zero_p(x)); } unsigned char obj_nonzero_p(SCM x) { return scm_is_false(scm_zero_p(x)); } unsigned char obj_not(SCM x) { return scm_is_true(scm_not(x)); } SCM obj_and(SCM a, SCM b) { return scm_is_true(a) ? b : a; } SCM obj_or(SCM a, SCM b) { return scm_is_true(a) ? a : b; } SCM obj_shr(SCM x, SCM y) { return scm_ash(x, obj_negate(y)); } SCM obj_shl1(SCM x) { return scm_ash(x, scm_from_int(1)); } SCM obj_shr1(SCM x) { return scm_ash(x, scm_from_int(-1)); } char obj_equal_p(SCM x, SCM y) { return scm_is_true(scm_equal_p(x, y)); } char obj_nequal_p(SCM x, SCM y) { return scm_is_false(scm_equal_p(x, y)); } char obj_less_p(SCM x, SCM y) { return scm_is_true(scm_less_p(x, y)); } char obj_leq_p(SCM x, SCM y) { return scm_is_true(scm_leq_p(x, y)); } char obj_gr_p(SCM x, SCM y) { return scm_is_true(scm_gr_p(x, y)); } char obj_geq_p(SCM x, SCM y) { return scm_is_true(scm_geq_p(x, y)); } SCM obj_where(SCM m, SCM a, SCM b) { return scm_is_true(m) ? a : b; } SCM obj_from_bool(unsigned char x) { return scm_from_bool(x); } void init_obj(void) { } aiscm-0.15.1/aiscm/v4l2.c0000644000175000017500000003274313213600050011641 00000000000000// AIscm - Guile extension for numerical arrays and tensors. // Copyright (C) 2013, 2014, 2015, 2016, 2017 Jan Wedekind // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General 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 "util-helpers.h" static scm_t_bits videodev2_tag; struct videodev2_t { int fd; enum {IO_READ, IO_MMAP, IO_USERPTR} io; struct v4l2_format format; struct v4l2_requestbuffers req; struct v4l2_buffer buf[2]; void *map[2]; void *user[2]; struct v4l2_buffer frame; char frame_used; char capture; }; static int xioctl(int fd, unsigned long int request, void *arg) { int r; do { r = ioctl(fd, request, arg); } while (r == -1 && errno == EINTR); return r; } static struct videodev2_t *get_self_no_check(SCM scm_self) { return (struct videodev2_t *)SCM_SMOB_DATA(scm_self); } static struct videodev2_t *get_self(SCM scm_self) { scm_assert_smob_type(videodev2_tag, scm_self); return get_self_no_check(scm_self); } SCM videodev2_destroy(SCM scm_self) { int i; struct videodev2_t *self = get_self_no_check(scm_self); if (self->capture) { enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; xioctl(self->fd, VIDIOC_STREAMOFF, &type); self->capture = 0; }; for (i=0; i<2; i++) if (self->map[i] != MAP_FAILED) { munmap(self->map[i], self->buf[i].length); self->map[i] = MAP_FAILED; }; if (self->fd != -1) { close(self->fd); self->fd = -1; }; return SCM_UNSPECIFIED; } size_t free_videodev2(SCM scm_self) { struct videodev2_t *self = get_self_no_check(scm_self); videodev2_destroy(scm_self); scm_gc_free(self, sizeof(struct videodev2_t), "videodev2"); return 0; } SCM make_videodev2(SCM scm_name, SCM scm_channel, SCM scm_select) { SCM retval; struct videodev2_t *self; struct stat st; int i; const char *name = scm_to_locale_string(scm_name); if (stat(name, &st)) scm_misc_error("make-videodev2", "Error getting file status of '~a': ~a", scm_list_2(scm_name, scm_from_locale_string(strerror(errno)))); if (!S_ISCHR(st.st_mode)) scm_misc_error("make-videodev2", "'~a' is not a device", scm_list_1(scm_name)); self = (struct videodev2_t *)scm_gc_calloc(sizeof(struct videodev2_t), "v4l2"); SCM_NEWSMOB(retval, videodev2_tag, self); self->fd = -1; self->map[0] = MAP_FAILED; self->map[1] = MAP_FAILED; self->fd = open(name, O_RDWR, 0); if (self->fd == -1) scm_misc_error("make-videodev2", "Error opening file '~a': ~a", scm_list_2(scm_name, scm_from_locale_string(strerror(errno)))); struct v4l2_capability cap; if (xioctl(self->fd, VIDIOC_QUERYCAP, &cap)) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error querying capabilities of device '~a'", scm_list_1(scm_name)); }; if (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE == 0) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "'~a' is not a video capture device", scm_list_1(scm_name)); }; int c = scm_to_int(scm_channel); if (xioctl(self->fd, VIDIOC_S_INPUT, &c)) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error selecting channel ~a for device '~a'", scm_list_2(scm_channel, scm_name)); }; SCM scm_selection = SCM_EOL; int format_index = 0; while (1) { struct v4l2_fmtdesc format; memset(&format, 0, sizeof(format)); format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; format.index = format_index++; if (xioctl(self->fd, VIDIOC_ENUM_FMT, &format)) break; int size_index = 0; while (1) { struct v4l2_frmsizeenum pix; memset(&pix, 0, sizeof(pix)); pix.pixel_format = format.pixelformat; pix.index = size_index++; if (xioctl(self->fd, VIDIOC_ENUM_FRAMESIZES, &pix)) break; if (pix.type == V4L2_FRMSIZE_TYPE_DISCRETE) { SCM scm_fmt = scm_list_3(scm_from_int(format.pixelformat), scm_from_int(pix.discrete.width), scm_from_int(pix.discrete.height)); scm_selection = scm_cons(scm_fmt, scm_selection); } else if (pix.type == V4L2_FRMSIZE_TYPE_STEPWISE) { unsigned int w = pix.stepwise.min_width, h = pix.stepwise.min_height; while (w <= pix.stepwise.max_width && h <= pix.stepwise.max_height) { SCM scm_fmt = scm_list_3(scm_from_int(format.pixelformat), scm_from_int(w), scm_from_int(h)); scm_selection = scm_cons(scm_fmt, scm_selection); w += pix.stepwise.step_width; h += pix.stepwise.step_height; }; } else { SCM scm_fmt = scm_list_3(scm_from_int(format.pixelformat), scm_from_int(pix.stepwise.max_width), scm_from_int(pix.stepwise.max_height)); scm_selection = scm_cons(scm_fmt, scm_selection); }; }; } SCM scm_selected = clean_up_on_failure(retval, videodev2_destroy, scm_select, scm_selection); self->format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; self->format.fmt.pix.pixelformat = scm_to_int(scm_car(scm_selected)); self->format.fmt.pix.width = scm_to_int(scm_cadr(scm_selected)); self->format.fmt.pix.height = scm_to_int(scm_caddr(scm_selected)); self->format.fmt.pix.field = V4L2_FIELD_ANY; if (xioctl(self->fd, VIDIOC_S_FMT, &self->format)) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error switching device '~a' to selected format", scm_list_1(scm_name)); }; if (cap.capabilities & V4L2_CAP_STREAMING) { self->req.count = 2; self->req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; self->req.memory = V4L2_MEMORY_MMAP; if (xioctl(self->fd, VIDIOC_REQBUFS, &self->req)) { self->req.memory = V4L2_MEMORY_USERPTR; if (xioctl(self->fd, VIDIOC_REQBUFS, &self->req)) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Failed to set up memory mapped and user pointer I/O for device '~a'", scm_list_1(scm_name)); }; int page_size = getpagesize(); int buffer_size = (self->format.fmt.pix.sizeimage + page_size - 1) & ~(page_size - 1); self->user[0] = memalign(page_size, buffer_size); self->user[1] = memalign(page_size, buffer_size); if (self->user[0] == NULL || self->user[1] == NULL) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Could not allocate memory for user pointer I/O for device '~a'", scm_list_1(scm_name)); }; for (i=0; i<2; i++) { self->buf[i].type = V4L2_BUF_TYPE_VIDEO_CAPTURE; self->buf[i].memory = V4L2_MEMORY_USERPTR; self->buf[i].index = i; self->buf[i].m.userptr = (unsigned long)self->user[i]; self->buf[i].length = buffer_size; }; for (i=0; i<2; i++) { if (xioctl(self->fd, VIDIOC_QBUF, &self->buf[i])) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error enqueuing user memory buffer ~a for device '~a'", scm_list_2(scm_from_int(i), scm_name)); }; }; enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (xioctl(self->fd, VIDIOC_STREAMON, &type)) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error starting user pointer capture process for device '~a'", scm_list_1(scm_name)); }; self->capture = 1; self->io = IO_USERPTR; } else { if (self->req.count < 2) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Insufficient buffer memory on device '~a'", scm_list_1(scm_name)); }; for (i=0; i<2; i++) { self->buf[i].type = V4L2_BUF_TYPE_VIDEO_CAPTURE; self->buf[i].memory = V4L2_MEMORY_MMAP; self->buf[i].index = i; if (xioctl(self->fd, VIDIOC_QUERYBUF, &self->buf[i])) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error querying buffer ~a for device '~a'", scm_list_2(scm_from_int(i), scm_name)); }; self->map[i] = mmap(NULL, self->buf[i].length, PROT_READ | PROT_WRITE, MAP_SHARED, self->fd, self->buf[i].m.offset); if (self->map[i] == MAP_FAILED) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error mapping capture buffer ~a for device '~a'", scm_list_2(scm_from_int(i), scm_name)); }; } for (i=0; i<2; i++) { if (xioctl(self->fd, VIDIOC_QBUF, &self->buf[i])) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error enqueuing buffer ~a for device '~a'", scm_list_2(scm_from_int(i), scm_name)); }; }; enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (xioctl(self->fd, VIDIOC_STREAMON, &type)) { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Error starting memory-mapped capture process for device '~a'", scm_list_1(scm_name)); }; self->capture = 1; self->io = IO_MMAP; }; } else if (cap.capabilities & V4L2_CAP_STREAMING) { self->io = IO_READ; } else { videodev2_destroy(retval); scm_misc_error("make-videodev2", "Device '~a' neither supports streaming nor reading from device", scm_list_1(scm_name)); }; return retval; } SCM videodev2_shape(SCM scm_self) { struct videodev2_t *self = get_self(scm_self); if (self->fd <= 0) scm_misc_error("videodev2-read-image", "Device is not open. Did you call 'destroy' before?", SCM_EOL); int width = self->format.fmt.pix.width; int height = self->format.fmt.pix.height; return scm_list_2(scm_from_int(width), scm_from_int(height)); } static SCM read_image_io_read(struct videodev2_t *self, int width, int height) { int size = self->format.fmt.pix.sizeimage; void *buf = scm_gc_malloc_pointerless(size, "aiscm v4l2 frame"); if (read(self->fd, buf, size) == -1) scm_misc_error("videodev2-read-image", "Error reading from device: ~a", scm_list_1(scm_from_locale_string(strerror(errno)))); return scm_list_4(scm_from_int(self->format.fmt.pix.pixelformat), scm_list_2(scm_from_int(width), scm_from_int(height)), scm_from_pointer(buf, NULL), scm_from_int(size)); } static SCM read_image_io_mmap_userptr(struct videodev2_t *self, int width, int height) { if (self->frame_used) { if (xioctl(self->fd, VIDIOC_QBUF, &self->frame)) scm_misc_error("videodev2-read-image", "Error queueing video buffer: ~a", scm_list_1(scm_from_locale_string(strerror(errno)))); self->frame_used = 0; }; memset(&self->frame, 0, sizeof(struct v4l2_buffer)); self->frame.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; self->frame.memory = self->io == IO_MMAP ? V4L2_MEMORY_MMAP : V4L2_MEMORY_USERPTR; if (xioctl(self->fd, VIDIOC_DQBUF, &self->frame)) scm_misc_error("videodev2-read-image", "Error dequeueing video buffer: ~a", scm_list_1(scm_from_locale_string(strerror(errno)))); self->frame_used = 1; void *p = self->io == IO_MMAP ? self->map[self->frame.index] : self->user[self->frame.index]; return scm_list_4(scm_from_int(self->format.fmt.pix.pixelformat), scm_list_2(scm_from_int(width), scm_from_int(height)), scm_from_pointer(p, NULL), scm_from_int(self->format.fmt.pix.sizeimage)); } SCM videodev2_read_image(SCM scm_self) { struct videodev2_t *self = get_self(scm_self); if (self->fd <= 0) scm_misc_error("videodev2-read-image", "Device is not open. Did you call 'destroy' before?", SCM_EOL); int width = self->format.fmt.pix.width; int height = self->format.fmt.pix.height; return self->io == IO_READ ? read_image_io_read(self, width, height) : read_image_io_mmap_userptr(self, width, height); } void init_v4l2(void) { videodev2_tag = scm_make_smob_type("videodev2", sizeof(struct videodev2_t)); scm_set_smob_free(videodev2_tag, free_videodev2); scm_c_define("V4L2_PIX_FMT_RGB24" ,scm_from_int(V4L2_PIX_FMT_RGB24)); scm_c_define("V4L2_PIX_FMT_BGR24" ,scm_from_int(V4L2_PIX_FMT_BGR24)); scm_c_define("V4L2_PIX_FMT_GREY" ,scm_from_int(V4L2_PIX_FMT_GREY)); scm_c_define("V4L2_PIX_FMT_YUV420",scm_from_int(V4L2_PIX_FMT_YUV420)); scm_c_define("V4L2_PIX_FMT_UYVY" ,scm_from_int(V4L2_PIX_FMT_UYVY)); scm_c_define("V4L2_PIX_FMT_YUYV" ,scm_from_int(V4L2_PIX_FMT_YUYV)); scm_c_define("V4L2_PIX_FMT_MJPEG" ,scm_from_int(V4L2_PIX_FMT_MJPEG)); scm_c_define_gsubr("make-videodev2" , 3, 0, 0, SCM_FUNC(make_videodev2 )); scm_c_define_gsubr("videodev2-destroy" , 1, 0, 0, SCM_FUNC(videodev2_destroy )); scm_c_define_gsubr("videodev2-shape" , 1, 0, 0, SCM_FUNC(videodev2_shape )); scm_c_define_gsubr("videodev2-read-image", 1, 0, 0, SCM_FUNC(videodev2_read_image)); } aiscm-0.15.1/Makefile.in0000644000175000017500000007005413220460252011662 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_opengl.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/guile.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__extra_recursive_targets = bench-recursive recheck-recursive \ integration-recursive reintegration-recursive 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 = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.rpath \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/ltmain.sh \ $(top_srcdir)/build-aux/missing \ $(top_srcdir)/build-aux/test-driver.scm AUTHORS COPYING \ ChangeLog NEWS README build-aux/compile build-aux/config.guess \ build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" 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 ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVCODEC_CFLAGS = @AVCODEC_CFLAGS@ AVCODEC_LIBS = @AVCODEC_LIBS@ AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@ AVFORMAT_LIBS = @AVFORMAT_LIBS@ AVRESAMPLE_CFLAGS = @AVRESAMPLE_CFLAGS@ AVRESAMPLE_LIBS = @AVRESAMPLE_LIBS@ AVUTIL_CFLAGS = @AVUTIL_CFLAGS@ AVUTIL_LIBS = @AVUTIL_LIBS@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ GUILE = @GUILE@ GUILE_CACHE = @GUILE_CACHE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_EFFECTIVE_VERSION = @GUILE_EFFECTIVE_VERSION@ GUILE_EXT = @GUILE_EXT@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ GUILE_LIBS = @GUILE_LIBS@ GUILE_LTLIBS = @GUILE_LTLIBS@ GUILE_SITE = @GUILE_SITE@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAGICK_CFLAGS = @MAGICK_CFLAGS@ MAGICK_LIBS = @MAGICK_LIBS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MJPEG_CFLAGS = @MJPEG_CFLAGS@ MJPEG_LIBS = @MJPEG_LIBS@ MKDIR_P = @MKDIR_P@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWRESAMPLE_CFLAGS = @SWRESAMPLE_CFLAGS@ SWRESAMPLE_LIBS = @SWRESAMPLE_LIBS@ SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ SWSCALE_LIBS = @SWSCALE_LIBS@ TOUCH = @TOUCH@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/aiscm/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 RUN = $(GUILE) -L $(top_builddir) -L $(top_builddir)/tests SUBDIRS = aiscm tests doc bench srfi ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = bootstrap configure.ac README README.md TODO.md COPYING NEWS NEWS.md ChangeLog AUTHORS CLEANFILES = *~ *.html MAINTAINERCLEANFILES = aclocal.m4 configure ChangeLog Makefile.in mkinstalldirs \ stamp-h.in libtool config.cache config.h config.h.in acinclude.m4 \ m4/libtool.m4 m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 \ build-aux/compile build-aux/config.* build-aux/depcomp build-aux/install-sh build-aux/ltmain.sh build-aux/missing all: 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) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(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 # 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" bench-local: recheck-local: integration-local: reintegration-local: ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) bench: bench-recursive bench-am: bench-local 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-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: integration: integration-recursive integration-am: integration-local 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 \ maintainer-clean-local mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: recheck: recheck-recursive recheck-am: recheck-local reintegration: reintegration-recursive reintegration-am: reintegration-local uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh bench-am bench-local check check-am clean \ clean-cscope clean-generic clean-libtool cscope cscopelist-am \ ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ integration-am integration-local maintainer-clean \ maintainer-clean-generic maintainer-clean-local mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck-am recheck-local reintegration-am reintegration-local \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile repl: $(ENVIRONMENT) GC_INITIAL_HEAP_SIZE=1G GC_USE_ENTIRE_HEAP=Y DEBUG=YES $(RUN) maintainer-clean-local: rm -Rf pkg # 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: aiscm-0.15.1/Makefile.am0000644000175000017500000000145713213600050011644 00000000000000ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/aiscm/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 RUN = $(GUILE) -L $(top_builddir) -L $(top_builddir)/tests SUBDIRS = aiscm tests doc bench srfi ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = bootstrap configure.ac README README.md TODO.md COPYING NEWS NEWS.md ChangeLog AUTHORS repl: $(ENVIRONMENT) GC_INITIAL_HEAP_SIZE=1G GC_USE_ENTIRE_HEAP=Y DEBUG=YES $(RUN) CLEANFILES = *~ *.html MAINTAINERCLEANFILES = aclocal.m4 configure ChangeLog Makefile.in mkinstalldirs \ stamp-h.in libtool config.cache config.h config.h.in acinclude.m4 \ m4/libtool.m4 m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 \ build-aux/compile build-aux/config.* build-aux/depcomp build-aux/install-sh build-aux/ltmain.sh build-aux/missing maintainer-clean-local: rm -Rf pkg aiscm-0.15.1/configure0000755000175000017500000215134613220460250011530 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for aiscm 0.15.1. # # 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 -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and jan@wedesoft.de $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: 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='aiscm' PACKAGE_TARNAME='aiscm' PACKAGE_VERSION='0.15.1' PACKAGE_STRING='aiscm 0.15.1' PACKAGE_BUGREPORT='jan@wedesoft.de' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS AM_CFLAGS GL_LIBS GL_CFLAGS X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS XMKMF GUILE_CACHE GUILE_EXT GUILE_SITE GUILE_LDFLAGS GUILE_CFLAGS GUILE_LTLIBS GUILE_LIBS GUILE_TOOLS GUILE_CONFIG GUILE GUILE_EFFECTIVE_VERSION AVFORMAT_LIBS AVFORMAT_CFLAGS AVCODEC_LIBS AVCODEC_CFLAGS AVUTIL_LIBS AVUTIL_CFLAGS PULSE_LIBS PULSE_CFLAGS MAGICK_LIBS MAGICK_CFLAGS MJPEG_LIBS MJPEG_CFLAGS AVRESAMPLE_LIBS AVRESAMPLE_CFLAGS SWRESAMPLE_LIBS SWRESAMPLE_CFLAGS SWSCALE_LIBS SWSCALE_CFLAGS PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config LIBOBJS CONVERT PANDOC TOUCH PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED 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 host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL 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 DATE 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 runstatedir 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_shared enable_static with_pic enable_fast_install with_aix_soname enable_dependency_tracking with_gnu_ld with_sysroot enable_libtool_lock enable_rpath with_x with___with_Mesa enable_Mesa enable_debug ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS LT_SYS_LIBRARY_PATH CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR SWSCALE_CFLAGS SWSCALE_LIBS SWRESAMPLE_CFLAGS SWRESAMPLE_LIBS AVRESAMPLE_CFLAGS AVRESAMPLE_LIBS MJPEG_CFLAGS MJPEG_LIBS MAGICK_CFLAGS MAGICK_LIBS PULSE_CFLAGS PULSE_LIBS AVUTIL_CFLAGS AVUTIL_LIBS AVCODEC_CFLAGS AVCODEC_LIBS AVFORMAT_CFLAGS AVFORMAT_LIBS XMKMF' # 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' runstatedir='${localstatedir}/run' 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 ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -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 runstatedir 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 aiscm 0.15.1 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] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --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/aiscm] --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 X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR 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 aiscm 0.15.1:";; 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-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] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-libtool-lock avoid locking (might break parallel builds) --disable-rpath do not hardcode runtime library paths $with_Mesa_help_string --enable-debug=DEBUG compile with debugging assertions (default=no) 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-x use the X Window System Prefer the Mesa library over a vendors native OpenGL library (default=yes) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory LT_SYS_LIBRARY_PATH User-defined run-time library search path. CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path SWSCALE_CFLAGS C compiler flags for SWSCALE, overriding pkg-config SWSCALE_LIBS linker flags for SWSCALE, overriding pkg-config SWRESAMPLE_CFLAGS C compiler flags for SWRESAMPLE, overriding pkg-config SWRESAMPLE_LIBS linker flags for SWRESAMPLE, overriding pkg-config AVRESAMPLE_CFLAGS C compiler flags for AVRESAMPLE, overriding pkg-config AVRESAMPLE_LIBS linker flags for AVRESAMPLE, overriding pkg-config MJPEG_CFLAGS C compiler flags for MJPEG, overriding pkg-config MJPEG_LIBS linker flags for MJPEG, overriding pkg-config MAGICK_CFLAGS C compiler flags for MAGICK, overriding pkg-config MAGICK_LIBS linker flags for MAGICK, overriding pkg-config PULSE_CFLAGS C compiler flags for PULSE, overriding pkg-config PULSE_LIBS linker flags for PULSE, overriding pkg-config AVUTIL_CFLAGS C compiler flags for AVUTIL, overriding pkg-config AVUTIL_LIBS linker flags for AVUTIL, overriding pkg-config AVCODEC_CFLAGS C compiler flags for AVCODEC, overriding pkg-config AVCODEC_LIBS linker flags for AVCODEC, overriding pkg-config AVFORMAT_CFLAGS C compiler flags for AVFORMAT, overriding pkg-config AVFORMAT_LIBS linker flags for AVFORMAT, overriding pkg-config XMKMF Path to xmkmf, Makefile generator for X Window System 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 . _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 aiscm configure 0.15.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------ ## ## Report this to jan@wedesoft.de ## ## ------------------------------ ##" ) | 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 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 aiscm $as_me 0.15.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DATE=2017-12-26 ac_aux_dir= for ac_dir in build-aux "$srcdir"/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 build-aux \"$srcdir\"/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='aiscm' VERSION='0.15.1' 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 case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # 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 # 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 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 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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options 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 ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no 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* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # 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' ;; netbsdelf*-gnu) version_type=linux 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='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: 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 { $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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking 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 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 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 "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-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_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-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_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; 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" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi ac_config_headers="$ac_config_headers config.h" # Extract the first word of "touch", so it can be a program name with args. set dummy touch; 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_TOUCH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$TOUCH"; then ac_cv_prog_TOUCH="$TOUCH" # 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_TOUCH="touch" $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_TOUCH" && ac_cv_prog_TOUCH="touch" fi fi TOUCH=$ac_cv_prog_TOUCH if test -n "$TOUCH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 $as_echo "$TOUCH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "pandoc", so it can be a program name with args. set dummy pandoc; 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_PANDOC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PANDOC"; then ac_cv_prog_PANDOC="$PANDOC" # 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_PANDOC="pandoc" $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_PANDOC" && ac_cv_prog_PANDOC="no" fi fi PANDOC=$ac_cv_prog_PANDOC if test -n "$PANDOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PANDOC" >&5 $as_echo "$PANDOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PANDOC" = xno; then as_fn_error $? "Could not find 'pandoc' in path." "$LINENO" 5 fi # Extract the first word of "convert", so it can be a program name with args. set dummy convert; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CONVERT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CONVERT"; then ac_cv_prog_CONVERT="$CONVERT" # 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_CONVERT="convert" $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_CONVERT" && ac_cv_prog_CONVERT="no" fi fi CONVERT=$ac_cv_prog_CONVERT if test -n "$CONVERT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONVERT" >&5 $as_echo "$CONVERT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$CONVERT" = xno; then as_fn_error $? "Could not find 'convert' in path." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking wether C compiler works" >&5 $as_echo_n "checking wether C compiler works... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else as_fn_error $? "Failed to compile and link C program." "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for ac_header in assert.h stdio.h stdlib.h string.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 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 : ac_cv_func_malloc_0_nonnull=no 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 () { return ! malloc (0); ; 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 for ac_func in strcmp do : ac_fn_c_check_func "$LINENO" "strcmp" "ac_cv_func_strcmp" if test "x$ac_cv_func_strcmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCMP 1 _ACEOF fi done 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 "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : else ax_pthread_ok=no as_fn_error $? "Could not find pthread library" "$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 pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWSCALE" >&5 $as_echo_n "checking for SWSCALE... " >&6; } if test -n "$SWSCALE_CFLAGS"; then pkg_cv_SWSCALE_CFLAGS="$SWSCALE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libswscale >= 2.1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libswscale >= 2.1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SWSCALE_CFLAGS=`$PKG_CONFIG --cflags "libswscale >= 2.1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SWSCALE_LIBS"; then pkg_cv_SWSCALE_LIBS="$SWSCALE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libswscale >= 2.1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libswscale >= 2.1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SWSCALE_LIBS=`$PKG_CONFIG --libs "libswscale >= 2.1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SWSCALE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libswscale >= 2.1.0" 2>&1` else SWSCALE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libswscale >= 2.1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SWSCALE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libswscale >= 2.1.0) were not met: $SWSCALE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables SWSCALE_CFLAGS and SWSCALE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables SWSCALE_CFLAGS and SWSCALE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else SWSCALE_CFLAGS=$pkg_cv_SWSCALE_CFLAGS SWSCALE_LIBS=$pkg_cv_SWSCALE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWRESAMPLE" >&5 $as_echo_n "checking for SWRESAMPLE... " >&6; } if test -n "$SWRESAMPLE_CFLAGS"; then pkg_cv_SWRESAMPLE_CFLAGS="$SWRESAMPLE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libswresample >= 1.1.100\""; } >&5 ($PKG_CONFIG --exists --print-errors "libswresample >= 1.1.100") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SWRESAMPLE_CFLAGS=`$PKG_CONFIG --cflags "libswresample >= 1.1.100" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SWRESAMPLE_LIBS"; then pkg_cv_SWRESAMPLE_LIBS="$SWRESAMPLE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libswresample >= 1.1.100\""; } >&5 ($PKG_CONFIG --exists --print-errors "libswresample >= 1.1.100") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SWRESAMPLE_LIBS=`$PKG_CONFIG --libs "libswresample >= 1.1.100" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SWRESAMPLE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libswresample >= 1.1.100" 2>&1` else SWRESAMPLE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libswresample >= 1.1.100" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SWRESAMPLE_PKG_ERRORS" >&5 pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVRESAMPLE" >&5 $as_echo_n "checking for AVRESAMPLE... " >&6; } if test -n "$AVRESAMPLE_CFLAGS"; then pkg_cv_AVRESAMPLE_CFLAGS="$AVRESAMPLE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavresample >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavresample >= 1.0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVRESAMPLE_CFLAGS=`$PKG_CONFIG --cflags "libavresample >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$AVRESAMPLE_LIBS"; then pkg_cv_AVRESAMPLE_LIBS="$AVRESAMPLE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavresample >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavresample >= 1.0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVRESAMPLE_LIBS=`$PKG_CONFIG --libs "libavresample >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then AVRESAMPLE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavresample >= 1.0.1" 2>&1` else AVRESAMPLE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavresample >= 1.0.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AVRESAMPLE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavresample >= 1.0.1) were not met: $AVRESAMPLE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables AVRESAMPLE_CFLAGS and AVRESAMPLE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables AVRESAMPLE_CFLAGS and AVRESAMPLE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else AVRESAMPLE_CFLAGS=$pkg_cv_AVRESAMPLE_CFLAGS AVRESAMPLE_LIBS=$pkg_cv_AVRESAMPLE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVRESAMPLE" >&5 $as_echo_n "checking for AVRESAMPLE... " >&6; } if test -n "$AVRESAMPLE_CFLAGS"; then pkg_cv_AVRESAMPLE_CFLAGS="$AVRESAMPLE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavresample >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavresample >= 1.0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVRESAMPLE_CFLAGS=`$PKG_CONFIG --cflags "libavresample >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$AVRESAMPLE_LIBS"; then pkg_cv_AVRESAMPLE_LIBS="$AVRESAMPLE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavresample >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavresample >= 1.0.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVRESAMPLE_LIBS=`$PKG_CONFIG --libs "libavresample >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then AVRESAMPLE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavresample >= 1.0.1" 2>&1` else AVRESAMPLE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavresample >= 1.0.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AVRESAMPLE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavresample >= 1.0.1) were not met: $AVRESAMPLE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables AVRESAMPLE_CFLAGS and AVRESAMPLE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables AVRESAMPLE_CFLAGS and AVRESAMPLE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else AVRESAMPLE_CFLAGS=$pkg_cv_AVRESAMPLE_CFLAGS AVRESAMPLE_LIBS=$pkg_cv_AVRESAMPLE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi else SWRESAMPLE_CFLAGS=$pkg_cv_SWRESAMPLE_CFLAGS SWRESAMPLE_LIBS=$pkg_cv_SWRESAMPLE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_SWRESAMPLE 1" >>confdefs.h fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MJPEG" >&5 $as_echo_n "checking for MJPEG... " >&6; } if test -n "$MJPEG_CFLAGS"; then pkg_cv_MJPEG_CFLAGS="$MJPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mjpegtools >= 1.9.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "mjpegtools >= 1.9.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_MJPEG_CFLAGS=`$PKG_CONFIG --cflags "mjpegtools >= 1.9.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$MJPEG_LIBS"; then pkg_cv_MJPEG_LIBS="$MJPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mjpegtools >= 1.9.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "mjpegtools >= 1.9.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_MJPEG_LIBS=`$PKG_CONFIG --libs "mjpegtools >= 1.9.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then MJPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "mjpegtools >= 1.9.0" 2>&1` else MJPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "mjpegtools >= 1.9.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$MJPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (mjpegtools >= 1.9.0) were not met: $MJPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables MJPEG_CFLAGS and MJPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables MJPEG_CFLAGS and MJPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else MJPEG_CFLAGS=$pkg_cv_MJPEG_CFLAGS MJPEG_LIBS=$pkg_cv_MJPEG_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAGICK" >&5 $as_echo_n "checking for MAGICK... " >&6; } if test -n "$MAGICK_CFLAGS"; then pkg_cv_MAGICK_CFLAGS="$MAGICK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ImageMagick >= 6.7.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "ImageMagick >= 6.7.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_MAGICK_CFLAGS=`$PKG_CONFIG --cflags "ImageMagick >= 6.7.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$MAGICK_LIBS"; then pkg_cv_MAGICK_LIBS="$MAGICK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ImageMagick >= 6.7.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "ImageMagick >= 6.7.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_MAGICK_LIBS=`$PKG_CONFIG --libs "ImageMagick >= 6.7.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then MAGICK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ImageMagick >= 6.7.7" 2>&1` else MAGICK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ImageMagick >= 6.7.7" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$MAGICK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (ImageMagick >= 6.7.7) were not met: $MAGICK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables MAGICK_CFLAGS and MAGICK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables MAGICK_CFLAGS and MAGICK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else MAGICK_CFLAGS=$pkg_cv_MAGICK_CFLAGS MAGICK_LIBS=$pkg_cv_MAGICK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PULSE" >&5 $as_echo_n "checking for PULSE... " >&6; } if test -n "$PULSE_CFLAGS"; then pkg_cv_PULSE_CFLAGS="$PULSE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse-simple >= 1.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpulse-simple >= 1.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse-simple >= 1.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PULSE_LIBS"; then pkg_cv_PULSE_LIBS="$PULSE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse-simple >= 1.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpulse-simple >= 1.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PULSE_LIBS=`$PKG_CONFIG --libs "libpulse-simple >= 1.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpulse-simple >= 1.1" 2>&1` else PULSE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpulse-simple >= 1.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PULSE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libpulse-simple >= 1.1) were not met: $PULSE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PULSE_CFLAGS and PULSE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PULSE_CFLAGS and PULSE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PULSE_CFLAGS=$pkg_cv_PULSE_CFLAGS PULSE_LIBS=$pkg_cv_PULSE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVUTIL" >&5 $as_echo_n "checking for AVUTIL... " >&6; } if test -n "$AVUTIL_CFLAGS"; then pkg_cv_AVUTIL_CFLAGS="$AVUTIL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavutil >= 52.3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavutil >= 52.3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVUTIL_CFLAGS=`$PKG_CONFIG --cflags "libavutil >= 52.3.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$AVUTIL_LIBS"; then pkg_cv_AVUTIL_LIBS="$AVUTIL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavutil >= 52.3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavutil >= 52.3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVUTIL_LIBS=`$PKG_CONFIG --libs "libavutil >= 52.3.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then AVUTIL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavutil >= 52.3.0" 2>&1` else AVUTIL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavutil >= 52.3.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AVUTIL_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavutil >= 52.3.0) were not met: $AVUTIL_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables AVUTIL_CFLAGS and AVUTIL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables AVUTIL_CFLAGS and AVUTIL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else AVUTIL_CFLAGS=$pkg_cv_AVUTIL_CFLAGS AVUTIL_LIBS=$pkg_cv_AVUTIL_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVCODEC" >&5 $as_echo_n "checking for AVCODEC... " >&6; } if test -n "$AVCODEC_CFLAGS"; then pkg_cv_AVCODEC_CFLAGS="$AVCODEC_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 54.35.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec >= 54.35.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVCODEC_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 54.35.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$AVCODEC_LIBS"; then pkg_cv_AVCODEC_LIBS="$AVCODEC_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 54.35.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec >= 54.35.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVCODEC_LIBS=`$PKG_CONFIG --libs "libavcodec >= 54.35.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then AVCODEC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec >= 54.35.0" 2>&1` else AVCODEC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec >= 54.35.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AVCODEC_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec >= 54.35.0) were not met: $AVCODEC_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables AVCODEC_CFLAGS and AVCODEC_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables AVCODEC_CFLAGS and AVCODEC_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else AVCODEC_CFLAGS=$pkg_cv_AVCODEC_CFLAGS AVCODEC_LIBS=$pkg_cv_AVCODEC_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVFORMAT" >&5 $as_echo_n "checking for AVFORMAT... " >&6; } if test -n "$AVFORMAT_CFLAGS"; then pkg_cv_AVFORMAT_CFLAGS="$AVFORMAT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavformat >= 54.20.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavformat >= 54.20.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVFORMAT_CFLAGS=`$PKG_CONFIG --cflags "libavformat >= 54.20.4" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$AVFORMAT_LIBS"; then pkg_cv_AVFORMAT_LIBS="$AVFORMAT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavformat >= 54.20.4\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavformat >= 54.20.4") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVFORMAT_LIBS=`$PKG_CONFIG --libs "libavformat >= 54.20.4" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then AVFORMAT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavformat >= 54.20.4" 2>&1` else AVFORMAT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavformat >= 54.20.4" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AVFORMAT_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavformat >= 54.20.4) were not met: $AVFORMAT_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables AVFORMAT_CFLAGS and AVFORMAT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables AVFORMAT_CFLAGS and AVFORMAT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else AVFORMAT_CFLAGS=$pkg_cv_AVFORMAT_CFLAGS AVFORMAT_LIBS=$pkg_cv_AVFORMAT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi old_LIBS="$LIBS" LIBS="$LIBS $AVFORMAT_LIBS $AVCODEC_LIBS $AVUTIL_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for av_frame_alloc" >&5 $as_echo_n "checking for av_frame_alloc... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { av_frame_alloc() ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_FRAME_ALLOC 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for avcodec_alloc_frame" >&5 $as_echo_n "checking for avcodec_alloc_frame... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { avcodec_alloc_frame() ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "No support for av_frame_alloc or avcodec_alloc_frame" "$LINENO" 5 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for av_image_get_buffer_size" >&5 $as_echo_n "checking for av_image_get_buffer_size... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { av_image_get_buffer_size(0, 320, 240, 32) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_IMAGE_BUFFER_SIZE 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for avpicture_get_size" >&5 $as_echo_n "checking for avpicture_get_size... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { avpicture_get_size(0, 320, 240) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "No support for av_image_get_buffer_size or avpicture_get_size" "$LINENO" 5 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for avformat_alloc_output_context2" >&5 $as_echo_n "checking for avformat_alloc_output_context2... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { avformat_alloc_output_context2(0, 0, 0, 0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_AVFORMAT_ALLOC_OUTPUT_CONTEXT2 1" >>confdefs.h 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 for av_frame_get_buffer" >&5 $as_echo_n "checking for av_frame_get_buffer... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { av_frame_get_buffer(0, 32) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_AV_FRAME_GET_BUFFER 1" >>confdefs.h 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 for av_frame_make_writable" >&5 $as_echo_n "checking for av_frame_make_writable... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { av_frame_make_writable(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_AV_FRAME_MAKE_WRITABLE 1" >>confdefs.h 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 AVFrame has pts" >&5 $as_echo_n "checking AVFrame has pts... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { AVFrame *frame; frame->pts ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_AV_FRAME_PTS 1" >>confdefs.h 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 for av_packet_rescale_ts" >&5 $as_echo_n "checking for av_packet_rescale_ts... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { AVRational rational; av_packet_rescale_ts(0, rational, rational) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_AV_PACKET_RESCALE_TS 1" >>confdefs.h 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 for av_packet_unref" >&5 $as_echo_n "checking for av_packet_unref... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { av_packet_unref(NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_AV_PACKET_UNREF 1" >>confdefs.h 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 LIBS="$old_LIBS" LIBS="$LIBS -lXpm" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmCreatePixmapFromData" >&5 $as_echo_n "checking for XpmCreatePixmapFromData... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XpmCreatePixmapFromData(0, 0, 0, 0, 0, 0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not locate Xpm library" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$old_LIBS" if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-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_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-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_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; 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" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi _guile_versions_to_search="2.2 2.0" if test -n "$GUILE_EFFECTIVE_VERSION"; then _guile_tmp="" for v in $_guile_versions_to_search; do if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then _guile_tmp=$v fi done if test -z "$_guile_tmp"; 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 $? "searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION See \`config.log' for more details" "$LINENO" 5; } fi _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION fi GUILE_EFFECTIVE_VERSION="" _guile_errors="" for v in $_guile_versions_to_search; do if test -z "$GUILE_EFFECTIVE_VERSION"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for guile $v" >&5 $as_echo "$as_me: checking for guile $v" >&6;} if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"guile-\$v\""; } >&5 ($PKG_CONFIG --exists --print-errors "guile-$v") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then GUILE_EFFECTIVE_VERSION=$v fi fi done if test -z "$GUILE_EFFECTIVE_VERSION"; then as_fn_error $? " No Guile development packages were found. Please verify that you have Guile installed. If you installed Guile from a binary distribution, please verify that you have also installed the development packages. If you installed it yourself, you might need to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. " "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: found guile $GUILE_EFFECTIVE_VERSION" >&5 $as_echo "$as_me: found guile $GUILE_EFFECTIVE_VERSION" >&6;} # Extract the first word of "guile", so it can be a program name with args. set dummy guile; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GUILE+:} false; then : $as_echo_n "(cached) " >&6 else case $GUILE in [\\/]* | ?:[\\/]*) ac_cv_path_GUILE="$GUILE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GUILE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GUILE=$ac_cv_path_GUILE if test -n "$GUILE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE" >&5 $as_echo "$GUILE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$GUILE" = "" ; then as_fn_error $? "guile required but not found" "$LINENO" 5 fi # Extract the first word of "guile-config", so it can be a program name with args. set dummy guile-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_path_GUILE_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GUILE_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GUILE_CONFIG="$GUILE_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GUILE_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GUILE_CONFIG=$ac_cv_path_GUILE_CONFIG if test -n "$GUILE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_CONFIG" >&5 $as_echo "$GUILE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$GUILE_CONFIG" = "" ; then as_fn_error $? "guile-config required but not found" "$LINENO" 5 fi # Extract the first word of "guile-tools", so it can be a program name with args. set dummy guile-tools; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GUILE_TOOLS+:} false; then : $as_echo_n "(cached) " >&6 else case $GUILE_TOOLS in [\\/]* | ?:[\\/]*) ac_cv_path_GUILE_TOOLS="$GUILE_TOOLS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GUILE_TOOLS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GUILE_TOOLS=$ac_cv_path_GUILE_TOOLS if test -n "$GUILE_TOOLS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_TOOLS" >&5 $as_echo "$GUILE_TOOLS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # 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 ac_prog=ld if test "$GCC" = yes; 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 "$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 ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then 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 &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 ${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 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 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* 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 ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 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 test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libguile compile flags" >&5 $as_echo_n "checking libguile compile flags... " >&6; } GUILE_CFLAGS="`$GUILE_CONFIG compile`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_CFLAGS" >&5 $as_echo "$GUILE_CFLAGS" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking libguile link flags" >&5 $as_echo_n "checking libguile link flags... " >&6; } GUILE_LDFLAGS="`$GUILE_CONFIG link`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_LDFLAGS" >&5 $as_echo "$GUILE_LDFLAGS" >&6; } GUILE_LIBS= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then rpathdirs= next= for opt in $GUILE_LDFLAGS; do if test -n "$next"; then dir="$next" 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,,'` 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 """"; then for dir in $rpathdirs; do GUILE_LIBS="${GUILE_LIBS}${GUILE_LIBS:+ }-R$dir" done else if test -n "$acl_hardcode_libdir_separator"; then 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" GUILE_LIBS="$flag" else for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" GUILE_LIBS="${GUILE_LIBS}${GUILE_LIBS:+ }$flag" done fi fi fi fi fi GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" GUILE_LTLIBS= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then rpathdirs= next= for opt in $GUILE_LDFLAGS; do if test -n "$next"; then dir="$next" 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,,'` 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 ""yes""; then for dir in $rpathdirs; do GUILE_LTLIBS="${GUILE_LTLIBS}${GUILE_LTLIBS:+ }-R$dir" done else if test -n "$acl_hardcode_libdir_separator"; then 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" GUILE_LTLIBS="$flag" else for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" GUILE_LTLIBS="${GUILE_LTLIBS}${GUILE_LTLIBS:+ }$flag" done fi fi fi fi fi GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Guile site directory" >&5 $as_echo_n "checking for Guile site directory... " >&6; } GUILE_SITE=`$GUILE_CONFIG info sitedir` if test "$GUILE_SITE" = ""; then GUILE_SITE=`$GUILE_CONFIG info pkgdatadir`/site fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_SITE" >&5 $as_echo "$GUILE_SITE" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Guile extensions directory" >&5 $as_echo_n "checking for Guile extensions directory... " >&6; } GUILE_EXT=`$GUILE_CONFIG info extensiondir` if test "$GUILE_EXT" = ""; then as_fn_error $? "could not determine extensions directory" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_EXT" >&5 $as_echo "$GUILE_EXT" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Guile compiler cache directory" >&5 $as_echo_n "checking for Guile compiler cache directory... " >&6; } GUILE_CACHE=`$GUILE -c "(display (cdr (assoc 'ccachedir %guile-build-info)))"` if test "$GUILE_CACHE" = ""; then as_fn_error $? "could not determine compiler cache directory" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_CACHE" >&5 $as_echo "$GUILE_CACHE" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } 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 ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" 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 XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $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 dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=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_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $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 dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=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_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $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 gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=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_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $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 gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=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_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_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 connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=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_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $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 remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=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_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $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 shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=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_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_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 IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=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_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi if test "x$no_x" = xyes; then as_fn_error $? "Could not find X11 libraries." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL" >&5 $as_echo_n "checking for OpenGL... " >&6; } if ${ax_cv_have_OpenGL+:} false; then : $as_echo_n "(cached) " >&6 else # Check whether --with---with-Mesa was given. if test "${with___with_Mesa+set}" = set; then : withval=$with___with_Mesa; with_Mesa_help_string fi # Check whether --enable-Mesa was given. if test "${enable_Mesa+set}" = set; then : enableval=$enable_Mesa; use_Mesa=$enableval else use_Mesa=yes fi if test x"$use_Mesa" = xyes; then GL_search_list="MesaGL GL" GLU_search_list="MesaGLU GLU" GLX_search_list="MesaGLX GLX" else GL_search_list="GL MesaGL" GLU_search_list="GLU MesaGLU" GLX_search_list="GLX MesaGLX" 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 if test x"$no_x" != xyes; then GL_CFLAGS="$X_CFLAGS" GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS" fi GL_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$GL_CFLAGS" GL_save_LIBS="$LIBS" LIBS="$GL_X_LIBS" # Save the "AC_MSG_RESULT file descriptor" to FD 8. exec 8>&6 # Temporarily turn off AC_MSG_RESULT so that the user gets pretty # messages. exec 6>/dev/null { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing glAccum" >&5 $as_echo_n "checking for library containing glAccum... " >&6; } if ${ac_cv_search_glAccum+:} 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 glAccum (); int main () { return glAccum (); ; return 0; } _ACEOF for ac_lib in '' $GL_search_list; 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_glAccum=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_glAccum+:} false; then : break fi done if ${ac_cv_search_glAccum+:} false; then : else ac_cv_search_glAccum=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glAccum" >&5 $as_echo "$ac_cv_search_glAccum" >&6; } ac_res=$ac_cv_search_glAccum if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_GL=yes else have_GL=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gluBeginCurve" >&5 $as_echo_n "checking for library containing gluBeginCurve... " >&6; } if ${ac_cv_search_gluBeginCurve+:} 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 gluBeginCurve (); int main () { return gluBeginCurve (); ; return 0; } _ACEOF for ac_lib in '' $GLU_search_list; 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_gluBeginCurve=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gluBeginCurve+:} false; then : break fi done if ${ac_cv_search_gluBeginCurve+:} false; then : else ac_cv_search_gluBeginCurve=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gluBeginCurve" >&5 $as_echo "$ac_cv_search_gluBeginCurve" >&6; } ac_res=$ac_cv_search_gluBeginCurve if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_GLU=yes else have_GLU=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing glXChooseVisual" >&5 $as_echo_n "checking for library containing glXChooseVisual... " >&6; } if ${ac_cv_search_glXChooseVisual+:} 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 glXChooseVisual (); int main () { return glXChooseVisual (); ; return 0; } _ACEOF for ac_lib in '' $GLX_search_list; 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_glXChooseVisual=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_glXChooseVisual+:} false; then : break fi done if ${ac_cv_search_glXChooseVisual+:} false; then : else ac_cv_search_glXChooseVisual=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glXChooseVisual" >&5 $as_echo "$ac_cv_search_glXChooseVisual" >&6; } ac_res=$ac_cv_search_glXChooseVisual if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_GLX=yes else have_GLX=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing glutInit" >&5 $as_echo_n "checking for library containing glutInit... " >&6; } if ${ac_cv_search_glutInit+:} 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 glutInit (); int main () { return glutInit (); ; return 0; } _ACEOF for ac_lib in '' glut; 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_glutInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_glutInit+:} false; then : break fi done if ${ac_cv_search_glutInit+:} false; then : else ac_cv_search_glutInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glutInit" >&5 $as_echo "$ac_cv_search_glutInit" >&6; } ac_res=$ac_cv_search_glutInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_glut=yes else have_glut=no fi # Restore pretty messages. exec 6>&8 if test -n "$LIBS"; then ax_cv_have_OpenGL=yes GL_LIBS="$LIBS" else ax_cv_have_OpenGL=no GL_CFLAGS= fi GL_X_LIBS= LIBS="$GL_save_LIBS" CPPFLAGS="$GL_save_CPPFLAGS" 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_cv_GL_CFLAGS="$GL_CFLAGS" ax_cv_GL_LIBS="$GL_LIBS" ax_cv_have_GL="$have_GL" ax_cv_have_GLU="$have_GLU" ax_cv_have_GLX="$have_GLX" ax_cv_have_glut="$have_glut" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_have_OpenGL" >&5 $as_echo "$ax_cv_have_OpenGL" >&6; } GL_CFLAGS="$ax_cv_GL_CFLAGS" GL_LIBS="$ax_cv_GL_LIBS" have_GL="$ax_cv_have_GL" have_GLU="$ax_cv_have_GLU" have_GLX="$ax_cv_have_GLX" have_glut="$ax_cv_have_glut" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL" >&5 $as_echo_n "checking for GL... " >&6; } if test "x$have_GL" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not find GL" "$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 GLU" >&5 $as_echo_n "checking for GLU... " >&6; } if test "x$have_GLU" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not find GLU" "$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 Xvideo" >&5 $as_echo_n "checking for Xvideo... " >&6; } LIBS="$LIBS -lXv" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XvQueryPortAttributes(0, 0, 0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not locate Xvideo extension" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext old_LIBS="$LIBS" # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; enable_debug=$enableval else enable_debug=no fi if test "x$enable_debug" == "xyes"; then AM_CFLAGS='-Wall' else AM_CFLAGS='-Wall -DNDEBUG' fi info="$info prefix : $prefix debug mode : $enable_debug" ac_config_files="$ac_config_files Makefile aiscm/Makefile tests/Makefile tests/integration/Makefile tests/fixtures/Makefile srfi/Makefile srfi/srfi-64/Makefile bench/Makefile doc/Makefile doc/index.md" ac_config_commands="$ac_config_commands default" 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= 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__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 : "${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 aiscm $as_me 0.15.1, 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 ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ aiscm config.status 0.15.1 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"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in 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 \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' info="$info" _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 "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "aiscm/Makefile") CONFIG_FILES="$CONFIG_FILES aiscm/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/integration/Makefile") CONFIG_FILES="$CONFIG_FILES tests/integration/Makefile" ;; "tests/fixtures/Makefile") CONFIG_FILES="$CONFIG_FILES tests/fixtures/Makefile" ;; "srfi/Makefile") CONFIG_FILES="$CONFIG_FILES srfi/Makefile" ;; "srfi/srfi-64/Makefile") CONFIG_FILES="$CONFIG_FILES srfi/srfi-64/Makefile" ;; "bench/Makefile") CONFIG_FILES="$CONFIG_FILES bench/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/index.md") CONFIG_FILES="$CONFIG_FILES doc/index.md" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) 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 # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build 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. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "default":C) echo "$info" ;; 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 aiscm-0.15.1/bootstrap0000755000175000017500000000013413213600050011542 00000000000000#!/bin/sh git log > ChangeLog mkdir -p build-aux touch build-aux/config.rpath autoreconf -i aiscm-0.15.1/README.md0000644000175000017500000000470513220457302011076 00000000000000``` The _ ___ / \ |_ _|___ ___ _ __ ___ / _ \ | |/ __|/ __| '_ ` _ \ / ___ \ | |\__ \ (__| | | | | | /_/ \_\___|___/\___|_| |_| |_| extension ``` # [AIscm][1] [![GPLv3](doc/gplv3.png)](https://www.gnu.org/copyleft/gpl.html) [![amd64](doc/amd64.png)](https://en.wikipedia.org/wiki/X86-64) [![Travis CI](doc/travis.png)](https://travis-ci.org/wedesoft/aiscm) [**AIscm**][1] is a **[Guile][2] extension for numerical arrays and tensors**. Performance is achieved by means of a JIT compiler. Control all data and machine code down to every single bit and byte! ![AIscm](doc/aiscm.gif "AIscm") ## Download You can download the current state of the software like this: ```Shell git clone git@github.com:wedesoft/aiscm.git cd aiscm ``` ## Dependencies You can install the dependencies as follows: ```Shell sudo apt-get install -q --yes build-essential autoconf automake libtool devscripts equivs sudo mk-build-deps --install --remove --tool 'apt-get -q --yes' debian/control ``` ## Installation Finally you can install the software as follows ```Shell ./bootstrap ./configure make -j make check -j sudo make install cd .. ``` ## Run tests ### Unit tests You can run all tests like this ```Shell make check -j ``` One can use *recheck* to run only the test suites which have not completed successfully: ```Shell make recheck -j ``` To run a single test suite, you can delete the *log* file and regenerate it using *make*: ```Shell cd tests rm -f test_asm.log && make test_asm.log cd .. ``` ### Integration tests Running the integration tests requires a graphical display, keyboard interaction, a camera, and a sound device. ```Shell make integration ``` One can use *reintegration* to run only the integration tests which have not completed successfully: ```Shell make reintegration ``` # See also * [AIscm homepage][1] * [AIscm installation][6] * [Debian Package Tracker entry for AIscm][8] * [Debian sbuild][3] (installed from jessie-backports because of [bug 827315][7]) * [Docker][4] * [managing Debian packages][5] [1]: http://wedesoft.github.io/aiscm/ "AIscm" [2]: http://www.gnu.org/software/guile/ "Guile programming language" [3]: https://wiki.debian.org/sbuild [4]: https://www.docker.com/ [5]: https://www.debian.org/doc/manuals/developers-reference/ch05.en.html#newpackage [6]: http://wedesoft.github.io/aiscm/installation.html "AIscm installation" [7]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=827315 [8]: https://tracker.debian.org/pkg/aiscm aiscm-0.15.1/doc/0000755000175000017500000000000013220531470010435 500000000000000aiscm-0.15.1/doc/gplv3.png0000644000175000017500000001035113213600051012110 00000000000000PNG  IHDR] pHYs  IDATxytUս?s7IM C V u~R(Zv)OZX^ >ClŨ2H@! !7\uXw{7;'bҤI֌g4MWUᕦЋ^ bK[o֞K;4o/z jQREjMw/zM 9]RZyhWs_{ыoE/B(RJ_+V ???j6=rX>^t=?Ƥ\d鉉bv+U?*hzb"q̆k/?=g^c9z<0Wvpdľӹ |+ai_*FκLoOl־x\&OݜsmuX3/őeYV ѶVMaCxx eK wG)%֭iܕF$NF f{ՠhŤCxDyhty3/rA{@FuCvOw2 945YXi-G Y) )6SAPY>wD.̻{z Ml^z;x/'z{ې^WdytE*_y-Ռdo]IJWuq[WF MUXwŲ?v鸾].yA}r (?bvzHLLdΜ9!>ΝKrr2k.v͛ٺu+tx >#L& ,p: Y'r7( lذ ꀗE܍G?y 1f]o体 N bF̤YxhQ*/0sD:E%Iψ%KLܱm0CR1)3~zUCsLAI`T7pC;+'cI6ܔh<ۏp܌$~u8nO=*f"%x:w|68m<}PĘ*,“7 ƁuɉK.fVYUx&cRe[Xf%[sFمRcd%Xw> l/#!jZ|=3 qm> h|$N6q砪 w%vdsLk1߁/}ƕRH)Yh{e˖-)% .dӦMi?<Ǐرc:u7ȋ/ȇ~СC4ٳgbapB~?cǎe޼y^:"ΰL8Q|tI9r5ain7dhj4;$&(֔5CLbx )%V_wl { k?Bzd_}@u}#m gS!7KeR6j k=nrIO+Z~pG ~xƭ?EߨԊr,ɷLmX@@TzӥӆԌ\qCYQ:~/dO@8xxg<3,O#=mh6f+JǡgfZ,Iſ* ⬖}CUaxz o!7%>6{U`GL|8 mNdtxGqg1֭Y8"kwAj*c2dgfΜ9XVRRRxM8qs?1z'55{.jx;D#]Fɻob-*kNW-g7^7 GH\ta"qJm0E9$4LnBx<^2LH|!c}9dA )%S?ƛ0֤3o$d! u("1Nm}l9R<Gu>3yW?R]ȼJU뢫X^}h"D v~r<iCB rM= gg9H$p|:;_G8cRfL>TZyA+{*8@P纇cQtͿS ]g#f"u?O)%;sT!B<^]׉f( ( RJ8Nf͚Eaa!Gfƌ,_]ٵk7n£cα3T_j\`̪Hw^^`ciK 2_%)J fBo"Ѻ]"U3HQxv(m($:Z"1jXz,ˋWih0lO}v-_kRDHDl6DAjuuҫk61<7]ũ顶?&3$s;x*K%Gj[os9ϾSlb1H`9Gn7$Jlo1=[pc{Yw&6'sQ=9'f"K9{Q}2l1?zW_wfrrU^6Qb3wt:bt477JeFtt4L `Ԑ][[Kjj*~/@V+111nBs:tGO|@3#@T + C&@֟QbB$gflEomhjO,?a!ҮO 9Dߡ YW3xCc {y(3;VЯۆlx:$dpP f,"s gd(GͶ-.!K!ldcMA?"al4 砭(VDj#1 '-Ssb5ǡOCnO>z jOBj"lĐ0bH2֦U~#RG֝O;)goޟ_؋^\Ѐ:)U&n/%(([+Ao_B59Uv`08]JJE/zTVuʍ.3IENDB`aiscm-0.15.1/doc/v4l2.jpg0000644000175000017500000002647113213600051011652 00000000000000JFIFHHC    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@"D!1AQ"aq2B#$R34Cbr5sDSTc&!1AQ"2a3Bq ?0|SR՞"Xu@u&;RYV$mpw:z+NPOlVhzYO2{]}i>)x#lM484Ԍ/29Mkx^FZVŤEa}tG+afQ<ю&ڴ% rH%;C _@vǸ^ rϪ[F:3AVEM@ƌwgg6<¢s*.AÕy<ф!ey1,^^ۈR#ƦzԀSW^Osqe5\J"U^X8ssU*@;%/B1w1^>-_Ak.j wVEpfF}fq8-.4&R  :n5> 4 $&koH"r~XFfTTt|>cРdVhӈ, I}Glkɱ|J D)OpszY6oYրsj֨C9 $y*T/?SI )W&L-{?\}C(kAk_.y'wS39}B9l ' ̆Y_#H_X˱.4qUoaỸ7l}DeXb0Y<^#nuƵT>L<~9[9 }z-0Bnʁ_c?|\1փ3VMQ eYX ~u^} ~ @3Xvh6;;k (:A:(zo~tK' /I*#<~' +q .? lRf)7T`I)^ƫA!ب<ַ-޷kwk29Dڵ)}< ,?*ܵ1Ґ =47*lڅԯԷϽaelRT3چ$q;jzŬ;>Z Yڇ0j Ċ>C&6- չDiJL MQ(4|7+SrQdu322eIYJ7zdvMISG)?AhgXgPq;Vs屍'1\\3sHsG!o񪗷"Դ2!޲]4&E4wZ`ǹ7R,9gLLG+DQ&G;ƪ33UxV$5^njܙb;zb5qd%!M 0"h~==|/AW9>j8W\R^#CqΠ=i ʍ75dlE]Q@> 'A[t?mXj~\Cq5>1W#r?_Yw!>|8 0#3onԜPYo6CTeJ8٤#9= vd6ڝf8tܤT58*5gj8Y\%JͲW7bP)Ƒg$T`򭫾8!o%d#Û{\ :# yVͲ0 J.RX6:|xk1ۥ)\IV!dֶܑG(Njwٮ<)Zg CQB/"xu5-!A`6,V]OV5*N#xV]Yf˰іMg5#,8H`>!JFq5iB [(X;(Tr2źWxvʭ*cI#F@$>&1Dqk+w)-§~xI*q+.:ZR@ۺ'#jI0*H`ApiW޷xiV}S}#bGzÎ7K)VV9}0kӮgHȌ**ks,y0jK PsUa?§JD;GZDLk% D0 EsK$fM;N"ުHV |!!g־p[81W8\bn'o qEьdlZm+JMj>)(d\A4`@A0:g /x@NXPv9N+˛7L0 ޳3x×|:HtV\jXnkzKDZHb?.X ЛOfAP:vinT H3ڝxڪ7S"f5y=hתBx]16PWR$յmO0jYد,IAuAp57\N4Qk8Vwis:ڇ(6mYcKvғ>Dq;BtNKiUyat\f1Wa&͎ 8v$&kKHF,O!X2P>wzU',θ {Dh@Mb_ƴx %`w`qN"٩F'G͵v`4:zV2M/ZbxR<zu5w-f̧9W+Uz|VƷFik.▗L0'p(x2YClSFC)tB r!\*HxbKhbg1u V$Ilz.NJ.}k9ës"A7 koq$ȡb)}nV0.=i$(9Mcq jc~ul)ʹ%drcڳ34ԇH ,oMT )c!ڪ.8;W}bgҼƌ|RW56W# 6sARl.T>jYd:rxC˩$SUb4ólM\eX[w.Z9-NƯY'K`;+R8zbJ}B41sST\ltHbW`aqTؑڈtXRhI!'fVr6 :ЋIvZ?6z=H_$A<;V[D  5b6"r;4ظɑIQ XQ!wXzV@#o.VRWD5~qN $dXc@H|՞%<cP+6 PFOZѥ:H|P-rnƃ XlwSA)7JbYe o%pGf=+k[n'bƙTn+:3/-:zdVdauwO, +ear5j/$к.#n^+w(d<]rHB7Z^>'[ ~V*{ĵ+.NrS\ J.މdF3]".]JccɍVI^᧸b#Q)8iҲ^/$BUM Kx¨##g& h79+E Y`Wu*ַTA tB&R9I/E^9X6sI-$ WQeQ%Ԥ5Y] Yw5fSS4 d=I 5'ecӖ 0v6qfyYXcaF`z7f,aP4H#t秓tf1dҽTQ\ `q*;K3(+.dmj 9wlҵ8M d gvMY-eBhrlNM\n#2u1KQq(RI$@HӰ޻p2qD R@-'j|S"u,r5g2E1+ *: #sRc˝#CʐA SۃZΛxb?([ U78( z Xzh qQJrqXRl;"#+E| ßǭ$ImnE+U{Ke7eHɹ4`z\$$(`+K=v.%+3b%=O:-JɮL`tn2wH;3u{Vü9U+#YV:nbNGlWvQqIg0Lƅ|707m*$P߭40b2 l p Ah̛pe-m Կe@: k@f0G<ĪF=k{.7e8A,3`x(Xu*sWGW,*5w4@n0* M,G.v&[,6C䎄tm nMU8qy%',zU1Etk$t 2WIG; IIngzTr{rgf A)`LiZѸt ɬ:d1W8ćFUd8RrU3G*TW{y-Ѥ+m$l92ZQRhIѩ i#4}jn  $$(ƛh|Au2j͔~5RQ iUi]+ܤj5iO"R>g=岚Yq6aX`l:z$u*9)&HUD}Cjp`F KW  zָ1c܂ڦ9 ##̡J<ʝ$8|ha?Pi0lz\R^ο7T% 1p0v c@0b<g4R쁷h(FAѴ1 ar8g is׵F7l A AoiǽqN:H&4<ђ9i'ucHܒHl~;Q+2cq`tNilKH.UyTNs&TFi8'42`ϞBeFU$PK-j WJB-nY$/L4 7NB)͞Fʆ34֡ʧ=v4QX]C:!3Gsa0eyFJ5RNVY26qAV8dI(:;,IJRd ڭ hʌPZYKϭW9uheQf<'e1oVDNq{Qw;դ 3DWR'/ m;'mj[[NXbe2#(9>ݽҗJ1Tɻє%ӡ]=)#0?: iX[Pq& FUV*U):mPڵm ֞W 0fx~#>{}*1.r,ʩdLvq zзG}7YMgN9 ҍ*J8q 7QvF9.;ԓ@huNDC;urIolsRNP 7vGB h(Iԧ]ƮGFSI#։NFH\"+]?]˟)7yr#ZESuˑ{t1mD~U2NJCV5kxc0# (sϽ1`|S]S77S06Mz)kIf<)K{4RkEynĆ%Q-dt!Hd!ʨd p@9гK:FGCqli-jwozr,z9:#|SlVβI&f8ڬk:D|$6qZ0q)_3םD%=1FAZK+C8s2뉖A鱥~|69r&:ґyB1ʷ,R_)$dȔ=QΘ8 )@K Fy#mGqҳ0;[ƇI RQIOJrgF*_S76|9I΂9P#$^(ڐ;U`MPNh`; Ν81VQwV9T%PjU# ka:\w 5nsP\y\2jjip_* ;w`HV?"?Θ1Q,=J#HēI 6-t9wąӅ\ )#ބY0lEBF@eWڜ #r7T3^ǝby_*/^6Eb2GJ ](p$)]{Wj&"k~5vlw,K&:в>&'N Dʫ4p5*r4"6+*0…j(\;бk's75'؝2c*3e4ʬv;}Jj'n)+FVTnŃZ($chQ@2CfNio` Q/ O^u RaVvd̴efH#-?*LB5.osū/#PqIs2q> 5im8f?&T(+g.PKh<p`wՐG3sҨX"(s ñ5i_ jV'-iVS@ TG*e 4)̒zJm0K*vק֯G@o~eBs@!8)*k65bWrձ( d$v2>l$mȚl|"ڪMg%r{JF9bOMSe?扭&:U @ rD1aLehC+)_j;Տ F$敆A߮k<\Ի+A@R$qM@uVhǙCZ}@mV-m*jc觚.q.Ph)$o FNU SDsS.?4 b<ǭJ.4*q԰̊w@#fr3ޣN7svh r5"PT :8vI39c@f`W9<$uJ0'٨Gaҩv7ʋڋ(AV(wʬ܎-Csxq6r(dS" ZWT 2)j1q*A\1 AGF`F: _Y~SW9*D`&t2OzFȨVpv$穤: 2TJB vpAg\ƭqIDAT8˕+agwfo$%n%9(L#D'ɉRl J)Y9ݫ>3=m^5iDk@nJmFlApZnAnHoDqDrXrKvdv`tHvN{nwJ}b{M{Sm}VxiKLMYNT~YOPvWa]]XnsY_Zj``Š[Ë\|ËbxŌ]mbiƍ^ǎ_ȏ`kɐaȐgvŒaɑhÓmxƔh˓jǕiƕo͔kȖj˜pʗe|ɗkϖm™w˘g˙měyÜʝiƝ{Мjʞpȟ}ġ}ˢɢͣzͤѤv̥ħΧԨ̪ѩȫҪˬέЯбӱҳԵ׷عغ¿íƵT*tRNS@fbKGDH pHYs[e tIME 0ݼ IDATx{PTk!PAZJՅNaJP@VѕJ j$MmLDkZ4ڴX)jP*3(X#(R AGG:{? AH9Dh/._r $%JX_r3zs=]>WMMuLכAg@3[7}AUW#ekkk3^C:-P]fۗGz`**ʔUQAjo=G+@*(.|~%eES޹MZ_m/޲mysm-))>2 mo#{m۶u@p >^WXX/ [A_@_#<[lPwH!^%L{oDw/w>ZDB?+oO:FBWYsn0̙_mW i@8Bpn9󏷵-[|pHhȀ3hwl]ekD?^ Y3 p(e:2RfT;Ͽe ]hH5ε;lBwOټ0o./WZf-jQ!{! K w d`< 8ߩz\R"zob'՚Fhwd.o_`5ƚ@Қ L5չk,&`0\mΗ?hExh4chfOS-π9;qFbQLl8\Sui^aIT5CefrR 5yd%0O 4xYϢLJyWs}>/Ϫ.d2nipI&DdKo}ɰa⼘9SR`,3Y&}}ݽ9b(̓GvA> C ܜVgA|@6w|<)Χ@2sD o+ϙ}TgX@y|7;K 7$lH9pdjz?1fY>~?|؂_\߁|+hK,`AZQv_Ct |:Z'C9>jgtQXxS< 7l8l0uBW(}%ۍ->UOiԂXX8c% HR#YڂnjA@]B% ' Bw@ t Q Q#&So| g5 '@ /)n޼Y9q 7_``@qA(7mڴy "r<ؿ€I.B[#d} b}~" TY.H\O jdo8o$}A%I,B<ނ9 z&Rh?ƹ)B4f PYqDS|MM>Y@*$=c|pΌ~#Y`=o||j%P@utd}J-'VGM>T Ă(Pʧ=0Aj4Ko(o)b8j$J*c}S %0}LvF `aPYm/]w]tZC n/]r͛lYIL-ߕ&uOFfKj5[=ݻw#E1,8~~\>|Caf`b|=#}(>+$fi);~mj"WaVr> ۫8]^;v o5f}F|KCKCK j;f~مREhoZ_f=0#}F|2 5#((_)6Hn-"CЈs|5w:'2/FZl8s/8sgp$N܋Ə.9^e| ORm屢l{㯧o?絩c Ψ|uϿS߽t{8ZmaG7\V.F>xP cG`G/Y?Bm/yt>֗zӾnՏ ?x1tv4Q_BWmP H/}eP x+SAlIENDB`aiscm-0.15.1/doc/assembler.md0000644000175000017500000000277513213600051012661 00000000000000# Built-in assembler The built-in Intel x86-64 assembler facilitates performant implementations of numerical methods. The following example shows a function for negating integers implemented using the built-in assembler. The function then is used to negate the number *42*. ## Function definition Here is an example function negating an integer: ```Scheme @../tests/integration/asm.scm@ ``` This will generate and call an identity function with the following assembler code ```Assembler mov eax,edi neg eax ret ``` It is also possible to use jump statements and labels: ```Scheme @../tests/integration/jmp.scm@ ``` This will generate and call a function for computing the absolute value. The assembler code is as follows ```Assembler mov eax, edi cmp eax, 0x0 jg 0xb neg eax ret ``` Setting the environment variable *DEBUG* to *YES* will cause the JIT compiler to display the assembler code using the *objdump* command line tool. ## Virtual registers The *jit* function provides a higher level interface with virtual registers and operator mappings. The following example defines a function for adding two integers: ```Scheme @../tests/integration/virtual_registers.scm@ ``` The *jit* function also instantiates loops for array processing. For example: ```Scheme @../tests/integration/virtual_arrays.scm@ ``` ## Interpreter callbacks Callbacks into the *GNU Guile* interpreter are defined as well. They can be used to generate machine code which handles Scheme objects: ``` @../tests/integration/callback.scm@ ``` aiscm-0.15.1/doc/array.md0000644000175000017500000000710513213600051012012 00000000000000# Arrays ## Array construction Arrays can be instantiated using a type specification. Note that the elements are not guaranteed to be initialised: ```Scheme @../tests/integration/byte_sequence.scm@ ``` Uniform arrays can also be created from values using type matching: ```Scheme @../tests/integration/type_matching.scm@ ``` ## Multi-dimensional arrays It is also possible to instantiate multi-dimensional arrays. Again elements are not guaranteed to be initialised: ```Scheme @../tests/integration/2d_array.scm@ ``` Uniform multi-dimensional arrays can also be created from values using type matching: ```Scheme @../tests/integration/2d_matching.scm@ ``` ### Conversion from/to lists Scheme list objects can be converted to uniform arrays and vice versa using the methods *to-array* and *to-list*: ```Scheme @../tests/integration/to_list.scm@ ``` *to-array* uses type matching to determine the most suitable type. ## Dimension, shape, and strides The *dimension* is the number of array indices used to select an element. The *shape* is a list specifying the size of the array in each direction. The *stride* specifies the internal memory layout of the array. ```Scheme @../tests/integration/array_shape.scm@ ``` The array *size* denotes the number of elements while *size-of* tells the storage size of the array. The *get* method can be used to extract elements or array slices. ## Boolean arrays Boolean arrays are used to store *true* and *false* values. They can be converted to integer arrays and back if required. ```Scheme @../tests/integration/boolean_array.scm@ ``` ## Integer types It is also possible to specify the array type when creating an array from values: ```Scheme @../tests/integration/typed_sequence.scm@ ``` Note that the integer type can be specified using number of bits and signed-ness instead: ```Scheme @../tests/integration/integer_type.scm@ ``` ## Rolling dimensions Given the following image ... ![pavillion.jpg](pavillion.jpg "Test input image") ... rolling the dimensions will result in the following image: ![rolled.jph](rolled.jpg "Dimension rolled") ```Scheme @../tests/integration/roll_image.scm@ ``` *roll* and *unroll* cycle the dimensions of the array around. Here is and example with a 3D array: ```Scheme @../tests/integration/roll_unroll.scm@ ``` The *project* method can be used to extract the first slice of an array. ## Cropping arrays and dumping elements One can *dump* array slices from the beginning of the array and *crop* the length of the array, i.e. removing slices from the end of the array. ![cropped.jpg](cropped.jpg "Cropped image") ```Scheme @../tests/integration/crop_dump.scm@ ``` The *dump* and *crop* command can also take a list of values in order to extract a part of a multi-dimensional array: ![crop2d.jpg](crop2d.jpg "2d cropped image") ```Scheme @../tests/integration/crop_2d.scm@ ``` ## RGB values The *rgb* method can be used to combine colour values and images. The following program swaps the colour channels around: ![swap-channels.jpg](swap-channels.jpg "Image with colour channels swapped") ```Scheme @../tests/integration/swap_channels.scm@ ``` ## Complex values At the moment only integer complex values are supported. Here is a small example using complex arrays: ```Scheme @../tests/integration/complex_array.scm@ ``` Since native integers are used, numerical overflow can occur. Note that you can use *to-type* to convert an array to a more suitable type. ## Object arrays It is also possible to use arrays of Scheme objects instead of using a native representation: ```Scheme @../tests/integration/object_array.scm@ ``` aiscm-0.15.1/doc/Makefile.in0000644000175000017500000004614713220460252012435 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_have_opengl.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/guile.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = index.md CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__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)" DATA = $(doc_DATA) am__extra_recursive_targets = bench-recursive recheck-recursive \ integration-recursive reintegration-recursive am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/index.md.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVCODEC_CFLAGS = @AVCODEC_CFLAGS@ AVCODEC_LIBS = @AVCODEC_LIBS@ AVFORMAT_CFLAGS = @AVFORMAT_CFLAGS@ AVFORMAT_LIBS = @AVFORMAT_LIBS@ AVRESAMPLE_CFLAGS = @AVRESAMPLE_CFLAGS@ AVRESAMPLE_LIBS = @AVRESAMPLE_LIBS@ AVUTIL_CFLAGS = @AVUTIL_CFLAGS@ AVUTIL_LIBS = @AVUTIL_LIBS@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ GUILE = @GUILE@ GUILE_CACHE = @GUILE_CACHE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_EFFECTIVE_VERSION = @GUILE_EFFECTIVE_VERSION@ GUILE_EXT = @GUILE_EXT@ GUILE_LDFLAGS = @GUILE_LDFLAGS@ GUILE_LIBS = @GUILE_LIBS@ GUILE_LTLIBS = @GUILE_LTLIBS@ GUILE_SITE = @GUILE_SITE@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAGICK_CFLAGS = @MAGICK_CFLAGS@ MAGICK_LIBS = @MAGICK_LIBS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MJPEG_CFLAGS = @MJPEG_CFLAGS@ MJPEG_LIBS = @MJPEG_LIBS@ MKDIR_P = @MKDIR_P@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PULSE_CFLAGS = @PULSE_CFLAGS@ PULSE_LIBS = @PULSE_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWRESAMPLE_CFLAGS = @SWRESAMPLE_CFLAGS@ SWRESAMPLE_LIBS = @SWRESAMPLE_LIBS@ SWSCALE_CFLAGS = @SWSCALE_CFLAGS@ SWSCALE_LIBS = @SWSCALE_LIBS@ TOUCH = @TOUCH@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ 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@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUFFIXES = .scm .png .jpg .md .html .tmp .css .html5 .mp3 PANDOC_OPTS = -s -c buttondown.css -f markdown -t html PANDOC_VARS = -Vlang=en -Vauthor-meta="Jan Wedekind" -Vdate-meta=$(DATE) \ -Vpagetitle="Guile extension for numerical arrays and tensors" -Vtitle-prefix=AIscm \ -Vinclude-after="
Generated by Pandoc - $(DATE)" ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/aiscm/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 RUN = $(GUILE) -L $(top_builddir) doc_DATA = index.html installation.html assembler.html io.html array.html operation.html convolution.html \ fubk.png scaled-pattern.png pavillion.jpg swap-channels.jpg rolled.jpg \ cropped.jpg crop2d.jpg star-ferry.jpg inverted.jpg divided.jpg modulo.jpg \ roberts-cross.jpg sobel.jpg box-filter.jpg sharpen.jpg \ aiscm.gif debian.png ubuntu.png source.png package.png \ fubk-colours.png sintel.jpg v4l2.jpg gplv3.png amd64.png travis.png \ buttondown.css EXTRA_DIST = includes.scm dependencies.sh \ index.md.in installation.md assembler.md io.md array.md operation.md convolution.md \ aiscm.gif debian.png ubuntu.png source.png package.png \ fubk-colours.png sintel.jpg v4l2.jpg gplv3.png amd64.png travis.png \ buttondown.css CLEANFILES = fubk.png pavillion.jpg swap-channels.jpg pattern.png scaled-pattern.png rolled.jpg \ crop2d.jpg cropped.jpg divided.jpg inverted.jpg modulo.jpg roberts-cross.jpg star-ferry.jpg \ sobel.jpg box-filter.jpg sharpen.jpg \ *.html *.tmp MAINTAINERCLEANFILES = Makefile.in index.md all: all-am .SUFFIXES: .SUFFIXES: .scm .png .jpg .md .html .tmp .css .html5 .mp3 $(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 doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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): index.md: $(top_builddir)/config.status $(srcdir)/index.md.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(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-docDATA: @$(NORMAL_UNINSTALL) @list='$(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) bench-local: recheck-local: integration-local: reintegration-local: 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 check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(docdir)"; 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." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) bench: bench-am bench-am: bench-local clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA 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: integration: integration-am integration-am: integration-local maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: recheck: recheck-am recheck-am: recheck-local reintegration: reintegration-am reintegration-am: reintegration-local uninstall-am: uninstall-docDATA .MAKE: install-am install-strip .PHONY: all all-am bench-am bench-local check check-am clean \ clean-generic clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-docDATA 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 integration-am \ integration-local maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am recheck-am recheck-local reintegration-am \ reintegration-local tags-am uninstall uninstall-am \ uninstall-docDATA .PRECIOUS: Makefile fubk.png: ../tests/integration/fubk.png cp $< $@ pavillion.jpg: ../tests/integration/pavillion.jpg cp $< $@ star-ferry.jpg: ../tests/integration/star-ferry.jpg cp $< $@ pattern.png: ../tests/integration/write_image.scm $(ENVIRONMENT) $(RUN) $< scaled-pattern.png: pattern.png $(CONVERT) $< -scale 320 $@ swap-channels.jpg: ../tests/integration/swap_channels.scm pavillion.jpg $(ENVIRONMENT) $(RUN) $< rolled.jpg: ../tests/integration/roll_image.scm pavillion.jpg $(ENVIRONMENT) $(RUN) $< cropped.jpg: ../tests/integration/crop_dump.scm pavillion.jpg $(ENVIRONMENT) $(RUN) $< crop2d.jpg: ../tests/integration/crop_2d.scm pavillion.jpg $(ENVIRONMENT) $(RUN) $< inverted.jpg: ../tests/integration/invert.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< divided.jpg: ../tests/integration/division.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< modulo.jpg: ../tests/integration/modulo.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< roberts-cross.jpg: ../tests/integration/roberts_cross.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< sobel.jpg: ../tests/integration/sobel.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< box-filter.jpg: ../tests/integration/box_filter.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< sharpen.jpg: ../tests/integration/sharpen.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< .md.tmp: $(ENVIRONMENT) $(GUILE) includes.scm < $< > $@ || rm -f $@ %.html: %.tmp buttondown.css $(wildcard $(top_builddir)/tests/integration/*.scm) dependencies.sh $(PANDOC) $(PANDOC_OPTS) $(PANDOC_VARS) -o $@ $< # 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: aiscm-0.15.1/doc/Makefile.am0000644000175000017500000000606013220457302012414 00000000000000SUFFIXES = .scm .png .jpg .md .html .tmp .css .html5 .mp3 PANDOC_OPTS = -s -c buttondown.css -f markdown -t html PANDOC_VARS = -Vlang=en -Vauthor-meta="Jan Wedekind" -Vdate-meta=$(DATE) \ -Vpagetitle="Guile extension for numerical arrays and tensors" -Vtitle-prefix=AIscm \ -Vinclude-after="
Generated by Pandoc - $(DATE)" ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/aiscm/.libs:$(LD_LIBRARY_PATH) GUILE_AUTO_COMPILE=0 RUN = $(GUILE) -L $(top_builddir) doc_DATA = index.html installation.html assembler.html io.html array.html operation.html convolution.html \ fubk.png scaled-pattern.png pavillion.jpg swap-channels.jpg rolled.jpg \ cropped.jpg crop2d.jpg star-ferry.jpg inverted.jpg divided.jpg modulo.jpg \ roberts-cross.jpg sobel.jpg box-filter.jpg sharpen.jpg \ aiscm.gif debian.png ubuntu.png source.png package.png \ fubk-colours.png sintel.jpg v4l2.jpg gplv3.png amd64.png travis.png \ buttondown.css EXTRA_DIST = includes.scm dependencies.sh \ index.md.in installation.md assembler.md io.md array.md operation.md convolution.md \ aiscm.gif debian.png ubuntu.png source.png package.png \ fubk-colours.png sintel.jpg v4l2.jpg gplv3.png amd64.png travis.png \ buttondown.css CLEANFILES = fubk.png pavillion.jpg swap-channels.jpg pattern.png scaled-pattern.png rolled.jpg \ crop2d.jpg cropped.jpg divided.jpg inverted.jpg modulo.jpg roberts-cross.jpg star-ferry.jpg \ sobel.jpg box-filter.jpg sharpen.jpg \ *.html *.tmp MAINTAINERCLEANFILES = Makefile.in index.md fubk.png: ../tests/integration/fubk.png cp $< $@ pavillion.jpg: ../tests/integration/pavillion.jpg cp $< $@ star-ferry.jpg: ../tests/integration/star-ferry.jpg cp $< $@ pattern.png: ../tests/integration/write_image.scm $(ENVIRONMENT) $(RUN) $< scaled-pattern.png: pattern.png $(CONVERT) $< -scale 320 $@ swap-channels.jpg: ../tests/integration/swap_channels.scm pavillion.jpg $(ENVIRONMENT) $(RUN) $< rolled.jpg: ../tests/integration/roll_image.scm pavillion.jpg $(ENVIRONMENT) $(RUN) $< cropped.jpg: ../tests/integration/crop_dump.scm pavillion.jpg $(ENVIRONMENT) $(RUN) $< crop2d.jpg: ../tests/integration/crop_2d.scm pavillion.jpg $(ENVIRONMENT) $(RUN) $< inverted.jpg: ../tests/integration/invert.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< divided.jpg: ../tests/integration/division.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< modulo.jpg: ../tests/integration/modulo.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< roberts-cross.jpg: ../tests/integration/roberts_cross.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< sobel.jpg: ../tests/integration/sobel.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< box-filter.jpg: ../tests/integration/box_filter.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< sharpen.jpg: ../tests/integration/sharpen.scm star-ferry.jpg $(ENVIRONMENT) $(RUN) $< .md.tmp: $(ENVIRONMENT) $(GUILE) includes.scm < $< > $@ || rm -f $@ %.html: %.tmp buttondown.css $(wildcard $(top_builddir)/tests/integration/*.scm) dependencies.sh $(PANDOC) $(PANDOC_OPTS) $(PANDOC_VARS) -o $@ $< aiscm-0.15.1/doc/operation.md0000644000175000017500000000543613213600051012701 00000000000000# Array operations ## Unary operations The unary operations are: * **-**: negation * **~**: bitwise not * **=0**: (or **!**): check equal to zero * **!=0**: test not zero * **red**: extract red channel of RGB value * **green**: extract green channel of RGB value * **blue**: extract blue channel of RGB value * **real-part**: get real part of complex number * **imag-part**: get imaginary part of complex number * **conj**: complex conjugate Here are a few examples using those operations: ```Scheme @../tests/integration/unary_ops.scm@ ``` Applied to the following image ... ![star-ferry.jpg](star-ferry.jpg "Test input image") ... inverting the RGB values yields the following image: ![inverted.jpg](inverted.jpg "Inverted image") ```Scheme @../tests/integration/invert.scm@ ``` ## Binary operations The binary operations are: * **+:** addition * **-:** subtraction * **\*:** multiplication * **/:** division * **%:** remainder * **<<:** shift left * **>>:** shift right * **&:** bitwise and * **|:** bitwise or * **^:** bitwise exclusive-or * **&&:** boolean and * **||:** boolean or * **==:** equality * **!=:** unequal * **lt:** lower than * **le:** lower or equal * **gt:** greater than * **ge:** greater or equal * **min:** minor value * **max:** major value * **complex:** compose complex number Furthermore there is **rgb** for composing RGB values which is a ternary method. Each binary operation can combine arrays and/or scalars. Most scalar-scalar operations are already part of the Scheme programming language. *AIscm* mostly needs to provide a few numerical operations and some support for RGB and complex values. ```Scheme @../tests/integration/scalars.scm@ ``` One can use an array-scalar operation to divide each colour channels of an image by a number. ![divided.jpg](divided.jpg "Divided image") ```Scheme @../tests/integration/division.scm@ ``` Another example is using the modulo operator to show the remainder of division by an integer for each channel. ![modulo.jpg](modulo.jpg "Remainder values") ```Scheme @../tests/integration/modulo.scm@ ``` Each binary operation can appear in scalar-array, array-scalar, or array-array form. Also note that the arrays can have different number of dimensions as long as the tail of the shape matches. ```Scheme @../tests/integration/binary.scm@ ``` ## Tensor operations Tensor notation is a compact way to describe operations involving multi-dimensional arrays. The *tensor* macro is used to declare a tensor expression. *dim* and *get* can be used to create indices and access array elements. *sum*, *prod*, *largest*, and *smallest* can be used to perform a tensor sum, a cumulative product, or finding the largest/smallest element for a given tensor index. See examples below for the behaviour of tensors. ```Scheme @../tests/integration/tensors.scm@ ``` aiscm-0.15.1/doc/convolution.md0000644000175000017500000000270613213600051013255 00000000000000# Array convolutions ## One-dimensional convolutions One dimensional signals such as audio samples can be filtered using a 1D convolution. Convolution can also be performed using composite values such as complex numbers. ```Scheme @../tests/integration/convolution_1d.scm@ ``` ## Two-dimensional convolutions Convolution can also be performed on 2D data. ```Scheme @../tests/integration/convolution_2d.scm@ ``` ## Image processing Here is the test input image for comparison. ![star-ferry.jpg](star-ferry.jpg "Test input image") ### Box filter A simple filter for blurring an image is the box filter. Note that convolution is performed on a colour image. ```Scheme @../tests/integration/box_filter.scm@ ``` ![box-filter.jpg](box-filter.jpg "Box blur filter") ### Sharpen Image sharpening increases the difference between neighbouring pixels. ```Scheme @../tests/integration/sharpen.scm@ ``` ![sharpen.jpg](sharpen.jpg "Sharpen") ### Edge detection Convolutions can be used for edge detection. Here is an implementation of the Roberts cross edge detector. ```Scheme @../tests/integration/roberts_cross.scm@ ``` ![roberts-cross.jpg](roberts-cross.jpg "Roberts cross edge detector") Another popular edge detector is the Sobel operator. ```Scheme @../tests/integration/sobel.scm@ ``` ![sobel.jpg](sobel.jpg "Sobel edges") ## Conway's Game of Life Finally here is an implementation of Conway's Game of Life. ```Scheme @../tests/integration/conway.scm@ ``` aiscm-0.15.1/doc/travis.png0000644000175000017500000000232713213600051012371 00000000000000PNG  IHDR@=v;? pHYs  IDATX]lSe9kQF}(d3  cEu1 c40Y^腉7LB0?H48>!u V9Jg&.'ytttrRV܂ st]$gq59vU/`w/.* BŶM_'6փf4WC'@uQC5,| ct Vj 7 |(--ehh۶Q8d6Ӯiћ6g_b,rF++'w?~†gH{Oxl6m#$ss| rƢ <!H*'٘&<38D^\8 ",KsoJtq}臬QN_}}}gӛB$)AmpSu||ױO{5jRJt ~wJyck>8W.B/Pᝬ~2D"9r[ N(̺i^ts0.{6=SS&''K$XNE.NyxEaϞ=466҂iIgg'h4gd6Y8]_Mm <`s۵r䭚xC-E}}}{G4%%,NM,4M^oܙG,GmV,up#j?BO#F-\i._Mʙ_5NC$s bՈ(+(,P2B`_0R!Sh Ú(Ķ`0Mz,k2_7BUv-7(IENDB`aiscm-0.15.1/doc/source.png0000644000175000017500000002332513213600051012362 00000000000000PNG  IHDR@vͯPLTE !()'/1.9:8@A?HJG.iQRPZ\ZEybdakmjYsurau}|h$sЁEɆƜ[֔oլ}ݩىܘ̳&hbKGDH pHYs+tIME ! IDATx] _w@ `t0$tBM}oV%:AONx'˶kXZ+ˁ@;YGYB2֒D yt9+/W$ucklg̠,w`:TL`6`\z\,Z囗U_l6 DVZkt$՛l3AYNo`k D1~NW|Efk(\HAMw^x7l`~pҗ CrIpH@3Q ZB"{fK ^V%1Hݗ925oQqq n 2 np(>W< [DkIHV0AJ>a "q) 2&Q Ql8!`Lࡉ/Cvz=;5(\X- eqs3M=y3 5iձ1.;eRI=d{)9[6+:}1dSxF!tsdptuU0[Y?=VNfK)6JY=tTue*`޾:웨nRKֶ 2o@BC䭑m uZ ]l`B5 {IJגh%.ga(KXhf%q'6lg4?=.S;5V2D!#4hNЖArވalÓf"嵥gɖ^ иGY'ER&Eirx \kg:Kx uDٳfn2k=]9EoH(e fbrF}բWY]r]Y~S~_"rmr1urMv.EI$Kb)ǃx\3$QI^rf9P]\N\.>h|! ڈ‚W(]Z4/lP,Njj>~?KJ4+)ݱ Eͮm^[QiF̖jmD6l*xa1鬍NLBmԜ'_ Rbm#cD<Z^F 6s:o'6/,B蓅Eކ&Df%xC'Bp  =ylz^ղs˦-ʵQ1rm ֯àl]yj5(ۯ6jsF5WuKSORhDk&hhoXUsT 7Tvln^yƷp@a<'qaHE[\$~tͮ @n]ڥf |P.O&QGi-WΎR?&UU~6y*4^W5̖dA2z٤ZV dUK#mqa6psj9v7i"ĶJ *)*[^]eU|0a캚hLr$'qaY" D28(Z"A >e"#Q9.5)[X!ߠ 0K#?C1J ؐ}ȩ([upwehc[krp;:괤#[(k$zߜG$ͅsWjDHB-:Xgե6xI!G IΊ#Z[:҅31qG<=Y%1.t^|uQ O"ѧ{WZ~ `ECaW{9TGMG &VzCK0/C֢h:L\I_|RsᅆQӅB9!SUS&mGǵ sX_}K] $R~4W㥱7c(iarI/&}5Y.j6ˤo2Դ3s C w뉑ѣ> }P*mTBq_n{W(=C\} >p_CGD&Cڍ>:`?lԇ‹apXA Lٰ+Im:87JC!~]VWy]-a3_p-b43DrRa+Ψ̠j\ 1LC%o0e? L2m|]dm`Ojo;sjБaݶ(W VrcJ#K7o&nYv6d/@}f zCVx:*{a!&y!^8d|M?)%`E뼏29'>*5 8:y\)~jžDU\>5^1h?-r;Jdj2GO1БJ ZN\W[YU<5EHͨfV\>?|=CNPk"X? {n(1,TqQ|N׷\~U2ԿYDžϳN˲5=%h<}VrNoۺ_D$*aK;tr'pY§( f{{}P{yPJk}'yr"yeMnʹ6냥 MOl;,X8GbsمN4&+w5D,mxऱ\RW_8m7q0<9s{aB n!1.A}Vs:gڌD琜[＀Fv, 0\)J `B)sQd h5(;@S F0Pу9:رFi kF_ %}K4nrR_N}0q!?~@ZuC <,Bdmg40&ѥ i]huVKes% .qc_5aZI)GA3"1D9k\<"k`5/h{KC/&oN¥Cݦh =`uVAh6P90b ]х:>:T~?}\{^Q`2Fe3.|ͤ >|\[?SF%@P@Qq! O_f3C18 p0MaĔtm27|xS y}s0R] 54|3tR MAgic@Gx^9aYoyd<,ڠVT!n2݆!{DEODvlY;[z17uJcx`OX9&9$e(N#)=BѢXW vPBA 8qeh# h3 F[ ]f@fN\JʵӤ?9L"&+jPpw&:n$Dy^>W܌V6EC^8LQ-c`T>׹6 on>Bַ{#(J(:%D$1<}TtyVv{+onݝ| z',WjQi˝ח' &eO*Ɲ<>F9`Һ77r{sB?pwQvѼL*/qPRr:XEP.,T j0Vj{}7Di5iSdF+ 8P3UE;1#U-KA:+KE޶SE-^F [mL6(1R=?[e:Ps :ggה׹&nv:Uwpw譝XPEb4vʴfCއ3>ϗ أ` u$ev:Ikۖ*)LuV@#?²37`90"Ks0>:y'2GvZ6ʆՔ+Bv.8O # S>D-?``k$ޟvXS^fs.n'cs 9Rps'IJ 3I'cpָ­gM*^DA ߩkC|Yg_bS`"khg~4hMg"H ))8fӼAz/ #p9,?FP~ $|fߵf)@Sn3t_|˂ʇ-(fG'Q >ŧAT_#n@tuA*Lgc7S5Ǻ@#tZAeNJ܄Fc;ˢsM/?TzL*u㺌zѱѓۂ3t5` }#s¡(ް&8^ 1 XPwNb:S 0@L$Bm$? |҂ tʿ@C0`DR/ `X|$A:*0"U@X+N;CS``/Pπ~&p`Sd|'Ο; QVQ-ԩ0QDMŔQX%CA6KJHg'MlN ~ NZ4fi u948:kA{QOr**8}ΜݐT@St88,SB$P/ף?O1\0o&0OЫ6gL$b٭3/!H6>mR/XCD q\M`{)\mPGSəoW0z1 cmJɿ>#7%g#_m۫n *sOd&[PPaM/;f4E4t0.MegTx8ˬMo響d~׹aBWƨ"!H|Xx6*RnŲBVdmf5wxKQH,tb2эaH"< rp Ys??gu0>5eR}z7JVZ6-VL}2 O0nmƏpCMﳝ!+&RMw#۩:)a<4M&h9l<|x;ފQdՂ;f]GUuWF)'P:] TjXuneQyg>3kc(60LN6daa.2 5$yGnR6+0D~j9W(52~(t9製@D͠ApiS;wEtGB }ЯTUfՃY&N 1 ?փv^8`K1||>k K Ӵ`p~%bwv@`5F>HS55p> (Gd<m3M+z>"2H=C>j=@sh1(g@(W%RDuy4nrE4`kqH<#+#rydAԎ>diF5@Mkj *;G ϟmm:QTxMNrGq킒5?hwgga@KV))!JTyo ԅ0A&CCoNdT(GY3s״ce粹& CR\7,n8&pT>C[-x~|}UtW0ۙd}]5jJ'O|_DZC|qæd]𠫘&04}FIɼtȜCfDhj67|KSZ4J'4 ⡩BXSgD}QAMP]`C1L)i`tYC(!>#Օ5`3>>3?J j T1lR.jsW ^NF C$UMHrUMP 5ǀ{Nbn㝲N u m:1D]$/mi">/lSO+`Xceo|5jy{4E@ʄ^h/ |}@/@0k̇Yz||Zf;Oe݁N5UL>3v=@Ģ]`)QUeWS')N4ٞưG~$[fenCΝoJ%H)::6elg:zHh74}H: UHq 7힚ɻ6ww;zc]vl՛ëYDQoP0ThR$x =!ۛv 7~V[\d~1j7@d.+iBT3D3vP.ުn w[v &KO9HS d<Ϯo"xC1ψxcL)`vޢ$^K5ExnoEa:JDyb$Reզ @=U"VT!KBs)zl#!KP0ECw_TQyB9zzn_mD2_7ӛEmt=Pkwz˷w +ZAb!+xLJA $;t-*{xۍKS# {,&{GmŌ5eG_~3!TG`vu1gI_͑EpE8_jYUUv/Uad4f=Ԥ<_MUoAuQeFQrke p/f]"UE?<9MoC]WwVH(IK+sKS.,JXNP#|{iPUlzF;j4QZi'ʓZ)8֝M8&6h]ﴭx uuh]2jP ,4X6*vC֝u8XB2h<X$'(9\FNgřiS@}}m;|_'/IDAT'I IAY#4a9>XGq<x G~@-鲟;l|"6cJ; :$}CDs;>*-vmGF*%@Q#_-L ?$-TF57>ͤRsWYa$AOGSL\ AɐF}j,t)Q֙=~M_v$4~>}j5hz'F4(HtcFcgu 0xhV1ooW;.kT\H r!/ E' HÉUmM٩Cr*c| ]}O". ~h8m@T a(C` @E U'mHQąt:Q*Md]`JEƏW݋F"&TB!btt)"C!`>Gt (AojH.#=U@ct M֮ҰnP xiUXC=B,"$M\G3O e(( 8.SեEJ D{_TM)W(8jAI}(sN8R[SՋ&cmUu@ øu4)}B4<(x<(}A]<+:m&|Z◢Zc D4vV@ZkKІGTִRKa ϑ;r#$jNU%nL 7C7\Pn~7spn=~SH=A\9,csحoRWkhei?|lo[ӻtJ|2ݟ;"W4>^)AC3Fĕaz"^ю1W+%n[/ [yMzZݤQxߣdžn\9$ !v[L"QR#p!M09tnZt}VwwrRC#^>6$ieUa(T CY),P fDPۮ-pw _lx TZ8 XNbrU9TQ;Bga}ZhvBth,5X޴᩽~.9$tU*WQ~wobn(u;9ިiS@tGi9gTa]]n9N`\ങyؠ_4LFP)㏔@*xe&|~|$MoDpy)d5EF=w43 C9PNx3Yg]>e*Ja9tIENDB`aiscm-0.15.1/doc/aiscm.gif0000644000175000017500000033124113213600051012136 00000000000000GIF89a@@2:("8"CF)$P6/O#OF;^,,\ bdw34qVTQe[MjjVqs^op[KLpyzgrrr}rmow~~33deż!!TRender Date: 2016-08-20 20:57:44Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! NETSCAPE2.0! ImageMagick gamma=0.45455,@@@pH,Ȥrl:ШtJZجvz}R+WlLVOcblp ))/0lyL1g,(*b`+g( ,,tvxE0*()"",s," %*023/)$ $&)-d($"&(~ t!/d.)! "% )cb5!"\(г!B\(aK` @00!@ uAF#xZhA "2XBbL"Bgv{,HsÆ '[tB$L0S%PJUB*hȐ b vmx.(+S0lРA *Ȳ$iQ"COcrs-JE,&.=v Q5ߍ%.yɌUD@UϕګF,&V*d*{ JKo[?$6 @@ Gke4Ǎ*4z!S-(ZJ9  E#g pDSjyRHw 6C3:@thZ;Ru %`\rЂ18H<%{S^jyFD"S!$Z!P0{@+S~ܖ7Yx_J SiP6ٔD6ke0ŽᝐecvF ` APr#\~0\aJHj!@ٔp4Y*fF} kA{4ٰ¿kѺlAMlBP뒷{;.FE KN \'pX! -[7}gB% %N,@XᅢRɹ@ gRK!Dh̨oAEuS(\r-T"}&YJn&TAeC˵Lj `+ 8; A@H7Coz-ԜIl 84VS1j :[B鐛ZPIxPz JJ)@/\p to=+@B3p^tވ0cK y+ @9/@` P O3% 1 Ah @7AU!k׽y#P T' 7xڒ 0 _a-H '"3]9)="*x( "`.Q /Pb76.c7.a.72Dc$Q H?<*!H%p4d8IT b3 !!TRender Date: 2016-08-20 20:57:44Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@6*8",%:*"=1(G3,@!NE9,-] agx$$j78i&&s9:w^WXYSQOjjUqr\klXPQgyzgjkn`]R}jlsou},-ccĻpH,Ȥrl:ШtJZجvz+Ti%ji+ɬh y4 A# %0p}M/(j$"  (H/%j  &Fj$# 4/'m },& #"؛]h! ,\B2FMya,Z]d_P8N*,ĖU !Xb2 0|CLLD܀(; T C 8X{*qACC4pBC UъĄWD#b 1 q\ȝqu"20xKX?( ,Z 'X0q8|igBP3.^"Ts`\6;*V(…c0 V7eC>|k~s 1u| + *@|A!FppT@-U+ IL'Twx q%0eVnaW" q=D }P=`h38ea #E3Te-cVYivb F ^N&-Lb@ qҲh<%a6A*Q @YRIB ,BR'*hN`DDyL7ĂF!BE )P)1ܚ2:@*lVj RNb!d2_w_J³%[ k2PL!0Av8o0!>"BTpS]ue 5f^DΜ|L0@(<%' ',; .WA]5u!0zPtIWH/ 2$TW"`YJQh"}4? X%kp9Evพ6 (`K&Q0*zD $0AgUW.+-op7ӕ01^rS;z$-:cdA PCn@Tgh1ь_('W #O( !!TRender Date: 2016-08-20 20:57:44Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@' 2 *77$.$;+#>7.C&D-'C3)F;1LD:SF7_**]22] `dz%%j66g&&v22wYXGMNZZ[]a]J_`WccNijUnpZqr\WXeNOpbcd{|fyzyn~m~qnv~''55ƾpH,Ȥrl:ШtJZجv=jO"T:v2BZKBDQS6*$!-z$rO3v$/- hK>4()my H>1**m)".!!~D;0gm$ ###y{>d4g'($ƅyܘ0CU*(޴CJ#4h(1.̍l*]Ddў 0x0$Ty BL($nBrgYCqb˖NME&F?||BsDO< *p3>KxP2)B%C,%I5)J>6JD7UI=g))j/0c67h((w88s[YGIJ[[\Wa\JbaMijTop[su_EFjOPiXYgEFsOPuYZsghiopbxzfdetxyrmrnw}~''78 CDǿpH,Ȥrl:ШtJZجv=r;D)X;+@pzm; R:0%"+ y "3P<(#- y g2M4n g"1m""!$#?n!z ˛>&&g"RP1$"g+ %NF ͊vМ~H(0GwUf\03n1~ H,2?`ysIJ=LHYD(cR !L H|Oqq(d(f̌)D&9StDPիܰ0ƒ i{ WĉN6Ķ"zȐECHX a #GCcx4r_ 18 c5 R1a9[R:,P @ig =x4$Ssm 'Gڵ' H1PPnQv (["a}/P# EMc%j' P J>ք ! k# cz"2 q 4)1Pd  < 0oQa 3LN% (0 xu} VE PX E*@ g$~jJv%twP >$P ]*Ai:qFo-fp`µN18]%AmwJAfk=l"XmVWXTd*^umv'gP`980eY wiXVCK]u.Z7 ɭs2 ED6Y'e7kT0q}yW,Ws )_ 0 RL~F@ )v1 }NxG0QH9@J' T F G:' U7m0B lPR,p0f8IʙlC nHQ0I@] ` W|1d8C|@ _-``@l @aQ&(E7-⫱jMv<"Zhjh%L`\7q_FY& @.F H߰Rn؈-~Z˜ HgTP J*{-HE)P%I8R  76ƀEMH(\/$Г_Cdiq~? T! lA 1ۗmVn $mG+0l-Aޱ%tHIQKt\k#f8MP3F(ȃ*bшLH" ށ ό#C[͂H*Ġ&7jxcF89@ۢ䁛 9B,|,e)hzK L<ꐷ`%GOܰ- 8+ÎWw_A{_DQoRy!!TRender Date: 2016-08-20 20:57:45Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@6$9)#;1,<D$D*#F5*G<3CJD8QE8WP>++j66i++t88ukZYHYZ\KKM`]IbbNjlWop[qr]FFhWXhHHv\]t_`fdecxzg}r_`Mnys56,,ABŸpH,Ȥrl:ШtJZجvMtw\>᱖uX0+56'rw2*- -}Q=*m7==|He&,00=G=+mo./2C9fm o$7B. oo/Ǧ.mm,/ח9۪ IBMH ymAb 5l)ƴ7v=0!0iPF762Q߃̐pE*8rx 6l惾Q7~ӈ- ʳp1O 2pfAÛt.t1ϧm!B`M^4M-tIm!Zmol4H̆guP@ LG#d0Y._5.aL!AK1A˼!s# '.5!&21̉4B3UUݍ `ޔ`0$ $ 9 .:0z@i LSSz3$0 ^ CD@eu ,PݙDFmr@̐*p(Xq PV ,b #xe%piZ-B (0.%$P vq[]MA®#;"h ' 4X4XۓMy) qh)hk^:uyQ7¿:偯{eW)@} R萢n*T X7:k=$hЁ)k A C69#"iA(ءLV~zڧk+t'`.޽Lm·iu$rQf7V!DHf#@b Fy &4曰A͇  $0@ ?lAG[p6 <[&4@ cqaPA [m51I XV`tc8 )d pE𣉺B5u1D%P$a1 .U5Tihjl`y 9ذ f<p 0aYrT"B2G)OUh`і2+̠R{z9чr8@7i8@*V)0 5B cXD\{a9^ BF"# BIJ: "u CdX@ y bF, (D(P")̜Ю {ĚN?x v D*1.˿7C /w4F f.@ .^I!!TRender Date: 2016-08-20 20:57:46Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@:-';E+$L9/D"PE:55_77f66u++mUV\VPDeXM_`ZklXrs^llYEEiHHwYZpxzgkib_`kmqov|55::JJɵҼϷ~r@pH,Ȥrl:ШtJZجvzsm48km.dO7d4tL+x !*+1557-H5*"   ''-2++E1 ox &',12/j4%o   *)-1//5#o *32,3t4!{q &)+2773X)TExĈ)6T@/u 0a iӖB@2R 5#F'5Bر"@)P96^ X6;*:C'J#b%"BHՁ2e@7С/&@䛇  "@Bҍ, Qk7 D"K{5ڐ"| \M؀KїRUPX@LG-+ž30  i:(@zN|  S+hV(h:9a;o '&ʉhs`G_G,#Bk/Xrlx3vE_V/7V9](qI҂W"' Pco=1p DsNЀPJ^Oi8 oO42E _2PA `^ PJ`i u XW Y}8@`jpAHsdaV%h&h .F l@/i;j8) *V6Y ˏ/fi)cW~w òB - PTPokB l B X 08\1ؾ0"8WjDJ *2sYs jH'4 g[ ^* OjC3kVp;c`!Ņ  =ֺͰ*-4'mE !x6=wBmmmS 1TPy+(,Gq#L  v[Sf׎m җ69aG_r| Ď.P&6}.k(l .,RK_?ϾP !!TRender Date: 2016-08-20 20:57:46Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@;/(:I1*HPC:aC;55_88g12pWPMhQJklYqo\DEjFFvVWkwygmkh}roys55RRrrXYªʴҺʹ@pH,Ȥrl:ШtJZجvzަ Ol* "aZ-Ff'o) r("%+.k2,~G7!  0(!(,y5.0C4),,"#+3261n3)")z.- ***3ke4ӿ  .+"+*165,7\Qj*1,^L8=lH'! LZxp1BP.>j!BB9 H{paB *Sv1WǍ$birJP'MZTBƞ5j< $U1PӠ%1#5f )ry\!"y"݋oD4l*`LN[)Ӄ4P|< (bGf (Aw z{@adwC IS$f ` 6瀝U 6|b[E np '@~}p+8@Ah5W7yQ0M~ rX gq<t ]` /dт%R  ( t`/PjЁ8-=V 0P&œ| |$|%w+4 T $cRW"4@ .lH2Р%4| (|J&$b q,"CY0肀 @r h i).Xe+ @\’ Xv@ܩǤP|`( L '@B .wKtAE L6愭J $0 U :AE qۤ'xp0"B -(Ƞ{ A:KqWa AA+o!2lP )d2h"kM`SKf Z@ccKVHK#:ݖ \8h6vUx7g&4,ŏ"ڝ=55م%Üש)N2́QW||Vn!a/{nG4B)BpPA%`( .D0鹍Ih>W{4B 0  o+!yM7@G)hHJ!!TRender Date: 2016-08-20 20:57:47Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@:.(+J5.HVD;dD=55_88f33pUSTfTKg[PjlWop]qr^sj]CCmEEwUVnxygopp_`z{omtxr;;NN^^«ɷз@pH,Ȥrl:ШtJZجvzxLFZƮafB'TTr62qrE4+# wv#p*$*32n51Ct xn1%)316p-#(*(52,dt!#65.3bt7$).n`, j2*6E 9hyՋ@AbRC`6"!`a*r!!@dp:N" 0` $ AXuBa NRp' $P ƛ5 RO$\1 kl ذMPaBh5RYcךAlAXa <P8*ά6Yh,dHT6 È1fqC DPМ; @n .)&5@LzMA  8@!7("YʍdT P$RCٳS<0 +) ͼ.C2GR>8)"" ),YT0A0tH^=:tȄ !B[`&Fpl4 i#J"E;:dqM0 ,ppGPnt/G* 2`ha D i!d"8q}ueS1V.ֈ޲O퓙0FJЀ6)8(gR` ZCҌK; PЭC RH* AB" .0 ]ȐA9:‚ D@AE6#QeV7P"@!A Pp=Z ` [ppBVP\i[Pp@Ž"P I|PWh8HA7`P&)Ņ3&@ f(#CfDZ0(xX0N?] Z0frV"8U $`q`BhAIhba$2xA>0Gzq &*B: d^ O^rd1ԺH 'lk %ph^^W @ueCf!~ & fƪŰ*b"XBZ. op,p]h2KɹaT 7@ 7,>`ZA 7 8)p% ܲ<@8<> tB1>IIUUTUJJPPɻ϶pH,Ȥrl:ШtJZجvzxL.;3}6 w칏z DB07n?e}5sU i Xl@ cF @  $$fb #x0͈q=4Rh}yw(l1×В8\]P'0nW#)$'K a&~ta)~yEemC0CqB`?n7A Y@%Y7E@SnA@e#±X@ B B }AI!p) }"fBJp#%" :DF^>A x+kb ǪFޡ#1/CÆdw l"\QL2'A!!TRender Date: 2016-08-20 20:57:48Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@070(2"H9,J:0@PG6;;j77u,,o[XGZO@a]IijTqs_jkXBBmFFvWWvxygpqqoyv;;PQ{|`aOOff­ɺϸpH,Ȥrl:ШtJZجvzxL.V9MY d\HUF#! +}{|}~4.!*{{543~5-011"$|e4-' $xB2^j*!!$  D$"C|EQ!0C+*DL2  CxPËk"BaG@dԨA4`1$ƅ1iDF%4.P_ &TBF #l.]{Ą2Q* |Ba "'DF)D)-C~J8-E5"cڙ:pUͶPuQW8fB N3hu &Jd o} PL, `PDc%LHW(D^GYA1 ѧv0Zd80yͣ A+ abl!C @x(WP!`S%Y 3| h,a!C-rL0 LA^mAB z@yAV[م^KJ26@r(Up[y/!)<0 mf!paaW08 %`R\@Bn5Q`ܨ>[HXra1iDBIGC[_cΧBpJ ~e(I 'ڇYXAIg0uGBVPkP`gHA L ܫ;XѰ3 jT<@%kl0/+ZB.9yS.G!@D B {3(:q..vGbT;$@I0S  ,Z`>DmHN0_KST&,N9.0  Ь 6& p jJ|߀>ރn}ИgTxfhx!!TRender Date: 2016-08-20 20:57:48Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@3+%1I:-H7/GPH8++k88h66u..x>>][XFXYZTOMcaLijUop[qs^pg]DEjPPowxefge`]Mnmw|66;;KL@@AA«²Ǯʶҹ׾@pH,Ȥrl:ШtJZجvzxL.ulDov6^0(+/uBw#~}$*374g2/2&'%*,135]i0o00!"#t[20|Ϲr#'(.X6+~Ѐ"%4*')*+7768CN'ן )pp!=j@(>x wDP#Do*Z̠aE&#r&t+R͘?(464.ǜ,B_I%>JYhQ"X8v$(!늭C]hIsm<`-  .n 8&v $X7h_ ,(P9BO`{5XA| b( ڝAD5V#B{)Ry,T_diTz=s`B?%mp TMܰAla%3&+3`89b7*%CC mŀ#͕A1/ \m 0=1B?4M (ƒ[sLT$Жh <ZPva)uͳ %3YGxӅfg u7zA@*h `B)PT9 ( W J5 z?5P?XdF#.Re \BF1`Ŗ 5TªPWp" P*d) q  \0SMဂ!@#ݿB 4̀q7;L0d})buCOY/ C6yhP2Sd006&Z+g]dl`3Э`pO (0h1.6M9=@AР7,@%a :;b&n8\l.`'Rk0Pn!k)Wn箻JSFn@__gV!!TRender Date: 2016-08-20 20:57:48Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@62*(H6*E2)NE6**i55g11v()e?@fZXEZ[YLM[bbMikUoq\rs_LLlwyeefla^N~kmw|}88NN@@ǗƮ˷һ־ìpH,Ȥrl:ШtJZجvzxLTJVvL'/Oh.Bv+^.hh.3.,&"\2+u!$)%[2$%'&&Y1+ ̣!#&D1SʠѦBlCO*Ҡ& C,d1BUWd\7`ALH {3dDsomm K@Έ' Q\V # (ɂ GoBQn %~D4B"B|0qAa'ZFzS> 4P@҂ ,c! .|a…*1BQ@PBP@ (H l (b'* @`ಁe kC/F˜r)u `Pa '^!DpҬ<^8j 6hmD5NWoPhPeU 2oVVLDqUfp q\ `\Dtu "i-LE G8PW?6<& a \Nu,I@B`P Ej `d4tz9 4cu*Pf?P[^ &0g:՜{M T ?(&—0X5e!Ê'q`l&AQpPe,P$``i iūl2&Q )|EtnA@lYDzL#¯vAX:LO/pBx /X pԑ l .Ao = e&{E- 2p |,{B rfB "AF.A E1)g @4h-5B ut )3@#lpH!]ǰv, .`AA" .&nN#D춻ۄ{S8ou$b]4"|'+220p54+%zx|!!+]2! ## Y7+###!*Z(!ֱ &W').Hq!B@v4PBE Dz"A"_4@`gA$@Sa 7M ,^dPIu F9NH':|1d&!lJ@O ,j 6GFL!paԜpq:5c ,L[oipK?`A" }4I ˜/ 2`EڳTdP۸-`pq\Ph8P`j-a&,  (P5,@`2,u,V  8aM1seUd@ @_w ,1A,dc}VYeO Aw   ia" `+"2" h n!!<} X}6d 8 qAwln @]_Vx!ÀSfoOl~8$ ! inaVGL0AG<$,@I0&ZJcxoy^B1ף7 #>st`@1||q2p:4#xNA/p(L s]q6RH 1=bAkQBa42N³(D[hpV-N`RmлVd ^;Xw7\ :y~0%BwqK3T uS yJG†K2E QExd eA?mg_ uٕT@2)!xi$+A!2  p'qds=M9`DrP 1 @N) N!!TRender Date: 2016-08-20 20:57:49Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@7-%5H2(A#JA/NH8..]g))i66e%%t[WFWXXQKJbaLjkVnpYrs]NOkxzejkqa_Olrx~x--44II33DEΗ±ǽpH,Ȥrl:ШtJZجvzx v4WLI{B nz2JdZh//232&|"uw\4!||{"z!Z4$W4#&X!X&ϙϡvW"¡{{kwOο&P.JXX=GA0A~B F<5bFSSxl@@jdtj+.v7ٱ NcJ]1 G1*84d@`@\/1}A@]QlIcK d_|)eS[5a`L0calI-p Mт00u]2 -ˆE!hA hc.E YRi@A]`P XeM$؁1}pd02hjvtk28?=8ju_4ijv!$i&2:r4d]ntiuui#!#u4t%##9Z%!/U>4i1hն3{qk&/ҭƦ8?P2f!@SO ŋ MbaBhD͓ juL Nd`UoijddY >:NA0i 599S٤&*aNFC f3UbNOxETTrX0֧Ii%F 1Դp1`2a Ӝ%&,h:₉ȒXY>!!TRender Date: 2016-08-20 20:57:50Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@1%7.%32->:3/1-H:,G:3R?4HF;TJ9Q@/ abqv++e::hYWE]_PNHB`_JdbOjlXoq^rs^MMjghlxzffgxxxtn~tov|~<t*_ '{sG=0-no!*05`D;27u25~ido#--#!og>5my0wxgi>1/!!vnm\>7 "#02X=-#/8\7خ#" /xw06Z;18"-y11#xh pb|8I>pcC+>A&NxQ&800J>['_PqW0 Vf 5RaQlj°I'>@X 5MW!{֊92anY0DLQ ].re: ,X2<9(Uq]Z͊uFS*:"1SPTRaЕ-$H@荶bAر $,,HX x|!;LAA (E(m9XpA @mDbG|LY]$^4yDxT ^PCɆ "!+!Xƨ_`ӆPO )l09x0.*X|+|K ]z@xI^B 's^w"L)@v ħu9ZHI^_T~0@8EC9SJ9XR?_//\ `ar55b&'j `\ZHJKZZ[XJIAb^KcaNjlXop\qr^TUdRSsdedwyewxinqx~::BCñį˷Ѿ@pH,Ȥrl:ШtJZجv%vݰrnmOjhtv掽_n]3/(gqF=;9;={ctn3/,-348:><8559?b?ne3v'24549578zb5t.-4//75`]dmĩ'141(47:]74,5-#ȝ޵9jefm.2'-8ḑ 8bbĈT#V1X@G1e/`ԃ-%#D|(V|/٬  E+-r _&QFxp"HK2pP!-_vq".(3֊ʆHF >J 7hH"2O<ղC&(bP!ͬnV5l: .03s.< jqmt{{{Ŋom7Fi$\Ȓ0X] 6"=ņ X a:vRWƋllbJȩ!0@ Pgu@'(Ẽ, !cJA 0J52^$ " + @k@ B['0cihZHc IǜC#]0` HB 0` |S]^dJ 'Z& # #T  fb^ `m*,dd69f9BB1≃940 Zz``&0O_'MJ`fdЫ,pX24 'e`yA -'3HMa T c #/{d:pHdBڴcp9cٌ prt0A* "d,B 1jv<7! Y@>tjX@<!H!T nI+ <uX؈+\!$;7@PAi DtA X}6m}`c7 @t3"`PCWQ3@(| `{( m D a DL0-~D6(/C \pN;63@A7C,(>}CpEas y1 @41 ) K!!TRender Date: 2016-08-20 20:57:51Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@$72,;72<.)H7)F3.>@:FD:TF6XR>^$$]11\ ``\YHJKXUVWNNPb^J_`QdaNjlXop[rs^MMoyzgijnqmu{~noëŭʱҺվpH,Ȥrl:ШtJZجv%|VbO,(֞f:/NՅe332%*5{H_==|D!-e51%1256E:311ei72))35?=a>!#21/.610Ų29a+ /,".1.*ۘ\1 )0ۗZ$)) 볢ȠA4.t5wʭ(ʚ% X,t2e?Lh ec.\fS 4*d`AE9d.RCN$AQ ,|@_%k.4`iמ>ِBQwP)Yp= eGֿz}(Y<<̻m&#(pAN̉Q)cd{SBѡBn!C1v-+ 9<ަcc%(VH|BdCLƮ(}$+b]S,B'AqU0 23 - 1YAytLx@+XqC}5~ pГI2 ,f "x ԇbVgHѩ;(hiu_@1e XAVlI6YoyB Bw`ei"Uװh0@P] 0qL@X@`dT0AV'W (FS4 0'QA6HZɟSxy@**xMmbJ(Q?@ ʅHfMi9rq¤ kpP0H *l;`0R_. (d7 `@iYAcA#?s ?  ̀šBb~O  ,AHG 7,`—0=:%6WЁ#0P7}`y<ذ棧:񵾺 JɾyUn|.);!!TRender Date: 2016-08-20 20:57:51Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@:%72.=833,)E,"I6)J:2H(IE;SG7^&&]00\ ``33gZYHHIXVWWKJAbYGjlXop]qs^fcPRScvwfjkmkrlv~yyªʷһ׾ǯpH,Ȥrl:ШtJZجv-xE4PˁEVn*5oxNz ~u1)24;C<:9>_x6 t41'117::b6 }1+*77k:=~Y6+'04,/¨[< 1(+1$~uX<& â+.v77S3 u~*.v%zy "TЈݟvquh܂D<* DDZ\4Jf,¬?np09ErH N;ctVI"E8Q0J Q)niZPHaE/ZN0C`o d ?SjI2LCW i^tH0P4^>[34kpq &v*4I ΁"b f+@(@mΚ2 6茑#wbMJԶ`^}DT;BPlԷ8ԅ5@@P߇C68` /CDTP[mh :FB ;%&ŒAp:}0 %A~P\U՘И@P}# 2P9Ȑ?X VM @y۔U' 9JMA QP@j&:*@凌vAxmx m$A[@PSx Sb]+9ew[`Azx; 뎡&@0t `u:eNPx;% 'NN.!yi[Z]bZhA6gP4}kA$rP B >0ALj$P #tPA!-hscP %@BH@09 $7^PBc: 8 `&Rm8n@H5|`>_\G A ,A WC 5ITF`bg I (`'AD@8aE/ Ny / xH??P o/^DB~߄AD˿%]eGi_!!TRender Date: 2016-08-20 20:57:52Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@940> G3'L70G"MD8aH>^%%]00\ ``YWHGHXWWUOLGgXLjkXoq^ljVUVcsucpnh_aQ?@e~qw{}}«ȸһɱ@pH,Ȥrl:ШtJZجvzj$-,&.fw@lu/5nIz k3u#)eGx1m\0 +w.!1Dy\- #.121-V+ !31!te51Y} )Ͷ2!3)!eQ  /3%/,ieHpa |F+NuèxH A ͹wGߊt/b&` "|dXߝj3Dg*Uk  2eN0VN%EGZ\ҢAI/LH3gflqJEbh}!bC+F ;hh;n;.a! 2`yv6)*'-?H^'mULmh(NAһ|>+Ί Q+;;I $$eh@CvD?װEa!ZBhhZwSrmVtO2˼>@9t3ԕ1P0EhZ#G{H]XM`B.)bSQw u4f 0s3İC.c"8@@ħS 4Ut%pE <hp2\I)eiAB_\r 19Bk_&)rc~3vSZ`($ไ  8szx%2 |9gREA7^Z~2\0d2&TlI\F j@K`_n`$l'd  $TA$AK E /,m0, ' "d 1 X0A4#%x/2z IЁ ^+l< xu;2y/2YHE}P UCv 5 0e1 PαLc 4PHo 00.WnO^A[U1WH.餧n碟^C!!TRender Date: 2016-08-20 20:57:52Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@;4/5J4/M!KC=fB=^$$]11\ `d--lQPTlWQjlYoq^rj]KKvwxgtri^`Svnqmxyxykl]^¬ȹѼƯpH,Ȥrl:ШtJZجvz&-̝R1|bz"-"u|+g/$ %F4#}Gi^f  +G"25rC|W  51-ji-0Y.''  $I+}P/  *I4,C2cƴS3 $.J*r0prz3O3 $ $q4%/J S:@;LPB!FB 6@A$2:Ne@ p P ꡶}pRB*w}  Ri"A,E"\ Y 詧mtl~Wd zdaƽnxId={4<fƤMa$N,aتJH r΀Ft0Kʩ  Op0 # LB aGܷ <A9Au]EN}ys d~0">vD GNDBZ NA菄,@.b @@| "Hg-" `' k" ,?S(2hbx@bGU& jQE `C$`2>p < aR`%d4: @ ؉eSfz :al8i-6X@,a >ig&|0KAx粝4 #dPlR '!"gB1`VQHL/9\EW XA D,2Bs%l21 Ђ3/h1.!<2 , A,`p) x`Hm vqAaǤM ԁȤTWIѠ 77^JL#9EQ矓!!TRender Date: 2016-08-20 20:57:53Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@7;6.:$C'F6*J81FTH:ID; `a&&c88g/0cZVHXWMcZNjlXrs^hgTQRjfgkwxgpqtvwrpqYY˶ӽ죣pH,Ȥrl:ШtJZجvzxL.wg+hf~Vsh@mD xyz6G/+-/*46{V3  )z%+{/"(01V, 42%*$04T  Ӌ04#-*(yS  T`f.zh$WQ@>S!b].2һv .TP T ԃD* *\HF2 *Q 3&==y&#$ԑ>hmȕ 2A·2hTN(xqu"A9s<@mv*ŋėJE $X!D NGƺt)nH$C%Ds>daW d@Z2KL9hcux;] kZ\/i%dATNYaփK@YA6c-tBwWP @t0Zb>P5 M A'[@PAD{A M PM8AXaU>up.xA=›we5ݒ =V "Ԛq )$6x&4A41ID !CY"p1T:ꈂ B'Y^  pwFafHJPP‡\̐dZ+ $py"Ζ0AJB3`k9@HPobЧ{v*.0޵>)0-!.lj9ap*A&o)$ϖpq_ '[a : d"&]0y.Xmv"D-%Php|@AW6 kH4^x^ xi.D!!TRender Date: 2016-08-20 20:57:53Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@6:;":0(D$G5'G?2CJD6SI: `b**f99iYWINKDb[Hi_QijUop]qr]heRXYjHIpvwfhhvxxwijjnnx~uvªűŭʶһ־pH,Ȥrl:ШtJZجvzxL.h~]*F$Hd o>4l'(4>>W;"!! %B<4*.78~S;# #=~<9)..8T4! " $<:'):8/$-S* ߸1<:t a $IQ dؗA fԑ ^(0 (ȚU$Mw)N(pp' 1ZĽe$)BL )S:(ċ>^/`L,_a(b]_%@V8H(o>"I[Cm @@sy 5cٙHȰ[%iZM]饓azY)TYMnh) |E(z+/Ҧ T@:ĐcB!`u3i ;0 C Ga[Н.褗nSc(AFb[cBNc>g!!TRender Date: 2016-08-20 20:57:53Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@;4 :&<3':)"B'F6(J?2F0(ELD7SK=^01\%%^ `b}&&d55m[ZGXYWOMRc]N_`ObbNjkWop[qr]_`twxempdjx|x22ªñƭʸҺ׾@pH,Ȥrl:ШtJZجvzxL.P\ǫI[hy6!))&&"),?=V&"#*47:S#  ,0*{,79P5  Է 3.!"#{!0Q !"1npQ ,I4 $hH B L f2%te;D8&dlp`5rY:B,D6BAB *(0Ϟ|eb>0>`j4kgSF/h5>|ȇ*C2`VH+r۪:[D;O qd:QIT>0(QFl94<"ձ׭=e5"! q0JŽp7ցLyB%sv(\*b  ( YCH}%:TIÅ p ( %c5rCBe@@ (=7C)]5QL$СԓM0Ђ`!hyQ@ Eb"@ )8RdMĠ`KE42tRpcNG`@(+^+"-FaC~b,m9(p :L8EoW J`jjá2`u' "gX082S^*' p*Tt 3Ėԝ *K&5^&Xƒ8W*/k϶EH2tz Ѵ#[E c=iCfC ra@i+ Eq(rB v>尃;_BEbPq;ȀBhjTL3l!s` 'hBHե=n-tmxkQw7=r}D~it#nu3>V>!!TRender Date: 2016-08-20 20:57:54Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@46,$7%A%F7(G1'BPG8^00\%%] ber""j55c00s[YGLMYWWVjkWqs]ijUTToxyetob`]Inox}))«ðʷһ׾ůpH,Ȥrl:ШtJZجvzxL.km)hD].fVBfX*"#!j"psf#y{y !&$/2tS2n/8B(~{ %+-2S#~yj~}~ #*/Q  {|z*-DK 0P:D`@Z%`h/I >,p = ) X@ q7D\.h(ѥ u !†NxVa/vevP ?8 ڳ lbݼ/plXv:6h`Jn)w qMyb{#A<:p;3`Bk$dSQ3ϻH' Շ̤lk:ۖQqw$WS>ޏ 腥HB'1D7 P#6H}D_ % '00а 4 gP$D'0m8`D-'B ~ 4 w#ZA )+EA{  4Ƞ3 $rprPA+m=z x@Cxv "9|T#Ai*9O3Ш0x@Yå8D4ȧyD@X_xʀ 0p`5P NP@*ؐ'6` #tP­l5pl+t-&`Xr nhPG"+| B^ լ+0Po$`,1 \.H<`PJ7 )*@E:_r" ̷sit̸kn_L ¸ö)wbBR p[,h0/\]E ij#ASA z)f9C60 #4,۝f,jYp0^.~ojU Қ5*z1R{"X›5߂ &>" ļ. */Wogfo`ʃ=tEN5F"!!TRender Date: 2016-08-20 20:57:54Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@1 ;-'<%G6)F4+CLD7WK;33\&&^el&&h$$s44i\ZIWXXNMWb]JikVop\rs^gfSXYqxygoqr_`~nxu**QQ¬ƭ˳һվpH,Ȥrl:ШtJZجvz(secl&*L#lp|$#tgxD{!}m{s!/va'"~""{!024Tef42w2"!m&0ϵSԚ|mm)211P2 B,P@ Lwo*HFC" ! P`p"PTBN!FP -HCG-@`p,x:/&Fc?a`1-F\L(z( 6p 't@'0^XYb_A.|`` 2A3&L3(T;&AJyE5'x!A 6OP݊ vŎLڔ-c`pb}њ9l .2=  u>U|Us+' I ADu<Zd H%*6 $vcL5t@XAQCKyI P $@ڃsͭB&@c Q:pDShAR`%t06D&tDP p?z}Y6@žX``p ~. iz6!8KAmc@S<)DcM@ @%oP'PKfAC{5<\I>B$ (H`Є,0THM+b1 S"8*gMԁjB( (AQ 'xD@)i`h&.qJ ƣZ 0 9ө.pS'S 4 3cg<z@9 "  TАQ]( @۔E 3 [ [@'^{ /8 (hU0A>Z E0l2)ppj" #d l h|202=i1̀t4=`2 T Ð6tR`P047h1C8[ tv T/h &B=5l6Wba +!yev+ cm+hLJl3X .W1 u41vE;gA r;>wZipC '\ٿ 0 ŜP~ۭ f/CH7 z{B P ;:t ءNa{7 2PX d!@s !!TRender Date: 2016-08-20 20:57:55Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@0 6,&+$H8+I8/E&OE501]g))h78d++vZWEXXZIJ[baLjkVop\qs^STmxyfdeib\Lmpxp--LLDD99ōįƳ@pH,Ȥrl:ШtJZجvzk4MXH 1I 0؃&;ĻĈ҇0KR dsg;D.fӦE,x9E"ہ4ȦGH}*P&W~E-!kmA Zh@Zi^q/ŃIh: ?n 5BU"pPa" acNT`7 #FHb{hLI/iˡw8cOBE c!I@UW@tȷ~)6߅&@%FD[L@cdÁFd)_ F)0a ɽ[WA"ÐABp-lR -T,0@2kBf' ٚM&\ 0Px lB fp 涠0( !, _.'W %X`<+lqFWAB$(Dr<&l +,0jŚm:Ij.D @|5K%HL () `S">0x])C!!TRender Date: 2016-08-20 20:57:55Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@00!3.'J7+H8/BUJ9KD3g**j55j--t44t/0g11]\YGTUYijUopZrs^baLPPiyzgjjna]Qmpyv//;;MMIIьƹ@pH,Ȥrl:ШtJZجv˭j5X+Q$%*VClͅZd022pN.$$"s%s"$'{%+-1F2~(''%$#%%#+132ac+%+j(i#$s#$),Z0#Շ&'%#(*)X(xx""#%*oY8HXWG nsw:LYfH@&`h0$Q*gŕ)D%ba1<$FLK!G̀!|$t"(tD\L…$P2-Ő5TaЁ̙/n^au|.^D?8@A Uy @bqGbRm   80VXMu0 z U $$@@uL~ @xwDŒjP䗀Y] pv}G"(>CCǏƺpH,Ȥrl:ШtJZجv]JY$r`LmCTTf+fJ#&&)a!)m#+f112}B.!#`))%*[#nn#r",[/һm"*[0Ӭ"&["kֹm!UCQ|QO$NГF(Y{AdiPp%ƷrJgA,Pd!%ecf]P8A&-5vAZW"#2B#MZ٘Giع5gװ=0urg"4WL'NnNXBU$12$Edb#ʉO } D\9w><;1 ^zɊV\{xD "H=5AL^g@8pĞ ώ7h"H @&HH|cG a gH H( xkXRe _qM%10 $ FgXpH5z("dpZ ! FK\8 VA p87bgBp@1, <$Q& x9O!$Ae큐Rt' EFsAYR*H(ϝn)}>?@յS9vޝ106@`!K]uJwjP¯d` ޾ӳ9iL( #r8 { U)jh0 @{B/,?d9@ 'L@z ZĀLPPAB'j-(nyӬA /xl y$}f*jK"Lz9`(1PD /aAg}yStϚTR$x7-Z Sj#n 0l֎Wngw砇.zS~Y胱^!oDsA!!TRender Date: 2016-08-20 20:57:56Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@ .4)$I/*HRF://]ex((g78d$$u77t_XYYUPLcZOjkVopZqs]wj\UVny{gmne_`d}mmrnw{}--44EF99ѕǽڿpH,Ȥrl:ШtJZجv{J` +i6FX8N*X:KS-/031e3jB1$%)*+.+)(w%$$$.)4\)p&ynq_)+}yZ4xnqpyȷY1xqxqնX2o$&>c dBSfa5j<CQ̇[VKL Z(Æ8i$ 6`͠Z7%EYI`Ҫn RWy TZilXuۄEK0JzU/V&"a%4z*qĊ>/.ĘpΞs-4%^Q#>4j(NCy3Ο89xi1VIL$/ׯ{?3u/WoZ7XyIذ߄ع';p)aCDP2_zhi)S~Ca& 8`pA A .PUEp@PP(eLIet 3jiZ:P*e 1 T @g<AF o* %P㏒U y B +c Tu& Lj 4i50c1lY)eZ*EDuuɀA]A`*p@ 5!FP@Ko@@%p Ň5B= C&ʢL:% `(  ,pPtPd@ sp P'O" &H$ 8BEA>mB& T!e0QxX\po 7x]F DXİ?!&S{s"5l7qB2Vg4݄ . $K㓯 )t 0訧ꬷ.'מܶ/`;{`7[3 z{n!!TRender Date: 2016-08-20 20:57:56Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@ %( 7%J:.CVQ?56]((^f h$%h##s55g^WUEWXXJJWijUopZrt^fdOPQlz{fywi`[Xvjm~pnv~))77++KL//͏ƻ@pH,Ȥrl:ШtJZجvkdx ´[,qmTgөo+utMVd&BH-STN\0>󰀟>p9E>bY;o +r*;ʵ B )|66(Ȱ IPDA B`!4HH&I`$d'6@Fp 0b4 0pA&"&7EH` dib0@B"9aH @dL0—g*0a &e$`gkIexE"gdh X.hŽQ@ 4 Z Ba@ B1>B:>1ņA`VKk-rcuIlp͜94r~=ܞ{ f"zuٱ]{\yf=ۻ |Q9O ]ɂ 'tαC:,vb݀8e`~hNYڈeP@``wUBP`h`@IDqc-B8eЀ]2X^*@g ܹ (k*`A'% d0Ip]#,`f X I& T:I'}8 $h ]*ЧB .@1zR)* tA"< (<@٠҇9hPJ 'H[AgaPayh-F$@; PC8õ#pȆ,Cj:塀hVi̧hOa2Y D|$ʤ s*)PG%\&kYTȓ2l/28 Vh=K4"j,"Qk-DHyAG]7w*?N4Ќc<82NC9t1 缤6`^jߢ7T6#sd̀{nSfu/8^.Ow%E1c:e˸WxTVaQ2w;# ̓EV(`bVPАa H?~"#Sǡ681 *o|@Ï H<%L$P;OrD H ĉ@B H%htztP@É\i@&thB hh TH ` J*qB J "s`B %@/;E BqJ6.0BK4WαF g Tv3; 0D? , >`TPÏ? sH h@O1='0?ჶ* 'yAE'L7PG-TWmI Xw-l^~6g=B!!TRender Date: 2016-08-20 20:57:57Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@72.NA? bgw)*k89v::nJEB^XRlnWopZpq[HI{UPmz{fvuulirlnv<=55!!QQklvwopDDoo''OP½@pH,Ȥrl:ШtJ yux1dBq>/z< ECKu,s'' d,vL?998*(n ({|'eE^97 n ,-('c-,Z(( },,̶98n r,((cl*䩇4*'(ʣdȬ*((6M +L0Iŭ73hx$LHpn %4o*T8A 3m>Z=~DYL 1r$2usL;'dRmM}-mD&7Hb>DF^NlT l yAɁ86 >ŌĽ@pH,Ȥrl:SZ`NJ0Dn{9) $깯Z6{gg&zf 9P;6(giy(('5K:8gf+2~E;\ j(%:>+(h '*ԟ=,к*s_8g ''K%ᕤo)Gm6;XBq`QT^M6gƵLJ鍁zߒeD5Ai BOf}[4[AL&P#䑇YB}s+ȂbJ3 ظ1,8T XKEpŒ~/Bol84A>!`dMqD hs$@oRGGEzhҡFIUp-4UKf"c֢h}/ܤO`feYssϝY#QQhGh5,r{r iq EtKKJ׽7a?ˌsBNKˁh А[Hb P;E(ڎ&UnH`RދTxdPLÍp%b{S؞;t`a#;>&10H_j@ @ 3*ghx*B P (W-+(Ui+:@4eA * *t`?d%B4`  $꠸B 4 Xba` ,|0T0 jeE40CC 1 ﵁ -A7@pM0C !.&+jӄVwHUc E0 &45U+D87R(J'$`t\tRaGE"2xTi 'aSP^)jwg2[1rClalHlzo<!bǒœ1r5' o" $f.bxI6}6+ٮs `#߭'gpI~~ϊi4SpF""󈛱њΚr`h'Ս9mCˤJ()2܆6vGݣE7iuWdӆ7MV0\Dr6 Pp6\Gۂq`4CEhar/BE7헖=@A &4)`-c0_*@@8 Y'R@ @Mː RZf&1X: "tpL9(Nj*@pzˊpm"tH %, ذ &L ƒM SC 1M(P@ hBX-L zb4$( '5DP%!hh|PɳF%(: ý% G -UXG Aze.0K m8>''JJFFRRjjxy~BCbbvw""Ōž@pH,Ȥrl"u;t*u`XKvU+gGjT}V0w3{e_jjvx:[6+~. R8-  .. 9K6/X.H7X0Ǜ^ a*  ޽)//a*X7)yb_0`AM6IYB.8q'TSF(hIV& Z2( @CqD )^MEښR49+*0(P:UkT'aBH'Ν}0Q EDܺ œNycLzr,t"E"D+aQJ)^^~gV-#f/7H,I`be([6K6n,ztrR5kj̰ g_55".Z!IyoMRW$eT`M^4x-76IީVAoo01xڤ ]P wG3@Eb2<{Ў(;(0!/Ex餵 +< RX% 0p ]z9#N,p@# ÒNg@$ {C rSQ ,0f[bo.$YplhhY J]@@$pB ɧ6Z*_ 7 TB"Y9K 4yj$xЪP$e8 @ (pzP:P1@o3ŀ f\-10#B B'oF@1o?3``:9d\H!PMG-TWmbuop^يaWvVYoYfA!!TRender Date: 2016-08-20 20:57:59Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@ dgx%%n77s**pklVopYrs]DDvZ[nopaxzewx|hi}kmv} !33))GHUV|}stklEFSTBCYZwxƿpH,Ȥrl}:sJT yhyNa@%-zIÂRAL[tt=-{ &-%dfhjl *&dn9^9 Ml{+mK>6b'ndacd'' Bj 'RB*"L׫+X=T,[N;Uzٓ0x ac-QR7o$oRdۄy.!DՍHW TfJf=rPE""$%tgB +VdJx :S4q:ZE=c@\Y=6!pիSUcĆ#'p'8k(ETnFmثqL**^m;2A?2M](MƋكϰbKy4@7G_,V=Ir(rU,_#D {@C'u]WT;M 3Qa`&nw@zs7j 7p9'-.h.؛n 0W3' #21=LF @1 pQP ((x 9v 讼Ds&@B,J6VöA7Q ` 7>]1 VwC5wDHmhk{vNw\bqG\!!TRender Date: 2016-08-20 20:57:59Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@ gjx()k56jnoYopZrs]IIy^_{mnny{ffgxstykqmv},,66!!77++HHDEjkxyijyzKKRRü@pH,ȤrlkΨt;ӬXZ X|x|yыbۇQp@Gh1wlnghc.}  aS5${ h*Q/ |3L'^&J~$E0 •.C]#ؖ44 4 լ*栜U/ θ$ DnGp`2V8D KDZe i !7ӧLH@n%4 @)@7TpJ l~cՈf$B,TH%øG^)#(*E-}  [ -"T |Udm$r6Og' AYJX v^yD \#DPJeؐ+ Za / RJK ТSb*ŒLҸd&P@ऌK69ccP"9q Sĥ7#e)& % BX 't֜ gBH *PhaCc Oq,a& PBMp5)vw: px Fik*yJmHHn bB H {,}%{f6 \HmJ$3@ۇbh %E"'e |HHLi1ɟ@H4&,mDa7%1rHϪGX@@dT}뜉)-vTdijO" tᦐÔݻ)©G(3}DFś&!1ç'x+8 gD`1c&jLQk Tf. #"F ag2[kWFԼ{p1Y!LS=So@ #v5]bS{5 ƎduqPP;Vh X +4a U\c )T9sTaDBF-‘TauS" P@eQqR##;Zd"`6T0lI#O>@.Ta W4 h !!1v5fi ,DBڥe]@UC0y0e6rK> 6:d؁`XpBmjJG`@1/PBktN`($2R?Qc 9h  @ *:N S2qy0pzA= dzƛ}S+ 8E LP 'C G,qg<kq1l}Plm=_\aI9V&xVVDN ÝuжC+B8&*4:{6 (/wΚ1=}Ո$TڞnON翟(%! 6C9Vl~i'y k K# SO,  Dp7~x_@ }Z-x9E@0v!.䘛lAtQ4]c=I9Z 6c{Q*"e utpS.@@ПR #'G"ʩj #)Hf3m)עDbF{ma@hpd9%1B2{dnO[sVR?P`YGkʸ)l)Wvz ! P@ H(  L -i,@1,N&6!;f1w+t?50!!TRender Date: 2016-08-20 20:58:00Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@i~66n%%y;ϧVGQ \F(-$'-vK {o~y$uD+  r#+y"0 zz .j( pr՘ a +SG"8X5{̀H=9L>Xkp჆2<Ԁ(B}e" PQM',9}VA?#u.qqLЂt6Рph,Ev +CZ$M!-@#z2e<̐r3MnyKVyii+]WextG] 'Ѥř , 0aK 1X[а`G"e]Ђ P[@{2X1yg)Q@u 1R>*! dRjr FW] P %:HV#@U@rkyA&N.ޣw6A "( !\q5jТrzK@\-|/x. E5wb3dpX|/iB%6wp&s̄O,&B_+(5) S-|"Vu&T0/ x/_Խ@/s0f~dwWpUX-`^iw%bzDޒYi`QY恊smǖ w&"2D87׀UAs?yy&$=( $HR`*łEL$x5)IfAi~0 ҥ#Hߗhh_GDV%,tnuN$VXp_G@PPAi` W}C ,2n"fP* 0UyM0’* k )pOl1VpO'MT?6YB~lA!!TRender Date: 2016-08-20 20:58:01Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@iy*+k00k--v/0x88yXY\ijTop[rt^WXkGGtdfhxzehjruvwjpmw}~JKTU\\wxxzŽpH,Ȥrl:ШtJZجvzxL.coXiHmNVerof80.+*x+,,x))*,0s`7)+))7`)%k0[!%%,6OI #%* +J9B5  !ҿ#|#{x+EB2"*⑉GRNS/Bx  xB)w8$㑍%I(kh~m%pIB :x0!B@ShD=T*t@>uAy@ÈEH:E`?)X@"/G(- )tNbV#SQ[GP1pLXIXp}*H߶mN9PD s; 8e)~4?xz/cu3`@Q@HIx$WłM!PPsi AZ!p"`z 8tPND ECx=8ZWР#Jf it5|oD"=Tа]A@$dNdG?ؗtE#I0@{X0ߌn&`O'އ0 @aXv:yO9I2zZ'daC#]$0Sȑ&叔ii²菎`‚EZPhNA&LZ@w4ߋݚP 0BW0BW]Ni DA:@gYapYPŒM.@u$0A9iA SqCYo( i j H9,\ .T[%` 4PC l,Q RAv` 65l 24Mؤ̥Tr۽\G\4L!!TRender Date: 2016-08-20 20:58:01Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@jj''k23o+,t/0x67ujkUopZrt^EFlXYlDFthifyzflmxoprtvymqnx{~[[|}ƺ@pH,Ȥrl:ШtJZجvzx,\1ɚ8}^psH,zywv,r`0.jy#0_,zw.\1%'JK,ȴ޴MrC٤'Gfٰi:DwCn4pp8=e"ųp݆?p!=lNL 8hX( fr4`jD8d\w"LƒMbP#NXp TB&^a(tĂMwt ()Պ-Q)TlvnE=q%L^V 0$ʝ]w$]xDPkVtctU͏gJ0'hI:K+DLitR A=d)5ga6M;`|L1vޢZ! Ҩ00`|pR>KCތ+W]PxN7@ZXYNG"pBR֋\(FL>UXVYx0 ;pɈPՂ&I\0׻I0k TRX"RNCK4Gf W3j<0"a1~ ~'0hP!^FӨc'2IGvl,-‚wہYW!z)eDih7,ؽ|sRxAxY0 ͞0 +T80]+^i* %ɯ&0E 0VCC 2%ˏESI qARIl؝p I{K@!!TRender Date: 2016-08-20 20:58:02Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@ gj+,m56l9:vSTYjkUop[rs^OQwXZxnpbxyegi{nptuwwkpmwz|RS^^{~qr±ƹpH,Ȥrl:ШtJZجvzxL.[c.I\/܌10!!'1tE1y {y,B0 "e2r.  w -_"#2[0"ծwGB, ׾ܽ #J3E#֪$0lԸ!t7qU@xijTopZrs]KLwRT~mo`xzelmx|}WYnqñƭȷѽԾ@pH,Ȥrl:ШtJZجvzxL.WcVBg2#cw4&!1vE* { .B/|uv1 !v| #0PR/JEK/ qK1G1*͢ `hW`5 AvhwTL?^MFC;T`mF^hXp.3_X`a @B(%)EJ ֹ {Cep ZN%*.NA':4aoT״%jvXO2 mūVubEQ"2&Q*Pf"@txqH-F&D 8ՆY@ bu>|M`aiW v@s I'Eaƒ64(@ X`  /KA w A >a#%Gߑŷ~PX Hܸ}rW|%#ai$OTHtWߙdA[*xrE  Y}46@,pPTQf\g}  @S/|c4&ߐz0^ GAShH 8@mU$`)*8gg"5^<@Rd+ Rf9d.0zaMZP Y( !2&xC1!.(z.0pb@|"\~ @V "IQFE 0 5gHp l[@uw5M@$xlo BB Ttj" &r; +@A^D] ) SQ:i ?ќ]kUWPcD;N!A!!TRender Date: 2016-08-20 20:58:03Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@ djrp89wjkUopZrs]BCzxye~knxz~CDOPUVOPTVqshjtv­´ȯɹӼ׿pH,Ȥrl:ШtJZجvzxL6|eh-&K+gΆqdy&2vF>& |,hB& }~$$)u; }|5OL2 }yKhQ> }=P>J'̞.IBE>5&bAz`|?WcV ,"eP0|I<"N jq[p 0Dyh*}HpeLu܀N `CwhC.btω!Cc>M(e0eŇ9b4!"60,#f!Xf N1zRW@.ޥ ld83Ld@1F `5ctP!s׋:nE4h` ;&@_u(`qq5+et b|`CQ 8 (agZUL/u8X+8B HiC V`g^,fX@%Ȁ(48b7g @NDeIbfO TR$c 4+d>T@ ,AVݨ5r%V,T -49dyG%V4"*' ӄy! ] dQ 䐜:Bkbu  Q`e:V  D 6&x*za3@p  ]~vŴcT D!S`X0` zg¹1ʪ /aqRVf  }@.D+ŧ,wlھ oq5p k!êvgmW./ɛD[C[ZE]23< ljq4D/ӽMgv- xp 5F-?ԀCf3\ig!bSw׶5&>(-d~@x#.`$871 ~{ZDYa`"@!H(0[ t(.g##1"-$(aʋ7qCTg !PBT0pdbh װQw@!|$[Qp pE8`A (o"x (@|P!2eB !#Det`H@@BBa:$0'׈O@M*qAGCɔ 'D+jPHHS]#xCuy<~ '5@\(ɠ@s[`T"`K~ 4}'0pTC@7Tˆ'6t B5 |_`B{I~"tʋL:1`sdqA;*McAċ 2+D,@ZPO'-,k㯺lBn[ %+x4. IH,ﱀ$ƪ\.HYK}€K;V͐,#|*C9V$" ۅ9d;G/Z- ^=jh"p6ȐpJW@ 2 4(! Q'BwmoE'O݃M!!TRender Date: 2016-08-20 20:58:03Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@2DJ)! czl<=zgWOjkUop[qs]vfVwxd|qm`lpnvz}./))TVik­òȶսpH,Ȥrl:ШtJZجvzxL\2lJl:E|gѕ |q 3F3q|.D | ~- QW{{ 0XM+|-UO  q44PK0 z q(IJN{ z 6C36EBM3pq ՄOfE¨k쒸MZ%(AP2m%h8g1( X#4Hc yF%x!/`&$/dJ%!# pYAr&0`HB @+&BQiX ؊`R/fP lH8e+X*Ɗ3 *C!Ts 05N *Tb=pKAPxB' ÅVp(J!Ϡb($ rH,.'A!,FO{BI )0| ) P1L$ l>J)<)AP1BS0_Yx0 @>E2 ا[{-13ƾAL]`xPo0x9vmZl!q0 *"0BPed@UJ 3$ȧa;@: p 0ӀO@ ;{a-aqG K֟==3!!TRender Date: 2016-08-20 20:58:04Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@:PN(!bG;m !wmVJijTopZrs^ecNxzf@Bqhlpnv{}z&'LNmpVXux®ȺѺ@pH,Ȥrl:ШtJZجvzxLde fDZhD"w|9k:yx p{H C2 yw 3C" 43QhHM. x(WO ƩʑLDK2  %TfNػ Y2fܰqIB;"@pA,% ɘE5[P-ABPXbbH&]. Hp$3R( TV('i0@d)7Q$>uJ0p@)3k H<022hQ"涝"15y dA"@pY5fx$_20X@` sg\ 1cGԆb1ƅ6炈p*]&`] $P5H0#^sB` B h.t..@&Np - bn V森fak+$07/!ۮn^zPėl3`KҶB ,܋B&O*Hp Hy@ln+ 7Œ9Faf$m.v2k<ԁ`*0@7OcWr Ȋ6ڸ#@2BWe@}1e eNqp/ x0@ JB]DO}|8q&ʘB -N 0'p05F D 趿b!8OF fEK#ԋ tF)#$P_Bj0` @{`d{h !!TRender Date: 2016-08-20 20:58:04Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@5 >0*T7/L`Q=!!zjTJijUop[rs^vgXxyevjlpmv|''&&23PQlnVXbd::}ȸлͻ@pH,Ȥrl:ШtJZجvzxL.ge1H< P\GjwJ |}/H1  2E( {rtC4!! %7W76O/r CM& |'vM6x %5OB5K8! 3NCM(ᡣBKK4 ̽2h ,T[W$ն&+>|a#r !@ 0{? F @ 胐 PFsħ[#@L *Ԃ.DY,>A aH"y5V)O !" `ր B.Ƥ Jh*ôJ U€Qa*6# Z6(0 ڒ= !-$Hoq0)oXTk+F?Y/|(G *\bB"`UNW BPGD B$<$B 3p{ m@i:@ $XL@0Bl'F-PbݐuoL '@qŽ< ,`B7 B` #* e @B86U A BA@cExS燰[?6 q * lGufɌ+q$?abX|BrNtZh|A dfH`0A|l)̰Mf[:@l{%|+ TL@Q0&y` ȏ`FtLJo4S!xyp |wX%0zJ4# R3 "|@8 t A|`+ 180G !5 @A 76gi.=$Z `(u۵!٣EqAR,(PvW̡Z}ZHp5 4J\g! 4:4y 0"[nd]%3ΆT_Y@mbC !@d߃A[ o*(Bqj0e;Qa 7"ԠG\60_\v `CpaT8P :4xȩA!!TRender Date: 2016-08-20 20:58:04Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@5P6-X$^H8r$$snUKjkUop[rs]rcRwyexocZMGvgl]ox~r&&((22KMnqQS66gi~Ǎɸҹм޾@pH,Ȥrl:ШtJZجvzxL.gih3:BSMP"K7." zp% %J.  'G({##4D7 "p#$gC77O/ {! 1PsJP%  U6J7 ֲǦ''MCIIJ#151f(i&Ti!Iڂj$Ѐ ģGDV _Mu-96r@B^y$r4@ a V*s nJؕ1 %*IeNҵ!f}``&d !RL6$7\5V)Xq@D` &L# B~x8 IJ48aR2DP5lcG! \K5L( $6!T` m5oP$ѠAn{&0dO\)t)X`@W+D3)5?5jҜCq_fY @~̕@}PXbеY+EwE@'0ppX 5{׊Y+ /B*! \dCpc8́<@|@l5@C<K5`%K HD&`&D‹Г~!9 ,d٣0ܠh0C %II@>w*kT6TV4\PAdP hh} B gd` pA*)C#0gc"'lB$g`HeFAV hO@l iC hi`Z8B1pD j& @R&&@)9'k ܘo zB@"LA"u(biZP')Ō! (Pŋ/+T`E D1yT?EbQ! `Z@HIPX=Cn`p0@SA<1R "~^Qb(`!/0LP h\KIF*#v <‚N7răڶA@UsV! /;֊BOACi @ ,Ę\<0S4\$t6D <0"X@A @q ,K(" 0LRA{"`V  ,5@xB 50 xT@VL$U `8BaCIWIX'd"qqC \01!/# p٥+$p@D WPu)$0b/'xP%/t(n& 6$f d:pp #S5PтSƪ8gp@ę]g D' t 1p"Lx* z&@]k  A @8Dd:\U@+T F@:p^4<@r&YH&Gl,3F`<˻m!'p@fLqN?bR|!BE t6!^R B, l4(Xp!B {w4A|6ܴ\^v(kz \A Wޓ uKe!t8<_` 2* ])XpA 2 ;HRC.<' 3|pWiW@%,rCƓJT(e"n7j pd<p~ÄJ?}̂A`( 0'q!!TRender Date: 2016-08-20 20:58:05Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@;JW#W+$T8*P6,d61aG:**i77g88v..v**anUIjkVop\rs^ze_FFtvwd|phwj^Rnw}v77jlde~­ɸԽś@pH,Ȥrl:ШtJZجvzxL.hlT+pdB%xVq#ozI7+~!5]7U0 ~!&-[5BN,&%#,0GH75N ~###(2JCP#*!#446M2-150))$,DBJ9A ,`(A 2! RI0$:|6`ےuB  pHF~&`AE ~ɖy1C%#U|Db9~ A ,GB9"X H t0 0@3 ( u*A l' VYl6! 6dZ0 0{ C@h JkJhbck &[z@x :0,o:}PB o*Ph*eF(`(s {E[$r8dIRAh`%'ep F{o(2"@ 8W\9AJ0B$ "a?A 7A m=I=v1i[ tq-I[JZ,Pu4P&ntׂ#i 0* MB"b 1$@=7 9N ,]"$Ԝ<@ȗ1U} 8{C}M#Lf" G!!TRender Date: 2016-08-20 20:58:06Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@Z;3W/*e82CfC;UC<55_,,f99h78usVOjkUqr^rl\IIwCCmwxfxuq\_T?@kvl`[pyw|prXY99~ɹҺ份@pH,Ȥrl:ШtJZجvzxL.hp.>Lv0j՛4zz|-77J" %}-+-2\lR -,(|1NBC /+,%%$../D24P2.$##!(7)!!'GkQ# /- "$48J0Xd@ "J"`g\ /@D(Yđ1 JF f( 4 Xz8Qƒ }<"#ܠ^@G@FDbPD*hiS!1^@ݓ}W V Cfjće`B !D i4/3Ɉq8YPH@: ю H``A ,+o) Zq36N- . 6@,St.a`5jt,0tڰ74 'hP8V68[0x\‘^pn뇯U+ 4P 2 4D #\f^[ \@5@Od ) /ԑ` =tx`"EȠ[Yd<P @BFRVg" D&FA!!TRender Date: 2016-08-20 20:58:06Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@>=#DG$T+$Y:.Z:4E3+c:5ZF:nH?66_..c::f<PvP(ж=+RHz1,r2:X @a@Xyƌ^zd*  HX)uT4EOfд"`U1&''-R6)D 'dA )Jq_t*`@m[(Pb7I ,^p1D`S׸6>NpB+FLv1Z" XDPаNɓzP7hbC"Dcʎ lEA@ tm "TjH(OB ɠ DP Hp} ~SG0@,<!/@Q!Ug 6UՋ TARB m| O %|A| 4`ߋTp)19Yp( VLW`ɜR$x 1 4%)``(X'e 8X<2@Xp&rJ i ,Bt0*<`^ -pp8p¤0O+SLtr (6@ rNZP`.>D@nj @07v<7mk)/i ` .2* 8@(X 4@0[o*J]*pA"n7t]A })P".pJ 9b>-LBn@e*.p W[JyDBD+PTP&|{{;{ 7輮 :?g'իѽH30/?|FLCoF^=j!!TRender Date: 2016-08-20 20:58:06Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@7 ;;#?/&CH$V5,X;2L,%c<8]H=MD:dG=66_99eMLBHH_YG@jZRmTFjlWxfUop\tt_FFlXXjFFrVWtiklwxeffyxzwoqyu_wi~k~ukxz~hixyǿpH,Ȥrl:ШtJZجvzxL.z󭥽˩V2:N(t47w=ZnT9%('3454vmOV-&~.448<>wFN'.&#.?BnL'(#-'CL%#%%r##DH:|~̎:IOŐ%e,XTG`R-T:{ckE2!c ʄ 35{2sb:I$0PT1vy:G>l4)<"`U'QT QhP6iFTG&Bz]WH-D. (f֮2+MO\0&(   (%p,}i9%3x`¬ 0 Oo&1r -` "L8 ӫШb+ӽN-AYef60C awb% p 4X vB0aX 4 ىehc4ٓ 8!,C% v@n/RЁ&p 0` 2 0#$-[z D’/8d+&=h K$h%*dAoLAt2 h0Adp^X`A./P֊A 2AJzE u%2hkB& 'pA: [ti0@&0r'|b@,z[) , -pj˭ujB.&kؽ0-| hBq:8B V N 2/2$t3;݁Gv` /B<ʠ)jMʷ6vH?'\dmh!g?vCo [RC79!!!TRender Date: 2016-08-20 20:58:07Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@, / 5;5 ;*"< D@Q,%T4*M;3J3*C!YE8bH:77_;;g88uGG[XPQaKDiWJfYQjkVufTus]FFiUVfEEs[[sfggopgz|fxyqhiu|hkqnw|~sttuŽpH,Ȥrl:ШtJZجvzxL.贚Q\賚VF2))((**-1*'*..3,,178~h21-.020*7>EFR(-) !%(6LO'!!2?>P>*ƳŅ'9ЬP;'$'(!(;JR;' Nd+T"7M7%,u@ñͫWȴ%:S:XF_Qbu"DA8MB"S2 `nrLIN$j @Y=eUM5@Y1e#Y%PJɯbа Cj{$;U,EP-"a $MДefIq9( Xd6 0 4AfD V|"B  _O`ufbB6A'QJ t|*A^ 1t  T!؅ H&zpQC; &TzU &4uBGy-ep` -%pN z(R#t0lPd p@|™R~c*tv`r@&0YИDA2%E%0BF`!xAlanAg(9hD`:@0F˧[Ι"j馺jfZ \:j a-ZGh KalF0 hp"8xý9ܐB 0͸ggv9Viom˯ ˍ&;{/ .$$l(ϬG.3-w2B !!TRender Date: 2016-08-20 20:58:07Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@7;"=)"E!Q5.I"bG>\D:88^99f::u//e?@uXY]TLOiSJiiXrs\rlZEEhYZfCCuTUufgfy{fqlo_`jyklnu|~{;s5c; a: ,jV%E2E!:(@%Ld/iD q hԔp=/zFEE+Z|Q)ݔʈhRMBۊ!$9UӃ^0!/)m@M a[hPme!6p(X #8 )(S6\6kHB5sm A+Zq˝V,VL|؀z䰡h'1ǢBt,(o` oQr"/@Rl`B.g'p~VWе0Iۀ &WSOA^ = ,Dj!~nFaB H’ո3-qeB . 饗5FBjxx>w%1A ^v%9Y&~e٢m楂 "),t*pfo&dG~YH[^(84L"upjzZxT0ՀHHZ]ȐWz.f.xB^$ 4&@^`֪JF DvۘY8. " +0,^ \#dp 80(0AcCR&P{eA$qP3F](PR QX`u@ؐ_hS AV`:=-*r=IɌWY)^|ϲ+ʸ鄛I2`PAX-`GlL"l.DEIMhjV[hי kul7R@@\2#uŊi2!qکPe\RˠAĆ ; 'VXM)*Z7QRZ l+n*ÍXѥ%3`w Z9„} ڱGO"U}~5a;hGEgJam㭐ep!8@7zxAxΈpA e"S-jh2ly1sE@@0X@[8P|HE *ASV$1@DX0UbpiU0` !lph;VA(cXT\-^jݘRA%8ߨcJu)!PUfjmNA! Ahi`BR2YݘyAŚsZ|j-#I5,A'SG9gm**i55k**t66r33_\UEb[IkkUopZqs\ifQOPpxzeijvwxzefj_`jmznw|~1133ttLM::̌ƻpH,Ȥrl:ШtJZجvzxL._ch4 ^eOնpEM5͢ʮ[+6ęఁt@:-l{"#C!y]5 Y2i]3˄1m} XiE`d0ML^xg0ZY X %@{pnCEE}eg@DV@{EچV  Pp%`zDix X@<@`uVjarZOS.tQF槊4Qh xB)RAfNd-qbW HL9#V9PXfTX FIC.RY(yWTi c v="WV Pe A<<+5 qp,2 {,zoiT .o-\p~<ƅ7n\Zqiſ'\sT ~l<,A .QX04@A ,PȚ-uK+W۾\BE7 ,|Al }KF+$s3Ѐ 0 Zڵ$7 pg#-Bj<B@nBzk~߀+@B:-F u7 A _3@ t[ 7Bz v+$H4*A'UH;KF8,-] edv&&j&&t78j[XGWXYHI]jkVopZqr]jhTZ[eMMjyzgijk`^W?@\mnt}~0100}~RS99ϙǼ޽pH,Ȥrl:ШtJZجvzx 2jSQ.ƔJ҆\D" o%%1hyz5m#)26a|p  (3^)( ) ũ $ Y)+(%ɫ ,7GS3 ++<|* 3`T="  A)`I{}P[ !-Pp CKntm0g+XP+^D<hCG~SLK1]E 0jz8~e aYStkFA,`@a U!8ɽ 8A@,lLVɖYXt1$0&(8@7뽔3ЧvOl4R @7\^/J%U'2NukݸG+|d:?`h}*cqu)0ixԁw( H3E LyI\-tTRYatTT@| cu8TeG](S Ҥpp`*Rˆ,  !x  `ZdPv@AIfWBaYB! ti3 (2kf5bpxH*cI!.At NBO٩u\v`|P!e:-t !8 X d*T`T 4)wZE2H*L){lp< )uJ 5j7T"jҹl2jPV@ 4@@ºp;aM l6,?l. EX(p p+.<)(߉BVD8Ak7Ks2s9ͻAO AB<˙/`4 ,@L[?oz睾V0pv pm@ 2?,g-'N` w4(BPRCw0 ,{p`uZˑ*@fCMHl٨Nk  - ; $ 'ϺD7 MJq )h$;@ ګedA~p;;oP  ^4`|O{ MrDhǿ* /SB;&xpN"C&0N>6aq*E"=8c !!TRender Date: 2016-08-20 20:58:09Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@& -7#9+!K6.@'RH: dey''i44j..u[WEZJDjkUopZrr]dcNIJpyzfeftvwxiija\Lmxnv|~00MNuvJJǹpH,Ȥrl:ШtJZجvz8t:fuIX21rK.&&! xy' "',-31f5#!x " y #n1qb.))(m&$ ' ++-_( #Ƭ&\i**&!'0\+&jEPGi,\Xhş"42ՐPZW: LH "*$Cacv0}MRd#?,=Lӣr(FI$N&B!d ڱhtLF& &4x\+C/IQ#1|:k l e\"1-. |`Bt>o_)d%8D L`tuXX&yˮԨF a$%(Z\NFr(+(eA݁(|LZ`a…&3R*5zAp}Y}K+Pe_hP\#mFqQFZNliP9+G97$ @`@z>uiB9QR,P4.40@ PGdf -BmQPKU耆hb)AIaBpqj ؐb[I t<&0@ti&e HepUf]:AC}V<Ӝ)Av 0Af`K[AF)9K@fyM`bW$ ''RN;īǦ -̮`ԵJtpV1"li,Ya9& ,A/OcD` [!7 d P< ,$24TAH"հ X,`N^ |li +SP@G€0\p;x '3TA= $pw,\t1 tGb֢T2Խx h /tPB=@?#@СwP* Mq{ xI0 @$ X4T= 2d @7pї&B 'D;-Qu n4 >MH` .>g2 TBD0'%a ` !!TRender Date: 2016-08-20 20:58:09Z Platform: x86_64-pc-linux-gnu Compiler: g++ 4.9.2 ! ImageMagick gamma=0.45455,@@' '+49$:.$D4)A.#MF8SK<^%%]11\ ab34j44u))k h[YFJKXVWWOPYbXUccNjkTopZrs^rm\JJoxyeont~lox~~,,IICCrsƼpH,Ȥrl:ШtJZجvzసp]o\`)$}'RA 059>kyH{|('0/*g;>x>9-.+(!,'0o:b8.& %1&&+'/qs)0h;_-##$&0!/./o[5%01.$$!'/034haČDƁC Gƹ#Evnh֮Y  AJ*7HEf[0:(N!Șfb6PԨ5dаaF*%@΄+v 5-S'>މqUH 9@$* ;& })TP]v$;'i9EBa ^j#L@qr!P:SA @g[;t1¦ QJ1Eǟ4T`@ fTJRqR +8Xz 5ń# 2Pp9T]d؀CGTZy' (=Cd0„.!t +P2TFA>"L<"2d$`8 -N!… t,! WȖnŻ%((UA&Nty%#)PE cR! i[ I 6[QiޖFM{BV{J9'V4 ᱼVbp9 Gi&K)'wؔj #X K! @WQm|>bӒ[Dqh.HJz,usz֑* ;TڸYvP`JYr [T&#G p@Rg-#ܽ9qT@ $@􀉆(` /(AiP: ,qkWly @ /P}8| /l9gU  @02)w YGB+ .uI<0ß f3_X0@BVǁXP ܂ 6ςL;aiscm-0.15.1/doc/amd64.png0000644000175000017500000000417113220457302012002 00000000000000PNG  IHDR~KL pHYs  +IDATh[HT]{Ϟqό30QaVTbЉfZiفQQ:@TdyaEQPTU^X*ZAYAqqgf{ݨ~>?,fYzg3BRRw?ЏyCQ$Q3B~ ;_ [_o_o߁?~DUUʥKE1d_AAaaaJJJJv_[>ߊfc…K,!33tzV\mLov((ҧMgرc^޽C;{}t:7Y;zQUY3gW^ɄnG~ԩ<{LKЫ[laذaHħO8w(saDe `…̘1˗)//ԩSlڴK"I(ѣGeu$Iq=FE,4qiii(͛7ɡx8 ɓojy͌3EQHnׯ_OUU`\rχfc۶mx^v;;w$''*DQdZ`MVV;v2m1ϢEصkXVvMaa!?F$N8˗/ Ç_||>m>EQPUO0$77AHLL$11[6mׯСC_-|YYnBUUbbbXbo?}q:^7np%fΜɄ d:t(GAQl6zYj&:JKK@e&Nŋq:_%|rr2gF .KsX^^,F_ݻwDEEgDQDEEԄhD$~FHxx83f k׮%++ Yd2GWkѣGDFF0qDl6ǏdYPv/_^'0hРnvϟ?pz p8hjjl6*TTT0|pA3fh󎋋̙3n֬YÔ)S())aܻw-w ?b.]͛imm%!! Y'Gz/Vt($I(ҭ] g|>`6IHH3VW`[$IAͦ鿨n~:k?>uk0kNzm4fZ[[jK_jj* 0 p֭^dV/2 t:V+U/^`ۉGUUDQٕnkkd2*<}7bZX,8Nl6[PUbbb4I&z`Fb!::}w."$''֞ u|gxp8zee%CK{TU%//ILL$;;vjkkC Ξ=޽{5߿ϫWBܹCZZn:>ї=??|WXh QRRBzz:;Z6ї~":T{HNVB)'K6 6-![K7L{'p.(* '_l&RUlF6Iz'/VN҈a-"yr3 x}"*DmTy7taSҖbo. ɷc.<2v>.<f6ך9)lY5&Xdx^6S,B.&}А8κVbnŧ& .N /Tdޥۗ:5;i [r^M<ϝџj4}XqA֑emPYcz!FDeub# J b1MnA]'rlP-='1[>ṉ c0;^zZԯM5' UMg7Db%NP9-mˎgrQQE TYhu% kYƊ\G*Xcg !gM]Iݣd0ТǞ.yX&P9J5`Kc{Qxi췜:vrTϾyZ ծQiJplH)0 Y #n@ٸ.6TnG1IANedCsc {ߐݥݝ{t2hqAҶ )sֈnbξӃN)Y˸娠a]Jbz#2XL7mn jH ME rϙ볞Q]9(*P,W?m?I4-dǖur>SV؎Hh3l*eѺų2#eXC rٻm[+K7Jޮ]-׿`^W-q l QS uN;Ҽ݌Ф>)]B\sS3p iLTuTHd*aa@0k5zлҮ/mo74țJҊ,CܔZJ'yU5Z]9p7|L ܣfo5TՔKysxTeP\54՞>m f;NBTmrң8Ս%͓\7O7ͺcǝT3=]09Hqn4Gl^q.+ԝsQZKpSPm.588+n'O6%]F *>ٌD=ʃulmc<1mygvƒ.Ye)CZAD-# 1\FŃ 0@Qv8+!xJ8[dj2HF*o8/3eu#+b B:,NY2&|ӥy<᨟Plֺ)hQՑKHdRo?e?H4}_2,0K1l\*R"v N5SPq(Ά#HTj)|}(uu5<)شkv :/RS3ihjwX{`Ym ryG#!&8)`"X7@4S|eV6u6m2Ycegv5|Jډ/˴ (j#S#zWZˊ̭N )vc]Xrq*< =tm+-*M:\.c|D+*eqJ9-:7ZUiAM^c Y i&]<.d?[{!WhmR)>ZN-\|b;us]·\+sԴ}mUZVSy'];o/;[+ ь&-@MV9v%TrPɊ@5&%$-dmcyq縕搬*h;8bµ.n5+{x6ek( DPsYe ?q. 65'xM`0)r\ 4l.ҫ*:XFf-bK9SQ=w;c͡t6^g-\B(m9Fz 5fً[+ZMkIB,֋`H5g3d۶1q{v`D,}=$ KJ#9=fVps'z9(/#WirϺbwo>閺锻^FٛA"Xz8̢0"ҩőP2l#YNQ1vҲ('e<^ZS ͜6ǞČyg3Fm}tLv_N)VAI-ܨ@ٞEk)09@M87 nvZTfRF[WiNʻCsk: lT'Hp{6F]J3q0VZ4WD=cSwq1mGU_9r8a;g`uK# v.@l#K Y0!1 "#02$%34@ABX]T;%'I_9F\.kmo vQ,p]k6*79WE*䜬MV[ֹ]x"ɒ^UX-UƗoV*5bYVH~WoToNơۡa}p ˏ,,=Ӊ1G.ބ9dJ ?dn,JiZ8Q=Yf,հ˯aJyjS7 C)% (Ӹ.WۑM=U+PU5w GlTL$蘙?mCSx#7u]mxr$fkr#E!8%Pd'&a$dۮRI~LCM8.*Tif1m%*&Xpzf+F&TrZӪfةi3|Ox*b"ҢJ}mls5"o$ϖUq~٩y:bb9`ʔ̮ 9CBe6?mH~dYmK:l)Ҙnژy: or`7tҡtߎiƃ/霣la((HWH'=)8o[i7{1ȇ[0*l"|EW4i Ld[ ',vwr"*4־ =EJ S1=+!Q@ٷS:xDe :.nVy dôxx[nf] &6$"pK'Scag[ScsaG6g8*-cH8I-bY/\\4A[srb nE~1 /Q]̓2RtҨgrT6qdK)o#鄙+F@#0<#,$8.k$jF#Dxd-ֹ%%_F"m[Kܕ%FˇLk ^d,ifmpr2n./kEwmG\?ڄlP$Zʔ3g<NHz#6ԑ Waw!y5ҚwQDuɯ\[ _pbW\n2$~L8u`d,Fj9:J%yTEP~-Am:[]xx ?2_9][YDk]ikXlZVQ]NBE`R8f=[EǙ?OyLfgɫQ#AܖӦ2VD`+(&eT卷ELoqawMt='H3ipDTҟ="-ϥmWP۫?X2DG"r2 nqq#U ?-ܗgFFhJ+hl'("f{xf8ǼjLuZj`B^{X =r;M/2.\W A%ӿt|Oʕ24ԉ*[MY~TH ds%t;PJ­lZvMp#Ylj+0C[Ćኲo-=%qՅə\rfW2K*UY E,iH6~qW*VplO",xA5}\/8Ԅ}щ#__HSʋ}Xn VSk*$;#i]Ie"@ZʭlyEMmZ̹O}Pٱfb7 *Dlo+%MOwc"v둱^ el%ʷPjZ?uG`r?MMKIe;hX\l."Q5\ 'g_DNŠRUɲ r7^1PBo\NbbXxYprfͦ?onPEa7vbcj`G9q:1;YE5RR5luFhq6E:MѤU/a%W\G&|hRgI]boбLrLXXY vp>wk1LŃ?Tѕv/v%R\6WkʪmRm{5v,A:OUW/'EU" AEӘcN$o6K#ܖF9͏\6E{.n&.'_$'Wp~:m~\%\`#ɠir|nTEhKy9~佫1$Er#pEHM̸ y+ _e GT5FWMƻK:f<4;1FpdCOl/azs5&bt۪b.Gss􋕡Bo**U=et$nJ$cKb$(_:YH"`/ )ܕr8(v5'tD:.33\yIaa("0},/.m#u OpzG?MRƓy"YNg^2z"~\#DWEc'BIiLK;WmSKk=%lf ![5WzB="u[i j r70{J^|wQI#MN 7W-vظx]Z.$/{{anKLo\V}|MhTlϰ.B&TcH8f'H1q謁WCif=5$2G6z}|?DSrs[_x_;&hЙrV>qϱ0q\X#*O8ȉ)Ĝrm`qucʑ0Y9]O Oι:4խWzĴDa/DoʧHQMpSYKttE;FTZX.,M\-tumIQܷ.Μ3Ӭe{L}ZtJZ#Y3v5KOygQĉs?',m9(#bCƔ&L89-ݔVDeS'^%BV'X/D[3֑`8"m,|h\)xekLrVJCr؉fCdYy1E$(c;<X(dY%OXJR $>GG,,|u qclgᒍ3?7=qq2CJʥt#ȴe4"ME ҇%DQ2N{)R' 5QG=`X"](܇!7؝5Q|7n&QD\WbU~1O? !l؋!b엪>cc}lu1a7lI6>VX9Ee_kD%U1?$_-Α{ZN;pr`y8c1ՒX'x!yDӼIpZ7.EmD-2xrp-dҟMh_BOO:!{cR\"!#F'fU!"(cTf<zPB$Cxq:|y O|qش{%u,y(ley"mݖRrDi%Y1Hbc.HH"lj  $^ r&RZu!m^bx$Dq-,"y%#"51J$D%Y!+0VPLR|Tn#DnǣBdRP-I(I`I~4$\#<_ Z!pK| "Κ|A䜔J$+l{KQ#`ڹD]Q'!%+*ƫH5,5"Ux-D|xe{,-#gk-ЯkNJL3k/]MG'R:~G67xc[څgSLWd#!|di|ƊN<"_D,Y)d"<cjݓvoAZb㱈~$1 HKƖ%֖'\ϒ:q{:GJƫgT եvC$:nB9V$ƶʟdUhn;CKIoYȞGG.״HGQy%Tpm [Q$ڷVy(ƌPQ,kׂ c>Xx%7ؗء#5+5,3IKq #mqk!-oO#FcdlEIsN@]=ȗ/.!1" 2A03@BQa#qCRb? ө $Ws"b4$4GMqH9.4ǭXDenIQ`G[K'q#z=sSXjizI,QIlmУ[] #MIz}r#(|SG$UfܻӕGo^G cK(j-vk~H}CGS/EYv衖gQВGyd$×s8,W/[Y>Y%2%:}TiAJ2tFPJ _=>>P=IB_N{w.߄F|ڒ!3'&4 ܲRj N<:#Lk(E6/QI$.8#?1EΉkӓOfQ$DD 65g7BKF"NO_%CB|ϣ:Hb{q$!PR̄T17D׍GSv-&w$G{]+E=N(ҏ]RzˢXTxY>7PE&=:FI.F8ցsVԇ%Gk #R_B$_[S5]]!x#<%g{Yؕzei˒;?sSGBDq`Z0\[җF* Du,dvJG"Wq!LYq r[#R֫subZ՜O!~#Mn%\F\񝯒>3 O%ٓ 4rneЎnzr#Y'|/ЭG-BK45Q% X%EeDfm`~ Q +}eԄ?y/KjJ O"4ږbiGsQ=~8fdix9D9 GrdLqq\<([-,M=ѦcFVY[+B4:5];-D_)KۢR}MxDZD?;'*ȟ.Oǖ4>rG+e BI] g5}D=o1fF gBkfYx=I,cPt|MegS/;5"-QOoj2]ж{Kd܈<LX.rB~5ȓě%/]tCP"7^Cr؋t%6쭢+RiݒF؉tG!ll~cC<wy5=05KGjiItGNqwEQ31 D%Sm`PNOQr;X Q7XMxմZ f1] ) dm3HtFa9Dy6ID\$8g%jg9^ ;R9`pӼc^Hbtvd%؏=HLenWğxD"dm qd{DIMg)yq5#I`zqh|=/lHaDʶُc&be0]Q^{4fw"FDU lDim/k_$.Dڪ4"8&[-H}|4EcybjGZI_Cۗҝ3Q)DQD tdoՌpGOKf]feJ [?E[H}qUxʌ`Vv!6SDQF 8}=.rk$E-f-7BD2jѢ;ŷlN[IwY5'&М^٩?UXų\?icۉKmSVkB\D/WBH͝J'$vh,xvIriRBÒ8)gI`n[KՖhH"j!_$Bjjb5#IP;ߢ*Bݍm$iMZ4kb)+eN~+C';EqyH1FŎrRF] 잌g6{P 1CVz_}mYXd%Hr1r# \ׁdq%/)G'M/K$oOJ2)/Mdtwl|D1lbv8Y ZISO>q8IGi+E(KYN(*'OrRjtD"] j|t%7lc!^12.Žv?D_QR4HK-cP   !1A"Qaq 2BR#3@b$CSr04DTcsd%t?)񳶋]QܽuS:LҸbHl0ޓn5qxQ]Zi5rӘop,ڐnM@;ZKa$ؖ`/ebV fƔ'Y#M"I6",rYܢњ5xP.)oyR-jGlDHNt#WQÌ&+-~һˇy_^kOqMU4a"ė!X'1)ǜ{)1^JU#[1Kӏe}{s%kۖVT #4AƔBĂERFY4L:O 6hIm^F_%c-OU4pX~oq.^oROf(藾^ 2 VUʉ!6ʽ,)\hGQꨣfU u,G{υ1\Л!(jL&)YWC·W>LI`}{j>Q<#gm/+Xͥ-sOK0]񿦼ڛ/E9U;/V]p{k~Hr/exqUޏσ> 7Cf#򝚚 *<(f'y5f69E W}ԍPxlǛ/p"fW/`~I#0x;,1|[r'DsI 9)&ɉԃ_C6ޱ(hҼ, o=}3E ޯWd,ʱQbDE&a\ 5_Zg-h:b#kǔ#LV?)帩`y|'Hl}=ũM 9]UFG].U ÉsjHĬV?Q#$G#Υy#}X)",m묊Wx7ܡ(=ԓE81 J Wȑx`x)ԃgac/xV?)WO`s5V1!2D$(.5"F{ştj}+Nrv?O=Lwzۍ$QPH__!{jK:SQ|?ݻT T*a~5aH#$vR^:chσ\DcRC}_Š M-KLou#QKc"g-'HsU4 !%HFIꠘgN5$h)̊Gւ\8[Zk})ytY?[@>FVo9jvR;io|"%p랺vDɢ'{wQ' 5,0.](+9uoS=ΣA!E۲%+ZQnz}STj:?R?Jh`1KHO ǣ7'/}7|S/XkdѤ7щuWN=DSmB'WIFsAތQY0&*O[<-sƤ/lC 4٬G]7 -9NMQPwz脿HXUνH (#_$w{+ e}䲑V)OαPQɷP5 W)#Ƨ0$sύnO7#ɛȿw bʬ=1}P(VQ\|QU-߯Abɐ%>~}p.&)&3燎bcmqWJaeN[e;/ [hb:P66"ODu+Dz,'IxM!~;ۻu)f_}?6 >nJoO>'$?#%vҸF~jO}cb&OuɲCy6 #XX=t[+^c\{mbee&"¦Y$s:'[خsRJO,^F:̈́#x>5aA \39n;8c%ZMQn%G/k x ﶛO‹w- |/s˜Oğϛ ؔppVzr.G’3ojgUmS49olXXy#$8nͅ'p~53u054s,蒃˞$ɔZm}IœҿF\@}vUۙ$h#4fQn W8w\ ;6mK[nhR<V!~\7œu|;IEMr'B2A&LftWu7I^8y=Z)an"]AkXe<>TKTxWvu.,H,y r/B|nl&,6m O~T2Ñv`9 jd'#}r.9|l3a}<*hÝz.I~(tT։7TF*%T܇(p \Lh_2'~LJفєbG sDhnpj H` pՋD g^lζuT acekP 宾ꡋṶ% |FsL|BLx۽>X(1 NBXQXVq-2d kyC%GSAdCFxّM#K!:ѶQQوC l[dn#J2m8ݣ)e~7w|4Kf(ڭK٭7N0ICd|LD|?'bHlY ~=f>C诫]٬|ƣ+)ZRX{ lPSqV3GfB9rj<2}ҁZUQPfPzK"v^#F 6)Gp$fƌZ'XuR,%53t% Zmq n7/e%|dL9?;.>WSרXD,b4K0j ޼ o8xИΚwU)}#zdO$'/t^Pj5mIꦎ]|Y3/ K Iuao}A!sb!*>$j N_!6C2ok5puueFU]Քn#nڵNReE5 ^T) ޒG}~NC2I'(!1AQaq 0?!G˰`F'י ',Wesw~@*?{cv:󓡊 O(#0Xb hX Q5ʁ }lFUq.m\UN K8bd3l d?CZ2pHͥP'ד?ˏ>+_Lİ` H6sO`831p@F,Ǚ8R.RW!H9E cpov4%]ldsVprłAGP}i6;GU9 5+7~3㣀ח8q?:s 8z·`*N5z`:HQjwP2r|z%Ŏcwx{'Ӭ~$L 0 #z>1Y״K1:Q Avst=x4/9㱃Lac1h:/д=h}D{mi BC䄠8#go'hp8q>FP1Ms9m[÷Zwb O̻fI*7b==&ĪޏNcZ 'Tl0J!uWrxt6ŝx|W~1׬Fcl_Fze%J/F)cPctX1 PCV_7 ai O^eyP᧪[Pz2/ OG5፪ 59(s=q=ȄS >B!w<2AY~d19؂)\؀s]Yۖ/4ZhR*=K(m*2se"})x29A5q.`JfFQ"b2W1Jt%'ځl T;&=F>iHCµ\Ѯ0ĞhDѥ%Sꀋ(D,]p GwO3*b-+~LWU5zlԧ6=率6l?XP*0ZMf-Fe)q!XnꖺәbL˦C[,#ɞjiAsoک18"T V˘ۥRrw( h50r:fٜcہρ+r3̌snj? + Ͳ(АoU<}ƢpH)\Q<\7`"Q~ K\MW 7^Bfؐn]ǺMXn{UV}K֠:r9)b&2Ks ,ʹ"kJ QwCɿkkD_^)^Et-m~q~=D1rŭV"Q!aʓAǿ]=T!Ч} nU<eZ@#лwE c%Ҫ Zquo'jAyš%Xkb4&J>K8 Fn(OFa')n1@W7}NE s)-W" vnL:x|Z~3梽=NNNe{n>X|Dkh&*ʓ0MÓX&p3*9Ƿ4ߴAje`}BDX8W,F;̃ᡰv zZQ7MB8; V`~ҿ#! i8 g!>J_{c+H%l*KUu)p-_yq.9lvp[i3]~2>ŝcR%F;vd~Q;k/o_i1 &z LID͸O;3&A~ {r0<$h<'__1܆m0bUN#m x*NG}ZXe5[k' gK~e)VJaXut Ӥ˽LRE };Nٱ`_ao/=) 6o]X>kSEg`4N|2T؄?zfe˗GU/DM*6EwuYޢ0Sa5桷9ݸB/HE Yb1]2A&(~; ]q;w)k⾕=AfS(CF \AJ|T,)V5)EEP@sS‡f9\kՓ)tL+F+sѐp1o`[La\Dr/! _;?qB-ԥ1xn ^VO[V; ќlz)B{ܢ E0ert+28}%%1J0{hk=")] VHa9s}`nhjaۂ*~g:Nzō;"^.S=vuަhs,zC־,fQUsScBDȇ. //SF@z%   ^Hgcl; J4-Gel xui]bApkuZ.Rn* sp+cYUݠylk]Wؖɨ2F-<  +DFc|ƇGXM4VZ86{~ܕ\P@4?K ,-4:rv5mE6N Aq%b;G r>d.rퟔ칖nkÚXz0Ei߽IJn7JHkr']C,֣k{߈&Mj U5GU:gxF8U:i3`%-MU^1Y..m̡+gg "P{>-"J-ڌf2F<,F2m]%(e(t86f+*an؈NJ!~r@ߢ7 5 }#a  Mv[^5Ļ" yI"2H*6"~؊fyU=A3% xe*yp(Mw- Rٚ4@QXÂ];4Į.uB(=I!Nm3a2դMJ Qȋ/t.p+jͻ_tEWk= Yp=GE T O9 Á nh|} D#Kn6P} 1Μ ZEĽJ%5*+ vq޴;s^6z("[&҉aJN+=(%dp7O 33X1f]+<ưWaDɼVmc dꫂI 5J]Mņ|+9x}B S]8PcS~| eL{y=Dde 6QKKM~P&uuj2--ЕT=?)>ɨx!'MTՔJXڲP:c%HԃzKDSp}.dۯC vY> ?U& Lײd?Ҋ7L^L@UܖS47A'FmC:U2˵B+ 0Xr-YrkW\} `+]e`r국 pw}G9aKkl2Qs/&GpוV>K04aBO㉅f\ҐsA!X}_LGGcXƆB̈v Cp$lXN1Z<\~; >i0qaQ‡- σ-3.N?o+mmSӲ,fVɘqw[+`HWz$&պ %Zz (޿(:ՠ|&Iei׊*ʺAw~&>)|_-z`TdL2IL<9\H0tL\|"x+|u}Nڤm8e힔%j=emA. =cvJҊXǣEpoqCrkq[ƭ1_SP? oA w*R&UL{ݍe#p)E&hKi.u<[`xL:\Ep3͇̾nOxҷ)8#RKV8):_CVH̠K>50f<=8<)tear'q(^3JЛ^,t\v榎:>Ĕ?k e~A} LbàL?+SKaСT01O5ݞ#Ex1-U-#=cܦoGT\p9# r*_گFkv0joγ708pp^sSc򹔌l>UGBn5gĬUE i1P/ZIs;4eҭ,qԃ*P{YuveWQf[*] `n4s"E LMp7%FI,^V 6pE#`,w`e0 Dy04S$ʭ( ga0̣Փk(w`e;p_v Vx _Q”$ py6*<5%2@v=@= oPjd!c]OuÇx9_^IVPzŘB[࠴۹e(.tԵ)XO?y4}s}Ag Q؞}o԰'UtM;=a(vX)n˂(g2r\Nw_тTiav_ f> v@ j0'+*?#1grL9O}_S%zSo%qQ{:V_Gh?.880 @cM`o_)~nX |[+3S!j~f6 suAp:B/ŗj0^OpPtG.T q9xGon{zȥ2GJ+hkz8ʿUAp+W56RA/I[;C4QD~>|EzcltaxC!.a1 շ/af*oVΝW$Fi2{:$af*B#xso6k&IrS-ն jtFռΉK̈́n+Fym]xYTcұ釴N<SB[x #?2duHK X"p>1N#" ~B|33JLNdgR\y:UI|- v\Ek]g&m]&w0GcyWicJY W[yxB\FBTQ⳾i/.5SNSpXWN`QX KYf8yhnUk,S.YLL[<fh*X\ {Ӱ]o{TQVD~+ W& R sWBbJ,b1ꪨ)DYp1y9U\k "@H~B0{p;2TZ”y29.GDA\b"WSGkXUuѾ" ]U3tUPQ a^ġ>l6ۯe7FPq#kw%' 9B%pf*SUg.4nw𫎧 bx!Ld/&Jms}ɟMOO_`xh [5;3(G2ķJ#Ga-,*xh=n!%V#y_cxRQR@J(K<(!1z3jnWCUi~17E{9JWP;;G Mqm!> 6s B}!>!6-F9b8- 9jk]/h\i[(hJ}~` wi@+tzmig(P<^ ap +D9@$7X;n rÌ.,Y&'Mf)6' 1Rζ[!FKfaT; `|&%iPE?R;mHk|ɼ9Ac_WV0 ]@+昭xym qI79b: ҭII8S)ʝ&UX^eӌ\wMO[S@B`U[73,oJD%0;_nkkuMºT6(-_=/ahxO`D 7ߔ .H*Jb޻wUʪH,R [ɮȣXNL?Knt\r;.% '-N=U֑ђwΊ3'UUrIMFem9=ckFtb!ZH|e"K_z$sLV2P7h"F+b#X,ԿΤĭmuAvmL6ۢx5J^Է;U>լxֺF3g#:3a˦t3 '"tQ<)7̶lmzi.xkAЫ@w쀋y`5zM!PӴLo:NxZwc,~!4^ϷQ)zĉʭ5tCl=Z&Hb =͘gWP9'X$yBz,pV?9Gq'p͓Xq4v(%6C9T4tΙw>uɝztc64@H{6i N~1 x2'y L}#qEO!zݭgg;5Ըl$u2Bu-#] : ,u`'!~er"ٕu D7%Hz!FOR^3n^dαgpޓZ2>`q䌇̯ [__ddnǢ߸FGwwwF}LlԓU>ykmk;O110]NތVǽXeٱdyk{w,qbqpM?'Hg.g?/o4sbpK5;ON~sq㏎psvx27wd'ũH4 } ] O1$6Ak2-( $.";'Œ ^ea,xr8 Y=t_Z Бɴ_ t4ZAP:''{0G/I|Bu(VC:藎=Ɲ,:#f!,/Dt!Ş12٬/sٖ%šaa|X W39ռ=' -?D^K aМf H'Vj!Gώ ^{E$xz.v`=@߁!Q! ;@ $~|K G7c"b9??.ZFecR1=e,yNG#|==QNutdS^X  [!|u>οH/Gb^dauk y.#KugygzW~zAo\#n_K!V]@C#7Fn|e=`ŜoQ,Dyvf~A:y>F#8t^[bųzݐwaٛOL8<8n7ِbp-Rv]o}˨>W2b!񰾉!ypl-2wCݣb^NIGPgd̳)CTvLfhlc}JO[cnbt>ncɱty6b*'^7#iڶW%Dg,[y&᜼>۲d@Y; `m3c}a{Pso|1eB^{:"%<d)K #Krz=}Z%dzFӷ3[Z'ِ ٧gRkoKm"\RI2}iY w|w^Ke}2I|96h Vº]} #m;zN=I&Y{ g mp[d8"##_a[<1՚/6`.̎ffӻ"pgW[o!m徶O06u| ]aPz7о>"/fWSݦXn|o&7Br=] {F Ż;(;W-3,IlQFAЏZHj}}!,1?Cm?S\[Gïj>tl_0(\ \ `[tHv$;c 0BCфg-.2uYq1lϗogRqI ?Nz.ы@hW>yط|ɶT5 8&6sbf(c/ўv!ׅws!a#8F9ܙqVlzչ ǵK/\C7`8iOfHxoNimw[~GϗoW9~[kg[>VܗeAz!vrzS^R;`[%ͥ2}yeQ:߇08:=A`#r9'ܐGl9:.j5 ?nD]|۞!\ن=η:&[oF9 o@xH#`yH.\vIڜNrӨrcA%GlwO ~K 6$xiK'Mn^83仏K`ki3?usYg1Y @܊48dY Od3̐#9A/{=Cy0T)u&Om.Ln69m{94t6w(g&-۠ Yc;{sNB1Χ\<"1m#a<ߋ{D FLJlKOF$Ӊo"xx!tZBrjpclnK6#YVeJQ}]18眯eTwv)f\$Wշ~Ot QOCg.SǑlA]#̗'mgsG>7w{H.BRZrׅ6JkāL^+";d{MDO 9׍Da&N&Ohlg"z}1#H ߮%΁ vRL3Yd //rqeB\pGHxrPq d&foq[u-*_8OPkleykr,^p/vZiaݢz)q+'vJ@wpɯ.> ]'n-Yc8n5vGZ5;H]!rk8k31%r1n;nqc|unCc >,G=12daGh{e*˓쁋ͨ: g '0&G1J\ŒI2V͌ $LǙ\9, .ϡf?7R/KZo'P{(_ʞYzm_ep>As^Z\G!b$!2{.ϓ~I'<ٛ;wuTCx,)&Y%i/Fsۋ6FyGLLjF@ (?y]̨d+mUo)K+ gA 9~Wik2=">1 8uH㓇5*9`g/=e\b- ֹS0[] ?U%? E@uUB/u5oqNWW( 9mT{d:5p}T.4ښ\r 3p.[C(0tkPbI05+w^{unP.VOniO<3 jQ;>)&s)EkDA\]`wMDmœDwňiyrW\XnӕDuhvey̪5BC*IbIn `{pu S8C!FM#mNv ه f:bm `cM9#,蓺\Tcd5v@U9Z+_<-b'Eq9. "ڵp~~g =9@]a9!wtx <+ 49W,jy_."bj}8J}R8@-ksiDf4ɓc䎩O|=·5xx N<˖AB W\M|HLA'^2PcL$^AQfPD0uh %@Cy`ED#x'V*Ƥ@]ź Twnt\[\)t܂؉({R.tCqդSKT^M\l~9S9~Gp[%Lg<y MMܸ\b?G)Th \;Y~D5)iFB:æN[m 9adhhqubRt ADЄdMQ4'l*b4 hTfl"}b ,󁣣ً9b%mx/x -#s[S0Q)ͨdRA 8`Ҡ}t^7۬ƲEN:xгC9 ic:5boCR*Y5J !c&0Dh"K͂#-ل9+=9 zڡ*ˉ)Gh E/C?WiݪV(AO8FH#f78l,3fW+ 9Q%ĦTF2J00L'=2GY dW~=rzNpćSvH] 4U!ҕ4ax2SavhI{<A)}# l5 v,rPp&anxhC# ^ Z"ї.A9cece{٦h e}!%$HISu~>DpŚda7yx}%N6y~_:_*͞>`c0NU`/8h>eƼwPbzYf v91An3ZWXEgF<ˉQܚ^2\ԔM<q1rÔ DODoN/9R~.Cs!?xmg7+Pכ|e/ا+6D)J1?E#嚂I}:%ҎOK YMw! B_ chn!0A](qVODugXMUx ˅x 8, /pnlt~ϣW(`? Ʒ/T 9S#8,,v`KWGd67NX\ Rр4l(B񆱶^1&/qAVӵm v#PڴhgɆζXF )R:<`0)9mZeE2*=tJrTP x[1bg@`QzSݭcYSA3Ƒ4B $ e#)pn߼o8'sw&irHvnȕy(aJ"ȟ0BS _*>5h)54wvm\E*(2;W9 rQƁE}ۚsTg֏R@Gt^ CПgd$@LaL>"c9xorhd a[^>]hA]b A4ףL&9ċBv@O)u^`x# šBXcF+ \-9B%k->S>Q6%GPD2@޾F]ʎ㴉|4CqM2m#8>Kdcnűz}liN:CI[6өlZ<$FD{]Ķ:+\ R[]׈h'](SscT=>\,2cpbS5 x1\Ǐ& ,P}g>rdxFm \yOM wd /cP'!=Y X,A *Wd(,064)J&ь8AN=g:%|WAU( My|Ow'MBv`4j $#q9$4#"| >oF: @6o }+>ɱz F`p/Nc ݰW!BZGrY R3. vh^'DJ=:#cQFuoVeShh))#kapSfH1?DW nPOYn+C69A~_[p_Zk=W8,S~6('8$zDW)bp0 ҩ(70TvH}?Lnd}ƫ ;޳Ԑ?itEm ӆxNSF7Bﶓ,/,M&%Gu JйwBa[8|md ťGy'OQ! F69@jW4V4B섉<5'|L_7~x$C܁8FnD"83N~x!7=bY#gvaх p.>OCADDʓE1C#.F?ᦱ]}@>rY}2(@u? 7$ś 2A0 \[<?%ҿ'8(]_G0# j=`  *\Ԝ^5 }jh&`{mk'} [/o.Pɷ9xxxYBb1'f aM9(XH\] }pm_7 $l,Xv q"`=ns(tv!\Ն >^MGЂ wˡrEYRR<(4R UeUԧhJ2Τ&nzR1˦3# U@"9нj29ฉi: ''sBϐ2f)n+"*Am{L޻BPHPӦÚAF#LR~^0_fZ(/C*.uwn9Rח^ʕ[ȡ|ko<p$+ R(7bл&!C[α˂/_A)qc 7`v>^?*L6s]7-\^ ֍LU0[lܭTŞr&P;ZV .ycF 5d8}^HR}xKqJk銕3ZU͸XZ9j9(HX>OQCA:7xrF]n8(ȖF&"y(}@YDfQqGDQ4P_ծJM>DmP6֨Gph>~=h0bU_yFRbP.;Y֢Ϩ{ȷ2n ]{iVj\CZx=`'QZ.S /8sW #QL T̜n b1=_ ԛl`tVUOpt:*|f F-H"<ænŖxe2IUb  XM3b__e$`1# J9a ՂbMؐ|X3B-)3MKxrL=` P;#Z Oš I{΁$;sd44,\HgNBjOa.f~g<M38AW? )?8ɿi1L_Sk<^\Qo{!P} :*(ykJanw@8҇0;:2"p'+7Rz  c2Z/@xgHaPét G!7 )ccou_8KP%a?F1&xhZÉy1T a%'%q:1@vV%:m'#Oy 0ƒSW̓ FAkpkri5Ωã?_W3^gbM^aKnЗ86N(#G@GXjb kjGOqdkp<ōh(o'f.U[| PgB'nc[Nѻ6oz}Ef. AoD$F|&ho1TEHd^^0"Ⴠx6;Gn%1\㱐gV\; sJE] گfG KD{Tw9 P`ntAJ<)^&$_؇L;%$dN:Wa"0aWcI^2zgA>zI6aM34ͩe6[8"僝z0 ˢ}2%zסE)y{KHܸ%' aRLHƀpc(w9z"Ѐn \Os.,P_OQ~k/'8U`چ]Aڇ.*zgćAs`ڶcZGq<~89~$9gk99[#` xŘu\'gPQ8(!~XB}<4 'P81I>>Sj6o䫃 hw*B-'&(.+]t7У#.> 2fշ5\ *캑@Z48FrTt;R4r71hF!fbu<4Ӆ`0rچM34@A1Tx5Ƭ0=E <a1vNquZKÞ !'arv!/Xɵk Hּf~'?S3Yٜ ʗZȮR9aXĘvq=#G~eRi:6(tW"vjd}@)*',o%H⚜Og62Qu*c%8IN0oe@2D9l2x903Cmh,:ImiF-mгf/+&7PpƑ`U!$e݄!؉)"L:2 Ņ9B:7L*X6_@.ůݡ(Se/Q8]ό7x[F'nX.< t~"C}f53rg9YLR:X`eψ ```Scheme @../tests/integration/ffstream.scm@ ``` ### Output When recording video and audio, the methods *write-image* and *write-audio* are used to write video frames and audio samples. The following example records video frames using Video4Linux2 and audio samples using Pulse audio. ```Scheme @../tests/integration/ffwrite.scm@ ``` aiscm-0.15.1/doc/ubuntu.png0000644000175000017500000000127413213600051012403 00000000000000PNG  IHDRasBIT|d pHYs  ^IDAT8uMHQH`M ]hcP"$Z46Ÿ"swn2+U.\,+p "(ﻷu6r}+ڨ&.0m9)0#7ϋ͍REB ۛZFJz\n4σN1Q3'/GYU{fƑ{.TϞX5]@B8G#+"h x /1<,V4jkU1uފ{@:*LvX6.-Y!+#Snr\ܙ"ͨciaU^EqSSoIstgsPy!gMo& owԥ4,__\=!dEہ Vl y}wW2p3:>N'D*n9S9AUuiO/0_q_?,Qo[u= (][l?s ,åK[QN=PȬcV U;}&USVv%0`wJJmB\[Z`3RpV+\3n=yl09?wg=!IENDB`aiscm-0.15.1/doc/includes.scm0000644000175000017500000000053313213600051012662 00000000000000(use-modules (ice-9 rdelim) (ice-9 regex)) (define (compile port) (let [(line (read-line port))] (if (not (eof-object? line)) (let [(match (string-match "@(.*)@" line))] (if match (call-with-input-file (match:substring match 1) compile) (write-line line)) (compile port))))) (compile (current-input-port)) aiscm-0.15.1/doc/fubk-colours.png0000644000175000017500000000423313213600051013472 00000000000000PNG  IHDR@oYCgbIDATxMd %;YC̀B$. BYwBTp.g" ! AcZz|s<Zss?Ouu0@@dIdIdIC+i6ز, jj&_V@- e= jeg4@Pf lпnn,Y'3~}}2&un4}&iGs @AH #HI%` $  $4v rr!$g@sv#T9;y c@#0vw}  :4m] w,|D;?Hcgu<@=q{SxN54@P@]\ F` n hf6 `?@%0-@;)k@uhp:)*;,H͝@NfIRņ`v֜@%ݻ q@U݁IfaΕFogWot{U h$@v`wyyj h?NbLz] فi<"$ Ldf6J>@d&I$@ޓ)@v`$;0I 0I 0I&IRNb $فI4;َnƚG ;0IR`$Tމlj{U@$L$L$LdINdK ~i~'|<.y=y)y5y#y2y,{AjhVZr-9:HIHI>O.&'${qxvVDrxy>y1y352Kzr-)sߓ _?~ס=@g5|jzGguN>9N.$4{mM9e;n˳hr[4z hu[42(q_M@[C ؗ}u03 {&yn8o%Ǻ}&67xF{/qm hu4_򠃮m6af6=B|7xn'2=W4e:ɺί$/?~ys6:{o~sL>{mt٢ο~O$UJ.PP24N%y6]f@ɯ< '`\v= ߙah>T4w(@RE@;H* cGI%` $ $4;q<1hGLΠ$MO`M}s *9 r *9d@T~}XdǺ Bh9M4@dYY7@2Z]Y7@u1[Y7@u4@d @ȕ h@fMQߧX@`M+ <+ :>7 2Ք ~@&$52zI&I&I&Iҝ:Z1|IENDB`aiscm-0.15.1/doc/index.md.in0000644000175000017500000001030713220457302012415 00000000000000# AIscm Reference Manual [![GPLv3](gplv3.png)](https://www.gnu.org/copyleft/gpl.html) [![amd64](amd64.png)](https://en.wikipedia.org/wiki/X86-64) [![Travis CI](travis.png)](https://travis-ci.org/wedesoft/aiscm) This manual is for **AIscm** (version @VERSION@). [**AIscm**][1] is a **[Guile][2] extension for numerical arrays and tensors**. Performance is achieved by means of a JIT compiler. Control all data and machine code down to every single bit and byte. ## Documentation * [Installation](installation.html "Installation") * [Built-in assembler](assembler.html "Built-in assembler") * [Input/output](io.html "Input/output") * [Arrays](array.html "Arrays") * [Array operations](operation.html "Array operations") * [Convolutions](convolution.html "Convolutions") ## See also * [Github page](https://github.com/wedesoft/aiscm) * [Gitlab page](https://gitlab.com/wedesoft/aiscm) * [Bitbucket page](https://bitbucket.org/wedesoft/aiscm) * [Initial package review email thread](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837167) * [Debian package tracker](https://tracker.debian.org/pkg/aiscm) * [Ubuntu Launchpad entry](https://launchpad.net/ubuntu/+source/aiscm/) ## Credits * Jan Wedekind: software development * Andrey Rahmatullin: Debian package sponsor * Gianfranco Costamagna: Ubuntu package ## External links * [Chainer: A Powerful, Flexible, and Intuitive Framework of Neural Networks](http://chainer.org/) * [DyNet: dynamic neural networks library](https://github.com/clab/dynet) * [Torch: Scientific computing for LuaJIT](http://torch.ch/) * [Theano: Python library for JIT compiled array operations](http://deeplearning.net/software/theano/) * [PyTorch: Tensors and dynamic neural networks in Python with strong GPU acceleration](http://pytorch.org/) * [Tensorflow: numerical computing with dataflow graphs](https://www.tensorflow.org/) * [Numpy: Python library implementing n-dimensional arrays](http://www.numpy.org/) * [Bergstra et al.: Theano: A CPU and GPU math compiler in Python](http://www.iro.umontreal.ca/~lisa/pointeurs/theano_scipy2010.pdf) * [Lush: large-scale numerical computing](http://lush.sourceforge.net/) * [Vigracket: Vigra bindings for Racket](https://github.com/BSeppke/vigracket) * [Ceemple C++ OpenCV IDE](http://www.ceemple.com/) * [Arrayfire: accelerated computing library](http://arrayfire.com/) * [Halide: a language for image processing and computational photography](http://halide-lang.org/) * [PeachPy: Portable assembly for Python](https://github.com/Maratyszcza/PeachPy) * [Guile manual](http://www.gnu.org/software/guile/manual/) * [Guile-CV: computer vision library functional programming library for Guile](https://www.gnu.org/software/guile-cv/) * [GOOPS: object-oriented extension to Guile](https://www.gnu.org/software/goops/) * [COOPS: Chicken Scheme object system](http://wiki.call-cc.org/eggref/4/coops) * [System V Application Binary Interface](http://www.x86-64.org/documentation/abi.pdf) * [Intel® 64 and IA-32 Architectures Software Developer Manuals](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) * [CLASP: Lisp with LLVM Jit and C++ foreign interface](https://github.com/drmeister/clasp) * [Embedded Language for Accelerated Array Computations](https://github.com/AccelerateHS/accelerate) * [SymPy: computer algebra in Python](http://www.sympy.org/) * [Maxima computer algebra system](http://maxima.sourceforge.net/) * [Julia language](https://julialang.org/) * [Kona language](https://github.com/kevinlawler/kona) * [Guile SDL2](https://dthompson.us/projects/guile-sdl2.html) * [Guile OpenGL](https://github.com/guildhall/guile-opengl) * [Jakobsen: Advanced Character Physics](http://www.cs.cmu.edu/afs/cs/academic/class/15462-s13/www/lec_slides/Jakobsen.pdf) * [COMP768: Rigid Body Dynamics (I)](http://www.cs.unc.edu/~lin/COMP768-F07/LEC/rbd1.pdf) [(I)](http://www.cs.unc.edu/~lin/COMP768-F07/LEC/rbd2.pdf) Copyright © 2013, 2014, 2015, 2016, 2017 Jan Wedekind. [1]: http://wedesoft.github.io/aiscm/ "AIscm" [2]: http://www.gnu.org/software/guile/ "Guile programming language" aiscm-0.15.1/doc/dependencies.sh0000644000175000017500000000061313220462642013343 00000000000000sudo apt-get install -q --yes build-essential autoconf automake libtool sudo apt-get install -q --yes guile-2.2-dev linux-libc-dev gettext libmjpegtools-dev imagemagick libmagickcore-dev libpulse-dev libjpeg-dev libx11-dev libxext-dev libxv-dev libxmu-dev libxi-dev libxpm-dev libglu1-mesa-dev libgl1-mesa-dev libswscale-dev libavformat-dev libavcodec-dev libavutil-dev libavresample-dev pandoc aiscm-0.15.1/doc/installation.md0000644000175000017500000000372413213600051013400 00000000000000# Installation ## Using binary package
There are AMD64 binaries for [![Debian](debian.png "Debian")](https://www.debian.org/) Jessie (8), [![Debian](debian.png "Debian")](https://www.debian.org/) Stretch (9), [![Debian](debian.png "Debian")](https://www.debian.org/) Sid (10), [![Ubuntu](ubuntu.png "Ubuntu")](http://www.ubuntu.com/) Trusty (14.04), and [![Ubuntu](ubuntu.png "Ubuntu")](http://www.ubuntu.com/) Xenial (16.04) To install the software, you have to add the AIscm repository to your list of repositories and install via *apt-get*. To do this, paste the following lines into your terminal: ``` echo "deb https://wedesoft.github.io/aiscm/apt `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/aiscm.list wget -qO- https://wedesoft.github.io/aiscm/apt/pubkey.gpg | sudo apt-key add - sudo apt-get update sudo apt-get install aiscm ``` If you wish, you can additionally register the sources with *apt*: ``` echo "deb-src https://wedesoft.github.io/aiscm/apt `lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list.d/aiscm.list ``` ## Compile from source
### Get the source code You can download the latest release like this: ``` wget `curl -s https://api.github.com/repos/wedesoft/aiscm/releases/latest | grep download_url | cut -d '"' -f 4` ``` ### Install dependencies You need to install the dependencies: ``` @dependencies.sh@ ``` ### Build AIscm The software then can be unpacked and installed as follows: ``` tar xJf aiscm-*.tar.xz cd aiscm-* ./configure make -j sudo make install ``` ## Recommendations It is recommended to enable a REPL with history and colorized output. *I.e.* install [guile-colorized][1] and then create a file ```~/.guile``` with the following content. ``` (use-modules (ice-9 readline)) (activate-readline) (use-modules (ice-9 colorized)) (activate-colorized) ``` [1]: https://github.com/NalaGinrut/guile-colorized aiscm-0.15.1/doc/buttondown.css0000644000175000017500000002722713213600051013276 00000000000000/* Buttondown A Markdown/MultiMarkdown/Pandoc HTML output CSS stylesheet Author: Ryan Gray Date: 15 Feb 2011 Revised: 21 Feb 2012 General style is clean, with minimal re-definition of the defaults. It also contains built-in print optimizations. All elements that Pandoc and MultiMarkdown use should be listed here, even if the style is empty so you can easily add styling to anything. There are some elements in here for HTML5 output of Pandoc, but I have not gotten around to testing that yet. */ /* NOTES: Stuff tried and failed: It seems that specifying font-family:serif in Safari will always use Times New Roman rather than the user's preferences setting. Making the font size different or a fixed value for print in case the screen font size is making the print font too big: Making font-size different for print than for screen causes horizontal lines to disappear in math when using MathJax under Safari. */ /* ---- Front Matter ---- */ /* Pandoc header DIV. Contains .title, .author and .date. Comes before div#TOC. Only appears if one of those three are in the document. */ div#header, header { /* Put border on bottom. Separates it from TOC or body that comes after it. */ border-bottom: 1px solid #aaa; margin-bottom: 0.5em; } .title /* Pandoc title header (h1.title) */ { text-align: center; } .author, .date /* Pandoc author(s) and date headers (h2.author and h3.date) */ { text-align: center; } /* Pandoc table of contents DIV when using the --toc option. NOTE: this doesn't support Pandoc's --id-prefix option for #TOC and #header. Probably would need to use div[id$='TOC'] and div[id$='header'] as selectors. */ div#TOC, nav#TOC { /* Put border on bottom to separate it from body. */ border-bottom: 1px solid #aaa; margin-bottom: 0.5em; } @media print { div#TOC, nav#TOC { /* Don't display TOC in print */ display: none; } } /* ---- Headers and sections ---- */ h1, h2, h3, h4, h5, h6 { font-family: "Helvetica Neue", Helvetica, "Liberation Sans", Calibri, Arial, sans-serif; /* Sans-serif headers */ /* font-family: "Liberation Serif", "Georgia", "Times New Roman", serif; /* Serif headers */ page-break-after: avoid; /* Firefox, Chrome, and Safari do not support the property value "avoid" */ } /* Pandoc with --section-divs option */ div div, section section /* Nested sections */ { margin-left: 1.5em; /* This will increasingly indent nested header sections. 1.5 Keep it in line with bullet indent of parent section */ } p {} blockquote { font-style: italic; } li /* All list items */ { } li > p /* Loosely spaced list item */ { margin-top: 1em; /* For IE's lack of space above a
  • when the item is inside a

    */ } ul /* Whole unordered list */ { } ul li /* Unordered list item */ { } ol /* Whole ordered list */ { } ol li /* Ordered list item */ { } hr /* Simple line for normal rules */ { border: none; height: 1pt; background: none; border-top: 1pt solid #333; } /* ---- Some span elements --- */ sub /* Subscripts. Pandoc: H~2~O */ { } sup /* Superscripts. Pandoc: The 2^nd^ try. */ { } em /* Emphasis. Markdown: *emphasis* or _emphasis_ */ { } em > em /* Emphasis within emphasis: *This is all *emphasized* except that* */ { font-style: normal; } strong /* Markdown **strong** or __strong__ */ { } /* ---- Links (anchors) ---- */ a /* All links */ { /* Keep links clean. On screen, they are colored; in print, they do nothing anyway. */ text-decoration: none; } @media screen { a:hover { /* On hover, we indicate a bit more that it is a link. */ text-decoration: underline; } } @media print { a { /* In print, a colored link is useless, so un-style it. */ color: black; background: transparent; } a[href^="http://"]:after, a[href^="https://"]:after { /* However, links that go somewhere else, might be useful to the reader, so for http and https links, print the URL after what was the link text in parens */ content: " (" attr(href) ") "; font-size: 90%; } } /* ---- Images ---- */ img { /* Let it be inline left/right where it wants to be, but verticality make it in the middle to look nicer, but opinions differ, and if in a multi-line paragraph, it might not be so great. */ vertical-align: middle; } div.figure /* Pandoc figure-style image */ { /* Center the image and caption */ margin-left: auto; margin-right: auto; text-align: center; font-style: italic; font-size: small; } p.caption /* Pandoc figure-style caption within div.figure */ { /* Inherits div.figure props by default */ } /* ---- Code blocks and spans ---- */ pre, code { /* Preserve whitespace, but allow word wrapping */ white-space: pre-wrap; word-wrap: break-word; } /* Coloring */ /* This will be only for code spans */ code { background-color: #F4F4F4; } /* This will be only for code blocks */ pre, pre > code { background-color: #F4F4F4; } pre /* Code blocks */ { /* Distinguish pre blocks from other text by more than the font with a background tint. */ padding: 0.5em; /* Since we have a background color */ border-radius: 5px; /* Softens it */ /* Give it a some definition, and if printing doesn't print the background */ border: 1px solid #aaa; /* Set it off left and right, seems to look a bit nicer when we have a background */ margin-left: 0.5em; margin-right: 0.5em; } @media screen { pre { /* Shadow on screen instead of border */ border: none; box-shadow: inset 1px 1px 3px #bbb; } pre, pre > code { /* On screen, use an auto scroll box for long lines in a code block */ white-space: pre; word-wrap: normal; overflow: auto; } } code /* All inline code spans (applies to pre>code as well) */ { /* Pad a little from adjacent text */ padding-left: 0.3em; padding-right: 0.3em; padding-top: 0.1em; padding-bottom: 0.1em; border-radius: 3px; } @media screen { code { box-shadow: inset 0px 0px 2px #bbb; } } pre > code /* Code span in a code block */ { /* Remove some styling on the span box */ padding: 0; border: none; border-radius: none; background-color: inherit; box-shadow: none; } code.url /* Pandoc simple URLs */ { background-color: inherit; /* Un-color from previous rules */ box-shadow: none; } /* ---- Math ---- */ span.math /* Pandoc inline math default and --jsmath inline math */ { /* Tried font-style:italic here, and it messed up MathJax rendering in some browsers. Maybe don't mess with at all. */ } div.math /* Pandoc --jsmath display math */ { } span.LaTeX /* Pandoc --latexmathml math */ { } eq /* Pandoc --gladtex math */ { } /* ---- Tables ---- */ /* A clean textbook-like style with horizontal lines above and below and under the header. Rows highlight on hover to help scanning the table on screen. */ table { border-collapse: collapse; border-spacing: 0; /* IE 6 */ border-top: 2pt solid #000; /* The caption on top will not have a bottom-border */ border-bottom: 2pt solid #000; /* Center */ margin-left: auto; margin-right: auto; } thead, th /* Entire table header */ { /* Well, we add th here since IE doesn't seem to respond to thead. This will work until we have multi-row headers. */ border-bottom: 1pt solid #000; background-color: #eee; } tr.header /* Each header row */ { } tbody /* Entire table body */ { } /* Table body rows */ tr { } /* Odd and even rows */ tr.odd {} tr.even {} tr.odd:hover, tr.even:hover /* Use .odd and .even classes to avoid styling rows in other tables */ { background-color: #eee; } td, th /* Table cells and table header cells */ { vertical-align: top; /* Word */ vertical-align: baseline; /* Others */ padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.2em; padding-bottom: 0.2em; } /* Removes padding on left and right of table for a tight look. Good if thead has no background color*/ /* tr td:last-child, tr th:last-child { padding-right: 0; } tr td:first-child, tr th:first-child { padding-left: 0; } */ th /* Table header cells */ { font-weight: bold; } tfoot /* Table footer (what appears here if caption is on top?) */ { } caption /* This is for a table caption tag, not the p.caption Pandoc uses in a div.figure */ { caption-side: top; border: none; font-size: 0.9em; font-style: italic; text-align: center; margin-top: 0.5em; margin-bottom: 0.3em; padding-bottom: 0.2em; } /* ---- Definition lists ---- */ dl /* The whole list */ { border-top: 2pt solid #888; padding-top: 0.5em; border-bottom: 2pt solid #888; } dt /* Definition term */ { font-weight: bold; } dd+dt /* 2nd or greater term in the list */ { border-top: 1pt solid #888; padding-top: 0.5em; } dd /* A definition */ { margin-bottom: 0.5em; } dd+dd /* 2nd or greater definition of a term */ { border-top: 1px solid #888; /* To separate multiple definitions */ } /* ---- Footnotes ---- */ a.footnote, a.footnoteRef { /* Pandoc, MultiMarkdown footnote links */ font-size: small; vertical-align: text-top; } a[href^="#fnref"], a.reversefootnote /* Pandoc, MultiMarkdown, ?? footnote back links */ { } @media print { a[href^="#fnref"], a.reversefootnote /* Pandoc, MultiMarkdown */ { /* Don't display these at all in print since the arrow is only something to click on */ display: none; } } div.footnotes /* Pandoc footnotes div at end of the document */ { } div.footnotes li[id^="fn"] /* A footnote item within that div */ { } /* Fancy rule for footnotes section (from http://css-tricks.com/examples/hrs/) */ div.footnotes > hr { margin-top: 2em; padding: 0; border: none; border-top: double; border-color: #333; border-width: 3pt; color: #000; text-align: center; } div.footnotes > hr:after { content: "NOTES"; display: inline-block; position: relative; top: -0.8em; font-size: 0.8em; padding: 0 0.5em; background: white; } /* Convenience classes for DIVs or other things inserted into the Markdown */ /* You can class stuff as "noprint" to not print. Useful since you can't set this media conditional inside an HTML element's style attribute (I think). */ @media screen { .noscreen /* Don't display on screen (something for print only) */ { display: none; } } @media print { .noprint /* Don't display in print (something for screen only) */ { display:none; } } .block-center { margin-left: auto; margin-right: auto; display: table; } .text-center { text-align: center; } .block-right { margin-left: auto; margin-right: 0; display: table; } .text-right { text-align: right; } .block-left { margin-left: 0; margin-right: auto; display: table; } .text-left { text-align: left; } aiscm-0.15.1/COPYING0000644000175000017500000010451313213600050010640 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 . aiscm-0.15.1/NEWS0000644000175000017500000000001413213600050010273 00000000000000See NEWS.md aiscm-0.15.1/config.h.in0000644000175000017500000000567513220460250011645 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_ASSERT_H /* use avformat_alloc_output_context2 to initialise output context */ #undef HAVE_AVFORMAT_ALLOC_OUTPUT_CONTEXT2 /* use av_frame_get_buffer to initialise output frames */ #undef HAVE_AV_FRAME_GET_BUFFER /* call to av_frame_make_writable required */ #undef HAVE_AV_FRAME_MAKE_WRITABLE /* AVFrame has pts */ #undef HAVE_AV_FRAME_PTS /* av_packet_rescale_ts available */ #undef HAVE_AV_PACKET_RESCALE_TS /* av_packet_unref available */ #undef HAVE_AV_PACKET_UNREF /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* av_frame_alloc is supported */ #undef HAVE_FRAME_ALLOC /* use av_image_get_buffer_size to get buffer size */ #undef HAVE_IMAGE_BUFFER_SIZE /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcmp' function. */ #undef HAVE_STRCMP /* 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 /* libswresample is present */ #undef HAVE_SWRESAMPLE /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* 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 to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc aiscm-0.15.1/ChangeLog0000644000175000017500000162130513220460164011373 00000000000000commit 92f8b6a3a85381772ee27fc9d823a1e588f1bc87 Author: Jan Wedekind (Dr) Date: Mon Dec 11 21:56:04 2017 +0000 Specify section and priority when invoking reprepro commit 50518115752cb86d43414aca36345cb852e6e186 Author: Jan Wedekind (Dr) Date: Tue Dec 5 22:35:06 2017 +0000 Add apt-utils to container commit 250e1b867dce308d3a30e82bcfd1a9b99d59548a Merge: 6c3f8555 8fe9f44a Author: Jan Wedekind (Dr) Date: Tue Dec 5 22:34:00 2017 +0000 Merge branch 'debian/sid' commit 8fe9f44ac452f9d5aae45a0016cd872143bdf73c Author: Jan Wedekind (Dr) Date: Tue Dec 5 21:42:25 2017 +0000 Force push to mentors commit bd1b159c736d2be13ca231c30ecb0e02159f4139 Author: Jan Wedekind (Dr) Date: Tue Dec 5 21:23:41 2017 +0000 Update changelog commit 5f925ea88626bcb5b45d6fce476e51221e1793d1 Author: Jan Wedekind (Dr) Date: Tue Dec 5 21:09:20 2017 +0000 Update standards version commit c2c95527991bce5fc64edc2f64244827d68e5ee3 Author: Jan Wedekind (Dr) Date: Tue Dec 5 21:09:06 2017 +0000 Use OPTS environment variable to override Docker cache commit 6c3f855528a4c130b7ab7a92ea761c75149d5296 Author: Jan Wedekind (Dr) Date: Tue Dec 5 12:37:53 2017 +0000 Force upload to Debian Mentors commit f375b16e59772a33a383aeefbedf570e1a4e9496 Author: Jan Wedekind (Dr) Date: Sun Dec 3 20:07:43 2017 +0000 Version 0.14.1 commit 55d49264186d13c7c59d323a6e980cc9c16a1a18 Author: Jan Wedekind (Dr) Date: Thu Nov 23 20:36:35 2017 +0000 Update TODO commit 1c6db83fef1de73e7304988358d765cdc19402bb Author: Jan Wedekind (Dr) Date: Thu Nov 23 20:34:24 2017 +0000 (elapsed reference #t) resets clock commit 4d02f353c90d6576ccaeb96a70fcb52337aaba37 Author: Jan Wedekind (Dr) Date: Thu Nov 23 07:56:34 2017 +0000 Removed some prototype code commit bdc8bdeb75cd30be1a07d7495209e9fda62d2e86 Author: Jan Wedekind (Dr) Date: Thu Nov 23 07:55:48 2017 +0000 Update TODO commit 9b4173a07c3e496b6a6808b8564d6ba245f6a21e Author: Jan Wedekind (Dr) Date: Wed Nov 22 22:09:46 2017 +0000 Reenable visualisation commit 5ea4196b016f516e2fc88a4a5b93b5d2f9a2f26d Author: Jan Wedekind (Dr) Date: Sun Nov 19 23:03:23 2017 +0000 Add loss commit dfcb97ebf1f88c7d2a771d6d57fc1ee4b7a57519 Author: Jan Wedekind (Dr) Date: Sun Nov 19 22:43:24 2017 +0000 Elastic collision commit 88548791a354637bb0bb036509b4db615db3e0bd Author: Jan Wedekind (Dr) Date: Sat Nov 18 22:56:35 2017 +0000 Find collision point commit 88833891adb06abe715c36731396f0fd7d808e92 Author: Jan Wedekind (Dr) Date: Sat Nov 18 22:50:45 2017 +0000 Detect collision commit 07a7285ebe035b53130474765358eb7de1ed7b30 Author: Jan Wedekind (Dr) Date: Sat Nov 18 21:39:57 2017 +0000 2D physics commit 756b5b0b763213b2d0124c014a6972dfe15194fc Author: Jan Wedekind (Dr) Date: Fri Nov 17 23:13:04 2017 +0000 Added lander commit 11ec1150f89054598bb3001907d97a4fb7c786c1 Author: Jan Wedekind (Dr) Date: Fri Nov 17 22:10:13 2017 +0000 Remove comment commit 3a84be481bf1bc9874c9cfd0936c303c0fb6eb42 Author: Jan Wedekind (Dr) Date: Fri Nov 17 22:07:07 2017 +0000 try constraint commit c91851921824b52e89b39323d346ac31ca467371 Author: Jan Wedekind (Dr) Date: Fri Nov 17 19:09:35 2017 +0000 Add author names commit bce4ed3640fd7a2ac1adc0d0789c6a83d6db2d26 Author: Jan Wedekind (Dr) Date: Fri Nov 17 17:52:54 2017 +0000 Add link commit 5fca7c63271d0d3abfe0d054b32209d1002a519b Author: Jan Wedekind (Dr) Date: Fri Nov 17 17:47:53 2017 +0000 d/m*dt -> f commit 6d37774c2920bf9ab45bf1c1a6cd0b6fe569ba9b Author: Jan Wedekind (Dr) Date: Fri Nov 17 17:39:00 2017 +0000 Add damping to Verlet commit 033ac5833686d7294b51372bde764e6873313a29 Author: Jan Wedekind (Dr) Date: Fri Nov 17 17:32:19 2017 +0000 Normal Verlet commit fb966d508b19c15550c70b060be072415b40b034 Author: Jan Wedekind (Dr) Date: Fri Nov 17 13:22:27 2017 +0000 Trying leapfrog verlet commit a78d5df724af999351f31a0b17c80bf02250dc03 Author: Jan Wedekind (Dr) Date: Fri Nov 17 12:55:16 2017 +0000 Put Euler in separate method commit efdfbae51d51a1f9e00279a3de5591b30d4efc46 Author: Jan Wedekind (Dr) Date: Fri Nov 17 12:53:11 2017 +0000 Simulate spring using Euler integration commit 7a4fb9cc2800161a4c96ba7b431ab61ca5395b5c Author: Jan Wedekind (Dr) Date: Thu Nov 16 22:27:04 2017 +0000 Increase gravity commit cfc623efadac67e1f39e7116a1f48009d74b027a Author: Jan Wedekind (Dr) Date: Thu Nov 16 22:20:57 2017 +0000 Simulate landing gear commit adc004d2557ce3a0e2ee66e52061d493c8761d2c Author: Jan Wedekind (Dr) Date: Thu Nov 16 20:20:27 2017 +0000 Update soft body physics links commit 8b6f150c95dbd266887cb94f87799ee386872c03 Author: Jan Wedekind (Dr) Date: Wed Nov 15 19:46:21 2017 +0000 Added link to Thomas Jakobsen's paper commit 86d496e07fc5d13d45ff3e87932c0de9e480744c Author: Jan Wedekind (Dr) Date: Wed Nov 15 19:39:56 2017 +0000 Reorder links commit 4490dd54e9d0bcb061768eee5c2a4f8142933700 Author: Jan Wedekind (Dr) Date: Wed Nov 15 13:21:31 2017 +0000 Added link to other physics website commit e868edc99fe0d90921856c5cf58a9d70ccd6223a Author: Jan Wedekind (Dr) Date: Wed Nov 15 13:01:31 2017 +0000 Add link to Python physics commit 49ececf64f4d36cf0f5a44a048fb0ef4549e5709 Author: Jan Wedekind (Dr) Date: Wed Nov 15 08:01:33 2017 +0000 Changed constants commit 79c050ee40dd3797c6cb6e1a81e46a67245d2b50 Author: Jan Wedekind (Dr) Date: Tue Nov 14 21:48:13 2017 +0000 Create simpler wheel commit 9d34bbb6187f9dfaa2b33efc84616ea492fb0374 Author: Jan Wedekind (Dr) Date: Tue Nov 14 21:21:51 2017 +0000 Change constants commit ed4cc6c9ab6d2887bffeaf702e10fcecf5b152f0 Author: Jan Wedekind (Dr) Date: Tue Nov 14 21:03:46 2017 +0000 Change constants commit 050a442c87eb386d8d5695462719a26226889ecb Author: Jan Wedekind (Dr) Date: Tue Nov 14 13:30:48 2017 +0000 Add initial rotation commit d4ea4f3d2ebd8c398d8fe84c31d924abb89f4d2c Author: Jan Wedekind (Dr) Date: Tue Nov 14 13:23:52 2017 +0000 Trying Runge-Kutta commit 32b8292daca341f2ee759bb4a7101172c4cda9c4 Author: Jan Wedekind (Dr) Date: Tue Nov 14 13:15:12 2017 +0000 Use state variable to compute acceleration commit 659640ce42ee54af3c39c88df4a0770b0484f4ba Author: Jan Wedekind (Dr) Date: Tue Nov 14 13:12:47 2017 +0000 Use state variable commit a38aae8e1e51439f328222bcfb3d5295e0475fd1 Author: Jan Wedekind (Dr) Date: Mon Nov 13 21:08:59 2017 +0000 Simulate a wheel commit 4453588535c2291503a31bc6bc24784c479d9ee7 Author: Jan Wedekind (Dr) Date: Mon Nov 13 17:24:19 2017 +0000 Try a bar with multiple segments commit b251e3addc330ea98ab25135d0338d20fed28c0d Author: Jan Wedekind (Dr) Date: Mon Nov 13 08:43:26 2017 +0000 Try more nodes commit 5039868b0309229f00f5c98b71aacb96f3666036 Author: Jan Wedekind (Dr) Date: Sun Nov 12 22:35:09 2017 +0000 Trying out some softbody physics commit e0b753e6a1fde377b0a06bcd211da3aefe0d9bc5 Author: Jan Wedekind (Dr) Date: Sun Nov 12 21:35:29 2017 +0000 Link to Guile OpenGL commit 9f4544a7aa57c602bcdc4b4ac56c9a840fa8b713 Author: Jan Wedekind (Dr) Date: Fri Oct 20 12:53:54 2017 +0100 Revert "Use ax_check_gl*.m4 macros" This reverts commit 6ea81b179473cedd6097a7ac189edcb5cd9b7d80. commit ef1e2724a43a04d2177cdc53cc1ac38e141af2c3 Author: Jan Wedekind (Dr) Date: Fri Oct 20 12:53:43 2017 +0100 Revert "add ax_save_flags_with_prefix" This reverts commit 6c3b4f31dff00582c6d728c4d51cd8aa60832813. commit 6c3b4f31dff00582c6d728c4d51cd8aa60832813 Author: Jan Wedekind (Dr) Date: Fri Oct 20 12:44:06 2017 +0100 add ax_save_flags_with_prefix commit 6ea81b179473cedd6097a7ac189edcb5cd9b7d80 Author: Jan Wedekind (Dr) Date: Fri Oct 20 12:34:33 2017 +0100 Use ax_check_gl*.m4 macros commit c4b35a02e31a1b2e27ab2915687b0a453b971fd2 Author: Jan Wedekind (Dr) Date: Fri Oct 20 08:38:12 2017 +0100 Updating pkg.m4 and ax_pthead.m4 commit 2da3022f7c91fa57e15fb4b26d39fa2a18711ad7 Author: Jan Wedekind (Dr) Date: Tue Oct 17 21:24:20 2017 +0100 using "pragma once" commit efe7ff7978823607b6121b2ffa225995458f27ff Author: Jan Wedekind (Dr) Date: Tue Oct 17 14:03:32 2017 +0100 Update README with Ascii art commit a424eb0bf1c3675acf4e4ddc26723c5c1b454488 Author: Jan Wedekind (Dr) Date: Fri Sep 29 16:49:08 2017 +0100 Wokring on VCVTSI2SS commit f54da07c7ae57346a541f37bd5dd146981279f45 Author: Jan Wedekind (Dr) Date: Tue Sep 26 17:11:47 2017 +0100 Try compiled VCVTSI2SS commit e9fc5fd8f52b771a805f8c977899bce0fef36109 Author: Jan Wedekind (Dr) Date: Fri Sep 8 19:50:34 2017 +0100 WIP: Float to int conversion commit 4025eb277ef03954484895bcd6189416051cf686 Author: Jan Wedekind (Dr) Date: Thu Sep 7 20:43:46 2017 +0100 More integer to float conversions commit f60fec7ba09366b6ced457b9594f35bb65cf6874 Author: Jan Wedekind (Dr) Date: Thu Sep 7 19:46:34 2017 +0100 Prototyping CVTSI2SS commit b251efe826a7ff68d72350774529302050d596d7 Author: Jan Wedekind (Dr) Date: Thu Sep 7 12:34:23 2017 +0100 Working on prototype CVTSI2SS operation commit fd9554c016d6e27669af168a22d67c5842ec660a Author: Jan Wedekind (Dr) Date: Fri Oct 6 12:22:08 2017 +0100 Refactored implementation of 'mov' commit 076a230f6d17c6b14d8b629c22650a43db09014a Author: Jan Wedekind (Dr) Date: Mon Sep 18 12:45:53 2017 +0100 Fill for scalar value commit 26f495df152542f250f501b5663a46cfb6e84d13 Author: Jan Wedekind (Dr) Date: Mon Sep 18 08:09:57 2017 +0100 "mov-part" with pointer source commit 8b0a7e2f9498a809801e39fea0e6433bf1a8fd40 Author: Jan Wedekind (Dr) Date: Sat Sep 16 20:10:49 2017 +0100 WIP: Workaround for MOVSX and MOVZX lacking of support for pointer target commit abfc75e534f3e72df591ec4e0b2c0d8c69e33eb7 Author: Jan Wedekind (Dr) Date: Fri Sep 8 20:37:04 2017 +0100 Minor change to not create empty list in machine code commit faadfe99bb5c62b758b67f29e7ea7ac9b3427b8e Author: Jan Wedekind (Dr) Date: Fri Sep 1 06:47:43 2017 +0100 Fix return value of "set" commit bde86202d7bf3566932bf84e1d34293e9d61090e Author: Jan Wedekind (Dr) Date: Thu Aug 31 21:33:28 2017 +0100 Simplify Conway example using new "set" method commit 076f6490c7878a406777a7791eb07909f31c708f Author: Jan Wedekind (Dr) Date: Thu Aug 31 21:28:26 2017 +0100 Set arrays using compiled code commit 6d50a70f6103ab86bbf60f88d6653b3abc6120a9 Author: Jan Wedekind (Dr) Date: Wed Aug 30 22:46:39 2017 +0100 Cache setting of values commit a2852ae210d4456ae225f5761905bad4aa7397e5 Author: Jan Wedekind (Dr) Date: Tue Aug 29 20:24:16 2017 +0100 get/set subarrays commit 8fb3860ce51ce017b80ad6a9dde43f71b87edc0c Author: Jan Wedekind (Dr) Date: Tue Aug 29 17:34:53 2017 +0100 Get range of values from 1D array commit 74717c4a190afbff6c8f7be825aba1759f113806 Author: Jan Wedekind (Dr) Date: Tue Aug 29 08:34:42 2017 +0100 Set element of 2D array commit 0b9c74dbee8f94ebaf4d5df5266dc390c14ad5d2 Author: Jan Wedekind (Dr) Date: Mon Aug 28 20:47:37 2017 +0100 Set 2D array using 1D array commit 1fd866c33903f181d68b23b3b7f2e07db54708c3 Author: Jan Wedekind (Dr) Date: Mon Aug 28 20:41:44 2017 +0100 Test return value when setting array commit f2ccacbf4a74cd28f4573886ddbf36d83182d824 Author: Jan Wedekind (Dr) Date: Sun Aug 27 20:38:42 2017 +0100 Prototype code for compiled array assignment commit 16219f3f8b0f506da04c6f51085cfa993233e986 Author: Jan Wedekind (Dr) Date: Sat Aug 26 20:52:31 2017 +0100 Prototyping compiled assignment of array commit 2bb9bdf9164309ccb7e41df2c6ff9f4420970615 Author: Jan Wedekind (Dr) Date: Fri Aug 25 22:41:25 2017 +0100 Playing around with array assignment commit c7590394fd32150de84e502bd96215036e3ca603 Author: Jan Wedekind (Dr) Date: Tue Aug 22 17:50:57 2017 +0100 Minor refactor commit 3cc71c171fb6629262cd2ca9c19bf6f13e55253a Author: Jan Wedekind (Dr) Date: Tue Aug 22 08:07:48 2017 +0100 Remove superfluous argument for cumulative operations (WIP) commit 0d2b70509b427cb821e3de4d912901db0ebe3934 Author: Jan Wedekind (Dr) Date: Tue Aug 22 07:59:59 2017 +0100 Update TODO commit 6c4687e58dd093f21aa1efcc40cf855ab96c48ea Author: Jan Wedekind (Dr) Date: Mon Aug 21 20:44:00 2017 +0100 n-ary-base2 -> n-ary-base commit bb956384fc3132123e22439ec418b880807bf406 Author: Jan Wedekind (Dr) Date: Mon Aug 21 17:13:37 2017 +0100 define-cumulative2 -> define-cumulative commit 0e001453a3920a49305aaacd5c2354703b25d6f4 Author: Jan Wedekind (Dr) Date: Mon Aug 21 12:08:22 2017 +0100 Update TODO list commit 1bba153d966dc05cb2ba7c9968a8dfb48cb7003f Author: Jan Wedekind (Dr) Date: Sun Aug 13 17:46:48 2017 +0100 Refactor code for toggling fullscreen commit 8f838289b56db4fe122607365c53314da336dce8 Author: Jan Wedekind (Dr) Date: Sun Aug 13 17:41:19 2017 +0100 Turn off fullscreen when showing window in normal mode commit 6c812de720dfb6d093495172af40c979a9fb3ed5 Author: Jan Wedekind (Dr) Date: Sat Aug 12 21:44:27 2017 +0100 X11 fullscreen window by setting _NET_WM_STATE and _NET_WM_STATE_FULLSCREEN commit 9a386ed616f98d7c15b17e37f49b993fa6a9f486 Author: Jan Wedekind (Dr) Date: Thu Aug 10 21:03:19 2017 +0100 Use fullscreen with Conway example commit 41d83db0c6be0549b8b65bbe4f1a83fe2228d803 Author: Jan Wedekind (Dr) Date: Thu Aug 10 12:12:09 2017 +0100 Keyword argument for selection X.Org IO type commit e0a1a6bda709887da731f677c2b1209fc1c0e070 Author: Jan Wedekind (Dr) Date: Wed Aug 9 20:08:29 2017 +0100 Change size in scaling example commit 3ab16cfa378c4a54c275c15638add81a18336fb9 Author: Jan Wedekind (Dr) Date: Wed Aug 9 19:55:20 2017 +0100 Use XCheckIfEvent instead of XIfEvent to prevent GUI from blocking. commit 01184e83fec32528ed6334e5d969d4284513eff7 Author: Jan Wedekind (Dr) Date: Wed Aug 9 12:24:06 2017 +0100 Documentation for fullscreen windows commit aac0c8d345af4f8cce7f6fc59b8def1fd7710e17 Author: Jan Wedekind (Dr) Date: Wed Aug 9 08:12:53 2017 +0100 Implement fullscreen keyword commit 5429fc48c6f2c9ae00befeba3f657d6beb1b2039 Author: Jan Wedekind (Dr) Date: Wed Aug 9 08:02:16 2017 +0100 Refactor window showing methods commit b2fca65a9f81ee54396a5d34de5cea388e5daca0 Author: Jan Wedekind (Dr) Date: Tue Aug 8 21:44:00 2017 +0100 Fullscreen window commit e653745860ae07cd91e511842474f5fafd2b3d96 Author: Jan Wedekind (Dr) Date: Tue Aug 8 12:25:47 2017 +0100 Implement moving and resizing of window commit b3817c3be294c1a199d7909367386b94ea040a4e Author: Jan Wedekind (Dr) Date: Tue Aug 8 08:40:55 2017 +0100 Test moving of window commit 563f6f77ba2baf02109db2ed071066c415f97b42 Author: Jan Wedekind (Dr) Date: Mon Aug 7 08:12:20 2017 +0100 Option to disable window border commit 75793689bfe5781db540d7776e78b2d9b3d017f2 Author: Jan Wedekind (Dr) Date: Sun Aug 6 20:55:59 2017 +0100 Borderless window option commit 9728c46085a7d08769bd60fbebabb4945b835911 Merge: ef580e5a 7c679e72 Author: Jan Wedekind (Dr) Date: Sat Aug 5 21:09:17 2017 +0100 Merge branch 'master' of github.com:wedesoft/aiscm commit ef580e5aed77fdde64105a949abfc7cb36f9062a Author: Jan Wedekind (Dr) Date: Sat Aug 5 21:04:29 2017 +0100 Scaling options for display commit 7c679e728481f867a73531464819cece200b7b21 Author: Jan Wedekind (Dr) Date: Sat Aug 5 21:04:29 2017 +0100 Scaling options for display commit bd65e0dd93c3dfeaad33402f50fdc44e5d1c08db Author: Jan Wedekind (Dr) Date: Fri Aug 4 16:52:19 2017 +0100 Integration test for scaled video display commit e5fc890ffc4efa956c4b6387c53708375c49ab94 Author: Jan Wedekind (Dr) Date: Fri Aug 4 08:08:36 2017 +0100 Documentation for scaled display of images commit d561d3f1b63e58b9a9c87d860b586eb8a3c98727 Author: Jan Wedekind (Dr) Date: Thu Aug 3 21:57:00 2017 +0100 Force window size commit 4ed2d58c220c90f4761dc6a6988016ccfe2e31d3 Author: Jan Wedekind (Dr) Date: Sun Jul 30 17:53:11 2017 +0100 Add signature to Debian build commit 95e2e4686649755df36ed99e84ef06c033793d88 Merge: b28ea1e7 374dc622 Author: Jan Wedekind (Dr) Date: Sat Jul 29 21:17:13 2017 +0100 Merge branch 'master' into debian/sid commit b28ea1e7a34f6888edee8d890d944e2c0aa58af8 Author: Jan Wedekind (Dr) Date: Sat Jul 29 21:16:45 2017 +0100 Remove colorgcc commit 374dc622119285e4dd402ab5b855f1e61b5ce0ae Author: Jan Wedekind (Dr) Date: Fri Jul 28 23:11:29 2017 +0100 Fallback on pkt_pts if pts not found commit 20e7270e6a0ecd47c1c0c7193c0bb809f3c2d447 Author: Jan Wedekind (Dr) Date: Fri Jul 28 22:23:36 2017 +0100 Use AVFrame's pts instead of pkt_pts commit 2347e9ef9099f68ec89ac7f6423b18bc840765bf Author: Jan Wedekind (Dr) Date: Fri Jul 28 17:50:29 2017 +0100 Check for av_packet_unref commit 5bd67a3b874b00f3da82ed83118e5f17313d7098 Author: Jan Wedekind (Dr) Date: Fri Jul 28 17:37:19 2017 +0100 av_free_packet -> av_frame_unref commit 8152a782515ff95aca5d86a60c1c5fc78a7d9d34 Author: Jan Wedekind (Dr) Date: Fri Jul 28 08:08:25 2017 +0100 Fix more compiler warnings commit 090d90168c9c6c38c0ee96f3e1ec7d26de77e58a Merge: f97dfeb5 a1d13d7e Author: Jan Wedekind (Dr) Date: Thu Jul 27 20:03:22 2017 +0100 Merge branch 'master' into debian/sid commit a1d13d7e2a3c44283b0e5bc6c6ae016b26ea7cbf Author: Jan Wedekind (Dr) Date: Thu Jul 27 20:02:57 2017 +0100 Change comment about bumping up standards version commit f2f13f3fb33b76502843a1d5b2985561d7632ce9 Author: Jan Wedekind (Dr) Date: Thu Jul 27 08:09:54 2017 +0100 Bugfix for type in ioctl wrapper commit 1e37924962da140bde3be897edc26c35c87879e0 Author: Jan Wedekind (Dr) Date: Wed Jul 26 21:12:16 2017 +0100 Fixed some warnings with pointer conversions to "void *" commit f97dfeb5091af2b41ac5079ca147b171e9013bb4 Merge: 1e22cec6 b64852de Author: Jan Wedekind (Dr) Date: Tue Jul 25 18:43:13 2017 +0100 Merge branch 'master' into debian/sid commit b64852deb35020bbc832cac72b56149e41476d10 Author: Jan Wedekind (Dr) Date: Tue Jul 25 17:19:21 2017 +0100 Version 0.13.1 commit 62152b741ba147f69ecf63fb8efe92083dc8c097 Author: Jan Wedekind (Dr) Date: Tue Jul 25 13:01:58 2017 +0100 Refactor "fill" commit b69c376596e77a05f272eaa92c5de0276ace5c37 Author: Jan Wedekind (Dr) Date: Mon Jul 24 12:33:08 2017 +0100 Renamed new operator delegation methods * define-jit-method2 -> define-jit-method * delegate-fun2 -> delegate-fun commit 61157b4660d94abac563c375a70f3e7e7c681beb Author: Jan Wedekind (Dr) Date: Mon Jul 24 12:27:33 2017 +0100 Remove old delegate-fun implementation commit a1a465aecdc3976c535a0fdd36b329e23ca50940 Author: Jan Wedekind (Dr) Date: Mon Jul 24 08:33:35 2017 +0100 Remove define-jit-method, n-ary-base commit 464fd1df32a176b55d20ecfda03089bf251b3951 Author: Jan Wedekind (Dr) Date: Sun Jul 23 21:50:45 2017 +0100 Refactor rgb and complex composition commit 38afa656c8c5234306196cd0777cb9b0237fb5b5 Author: Jan Wedekind (Dr) Date: Sun Jul 23 21:36:16 2017 +0100 coerce-rgb and coerce-complex commit ccdd141557da222828e7706fbc6fc0c3427471db Author: Jan Wedekind (Dr) Date: Sat Jul 22 21:50:08 2017 +0100 Switch over to new operator implementation commit c2aa00f9b349d05fc42b30bdf6b809ea89878317 Author: Jan Wedekind (Dr) Date: Fri Jul 21 17:26:38 2017 +0100 Refactoring method-defining macros commit 109150f601e21d3ae3735467626c2f9d656dce39 Author: Jan Wedekind (Dr) Date: Fri Jul 21 13:31:35 2017 +0100 Refactoring n-ary operations commit bfeac61608834fd32f42e23c8e8103d0131ae58b Author: Jan Wedekind (Dr) Date: Fri Jul 21 13:25:09 2017 +0100 Define n-ary typed method commit 1cf675f5d1383ba36b3775c1f3836ed6a51d45c8 Author: Jan Wedekind (Dr) Date: Fri Jul 21 13:13:39 2017 +0100 Put define-typed-method under test commit 1fc38880d6b4ad19bf2aa784ab19191946f352d8 Author: Jan Wedekind (Dr) Date: Thu Jul 20 22:19:18 2017 +0100 Abstraction for defining typed methods commit e6cda03aa7353521d4d4794a63c144dc41cba8c6 Author: Jan Wedekind (Dr) Date: Thu Jul 20 12:19:15 2017 +0100 Refactor definition of cumulative operations commit 6d39b24f9664e5f234f56aebc297acfc4933c2cf Author: Jan Wedekind (Dr) Date: Thu Jul 20 08:06:22 2017 +0100 Refactor JIT method definition macro commit 6f5a1b69eb0b2fe16964db094e5df885ca8034f0 Author: Jan Wedekind (Dr) Date: Wed Jul 19 22:16:20 2017 +0100 Refactoring composite operations commit 824b2f8fa0070208fa9611d57deecdd429b3708c Author: Jan Wedekind (Dr) Date: Wed Jul 19 12:38:23 2017 +0100 Refactoring n-ary-base (WIP) commit 4e4d7142b97838e8e6336311c453889b53fff23b Author: Jan Wedekind (Dr) Date: Wed Jul 19 12:25:46 2017 +0100 composite-code -> force-composite-parameters commit ee8977ac3265e0856b3b801d4381817b51a888bf Author: Jan Wedekind (Dr) Date: Wed Jul 19 08:10:50 2017 +0100 Refactor operation on composite values commit 9b9e09e78e7feb2a11c49e5c90614cc89fff3f1c Author: Jan Wedekind (Dr) Date: Tue Jul 18 22:06:30 2017 +0100 Refactor mappings to composite operation commit 8f05d38341b7eb8ad10b80ade155f01153d0462b Author: Jan Wedekind (Dr) Date: Tue Jul 18 17:15:31 2017 +0100 Refactor += commit cf859d2eb7a01b60b41bb970b8308ee0aa030d41 Author: Jan Wedekind (Dr) Date: Tue Jul 18 12:35:36 2017 +0100 Refactoring + and += commit fa17239db659d8fbfdac740bb09ab1aad0ca2d08 Author: Jan Wedekind (Dr) Date: Mon Jul 17 22:18:11 2017 +0100 Use force-parameters for intermediate composite values commit 6189f2d2d1ee7896dee75ce1ff2b3503e2cbfe81 Author: Jan Wedekind (Dr) Date: Mon Jul 17 22:01:06 2017 +0100 Minor refactor for += commit a8e1617f2d814790bffa6ab7a7bd14d4ce3d9123 Author: Jan Wedekind (Dr) Date: Mon Jul 17 20:03:33 2017 +0100 += for complex values commit e4acaa0de1940dbc7ab164d8e74175baf1fdb056 Author: Jan Wedekind (Dr) Date: Mon Jul 17 19:54:55 2017 +0100 += for RGB values in memory commit e8de105b0e4c5fb9ac03ac69ebc8d9199d2c96b6 Author: Jan Wedekind (Dr) Date: Sun Jul 16 21:44:52 2017 +0100 Intermediate results for += with RGB commit 0107ff881e61b8fdc9279c52d16baa0644ab18e1 Author: Jan Wedekind (Dr) Date: Sat Jul 15 22:58:08 2017 +0100 Intermediate results for RGB values commit c9f1496389dd088088cc0e4306a188e7d93540e6 Author: Jan Wedekind (Dr) Date: Fri Jul 14 22:31:19 2017 +0100 Refactoring delegate-op commit 0c2a290644ad8e35e2fc7134449bc29d2fa6717d Author: Jan Wedekind (Dr) Date: Wed Jul 12 21:03:27 2017 +0100 Update TODO commit f3861e9ec7d51ed773ee337d0d01aad894170857 Author: Jan Wedekind (Dr) Date: Wed Jul 12 20:54:00 2017 +0100 Added sharpen filter example, fixed some integration tests commit 1e22cec6ef895095055bf4970aa98adb7b8f1679 Merge: 36f19570 adbc9266 Author: Jan Wedekind (Dr) Date: Wed Jul 12 20:07:06 2017 +0100 Merge branch 'master' into debian/sid commit adbc92660bba07bc47ff87a2644eb30e5b380fd1 Author: Jan Wedekind (Dr) Date: Wed Jul 12 20:01:20 2017 +0100 Disable software scaling test again commit e7c6d34beebfca75a6935fff14276e5899073392 Author: Jan Wedekind (Dr) Date: Wed Jul 12 19:55:44 2017 +0100 Enable software scaling test commit 80d3d9f5030b5bfc10e27472ecbf0a76ffc0ec6f Author: Jan Wedekind (Dr) Date: Wed Jul 12 19:28:29 2017 +0100 Switch Travis CI build to Ubuntu Xenial commit e7698b5b7436081dbee4de7881e904afc99077f0 Author: Jan Wedekind (Dr) Date: Tue Jul 11 20:42:07 2017 +0100 Remove superfluous intermediate value in convolution commit 60a4fd5c76e38821da993cde9dc0ee65420f6210 Author: Jan Wedekind (Dr) Date: Tue Jul 11 20:34:01 2017 +0100 Intermediate results for composite values commit 7be289840ac17cda4eda4b61c783df6713e5debb Author: Jan Wedekind (Dr) Date: Mon Jul 10 21:19:27 2017 +0100 Working on intermediate values for RGB tensors commit 73c5d7c58567b24edae9d56062a50761f6e02328 Author: Jan Wedekind (Dr) Date: Sun Jul 9 21:40:38 2017 +0100 Conversion to gray scale commit 1d7207bdbef8c7aa8ab26738b59c7ffae6bba943 Author: Jan Wedekind (Dr) Date: Sun Jul 9 21:29:57 2017 +0100 = -> == commit 535bfef1ce07eb2e4c72719949093ff291e22d09 Author: Jan Wedekind (Dr) Date: Sat Jul 8 21:56:46 2017 +0100 Add Conway's Game of Life commit a46b4b2084f2a1e8700f9db63a5b6f01603aad81 Author: Jan Wedekind (Dr) Date: Sat Jul 8 21:03:51 2017 +0100 Add box-filter to examples commit ebcabc92f9e633e0fbb63e99bacb907174610017 Author: Jan Wedekind (Dr) Date: Sat Jul 8 20:55:49 2017 +0100 Reduced frame rate for FFmpeg integration test for cheap webcams commit 313d49eaac4f0292323055ce687aa62cefd61b36 Author: Jan Wedekind (Dr) Date: Sat Jul 8 20:46:22 2017 +0100 Use tensor in edge detector examples commit a26ad34d040e3f49218ed5980445f44b2a0ead2d Author: Jan Wedekind (Dr) Date: Sat Jul 8 20:32:30 2017 +0100 Add Sobel edge detector example commit 8717b45c12da5a2c4204329ae5d7b8ae3f89e361 Author: Jan Wedekind (Dr) Date: Fri Jul 7 22:16:09 2017 +0100 Add Roberts cross edge detector to documentation commit 300657775ea6a12491688e39c037bf1735cf64d4 Author: Jan Wedekind (Dr) Date: Fri Jul 7 17:39:01 2017 +0100 Test 2D RGB convolution commit c7f2cd94399575cfec7c40202a01228238924080 Author: Jan Wedekind (Dr) Date: Fri Jul 7 17:35:38 2017 +0100 Updated tests for more optimal machine code commit bd562a1909420b16940db4a7c8fb37c9291e1624 Author: Jan Wedekind (Dr) Date: Fri Jul 7 12:56:14 2017 +0100 Improved register spill code generator commit 3ec13a9ce42c8ea990d4164e6b2640a09d9a5430 Author: Jan Wedekind (Dr) Date: Fri Jul 7 12:51:22 2017 +0100 Bugfix: pointer variable is not output of command commit b2d676c940f0e51f53ba9359857b139d1744b995 Author: Jan Wedekind (Dr) Date: Fri Jul 7 12:36:00 2017 +0100 Refactor spill code generator commit 68563ff731b22bf0c4da11be888c281a8dd3f52f Author: Jan Wedekind (Dr) Date: Fri Jul 7 08:12:04 2017 +0100 Prototype spill code generator commit 2e09a08a2b981496e5bf3cfc934364579e6fad63 Author: Jan Wedekind (Dr) Date: Thu Jul 6 22:56:46 2017 +0100 Working on register spill code commit 405fef995f2cf3410f189d1c183a7921082309f0 Author: Jan Wedekind (Dr) Date: Thu Jul 6 22:41:47 2017 +0100 Prototyping register spill code commit c80a70827649db9948546a3a9b4ab98f1682ad38 Author: Jan Wedekind (Dr) Date: Thu Jul 6 12:51:23 2017 +0100 Prototyping replacing of spilled variables commit a3b1b8b0c14b938c7d1277e44da1a30b3a5ec377 Author: Jan Wedekind (Dr) Date: Wed Jul 5 22:52:57 2017 +0100 Prototyping replacing of spilled variables commit 4f8c4a1ec19faf0f4c09ca5fc8c1d80fc49e2a51 Author: Jan Wedekind (Dr) Date: Wed Jul 5 21:53:47 2017 +0100 Prototype replace-variables commit 249d03bd7903bab53e48506c4bcf84c393a07bf1 Author: Jan Wedekind (Dr) Date: Tue Jul 4 22:26:05 2017 +0100 Allocate two temporaries registers when writing to pointer commit 28a08de8ed5ef45e58ab06d556e3ef9de27fb112 Author: Jan Wedekind (Dr) Date: Tue Jul 4 20:43:57 2017 +0100 Use list of temporaries for each command commit c7f2632d632c3a9cfa4c9e895b2cecb0ef211578 Author: Jan Wedekind (Dr) Date: Tue Jul 4 08:10:25 2017 +0100 Simplify "temporary-variables" commit 06926fd3d0536b1314045e15224b47afacdcf48e Author: Jan Wedekind (Dr) Date: Mon Jul 3 08:07:56 2017 +0100 Enable 2D convolution test commit 7fd0bde17f161d1d07f92d5d87c78f6fb814a8e8 Author: Jan Wedekind (Dr) Date: Sun Jul 2 22:48:07 2017 +0100 Get second dimension of convolution to work commit 77bc817388c773e59833fe4dde5420c523fc4e44 Author: Jan Wedekind (Dr) Date: Sat Jul 1 22:11:47 2017 +0100 Move result variable of convolution out of inner loop commit e46fde7fb518c3ccc8bd03fd34925d357af1e839 Author: Jan Wedekind (Dr) Date: Fri Jun 30 23:39:25 2017 +0100 Bugfix for order of arguments in convolution internal method commit 1d2981d88cbd2e83a5bf8ecded957ff27dec2a82 Author: Jan Wedekind (Dr) Date: Fri Jun 30 21:09:47 2017 +0100 Working on 2D convolution prototype commit 2e40e3d2d3a471d0d3cb8f84f43a73bcf7d8c40d Author: Jan Wedekind (Dr) Date: Fri Jun 30 12:31:49 2017 +0100 Repeatable build of documentation Manually set date in configure script so that build is repeatable. commit 36f7fa039e2106d3dac814062e9397f627fdc6f9 Author: Jan Wedekind (Dr) Date: Wed Jun 28 22:32:06 2017 +0100 Working on 2D convolution commit 566bdbe1b3f00553def89bb48bf2f8c28383ccb2 Author: Jan Wedekind (Dr) Date: Wed Jun 28 17:14:35 2017 +0100 Working on 2D convolution commit 8e9f70da0f9379b488ee8a0b911a397ed9440587 Author: Jan Wedekind (Dr) Date: Tue Jun 27 22:13:17 2017 +0100 Copy updated version of convolution commit 2e599f19de9bd47b594b3fe4401e16d11cc79db5 Author: Jan Wedekind (Dr) Date: Tue Jun 27 12:50:13 2017 +0100 Trivial 2D convolution commit f2b343b4a19186c1fbd1b84c42154c2ad7bcf561 Author: Jan Wedekind (Dr) Date: Tue Jun 27 12:19:23 2017 +0100 Pass trivial 2D convolution commit 647566aa4c9857373577c70f24595205370993c8 Author: Jan Wedekind (Dr) Date: Mon Jun 26 20:35:03 2017 +0100 Working on 2D convolution commit f92ae8b70ddb6e44873656398485cb6b52560662 Author: Jan Wedekind (Dr) Date: Mon Jun 26 17:14:14 2017 +0100 Project convolution output before passing to recursive method commit 48b63b8d1603e48879464952227e75e9dffb54df Author: Jan Wedekind (Dr) Date: Mon Jun 26 12:38:09 2017 +0100 Working on 2D convolution commit 4aa26ce45bf8bd22a9af54313eb2bd9df796744d Author: Jan Wedekind (Dr) Date: Mon Jun 26 08:12:46 2017 +0100 Prototyping 2D convolution commit 1648f22419d5e012719406aa38cd06008b25a048 Author: Jan Wedekind (Dr) Date: Sun Jun 25 22:26:37 2017 +0100 Refactoring prototype commit a24739613f7b5dd16a42a14d21c2e35b47d36602 Author: Jan Wedekind (Dr) Date: Sun Jun 25 19:30:35 2017 +0100 Use array pointer for convolution iteration commit a34573e8b16d794d8b7cb8a0a3237a56763920c8 Author: Jan Wedekind (Dr) Date: Fri Jun 23 17:44:13 2017 +0100 Test data smaller than convolution kernel commit 6349ca77e28950aec108a998e545ef183479a43a Author: Jan Wedekind (Dr) Date: Fri Jun 23 17:27:50 2017 +0100 Documentation about convolution with complex numbers commit 841120cfa0712be785fa68c5840a6fe2895dc78c Author: Jan Wedekind (Dr) Date: Fri Jun 23 16:59:02 2017 +0100 Generate convolution.html commit b575e3b8bc510c092dd5ff59e1cd1c83d0d700e8 Author: Jan Wedekind (Dr) Date: Fri Jun 23 16:56:00 2017 +0100 Example in documentation for 1D convolution commit 397fe4b34deea61c3a7b7028d398eea124b266b6 Author: Jan Wedekind (Dr) Date: Fri Jun 23 12:40:38 2017 +0100 Cache convolution programs commit 07cf73c5613429ae4746056a56afd8b31a927a11 Author: Jan Wedekind (Dr) Date: Fri Jun 23 12:14:01 2017 +0100 Convolution with complex values already works commit f7236959080e36d8f8cda63fe589dce2b2e3f901 Author: Jan Wedekind (Dr) Date: Fri Jun 23 08:09:01 2017 +0100 test convolution with even-sized filter commit 68c8bc603e13ec94a13ca842d48a02e9d9e1ac3e Author: Jan Wedekind (Dr) Date: Thu Jun 22 23:01:53 2017 +0100 Updating TODOwq commit bbcf093fbe786535f14877b65af2ecef658d905b Author: Jan Wedekind (Dr) Date: Thu Jun 22 21:32:23 2017 +0100 Cache implementations of array filling commit 74a1aa7a587aa2d8c8270056e2496465866c4c95 Author: Jan Wedekind (Dr) Date: Thu Jun 22 13:12:18 2017 +0100 Insert manual intermediate in convolution commit 0209bbaa059b7e60bc2c134f18a879b741ebdec8 Author: Jan Wedekind (Dr) Date: Wed Jun 21 17:36:16 2017 +0100 Copied updated convolution code into library commit b944b688a9ea6fce2b4fc0462e46ccd0b01b8958 Author: Jan Wedekind (Dr) Date: Wed Jun 21 12:27:41 2017 +0100 Refactoring convolution commit 08a43bb8b87a1b2dfd29db9d0e65900a198b39f5 Author: Jan Wedekind (Dr) Date: Wed Jun 21 08:09:32 2017 +0100 unary << and >> for RGB values commit 5f3fadc14baa988d4c0ee2e042b66ce13fa7d863 Merge: 0ba3a9ff d6779e14 Author: Jan Wedekind (Dr) Date: Tue Jun 20 21:50:17 2017 +0100 Merge branch 'master' into convolution commit 0ba3a9ff23b53dc9a15ab249f5cdb73a18011ec3 Author: Jan Wedekind (Dr) Date: Tue Jun 20 21:42:29 2017 +0100 Declare uninitialised parameters with macro commit d6779e1412ba833c384c91b3f74d2ea9889bfa0a Author: Jan Wedekind (Dr) Date: Tue Jun 20 21:17:11 2017 +0100 Add Debian Stretch to documentation commit f1de1498acdcec4296c344464c4f470f1f7e9e2f Author: Jan Wedekind (Dr) Date: Tue Jun 20 21:11:21 2017 +0100 Add Stretch repository commit d5c3f557dc645eb444eeb3fe6829945e36ac4fce Author: Jan Wedekind (Dr) Date: Tue Jun 20 21:04:05 2017 +0100 Update Standards Version to 4.0.0 commit 6862d4736b3961013af4e4da8266e759496e89ed Author: Jan Wedekind (Dr) Date: Tue Jun 20 21:03:48 2017 +0100 Simplified convolution prototype commit da7cb1fbbd36bede3d57a59ca5499572ffba2d04 Author: Jan Wedekind (Dr) Date: Tue Jun 20 13:04:24 2017 +0100 unary << and >> with Scheme object as argument commit c7232274a56d97d580a3c5abc072dd06d2224716 Author: Jan Wedekind (Dr) Date: Mon Jun 19 12:56:20 2017 +0100 "let-parameter*" and "let-skeleton*" to define parameters and variables commit 36145b71a4e0dc0bdbeb9be8f4f2625517948a85 Author: Jan Wedekind (Dr) Date: Fri Jun 16 22:23:47 2017 +0100 Left-shift and right-shift with only one argument commit e259c49fc77bc9d9cc31eb3a187156343ede7245 Author: Jan Wedekind (Dr) Date: Fri Jun 16 12:25:18 2017 +0100 Have "repeat" accept a parameter for specifying the end of the loop range commit 15211019d853b140b341c2bb2b9d188439e78178 Author: Jan Wedekind (Dr) Date: Fri Jun 16 08:13:32 2017 +0100 Added "array-pointer" to access pointer value of array commit dc270b4a5df89ff77407544f7758d82c28f92fb6 Author: Jan Wedekind (Dr) Date: Thu Jun 8 12:38:28 2017 +0100 Working on convolution commit 3c72e9a2acf1bd1944de1e32b5f052ecab22aecb Author: Jan Wedekind (Dr) Date: Mon Jun 12 12:21:05 2017 +0100 take, drop -> list-head, list-tail commit 3b88f21bca062b4dc60b01c544970ed98ba8955e Author: Jan Wedekind (Dr) Date: Wed Jun 7 21:40:37 2017 +0100 Rename "code" -> "duplicate" commit 7968f59f9c47db597510d23c5e259a8a441ac0c7 Author: Jan Wedekind (Dr) Date: Tue Jun 6 07:59:14 2017 +0100 flatten argument lists commit 5b6351a8e518b115f1685efea3efc04cf8c487fb Author: Jan Wedekind (Dr) Date: Mon Jun 5 17:11:08 2017 +0100 abs value for list of Scheme objects commit 310229a6f3ab32e12dcc6a26fd7895ca9a7338c4 Author: Jan Wedekind (Dr) Date: Sun Jun 4 21:21:20 2017 +0100 Absolute value of integers commit 566cd9b0943bfda0adedf4e024efdd1a5fb72cd3 Author: Jan Wedekind (Dr) Date: Sat Jun 3 22:17:22 2017 +0100 Conditional selection with objects commit 4e123ff2dfb387c7a04f1d006f7fd9747e22aa3e Author: Jan Wedekind (Dr) Date: Sat Jun 3 21:40:46 2017 +0100 Allow type combinations when defining operator mappings commit 5c3af23ea52b5602fe6c910c44e580d3a6f6064b Author: Jan Wedekind (Dr) Date: Sat Jun 3 20:42:42 2017 +0100 Update documentation commit 58966ceebcc3d35e092bee31dc39e2d6805577e6 Author: Jan Wedekind (Dr) Date: Fri Jun 2 23:35:51 2017 +0100 Rename >=, >, <=, < to ge, gt, le, lt commit 8db1dfd5a11e9a956b13f46479416d29ed411c72 Author: Jan Wedekind (Dr) Date: Fri Jun 2 08:02:10 2017 +0100 Selection of complex and scalar values with "where" commit 8a2d45f93c67c85f7a353e164f978f4a9619d751 Author: Jan Wedekind (Dr) Date: Thu Jun 1 22:12:12 2017 +0100 'where' for boolean and scalars commit 9065ffbdfb4d41dafa82b689d8413626e102230c Author: Jan Wedekind (Dr) Date: Thu Jun 1 12:55:53 2017 +0100 Define conditional 'where' for RGB commit c4765997d0079dc5bd23a646873275a8e1fb7311 Author: Jan Wedekind (Dr) Date: Wed May 31 21:47:02 2017 +0100 Select values using boolean array commit dc88eda1b98e04dc06a3050d8cde15e0d02a966f Author: Jan Wedekind (Dr) Date: Wed May 31 21:14:54 2017 +0100 Coercions for 'where' commit 8a0acef9157208aa024fe24b5d6a58ddb507bf78 Author: Jan Wedekind (Dr) Date: Tue May 30 21:43:22 2017 +0100 Coercion for "where" commit 6a4da8a69fa49caa63480b0fa09cfede72953292 Author: Jan Wedekind (Dr) Date: Tue May 30 13:41:30 2017 +0100 Move coercions for floating point numbers commit 87bbd151e96c286130f4d3dfc56d4a696d247866 Author: Jan Wedekind (Dr) Date: Tue May 30 13:32:50 2017 +0100 Provide coercion to "functional-code" method commit ac5b86eb939217892b397690197acaec2d8d9f55 Author: Jan Wedekind (Dr) Date: Mon May 29 20:37:56 2017 +0100 Update tensor documentation commit 4026668cd7c6a7eedda11421d490ec6765871c33 Author: Jan Wedekind (Dr) Date: Mon May 29 19:36:38 2017 +0100 Add command for detached signature to Makefile.docker commit 36f1957094b56b4315f8e6da5872880ebdff8444 Merge: 91dd780e b1cb58a4 Author: Jan Wedekind (Dr) Date: Mon May 29 18:22:09 2017 +0100 Merge branch 'master' into debian/sid commit b1cb58a4a1b70f0800eae149fd482384b9c26c9a Author: Jan Wedekind (Dr) Date: Mon May 29 16:21:37 2017 +0100 Version 0.12.1 commit 91dd780e2bdeaa3e8dabb89b24292e72ae4b2a8e Merge: 1e411e9d a6882835 Author: Jan Wedekind (Dr) Date: Mon May 29 18:20:56 2017 +0100 Merge branch 'master' into debian/sid commit a6882835ebfe6ba82b6788f5ebbcd5d09328f5fb Author: Jan Wedekind (Dr) Date: Mon May 29 16:21:37 2017 +0100 Version 0.12.1 commit 04d32f14446ee76a84b50ad3fa1ac4e40e1eb8fc Author: Jan Wedekind (Dr) Date: Sun May 28 22:53:36 2017 +0100 Tensor sum for objects commit b04aa77451db1f420c94b969a03490be0f46869d Author: Jan Wedekind (Dr) Date: Sat May 27 21:55:58 2017 +0100 Indexing of tensor sums commit ec3277bb81f31acb7d6e264d6980cd1b87dab5cd Author: Jan Wedekind (Dr) Date: Sat May 27 15:18:19 2017 +0100 Force intermediate results when doing tensor sum commit f22c3e2013f8f56887136cb0a38766e5d88f8ffb Author: Jan Wedekind (Dr) Date: Fri May 26 22:13:12 2017 +0100 Indexing of array-scalar operation commit a300011ef07093c52687842f6a36f9bb5f3b1623 Author: Jan Wedekind (Dr) Date: Fri May 26 21:53:55 2017 +0100 Indexing of tensor sub-expression commit 5aa81cccc22780257757844c3d59e8c0f22eebb3 Author: Jan Wedekind (Dr) Date: Thu May 25 23:13:55 2017 +0100 Check whether output equals first argument commit 7c73a74908353d0113fbb719092abb9081767715 Author: Jan Wedekind (Dr) Date: Thu May 25 22:42:56 2017 +0100 Minor changes commit 30f397d77515d3b370d1a7f8000f4b022d5ebafb Author: Jan Wedekind (Dr) Date: Thu May 25 12:43:29 2017 +0100 Add complex "largest" and "smallest" for tensor expressions commit 3a4d0d300c1181580c833adbc1dae2ea9a6994bd Author: Jan Wedekind (Dr) Date: Thu May 25 12:40:03 2017 +0100 Cumulative complex multiplication commit 466698cba1813b77175ad3b5ab4b2dbcb4b66ee9 Author: Jan Wedekind (Dr) Date: Thu May 25 07:01:24 2017 +0100 Specify argument types for "delegate-op" commit c991e2df12383e37c4e9058d4ef129954bc1a6ba Author: Jan Wedekind (Dr) Date: Wed May 24 22:15:39 2017 +0100 Cumulative tensor operations for RGB values commit d1bb0d4e5e65216e0ca037193cf145d9b783524d Author: Jan Wedekind (Dr) Date: Wed May 24 11:47:24 2017 +0100 Tensor product for RGB values commit 589da8743ab91ffdc033a72bd360f73526ee02e1 Author: Jan Wedekind (Dr) Date: Tue May 23 21:48:32 2017 +0100 Prototype RGB tensor sum commit abdc9dcaf4d8d7b819b17b9eabe82f3dc8b55418 Author: Jan Wedekind (Dr) Date: Tue May 23 13:07:55 2017 +0100 Prototyping cumulative operation for RGB commit cc7c252bdbc4be60107f997b79ea4ae9e5e04001 Author: Jan Wedekind (Dr) Date: Tue May 23 08:00:08 2017 +0100 Added some paragraph commit 1e411e9d2c8c173794e7e54f31f2db95b231c437 Merge: afbf3a31 2fcab429 Author: Jan Wedekind (Dr) Date: Mon May 22 22:54:54 2017 +0100 Merge branch 'master' into debian/sid commit 2fcab429d9405eb74bda72b13134ec975217f056 Author: Jan Wedekind (Dr) Date: Mon May 22 21:46:27 2017 +0100 Refactor code for cumulative operations commit 13b8aee1f582c2739ef8a75e26b8c136466a9c85 Author: Jan Wedekind (Dr) Date: Mon May 22 12:45:55 2017 +0100 Documentation for "deconstruct" commit d0f034d35da9fb54b104e670e852499283e6e254 Author: Jan Wedekind (Dr) Date: Mon May 22 08:03:00 2017 +0100 Switch mutating-code, functional-code, and unary-extracy back to functions commit 8dcdf2fc7e4b09ba7c9f91971553f341a1244ba8 Author: Jan Wedekind (Dr) Date: Sun May 21 20:26:05 2017 +0100 Maximum and minimum in tensor expressions commit 70b5fb6d6802310eff1660684aaa71eec972703f Author: Jan Wedekind (Dr) Date: Sun May 21 10:18:07 2017 +0100 Update TODO commit dee8d528be14bb259af4124a3c9d3c633951100f Author: Jan Wedekind (Dr) Date: Sat May 20 22:47:11 2017 +0100 Add mutating operations commit 5052c6602ff74ab44a486d84f5d41224fbcb2f4d Author: Jan Wedekind (Dr) Date: Fri May 19 22:28:52 2017 +0100 Working on cumulative operation += commit b0983988305564c0ca16538701100c89f00a1eaa Author: Jan Wedekind (Dr) Date: Fri May 19 17:42:46 2017 +0100 Merged test_jit1.scm and test_jit2.scm commit 7042f0a4fc3f21d95cdbee7f38fdfe264424042a Author: Jan Wedekind (Dr) Date: Fri May 19 13:07:56 2017 +0100 Move tests for minimum and maximum commit f7058b10ef4b8bf05f6fe347a0faea62d623b67b Author: Jan Wedekind (Dr) Date: Fri May 19 08:08:52 2017 +0100 Grouped tests in tests/test_jit1.scm commit 9d60e7660eaf2312d97fecb72190236cabaab038 Author: Jan Wedekind (Dr) Date: Fri May 19 08:01:40 2017 +0100 Move some operation tests into tests/test_operation.scm commit 62a77e572bbac4b08f5827104d9b06eec5228ede Author: Jan Wedekind (Dr) Date: Fri May 19 07:46:14 2017 +0100 Moving operations into (aiscm operation) commit 82d9d6bab7cbefeb4f0108bd30641b9369d919f4 Author: Jan Wedekind (Dr) Date: Thu May 18 21:41:29 2017 +0100 let-skeleton and let-parameter macros commit d533ff4199ac7ca74ee9c518051fe19269835210 Author: Jan Wedekind (Dr) Date: Thu May 18 20:08:19 2017 +0100 Put binary minus into (aiscm operation) commit 27229043da2d88ba4a784f73702185b39bf98af7 Author: Jan Wedekind (Dr) Date: Thu May 18 12:59:04 2017 +0100 Put "size-of" into (aiscm operation) commit 75801aabea59bcfb85a64d7bf30d9541f21e05fc Author: Jan Wedekind (Dr) Date: Thu May 18 08:02:01 2017 +0100 Merged test_jit1.scm and test_jit2.scm commit 9e1b278a7aa8e49892d56b1642b7c6ba4e3382e8 Author: Jan Wedekind (Dr) Date: Thu May 18 07:58:59 2017 +0100 Remove references to (aiscm op) commit 626f311052d6da3755870516c43ab7b3ce69c42b Author: Jan Wedekind (Dr) Date: Thu May 18 07:55:12 2017 +0100 Merge test_jit4.scm and test_jit5.scm commit a297816a4b6a70c7a3f4327c2d1a8dea01d75c2a Author: Jan Wedekind (Dr) Date: Thu May 18 07:46:15 2017 +0100 Merge test_jit5.scm and test_jit6.scm commit a6a1bda29b2f81fcefb56b8878fa03694d033109 Author: Jan Wedekind (Dr) Date: Thu May 18 07:41:19 2017 +0100 Move "fill" into (aiscm jit) commit 99ab7cbfbd1fb732b1e80ae1b9d633b92c2730f2 Author: Jan Wedekind (Dr) Date: Wed May 17 22:04:27 2017 +0100 Fast fill method commit e4d3d56aaf948a74faafc02948f410d019605565 Author: Jan Wedekind (Dr) Date: Wed May 17 17:22:47 2017 +0100 Re-enabled test with transposed array commit 42bd2d5ddf66fa306e1af647e76657e9d979d7f6 Author: Jan Wedekind (Dr) Date: Wed May 17 08:12:50 2017 +0100 Move "content" into (aiscm expression) module commit e494520615638eab655bf94c730f17246af59462 Author: Jan Wedekind (Dr) Date: Wed May 17 08:06:17 2017 +0100 Move multi-loop tests into test_loop.scm commit ca7a33096c164466a754ff5b9fc92c7f187da72c Author: Jan Wedekind (Dr) Date: Wed May 17 07:41:27 2017 +0100 Move tensor reduction into (aiscm expression) module commit aaaad062810ad0ada8ac3b49a65c12b431c3f20b Author: Jan Wedekind (Dr) Date: Tue May 16 22:32:38 2017 +0100 Created (aiscm loop) module commit 9232ae7cc2525b19b11445e70250494e901c620d Author: Jan Wedekind (Dr) Date: Tue May 16 21:17:12 2017 +0100 Use "operand" to simplify tensor cumulative operations commit d7103624bf65d44ccdf7acb204de3d191e0a401b Author: Jan Wedekind (Dr) Date: Tue May 16 21:17:08 2017 +0100 moved some tests commit 7dd19fa4abd2e5d60728c515a07ef9652241f88a Author: Jan Wedekind (Dr) Date: Tue May 16 20:20:35 2017 +0100 Remove test_jit6.scm commit 611de29bdd989f2d0a9471ac1f0cd8d5394b2f17 Author: Jan Wedekind (Dr) Date: Tue May 16 19:46:54 2017 +0100 Move more tensor compilation tests commit 835091c58abd9a83d49884cc730f914ee814ea51 Author: Jan Wedekind (Dr) Date: Tue May 16 17:16:33 2017 +0100 Moved tensor compilation tests commit efe6249f355d4b48697394ce8a61bf5cee9bc83c Author: Jan Wedekind (Dr) Date: Tue May 16 17:08:58 2017 +0100 Moved tensor expression code commit 35516815cc5b95a052a97fa5f4d51700f4151d70 Author: Jan Wedekind (Dr) Date: Tue May 16 08:12:07 2017 +0100 Move array expression code into (aiscm expression) commit 5b37d67289f06a3a610d2e2fff4c3d0d2299effe Author: Jan Wedekind (Dr) Date: Mon May 15 22:04:58 2017 +0100 move type inference code commit 185e25dd0f337af2775040f56f8671a758178931 Author: Jan Wedekind (Dr) Date: Mon May 15 21:22:11 2017 +0100 Move array expressions (lookups, indexers) into expression module commit 9058beae38b5a1dd705e82839c693ca9f154baa4 Author: Jan Wedekind (Dr) Date: Mon May 15 13:42:46 2017 +0100 Move "skeleton" to (aiscm expression) commit b7e0fbe7fdb6f9ca0688f3126eb47e33b87a17f9 Author: Jan Wedekind (Dr) Date: Mon May 15 13:27:16 2017 +0100 tensor-loop -> multi-loop commit 36f03876e648a95ca45ab6effda8b28978a13b41 Author: Jan Wedekind (Dr) Date: Mon May 15 07:42:39 2017 +0100 Moved tests for "var" commit 3644b330a4f688e2ea9e82c17077f714a182c82a Author: Jan Wedekind (Dr) Date: Mon May 15 07:38:20 2017 +0100 Move some JIT compiler tests commit c9c9a29b191b6afa1da2b99a764e3329d3bc5f53 Merge: 6ea00418 63624af2 Author: Jan Wedekind (Dr) Date: Sun May 14 22:28:26 2017 +0100 Merge branch 'master' of github.com:wedesoft/aiscm commit 6ea0041898e08b1c70ab82eb3988385edba10071 Author: Jan Wedekind (Dr) Date: Sun May 14 22:04:51 2017 +0100 Smallest and largest element commit 63624af27d0db33d2d07552081905839b25d52b8 Author: Jan Wedekind (Dr) Date: Sun May 14 22:04:51 2017 +0100 Smallest and largest element commit 3cb2d1f1b1cb7fc35de4a1720e1fcc713960cb93 Author: Jan Wedekind (Dr) Date: Sun May 14 21:26:44 2017 +0100 Enabled integration test for matrix vector multiplication commit 0dd5006929e6e2d1df26d01df9ebd4fa4288baf2 Author: Jan Wedekind (Dr) Date: Sat May 13 22:34:06 2017 +0100 Get tensor sum with function working commit c1a44a979ba3ac23d754dda65061da109a43ada6 Author: Jan Wedekind (Dr) Date: Fri May 12 21:55:14 2017 +0100 Removed unsupported tensor stuff from integration tests commit a30354cd0b1937b56bf63fba0ccf6b69e6a7bfd6 Author: Jan Wedekind (Dr) Date: Fri May 12 21:48:27 2017 +0100 Move more commands into (aiscm command) commit df8bf1fadc59c85786b8fc1cb9747f09ddabe559 Author: Jan Wedekind (Dr) Date: Fri May 12 18:07:49 2017 +0100 Move boolean operations commit 9f2058d365249d271620bc0023629d4fc5583e43 Author: Jan Wedekind (Dr) Date: Fri May 12 17:47:02 2017 +0100 Move shl and shr commit bdcec27bb7b6e5c68a4f5ccbb0085ebee9df6f6c Author: Jan Wedekind (Dr) Date: Fri May 12 17:43:18 2017 +0100 Fix test-begin ... test-end name mismatch commit 6c7f5e0770b3513139c74b1f2bf19dc0a7a729bd Author: Jan Wedekind (Dr) Date: Fri May 12 17:40:50 2017 +0100 Put register blocking/reserving instructions into (aiscm command) commit d6f1341df7811d1013c499e6860a2bc21bffc81c Author: Jan Wedekind (Dr) Date: Fri May 12 12:43:03 2017 +0100 Working on moving mini programs commit 9c4880eb3f7b7f2093b183e93bc264f10750196f Author: Jan Wedekind (Dr) Date: Fri May 12 08:11:58 2017 +0100 Put blocking code into register allocator commit 8fa82f9d19a6309c0c4cfc64b84a076c84d904cc Author: Jan Wedekind (Dr) Date: Thu May 11 22:02:38 2017 +0100 Rename compile to jit-compile and put in compile module commit 2ef9d601c11084fef50ae68c0646116130f5492d Author: Jan Wedekind (Dr) Date: Thu May 11 21:36:39 2017 +0100 Remove some assembler code from documentation commit a987cf8547187b361291259296ad3536a0a5cd30 Author: Jan Wedekind (Dr) Date: Thu May 11 21:32:12 2017 +0100 Move more methods into compilation module commit da9b0d236d00052e2ac46512988b69184561d5f0 Author: Jan Wedekind (Dr) Date: Thu May 11 21:17:55 2017 +0100 Move "temporary-variables" method commit 392b1dfbd1584334003e0074abaa18679ee9d737 Author: Jan Wedekind (Dr) Date: Thu May 11 18:04:38 2017 +0100 Move "unallocated-variables" into register allocation module commit 5e76ddfaab65f528e47cb78aeeddb5da68510f9e Author: Jan Wedekind (Dr) Date: Thu May 11 12:49:38 2017 +0100 Rename linear-scan-allocate -> compile commit e8e9718eda014514de8a1fcd49ff83084daa34cf Author: Jan Wedekind (Dr) Date: Thu May 11 08:12:31 2017 +0100 Use macro to define tensor operations commit 73556f34ce97be050caf1a490ed3552db781189d Author: Jan Wedekind (Dr) Date: Wed May 10 21:48:28 2017 +0100 Map injections to += and *= commit 7df0c1de19f7c4ff0944480792f9d169268f3299 Author: Jan Wedekind (Dr) Date: Wed May 10 13:16:46 2017 +0100 WIP: faster tensor injection commit 4e533f5040af26d94cfb7debdd8ad6363919c406 Author: Jan Wedekind (Dr) Date: Tue May 9 21:24:16 2017 +0100 Implemented list-with commit 9f8cfd78797a733f5166acbca7ee2e5e707efedc Author: Jan Wedekind (Dr) Date: Tue May 9 20:22:11 2017 +0100 Start live analysis with command inputs commit 8f46a44c8f0880bfa64f825ddf0d14cb51e554a8 Author: Jan Wedekind (Dr) Date: Tue May 9 17:13:08 2017 +0100 Separate method for program flow commit de9d85894c9733354e1e8c199b0fd2ae3c6c256f Author: Jan Wedekind (Dr) Date: Tue May 9 12:42:51 2017 +0100 Simplify "live-analysis" commit a9f2e80ec7827ccb9cde2539ca1ebbf195fe4ace Author: Jan Wedekind (Dr) Date: Tue May 9 12:28:58 2017 +0100 Method "inputs" and "outputs" of each statement Method "inputs" and "outputs" for determining I/O of each statement in a program. commit 93c12c3661a4ca66833e386a7bad1bab9686eb9e Author: Jan Wedekind (Dr) Date: Mon May 8 22:14:08 2017 +0100 Created "live-analysis" module commit 8e34f6ac88d10a356b10460df843172b650d23fd Author: Jan Wedekind (Dr) Date: Mon May 8 21:22:24 2017 +0100 Move "used-callee-saved" commit 7f7994c55c2eb63d62d54a2ec6ce8dc8b54101bd Author: Jan Wedekind (Dr) Date: Mon May 8 20:20:41 2017 +0100 Moving parameter location code to (aiscm compile) commit dcbc9108c153f7574ea2146e18d78f16ac8274d8 Author: Jan Wedekind (Dr) Date: Mon May 8 20:06:56 2017 +0100 Move register lists commit 9c51aeca7fcf03e5931696f829ce5a81064736a6 Author: Jan Wedekind (Dr) Date: Mon May 8 17:12:23 2017 +0100 Move method for adjusting stack pointer commit a1b4395b0fa3f3eb63b404b1f729c61353524677 Author: Jan Wedekind (Dr) Date: Mon May 8 13:00:15 2017 +0100 Move "replace-variables" into (aiscm compile) commit 0986046edff46b631cdee15a73e3b81b53e13301 Author: Jan Wedekind (Dr) Date: Sun May 7 21:29:10 2017 +0100 Moved "relabel" and "flatten-code" commit fd2dfe857ba389f3d3e18a4f46240ceb893cafb6 Author: Jan Wedekind (Dr) Date: Sun May 7 20:36:48 2017 +0100 Move more code into register allocator commit 2f38f51f21f3ae6018cfff11186e6e0073d3bd42 Author: Jan Wedekind (Dr) Date: Sat May 6 21:18:13 2017 +0100 Move "first-argument" to (aiscm command) commit d6e696426b26955de587eaa71b47309a331a6af1 Author: Jan Wedekind (Dr) Date: Sat May 6 21:10:20 2017 +0100 Moved some code into "aiscm program" commit 16d05303a28f061bc2ded547acc8f6a0569f16bc Author: Jan Wedekind (Dr) Date: Fri May 5 21:10:24 2017 +0100 Moving some tests around commit 7e552c657fbcb0b867edc28800f8acdc3722654e Author: Jan Wedekind (Dr) Date: Fri May 5 20:11:55 2017 +0100 Make jit compiler more modular (WIP) commit 77983509fa62def1c8590a27eeed3a70fccb3962 Author: Jan Wedekind (Dr) Date: Thu May 4 20:43:02 2017 +0100 More documentation for tensors commit 6f8b24f0b10134099330b57831ac06ca2fdba754 Author: Jan Wedekind (Dr) Date: Thu May 4 17:14:30 2017 +0100 Add tensor reduction (sums, ...) to main library commit 2d0820a8c4927f7ac7d33460f0d12eec0e86213d Author: Jan Wedekind (Dr) Date: Thu May 4 12:51:48 2017 +0100 Refactor for tensor-loop on function with and without index commit ca1388188ef8679ef66d2a17728326a1bce1eff7 Author: Jan Wedekind (Dr) Date: Thu May 4 12:44:59 2017 +0100 Tensor sum with all indices explicit commit 4c7694fcd0b0b86535755e73d28fd5f918f63c0b Author: Jan Wedekind (Dr) Date: Wed May 3 22:24:08 2017 +0100 WIP 1-axis tensor sum commit 4320b696984c9bb2bacc318a8f5e410bd6b5b92d Author: Jan Wedekind (Dr) Date: Wed May 3 21:57:38 2017 +0100 ice-9 formatting fixes for Guile 2.2.2 commit 925beb59f6d73b91f8592a5e917587bc338ce30a Author: Jan Wedekind (Dr) Date: Tue May 2 21:51:22 2017 +0100 Prototype injection working commit 1255cacf95081a8746e07ecf0834a16fddbbe77a Author: Jan Wedekind (Dr) Date: Tue May 2 12:49:21 2017 +0100 Working on tensor sums commit afbf3a31d2b5dce504934693ca0da192d8634c50 Merge: 63c84cbe 9c5df1ba Author: Jan Wedekind (Dr) Date: Mon May 1 20:41:24 2017 +0100 Merge branch 'master' into debian/sid commit 9c5df1baf24db00cb47b45f7f353da2dfac02a5d Author: Jan Wedekind (Dr) Date: Mon May 1 20:41:12 2017 +0100 Update TODO commit 8c4ba75c8ae0a46020a35816d44b1c8dedcaf424 Author: Jan Wedekind (Dr) Date: Mon May 1 19:53:42 2017 +0100 Use parameter for offset to prevent array bounds compiler warning commit 02c2675b95e3b99565cb491521362a2cdc0a62ff Author: Jan Wedekind (Dr) Date: Sun Apr 30 21:39:10 2017 +0100 Tensor documentation commit bd7cf67ff15366115557639c5b6a88aaca336b53 Author: Jan Wedekind (Dr) Date: Sat Apr 29 21:48:37 2017 +0100 Tests for tensor loop with scalar commit 6d7d0a76d46959c24c4f8395af2c70fa7547580c Author: Jan Wedekind (Dr) Date: Sat Apr 29 21:28:59 2017 +0100 Separate code for tensor indices shortcut commit fac15f3aa8525c9a4bb4bfa3316f58a41481c9f1 Author: Jan Wedekind (Dr) Date: Sat Apr 29 21:25:23 2017 +0100 Tensor sum table is working commit 4157212623bb1339ea0eae4d71054b82f0e53a98 Author: Jan Wedekind (Dr) Date: Sat Apr 29 17:47:35 2017 +0100 (tensor i (+ (get (seq 2 3 5) i) 1)) commit 9d48c88897e58dac88c4795efa5716db5ac1e2ec Author: Jan Wedekind (Dr) Date: Sat Apr 29 17:39:25 2017 +0100 Renamed some variables commit 4d893ffa7210ece3e6d50908c5794926030aba9d Author: Jan Wedekind (Dr) Date: Fri Apr 28 22:08:08 2017 +0100 ". ," -> ",@" commit aea18647eb09d384038e1bdb5a75932adddb7097 Author: Jan Wedekind (Dr) Date: Fri Apr 28 19:50:44 2017 +0100 Scalar tensors commit 811aa891b57b6d721406e547469222c4714c3eb0 Author: Jan Wedekind (Dr) Date: Fri Apr 28 12:56:31 2017 +0100 Support more tensor operations commit 6321a2f4916674c794cc1a76a72f3f3d5cfc5c61 Author: Jan Wedekind (Dr) Date: Fri Apr 28 08:03:48 2017 +0100 Updated TODO commit 2a221831e71914ee1dddc4a9a5d2db0c0fc62b60 Author: Jan Wedekind (Dr) Date: Fri Apr 28 07:47:55 2017 +0100 Short form for tensor expressions commit 1ad375de4b5368133919a4cb9a403395e1e52516 Author: Jan Wedekind (Dr) Date: Thu Apr 27 19:53:08 2017 +0100 Have "get" work on older versions of Guile commit a0185993445081371e02d16921464768f2ca6cbf Author: Jan Wedekind (Dr) Date: Thu Apr 27 13:28:02 2017 +0100 Tensor "dim" statement with multiple indices commit fbe3d07004c7d403725727b7abebcc1b5ec774dc Author: Jan Wedekind (Dr) Date: Wed Apr 26 22:08:21 2017 +0100 "get" operation with multiple indices commit f651ef31d35cffdb771eb93dfda33c3da0326f68 Author: Jan Wedekind (Dr) Date: Tue Apr 25 13:16:25 2017 +0100 Refactor pointer offset test, undo version number revert * undo revert of version number * document and refactor test flagged by compiler warning commit f84515395fa82ad2bb73a1f5d7d891f624533d6f Author: Jan Wedekind (Dr) Date: Tue Apr 25 08:09:41 2017 +0100 Revert "Removing test triggering Debian warning" This reverts commit bf9c4befd782d1d189fc4481422108c5dda8da16. commit 617ef0457e59b7ffe5ead3bc42a1d3dd10397da3 Author: Jan Wedekind (Dr) Date: Tue Apr 25 08:08:56 2017 +0100 Revert "Remmoving tests triggering Debian warnings" This reverts commit 03a20d2c4a5fcd4712b22d892419f01c390d2b10. commit 09a04dc0894bff26ef2bdb277ddae7f6019b0408 Author: Jan Wedekind (Dr) Date: Mon Apr 24 22:58:56 2017 +0100 Fix broken tensor tests commit cf4a5d346ea7193b3905afa5ea1f08b31a1b61c2 Author: Jan Wedekind (Dr) Date: Mon Apr 24 22:14:03 2017 +0100 Add tensor macro to library commit 849b0c6309aa1cbb501c61b640468693ec1a7b66 Author: Jan Wedekind (Dr) Date: Mon Apr 24 21:42:30 2017 +0100 Test tensor macro with indexing commit a3194f9b4a0a71c6e3fdee43a753313a2fe799fa Author: Jan Wedekind (Dr) Date: Mon Apr 24 08:11:44 2017 +0100 Detect tensor index instruction in expression commit ae7239a05270c5c411897d07501dce44d52322b3 Author: Jan Wedekind (Dr) Date: Sun Apr 23 21:28:19 2017 +0100 Reconstruct expressions with tensor index access commit a07d5f88532f05c7af81df885edfb41a43e65347 Author: Jan Wedekind (Dr) Date: Sun Apr 23 20:36:04 2017 +0100 Minor refactor commit d582926bf3dea2a19f7b5a9181eaecd127602bb8 Author: Jan Wedekind (Dr) Date: Sat Apr 22 23:09:44 2017 +0100 working on tensor index access commit f35bdfeed182a1f930a6854fefcbf8baaf2c0ddb Author: Jan Wedekind (Dr) Date: Sat Apr 22 22:43:52 2017 +0100 Preserve tensor index in array access commit b7606035e9ba5bcdd85e06ea6d5bd19c6803127a Author: Jan Wedekind (Dr) Date: Fri Apr 21 22:10:39 2017 +0100 Working on tensor macro commit e3a1d36d5d010bf45f3561540d320d1406a5b972 Author: Jan Wedekind (Dr) Date: Fri Apr 21 22:06:38 2017 +0100 Developing tensor macro commit 80023eda75d1e4e7ab244159c8d1bc6ea84d0abc Author: Jan Wedekind (Dr) Date: Mon Apr 17 22:22:48 2017 +0100 Developing tensor macro commit b0e6c0d367f5586ca5fdfd901060fb00d10509a0 Author: Jan Wedekind (Dr) Date: Mon Apr 17 22:03:19 2017 +0100 Prototyping tensor operations commit 2ac995fe2a5b443f8c13eaf4a7690513a040104d Author: Jan Wedekind (Dr) Date: Sun Apr 16 21:35:58 2017 +0100 Reconstruct tensor expressions commit 2b4fb63a41d8327a4f47478f550e0f942e3ad6da Author: Jan Wedekind (Dr) Date: Fri Apr 14 22:37:34 2017 +0100 Implicit tensor dimension commit 31b2236fbfcc5bb6d76f47692661321ad50e4011 Author: Jan Wedekind (Dr) Date: Thu Apr 13 22:21:29 2017 +0100 Prototype code for implicit dimensions in tensor commit 5ae10077828d614bfac0237d74fef7f0db5583d5 Author: Jan Wedekind (Dr) Date: Thu Apr 13 17:46:26 2017 +0100 Insert variables in tensor expression commit a0098a7a011e991991d581e20ca07ac1a6a5e6ff Author: Jan Wedekind (Dr) Date: Thu Apr 13 17:41:04 2017 +0100 Use quoted expressions instead of strings commit 757ec17f8ac7b365aa8df38ab82097cc5e019b0d Author: Jan Wedekind (Dr) Date: Thu Apr 13 12:35:04 2017 +0100 Prototype code for reconstructing tensor expressions commit db5195f2df0734ded01b3f4d26ed5f3ceaee0f2b Author: Jan Wedekind (Dr) Date: Wed Apr 12 22:50:22 2017 +0100 Extract variables of tensor expression commit 4e3141e35feceb43b5bfc3ae0d2f8cc20517f902 Author: Jan Wedekind (Dr) Date: Wed Apr 12 17:43:25 2017 +0100 Prototyping teensor macro commit f948d2d45ebd5178c193076f6d93d82940d9cd77 Author: Jan Wedekind (Dr) Date: Wed Apr 12 17:43:03 2017 +0100 Transpose arrays using tensor expression commit c55a5679f1b2ec74a99464473b08ca25b8e8d2fa Author: Jan Wedekind (Dr) Date: Mon Apr 10 20:57:27 2017 +0100 Remove old loop setup code commit 164daa82b7af33ed7e15ff096aed89225df15076 Author: Jan Wedekind (Dr) Date: Mon Apr 10 17:14:21 2017 +0100 Array-scalar operation in tensor expression commit cc454e0ce73bb4ab08e847e021982a96fd57f9b1 Author: Jan Wedekind (Dr) Date: Mon Apr 10 12:59:46 2017 +0100 Compile 1D tensor expression with indices commit 47e27190a4f39f0d4ee5ac1f5d79c3709cbd2616 Author: Jan Wedekind (Dr) Date: Mon Apr 10 12:45:34 2017 +0100 Tensor expression with two 1D arrays commit 83173be4b5110dfda373fdb637203a3788e73502 Author: Jan Wedekind (Dr) Date: Sun Apr 9 22:09:27 2017 +0100 Implemented 2D tensors commit 2e7d092b5ee50b91a4b08db60c5e897d73896d7e Author: Jan Wedekind (Dr) Date: Sun Apr 9 20:35:13 2017 +0100 Use loop object to keep track of loop iterators and steps commit 59e44030f8556c386ffed67e7e946b512a0dcefb Author: Jan Wedekind (Dr) Date: Sun Apr 9 12:03:04 2017 +0100 Tensor loop objects for storing loop details commit beead8c838189f377be9cc66b8d8f07661885636 Author: Jan Wedekind (Dr) Date: Sat Apr 8 21:57:30 2017 +0100 Discovered flaw in current tensor implementation commit d6b09f1284c2f0738abec65b0559ef3b85514daf Author: Jan Wedekind (Dr) Date: Fri Apr 7 22:07:38 2017 +0100 Tensor prototype working commit b0d73d63da12e263efebce11498ad12182796694 Author: Jan Wedekind (Dr) Date: Fri Apr 7 12:53:57 2017 +0100 Setup increment of iterator commit 6ddcded107262970760a7d6b2d237f24c6dee167 Author: Jan Wedekind (Dr) Date: Fri Apr 7 08:11:15 2017 +0100 Setup of array loop commit 688bdd76d31094b12fe3709a005ee806343da6cb Author: Jan Wedekind (Dr) Date: Thu Apr 6 22:32:04 2017 +0100 Fixed bug in rebasing commit b18b1e2c7b65e070d2118de5bd765190abbbb163 Author: Jan Wedekind (Dr) Date: Thu Apr 6 21:39:10 2017 +0100 Determine type of function expression commit 202cf587c5f36d2aee080acc4b754d66c65ee889 Author: Jan Wedekind (Dr) Date: Thu Apr 6 19:38:51 2017 +0100 Determine typecode of parameter commit 4009b77042937a9c45526c3d36cc58866acaba2c Author: Jan Wedekind (Dr) Date: Thu Apr 6 17:52:43 2017 +0100 Determine type of scalar and sequence parameters commit aa00d747f5a82b505560e4b9be6fb589b9a6e6cf Author: Jan Wedekind (Dr) Date: Thu Apr 6 08:11:26 2017 +0100 Replace affected pointers with iterators when projecting a tensor dimension commit af02a01cdad9e450bbfdb0da080a25b18cbc638e Author: Jan Wedekind (Dr) Date: Wed Apr 5 23:22:13 2017 +0100 Removed indirection for projecting function expressions commit 987d7d5e1ab7c70c1ac0ace459a380461eb7c9f8 Author: Jan Wedekind (Dr) Date: Wed Apr 5 21:51:38 2017 +0100 Use function "name" instead of projection function commit 48446ac50d9e6d048005cb7d1d0df5af4475dd64 Author: Jan Wedekind (Dr) Date: Wed Apr 5 12:20:43 2017 +0100 "arguments" -> "delegate" commit 482254f0aa6a9f75e9b1f2a726e6a9d395fd8a75 Author: Jan Wedekind (Dr) Date: Wed Apr 5 08:34:15 2017 +0100 Prototype projection of functions commit 528a2e819c71756743de5ed31c1e105697d2dc76 Author: Jan Wedekind (Dr) Date: Tue Apr 4 22:27:46 2017 +0100 Prototype projection of tensor expression commit 81f4647186c6cec1ebefdf31a7fe7c2d3b7ec4d0 Author: Jan Wedekind (Dr) Date: Tue Apr 4 22:03:22 2017 +0100 Projection of arrays commit 9664d7ec5d3d087cb3086cb65359cc1b7bae10f9 Author: Jan Wedekind (Dr) Date: Tue Apr 4 13:25:40 2017 +0100 Add rebasing to prototype tests commit 37f1d8ad394f453894c9b7b4e773e2a19c2850ee Author: Jan Wedekind (Dr) Date: Mon Apr 3 22:43:00 2017 +0100 Working on loop code for tensors commit 3915178531d431672ec8bc12d02874cd6de3ee47 Author: Jan Wedekind (Dr) Date: Mon Apr 3 14:21:13 2017 +0100 Retrieve lookup objects of binary tensor objects commit 54f2c9e793637e8d322e0f9c713680c17ac8c0ad Author: Jan Wedekind (Dr) Date: Sun Apr 2 21:42:09 2017 +0100 Trying out 'lookups' function commit 04b555e1f68f84164052bf60c19f6618fbfd8518 Author: Jan Wedekind (Dr) Date: Sat Apr 1 20:16:21 2017 +0100 Trying out multiple strides and steps commit 2a4af872f6260e3191dfe955dad326fce9cfe053 Author: Jan Wedekind (Dr) Date: Sat Apr 1 12:50:17 2017 +0100 Playing around with tensor expressions commit 993d735e791aeb2b66245fa75ba2f63300c2ec76 Author: Jan Wedekind (Dr) Date: Mon Apr 3 14:03:45 2017 +0100 Grammatical error in NEWS text commit 63c84cbedc9300281469d64a8f56934c949fdf83 Merge: 3994f143 a7248010 Author: Jan Wedekind (Dr) Date: Sat Apr 1 20:17:07 2017 +0100 Merge branch 'master' into debian/sid commit a72480100d92b3118537dca233afb86b3ef7fa74 Author: Jan Wedekind (Dr) Date: Sat Apr 1 11:53:05 2017 +0100 Version 0.11.2 commit 3994f143f825f375d02bf7670c7c48a360969de8 Merge: 11dbd79e 03a20d2c Author: Jan Wedekind (Dr) Date: Sat Apr 1 11:46:45 2017 +0100 Merge branch 'master' into debian/sid commit 03a20d2c4a5fcd4712b22d892419f01c390d2b10 Author: Jan Wedekind (Dr) Date: Fri Mar 31 21:17:38 2017 +0100 Remmoving tests triggering Debian warnings commit bf9c4befd782d1d189fc4481422108c5dda8da16 Author: Jan Wedekind (Dr) Date: Fri Mar 31 20:33:16 2017 +0100 Removing test triggering Debian warning Fix the following build issue on [Debian QA][1]. ``` ffmpeg-helpers-tests.c:95:38: warning: array subscript is above array bounds [-Warray-bounds] uint8_t *data[2] = {buffer, buffer + (1L << 62)}; ``` [1]: https://qa.debian.org/bls/packages/a/aiscm.html commit a8a08f706d7b8cf60ed97294185e57fcc9726e88 Author: Jan Wedekind (Dr) Date: Wed Mar 29 22:38:41 2017 +0100 Use autoreconf for bootstrapping commit 42f2941c88a3db47ed1e38aee6f002ffc0a57a12 Author: Jan Wedekind (Dr) Date: Tue Mar 28 21:29:43 2017 +0100 Setup Docker container for testing V4L2 and X.Org commit 11dbd79ea84dda681e7d7a45348b785f5f0c593b Merge: 6eeebe74 f26ccd02 Author: Jan Wedekind (Dr) Date: Mon Mar 27 12:57:32 2017 +0100 Merge branch 'master' into debian/sid commit f26ccd028548788be2632f03d5ddbe2fbe28a1b4 Author: Jan Wedekind (Dr) Date: Mon Mar 27 12:56:24 2017 +0100 Syntax fix to changelog commit 6eeebe7448e76d2d346850a980040c4e2d96e83b Merge: 3e72113a 12773567 Author: Jan Wedekind (Dr) Date: Mon Mar 27 12:31:50 2017 +0100 Merge branch 'master' into debian/sid commit 12773567445257f8373e1a9c60209dbbe54f992b Author: Jan Wedekind (Dr) Date: Mon Mar 27 12:22:31 2017 +0100 Version 0.11.1 commit 0895594b2c2b11e06e4a78c233cbf79682a8374e Author: Jan Wedekind (Dr) Date: Mon Mar 27 08:49:22 2017 +0100 Write trailing audio data commit daf617cc2ed963b90dab9027ae063d55e7cd0db7 Author: Jan Wedekind (Dr) Date: Mon Mar 27 08:05:33 2017 +0100 "is-input?" method for FFmpeg objects commit fd6f142db4dd6e8e27796b3da7516ad559091f69 Author: Jan Wedekind (Dr) Date: Sun Mar 26 21:54:10 2017 +0100 Add method to crop audio frame commit 974637a9a6e32130ac9b89bb5bf4eb8a9044bd26 Author: Jan Wedekind (Dr) Date: Fri Mar 24 21:11:28 2017 +0000 Link to Guile web site commit f72ae0b74d35d54e71cc581f46f7077e1659a28a Author: Jan Wedekind (Dr) Date: Fri Mar 24 21:11:11 2017 +0000 Drop Guile 1.8 from configuration options commit 3e72113a6468f55ebcf85cf299b9f18d7de996f9 Merge: b261182f eff0a311 Author: Jan Wedekind (Dr) Date: Fri Mar 24 20:18:58 2017 +0000 Merge branch 'master' into debian/sid commit eff0a311309c098f4e9de1dd402087e1ed41eb4f Author: Jan Wedekind (Dr) Date: Fri Mar 24 20:03:09 2017 +0000 Link libguile-aiscm-samples.so with libavutil.so commit b261182f69dd1ba86052138a9954e71df8e6a98d Merge: 0ec839d8 cf0e849b Author: Jan Wedekind (Dr) Date: Fri Mar 24 17:39:17 2017 +0000 Merge branch 'master' into debian/sid commit cf0e849b3732dcb265d9f506bfc0d45c37d6e7e2 Author: Jan Wedekind (Dr) Date: Fri Mar 24 17:36:34 2017 +0000 Update TODO list commit 46b326119cad23bdacfd55dbb2e52e58c83046ee Author: Jan Wedekind (Dr) Date: Fri Mar 24 17:29:59 2017 +0000 Flush video buffer when seeking in input video commit 03277412880aed0d25586985977703034a0dd12a Author: Jan Wedekind (Dr) Date: Fri Mar 24 12:43:01 2017 +0000 Update timestamp for audio input stream commit edcee3f03f731200b3e10239d5441eccdb2230f1 Author: Jan Wedekind (Dr) Date: Fri Mar 24 12:35:26 2017 +0000 ffmpeg-buffer-p* -> video-buffer-p* commit 1c41ddcd953e9650521bef22a86e31bf92ea1ef4 Author: Jan Wedekind (Dr) Date: Fri Mar 24 08:11:14 2017 +0000 ffmpeg-buffer-* only used for video frames commit b505e092b6352ffc46f625fa80fe1b18196123da Author: Jan Wedekind (Dr) Date: Thu Mar 23 22:38:22 2017 +0000 Only pass timestamps around when buffering frames commit ac614634525b314cb52902f62e5cafaccddad73b Author: Jan Wedekind (Dr) Date: Thu Mar 23 21:15:06 2017 +0000 Enable test for video frame caching commit bb28c8004cf950d665856f78d45920124a351086 Author: Jan Wedekind (Dr) Date: Wed Mar 22 21:53:30 2017 +0000 Update integration tests commit cb9f4db927349ac46140dc62f0e69f4a8c47c4a4 Author: Jan Wedekind (Dr) Date: Wed Mar 22 21:41:10 2017 +0000 Update TODO list commit ee1a835dd96074ea98e5501c64f42f6bfd1f68e0 Author: Jan Wedekind (Dr) Date: Wed Mar 22 21:38:47 2017 +0000 Return false after reading last audio samples commit b35ccc406e3d8528a5d0fb4dbe4b5d10759ec419 Author: Jan Wedekind (Dr) Date: Wed Mar 22 21:31:57 2017 +0000 Return correctly sized audio frame near end of stream commit 22efe85b412510be038c61bfa955e83c43074580 Author: Jan Wedekind (Dr) Date: Wed Mar 22 21:03:56 2017 +0000 Check whether there is an audio stream commit dc30f40751ecc996b88e4604bae670ae4f08404a Author: Jan Wedekind (Dr) Date: Wed Mar 22 12:47:16 2017 +0000 Stop reading after last audio frame commit f2fc3877c86b3fc44eef11c03373a015681f19ee Author: Jan Wedekind (Dr) Date: Wed Mar 22 09:00:51 2017 +0000 Skip hanging test commit da4f2ebd86eea7e350e8cda8a873393817a4c6e2 Author: Jan Wedekind (Dr) Date: Tue Mar 21 21:52:14 2017 +0000 Update 'fetch-audio' call in FFmpeg output test commit b67716dace11e41cae1eb559b259b8bb597b7285 Author: Jan Wedekind (Dr) Date: Tue Mar 21 21:49:28 2017 +0000 Update TODO list commit 07dd44a46992107cb7bcd06ef7337587cb908ca2 Author: Jan Wedekind (Dr) Date: Tue Mar 21 21:10:41 2017 +0000 Get sample from audio input commit 7d0f3a7f6732deb770cb0ff7bc63ff974a8307a5 Author: Jan Wedekind (Dr) Date: Tue Mar 21 19:58:16 2017 +0000 Fetch desired number of samples from audio buffer commit 61597d477bc4af1ee72b39f8556c6de08d69fa0c Author: Jan Wedekind (Dr) Date: Tue Mar 21 12:52:33 2017 +0000 Added test for buffering planar audio commit 050fc8f93d90b0d468af98aee480fc12857d2e9c Author: Jan Wedekind (Dr) Date: Tue Mar 21 12:52:04 2017 +0000 Removed undefined 'count' from samples module commit 8034b863bfdff583a688d104e8dd569a862ad8c2 Author: Jan Wedekind (Dr) Date: Tue Mar 21 12:51:36 2017 +0000 Add frame parameter to 'fetch-audio' commit 8532c348e1408caa6cbd8bb0630a9de55bdf67c2 Author: Jan Wedekind (Dr) Date: Tue Mar 21 12:51:18 2017 +0000 video_frame -> video_target_frame commit a40a65e4eb3202258d602a55144aa79e5a720b85 Author: Jan Wedekind (Dr) Date: Tue Mar 21 12:50:52 2017 +0000 Updated TODO commit 0aa9f749e6867f5d84e5e1b8a051eea0ed29f1e3 Author: Jan Wedekind (Dr) Date: Tue Mar 21 12:29:48 2017 +0000 Buffer timestamped audio input commit 5bc78aa5b2b484da1847f613903ee4625342842b Author: Jan Wedekind (Dr) Date: Tue Mar 21 07:52:01 2017 +0000 buffer-video -> buffer-timestamped-video commit 0ec839d805f58634441f9b4c65e5bcc3d45a6bc4 Merge: 6ff73ecb 72b9aad1 Author: Jan Wedekind (Dr) Date: Mon Mar 20 21:15:21 2017 +0000 Merge branch 'master' into debian/sid commit 2382287de3f01280a17323275718a57de583310a Author: Jan Wedekind (Dr) Date: Mon Mar 20 21:14:41 2017 +0000 Update TODO commit 21095bda3d1dbd2b6d3cff81e50bab46b7436ab1 Author: Jan Wedekind (Dr) Date: Mon Mar 20 21:03:56 2017 +0000 Refactor buffering of input video commit 9ad9970f35ff868e8635b1074efe90241e9fba46 Author: Jan Wedekind (Dr) Date: Mon Mar 20 20:14:15 2017 +0000 Stop decoding at end of audio/video stream commit 6b369155e106eb64313d750a7bcd89a6a0fa2593 Author: Jan Wedekind (Dr) Date: Mon Mar 20 17:16:02 2017 +0000 Refactor code for passing around time stamps commit 9659cd9fc818af4cec795862514d73c71486d8c8 Author: Jan Wedekind (Dr) Date: Mon Mar 20 12:59:07 2017 +0000 Refactor decoding of audio frames commit 4a78a80b14b799558ae8bec42b378adb7c2431ea Author: Jan Wedekind (Dr) Date: Mon Mar 20 07:46:28 2017 +0000 Rename "write" methods to "encode" methods commit 39495aac6025a5374a87653520e56a3606f85784 Author: Jan Wedekind (Dr) Date: Mon Mar 20 07:38:14 2017 +0000 video-frame -> make-video-frame, audio-frame -> make-audio-frame commit 26c844b369a16fd40dae623887e987f20c43d6d3 Author: Jan Wedekind (Dr) Date: Sun Mar 19 22:16:03 2017 +0000 Working on buffered input audio commit 72b9aad14fcd00cc7a50e43ddb49e94c911968c0 Author: Jan Wedekind (Dr) Date: Fri Mar 17 20:53:04 2017 +0000 Add documentation about video/audio output commit f613f6018487cb68855e22d9b4303cbc882ba0a0 Author: Jan Wedekind (Dr) Date: Fri Mar 17 17:38:15 2017 +0000 image-helpers -> util-helpers commit 84b092a5931f3eb11dad6d798882065c5b6cc1bf Author: Jan Wedekind (Dr) Date: Fri Mar 17 12:51:37 2017 +0000 Check output sample shape, type, and rate commit f8c4dad85745b43a60f510e43315a483cc410fa4 Author: Jan Wedekind (Dr) Date: Fri Mar 17 07:57:55 2017 +0000 Use time base of codec instead of stream commit a2647edaa1c61cc81fcdd0798fbc51d17debca50 Author: Jan Wedekind (Dr) Date: Thu Mar 16 20:57:50 2017 +0000 Reduced TODO list commit 10ce52865276bc182ec31b44f383cce944ee940b Author: Jan Wedekind (Dr) Date: Thu Mar 16 20:46:44 2017 +0000 Add audio/video recording example commit 6ff73ecbcc8a5421e972687645c16fe1541c0491 Merge: 42081e25 7eba1a22 Author: Jan Wedekind (Dr) Date: Thu Mar 16 17:15:42 2017 +0000 Merge branch 'master' into debian/sid commit 7eba1a229ef6a7b6581ea43517757fcd74064981 Author: Jan Wedekind (Dr) Date: Thu Mar 16 17:15:36 2017 +0000 Do not check SMOB type in destructor commit 4ef2b7ca1429dc8b86a7eba59920c5cbf92fd409 Author: Jan Wedekind (Dr) Date: Thu Mar 16 13:24:59 2017 +0000 Add libavresample-dev to doc/dependencies.sh commit e20327ac0de125f39434332df3b1cf2947114c61 Author: Jan Wedekind (Dr) Date: Thu Mar 16 13:19:17 2017 +0000 Add samples-helpers.h to distributable commit 42081e257a12e74015ec6e907d0be720d677b808 Merge: cae64e9b 91f72683 Author: Jan Wedekind (Dr) Date: Thu Mar 16 13:05:40 2017 +0000 Merge branch 'master' into debian/sid commit 91f726838cd581e31a4972274293c192a9f31ab0 Author: Jan Wedekind (Dr) Date: Thu Mar 16 08:11:14 2017 +0000 Try to use libavresample if libswresample is not present commit 20c52f8ed03c7ba7019d79aa923d0fb4b73c59a6 Author: Jan Wedekind (Dr) Date: Wed Mar 15 22:42:44 2017 +0000 Distinguish libswresample and libavresample flags commit e9f6b326ab63baa3c7a84986e49c4534418e6b29 Author: Jan Wedekind (Dr) Date: Wed Mar 15 22:30:03 2017 +0000 Check for libavresample commit 49d457f9a2445fbd2dcb595bde2e33b261ed6349 Author: Jan Wedekind (Dr) Date: Wed Mar 15 17:17:45 2017 +0000 Update TODO commit c266ef5f656799781c5543bb0a170da27eec8c9a Author: Jan Wedekind (Dr) Date: Wed Mar 15 07:59:25 2017 +0000 Write delayed audio and video packets commit 83e8f2575e6274037e13c2a55ea04a50bd8eac41 Author: Jan Wedekind (Dr) Date: Tue Mar 14 21:30:35 2017 +0000 Trying to encode delayed video and audio packets commit 8f7b4fa622b7d6d4874b70cc8f198e5381601ec8 Author: Jan Wedekind (Dr) Date: Tue Mar 14 07:58:57 2017 +0000 Added method for writing audio/video packet commit a13e549fc6ac18390a02cc147c448759b8bd82cf Author: Jan Wedekind (Dr) Date: Mon Mar 13 21:14:28 2017 +0000 Write audio data using FFmpeg commit 3d95142ab79f5820a51f8355c07f3bc6302e3620 Author: Jan Wedekind (Dr) Date: Mon Mar 13 07:39:26 2017 +0000 Make audio frame writable commit 8d9356ae1428e3b714c4f52da12f1d274aa07edd Author: Jan Wedekind (Dr) Date: Sun Mar 12 21:44:15 2017 +0000 Create audio frames for encoding commit 424a77f7b61360145d47b86edbd665c26a80e097 Author: Jan Wedekind (Dr) Date: Sun Mar 12 20:51:56 2017 +0000 Create audio packets commit e6884ac40ef85015fc4187b3db1c5a0ed78e8a00 Author: Jan Wedekind (Dr) Date: Sat Mar 11 20:32:07 2017 +0000 Fetch buffered audio into packed audio frame commit 128019c2cc2583eab3fdf058fb48e4a0d9c09418 Author: Jan Wedekind (Dr) Date: Sat Mar 11 13:37:35 2017 +0000 Separate method for buffering audio commit 5e219e0920441f7d760b0dfe2be8786077c7f5b6 Author: Jan Wedekind (Dr) Date: Fri Mar 10 20:58:36 2017 +0000 Added packed frame and method for checking audio buffer fill commit 77c27582449c1a770ec235fb37361fd887c8c528 Author: Jan Wedekind (Dr) Date: Thu Mar 9 20:58:30 2017 +0000 Method for accessing target audio frame commit 02b640d480845968dc328701a68999e310e31cb7 Author: Jan Wedekind (Dr) Date: Thu Mar 9 12:47:22 2017 +0000 Test target video frame commit c95ff7a0cc5276690f7d947bcf22d9fddaa2bd02 Author: Jan Wedekind (Dr) Date: Wed Mar 8 21:49:44 2017 +0000 Allocate packed audio frame commit c2023ddc352fd5ba8f25e5b1fe7c30da28fa4a34 Author: Jan Wedekind (Dr) Date: Wed Mar 8 12:44:58 2017 +0000 Refactor software resampling integration code commit 50595f137f51dbb2d722f06ae20b509caef0ea74 Author: Jan Wedekind (Dr) Date: Tue Mar 7 22:01:59 2017 +0000 Provide output offset to callback method when fetching from ring buffer commit 5a25db99f64dc055830a66a116f797ef2ec1169f Author: Jan Wedekind (Dr) Date: Mon Mar 6 21:59:15 2017 +0000 Prototype code for determining size of audio frame commit 5c8a93a825330d9f49fcd170809aa3585ebaf932 Author: Jan Wedekind (Dr) Date: Fri Mar 3 21:24:25 2017 +0000 Select sample format automatically commit db31fba2678df725a189c51b03dc1913bade6276 Author: Jan Wedekind (Dr) Date: Fri Mar 3 20:36:24 2017 +0000 Method for selecting format commit f6415093f7e4cc601e85c33de058e3359fee5ef3 Author: Jan Wedekind (Dr) Date: Fri Mar 3 20:05:17 2017 +0000 "select-sample-format" -> "best-sample-format" commit 5ef3f0fdfc9132450a1b0c6b05c1840d893cfbf9 Author: Jan Wedekind (Dr) Date: Fri Mar 3 17:33:41 2017 +0000 avtype -> sample-format commit 39015e6027ede40ac06d20bf6f6cc55fc7767f71 Author: Jan Wedekind (Dr) Date: Fri Mar 3 17:29:21 2017 +0000 Use intermediate variable for sample format commit 8b19419388d3cb74327a021756e008ff117dab5e Author: Jan Wedekind (Dr) Date: Fri Mar 3 17:25:51 2017 +0000 Use specified sample format if list of supported formats is empty commit 669948e4a80bdc8cdec9bc67cfa5a47d440cb53b Author: Jan Wedekind (Dr) Date: Fri Mar 3 12:59:42 2017 +0000 Test selection of sample rate commit ae5ab1b081d4284c2061c153a40da6b55c16746e Author: Jan Wedekind (Dr) Date: Fri Mar 3 08:12:57 2017 +0000 Select sample format commit 7b65c2ddae954a1925d980fb6cf32bdedd2552d2 Author: Jan Wedekind (Dr) Date: Thu Mar 2 22:14:57 2017 +0000 Get typecodes of supported formats commit 73cfe9dbe0f40b1c158c61b09029bda051de800c Author: Jan Wedekind (Dr) Date: Thu Mar 2 20:27:54 2017 +0000 Select suitable sample typecode commit d72aca3f6888f1a8dc4434e28a0c0667f9c4fd01 Author: Jan Wedekind (Dr) Date: Thu Mar 2 13:14:20 2017 +0000 Select most suitable integer format commit f6b9145bd0c34d87d248723b6335e2fd4373940c Author: Jan Wedekind (Dr) Date: Wed Mar 1 21:23:25 2017 +0000 Clean up object if exception occurs in Scheme method called by constructor commit 6fa1f693c65913545dafd90e5611dd7ec01c188f Author: Jan Wedekind (Dr) Date: Wed Mar 1 20:32:10 2017 +0000 Check exception is thrown commit 9348a391bb978d774717a530b8e6974bd0661ac3 Author: Jan Wedekind (Dr) Date: Tue Feb 28 22:22:42 2017 +0000 Method for cleaning up object on exception commit 9b67f07a2cada465cc60be7bc233e9fc8c2f0181 Author: Jan Wedekind (Dr) Date: Mon Feb 27 22:11:03 2017 +0000 Check sampling rate is supported commit 0e3a25fe0958539c436b9887d63a029379687a69 Author: Jan Wedekind (Dr) Date: Mon Feb 27 19:34:32 2017 +0000 scm_typecode -> scm_sample_format commit c32ce18255a3ea99297cae56cbb18186e75bd852 Author: Jan Wedekind Date: Sun Feb 26 21:53:54 2017 +0000 Add audio buffer to FFmpeg output commit dacaffd9e88f4a2161f957780deb3eedd6c0acc6 Author: Jan Wedekind Date: Sat Feb 25 20:39:40 2017 +0000 Add C method for writing audio commit 6706ee38240db2d2aca2064d563ca8e187708e85 Author: Jan Wedekind Date: Fri Feb 24 19:46:37 2017 +0000 Converting samples with specified destination commit eb7faafd1f2abd03e8cafe9f3d494170d55589b6 Author: Jan Wedekind Date: Thu Feb 23 20:20:04 2017 +0000 Channel layout commit 8b734bc57608476e19b970d02b21e3b2fa44a3e6 Author: Jan Wedekind (Dr) Date: Wed Feb 22 21:17:04 2017 +0000 Set sample offsets commit 4260bc97fb09886bb0d36385ff1ebf8e35b70764 Author: Jan Wedekind (Dr) Date: Tue Feb 21 22:16:51 2017 +0000 Convert planar audio samples to array commit 9cdb8c648ac8ee02295f34286baee43839f9a4a2 Author: Jan Wedekind (Dr) Date: Tue Feb 21 22:07:34 2017 +0000 Conversions including planar audio samples commit 0f0aad4d12ad30666df9ab1330c9d218d2b33bf6 Author: Jan Wedekind (Dr) Date: Tue Feb 21 21:24:51 2017 +0000 C method for converting offsets to pointers commit d2bbfc3d1cf6e2f754df7cd33bc7a27afb734342 Author: Jan Wedekind (Dr) Date: Tue Feb 21 20:07:25 2017 +0000 Set default offsets for planar audio samples commit 6a083d3ac74227a40348120e4a2072c34c01a315 Author: Jan Wedekind (Dr) Date: Tue Feb 21 17:18:43 2017 +0000 Set planar/packed flag commit f1ec745fa0248046fdc8e426654b936714b73c78 Author: Jan Wedekind (Dr) Date: Tue Feb 21 12:44:15 2017 +0000 Ensure samples are compact commit 17688fab287fdfbbc2692088d54b43b3c0ea48f7 Author: Jan Wedekind (Dr) Date: Tue Feb 21 08:37:21 2017 +0000 Convert mono audio samples commit 0f0cb419ede329efcdd03962f949e3d365aef080 Author: Jan Wedekind (Dr) Date: Mon Feb 20 22:08:32 2017 +0000 Do not support resampling to a different sampling rate commit 89b71ab0dc5683acb1c87e840d839d6e4bfda524 Author: Jan Wedekind (Dr) Date: Mon Feb 20 17:28:05 2017 +0000 Specify sampling rate when converting array to samples commit 6c4a46f8a2473f00364f699d1e77a1f490021972 Author: Jan Wedekind (Dr) Date: Mon Feb 20 13:46:58 2017 +0000 Check shape after changing sampling rate commit fc1491455beb17b6d81ba76af51b5e8baaba000a Author: Jan Wedekind (Dr) Date: Sun Feb 19 21:29:02 2017 +0000 Type conversions commit 24a8e1b17ad5ccfd2b229e2ae05654bd0fcc02e0 Author: Jan Wedekind (Dr) Date: Sat Feb 18 21:52:31 2017 +0000 Moved type conversions into aiscm/samples.scm commit f3117f5e4b8ae918319f3e93c42a59af3ecfc846 Merge: d8a7efe4 36712f5e Author: Jan Wedekind (Dr) Date: Fri Feb 17 22:08:09 2017 +0000 Merge branch 'master' into swresample commit 36712f5eb886e3f622d6a0dcdde5150476b2eb03 Author: Jan Wedekind (Dr) Date: Fri Feb 17 22:06:19 2017 +0000 Temporarily revert libswresample dependency commit d8a7efe4e1ca5662883e1bb7339ae8337581fd1f Author: Jan Wedekind (Dr) Date: Fri Feb 17 21:57:16 2017 +0000 Resampling from short integer to integer commit cf6954b905f7a9434da0cafae4a54a7d9786837b Author: Jan Wedekind (Dr) Date: Fri Feb 17 17:50:54 2017 +0000 Working on software resampling integration commit 4490f484a490951cd26adfc4b7765a56a7279553 Author: Jan Wedekind (Dr) Date: Fri Feb 17 17:28:59 2017 +0000 Trying libavresample-dev commit 2c00120ce30a9e5b2c360911987543b8834e0a74 Author: Jan Wedekind (Dr) Date: Fri Feb 17 17:02:38 2017 +0000 Package name is "libresample1-dev" commit 53c44d3eb1882f48522a16f4c39f377a7ffb2621 Author: Jan Wedekind (Dr) Date: Fri Feb 17 16:59:01 2017 +0000 Whitespace fixes commit 0b7b940f01c60d4e44b40d4e58cc451baf37f2d7 Author: Jan Wedekind (Dr) Date: Fri Feb 17 16:56:00 2017 +0000 Package name is "libswresample1-dev" under Ubuntu 14.04 commit 2d2e617da70ca0cbe2017c89aad75e5ca4ad4676 Author: Jan Wedekind (Dr) Date: Fri Feb 17 13:13:46 2017 +0000 Updated maintainer-clean rule commit 04e8de9300269a2fdd5a800e83595cda40f11835 Author: Jan Wedekind (Dr) Date: Fri Feb 17 13:05:07 2017 +0000 Add libswresample-dev to dependencies commit ef52cb5d967f8214ef62e73b58b7c35f8fe09560 Author: Jan Wedekind (Dr) Date: Fri Feb 17 08:37:01 2017 +0000 Allocate correct frame memory size commit 7f1540aa3e9fa323286183caf31a2ecdd91e778c Author: Jan Wedekind (Dr) Date: Thu Feb 16 21:44:47 2017 +0000 Skip two tests commit 43686881efc074f0d66cfb291823f824f301700d Author: Jan Wedekind (Dr) Date: Thu Feb 16 21:38:58 2017 +0000 empty conversion native library, removing library version * added empty sample conversion native library * removing library version numbers commit d8a15441ecd842bba724900c555d97918f9edfad Author: Jan Wedekind (Dr) Date: Thu Feb 16 21:22:22 2017 +0000 Working on audio conversions commit 8724ffff94f42a1ab67a6fd337c79833de2ffd20 Author: Jan Wedekind (Dr) Date: Thu Feb 16 13:10:47 2017 +0000 Convert numerical array to audio samples commit 92572ca64859a62268ff1f4d610da29b4cce6164 Author: Jan Wedekind (Dr) Date: Thu Feb 16 12:56:55 2017 +0000 Convert audio samples to numerical array commit 61de235818616f453a43bb90c8871c4e9d9aa6cb Author: Jan Wedekind (Dr) Date: Thu Feb 16 08:32:57 2017 +0000 Removed 'get-mem' method commit 2ee52f22e89babb0aead5a6401946adce8273b8a Author: Jan Wedekind (Dr) Date: Wed Feb 15 22:30:29 2017 +0000 Initial code for audio samples commit 08c5e7025da10d9213acbc2e87a0dcffbb6d3bf7 Author: Jan Wedekind (Dr) Date: Wed Feb 15 22:21:17 2017 +0000 Use offsets for audio sample planes commit 153f415083d19dc7b5563fc70cbfef87381f78b8 Author: Jan Wedekind (Dr) Date: Wed Feb 15 21:50:04 2017 +0000 convert -> convert-image commit 73ff2bc3002a8ab032eb1ab8de7b8873f5fa7a28 Author: Jan Wedekind (Dr) Date: Wed Feb 15 13:25:34 2017 +0000 Add empty samples class commit 3993f985075a86693765ff896811484b79d52397 Author: Jan Wedekind (Dr) Date: Wed Feb 15 08:41:49 2017 +0000 Bugfix for old-style FFmpeg audio frame allocation commit 2148f8a10a42fc679717caff4c38add705fe8435 Author: Jan Wedekind (Dr) Date: Tue Feb 14 21:56:16 2017 +0000 Implement old-style audio buffer allocation commit ff4a5ae0e3afec54b807f3069713b9e8cc64f96e Author: Jan Wedekind (Dr) Date: Tue Feb 14 21:55:52 2017 +0000 Bugfix: use channel count for determining layout commit a4f3432210c30b2605b4b719cfea2306395d21b0 Author: Jan Wedekind (Dr) Date: Tue Feb 14 12:40:00 2017 +0000 Separate audio and video frames commit 869d4eeb728d1fb7ae02650e790c809685cd26db Author: Jan Wedekind (Dr) Date: Mon Feb 13 12:40:41 2017 +0000 Working on audio frame allocation commit ae2cc38dab03254d1e4324ea779c011ccb1e1ad4 Author: Jan Wedekind (Dr) Date: Mon Feb 13 12:23:16 2017 +0000 Added some Git ignore files commit d899a53d5798d7079a9dd8f4422b85fe05931231 Author: Jan Wedekind (Dr) Date: Mon Feb 13 08:09:59 2017 +0000 "write-audio" for files commit 01a7e358034d8b23eafcbb1a605f640be61ba60d Author: Jan Wedekind (Dr) Date: Sun Feb 12 21:56:51 2017 +0000 Set audio typecode commit 62953b20f856e95a1f59ee7f1a4595dd833f3af8 Author: Jan Wedekind (Dr) Date: Sun Feb 12 21:13:33 2017 +0000 Set audio bit rate commit 525d4ad90b4144db75a10745b61878ca9971b019 Author: Jan Wedekind (Dr) Date: Sun Feb 12 20:48:45 2017 +0000 Put video parameters into list commit 86d1f34ec969b8220cebabc2f8f9ee4622d875e1 Author: Jan Wedekind (Dr) Date: Sat Feb 11 22:18:25 2017 +0000 number of channels commit cae64e9bf32c2878f0d930679e26b46479471272 Merge: 607bf191 45a6603f Author: Jan Wedekind (Dr) Date: Sat Feb 11 20:32:42 2017 +0000 Merge branch 'master' into debian/sid commit 45a6603f8935570067ce78baba627b60a6c2e663 Author: Jan Wedekind (Dr) Date: Sat Feb 11 19:26:42 2017 +0000 Open output audio codec commit d370ac49485a3ca3198ba78ceee10b716d5e8942 Author: Jan Wedekind (Dr) Date: Sat Feb 11 14:50:12 2017 +0000 global headers for audio files commit 94f0ad69b85d847f2befef471371bf689a1b2ad5 Author: Jan Wedekind (Dr) Date: Sat Feb 11 14:01:08 2017 +0000 Bugfix for Ubuntu compatibility code commit d52d1c71bb56b7f91728c110f76439666b2e604f Author: Jan Wedekind (Dr) Date: Fri Feb 10 23:42:39 2017 +0000 Initialise audio codec commit 8b879cb2f2607a7ca26edf303db3f6a3a99f9a58 Author: Jan Wedekind (Dr) Date: Fri Feb 10 22:57:32 2017 +0000 Further refactor video output commit 0207de4d09563501b0096bcab6a8fa2638635a3a Author: Jan Wedekind (Dr) Date: Fri Feb 10 17:50:53 2017 +0000 Open audio stream commit 6d46fc5f0a55cb99f234eba249adafebba6456b2 Author: Jan Wedekind (Dr) Date: Fri Feb 10 17:39:07 2017 +0000 Refactoring video output commit 2bc6c7ce220848c45dadcc47555fb532c89e5919 Author: Jan Wedekind (Dr) Date: Fri Feb 10 13:05:49 2017 +0000 Work on FFmpeg audio commit 607bf1911ee272b30d803a53f22f8a2a5b7ad97e Merge: 2ff80c43 e60739be Author: Jan Wedekind (Dr) Date: Thu Feb 9 22:49:14 2017 +0000 Merge branch 'master' into debian/sid commit e60739be58324cc0aee859b899a3d95f4ba6a119 Author: Jan Wedekind (Dr) Date: Thu Feb 9 22:48:30 2017 +0000 Split up FFmpeg tests because of problems with side-effects commit 2ff80c4359c03ab159778344a36096e19a26775d Merge: 33d77c28 2b4578bf Author: Jan Wedekind (Dr) Date: Thu Feb 9 21:33:04 2017 +0000 Merge branch 'master' into debian/sid commit 2b4578bf34baea09da912ad87e0cac9c2842f1e1 Author: Jan Wedekind (Dr) Date: Thu Feb 9 21:29:21 2017 +0000 Refactor FFmpeg wrapper tests commit c9a0ba7980d3234ca3225ef49d03e8fe83eeef2f Author: Jan Wedekind (Dr) Date: Thu Feb 9 12:19:39 2017 +0000 Include SRFI-64 commit 385e86ecbe0109ec6e80996309077bdf768ab3e8 Author: Jan Wedekind (Dr) Date: Thu Feb 9 12:12:48 2017 +0000 Only build Ubuntu/Trusty branch on Travis commit 31b9a9e6222e198947728d369777923163cdebd9 Author: Jan Wedekind (Dr) Date: Wed Feb 8 23:04:16 2017 +0000 Added missing test driver commit 0b95c1364c68d67fef9bbb1b200bf4cc96def68e Author: Jan Wedekind (Dr) Date: Tue Feb 7 20:24:39 2017 +0000 Porting tests to SRFI-64 commit 33d77c280e5b5eccfbb3b1e84d4a6758097591a1 Merge: 5525efe5 fd08e62c Author: Jan Wedekind (Dr) Date: Sun Feb 5 22:10:44 2017 +0000 Merge branch 'master' into debian/sid commit fd08e62ccb6469cc5ef1815a49906de0f097e87c Author: Jan Wedekind (Dr) Date: Sun Feb 5 22:03:47 2017 +0000 Add missing test fixture to distributable commit 2446a681a7b8d1cdd31a1436525907fca29ac4a2 Author: Jan Wedekind (Dr) Date: Sun Feb 5 21:12:22 2017 +0000 More backporting to Ubuntu Trusty (14.04) commit a06b5a9017299867dc513568539795178fa32dda Author: Jan Wedekind (Dr) Date: Sun Feb 5 20:35:33 2017 +0000 More FFmpeg porting for Ubuntu Trusty (14.04) commit 6ea1d61430ad19464a038cb082cedbca57c6cdd0 Author: Jan Wedekind (Dr) Date: Sun Feb 5 19:27:25 2017 +0000 Compatibility fixes for Ubuntu Trusty (14.04) commit 543968bd40704aa7d292422cb886edd7a6eaa20c Author: Jan Wedekind (Dr) Date: Sun Feb 5 19:26:57 2017 +0000 Bugfix: wrong order of parameters for "memset" commit e42de57fdeffeae16a4c078324c05c993e8c9471 Author: Jan Wedekind (Dr) Date: Sat Feb 4 22:26:56 2017 +0000 Check for presence of av_image_get_buffer_size or avpicture_get_size commit 60a22cd1acdfcf324e9835d0b944d30b95705898 Author: Jan Wedekind (Dr) Date: Sat Feb 4 22:19:01 2017 +0000 Check for av_frame_alloc and avcodec_alloc_frame commit 2b6a4561a011a8df19e20691ec13be0ea84ddc6a Author: Jan Wedekind (Dr) Date: Sat Feb 4 21:57:16 2017 +0000 Add video output example to documentation commit e79f94b7c6adf47b70102bcf4e20fd47857f25f5 Author: Jan Wedekind (Dr) Date: Fri Feb 3 22:38:37 2017 +0000 Add video timestamps commit 0fc3a8a9c72d5c438693859a96275b44a837c0a5 Author: Jan Wedekind (Dr) Date: Fri Feb 3 17:43:05 2017 +0000 Prevent reading from output video commit 962bd09c14cebd87916c4d30e63ed72693f39d86 Author: Jan Wedekind (Dr) Date: Fri Feb 3 17:26:33 2017 +0000 Prevent using output context as input context commit 77c59ac7705ea9c7f697f41b4b65a5f74179a486 Author: Jan Wedekind (Dr) Date: Fri Feb 3 08:07:30 2017 +0000 Test return value of write-image commit 7c03345bbef0f60504abeb17952a95483323dc03 Author: Jan Wedekind (Dr) Date: Thu Feb 2 21:57:02 2017 +0000 Test conversion from long integer array commit 5677e634a04008c26c8edc00e0930eee1c2002cc Author: Jan Wedekind (Dr) Date: Thu Feb 2 21:40:16 2017 +0000 Test conversion to long integer array commit ca952337a38ff0eae9348ce97df97bb88c2dfbec Author: Jan Wedekind (Dr) Date: Thu Feb 2 20:03:39 2017 +0000 Test Scheme to C array conversion commit 07c6162ccc960df35d56d2377559adcc76efb64b Author: Jan Wedekind (Dr) Date: Thu Feb 2 19:49:41 2017 +0000 Put Scheme to C array conversions into separate file commit bae98624d4470c3a0af24953221bd790614ee173 Author: Jan Wedekind (Dr) Date: Wed Feb 1 21:18:33 2017 +0000 Use 64-bit offsets to deal with ffmpeg planar frame offsets commit 4fea5794f4fecef40761bafabd0fef61c5bb04b1 Author: Jan Wedekind (Dr) Date: Tue Jan 31 20:37:38 2017 +0000 Refactoring video output commit f1f2aa1ea886a72164ba2e5110d4fbaaba7f6517 Author: Jan Wedekind (Dr) Date: Tue Jan 31 19:22:12 2017 +0000 Construct video frame from list of values commit 3e413ce18943e2649cd6d15b167b2f8e94c889e0 Author: Jan Wedekind (Dr) Date: Tue Jan 31 12:39:10 2017 +0000 Separate method for getting FFmpeg frame info commit 30179f7909dd988aa790306a45d6ae7b8bcee864 Author: Jan Wedekind (Dr) Date: Mon Jan 30 21:39:33 2017 +0000 Make convert-from handle MJPEG conversion with different pitches commit 49159c7694d5d3e7f7c938c380b1bdb2b5c43d07 Author: Jan Wedekind (Dr) Date: Mon Jan 30 21:25:20 2017 +0000 Pass shape argument to MJPEG converter commit 17c8298b58894e7bdad7e50ada06f2a06b86ff7f Author: Jan Wedekind (Dr) Date: Mon Jan 30 21:06:59 2017 +0000 Make convert-from! handle MJPEG frames commit bda919914790202f74275128e32297472bf2fb9b Author: Jan Wedekind (Dr) Date: Mon Jan 30 20:44:51 2017 +0000 Test MJPEG conversion commit 83961abf2ef0e46544daa60cb5414a34e62ae4c4 Author: Jan Wedekind (Dr) Date: Mon Jan 30 12:28:42 2017 +0000 Add "convert-from!" method commit 943e2943a35bf6f1e0818f4f43a3a731e65de106 Author: Jan Wedekind (Dr) Date: Mon Jan 30 08:11:59 2017 +0000 Write uninitialised frames commit 59c4347d4b0a9ce916575a5aaeacc2ad99fcd7c0 Author: Jan Wedekind (Dr) Date: Sun Jan 29 22:49:24 2017 +0000 Minor changes commit d8c90fed5c4380098eae218c9b57e12b65283fd4 Author: Jan Wedekind (Dr) Date: Sat Jan 28 23:05:06 2017 +0000 Empty FFmpeg write method commit 24dc9c25eaffa38f55a24d2a11ae1010a7c69373 Author: Jan Wedekind (Dr) Date: Sat Jan 28 22:52:00 2017 +0000 WIP commit 95ddf7060bfe29e6f6663ab9bb1014aba1990689 Author: Jan Wedekind (Dr) Date: Sat Jan 28 22:24:15 2017 +0000 Refactor ffmpeg bindings commit 87a54af6f8be04eb193cf8e47a6de822d2e4d923 Author: Jan Wedekind (Dr) Date: Fri Jan 27 23:18:20 2017 +0000 Remove print statement commit 748a7902a24c9dc59820af492e3718bd380da03b Author: Jan Wedekind (Dr) Date: Fri Jan 27 23:17:05 2017 +0000 Close output file commit 3ef5debba2690c8c89202a4567fee41e8c2099d6 Author: Jan Wedekind (Dr) Date: Fri Jan 27 12:57:53 2017 +0000 Option to set output format explicitely commit 7f9f75e0e474ead05fa417883b969d761be48cc7 Author: Jan Wedekind (Dr) Date: Thu Jan 26 22:25:09 2017 +0000 Default values for video output parameters commit 1ddcabb61feab8e564a09c72e54ef4cb94bd5fe7 Author: Jan Wedekind (Dr) Date: Thu Jan 26 22:12:39 2017 +0000 Add file name extension to temporary file commit 494cd1fe24d1794d8fa46234ce4ba0c5e1a1ebed Author: Jan Wedekind (Dr) Date: Thu Jan 26 21:58:29 2017 +0000 Create empty video file commit ff56879d33a2c5fb614a516258f241b83d64c892 Author: Jan Wedekind (Dr) Date: Thu Jan 26 12:39:10 2017 +0000 Default arguments for output audio/video file commit b7ff047211a92f6be8a3e12d8c3561f6d96086d9 Author: Jan Wedekind (Dr) Date: Thu Jan 26 08:43:42 2017 +0000 Compatibility fix commit 7bea8e4fec614c9fd5ce7636cd91a14108e3f809 Author: Jan Wedekind (Dr) Date: Thu Jan 26 08:36:02 2017 +0000 Write video header and trailer commit e0a8734f76fa2a7896d46503c574e1858f7b3f2b Author: Jan Wedekind (Dr) Date: Wed Jan 25 22:23:24 2017 +0000 Assume pixel aspect ratio of one if not defined commit 4457497cc385f9c480db8302baeba3310a9a85c6 Author: Jan Wedekind (Dr) Date: Wed Jan 25 21:59:32 2017 +0000 Get/set aspect ratio of video commit 2fba91e9608c0b5f7c909ea87032e19b5118cd0a Merge: 3013a0de dc02e589 Author: Jan Wedekind (Dr) Date: Wed Jan 25 19:47:02 2017 +0000 Merge branch 'master' into ffmpeg-output commit dc02e589126e3d46a4bb35bd37a98c4e18ae7b88 Author: Jan Wedekind (Dr) Date: Wed Jan 25 19:46:43 2017 +0000 Markdown formatting fix commit 5525efe58a72d66591f36d7983d6b20eee49d971 Merge: e361c36b 514c82be Author: Jan Wedekind (Dr) Date: Wed Jan 25 19:36:03 2017 +0000 Merge branch 'master' into debian/sid commit 3013a0de1871a768419eb888e53735a0b68c5424 Merge: c4d29c62 b63188ca Author: Jan Wedekind (Dr) Date: Wed Jan 25 19:32:06 2017 +0000 Merge branch 'master' into ffmpeg-output commit b63188ca0eebfa8f437e0918f24b2f245aab4499 Author: Jan Wedekind (Dr) Date: Wed Jan 25 19:31:41 2017 +0000 Link to Debian package tracker commit c4d29c623801346730d3041b5eeba1bc60d68834 Author: Jan Wedekind (Dr) Date: Wed Jan 25 12:42:43 2017 +0000 Set codec ID commit 78af94429e778da54555174626d496ef6a2cc757 Author: Jan Wedekind (Dr) Date: Wed Jan 25 08:54:43 2017 +0000 Set video bit rate commit 32e95cd9542e104f3d77b5eb73d5d32db9639aa9 Merge: 4cdf6a1b 514c82be Author: Jan Wedekind (Dr) Date: Tue Jan 24 21:56:25 2017 +0000 Merge branch 'master' into ffmpeg-output commit 4cdf6a1b671b63af4af426d1079e19f0f5f7fcfa Author: Jan Wedekind (Dr) Date: Tue Jan 24 21:50:31 2017 +0000 Output frame rate and shape commit 514c82bea3f1aeb759ee52c86d5f2d971db04a67 Author: Jan Wedekind (Dr) Date: Tue Jan 24 20:12:30 2017 +0000 Version 0.10.2 commit 5df3733a546da74b315c171e53e83d7d8d604ecf Merge: 3453b185 fedc9f81 Author: Jan Wedekind (Dr) Date: Tue Jan 24 16:41:53 2017 +0000 Merge branch 'master' into ffmpeg-output commit fedc9f810a35599f4a05d81b627188fce2af9b9e Author: Jan Wedekind (Dr) Date: Tue Jan 24 16:41:24 2017 +0000 Update TODO commit 3453b18590c0d431c7618e839fc7916272ccbe68 Author: Jan Wedekind (Dr) Date: Tue Jan 24 16:40:56 2017 +0000 Minor changes commit 8d6e1b108d16b839e3e73f1261c91de934918bc3 Author: Jan Wedekind (Dr) Date: Tue Jan 24 13:05:02 2017 +0000 Working on video stream initialisation commit f05d113c2f68c2e32c4037062f06ef5694eacd2e Merge: 973495ed 57233120 Author: Jan Wedekind (Dr) Date: Mon Jan 23 22:08:06 2017 +0000 Merge branch 'master' into ffmpeg-output commit 57233120ea14cb8899791702911454492309a7cf Author: Jan Wedekind (Dr) Date: Mon Jan 23 22:07:27 2017 +0000 Bugfix: map (mov-unsigned RAX ECX) to (MOV EAX ECX) commit 25cc8b7278e29e481ae43df6c6117a576979cdad Author: Jan Wedekind (Dr) Date: Mon Jan 23 20:20:31 2017 +0000 Add bug to TODO commit e26b3a1cc4710f7e1d35098466ee35280ac98c4d Author: Jan Wedekind (Dr) Date: Mon Jan 23 20:18:07 2017 +0000 Recommend to install readline and colorization commit 973495ed71c3b5dd147426eb3f10d1e5a833253d Author: Jan Wedekind (Dr) Date: Mon Jan 23 13:03:19 2017 +0000 Create FFmpeg output object commit 047309f4a9693abfb937ca3689f374844d9e9811 Author: Jan Wedekind (Dr) Date: Mon Jan 23 12:49:36 2017 +0000 Started branch for implementing FFmpeg output wrappers commit bc1ec32a474398785e097ef3ff2fa8411a0837ac Author: Jan Wedekind (Dr) Date: Mon Jan 23 12:43:02 2017 +0000 video -> input-video commit 37ca2a11a02e4151334ed9dfc7bb86892cf0a0dd Author: Jan Wedekind (Dr) Date: Mon Jan 23 12:41:46 2017 +0000 Add ffmpeg example commit 49ae4a9290e38c3900246086bbbc5fc839cecf90 Author: Jan Wedekind (Dr) Date: Sat Jan 21 21:21:56 2017 +0000 Update FFmpeg bindings documentation commit 2195595b4af6653049aa8f92f9b038f8a0c8dd38 Author: Jan Wedekind (Dr) Date: Sat Jan 21 21:00:56 2017 +0000 Simplified FFMpeg audio type mappings commit 700e5e5a10ed550748d9c338f42bf28d2c6b81b4 Author: Jan Wedekind (Dr) Date: Sat Jan 21 20:33:50 2017 +0000 Update TODO list commit 40d12216ef2f1aeaf25c0c3f8c78f806ce29d294 Author: Jan Wedekind (Dr) Date: Sat Jan 21 20:26:49 2017 +0000 Add links to related Debian and Ubuntu pages commit e361c36bcd393ff13936b2f308bbf3c07686307f Merge: fe2744e4 f6ce43a5 Author: Jan Wedekind (Dr) Date: Fri Jan 20 21:26:02 2017 +0000 Merge branch 'master' into debian/sid commit f6ce43a504a95e9457471198b32c02fa6862e92e Author: Jan Wedekind (Dr) Date: Fri Jan 20 21:25:42 2017 +0000 Simplify Debian changelog entry commit fe2744e4803a2c529c6934ef02559abd323fdd4d Merge: e49db25c 8c861c68 Author: Jan Wedekind (Dr) Date: Fri Jan 20 21:18:31 2017 +0000 Merge branch 'master' into debian/sid commit 8c861c68ca4fa1a40dbea01587ecbef38d8313d0 Author: Jan Wedekind (Dr) Date: Fri Jan 20 20:56:51 2017 +0000 Version 0.10.1 commit e49db25ce3518deb85619e5ada500f12f45246a8 Merge: c7574db2 f0ca29e1 Author: Jan Wedekind (Dr) Date: Fri Jan 20 21:09:22 2017 +0000 Merge branch 'master' into debian/sid commit f0ca29e1e190ef98c203434a589d9db324a2531d Author: Jan Wedekind (Dr) Date: Fri Jan 20 20:56:51 2017 +0000 Version 0.9.3 commit da1ee8fda82d6d3b48e42853bc8fb6ababbd2941 Author: Jan Wedekind (Dr) Date: Fri Jan 20 20:01:39 2017 +0000 Added links to PyTorch and DyNet commit 9937a7bb96fcef6c0fd5a16ac1476c2676494625 Author: Jan Wedekind (Dr) Date: Fri Jan 20 19:53:23 2017 +0000 longest-use -> spill-candidate commit 1486e18d0308a5dd21befd615e93cd0e36ebab00 Author: Jan Wedekind (Dr) Date: Fri Jan 20 17:44:45 2017 +0000 Replaced (if ... ... #f) with (and ... ...) in some places commit 84990b114b230cea96710a214868e5290031a513 Author: Jan Wedekind (Dr) Date: Fri Jan 20 17:41:53 2017 +0000 Use "difference" in more places commit 723227dcaea833566634a119d2b75add5cb1bc2b Author: Jan Wedekind (Dr) Date: Fri Jan 20 17:33:55 2017 +0000 Enable RBP for register allocation commit 7bd1606d20cb13d11e37b4eaed03d14a420750fd Author: Jan Wedekind (Dr) Date: Fri Jan 20 13:12:39 2017 +0000 Remove Chaitin graph coloring commit 8220c74956653a1528b9b88b52bfb93141f0e4f5 Author: Jan Wedekind (Dr) Date: Thu Jan 19 21:22:28 2017 +0000 Bugfix: cast pointer locations to correct type when substituting variables commit 70afa655fe1f785569f17ba2e7436190a8c97615 Merge: e8511ee6 8179f021 Author: Jan Wedekind (Dr) Date: Wed Jan 18 12:57:51 2017 +0000 Merge branch 'fast-allocate-registers' of github.com:wedesoft/aiscm into fast-allocate-registers commit e8511ee69b924f6278a4670851357476c33b9b5b Author: Jan Wedekind (Dr) Date: Wed Jan 18 12:51:36 2017 +0000 Allocate temporary variables for pointers commit 8179f0216d862dd89fa7b3d1afdea6cd3ef697c5 Author: Jan Wedekind (Dr) Date: Wed Jan 18 12:51:36 2017 +0000 Allocate temporary variables for pointers commit 6a4bad32f3c326b47a8b0846878c375173f31e94 Author: Jan Wedekind (Dr) Date: Wed Jan 18 08:38:43 2017 +0000 Use temporary register to resolve pointer to pointer commit db616b12ead4ee95d7c6dd4e2961d6d4f25d10ea Author: Jan Wedekind (Dr) Date: Tue Jan 17 22:56:47 2017 +0000 fold-right -> fold commit c6ce5d0bc291624a2aec010cb4061bbe89314bd8 Author: Jan Wedekind (Dr) Date: Tue Jan 17 22:47:22 2017 +0000 Refactor "replace-variables" commit 52e7506cef7259f9e90ae8b8d52e1d1120dc6af3 Author: Jan Wedekind (Dr) Date: Tue Jan 17 21:41:28 2017 +0000 Prototype for resolving pointer to pointer commit a40e535cbb8f078fd9ccead3374fd98e7d935c0a Author: Jan Wedekind (Dr) Date: Sun Jan 15 21:29:56 2017 +0000 Bug fix for variable blocking Only block predefined variable if associated register is blocked commit f4157df3e5a14d2c9aa96970c697671f85994ecb Author: Jan Wedekind (Dr) Date: Sun Jan 15 20:13:20 2017 +0000 Reenable test for method with seven arguments commit 8b16072fae51bf8274c8e2b14a52360299f771db Author: Jan Wedekind (Dr) Date: Sun Jan 15 19:56:40 2017 +0000 Reverted changes to PUSH and POP commit 7662e9a5d081e4b75577a5c5e9774c3d9b479e78 Author: Jan Wedekind (Dr) Date: Sat Jan 14 21:55:40 2017 +0000 Ignore unused variables when detecting blocked predefined variables Remaining bug: * failing test: calling native method with seven arguments * hanging test: divide number by complex number * failing test: minor value of RGB and byte sequence * failing test: convert integer RGB sequence to object RGB sequence * failing test: convert object RGB sequence to integer RGB sequence commit 9ca3b28dcd139d3d21f03db486e775dce4eea272 Author: Jan Wedekind (Dr) Date: Sat Jan 14 21:23:12 2017 +0000 Switching to new reqister allocator (integration exposes a bug though) Register allocator sometimes fails with: (ERROR: In procedure car: Wrong type (expecting pair): #f) commit e098bb2c69666fcbe2f372c88c428b9f8c0c401a Author: Jan Wedekind (Dr) Date: Sat Jan 14 17:10:10 2017 +0000 Copy result into RAX commit 875cb95c3c0e57e60558806f1f5321159c4f157b Author: Jan Wedekind (Dr) Date: Fri Jan 13 22:08:20 2017 +0000 Minor changes commit f0a036603959a0892af0b4f4370ac371d766a6ee Author: Jan Wedekind (Dr) Date: Fri Jan 13 22:04:53 2017 +0000 Preserve result variables commit ec0a52c25bd405e0ec1f0ecd00bf04ee8d374ae1 Author: Jan Wedekind (Dr) Date: Fri Jan 13 21:16:23 2017 +0000 Remove register-allocate from tests commit 4f9cfa64ba9c37af15d1f3440ab8d26af6891333 Author: Jan Wedekind (Dr) Date: Fri Jan 13 17:48:14 2017 +0000 Implemented sorting of parameter register copy operations The MOV operations for moving parameter values need to be executed in the right order to prevent values from getting overwritten. commit b7499a8080a044114e6674f60112f7f1f87bb548 Author: Jan Wedekind (Dr) Date: Fri Jan 13 17:42:58 2017 +0000 Add partial sorting to utility module commit 8ade5e36e5ab38417779ff21d875900e4ab694aa Author: Jan Wedekind (Dr) Date: Fri Jan 13 17:38:08 2017 +0000 Topological sorting of copy operations Order copy operations correctly to prevent source locations from getting overwritten. commit 66a524b69b2edc20bbedbf9d056088d4aa52ef5b Author: Jan Wedekind (Dr) Date: Fri Jan 13 17:37:38 2017 +0000 Have "parameter-locations" return an association list commit f4c34cfde4f74ee64fd55cea91557fcdec4c5736 Author: Jan Wedekind (Dr) Date: Fri Jan 13 13:02:46 2017 +0000 Implemented partial sorting commit e3eea117e16a9c36d5f95929e3c8bb3ab66d52af Author: Jan Wedekind (Dr) Date: Thu Jan 12 21:21:08 2017 +0000 Have "parameter-locations" return list instead of association list commit 13426b7fe66c4be878401104f7c20616e1098eb5 Author: Jan Wedekind (Dr) Date: Thu Jan 12 12:47:39 2017 +0000 Remove some unneeded methods commit 37a54f5a94d201ca7146751df50526227c4d7eda Author: Jan Wedekind (Dr) Date: Thu Jan 12 12:33:38 2017 +0000 Refactored initial moving of parameters commit 949d62b0b4f070e1f538af6a361bb73f18d596aa Author: Jan Wedekind (Dr) Date: Thu Jan 12 08:12:04 2017 +0000 Move new allocation code into aiscm/jit.scm commit 41dca2b29c104cdcf2a5d8ef8f381e5c448fb6bb Author: Jan Wedekind (Dr) Date: Wed Jan 11 22:10:56 2017 +0000 Refactor code for moving parameters commit 08938848ddefc9d9800d49c8bd060918640ac08b Author: Jan Wedekind (Dr) Date: Wed Jan 11 21:47:23 2017 +0000 Determine initial locations of all parameters commit d23f68fe9a48544f63faeb08d2b8778bf041bfa0 Author: Jan Wedekind (Dr) Date: Wed Jan 11 21:31:47 2017 +0000 Use long integer locations and late type casting commit 962f6b71664484bd9879d69178b7c90f1ee647f3 Author: Jan Wedekind (Dr) Date: Wed Jan 11 20:44:20 2017 +0000 Working on method to determine parameter locations commit 190bd26fa63f2bb3313cceb1a1a326b926d865a6 Author: Jan Wedekind (Dr) Date: Wed Jan 11 12:32:12 2017 +0000 Prototype code for moving parameters commit bc9df600226d39ff091f06a360e07f2df1e53569 Author: Jan Wedekind (Dr) Date: Tue Jan 10 23:05:11 2017 +0000 Discard register->variable predefinitions if the register is blocked commit 730a1fc6222f3112944a26e8a197eea12284204b Author: Jan Wedekind (Dr) Date: Tue Jan 10 22:49:01 2017 +0000 Copy predefined variables commit 60c4fc6ec524947fb8fd852d3b053ce44c7f43b7 Author: Jan Wedekind (Dr) Date: Tue Jan 10 12:29:03 2017 +0000 equal? '() -> null? commit eddd6b136425db0adf36a14a0fd0ed4919729967 Author: Jan Wedekind (Dr) Date: Tue Jan 10 12:14:37 2017 +0000 Method for determining blocked predefined variables commit f177d3f7310cfa796313741d1f9dd8f05e261a00 Author: Jan Wedekind (Dr) Date: Mon Jan 9 21:47:38 2017 +0000 Change order of parameters for "replace-variables" commit c9d700cbdd8cedb33736aede84f3d8ededb78434 Merge: cf2657ad 97d66e5b Author: Jan Wedekind (Dr) Date: Mon Jan 9 12:31:46 2017 +0000 Merge branch 'master' into fast-allocate-registers commit 97d66e5b7f94cf922667bd60f9402f0c76790d43 Author: Jan Wedekind (Dr) Date: Mon Jan 9 12:31:14 2017 +0000 Update copyright for 2017 commit cf2657ad4e8af040eecd107c0ab30302c5a351c1 Author: Jan Wedekind (Dr) Date: Mon Jan 9 12:28:03 2017 +0000 Update TODO list commit daac6770b3a5fa0cb8df32e4d33cf8c9cd49d655 Author: Jan Wedekind (Dr) Date: Mon Jan 9 08:11:10 2017 +0000 Backup and restore content of callee-saved registers using stack commit 0771e7e7a4e317f187f3fcd45f65a60ff2d6f95e Author: Jan Wedekind (Dr) Date: Sun Jan 8 22:23:26 2017 +0000 Integrate offset for callee-saved registers commit 3b141dc26fa0a288155bdfcf129ced368cca322b Author: Jan Wedekind (Dr) Date: Sat Jan 7 22:38:41 2017 +0000 Determine callee saved registers in use commit abc167396bc56e42322e2d89cdb1d1c9e6c3e3c4 Merge: b9eba936 fc3acf79 Author: Jan Wedekind (Dr) Date: Sat Jan 7 15:06:35 2017 +0000 Merge branch 'master' into fast-allocate-registers commit fc3acf79d29a96ebd50a61bdb00160e39a8fc34d Author: Jan Wedekind (Dr) Date: Sat Jan 7 15:05:49 2017 +0000 Update TODO commit b9eba9363f0698af482597b847cb67a5b844440f Author: Jan Wedekind (Dr) Date: Sat Jan 7 15:00:09 2017 +0000 Minor changes commit b66972a24a8e01d8008bcf148cf1cee7962c356c Author: Jan Wedekind (Dr) Date: Sat Jan 7 14:53:52 2017 +0000 Pass blocked register information into register allocator commit 30d68930fae143a51cd82140ff5fee43fcce2484 Author: Jan Wedekind (Dr) Date: Sat Jan 7 14:36:59 2017 +0000 Do not allocate temporary variable if first argument is a register commit 60cacad98b61e678d999f189eb7f1eeb50dc784e Author: Jan Wedekind (Dr) Date: Fri Jan 6 22:29:47 2017 +0000 Switch more tests to linear scan allocator commit 97afc7eea02747267c16494183a24a41fa65b588 Merge: 63415dc5 4ee9a585 Author: Jan Wedekind (Dr) Date: Fri Jan 6 20:55:17 2017 +0000 Merge branch 'master' into fast-allocate-registers commit 4ee9a5859cb0691f8689717b1e42b3d325c16efc Author: Jan Wedekind (Dr) Date: Fri Jan 6 20:54:35 2017 +0000 Update TODO commit a13ed1fbae365b29c784eef4848f0afa858bef09 Author: Jan Wedekind (Dr) Date: Fri Jan 6 20:52:47 2017 +0000 Use GPGKEY variable to set signing key commit 44e88df835dd6b2abf2cede6ebb28d5bec4091f1 Author: Jan Wedekind (Dr) Date: Fri Jan 6 20:52:37 2017 +0000 NEWS -> NEWS.md commit 91dff59c40b855065d92fae41584e2f315e8e840 Author: Jan Wedekind (Dr) Date: Fri Jan 6 20:44:29 2017 +0000 Changed format of NEWS commit 5165a4b63040225b671a3bfb03e131d11817c164 Author: Jan Wedekind (Dr) Date: Fri Jan 6 16:48:27 2017 +0000 Generate ChangeLog using Git commit e09effc91702c87ac3486fc63f61b9c1c5fdf842 Author: Jan Wedekind (Dr) Date: Fri Jan 6 16:42:32 2017 +0000 Add link to Travis CI commit 63415dc506c5a233fa57b89ea2bd8c2bf8954214 Author: Jan Wedekind (Dr) Date: Fri Jan 6 12:59:53 2017 +0000 Put updated register allocator into aiscm/jit.scm commit bd748661f853d841e195a1786e2f047962fec049 Author: Jan Wedekind (Dr) Date: Thu Jan 5 22:31:46 2017 +0000 Minor refactor commit 930d30638dd907d7e40324bdf3943f51f97b32c5 Merge: d1ca40a7 dd012103 Author: Jan Wedekind (Dr) Date: Thu Jan 5 22:28:05 2017 +0000 Merge branch 'master' into fast-allocate-registers commit d1ca40a7cd5076f5d68003ad0a31e63e35c7bd9c Author: Jan Wedekind (Dr) Date: Thu Jan 5 21:32:07 2017 +0000 Spill variable under consideration commit dd0121033f37fe9b3bbb0ae5db6ab9b1a5b02021 Author: Jan Wedekind (Dr) Date: Thu Jan 5 20:27:26 2017 +0000 Install CSS and icons as part of HTML documentation commit 3d82994b204201afa0216bac496d2198b8c6f765 Author: Jan Wedekind (Dr) Date: Thu Jan 5 12:54:41 2017 +0000 Do not spill variable twice commit c7574db2f6fb9533c58dcfa40f91a4d5d2128990 Merge: 47a05b00 e09afd6e Author: Jan Wedekind (Dr) Date: Wed Jan 4 12:56:46 2017 +0000 Merge branch 'master' into debian/sid commit 91780cd937beda4f587d27f7ff80eab784a6b43e Author: Jan Wedekind (Dr) Date: Wed Jan 4 12:53:59 2017 +0000 Ignore blocked registers when allocating commit af26f9a8eedb3db626841411d757ea9767fe0bc3 Author: Jan Wedekind (Dr) Date: Wed Jan 4 08:02:27 2017 +0000 Working on register blocking during register allocation commit f9f33af3a0ff93f7c3418106064a9e404cdfae77 Author: Jan Wedekind (Dr) Date: Tue Jan 3 22:35:55 2017 +0000 Expose "overlap-interval" commit 787e2d273a0bb9b374f78522671bb9deb855b5a8 Author: Jan Wedekind (Dr) Date: Tue Jan 3 12:46:37 2017 +0000 find-available -> find-available-register commit 28299eb708afdc44a0a8670bd09a09eb1f5ea246 Author: Jan Wedekind (Dr) Date: Tue Jan 3 12:45:48 2017 +0000 Remove multiple keys from an assocation list commit 798bd2dad6be161a9d4921dab4bfd3381a999072 Author: Jan Wedekind (Dr) Date: Sun Jan 1 23:11:30 2017 +0000 Add handling of parameters to linear scan register allocator commit 6c5c3824280e5fee2b8f831dbca6e1547155f82d Merge: 6570a031 e09afd6e Author: Jan Wedekind (Dr) Date: Sun Jan 1 22:17:30 2017 +0000 Merge branch 'master' into fast-allocate-registers commit e09afd6ed2dde0907d70bcdd21210bc8d596a75e Author: Jan Wedekind (Dr) Date: Sun Jan 1 21:06:15 2017 +0000 Improve documentation for override_dh_makeshlibs commit 6570a03134d604a3542cf01ce34a14148c2837e1 Author: Jan Wedekind (Dr) Date: Sat Dec 31 21:45:24 2016 +0000 Use stack space when spilling stack parameters commit 8504c87686ef6cfa2ea86141de8f42bd30b53b06 Author: Jan Wedekind (Dr) Date: Tue Dec 27 22:25:23 2016 +0000 Working on stack parameters commit f6fadeb18f3e5d9b6d0ca36223001979afccbecd Author: Jan Wedekind (Dr) Date: Mon Dec 26 22:50:21 2016 +0000 Load stack parameters commit 96a761eee676d198fd2c02528cc884586e13d466 Author: Jan Wedekind (Dr) Date: Sun Dec 25 23:34:39 2016 +0000 Spill a register parameter commit 5f8984807af0348987ff43c552529d4ccca364c7 Author: Jan Wedekind (Dr) Date: Sun Dec 25 23:11:06 2016 +0000 Predefine register parameter in linear scan allocator commit ae8c0cb061050bb03eee6a751a65e29e52bfa210 Author: Jan Wedekind (Dr) Date: Sat Dec 24 23:18:54 2016 +0000 Add stack parameter location information commit f2dd1faa9cc6ce13c81033ae2e3fe630f58a021b Merge: 4897caa2 cf936204 Author: Jan Wedekind (Dr) Date: Sat Dec 24 22:44:05 2016 +0000 Merge branch 'master' into fast-allocate-registers commit cf936204a59dfa99cda63d7772ddd61e1771bb7c Author: Jan Wedekind (Dr) Date: Sat Dec 24 22:43:48 2016 +0000 Rule for signing package commit 54e78985b0f2e1122f9a5ca44dd1278113bdd2e3 Author: Jan Wedekind (Dr) Date: Sat Dec 24 21:53:56 2016 +0000 Update ffmpeg test suite because of side effects commit 4897caa240609c44b45b970659ca423f8b5a04a3 Author: Jan Wedekind (Dr) Date: Sat Dec 24 20:52:07 2016 +0000 Add "add-stack-parameter-information" commit bd2d4786a9fc78ce295788ce1886b949f9705b43 Author: Jan Wedekind (Dr) Date: Sat Dec 24 20:47:50 2016 +0000 Add lintian override for hardening-no-fortify-function commit c395e84475668bae1008705b4febc9951316221e Author: Jan Wedekind (Dr) Date: Fri Dec 23 21:22:22 2016 +0000 Copyright headers commit ac48a1bbe04630dc6001e9f8b27f5478abcdf793 Author: Jan Wedekind (Dr) Date: Fri Dec 23 21:13:17 2016 +0000 Update TODO list commit ec10552378ea88907b7b1f2abd996da270f54a16 Merge: 911539cc 7c5add2f Author: Jan Wedekind (Dr) Date: Fri Dec 23 14:10:41 2016 +0000 Merge branch 'master' into fast-allocate-registers commit 7c5add2f49ff91fefe50568d91bdfaaf403b11bb Author: Jan Wedekind (Dr) Date: Fri Dec 23 14:10:28 2016 +0000 Update TODO list commit 911539cc9f95e2341361413d44878820a10f0205 Author: Jan Wedekind (Dr) Date: Fri Dec 23 13:36:45 2016 +0000 Take into account stack pointer offset when loading stack parameters commit 657a6b94e402294f21ae1bec84bafdff274e0c99 Author: Jan Wedekind (Dr) Date: Fri Dec 23 13:06:02 2016 +0000 Refactored code for register and stack parameters commit 3306544df8afb64e8a14e8c411121708a74adac0 Author: Jan Wedekind (Dr) Date: Fri Dec 23 12:50:44 2016 +0000 Update initial parameter locations commit 53198562f2392847b25aeb4567fc1d17b954faeb Merge: 342c1158 eabd4f50 Author: Jan Wedekind (Dr) Date: Thu Dec 22 22:54:42 2016 +0000 Merge branch 'master' into fast-allocate-registers commit eabd4f5051d437a4bb623b7b5e9f5b651f349b63 Author: Jan Wedekind (Dr) Date: Thu Dec 22 22:54:28 2016 +0000 Add copyright headers commit 342c1158f599cb62f07835dea711d031da38b68f Author: Jan Wedekind (Dr) Date: Thu Dec 22 22:38:01 2016 +0000 Initial stack parameter locations commit 61d2e54f6dcd25a1aa3b3208dad72b72ffc1e93d Author: Jan Wedekind (Dr) Date: Thu Dec 22 12:45:43 2016 +0000 Determine initial register parameter locations commit 8a5a5ca66c63d7ec7d5d623e381320e7b4e6fc1c Author: Jan Wedekind (Dr) Date: Wed Dec 21 22:15:56 2016 +0000 Writing spilled parameters commit a71f6001332d25749e8292ea76b90725ec45c8bd Merge: bc9d7643 2c572472 Author: Jan Wedekind (Dr) Date: Wed Dec 21 07:59:29 2016 +0000 Merge branch 'master' into fast-allocate-registers commit 2c572472800df01303a2b7bfca927c372759aa68 Author: Jan Wedekind (Dr) Date: Mon Dec 19 21:33:04 2016 +0000 Update debhelper version dependency commit fd6a8f5a1a14e1239932ca612b928347e2c2025c Author: Jan Wedekind (Dr) Date: Mon Dec 19 19:09:56 2016 +0000 Take test audio sample immediately after reading audio frame commit d8b196ae89f892971921471dd8246fd720cdee6f Author: Jan Wedekind (Dr) Date: Mon Dec 19 12:37:22 2016 +0000 Additional "-fortify" does not seem to have any effect commit f8e9a2283075b3d84923b6bfd70d983ce3182bd5 Author: Jan Wedekind (Dr) Date: Mon Dec 19 12:33:47 2016 +0000 Added AUTHORS, NEWS, and README file commit 81df3d9671f0ea7739bf5e7f3798494f8dea5a6a Author: Jan Wedekind (Dr) Date: Mon Dec 19 12:29:29 2016 +0000 Change Debian compatibility level commit a7db988765c97f09ff0ddb84779ba57b871ea1a5 Author: Jan Wedekind (Dr) Date: Mon Dec 19 08:04:56 2016 +0000 Added "-fortify" option commit 02233999718333dcb310d01f18cee3a5eb3062c1 Author: Jan Wedekind (Dr) Date: Sun Dec 18 22:59:58 2016 +0000 Empty line in doc-base file commit 68166a88f97e61026cca6c6d0ac453527cee0da1 Author: Jan Wedekind (Dr) Date: Sun Dec 18 22:40:55 2016 +0000 Add signing key commit c1149d0b4d263aff893720ce8904d4ede399d855 Author: Jan Wedekind (Dr) Date: Sun Dec 18 22:32:04 2016 +0000 Fix Debian watch file commit 41705c389c3a619118acaa65e2f5a84d484d2b22 Author: Jan Wedekind (Dr) Date: Sun Dec 18 22:09:00 2016 +0000 Let uscan check for PGP signature commit 268d80899f9600d8bd9e4dce9c42595dbc98ff27 Author: Jan Wedekind (Dr) Date: Sun Dec 18 22:01:09 2016 +0000 Add doc-base file commit 8bc5a7a762592fbd3a1c3e0bdfe1899a5ac2a481 Author: Jan Wedekind (Dr) Date: Sat Dec 17 21:45:59 2016 +0000 80-column format for description commit 4a85706c5519bdcd6802067897a9073e3234b354 Author: Jan Wedekind (Dr) Date: Sat Dec 17 21:27:12 2016 +0000 Check xz file instead of gz file commit 5c1abc4eb81ea1ecf1681427871e0ef4ae1e7fff Author: Jan Wedekind (Dr) Date: Sat Dec 17 21:13:03 2016 +0000 Longer description commit 7386dea03722df9aa462b8611e3235ecc0d3b120 Author: Jan Wedekind (Dr) Date: Sat Dec 17 20:48:10 2016 +0000 Remove the erroneous autotest instruction commit 0571a4371f9b4e99030d70345b9c76a64a4684bc Author: Jan Wedekind (Dr) Date: Sat Dec 17 20:43:18 2016 +0000 Add debian/watch file commit dabf369650c637a4ab1231b1caaf40579cf53d3d Author: Jan Wedekind (Dr) Date: Sat Dec 17 20:12:46 2016 +0000 Try different way to get library hardening commit 0ac015522723895c990993fff9156588708463a8 Author: Jan Wedekind (Dr) Date: Sat Dec 17 19:43:53 2016 +0000 Remove shields.io references commit 8b27a1c98df0a38f851f1b6ddb1ebd734bf48861 Author: Jan Wedekind (Dr) Date: Sat Dec 17 19:09:47 2016 +0000 Remove video and audio data from documentation commit b54fc312c3c0da2fe1084b39122417d1f132e04d Author: Jan Wedekind (Dr) Date: Sat Dec 17 19:09:00 2016 +0000 Override invocation of ldconfig commit 5383a13816b6a855c50b8c1375e983d6dd3afaf1 Author: Jan Wedekind (Dr) Date: Sat Dec 17 19:00:21 2016 +0000 Disable test for end of audio commit 893186df2e975f39afa1ef2e0281a87267736307 Author: Jan Wedekind (Dr) Date: Sat Dec 17 18:59:51 2016 +0000 Use Debian build flags commit 414d9a60082f1d7abe5140182b8db5a21120b608 Author: Jan Wedekind (Dr) Date: Sat Dec 17 15:02:02 2016 +0000 Remove links to external pictures commit 47a05b0005e972183c59084de439f5571f9174e9 Merge: efa2d519 16b3a6ff Author: Jan Wedekind (Dr) Date: Fri Dec 16 19:40:23 2016 +0000 Merge branch 'master' into debian/sid commit 16b3a6ff5c9d47bccc298b9615bb9313ceb5d7cf Author: Jan Wedekind (Dr) Date: Fri Dec 16 19:40:04 2016 +0000 Revert to 0.9.2 commit 2e3e4dae4ba56baa441e3a0f479212520350fab7 Author: Jan Wedekind (Dr) Date: Thu Dec 15 21:58:56 2016 +0000 Updated to version 0.9.3 commit 3f8df2021790550528beed2ac6674aa3832ae82c Author: Jan Wedekind (Dr) Date: Thu Dec 15 20:38:39 2016 +0000 Extract changes file from Docker container commit f4bd8affbc59d34b8b487cbbd6accbb72e0ff920 Author: Jan Wedekind (Dr) Date: Thu Dec 15 20:10:42 2016 +0000 Extract pixel earlier in test commit a20993c0ba7b4593b55944d5d90b7728a4d93469 Author: Jan Wedekind (Dr) Date: Thu Dec 15 19:55:02 2016 +0000 Fix pixel value in test commit e4a595631fc33e81577674cd6798f712afb4539a Author: Jan Wedekind (Dr) Date: Thu Dec 15 19:49:25 2016 +0000 Change pixel value in test commit efa2d519ea0ad768d9ad3fe7f0bfb370295cfdd3 Merge: 7274a4e9 9f47a260 Author: Jan Wedekind (Dr) Date: Thu Dec 15 18:59:49 2016 +0000 Merge branch 'master' into debian/sid commit bc9d7643522c9543807df75dde1ea8a14a072bbb Merge: 6ee662dc 9f47a260 Author: Jan Wedekind (Dr) Date: Thu Dec 15 18:59:39 2016 +0000 Merge branch 'master' into fast-allocate-registers commit 9f47a260e9ab5bdd6af811ea7d2acb41396153f9 Author: Jan Wedekind (Dr) Date: Thu Dec 15 18:57:29 2016 +0000 Install unstable version of Debian Sid commit 6ee662dcfb11e59a598f65333718d770a939787e Merge: a7f81eb2 1fd77403 Author: Jan Wedekind (Dr) Date: Thu Dec 15 12:30:18 2016 +0000 Merge branch 'master' into fast-allocate-registers commit a7f81eb2425103bf8651317954378667af13c6ee Author: Jan Wedekind (Dr) Date: Thu Dec 15 12:16:42 2016 +0000 Move updated register allocator into aiscm/jit.scm commit 1fd7740359895c9fffa23379c3dcc7b85010e881 Author: Jan Wedekind (Dr) Date: Thu Dec 15 08:07:57 2016 +0000 Link to sbuild instead of pbuild commit 3786c37975a17306afa758122dd7b922c576209f Author: Jan Wedekind (Dr) Date: Wed Dec 14 21:11:51 2016 +0000 Link to sbuilder commit 93dcec18ba9bf21b7956b792f2da99e17d6831bb Author: Jan Wedekind (Dr) Date: Wed Dec 14 14:10:42 2016 +0000 Allocate temporary variables commit 7274a4e98f6a2dbef67ae31137fd7861a5237393 Merge: 7173f59b 40d7926b Author: Jan Wedekind (Dr) Date: Wed Dec 14 08:02:27 2016 +0000 Merge branch 'master' into debian/sid commit 40d7926b9044e67026019e76807297cc2aa30fff Author: Jan Wedekind (Dr) Date: Wed Dec 14 08:01:49 2016 +0000 Update TODO list commit ee528f70c605f8b11a5eea95ee254364bd0211e4 Merge: 6e131a30 c0ea71ec Author: Jan Wedekind (Dr) Date: Wed Dec 14 07:59:21 2016 +0000 Merge branch 'master' into fast-allocate-registers commit c0ea71ec9fbe1f86524c8a711ed93926a6885bdb Author: Jan Wedekind (Dr) Date: Tue Dec 13 21:02:02 2016 +0000 Fixes for inclusion into Debian * Update standards version * Use automatic dependencies for shared libraries * Use initial debian/changelog referencing ITP Also see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837167 commit 6e131a3003a981502eaae277be977d2b4bb825c8 Author: Jan Wedekind (Dr) Date: Tue Dec 13 12:52:08 2016 +0000 Allocate temporary registers commit 3a489760a600e68da34ea55d12d79b5906e80e30 Author: Jan Wedekind (Dr) Date: Mon Dec 12 13:21:32 2016 +0000 Lexical sort by beginning of live interval and length of interval commit c38af6004f22ffa391cf0805390dcaf8c18ae5b2 Author: Jan Wedekind (Dr) Date: Mon Dec 12 08:03:02 2016 +0000 Filter out locations without temporary variables Filter out locations without temporary variables when generating length one intervals. commit 416c8d13a4d5d2ced1a9ee569faa098476c8df60 Author: Jan Wedekind (Dr) Date: Mon Dec 12 07:49:27 2016 +0000 Generate intervals for temporary variables commit 315be28f19b9ff014e92c28ceee4fa490744b0ef Author: Jan Wedekind (Dr) Date: Sun Dec 11 22:15:05 2016 +0000 Method for generating temporary variables commit 43f5004be365b6301617946edc9a4826fa14671c Author: Jan Wedekind (Dr) Date: Sat Dec 10 21:16:27 2016 +0000 Prototype using RAX as temporary register commit ff48167aafc491d0626486b299696b12b5d370c6 Author: Jan Wedekind (Dr) Date: Sat Dec 10 20:48:44 2016 +0000 Add spill code generator commit 0320089bafa06a367ba1baeac27188299a6f7b7e Author: Jan Wedekind (Dr) Date: Fri Dec 9 17:48:02 2016 +0000 Add functions for spilling variables commit 6b26a8f2729d43f8304db8776a102ccb8ed5b431 Author: Jan Wedekind (Dr) Date: Fri Dec 9 16:53:19 2016 +0000 result -> allocation commit 75f2feb6b41df13702ee8f83789d8bbed4231c68 Author: Jan Wedekind (Dr) Date: Fri Dec 9 16:47:41 2016 +0000 Use temporary register for primary argument commit 3120d31a1ec510fd71e2331a3d78b3ac0a952bd0 Author: Jan Wedekind (Dr) Date: Fri Dec 9 08:32:48 2016 +0000 Read spilled argument into temporary variable commit bd4824634a2f83ba2b24dedaf4415c48faaafb4d Author: Jan Wedekind (Dr) Date: Thu Dec 8 22:09:35 2016 +0000 Working on prototype for generating spill code commit ca5a566c300636b5a56257da5907dc51fd739545 Author: Jan Wedekind (Dr) Date: Thu Dec 8 20:59:04 2016 +0000 Prototype code for allocating spill locations commit f9e5a0ab8971afd14937bf4f247dc8888ba9d257 Author: Jan Wedekind (Dr) Date: Thu Dec 8 13:01:33 2016 +0000 Filter for allocated and unallocated variables commit 5fec028d367b6e9a30b9d33c7d4c45a514c306ff Author: Jan Wedekind (Dr) Date: Thu Dec 8 12:47:54 2016 +0000 Assign spill locations to variables commit 6f4012f9ca06ae4cb682b7327c83303f44c2b868 Author: Jan Wedekind (Dr) Date: Wed Dec 7 21:02:13 2016 +0000 Linear scan allocation with predefined variable-register mappings commit 225df216204fec59dbee1bf279916f1190bcb07e Author: Jan Wedekind (Dr) Date: Tue Dec 6 22:21:25 2016 +0000 Prototyping predefined registers commit aa6651ac1c8b59396c32f4e284866bb1301f2cfd Author: Jan Wedekind (Dr) Date: Tue Dec 6 20:57:51 2016 +0000 Make "linear-allocate" a local method commit a1bf738692e7bed67824539a2763f120981617a4 Merge: 52bf2719 76f0862e Author: Jan Wedekind (Dr) Date: Tue Dec 6 12:38:08 2016 +0000 Merge branch 'master' into fast-allocate-registers commit 52bf2719a596f29de3d63a18f1d45d487df286f3 Author: Jan Wedekind (Dr) Date: Tue Dec 6 12:37:57 2016 +0000 Prepare to work on predefined registers commit 76f0862e649e47634ffe3d258630f2dca4b2efab Author: Jan Wedekind (Dr) Date: Tue Dec 6 12:30:31 2016 +0000 pa_context_disconnect crashes on Ubuntu 14.04 Removing explicit calls to "destroy" for Pulse audio output from the integration tests. commit 220548a744e95f7ffeb1c039ce32a7268d3903a4 Author: Jan Wedekind (Dr) Date: Mon Dec 5 22:02:07 2016 +0000 Using linear scan register allocator in some tests commit f531234df1e27fe432cf1a6e408c3037da4fa7af Author: Jan Wedekind (Dr) Date: Mon Dec 5 21:08:17 2016 +0000 Add basic linear scan allocator to aiscm/jit.scm commit 2fecac056324cbbcb3097896caaea96d99146eb3 Author: Jan Wedekind (Dr) Date: Mon Dec 5 19:38:17 2016 +0000 Added some documentation commit dd23ea14905e09af8c2782230735beae1b83ccab Author: Jan Wedekind (Dr) Date: Mon Dec 5 12:57:39 2016 +0000 Sort live intervals by beginning of interval commit a1d63238baaa2e8a38628fbc53f239004dd43ed4 Author: Jan Wedekind (Dr) Date: Sun Dec 4 21:27:47 2016 +0000 refactor linear-scan register allocator commit 3094eae9443b239b64515feb923af5c1ce3d997e Author: Jan Wedekind (Dr) Date: Sat Dec 3 22:22:42 2016 +0000 Prototype spilling of variable commit aa1bfb32698d6646faf775f456dd885f141b5d03 Author: Jan Wedekind (Dr) Date: Sat Dec 3 22:15:12 2016 +0000 Keep track of used registers commit 01372a0b7e32f705667d2e065c99dd314729216c Author: Jan Wedekind (Dr) Date: Sat Dec 3 22:12:26 2016 +0000 Keep track of current live variables commit 37689ee044a6b5fe91bb5017317a3a8c9a71fedd Author: Jan Wedekind (Dr) Date: Fri Dec 2 22:55:27 2016 +0000 Determine last user of a register commit 1334859a71cda1cd08622a2be884af98b45dd9f3 Author: Jan Wedekind (Dr) Date: Thu Dec 1 21:40:32 2016 +0000 Selection of spill candidate commit 6912f3f3bb17e57d9ee8333c04b29a9a1191795f Author: Jan Wedekind (Dr) Date: Thu Dec 1 12:34:53 2016 +0000 intervals -> live-intervals commit 02d7cf05cefb455519b56b5ebb6bb068982d8145 Author: Jan Wedekind (Dr) Date: Thu Dec 1 12:28:00 2016 +0000 Refactor linear scan allocator commit cc827e391c603cef3c9d07f1ef54d0591e7bd666 Author: Jan Wedekind (Dr) Date: Thu Dec 1 08:04:15 2016 +0000 Extract part of "linear-scan" and name it "linear-allocate" commit fd305db8358bc59b59184c0aba095ef1c040ca7e Author: Jan Wedekind (Dr) Date: Wed Nov 30 22:13:44 2016 +0000 Prototype code for tracking available registers commit 6eda36cde14da3f1475667364a449da82deb3969 Author: Jan Wedekind (Dr) Date: Tue Nov 29 22:03:28 2016 +0000 Use functional assq-set to keep track of register use commit 2714707666307ee66a1786d211b055a7ba141788 Author: Jan Wedekind (Dr) Date: Tue Nov 29 21:56:43 2016 +0000 Keep track of register usage commit b0a8a58362a4d2038b59d552e5debb72fc2d28a3 Author: Jan Wedekind (Dr) Date: Tue Nov 29 13:21:52 2016 +0000 Find available register commit 5841ee26846f807b24f648ae59c6244251c0be3a Author: Jan Wedekind (Dr) Date: Mon Nov 28 22:10:34 2016 +0000 Prototype register allocation with variable conflict commit 3e8e24b388f89d3276202f3f542168363b9476fb Author: Jan Wedekind (Dr) Date: Mon Nov 28 12:59:53 2016 +0000 Allocate single register commit 661b1884a26ab74c04f05d30a430b6503cbb7b8b Author: Jan Wedekind (Dr) Date: Sun Nov 27 22:37:40 2016 +0000 Swap parameters of next-indices commit 353f3a5664248d94ecfe427b7402c2d55ec82fb2 Author: Jan Wedekind (Dr) Date: Sun Nov 27 21:33:30 2016 +0000 Revising register allocator commit 7173f59be945403e1b9635938dc5de5404fe2e62 Merge: 84b8b1c8 10f6f6cb Author: Jan Wedekind (Dr) Date: Fri Nov 25 21:59:19 2016 +0000 Merge branch 'master' into debian/sid commit 10f6f6cb5fbd8415c77f02a240465320bbee7e6c Author: Jan Wedekind (Dr) Date: Fri Nov 25 21:57:59 2016 +0000 Version 0.9.1 commit d7db162fc058ef8e051149755520dabf3eee640e Author: Jan Wedekind (Dr) Date: Fri Nov 25 20:31:48 2016 +0000 Simplify delegate-op commit 9fe8452f0d9b2479f3cb8593bce9624a9d5029a9 Author: Jan Wedekind (Dr) Date: Fri Nov 25 18:04:10 2016 +0000 type-conversion -> to-type commit 0a51055705145b389f55749a12132cbbc0058d42 Author: Jan Wedekind (Dr) Date: Fri Nov 25 17:49:03 2016 +0000 "to-type" for type classes renamed to "convert-type" commit 28f94d6174152ec94bed1e5abd658f1f5706b8d9 Author: Jan Wedekind (Dr) Date: Fri Nov 25 14:22:17 2016 +0000 Minor changes commit 21f19e769dcb86413568e3e0da789be46423a3e0 Author: Jan Wedekind (Dr) Date: Fri Nov 25 08:06:48 2016 +0000 Enable test for switching tensor dimensions commit 7cd15566e17f8a5cbe104fd0d7754512856d7241 Author: Jan Wedekind (Dr) Date: Thu Nov 24 21:36:49 2016 +0000 Compile code for allocating multi-dimensional arrays commit 0b1676519d50c804067ff2c3d18e398893ebde7a Author: Jan Wedekind (Dr) Date: Thu Nov 24 08:09:37 2016 +0000 Fix prototype commit c5ab413b519bc8aa20d969b1c473a540758f9d33 Author: Jan Wedekind (Dr) Date: Wed Nov 23 20:44:42 2016 +0000 native-constant -> make-constant-function commit 2605d6ceb5ee28091aa3994445770391e77c0c6f Author: Jan Wedekind (Dr) Date: Wed Nov 23 20:18:07 2016 +0000 Simplify scm-gc-malloc* commit 3f2e64de98c69d579b7f39909cdcb7f92e33c69c Author: Jan Wedekind (Dr) Date: Wed Nov 23 19:23:45 2016 +0000 simplify scm-eol and scm-cons commit 6a614d7c2ecfa115618a1746d95f389e28369acd Author: Jan Wedekind (Dr) Date: Wed Nov 23 13:54:55 2016 +0000 native-call -> make-native-function commit 73116aca7dd446cc241c5cb5f603f400ec7ea0df Author: Jan Wedekind (Dr) Date: Wed Nov 23 13:51:39 2016 +0000 native-method -> make-native-method commit 9308be50da2873aaf5b0081cf5d440772aaa300a Author: Jan Wedekind (Dr) Date: Wed Nov 23 13:35:52 2016 +0000 Removing some prototype code commit 7db296a513830b3fbe523931511ad79d1c425c4f Author: Jan Wedekind (Dr) Date: Wed Nov 23 08:40:17 2016 +0000 Setting a parameter to a native integer value commit c0a74e311071a00e8f133311739fcfe0841acc16 Author: Jan Wedekind (Dr) Date: Tue Nov 22 14:14:38 2016 +0000 Shape of binary expressions commit a300e368cc9ba5318077668b80073ee8b2672d40 Author: Jan Wedekind (Dr) Date: Tue Nov 22 14:09:57 2016 +0000 shape of unary function expression commit 67c9875caec748dde607589ea62e74591649066b Author: Jan Wedekind (Dr) Date: Tue Nov 22 10:08:01 2016 +0000 shape of expression commit e92a411ea47bb4befe884920d1252c7e3658be50 Author: Jan Wedekind (Dr) Date: Mon Nov 21 21:18:40 2016 +0000 Determine size of sequence in compiled code commit 8e17a9414165f78e07f79270bd1ad609856f7b52 Author: Jan Wedekind (Dr) Date: Sun Nov 20 21:02:02 2016 +0000 Get strides of parameter commit 487284e526f336af00d34a5dd2fcd7241d263627 Author: Jan Wedekind (Dr) Date: Sat Nov 19 22:07:54 2016 +0000 default strides in compiled code commit b49a57263ea6a08b53e18d865e4581b3d4743c68 Author: Jan Wedekind (Dr) Date: Sat Nov 19 21:54:11 2016 +0000 WIP commit a45ed10e09337b89be9af09c76d224e2a3ba6529 Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:53:24 2016 +0000 minor changes commit 84b8b1c83889cc3a906c31b1883f24a6d917a348 Merge: 3f2cec76 be1b2561 Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:50:56 2016 +0000 Merge branch 'master' into debian/sid commit be1b25616269478a2f9c57e9734d44d44484286d Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:50:42 2016 +0000 Bugfix for Makefile.docker commit 3f2cec7646cb62b3098a45c0aa5d007c0033096a Merge: e1bbc360 fa6b05e9 Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:49:52 2016 +0000 Merge branch 'master' into debian/sid commit fa6b05e987f1f2ff3a046f1e3160ca04be798722 Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:49:38 2016 +0000 Add folder to dependencies commit e1bbc36055cd96219007a1dd04e5da85284ba3b0 Merge: d50f1665 5168eeb5 Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:48:46 2016 +0000 Merge branch 'master' into debian/sid commit 5168eeb573c8ff57230cb9a74a6afb4f881bbae0 Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:48:35 2016 +0000 Add source package commit d50f166543fb2198c734fb184674cef460924049 Merge: 94ef49a5 8acc5df6 Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:15:54 2016 +0000 Merge branch 'master' into debian/sid commit 8acc5df6875ec8f138aa55ddca22d91c02cb7c5e Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:13:12 2016 +0000 Use "cat" to extract files from Docker image commit 94ef49a5a6f72a2572671ec5dc671a4bfffaac11 Merge: 02d2ef4f e2164475 Author: Jan Wedekind (Dr) Date: Fri Nov 18 21:12:23 2016 +0000 Merge branch 'master' into debian/sid commit e2164475e146d8fe7781efa991f6b2fbe2c0d139 Author: Jan Wedekind (Dr) Date: Fri Nov 18 12:51:28 2016 +0000 prototype compiled code for determining size of return value commit cb3a53879c85f46d2c263c875c05adfbddc64d3f Author: Jan Wedekind (Dr) Date: Fri Nov 18 08:09:56 2016 +0000 'stride' of parameter should be a parameter commit 6113eadb34b7e87dbed56372851117a7b003bc3d Author: Jan Wedekind (Dr) Date: Thu Nov 17 21:27:16 2016 +0000 'shape' of parameter should be a parameter commit 2bb9b909b9b7d39adbc4a557e94d2df7881d619b Author: Jan Wedekind (Dr) Date: Thu Nov 17 18:49:19 2016 +0000 Prototype method for building sequence commit b5be24763f4bd6e0586c6cf0ccc8700f5fea830d Author: Jan Wedekind (Dr) Date: Wed Nov 16 22:16:32 2016 +0000 Experimenting with construction of sequences commit 38acefc545c33c27b4cacfd540edf41b78be1f77 Author: Jan Wedekind (Dr) Date: Wed Nov 16 13:16:57 2016 +0000 Build sequence content commit 8673ec804194ebf14c2a6caf619b2981e711bc0e Author: Jan Wedekind (Dr) Date: Wed Nov 16 12:58:04 2016 +0000 "build-list" to generate code for creating a list commit b65f386166f025cab1acee35c4e29ef6040169a4 Author: Jan Wedekind (Dr) Date: Tue Nov 15 21:30:22 2016 +0000 Prototype code for initialising array in compiled code commit b2a6c1e4c266f1eb702e47b1ce5450294bdadb45 Author: Jan Wedekind (Dr) Date: Mon Nov 14 21:18:41 2016 +0000 Refactoring commit e6a4f8c0929453142540c6163e411f6f46c75c1b Author: Jan Wedekind (Dr) Date: Mon Nov 14 08:39:32 2016 +0000 Pass intermediate result explicitely when generating return code commit 5dc0f829f4bdd640392fecd35f094d075e78418d Author: Jan Wedekind (Dr) Date: Sun Nov 13 20:56:00 2016 +0000 Pack array result and return as list commit 8793dd409c0912420c8ce97caf7fa2ed7117d8f1 Author: Jan Wedekind (Dr) Date: Sun Nov 13 20:12:24 2016 +0000 content of sequence parameter commit 3e2150f226b4690ff95e060726349ace2ee7bd40 Author: Jan Wedekind (Dr) Date: Sat Nov 12 22:06:35 2016 +0000 Working on content of sequence parameter commit f625c7a89251b5ee339c3585007b77bc14665c96 Author: Jan Wedekind (Dr) Date: Fri Nov 11 22:48:19 2016 +0000 Build 2D array from components commit 8277e0ca17c5ee7625a160b795532faab3139db3 Author: Jan Wedekind (Dr) Date: Fri Nov 11 22:18:08 2016 +0000 Reconstruct sequence from components commit 0f06c8315c27b417482c540425fbaa26bcf18ca4 Author: Jan Wedekind (Dr) Date: Thu Nov 10 13:18:53 2016 +0000 Convert pointers to integer in order to prevent dereferencing commit 10e3ea9b907897f96b99a10be774be93da9ab218 Author: Jan Wedekind (Dr) Date: Wed Nov 9 22:30:04 2016 +0000 Make "content" for sequence return wrapped variables commit e72cb0b9c91c26a718c83a6ad5ad1f5905225b60 Author: Jan Wedekind (Dr) Date: Wed Nov 9 19:36:11 2016 +0000 content of sequence commit 0b8946ac9050dec3f982156020ddfd009c95fc50 Author: Jan Wedekind (Dr) Date: Wed Nov 9 08:04:45 2016 +0000 Use unbuild instead of content commit 626922c7f3bc284ca2348025e5c55de59ed89d60 Author: Jan Wedekind (Dr) Date: Tue Nov 8 21:40:25 2016 +0000 Minor changes commit 75e9e311a674f0c8cf2e115097751267cc162134 Author: Jan Wedekind (Dr) Date: Tue Nov 8 13:14:12 2016 +0000 Unpacking of pointers commit 23f8b79197d16bfa298e6ed2111aa5b859f7c0e7 Author: Jan Wedekind (Dr) Date: Tue Nov 8 08:37:09 2016 +0000 add playground.sh and playground.scm commit 997f96ed8c9a690ba6386faee96a7b1f7f4159fd Author: Jan Wedekind (Dr) Date: Mon Nov 7 22:46:46 2016 +0000 Added memory allocation in compiled code commit 5ca3776073a14780a724d9ee8848fbe76a65c1cb Author: Jan Wedekind (Dr) Date: Mon Nov 7 13:12:15 2016 +0000 Use "insert-intermediate" when packaging return value commit 613e2204f54c64aa65b93daaf2518186df9c5070 Author: Jan Wedekind (Dr) Date: Mon Nov 7 13:07:19 2016 +0000 Renamed some variables commit 0683373eae8a06038e4f5215c3c0ae20cebfc372 Author: Jan Wedekind (Dr) Date: Sun Nov 6 21:34:02 2016 +0000 packaging return content needs intermediate result commit ea4bb0fd531e98073754c361aecce814267f2870 Author: Jan Wedekind (Dr) Date: Sun Nov 6 20:59:34 2016 +0000 Minor changes commit 2264d82f9093fc46812c6c5903bca22064642838 Author: Jan Wedekind (Dr) Date: Sat Nov 5 22:43:25 2016 +0000 Minor changes commit db6fd3aed987a4f79a8db2aa9b7e0e7fc34e91cc Author: Jan Wedekind (Dr) Date: Fri Nov 4 22:48:35 2016 +0000 Compile methods returning lists to unpack commit 1d4b3bb12dee95616d4eea7d1d936b1c6e93330a Author: Jan Wedekind (Dr) Date: Fri Nov 4 21:48:56 2016 +0000 Add method for implementing return code commit 6904f3d72bc39c7ebc81fcdca9547cf067d2c4fe Author: Jan Wedekind (Dr) Date: Fri Nov 4 20:45:09 2016 +0000 Reconstruct scalar values from list commit d043c89f7915c77b4dc47bb5cac951948a7d3ea5 Author: Jan Wedekind (Dr) Date: Fri Nov 4 17:33:32 2016 +0000 Conversion from Scheme object to address and back commit edd6da4091a63020461db393fccc0b9cc942f736 Author: Jan Wedekind (Dr) Date: Fri Nov 4 13:10:25 2016 +0000 Method for packaging content of return value commit 1cc1eb10baceeea80e08b236b226d32314543753 Author: Jan Wedekind (Dr) Date: Fri Nov 4 08:47:39 2016 +0000 Renamed variable, added some docstrings commit 82b159e3367d497fdc5ae1aa6f586b62576838cf Author: Jan Wedekind (Dr) Date: Thu Nov 3 22:23:27 2016 +0000 Have "assemble" return a list commit 7a3cdc51bb7a55026c512963875ecd02a5e16810 Author: Jan Wedekind (Dr) Date: Thu Nov 3 17:11:18 2016 +0000 Delay last parameter of "assemble" commit ab1e237d46edd67295eb4c7edace5aad13321991 Author: Jan Wedekind (Dr) Date: Wed Nov 2 22:14:45 2016 +0000 Minor changes commit f5e05e7650a0c5eaa3e36e76859682e977ecd53c Author: Jan Wedekind (Dr) Date: Tue Nov 1 21:57:51 2016 +0000 Convert from long integer to object commit 9dc114eb1898a643d5de70c32ccbf833a0c10d2d Merge: 0bcd73e5 cd3503fe Author: Jan Wedekind (Dr) Date: Tue Nov 1 17:12:25 2016 +0000 Merge branch 'master' of github.com:wedesoft/aiscm commit 0bcd73e5cc7258ef51eaaf7129d29ef8fb4f28a6 Author: Jan Wedekind (Dr) Date: Tue Nov 1 17:11:47 2016 +0000 Test putting result into a list commit cd3503fe9a63746dcb6954a539009bbc389c438c Author: Jan Wedekind Date: Tue Nov 1 14:38:29 2016 +0000 Link to Tensorflow commit 54317a6d3a1464b737e074ee059500c4c05f0dfb Author: Jan Wedekind (Dr) Date: Tue Nov 1 13:24:47 2016 +0000 Remove type conversion hack for composite values commit fd77496e58e03b6f49fdf9022ad082bd7bfc6fc3 Author: Jan Wedekind (Dr) Date: Tue Nov 1 13:13:36 2016 +0000 insert intermediate value commit 23d8d736926507375735fcc3d9465d7229bb06a6 Author: Jan Wedekind (Dr) Date: Tue Nov 1 13:07:26 2016 +0000 Bugfix commit 4dcd0b1958fd513261a1d18932040d34ced7366d Author: Jan Wedekind Date: Tue Nov 1 12:37:22 2016 +0000 Add "alt" attributes commit 6e7ea4185d8b3198cac7e704914357bb8a49d81a Author: Jan Wedekind (Dr) Date: Mon Oct 31 22:15:35 2016 +0000 Test constant functions commit f14a45f4967d31ce3e7ebdedea855e537bd5b3a7 Author: Jan Wedekind (Dr) Date: Mon Oct 31 13:17:45 2016 +0000 Add native constants commit 4ef076ca937531b14636e731b9a22f3a91570c36 Author: Jan Wedekind (Dr) Date: Sun Oct 30 22:10:00 2016 +0000 Working on nullary functions commit c56f5bd43f499486db52a2b5e899bd1be196af4e Author: Jan Wedekind (Dr) Date: Sun Oct 30 20:52:14 2016 +0000 access scm-eol commit 3c26ce860329065f44601aa588516002b7ec0d7f Author: Jan Wedekind (Dr) Date: Fri Oct 28 22:13:26 2016 +0100 Added tensor macro commit a088aa4c7cd5902ed9dffa80ba5219baa7ddc1b3 Author: Jan Wedekind (Dr) Date: Fri Oct 28 21:45:11 2016 +0100 Reorganising tensor tests commit 95afca899ab3d7dbb5b6bdd38e186101b2d1f672 Author: Jan Wedekind (Dr) Date: Fri Oct 28 17:09:39 2016 +0100 Refactor tensor code, rearrange tests commit 48a192c7d46f0c2b01a9b5f7ba6e019c8d66c6fa Author: Jan Wedekind (Dr) Date: Thu Oct 27 22:38:05 2016 +0100 Swap dimensions, strides, iterators, and steps, when transposing commit 00c64ff0f10482e06e61da5ae467993431c514e6 Author: Jan Wedekind (Dr) Date: Thu Oct 27 22:15:22 2016 +0100 Bugfix for projection of tensors commit b8cbaed6ea490e1657c4d6bcf84f5eca2b5d0cac Author: Jan Wedekind (Dr) Date: Thu Oct 27 08:08:04 2016 +0100 Update description commit e3664a806f3a8794e2bad4254210d819af1afda8 Author: Jan Wedekind (Dr) Date: Wed Oct 26 23:24:33 2016 +0100 Tensor expressions (work in progress) commit 99fbca39a9eb164e8f5dd2afd414c80c38589e2d Author: Jan Wedekind (Dr) Date: Wed Oct 26 12:21:15 2016 +0100 tensor -> indexer commit 02d2ef4f8253f40bebf68553a8b11a7ecf1cbdf8 Merge: 78136c92 8cfc4538 Author: Jan Wedekind (Dr) Date: Tue Oct 25 19:21:49 2016 +0100 Merge branch 'master' into debian/sid commit 8cfc4538e2e70a4cc6a1b5d7e3d466d8a6a2f962 Author: Jan Wedekind (Dr) Date: Tue Oct 25 18:30:08 2016 +0100 Version 0.8.3 commit 98b47449e7f47b816312fb6810222c3b3b7823f9 Author: Jan Wedekind (Dr) Date: Tue Oct 25 13:02:43 2016 +0100 Call "cons" from compiled code commit bb85efaf747d885e1dae02cd1e6dfedd7088d041 Author: Jan Wedekind (Dr) Date: Tue Oct 25 07:59:46 2016 +0100 Minor changes to container Makefile commit e6c0e9250f0519de6e38757a45980713643094dd Author: Jan Wedekind (Dr) Date: Mon Oct 24 22:00:24 2016 +0100 Declare native method type together with method pointer commit acf937ca66afa828c6d40fb7ff8df841bbab839b Author: Jan Wedekind (Dr) Date: Mon Oct 24 13:07:38 2016 +0100 call -> native-call commit 7fef33983a66133616145404c1a1b4f9a2c01227 Author: Jan Wedekind (Dr) Date: Mon Oct 24 12:41:30 2016 +0100 Changing TODO list commit d206aeac02860d0fd913bb4bcb6fbcac710d08c1 Author: Jan Wedekind (Dr) Date: Mon Oct 24 12:27:00 2016 +0100 Reorganised TODO commit 57b393e587a6ac8526d92da284ce5063e1a79204 Author: Jan Wedekind (Dr) Date: Sun Oct 23 20:38:50 2016 +0100 Introduced 'unbuild' as a complement to 'content' commit e2a616f9e9dc16f99475180b00b9b86234644fc1 Author: Jan Wedekind (Dr) Date: Sat Oct 22 22:31:13 2016 +0100 Add missing test commit 2dd61165430d1eca3af719a2a8ddc0ebf0038a7d Author: Jan Wedekind (Dr) Date: Sat Oct 22 22:19:50 2016 +0100 Prevent object pointers from getting decomposed commit f051f8f3dca118e9c29e9a3e4246809294a0715d Author: Jan Wedekind (Dr) Date: Sat Oct 22 21:52:16 2016 +0100 "deconstruct" method for splitting up composite values commit fdddad1d29f45aa4a5850eea2c6046eaa9776fe5 Author: Jan Wedekind (Dr) Date: Fri Oct 21 22:36:17 2016 +0100 Refactoring for composite numbers commit de3e10f417b28d1a0c67e0dd560f985a47fdad12 Author: Jan Wedekind (Dr) Date: Fri Oct 21 22:09:07 2016 +0100 Extract object component from (rgb ) or (complex ) commit 40c9743b138c78f6f30e0d6465508c345663ba33 Merge: 4d236549 3c402670 Author: Jan Wedekind Date: Fri Oct 21 09:03:14 2016 +0100 Merge branch 'master' of github.com:wedesoft/aiscm commit 3c402670707ae744c8d0c1cc30ae16caee22fa33 Author: Jan Wedekind (Dr) Date: Thu Oct 20 12:59:54 2016 +0100 Fixed weekdays commit 78136c9274fb6105161c8f15ea3a38b1941139aa Merge: 4310c8e5 4d236549 Author: Jan Wedekind (Dr) Date: Thu Oct 20 13:00:08 2016 +0100 Merge branch 'master' into debian/sid commit 4d2365498ee4b765ec650f935aef07f2a4482c58 Author: Jan Wedekind (Dr) Date: Thu Oct 20 12:59:54 2016 +0100 Fixed weekdays commit 4310c8e5efafe0899f83af4bb3fc7342a13402d0 Author: Jan Wedekind (Dr) Date: Thu Oct 20 12:53:03 2016 +0100 Fixed day of week commit 34328acd813758ff77a2134fc4cdbe92549ef251 Merge: e5cc37a7 2b72ed65 Author: Jan Wedekind (Dr) Date: Thu Oct 20 12:47:23 2016 +0100 Merge branch 'master' into debian/sid commit 2b72ed65ea8120472f9b85708290ce774cca3df7 Author: Jan Wedekind (Dr) Date: Thu Oct 20 12:45:34 2016 +0100 Version 0.8.2 commit da26caeb5417efaa4be56ec6150077f5ffe4b893 Author: Jan Wedekind (Dr) Date: Thu Oct 20 08:09:03 2016 +0100 Temporarily disable type-matching for float Floating point support is not implemented yet commit 79f9872af4f9a98aca7e8c6d7ac6e0681102df5f Author: Jan Wedekind (Dr) Date: Wed Oct 19 22:01:54 2016 +0100 Link to latest DOI commit e5cc37a7caa695a22ce7b7aac1847a695ddea741 Merge: 919dd576 da6e0a00 Author: Jan Wedekind (Dr) Date: Wed Oct 19 21:12:32 2016 +0100 Merge branch 'master' into debian/sid commit da6e0a0036f661bccaa3258cd1dfa943b9b12e59 Author: Jan Wedekind (Dr) Date: Wed Oct 19 21:12:20 2016 +0100 Update changelog commit 919dd5767f0e70e80964385bdb2327be19ac4b6f Merge: 2e995741 15484ca8 Author: Jan Wedekind (Dr) Date: Wed Oct 19 20:56:28 2016 +0100 Merge branch 'master' into debian/sid commit 15484ca8a0cd26f67ac3448f1377ee8dd9a611bb Author: Jan Wedekind (Dr) Date: Wed Oct 19 20:55:26 2016 +0100 Version 0.8.1 commit cfdcd436eb5817fa378acd53ad4e074b7a04d928 Author: Jan Wedekind (Dr) Date: Wed Oct 19 20:47:59 2016 +0100 Native type for floating point is floating point commit 1c4a04ececa6a9b091699527ab8f83527dedd042 Author: Jan Wedekind (Dr) Date: Wed Oct 19 17:11:33 2016 +0100 Define operator mappings for operations involving objects commit 859c67e2a0ec136742a5883f18e1c71af2b531f5 Author: Jan Wedekind (Dr) Date: Wed Oct 19 13:21:12 2016 +0100 Enforce method parameter types commit 6faf3a9017704f1f76e407a484f9c7cc1c0583de Author: Jan Wedekind (Dr) Date: Tue Oct 18 22:20:52 2016 +0100 Switch to type conversions commit 28bc905d5761258380833aeace5f93cb0a6e1f7c Author: Jan Wedekind (Dr) Date: Tue Oct 18 12:52:59 2016 +0100 Flatten machine code to make some tests more generic commit 425600ed530608119b7d7556378594c1dca8e881 Author: Jan Wedekind (Dr) Date: Tue Oct 18 08:12:25 2016 +0100 flatten code in test commit 37b89326ad40053af3804924789bc084b97d4367 Author: Jan Wedekind (Dr) Date: Tue Oct 18 08:08:14 2016 +0100 Updated/removed some tests commit 6e85051d7a5db30797baae52c670834646e5f59f Author: Jan Wedekind (Dr) Date: Mon Oct 17 23:16:35 2016 +0100 Type conversion for method arguments commit 11c837e909960e27c39f75cad8b6fae2ff349c58 Author: Jan Wedekind (Dr) Date: Mon Oct 17 23:04:46 2016 +0100 Rearranged code, adding/removing comments commit 3828b82f545479c06e87d7c375d736a3ab8826d9 Author: Jan Wedekind (Dr) Date: Fri Oct 14 21:25:47 2016 +0100 Test conversion of rgb of object commit ead039a5bc65a4d733aef46d89abe74df3b1f77f Author: Jan Wedekind (Dr) Date: Fri Oct 14 17:10:23 2016 +0100 Converting objects to different integer types and back commit 75e245d5f1563bf18f66fe08eee1fbdf46157f16 Author: Jan Wedekind (Dr) Date: Fri Oct 14 13:12:13 2016 +0100 Add named integer metaclasses commit 339bc409d124d48fd60ef76af0ee1af6674fb673 Author: Jan Wedekind (Dr) Date: Fri Oct 14 13:02:18 2016 +0100 Added some scm_to_* and scm_from_* boilerplate commit 1609b1247124ff8470efd7b4bfccdc323878724d Author: Jan Wedekind (Dr) Date: Thu Oct 13 21:18:02 2016 +0100 Refactoring type conversion commit 2b1eadd358fa7a6eba09c3b9334137eee295bf48 Author: Jan Wedekind (Dr) Date: Thu Oct 13 12:49:57 2016 +0100 Conversion between object and boolean commit 2e995741d888fbc14f50fb0dfe5a9bb284c3d03c Author: Jan Wedekind (Dr) Date: Fri Sep 16 17:51:35 2016 +0100 Removed explicit libc dependeny commit 1f2ae007b442a1f71a1b1ecd3f3bfd9db0238004 Author: Jan Wedekind (Dr) Date: Fri Sep 16 13:29:45 2016 +0100 Added libc6-dev to dependencies commit b8699a33e9058b2d9cb888c69386e35e49ba4c7b Author: Jan Wedekind (Dr) Date: Wed Oct 12 21:02:15 2016 +0100 convert integers to objects commit da28a0f86c8ae5a6d6a135e1bd947db41b4100bc Author: Jan Wedekind (Dr) Date: Wed Oct 12 17:11:48 2016 +0100 Added more tests for type conversions commit 21ba5fc86d24ba5be941fce5a51cdc1e04c30013 Author: Jan Wedekind (Dr) Date: Wed Oct 12 13:32:58 2016 +0100 Moving code back (oops) commit bc6dd2322bc480c6292eb3343fd0365d665aeb4b Author: Jan Wedekind (Dr) Date: Wed Oct 12 08:11:15 2016 +0100 Rearranging code commit c6b29b29f6d5cb48b319a53c27d610f9b884bf4f Author: Jan Wedekind (Dr) Date: Tue Oct 11 21:19:28 2016 +0100 Load all pointer parameters before calling native method commit 14ac72068c6e8df2aead6d0d5ab42a9ca7dc82df Author: Jan Wedekind (Dr) Date: Tue Oct 11 08:04:17 2016 +0100 Add predicate to force-parameters commit e6cd1979c3d2ac800d8d3fd53d28c2a5423dbe1b Author: Jan Wedekind (Dr) Date: Mon Oct 10 22:42:13 2016 +0100 Object pointers need intermediate values commit ff633088f1539b776118cf8703cb96492ccba5e3 Author: Jan Wedekind (Dr) Date: Sat Oct 8 22:14:17 2016 +0100 Identity function for sequences of objects commit 5cf3e3267e2d84f646cb879c426e67227661a831 Author: Jan Wedekind (Dr) Date: Sat Oct 8 21:29:41 2016 +0100 Simplified delegate-op commit 90871c9fefc8a2fef3dff49130b00ba4dd932b8e Author: Jan Wedekind (Dr) Date: Fri Oct 7 22:30:41 2016 +0100 Remove some linke breaks commit d49e983df16522ad7703ecb1f86624b09512c98d Author: Jan Wedekind (Dr) Date: Fri Oct 7 21:58:06 2016 +0100 to-type dispatch depending on argument type commit 372d2d62bd872cd9af2475b92c7b3bdd4dcf3709 Author: Jan Wedekind (Dr) Date: Fri Oct 7 12:56:37 2016 +0100 Hack to get conversion from object to integer working commit 7fed6d844d0895ab003e62918af8e01b5f8f652f Author: Jan Wedekind (Dr) Date: Fri Oct 7 07:52:41 2016 +0100 combine "kind" and "op" earlier commit bee261a4fb2b7a94e16e39228e3ae007c6e7c251 Author: Jan Wedekind (Dr) Date: Thu Oct 6 17:08:29 2016 +0100 Dynamically link scm_to_int64 commit c586c74a48534e95c7caa8a9a93d720102d1cfaa Author: Jan Wedekind (Dr) Date: Thu Oct 6 08:09:37 2016 +0100 rgb of object, complex of object commit 27677cee6771e0473a1a40c376cf9015397467bd Author: Jan Wedekind (Dr) Date: Wed Oct 5 21:21:04 2016 +0100 Put images on title line commit 22e61623be28e6db06da3eab767f6e80ed1674aa Author: Jan Wedekind (Dr) Date: Wed Oct 5 21:16:38 2016 +0100 Multi-dimensional arrays of Scheme pointers commit d3a49790f829d670a905f1527ee8e05295a5f70e Author: Jan Wedekind (Dr) Date: Wed Oct 5 21:03:43 2016 +0100 Only use pointerless memory for native data commit 245555567faacf230a94cce778f32a2d791ff9b2 Author: Jan Wedekind (Dr) Date: Wed Oct 5 13:36:23 2016 +0100 Pack/unpack objects commit e0a99ca3a7a4e96713d0f6e93010504455457dd7 Author: Jan Wedekind (Dr) Date: Wed Oct 5 08:11:53 2016 +0100 Working on support for objects commit 50139a119a76daf53dcdba4eb9226929c4615a25 Author: Jan Wedekind (Dr) Date: Tue Oct 4 21:43:44 2016 +0100 Removed redundant implementation of "to-type" commit 510af9ae791990642fab3375e2175adfb1739dc8 Author: Jan Wedekind Date: Tue Oct 4 13:47:02 2016 +0100 Restore old libs commit d30f938ae44455da3706bc240f156c102c03ac4e Author: Jan Wedekind (Dr) Date: Tue Oct 4 13:09:17 2016 +0100 Logical "and" and "or" for Scheme objects commit 007a0c956f411e28fe9ed95f4c714e6b05e7cccc Author: Jan Wedekind (Dr) Date: Tue Oct 4 08:08:03 2016 +0100 Logical not for Scheme objects commit 72a5687144f77fd95ebc90b3336d576597e11a91 Author: Jan Wedekind (Dr) Date: Mon Oct 3 22:17:12 2016 +0100 comparison with zero for Scheme objects commit 79c669fc9fd01ed987451e46891ba239055869ec Author: Jan Wedekind (Dr) Date: Mon Oct 3 21:29:56 2016 +0100 Rename object predicate methods commit 38a4cc06f75114fbec8e60f637815c06b10b3581 Author: Jan Wedekind (Dr) Date: Mon Oct 3 13:10:38 2016 +0100 Comparison of objects commit 74a84d3021ded949a00bc5f627bf2d485a9c0a37 Author: Jan Wedekind (Dr) Date: Mon Oct 3 12:41:39 2016 +0100 compiled not-equal for Scheme objects commit 33a6818907c931283992c6056a5ef681ad7911b0 Author: Jan Wedekind (Dr) Date: Sat Oct 1 21:56:33 2016 +0100 Change installation link commit 398a7788d774cbf57b5bcc7ebb6d871924436e55 Author: Jan Wedekind (Dr) Date: Sat Oct 1 21:49:34 2016 +0100 equality comparison of objects commit 17883d0c8fbada1732ccdcbbb523e52b8c6e652b Author: Jan Wedekind (Dr) Date: Sat Oct 1 21:05:38 2016 +0100 shift-left and shift-right for Scheme objects commit 24e713b3e8e42f80fa631f88fb30f66c625a4ab0 Author: Jan Wedekind (Dr) Date: Sat Oct 1 20:39:38 2016 +0100 Negation of Scheme objects commit 6542ab4e999a3566810dc12f594ceec447df180f Author: Jan Wedekind (Dr) Date: Fri Sep 30 22:18:23 2016 +0100 Move links to homepage commit d15fd5c2c66c0ac3c75d9df7317885fac0ce2595 Author: Jan Wedekind (Dr) Date: Fri Sep 30 22:07:04 2016 +0100 Update TODO commit bd41b48b3517e88bd3f8153b7a18b3e68ef6e716 Author: Jan Wedekind (Dr) Date: Fri Sep 30 22:05:11 2016 +0100 Minimum and maximum for Scheme objects commit a6b54b556355c9af5e8e6075b7136d7c169997a2 Author: Jan Wedekind (Dr) Date: Fri Sep 30 21:59:15 2016 +0100 Native representation of pointer needs to be unsigned long * Bitwise not for Scheme objects * changed native representation of Scheme objects and pointers to unsigned long commit fefff48691c9c44c81c935d6c17d1c99a120b9e4 Author: Jan Wedekind (Dr) Date: Fri Sep 30 17:51:35 2016 +0100 bitwise logical operations commit 9cc4b25e0824a3fac6440aa76453aad20ceb9eb4 Author: Jan Wedekind (Dr) Date: Fri Sep 30 17:36:30 2016 +0100 division and remainder for objects commit 2b8908fcc52af1eaa6dbf96887904cc48a51ccdf Author: Jan Wedekind (Dr) Date: Fri Sep 30 13:32:44 2016 +0100 Refactor operator mapping code commit 1cc83d3c133c495eaa664cc442b34799d9b893cb Author: Jan Wedekind (Dr) Date: Fri Sep 30 13:24:20 2016 +0100 Minor simplification for (- 0 ) commit 01fee4773cd70438499014d4416cd1afbbb02e70 Author: Jan Wedekind (Dr) Date: Fri Sep 30 08:10:30 2016 +0100 Add scm-product commit 81d1c84cfa968f335419f6a4abf9e30efab8f89b Author: Jan Wedekind (Dr) Date: Thu Sep 29 22:41:17 2016 +0100 Minor simplification commit fe61d5dd34c70c2bf61b457935db0e2153cbeabd Author: Jan Wedekind (Dr) Date: Thu Sep 29 22:13:55 2016 +0100 Separate mappings to unary-extract commit 71ad05d1c6c965b50577dc1bda1f964e875b32ef Author: Jan Wedekind (Dr) Date: Thu Sep 29 21:39:52 2016 +0100 Remove redundant "delegate-op" case commit 2067e7c9b52643368fdd1a6a1e9fbf931b93369a Author: Jan Wedekind (Dr) Date: Thu Sep 29 21:30:25 2016 +0100 Macro for defining operator mappings commit 92970741cdb3003b7b0e16bec8cb62a48a9fbe3a Author: Jan Wedekind (Dr) Date: Thu Sep 29 19:48:22 2016 +0100 separate instruction mappings from "define-jit-method" commit 186b73efd291c262f0e55ae569f9fd6eef191dc0 Author: Jan Wedekind (Dr) Date: Thu Sep 29 12:37:25 2016 +0100 Define unary and binary operations on types commit 7dba1a34adaac5b7f7b6fbdc66bb4c331eaa75d7 Author: Jan Wedekind (Dr) Date: Wed Sep 28 22:27:51 2016 +0100 Refactor to add object operations (WIP) commit 7d7b530d77d70cf9fb31409c7613eea2c7085503 Author: Jan Wedekind (Dr) Date: Wed Sep 28 13:14:35 2016 +0100 Difference of Scheme objects commit 038e8b05514d01c56c7766f03fcc2742a4fadb4c Author: Jan Wedekind (Dr) Date: Wed Sep 28 08:11:17 2016 +0100 put scm-sum and scm-difference into (aiscm obj) commit f31bed3e47410d5e9e95211cb49699f3c6527228 Author: Jan Wedekind (Dr) Date: Tue Sep 27 21:28:48 2016 +0100 "+" for Scheme objects (WIP) commit 12b63f83d1603b4694812fb5376e8d2d7e9969b1 Author: Jan Wedekind (Dr) Date: Tue Sep 27 21:09:07 2016 +0100 Update documentation commit e6c500c4f711e403cbf2471780b0dddf610e4875 Author: Jan Wedekind (Dr) Date: Tue Sep 27 12:49:01 2016 +0100 Remove "map-to-fun" and "map-to-asm" commit 4a8c672643567001079165e533f9c4342c87f6be Author: Jan Wedekind (Dr) Date: Mon Sep 26 21:44:11 2016 +0100 returnable -> native-equivalent commit b0b1e8db43c711247d18d9220cae1b8f49bf26b0 Author: Jan Wedekind (Dr) Date: Sun Sep 25 22:00:20 2016 +0100 Test boolean native method commit 5e95f9a32999b84aab131b158507d0d74ba29aec Author: Jan Wedekind (Dr) Date: Sat Sep 24 22:45:16 2016 +0100 Compile and run method invoking "scm_sum" commit 995ddb985d04091b486c5af2c7da8698808bc188 Author: Jan Wedekind (Dr) Date: Sat Sep 24 22:11:40 2016 +0100 Link to Sintel movie commit 7d4522be996d420d22e918297dcb8c97042ad3e9 Author: Jan Wedekind (Dr) Date: Sat Sep 24 21:49:15 2016 +0100 Size of Guile object reference commit 1f369cd06053cb99f189bd11291d9c131f716468 Author: Jan Wedekind (Dr) Date: Sat Sep 24 21:47:30 2016 +0100 Added audio sample to documentation commit 60118f4d18886c65d7d01e3f5fb29c8543107e1f Author: Jan Wedekind (Dr) Date: Sat Sep 24 20:43:50 2016 +0100 coercions for objects commit 06c4c8aa4f8d432c29bd64aa70b4e57e083c0519 Author: Jan Wedekind (Dr) Date: Sat Sep 24 20:15:52 2016 +0100 Documentation commit 5179976965872d088742038030ffcee0ce566ae0 Author: Jan Wedekind (Dr) Date: Fri Sep 23 22:28:46 2016 +0100 Stricter type specifications for "content" commit 4e972617d670b63605981c4784bd6a4de4e7888b Author: Jan Wedekind (Dr) Date: Fri Sep 23 22:15:57 2016 +0100 Removed superfluous "content" for sequences commit 167195427f886511d8e0259bd6101724f681fc09 Author: Jan Wedekind (Dr) Date: Fri Sep 23 22:13:37 2016 +0100 Removed one superfluous "content" for pointer commit 8402c9e5ea9af2e317053690b1e8363226d90774 Author: Jan Wedekind (Dr) Date: Fri Sep 23 22:11:32 2016 +0100 Added composite base class for RGB and complex values commit 34cee2166a77f8302fbdaed092b9bc66758b7402 Author: Jan Wedekind (Dr) Date: Fri Sep 23 21:52:57 2016 +0100 further improvement of "content" commit 290934b90f0e6df7200367a3f6167fef7ea03511 Author: Jan Wedekind (Dr) Date: Fri Sep 23 20:19:10 2016 +0100 Removed superfluous "content" for variables commit 001858149c65f41fb98b62ad92680216c416f2c7 Author: Jan Wedekind (Dr) Date: Fri Sep 23 17:41:42 2016 +0100 Removing "" placeholder types commit 081668be5548171d1c0cfcfb3d3f0fbb8ef54b35 Author: Jan Wedekind (Dr) Date: Fri Sep 23 17:32:41 2016 +0100 Add type parameter to "content" for sequence objects commit 8b87ca81ca688a2de807e2ea84f7fda4f04cf4c2 Author: Jan Wedekind (Dr) Date: Fri Sep 23 07:58:18 2016 +0100 Use string parameter to test out things commit 6d53df38a06490f43b2c6f8df961b9ac1f5f1386 Author: Jan Wedekind (Dr) Date: Wed Sep 21 13:08:27 2016 +0100 Removed some redundant definitions of "content" commit 66a27fcdbb5bcfaecd4bc1ae8d7dc92d4b36d516 Author: Jan Wedekind (Dr) Date: Wed Sep 21 08:09:28 2016 +0100 Add type information to "content" calls in most cases commit b9d970e67254ac4cb611002ecaaafdc9df6622f5 Author: Jan Wedekind (Dr) Date: Mon Sep 19 22:20:41 2016 +0100 Force parameter type when calling a compiled method commit 1ad67ad12fe65487d899ee8568d1d5028cde7f59 Author: Jan Wedekind (Dr) Date: Mon Sep 19 13:20:10 2016 +0100 Minor fixes commit d7515c3c9e647d58b4ea13979a31a4128110cec2 Author: Jan Wedekind (Dr) Date: Mon Sep 19 08:11:08 2016 +0100 Pass Scheme objects to compiled code commit 982e56b3bbfbd3cfa84b2e5942718ee2e7dfce6d Author: Jan Wedekind (Dr) Date: Sun Sep 18 22:25:48 2016 +0100 Working on JIT handling of SCM values commit 7ad480d2997d4204e2314809d452c7396e585714 Author: Jan Wedekind (Dr) Date: Sat Sep 17 23:15:17 2016 +0100 variable and skeleton for Scheme object commit 5c36629ec27631b0b9d7984c9243d65aa123fd56 Author: Jan Wedekind (Dr) Date: Sat Sep 17 22:47:42 2016 +0100 Zenodo link commit db6ca5c1294e73c88978c065dd6ff97cf2b66064 Author: Jan Wedekind (Dr) Date: Fri Sep 16 23:31:07 2016 +0100 Update TODO commit 99b4c10b0eb87a0b736580f5c7af3317ebe3d58d Author: Jan Wedekind (Dr) Date: Fri Sep 16 21:19:42 2016 +0100 Rename "match" to "native-type" commit 92347e2be87558ec91bbd58fef8db418e35c87f8 Author: Jan Wedekind (Dr) Date: Fri Sep 16 13:29:45 2016 +0100 Use dynamic-link without parameter commit 88cf865bf430e0eec5d792521e069cfc6f44afe6 Author: Jan Wedekind (Dr) Date: Fri Sep 16 12:53:50 2016 +0100 Version 0.7.1 commit e04540549afcb14b50a364c9619d9e0ca03b6522 Author: Jan Wedekind (Dr) Date: Thu Sep 15 21:55:03 2016 +0100 Test call to native C function commit db1d47b4754d00e4f0307e543fb6876a728a4de0 Author: Jan Wedekind (Dr) Date: Thu Sep 15 21:08:04 2016 +0100 Use "slot-definition-name" instead of "car" (thanks to David Pirotte) https://lists.gnu.org/archive/html/guile-devel/2016-09/msg00013.html commit 86a002fdcbeb4edb71fddf85894e07f6200e6d99 Author: Jan Wedekind (Dr) Date: Thu Sep 15 08:51:04 2016 +0100 write-image for X.Org windows commit 9235b82f41657f9f188440e4ebe6b950ae1de259 Author: Jan Wedekind (Dr) Date: Wed Sep 14 22:20:06 2016 +0100 More re-export statements commit 0422578ea4b68bd6061229d8da0a0189530c82d4 Author: Jan Wedekind Date: Wed Sep 14 15:05:14 2016 +0100 Link to Chainer commit 18bd63dbab52967e5c6966b94e681e07c4963762 Author: Jan Wedekind (Dr) Date: Wed Sep 14 13:36:26 2016 +0100 Re-export pointer objects commit 53575a606debedf19d214f20fd10e580eee9f8ca Author: Jan Wedekind (Dr) Date: Wed Sep 14 13:27:26 2016 +0100 Re-export "destroy" method commit b955bf412acb80033a3ab27d04e61d2c3553ecc6 Author: Jan Wedekind (Dr) Date: Tue Sep 13 20:49:54 2016 +0100 write-image and read-image with ImageMagick commit 0914d2e3139b4cc5fea2faaf98ed9dac5d9d8c56 Author: Jan Wedekind (Dr) Date: Tue Sep 13 20:38:41 2016 +0100 read-samples -> read-audio, write-samples -> write-audio commit 1a033fbcd991032c69b22d55baaa29cc826e2d81 Author: Jan Wedekind (Dr) Date: Tue Sep 13 20:29:23 2016 +0100 Use read-image instead of read-video or grab commit 8c94ca117c609ca19d32605aa8c63be742bd68fe Author: Jan Wedekind (Dr) Date: Mon Sep 12 22:01:34 2016 +0100 Makefile.deb -> Makefile.package commit 0d9e52b9928c5e0f7e9b97f2afbd73495e26a447 Author: Jan Wedekind (Dr) Date: Mon Sep 12 21:59:40 2016 +0100 Test dependencies installation documentation commit 60e31a794ea6ce30f0f83d4d46ad1d659b3fc10e Author: Jan Wedekind (Dr) Date: Mon Sep 12 13:03:38 2016 +0100 Pass stack parameters commit 5c2b7f455880fc0b684d423b007bc10aff9b9657 Author: Jan Wedekind (Dr) Date: Sun Sep 11 21:22:21 2016 +0100 Stack arguments (WIP) commit 78315497cb5f438fa6ce15ea73ed1a3ce66e6012 Author: Jan Wedekind (Dr) Date: Fri Sep 9 22:47:11 2016 +0100 Adapt tests to new video fixture commit 52c2face2d8d4a73b06438a8efa0cfc69da15348 Author: Jan Wedekind (Dr) Date: Fri Sep 9 22:34:35 2016 +0100 Network streaming with FFmpeg commit 66f3a0639d35a4220891efb27ec009d669beefc6 Author: Jan Wedekind (Dr) Date: Fri Sep 9 22:09:02 2016 +0100 Updated test video commit 77646bbe24268ecf117633c67969d65594bbca28 Author: Jan Wedekind (Dr) Date: Fri Sep 9 22:01:11 2016 +0100 Added window icon commit e1cf01832cec37adfd2941a38fc708479e7cbd20 Author: Jan Wedekind (Dr) Date: Fri Sep 9 21:18:47 2016 +0100 Adding some icons and pictures commit bff34801f6ba7dcd50cad61b5eb81de6450bd1c6 Author: Jan Wedekind (Dr) Date: Fri Sep 9 17:38:28 2016 +0100 Link to installation page commit 8a027c218d7cac5acd1964305ed4646196d735f0 Author: Jan Wedekind (Dr) Date: Thu Sep 8 22:34:16 2016 +0100 Documentation about adding deb-src to apt list commit 916557e0160a33fdb8258f2bfd0b313ab6b2511b Author: Jan Wedekind (Dr) Date: Thu Sep 8 22:20:45 2016 +0100 Add sources to repository commit b727bddf9fa8c1a63a1f80982e89b3ec5db8085e Author: Jan Wedekind (Dr) Date: Thu Sep 8 22:11:35 2016 +0100 Add source package commit 79b2db49fe552a454453261cc408d87b5de9d58f Author: Jan Wedekind (Dr) Date: Thu Sep 8 13:02:42 2016 +0100 Adding public key commit fe86535ebb8720c1d60174a724d286f03179f39e Author: Jan Wedekind (Dr) Date: Thu Sep 8 12:27:54 2016 +0100 Use base version name for Debian Sid commit 02b2f6cf666d6062d3cba78de5be34942630b3bf Merge: 849dc5d3 2627f4ee Author: Jan Wedekind (Dr) Date: Thu Sep 8 08:08:41 2016 +0100 Merge branch 'debian-sid' commit 849dc5d33ba2e219f266592dddc59b9f2862d9f6 Merge: c36bd998 5900c4bd Author: Jan Wedekind (Dr) Date: Thu Sep 8 08:07:51 2016 +0100 Merge branch 'apt' commit c36bd998bdc35d590b7641f4a43897cc6f59ac7a Merge: c703fed3 74b0353f Author: Jan Wedekind (Dr) Date: Wed Sep 7 22:08:43 2016 +0100 Merge branch 'zenodo' commit 74b0353f9d3915a88e3c07bf8d3812e74f2b78a7 Author: Jan Wedekind (Dr) Date: Wed Sep 7 22:04:39 2016 +0100 Updated Zenodo link commit c703fed3354924c7794e1a63bdc6137a6bab046b Author: Jan Wedekind (Dr) Date: Wed Sep 7 21:40:01 2016 +0100 Add new repository to installation documentation commit 5900c4bd0f730fb67bc654a63435e9df378264df Author: Jan Wedekind (Dr) Date: Wed Sep 7 21:26:25 2016 +0100 Create repository for different versions commit 2627f4ee2b1f9f2dde0f51ccd5a4b93fe4837108 Merge: 9d479505 3290124a Author: Jan Wedekind (Dr) Date: Wed Sep 7 21:00:05 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit 3290124ade0f18f197144be7b63f0f6e8e735dee Author: Jan Wedekind (Dr) Date: Wed Sep 7 20:51:18 2016 +0100 Use "+deb8u1" suffix commit 9d4795050f1001c28e952ed62e0c8423498c5ed5 Merge: 356db732 e6ebacd5 Author: Jan Wedekind (Dr) Date: Wed Sep 7 20:28:29 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit e6ebacd55952f990431e0e6f66e5671d721666a6 Author: Jan Wedekind (Dr) Date: Wed Sep 7 20:28:15 2016 +0100 Capitalise month commit 356db7329ea51a5b5db46ae7f2a82546a4daa839 Author: Jan Wedekind (Dr) Date: Wed Sep 7 20:27:48 2016 +0100 Sid-specific version number commit 4b4d62992c2914f930e1dd44d2a9d835a23f6184 Merge: a87762f6 163668f8 Author: Jan Wedekind (Dr) Date: Wed Sep 7 20:25:35 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit 163668f8cc16a4bb9d98434f531a3a753c1d944c Author: Jan Wedekind (Dr) Date: Wed Sep 7 20:25:09 2016 +0100 Distro-specific version number commit ffbb70975f9007567ad3483a332474b97f077581 Author: Jan Wedekind (Dr) Date: Wed Sep 7 17:27:49 2016 +0100 Trying to make repository commit a87762f643acc3027b34e3664c3e592d7da8e173 Merge: 5a682ef3 5ad900dc Author: Jan Wedekind (Dr) Date: Wed Sep 7 17:10:23 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit 5ad900dcb85d82e52c5d91ef5f8568937c1177a2 Author: Jan Wedekind (Dr) Date: Wed Sep 7 17:08:38 2016 +0100 Use distribution name in package file name commit 5a682ef30f1ec51a45895cabcc0620377a79ff04 Merge: 3238b53e 0eb515e6 Author: Jan Wedekind (Dr) Date: Wed Sep 7 14:27:02 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit 0eb515e6ecbb4f4ec09e49da0554c14b86a0313b Author: Jan Wedekind (Dr) Date: Wed Sep 7 14:26:53 2016 +0100 Updated ignore rules commit 3238b53e34d68761472ef5d5766881c742d14f2d Author: Jan Wedekind (Dr) Date: Wed Sep 7 14:19:04 2016 +0100 Added Sid repository commit 966e2afeee748fcb7a4352d096813a6993519cb6 Merge: 452ff843 ad29d27f Author: Jan Wedekind (Dr) Date: Wed Sep 7 14:16:54 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit ad29d27fa85d8c0aec28ebd3211fcbe37c533422 Author: Jan Wedekind (Dr) Date: Wed Sep 7 14:16:03 2016 +0100 Subdirectory for repository commit 452ff84380b848f35b60d2af40eca1aef82cfc7b Merge: 1880bcc4 48e3451f Author: Jan Wedekind (Dr) Date: Wed Sep 7 13:59:10 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit 48e3451fb28e478557d95bb8a12ba90bf22311a5 Author: Jan Wedekind (Dr) Date: Wed Sep 7 13:51:24 2016 +0100 Added sid repository commit 81c68dcfec0702db5961ad2621468406db6bbd59 Author: Jan Wedekind (Dr) Date: Wed Sep 7 13:49:11 2016 +0100 Makefile rules for updating repository commit 436ec42f277308d883974816ecb5068a7208c767 Merge: cee952d1 5b9deb4e Author: Jan Wedekind (Dr) Date: Wed Sep 7 13:31:56 2016 +0100 Merge branch 'master' into debian-jessie commit 5b9deb4e556761da3ac87101b5a6804d4c8d926c Author: Jan Wedekind Date: Wed Sep 7 13:30:48 2016 +0100 Swap UV channels when MJPEG decoding commit 1880bcc4419636070ba49630c459af0f570f2f9c Merge: 5f33862d cee952d1 Author: Jan Wedekind (Dr) Date: Wed Sep 7 08:10:54 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit cee952d106513526d56bce59b2b4fd893e9ec558 Author: Jan Wedekind (Dr) Date: Wed Sep 7 08:10:34 2016 +0100 Clean distributable commit 5f33862da4fdf486572a89ee2d285271789b2363 Merge: 3ffae11b b5e708a6 Author: Jan Wedekind (Dr) Date: Wed Sep 7 07:59:27 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit a58a6e720bf37bf20542a296fda6886585759be4 Author: Jan Wedekind (Dr) Date: Tue Sep 6 21:54:25 2016 +0100 Update TODO commit b5e708a6d857ee8494eb04fc1882a49e4e845305 Author: Jan Wedekind (Dr) Date: Tue Sep 6 21:45:19 2016 +0100 Add i386 commit b87785eeaee7a8878d50825632a9c62f02e31f2e Merge: 4e7ccf2a e12e57cf Author: Jan Wedekind (Dr) Date: Tue Sep 6 21:36:46 2016 +0100 Merge branch 'master' into debian-jessie commit e12e57cf2049117e468688111911ae528fbee8bf Author: Jan Wedekind (Dr) Date: Tue Sep 6 21:36:34 2016 +0100 Updated TODO commit 4e7ccf2ab7d49047617b7b20d8982751b2ef6e54 Author: Jan Wedekind (Dr) Date: Tue Sep 6 21:35:58 2016 +0100 Added apt repository commit 3ffae11bcd4f7a9ce6032a3b9fcfeac8e8afbcf5 Merge: 7d0fabe9 66a11467 Author: Jan Wedekind (Dr) Date: Tue Sep 6 21:15:10 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit 66a11467e7c0fb46e2e9a3fd8ccae9bed7cd4498 Merge: df6e29d2 da4c908d Author: Jan Wedekind (Dr) Date: Tue Sep 6 21:15:01 2016 +0100 Merge branch 'master' into debian-jessie commit da4c908d91c4d7057620222d3760e5fa4979d4aa Author: Jan Wedekind (Dr) Date: Tue Sep 6 21:13:49 2016 +0100 Minor refactor commit bda9a66778802bbd956c8e7b1581ea07cdbd9f26 Author: Jan Wedekind (Dr) Date: Tue Sep 6 17:12:46 2016 +0100 Omitted superfluous "list" commit 19bb3afaea52192e70909de304f0ae11463d82c7 Author: Jan Wedekind (Dr) Date: Tue Sep 6 13:04:30 2016 +0100 Force intermediate results before calling method commit e8c0bce8e823826b0d330a1499bc358da20d2497 Author: Jan Wedekind (Dr) Date: Mon Sep 5 22:40:56 2016 +0100 Refactored code for inserting intermediate results commit 82f7f43891cc4dac4ef284b5c44e067f408bf1c7 Author: Jan Wedekind (Dr) Date: Mon Sep 5 21:24:15 2016 +0100 Fix predicate parameter used in "prepare-parameters" commit 6479a985a1bf991d3df545e68966fecb84f1d6f7 Author: Jan Wedekind Date: Mon Sep 5 13:13:30 2016 +0100 WIP commit 7d0fabe9dbe8d2ede8bb7b921c121f6f2be86ccb Merge: d194cde4 df6e29d2 Author: Jan Wedekind (Dr) Date: Sat Sep 3 23:07:25 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit df6e29d25f82ac747997cca05cb340753c1bf5ce Merge: e98a9702 d633c81a Author: Jan Wedekind (Dr) Date: Sat Sep 3 23:07:04 2016 +0100 Merge branch 'master' into debian-jessie commit d633c81a684545b353d2e8dc7ec3dc965833d0ac Author: Jan Wedekind (Dr) Date: Sat Sep 3 23:06:29 2016 +0100 Fixing Travis CI build commit d194cde43e3b78921a58d6ca168e401761cc77a9 Merge: 7a02a2f5 e98a9702 Author: Jan Wedekind (Dr) Date: Sat Sep 3 23:01:32 2016 +0100 Merge branch 'debian-jessie' into debian-sid commit e98a9702c345a2e80d0b1b29b8a1721e58c9c481 Merge: 31e56125 460ae73a Author: Jan Wedekind (Dr) Date: Sat Sep 3 23:00:53 2016 +0100 Merge branch 'master' into debian-jessie commit 460ae73a04de95b60dfeb5c4a7d88d3657c4e84d Author: Jan Wedekind (Dr) Date: Sat Sep 3 22:57:21 2016 +0100 Fix Travis build commit 7a02a2f57fff44b60ed1be87d6a8c52edc17cec4 Author: Jan Wedekind (Dr) Date: Sat Sep 3 22:47:41 2016 +0100 Build dependencies for Debian Sid commit 31e56125d7460d1c4a38a3941bfa1d8ee2809b87 Author: Jan Wedekind (Dr) Date: Sat Sep 3 21:33:08 2016 +0100 Build scripts and Dockerfile for Debian Jessie package commit 41f10d8f11badafef0827f0f2221247ea7d161cc Author: Jan Wedekind (Dr) Date: Sat Sep 3 21:14:06 2016 +0100 Remove Docker and Debian packaging code commit 1a2eda4f332bc19eac1e095c34010e3645cf58da Author: Jan Wedekind (Dr) Date: Sat Sep 3 15:32:58 2016 +0100 Adapt package names for Ubuntu Xenial commit ca57dfda5a2c19eb619679e015a4b81a8e099cf4 Author: Jan Wedekind (Dr) Date: Sat Sep 3 15:07:24 2016 +0100 Adding Ubuntu Xenial control file commit 7fe9c527c0b6f3db8412e7463bf72fd827ddfced Author: Jan Wedekind (Dr) Date: Sat Sep 3 14:50:20 2016 +0100 Fix Travis CI build commit 956f569211dc4ebdd44e696f575144048fff3c02 Author: Jan Wedekind (Dr) Date: Sat Sep 3 11:11:31 2016 +0100 Fix Travis build commit 9d4a4d57dbf6a1b532bfcf0d9feadd9d2eb49812 Author: Jan Wedekind (Dr) Date: Fri Sep 2 21:56:44 2016 +0100 Build package for Ubuntu Trusty commit 45467ba259bd5c1cf9faff974c9fc00d5197fc99 Author: Jan Wedekind (Dr) Date: Fri Sep 2 21:15:25 2016 +0100 Refactored register instantiation code commit 9eb072800e6d8bbe4185be1b454bd8f2b0808121 Author: Jan Wedekind (Dr) Date: Fri Sep 2 17:03:23 2016 +0100 Pass register parameters to method commit a57661a382ddaf74679f4f6e613b6d69c7687240 Author: Jan Wedekind (Dr) Date: Fri Sep 2 16:25:08 2016 +0100 Documentation for "make integration" commit 90f8fa38973b913498bfb1addf82fc2ee4c2a9a8 Author: Jan Wedekind (Dr) Date: Fri Sep 2 13:05:21 2016 +0100 Added test for function call taking two arguments commit 4b17f2624fdeba87b5e73d8e284a2558089fc620 Author: Jan Wedekind (Dr) Date: Fri Sep 2 12:19:45 2016 +0100 Separate function for generating calling code commit d8ec854b87e9c4fac5525590e36c44e195b7bb90 Author: Jan Wedekind (Dr) Date: Thu Sep 1 22:04:37 2016 +0100 Block caller-saved registers commit 5775b863e3051c83fbf9b3f89bbb46c66865f85c Author: Jan Wedekind (Dr) Date: Thu Sep 1 21:03:07 2016 +0100 Test build and installation of package using Docker commit c059dde361cefd9215dbb7d782953e805f1cb11f Author: Jan Wedekind (Dr) Date: Thu Sep 1 20:16:48 2016 +0100 Remove circle.yml commit 90e2a89ffee4bd92e417a52d26230d54b87817f0 Merge: 376b55bb 4cd8603f Author: Jan Wedekind (Dr) Date: Thu Sep 1 13:06:00 2016 +0100 Merge branch 'fix-package-names' commit 4cd8603f22e77c9be9eed0d243a113f1bebb1e9b Author: Jan Wedekind (Dr) Date: Thu Sep 1 12:58:30 2016 +0100 Fix pacakge names, update version number commit 4fb4ffabf31a90fb3fea4cf5c7963ab5b671e92d Author: Jan Wedekind (Dr) Date: Thu Sep 1 12:42:56 2016 +0100 Don't use alias package names commit 376b55bb562bc53370b56cde1ff220f20fc04266 Author: Jan Wedekind (Dr) Date: Thu Sep 1 12:41:56 2016 +0100 Added some comments commit de63cfb7ca1a85016fc74d9f184387659849cc89 Author: Jan Wedekind (Dr) Date: Wed Aug 31 21:47:04 2016 +0100 Compile a function call without parameters commit 3152f6e67337c9260926f8a57b47cbfe64679918 Author: Jan Wedekind (Dr) Date: Wed Aug 31 08:58:46 2016 +0100 (MOV RCX (make-pointer 42)) commit a46fdba4c573df74bb523019a97028e7315862e6 Author: Jan Wedekind (Dr) Date: Tue Aug 30 22:55:04 2016 +0100 CALL r/m64 commit 77688b5fabffebe65e6bb15f5803d0dd591b68f0 Author: Jan Wedekind (Dr) Date: Tue Aug 30 13:14:35 2016 +0100 Call DLL function from Scheme commit f9b134560ba074ac0eeb5477a08df306bbcf559c Author: Jan Wedekind (Dr) Date: Mon Aug 29 22:06:18 2016 +0100 Refactoring register allocation commit 450db3364ea1f5bb51a58ba17dca4a38e814d8c8 Author: Jan Wedekind (Dr) Date: Sun Aug 28 21:22:23 2016 +0100 Split native tests commit 04f6bf6b42831d5a035bd54998ccda8b9ddf9f73 Author: Jan Wedekind (Dr) Date: Sat Aug 27 22:14:49 2016 +0100 Add stack pointer change to tests commit b4896a030204446008b8def56e3ae345a184f1ea Author: Jan Wedekind (Dr) Date: Sat Aug 27 21:37:18 2016 +0100 Adjust stack pointer (WIP) commit 0aa378ac38a82356ac1a5818e331fc060f7d72e9 Author: Jan Wedekind (Dr) Date: Fri Aug 26 22:44:20 2016 +0100 Stack offset commit 8153a7370755a0946004996db9b0d1469afcb7d7 Author: Jan Wedekind (Dr) Date: Fri Aug 26 22:37:37 2016 +0100 Fix stack position after variable allocation commit 297b1273c7b5fa27c16c07ea6c33af72a4095ddb Author: Jan Wedekind (Dr) Date: Thu Aug 25 13:03:02 2016 +0100 More compact equality operator for objects commit 262f09624a7b2b6a63b21bfe62b124b3527c83a1 Author: Jan Wedekind (Dr) Date: Wed Aug 24 17:12:29 2016 +0100 Pass through pointer variables if no substitution is defined commit 2b451e05c3b4215e461322c55cc54531dfbd3670 Author: Jan Wedekind (Dr) Date: Wed Aug 24 07:59:49 2016 +0100 Do not reference virtual packages commit 79db58bd64b3661c1305ef5b0a663b81eece5fe9 Author: Jan Wedekind (Dr) Date: Tue Aug 23 22:01:11 2016 +0100 Updating Zenodo link commit 8655eaa918fd16c83c2c994abfa8b8c16e5513c8 Author: Jan Wedekind (Dr) Date: Tue Aug 23 21:52:09 2016 +0100 Introduced stack-pointer place holder commit 6a5d77c32b8305ffffe08c489d9f39cf1239448f Author: Jan Wedekind (Dr) Date: Mon Aug 22 22:39:49 2016 +0100 Methods for handling stack pointer placeholder commit 81dcd04e8bcc964759bc1a2b630b4eea40133d8a Author: Jan Wedekind (Dr) Date: Sun Aug 21 21:44:06 2016 +0100 Reuse "all-vars" commit 2eb7d38f12f5034336445b2166d7d43b10fd1996 Author: Jan Wedekind (Dr) Date: Sun Aug 21 13:10:46 2016 +0100 Update TODO commit 70bc485adc054cb93a1d6e76af9194dcc4d504da Author: Jan Wedekind (Dr) Date: Sat Aug 20 22:07:08 2016 +0100 Bugfix for logo commit c2d38ea0e9e3c86898747dd866df71a58c6a2edd Author: Jan Wedekind (Dr) Date: Sat Aug 20 22:00:26 2016 +0100 Updated logo commit fd12eb74ef9caecec53ced8190bfb3c9453587be Author: Jan Wedekind (Dr) Date: Sat Aug 20 20:55:52 2016 +0100 Add logo commit 41d60520286195bdc5b7607e23c38f828fec2054 Author: Jan Wedekind (Dr) Date: Fri Aug 19 22:21:48 2016 +0100 Updated Zenodo link commit 931b2040bfdee3c19012a586c7319c803b4359a6 Author: Jan Wedekind (Dr) Date: Fri Aug 19 22:04:13 2016 +0100 Fix Changelog format commit 9497e3fa86327d514c8215ff27a64a13cff92c34 Author: Jan Wedekind (Dr) Date: Fri Aug 19 21:54:33 2016 +0100 Version 0.6.1 commit d5e9f89697d8b8ed9e67646f36818d2fa60a3338 Author: Jan Wedekind (Dr) Date: Fri Aug 19 17:40:56 2016 +0100 Fixed integration test commit a95d84bdb9762c47c427cd4124f290091b2ccde0 Author: Jan Wedekind (Dr) Date: Fri Aug 19 17:36:39 2016 +0100 Simpler Pulse audio input example commit 8bf65bc840bad7bb520d7d85d795bd228b261f9a Author: Jan Wedekind (Dr) Date: Fri Aug 19 12:21:25 2016 +0100 Integration test for Pulse audio input commit cd1ce1b2a2f18192aeecf9f9c54604fb61697e6a Merge: c49d1214 26ab0d78 Author: Jan Wedekind (Dr) Date: Fri Aug 19 08:09:31 2016 +0100 Merge branch 'pulse-async-api' commit 26ab0d78d516e77fc372a8d949f977210f762ca3 Author: Jan Wedekind (Dr) Date: Fri Aug 19 08:08:47 2016 +0100 Pulse audio recording commit 8573348228984035508f97a04f522aa2fb053420 Author: Jan Wedekind (Dr) Date: Fri Aug 19 07:00:20 2016 +0100 Allow larger buffer size commit 65f0eba0154fd7074b17595dcbc2b3326d30c433 Author: Jan Wedekind (Dr) Date: Thu Aug 18 22:33:24 2016 +0100 Wait for audio data to be available commit 898ea13127c548adac29f8207fdd7bc4a6cea2c4 Author: Jan Wedekind (Dr) Date: Thu Aug 18 22:14:45 2016 +0100 Read audio samples (WIP) commit adb4c48e22c838aae16849c5cb9c30f1f8838f5b Author: Jan Wedekind (Dr) Date: Thu Aug 18 13:04:08 2016 +0100 type -> typecode commit 635a6dc1d5c4271efd93627307dfb64568364c25 Author: Jan Wedekind (Dr) Date: Wed Aug 17 22:14:12 2016 +0100 Audio recording (WIP) commit e69961e5e10835d886b77f1cdced557671156948 Author: Jan Wedekind (Dr) Date: Wed Aug 17 08:00:30 2016 +0100 pts= documentation (seeking in a/v data) commit 6913f4c2af643d1fc603b37ca9b85c3c448c203a Author: Jan Wedekind (Dr) Date: Sun Aug 14 21:31:33 2016 +0100 Bugfix for latency commit 2b10617386d49e0457b62ffc29f5a562ce8eecd2 Author: Jan Wedekind (Dr) Date: Sun Aug 14 21:27:04 2016 +0100 Use latency to do implement "drain" commit 4d523d4bd949074d4cbf88c67b7a3b3ac2c23d11 Author: Jan Wedekind (Dr) Date: Fri Aug 12 23:07:01 2016 +0100 Flush buffer commit 46b11c63e4543235ebb97092e72805cafe654172 Author: Jan Wedekind (Dr) Date: Fri Aug 12 22:03:23 2016 +0100 Use threaded main loop commit 525cfcca0a2d902e4fe1e96793291a1f37e08d80 Author: Jan Wedekind (Dr) Date: Fri Aug 12 12:42:52 2016 +0100 Split up Pulse audio initialisation into multiple methods commit 8a5f258158d5983007044375ecfe9be4169b7a5b Author: Jan Wedekind (Dr) Date: Fri Aug 12 12:21:06 2016 +0100 Updated video player example commit 90098ed4e64c8b735316cf294d5594c2117b8538 Author: Jan Wedekind (Dr) Date: Fri Aug 12 08:35:14 2016 +0100 Pulse audio latency commit 8ef081491b7b6a776cef137fa7e3f5acf85fad0c Author: Jan Wedekind (Dr) Date: Thu Aug 11 23:28:30 2016 +0100 Add footer to documentation commit 28f7fd0f7e19a1b1cac290c9cc4cd74bb8803857 Author: Jan Wedekind (Dr) Date: Thu Aug 11 22:58:41 2016 +0100 "drain" to wait for audio buffer to get empty commit f024fb5fd266dfd9ff913425d57c8b1301f505e9 Author: Jan Wedekind (Dr) Date: Thu Aug 11 17:18:23 2016 +0100 Flush Pulse audio buffer commit 38b2035829db2a6fe3b103f180fbb81891a5cd13 Author: Jan Wedekind (Dr) Date: Thu Aug 11 12:43:36 2016 +0100 Set prebuffer size to 0 so stream does not stop playing commit 9ce15398ec86c9b142f14bf1c45ec4e9c6f169bb Author: Jan Wedekind (Dr) Date: Thu Aug 11 07:56:26 2016 +0100 Check context state more directly commit e7c914497dd6de5e9b45f2337fcc0d44b27c6c3f Author: Jan Wedekind (Dr) Date: Wed Aug 10 22:18:30 2016 +0100 sample_spec does not need to be member variable commit 088b37e1f0b4e8d747163d73ea35482f5ca39467 Author: Jan Wedekind (Dr) Date: Wed Aug 10 22:04:09 2016 +0100 Select audio device, check for errors when opening stream commit 3d83ffe1b7ba29f346b9ecc6beb1e96380f67ca0 Author: Jan Wedekind (Dr) Date: Wed Aug 10 17:46:26 2016 +0100 Check for errors when creating Pulse audio stream commit 4283f91050236ed8f2438a65d783d9dcb07eaca8 Author: Jan Wedekind (Dr) Date: Wed Aug 10 12:55:51 2016 +0100 Pulse audio latency parameter commit 722abde7f25cf0be1f22afa6eb7ddad90b54c569 Author: Jan Wedekind (Dr) Date: Wed Aug 10 12:44:11 2016 +0100 Remove "startpos" variable commit f39f96f9c2310ec43e70c171cfcc9e2fb0a72376 Author: Jan Wedekind (Dr) Date: Wed Aug 10 08:11:02 2016 +0100 Put resizing of ring buffer into separate method commit 6a7f8286bed50709730ffe100747d5cc8466480d Author: Jan Wedekind (Dr) Date: Wed Aug 10 08:00:49 2016 +0100 Add write offset to ring buffer implementation commit 492148343bfda943228e4c44df4a3044b8f2dd8a Author: Jan Wedekind (Dr) Date: Tue Aug 9 22:08:54 2016 +0100 Minor refactor commit 780ecc39f79a33f2d32ed9323c50999ac5ef5a3e Author: Jan Wedekind (Dr) Date: Tue Aug 9 22:00:35 2016 +0100 Bugfix for ring buffer writing commit 7a5fe65387a1f50d49d5885dafc2c4dbdb7f2009 Author: Jan Wedekind (Dr) Date: Mon Aug 8 22:21:15 2016 +0100 "write-samples" method for adding samples to output buffer commit 74730e14a2e6b042c77a888469a36885ce4c3aaf Author: Jan Wedekind (Dr) Date: Mon Aug 8 21:36:20 2016 +0100 Pulse audio output parameters commit 16268339f264325ee587b7fcbaa027ed239beb64 Author: Jan Wedekind (Dr) Date: Sun Aug 7 23:07:13 2016 +0100 Set latency of Pulse audio output commit 9a2f6e57f5d2484bb064bbcbc4ecf17f4a7226f3 Author: Jan Wedekind (Dr) Date: Sat Aug 6 22:32:27 2016 +0100 Wrap ring buffer offset around commit 97df14fd165e94bf356f72de406244661b146277 Author: Jan Wedekind (Dr) Date: Sat Aug 6 22:14:37 2016 +0100 Resize ring buffer if needed commit d53847de453bcf7fffe3f248c55aa221c41532c4 Author: Jan Wedekind (Dr) Date: Fri Aug 5 22:59:07 2016 +0100 Wrap around for ring buffer commit f83965cffe87d0fc00202600f9b79a4f270f3913 Author: Jan Wedekind (Dr) Date: Fri Aug 5 22:03:02 2016 +0100 Use ring buffer offset commit 4b1c3b018fe6dd0f01ca747e5c6dd14c69dd625d Author: Jan Wedekind (Dr) Date: Fri Aug 5 17:48:05 2016 +0100 Advance ring buffer when fetching commit 24f79ad4208774dc4e3f687eec93ac459359786a Author: Jan Wedekind (Dr) Date: Fri Aug 5 17:42:17 2016 +0100 Fetch from ring buffer using callbacks commit f92e238fc056292ec64888178e7fef76043bfa4f Author: Jan Wedekind (Dr) Date: Fri Aug 5 16:56:23 2016 +0100 Makefile for building Docker images commit 775dd45159d7267059e2823f79ef17ae38ce09de Author: Jan Wedekind (Dr) Date: Fri Aug 5 16:27:21 2016 +0100 Test fetching from empty ring buffer commit c0f3d2a3362f4fce7303632f9722c0f90a9bae88 Author: Jan Wedekind (Dr) Date: Fri Aug 5 08:00:53 2016 +0100 Appending data to ring buffer commit 6e41be2622ac0453ef6a61095285e5da8454da0e Author: Jan Wedekind (Dr) Date: Thu Aug 4 22:53:56 2016 +0100 Store data in ring buffer commit dba83229b8f53e737de98d52394664157bff1318 Author: Jan Wedekind (Dr) Date: Thu Aug 4 22:33:13 2016 +0100 Fill count for ring buffer commit 9e803ff084e604f145342e6a5aebabe6b6859d2c Author: Jan Wedekind (Dr) Date: Thu Aug 4 08:15:55 2016 +0100 Ringbuffer for audio samples (WIP) commit 9c9d323a5d6539598ea8d5503cfa08f7ee21bc73 Author: Jan Wedekind (Dr) Date: Thu Jul 28 22:05:45 2016 +0100 Update TODO commit 360eca7613ac19cfa679fe74c434511c494838d1 Author: Jan Wedekind (Dr) Date: Wed Jul 27 22:25:08 2016 +0100 Put thread into aiscm/pulse.scm to make API simpler commit 6677b3e64543b568934b69e6d177a50ff94ed050 Author: Jan Wedekind (Dr) Date: Wed Jul 27 22:02:30 2016 +0100 Wait for callbacks before finishing initialisation commit 49f8153adadc5e085677738b9be69b39d8269a7c Author: Jan Wedekind (Dr) Date: Tue Jul 26 20:58:42 2016 +0100 Add callback for writing audio commit dcc991e113dea03a5830ae3a94a341f0a0f4b658 Author: Jan Wedekind (Dr) Date: Mon Jul 25 08:27:17 2016 +0100 Close Pulse audio stream commit 7c9197cb517a99ae65010fc2429103c93bf65fd7 Author: Jan Wedekind (Dr) Date: Sun Jul 24 22:18:59 2016 +0100 Open audio playback stream commit 5ee10221b7fd4b6e71c64869eafb956dcaa9993d Author: Jan Wedekind (Dr) Date: Sat Jul 23 22:40:02 2016 +0100 Add Pulsaudio context commit e88be8f4096022f26f2d7530c8c25ff9f9422f7a Author: Jan Wedekind (Dr) Date: Sat Jul 23 22:29:42 2016 +0100 Added Pulse audio main loop commit 3ab4a0e4d0269626d11d37f1d438ae856ff85ec8 Author: Jan Wedekind (Dr) Date: Sat Jul 23 21:20:18 2016 +0100 Add Pulseaudio type conversions commit c49d1214e322c7291b72fbce6553bf1b7d6fb8b2 Author: Jan Wedekind (Dr) Date: Fri Jul 22 23:24:24 2016 +0100 Update Zenodo link commit 47d14f8d856b60cd134c2e12f6db82881f53f7e3 Author: Jan Wedekind (Dr) Date: Fri Jul 22 23:20:17 2016 +0100 Delete Pulse audio simple API code commit 2b843127b6aea55202d4c0d6d23a72ce0b920eee Author: Jan Wedekind (Dr) Date: Fri Jul 22 22:07:30 2016 +0100 Update Zenodo link commit 79098fb2da29a55f46233222975e382e8f3eab9a Author: Jan Wedekind (Dr) Date: Fri Jul 22 21:43:06 2016 +0100 Version 0.5.1 commit 5f6e63a2c794a7e8d126e12b54e35eb8e5c2f487 Author: Jan Wedekind (Dr) Date: Fri Jul 22 21:06:19 2016 +0100 Add some examples commit 1e7168644ce7d96b08632ac548260a5c7ad4ec7d Author: Jan Wedekind (Dr) Date: Fri Jul 22 12:50:03 2016 +0100 Tests for audio/video buffer commit b8d334036f36b5798de412f84bcfebb61ab52ef5 Author: Jan Wedekind (Dr) Date: Thu Jul 21 22:03:21 2016 +0100 Change audio buffer handling in video player commit 2a924caeaff1351762c396a2de4205e4625f3104 Author: Jan Wedekind Date: Thu Jul 21 20:31:23 2016 +0100 Updated TODO commit 5be5af98c36468115627860c0a0f43a151e05a8b Author: Jan Wedekind (Dr) Date: Thu Jul 21 18:00:22 2016 +0100 Pulse audio error hadnling commit 15cd2888ffce102230c5a165dc93e456751be816 Author: Jan Wedekind (Dr) Date: Thu Jul 21 13:09:13 2016 +0100 Smaller synchronisation method commit ade7df11aadca95dbe20f28b950a4bce37f69800 Author: Jan Wedekind (Dr) Date: Thu Jul 21 08:11:38 2016 +0100 Buffer time stamps commit a5519b88ddb859042576075c7823df7f47bfad7c Author: Jan Wedekind (Dr) Date: Wed Jul 20 23:24:47 2016 +0100 Audio and video buffer implementation in Scheme commit 52aefeb65c8b5dfe878359880bda7777a9e397b8 Author: Jan Wedekind (Dr) Date: Wed Jul 20 12:56:25 2016 +0100 Buffer audio and video frames commit 25fe2df054bd85c4b4870022c5878b304fc441cf Author: Jan Wedekind (Dr) Date: Wed Jul 20 08:38:35 2016 +0100 Use frame buffers commit 2cc8a2b079c302b8aea58b781fb8ff3318a42eea Author: Jan Wedekind (Dr) Date: Tue Jul 19 23:30:51 2016 +0100 Split up videodev2_grab a bit commit 5793fc3f04eae3c450a7e209a54f4cad92c4f825 Author: Jan Wedekind (Dr) Date: Tue Jul 19 23:12:14 2016 +0100 Separate method for buffering frames commit 2685f13a5e453f67eb029b3d180e5a16a83e3c1e Author: Jan Wedekind (Dr) Date: Tue Jul 19 16:39:25 2016 +0100 Use av_free_packet instead of av_packet_unref commit 8d617bc96a8f2fa1697602fa2827328e9c87d001 Author: Jan Wedekind (Dr) Date: Tue Jul 19 08:34:15 2016 +0100 Added a ring buffer implementation commit c7defe1f8c1fef57670f31d51a0143bdda2fbbbc Author: Jan Wedekind (Dr) Date: Tue Jul 19 07:40:49 2016 +0100 Not using ffmpeg reference counting api commit a7aadef5be1b60cb771c41a3594c977379fb0ad8 Author: Jan Wedekind (Dr) Date: Mon Jul 18 22:55:39 2016 +0100 Use avcodec_get_frame_defaults on older distros commit 1dae55cc70b13ad6473e943d36c86405a31c14e8 Author: Jan Wedekind (Dr) Date: Mon Jul 18 22:43:03 2016 +0100 Dereference frame commit fa59442c696e376e393f08f8658d4be2c3f5254c Author: Jan Wedekind (Dr) Date: Mon Jul 18 12:27:16 2016 +0100 Make audio/video read loop smaller commit 58f1ede1243e2ea96c6760043bc765c53daed97a Author: Jan Wedekind (Dr) Date: Mon Jul 18 07:43:46 2016 +0100 Refactor packet handling code commit 3f61c91b7be334d36fd0f5141e44175d7b6514d5 Author: Jan Wedekind (Dr) Date: Sun Jul 17 21:52:45 2016 +0100 Minor changes commit f570af3b6be7cf23ab6795031237c5c420137b27 Author: Jan Wedekind (Dr) Date: Sun Jul 17 21:28:08 2016 +0100 Decode all stream data commit ef80f70f84e3aa459c786f7612a8e65e5f43ff9c Author: Jan Wedekind (Dr) Date: Sun Jul 17 21:03:50 2016 +0100 Handle timestamp stuff in Scheme commit 134880b9691bbc7ba187284602946d11a9e713e6 Author: Jan Wedekind (Dr) Date: Sat Jul 16 15:10:50 2016 +0100 Use av_image_get_buffer_size if available commit 6acdf6521d708fb1f8980a873a934203335ee0dd Author: Jan Wedekind (Dr) Date: Fri Jul 15 22:54:12 2016 +0100 Threads example commit d0acb9f7d2566298c3f47690e00520c845f909aa Author: Jan Wedekind (Dr) Date: Fri Jul 15 22:49:03 2016 +0100 Use while loops commit 9610f8ad7329ab9815dd99a7768e45b9cea687cd Author: Jan Wedekind (Dr) Date: Fri Jul 15 21:59:04 2016 +0100 Use environment variable to disable Guile auto-compilation commit dac61c86c847235073679cf215cfe5cb1ba08732 Author: Jan Wedekind (Dr) Date: Fri Jul 15 21:43:45 2016 +0100 Add "AV" prefixes to get it building on Debian Sid commit aa6bfe22503350133e76b28350f449bf9f459585 Author: Jan Wedekind (Dr) Date: Fri Jul 15 16:38:47 2016 +0100 Updating documentation commit 186a2d901af80763b610799f4784cc3acf05b14b Author: Jan Wedekind (Dr) Date: Fri Jul 15 16:26:17 2016 +0100 Update installation information commit a34d330f7a894a0014bf636150883411a9084e12 Author: Jan Wedekind (Dr) Date: Fri Jul 15 16:17:20 2016 +0100 Flush frames after seeking commit 2c19e0a5b6e8c43439669ee5e6e3d4c39c844a58 Author: Jan Wedekind (Dr) Date: Fri Jul 15 07:50:24 2016 +0100 Rename open-input-* -> open-ffmpeg-input commit 4fe0316fda4b801cc5a1bda89fb32ebc43c80aef Author: Jan Wedekind (Dr) Date: Thu Jul 14 22:41:34 2016 +0100 Working on audio/video synchronisation commit b690d2867fe6be1f218cfb06249a49206840d6dc Author: Jan Wedekind (Dr) Date: Thu Jul 14 21:23:41 2016 +0100 Method for read both audio and video frames commit 2da79babe2a491175958e0077aff98a5a9e41809 Author: Jan Wedekind (Dr) Date: Thu Jul 14 17:21:32 2016 +0100 Bugfix: read-audio should terminate when reading empty stream commit c438c7ecedd28582d944ed1b0022f3e1a653201e Author: Jan Wedekind (Dr) Date: Thu Jul 14 16:49:54 2016 +0100 Refactor code for importing audio/video frames commit 60a9839e868fceacdf64c3c4240393dae9f0bd24 Author: Jan Wedekind (Dr) Date: Thu Jul 14 12:39:50 2016 +0100 format-context -> ffmpeg commit 8648625962050684e55b4cf18224064332f5ab53 Author: Jan Wedekind (Dr) Date: Thu Jul 14 08:25:48 2016 +0100 Use one method to read both audio and video commit ec09da62fa213a1a797489c4a3e38c893f593e35 Author: Jan Wedekind (Dr) Date: Thu Jul 14 07:48:23 2016 +0100 Read audio using a/v method commit 523c2249f0a76d4188b794f9c68788efea24bc25 Author: Jan Wedekind (Dr) Date: Thu Jul 14 07:41:55 2016 +0100 Separate methods for listing picture/samples information commit 25f59fcaa129a85f755d9cc9ceae53290682a02a Author: Jan Wedekind (Dr) Date: Wed Jul 13 22:22:48 2016 +0100 Initialise FFmpeg network commit 052ccc3440b85b938ad33583a7dce49fb2094850 Author: Jan Wedekind (Dr) Date: Wed Jul 13 22:00:36 2016 +0100 Use XVideo as default for single frame videos commit 0240a5f4e398eea21ea3e42d4c63f9870904fbdf Author: Jan Wedekind (Dr) Date: Wed Jul 13 21:57:18 2016 +0100 Refactor getting frame rate and sampling rate commit 0c5c67577a1ecb2b3a3dba56d9380ed7da18d8f5 Author: Jan Wedekind (Dr) Date: Wed Jul 13 17:37:12 2016 +0100 Refactor code for accessing streams commit e8a0f905717adcaff226af2e0be4ed8ca3a96460 Author: Jan Wedekind (Dr) Date: Wed Jul 13 17:07:15 2016 +0100 Added method to get audio/video time stamps commit fd01b9a1ebae931835a80ca27b70090a2e4bc4e4 Author: Jan Wedekind (Dr) Date: Wed Jul 13 14:27:22 2016 +0100 Auudio time stamp commit a392c7ee73fae4f68b963baa3bf5da497e936e15 Author: Jan Wedekind (Dr) Date: Wed Jul 13 08:17:41 2016 +0100 Separate decoder calls from packet handling commit 91b7b099124ee4be5ce49d542d4cbabb6c4c0e8c Author: Jan Wedekind (Dr) Date: Tue Jul 12 22:24:02 2016 +0100 Installation documentation commit 92772def56e8b130761ea0cdf0bc0352f83aa2ed Author: Jan Wedekind (Dr) Date: Tue Jul 12 22:09:04 2016 +0100 Use scm_misc_error instead of scm_syserror commit 4160ebdb30dc7d1a90028e301fd2cefe8acd7fbc Author: Jan Wedekind (Dr) Date: Tue Jul 12 21:43:02 2016 +0100 Fixing some unresolved symbols commit 8f3979188cd787c6b5dff04315196a88d32ee2c4 Author: Jan Wedekind (Dr) Date: Tue Jul 12 16:40:00 2016 +0100 Add "aiscm" to native library names commit 0b07a44b0d46b7555c11faa71a88708e7720dfc2 Author: Jan Wedekind (Dr) Date: Tue Jul 12 12:42:04 2016 +0100 Flat release badge commit 6733e9618238fc64eafe74da5d2dcf75f9997878 Author: Jan Wedekind (Dr) Date: Tue Jul 12 12:34:25 2016 +0100 Add "--yes" to apt-get options commit 40ba6d0f3330051f9508f8abdd860aa20997549f Author: Jan Wedekind (Dr) Date: Tue Jul 12 12:31:25 2016 +0100 Adding Travis CI commit 214e091e9a454d876bfa782907f2923ce1a29474 Author: Jan Wedekind (Dr) Date: Tue Jul 12 12:07:54 2016 +0100 Refactor wrapper code for native bindings commit 9e8c26b48eff6d533fac4e7aa819bc2d021317e2 Author: Jan Wedekind (Dr) Date: Tue Jul 12 07:40:59 2016 +0100 Changed audio packing code commit 633a5da3e235362c2f77e10061b44bbcc68fc928 Author: Jan Wedekind (Dr) Date: Mon Jul 11 21:47:54 2016 +0100 Close window if image is "#f" commit 3ceba55c728ab1a6ff735384d8db6fd67f25a93f Author: Jan Wedekind (Dr) Date: Mon Jul 11 21:18:13 2016 +0100 Added FFmpeg audio example commit 7f4e2dbd22351eb7f99f93287bc86af2547779bf Author: Jan Wedekind (Dr) Date: Mon Jul 11 12:56:58 2016 +0100 Add missing declaration for "pack_audio" commit 05e712caaa04324859a491fb0e0f8616e914ec02 Author: Jan Wedekind (Dr) Date: Mon Jul 11 12:51:10 2016 +0100 Disable complex conjugate test commit c734bf2cccd0a96f93d2a132f9ce394bbd4db4e3 Author: Jan Wedekind (Dr) Date: Mon Jul 11 12:42:49 2016 +0100 Pack audio data commit eb0826a23b6aedbb10ba755725e35f845572b9e1 Author: Jan Wedekind (Dr) Date: Mon Jul 11 07:53:28 2016 +0100 Pack audio samples commit 7fcff8ed9a3f959637297a9f1727782871cfdf57 Author: Jan Wedekind (Dr) Date: Sun Jul 10 22:19:02 2016 +0100 Skip stereo audio test commit 4f64c1229872a0d924508075941f0d01a153c72c Author: Jan Wedekind (Dr) Date: Sun Jul 10 21:33:55 2016 +0100 Try framerate from AVStream instead commit bfe21488430176290dfe8ddc142ab600e4b646a3 Author: Jan Wedekind (Dr) Date: Sat Jul 9 23:10:40 2016 +0100 Got initial audio input working (hack) commit d7b7e25c6239e3d0655713a285478ae3747db610 Author: Jan Wedekind (Dr) Date: Sat Jul 9 22:09:56 2016 +0100 Use av_packet_unref instead of av_free_packet commit 4ac1026b0bfc920dce123380406c64686a9c54a3 Author: Jan Wedekind (Dr) Date: Fri Jul 8 22:57:32 2016 +0100 Read audio (WIP) commit fcc47ab6ca7310a3cb8bf5a198db3ff8aed178c6 Author: Jan Wedekind (Dr) Date: Fri Jul 8 21:48:20 2016 +0100 Stereo audio commit 810d1eb3eba65275818f65d5d4edd137d0374fdf Author: Jan Wedekind (Dr) Date: Fri Jul 8 21:14:19 2016 +0100 Simpler check commit 9f4a6a48c9609f68c144fd3f9cf07b9c65be9ec3 Author: Jan Wedekind (Dr) Date: Fri Jul 8 20:57:50 2016 +0100 AVCodecContext.framerate not defined for older FFmpeg versions commit 7e9319853df4526975e60e9fa06e460728fec14a Author: Jan Wedekind (Dr) Date: Fri Jul 8 17:26:07 2016 +0100 Refactor video presentation time stamp code commit 5e415b45f44a6c15620688c80617fd06800ddea8 Author: Jan Wedekind (Dr) Date: Fri Jul 8 17:04:22 2016 +0100 Refactor checks for audio channel commit fdb94e8ba48eab9ec6b815c10aa7609cd18065c9 Author: Jan Wedekind (Dr) Date: Fri Jul 8 16:54:31 2016 +0100 Check for audio channel, refactored check for video channel commit 3381ca11c1c4e4235bc5eb2efc18141ab62d6e5f Author: Jan Wedekind (Dr) Date: Fri Jul 8 16:39:50 2016 +0100 Get sample type of planar audio commit 9b25d9bcab55d0bfda5324e5f9eba95c11c25b9e Author: Jan Wedekind (Dr) Date: Fri Jul 8 12:52:31 2016 +0100 Refactored SMOB data access commit 042bac0c8155c0312348af2466545d1c418563e1 Author: Jan Wedekind (Dr) Date: Fri Jul 8 07:50:45 2016 +0100 Refactor codec initialisation commit 11c659a6ed2b4be837487b49f041602f101ccaac Author: Jan Wedekind (Dr) Date: Fri Jul 8 07:36:58 2016 +0100 Determine audio format commit 793ef9478cbfc5d158a35a674de514f7c35ab965 Author: Jan Wedekind (Dr) Date: Thu Jul 7 21:59:31 2016 +0100 Check for av_frame_get_best_effort_timestamp and av_frame_alloc commit ca8f6833a54b143c043ed665d000f6ae3b1e1bea Author: Jan Wedekind (Dr) Date: Thu Jul 7 21:11:44 2016 +0100 Working on audio type detection commit 3426cb42c64c1e72e346f5efe80cb66005afeb22 Author: Jan Wedekind (Dr) Date: Thu Jul 7 17:12:26 2016 +0100 Put badges back commit 40cb2cb640f0b76773cc7b89c4f798fa81b85d29 Author: Jan Wedekind Date: Thu Jul 7 16:37:48 2016 +0100 Adding circle.yml commit f952abf59d86178267bccb6d364011c41291d6fb Author: Jan Wedekind Date: Thu Jul 7 13:03:40 2016 +0100 Use frame's "pkt_pts" and "pkt_dts" field commit eaf5b3cfa1404ac75915f1299313f4c1a2d91c10 Author: Jan Wedekind (Dr) Date: Thu Jul 7 07:40:37 2016 +0100 Get audio sample rate commit 1d0e79b13b2046ac3814e5f263ab1a24915ff77f Author: Jan Wedekind (Dr) Date: Thu Jul 7 07:40:03 2016 +0100 Return value of avg_frame_rate instead of r_frame_rate commit 22931c0522fcd82c5c2bc874ee8902f856fe5c5f Author: Jan Wedekind (Dr) Date: Thu Jul 7 07:39:46 2016 +0100 Update some comments commit b7a22cd87315f138494f81d1597b9edf63ce020c Author: Jan Wedekind (Dr) Date: Wed Jul 6 22:53:38 2016 +0100 Detect audio channels commit 4072b495da4198b7d185051eed8d9effea415f76 Author: Jan Wedekind (Dr) Date: Wed Jul 6 22:51:49 2016 +0100 Update Dockerfile commit 849635c9d9836c3275eb0eef9fa63e755116a928 Author: Jan Wedekind (Dr) Date: Wed Jul 6 20:40:25 2016 +0100 Minor fixes commit 8d3a45769a593ec19d90e3cef91d00716f0e07bd Author: Jan Wedekind (Dr) Date: Wed Jul 6 20:11:18 2016 +0100 Remove hacks for Ubuntu 14.04 commit f0549182f96cc7c27c8baed0d3ba91ffa0ff9199 Author: Jan Wedekind (Dr) Date: Wed Jul 6 19:53:37 2016 +0100 Remove Circle CI (Ubuntu 14.04 to old) Adding autopkgtest stuff and updated Dockerfile commit fa2f05e970b808dfc77ffb4e3ea881b88eb688c2 Author: Jan Wedekind (Dr) Date: Tue Jul 5 21:27:21 2016 +0100 Check reading last frame of video commit 31835cf7897e4bd5608e6b923489077aea7c1622 Author: Jan Wedekind (Dr) Date: Tue Jul 5 20:55:07 2016 +0100 Change order of arguments of "synchronise" commit 0ef8d797270fd209d710290695c3c4c3dbcdb67e Author: Jan Wedekind (Dr) Date: Tue Jul 5 20:39:46 2016 +0100 Add gettext to dependencies commit 1000e23665b66dfce0b5f916aff551af8d00248a Author: Jan Wedekind (Dr) Date: Mon Jul 4 22:21:10 2016 +0100 Add synchronisation function commit 407bd87716e0378c0ddd93f4d9affaab1b836e41 Author: Jan Wedekind (Dr) Date: Sun Jul 3 22:26:21 2016 +0100 Use time base for video presentation time stamps commit 517027767e7d2efbfc776358000ba019f3fc55e3 Author: Jan Wedekind (Dr) Date: Sun Jul 3 21:50:09 2016 +0100 Added video player example commit e14109b4c9937d062f2443ff763e35ed5887137f Author: Jan Wedekind (Dr) Date: Sun Jul 3 21:11:01 2016 +0100 Put computation of offsets under test commit c1903576ff19967bd45ddce351222a31d7cb1005 Author: Jan Wedekind (Dr) Date: Sat Jul 2 23:09:45 2016 +0100 Add integration test for video player commit 8f93cc49dc75713af87ed6eaacd2fa44fac99c75 Author: Jan Wedekind (Dr) Date: Sat Jul 2 22:50:51 2016 +0100 Added Dockerfile commit 5aa06f9cd2b11c27cc276999e4bfd6e0a7fd0dfc Author: Jan Wedekind (Dr) Date: Sat Jul 2 22:47:30 2016 +0100 Pass display object to video function commit 85a9692098244c063e59bc1775590de03d1c06db Author: Jan Wedekind (Dr) Date: Fri Jul 1 17:53:19 2016 +0100 Get video presentation time stamp commit 379c66e4cc75f1f3223982b8dd04ccca652090b7 Author: Jan Wedekind (Dr) Date: Fri Jul 1 16:53:01 2016 +0100 Shape of V4L2 frames commit 48b1673a656860b5dffa8793a9a80b8e0f164768 Author: Jan Wedekind (Dr) Date: Fri Jul 1 16:45:29 2016 +0100 Check pixel in first frame of video commit e8d328f7c9b4128fda93a195d9f7cf51239aa998 Author: Jan Wedekind (Dr) Date: Fri Jul 1 08:19:01 2016 +0100 Return false at end of video commit be75c1201f8216846f4f26c92949f0e0de80b57d Author: Jan Wedekind (Dr) Date: Thu Jun 30 22:44:33 2016 +0100 Get frame rate of video commit ce71ef70b7105af3c19b52607ab5a453583409b9 Author: Jan Wedekind (Dr) Date: Thu Jun 30 12:54:57 2016 +0100 Put C method for array copying under test commit 94d1071128f851761a75188929a66be4b31b76e2 Author: Jan Wedekind (Dr) Date: Thu Jun 30 08:24:05 2016 +0100 Return video frames commit 6736ee22b4f89d7eafe6c5a69b4c4a88d7c07c98 Author: Jan Wedekind (Dr) Date: Wed Jun 29 20:06:29 2016 +0100 Disabled one test commit 03518dabd9715c16a69b6c0b4da79cf1c48c672f Author: Jan Wedekind (Dr) Date: Wed Jun 29 19:55:53 2016 +0100 Enabled some tests commit d64cac3919f9b8203e52a462536d9406c2272be7 Author: Jan Wedekind (Dr) Date: Wed Jun 29 17:36:28 2016 +0100 Loop until video frame is found commit c1587f4350f695bb318a7ead9d39ca478b4e0b45 Author: Jan Wedekind (Dr) Date: Wed Jun 29 08:38:21 2016 +0100 libavformat version commit 45147f2719b3d4a7efd4d8fae56f04fa380e7675 Author: Jan Wedekind (Dr) Date: Wed Jun 29 08:34:49 2016 +0100 libavcodec version commit 3d78dde80fe130d67eeeca27957fd06e8a5c1bf7 Author: Jan Wedekind (Dr) Date: Wed Jun 29 08:02:48 2016 +0100 libavutil version on Ubuntu commit 5329810266097a5e1699be50fef2aa0c81cbfcb5 Author: Jan Wedekind (Dr) Date: Wed Jun 29 07:45:05 2016 +0100 Try to fix problem on Ubuntu commit 4e38b63f882d9f448a4e1e1df3a1cfb5342142c8 Author: Jan Wedekind (Dr) Date: Wed Jun 29 07:31:17 2016 +0100 Add libavcodec and libavutil to dependencies commit aa42ece0416a1503f4575e704e22e824155a0e68 Author: Jan Wedekind (Dr) Date: Tue Jun 28 22:27:09 2016 +0100 Packet reading commit 7eedb74f236ea9f2e8ce284b7033b78464d7aedb Author: Jan Wedekind (Dr) Date: Tue Jun 28 20:47:06 2016 +0100 Try simpler circle.yml commit 9014f8848a486124c82327bf52324fba699e272e Author: Jan Wedekind (Dr) Date: Tue Jun 28 20:30:38 2016 +0100 Updated Ansible script commit b21057c082290d394090c28bcca7969ed8691d55 Author: Jan Wedekind (Dr) Date: Tue Jun 28 12:48:04 2016 +0100 Remove Makefile.dist from distribution commit 8d4ad0c748f2536aa2bf0d781f2c674290bacf1b Author: Jan Wedekind (Dr) Date: Tue Jun 28 12:44:41 2016 +0100 Bugfix for Ansible script commit 8e4285d8a9eec4441b36702ae2e71c379192af44 Author: Jan Wedekind (Dr) Date: Tue Jun 28 12:41:37 2016 +0100 Use Ansible script commit 342b2342d4df1998ac49ad6212dcbf94bd266410 Author: Jan Wedekind (Dr) Date: Tue Jun 28 12:14:03 2016 +0100 Ensure video stream available when checking size commit 9641a4fba72ec1552200fc660be8624f364ea5aa Author: Jan Wedekind (Dr) Date: Tue Jun 28 12:03:39 2016 +0100 Removed Makefile.dist commit e621f83a596b0a788cd107a7b290a1da18ccf5d0 Author: Jan Wedekind (Dr) Date: Tue Jun 28 12:00:39 2016 +0100 Fix version number commit 5a87216680bb2461581ebcb0da3315c7e3b68e33 Author: Jan Wedekind (Dr) Date: Tue Jun 28 08:33:11 2016 +0100 Update dependencies for continuous integration commit ea8739df987066898fc7ac343ba4e08225d9ec15 Author: Jan Wedekind (Dr) Date: Tue Jun 28 08:06:56 2016 +0100 Get shape of video commit c8358f528e5cf20fd7d53f936b7f61167c3e2e42 Author: Jan Wedekind (Dr) Date: Tue Jun 28 07:57:18 2016 +0100 Open codec context commit 4aab1c6734e069c9705f869d5ea0315220e6479e Author: Jan Wedekind (Dr) Date: Mon Jun 27 23:02:34 2016 +0100 FFmpeg open input file commit 7ef96af04a88e39771a01c99f5b3ca3a65a0e8cd Author: Jan Wedekind (Dr) Date: Mon Jun 27 18:22:13 2016 +0100 Removed tests for compile.scm commit 1e560cde76eb68d6c4c8bda3b45ee25be62cf441 Author: Jan Wedekind (Dr) Date: Mon Jun 27 18:20:36 2016 +0100 Remove compile.scm commit 772d8869c127b42bd6d07a65eafc28e186beb310 Author: Jan Wedekind (Dr) Date: Mon Jun 27 18:18:31 2016 +0100 Add empty ffmpeg bindings commit 2dea667b398b05433626c93edbf266fd77c7226f Author: Jan Wedekind (Dr) Date: Wed Jun 22 12:56:20 2016 +0100 Minor docs commit d8268847361322babf00f03e63ea1d0c6df6ac0b Author: Jan Wedekind (Dr) Date: Wed Jun 22 07:51:46 2016 +0100 Minor mods commit bd0a77d91398ab69d873fe8178ebababb8babd00 Author: Jan Wedekind (Dr) Date: Wed Jun 22 07:48:19 2016 +0100 Add some binary examples commit a90883198f0a61a79a50d3cc0eda764c829d3d99 Author: Jan Wedekind (Dr) Date: Tue Jun 21 21:20:50 2016 +0100 Modulo example commit 401e6b852eff984a70d344e600f0f1ac50b4e81a Author: Jan Wedekind (Dr) Date: Tue Jun 21 21:13:48 2016 +0100 Divide colour channels by a number commit b53680f2dccc62e2566e26f2fcafe31057158154 Author: Jan Wedekind (Dr) Date: Tue Jun 21 21:02:42 2016 +0100 Binary operations documentation (WIP) commit dd83775b8884ce77c5a2d18eb0d3c0c7c3e14289 Author: Jan Wedekind (Dr) Date: Tue Jun 21 20:26:42 2016 +0100 Inverted example image commit 36639c5fa52b36a7c2d16bdda9e9c0e7ae5aeb24 Author: Jan Wedekind (Dr) Date: Tue Jun 21 12:26:09 2016 +0100 Minor fix commit 8b8ce5f00289e0907944227eb0a519c13b67e665 Author: Jan Wedekind (Dr) Date: Tue Jun 21 12:25:01 2016 +0100 Boolean array commit 5bf7667d1b85d0dac5fe7723275460228feda19f Author: Jan Wedekind (Dr) Date: Tue Jun 21 07:55:35 2016 +0100 Unary array operations commit 4a30102673988629f5ee6aa78ec5d8a7f66f3709 Author: Jan Wedekind (Dr) Date: Mon Jun 20 22:01:54 2016 +0100 Minor fix to example program commit 32653754c59f613cc11b54b9a3bda58b943d6ff6 Author: Jan Wedekind (Dr) Date: Mon Jun 20 21:58:12 2016 +0100 Complex values example commit f9c518e4a160757f7a687a0ed3a0fd1ffdd0c6fe Author: Jan Wedekind (Dr) Date: Mon Jun 20 17:19:01 2016 +0100 Show shape of rolled/unrolled arrays commit 3f54238d68d54d6efab1407043a10f5f95330012 Author: Jan Wedekind (Dr) Date: Mon Jun 20 07:44:02 2016 +0100 Documentation for project, to-array, to-list commit d230b92500f56373be259b8ae48370e6df379395 Author: Jan Wedekind (Dr) Date: Sat Jun 18 22:22:01 2016 +0100 Documentation about cropping of images commit 545dc8011976f7706d64bff364a24da8e3a29b6d Author: Jan Wedekind (Dr) Date: Fri Jun 17 22:29:48 2016 +0100 Added *unroll* to example commit 188987fa163d0cf0b9cacff322745f48a6a88e7c Author: Jan Wedekind (Dr) Date: Fri Jun 17 22:27:36 2016 +0100 Added "roll" example with 3D array commit ca8b0c09c03bf2ac73a6774af27cc1f3b9c17ead Author: Jan Wedekind (Dr) Date: Fri Jun 17 22:14:35 2016 +0100 Documentation about rolling images commit 67cd7941758c843e0fadd51462499d643bb37bdb Author: Jan Wedekind (Dr) Date: Fri Jun 17 21:42:51 2016 +0100 Updated README commit 5c088c2520af92973e42b6a159af6758fbe163b0 Author: Jan Wedekind (Dr) Date: Fri Jun 17 21:32:03 2016 +0100 Version 0.4.2 commit 6d080a438a71ac5b8ddd51f4a1ed771f69da6160 Author: Jan Wedekind (Dr) Date: Fri Jun 17 21:15:56 2016 +0100 Fixed whitespace, removed aiscm.html5 from EXTRA_DIST commit 929df9ea7935bdd957649d247ceac179a032c4db Author: Jan Wedekind (Dr) Date: Fri Jun 17 18:11:15 2016 +0100 Define some Pandoc HTML variables commit 01a1a14d92499b1e899bcedb8e7b4291ffdbe232 Author: Jan Wedekind (Dr) Date: Fri Jun 17 12:36:06 2016 +0100 Tidy up clean rules commit 292897b99d7e1303c6acda67e4ce12b43fac2757 Author: Jan Wedekind (Dr) Date: Fri Jun 17 12:23:28 2016 +0100 Fix references to example files commit aa3a03915b0f73ecc22277b376bf40e736a79be6 Author: Jan Wedekind (Dr) Date: Fri Jun 17 08:28:03 2016 +0100 Moved integration tests into subdirectory commit c79cd9eda97922786b325a607a509eca641af1f3 Author: Jan Wedekind (Dr) Date: Fri Jun 17 07:46:50 2016 +0100 Use "integration" and "reintegration" targets commit 1b41daa54be192c121a53fc70a788c903b12f27b Author: Jan Wedekind (Dr) Date: Fri Jun 17 07:41:44 2016 +0100 Documentation about integer types commit dbb66d2fe710f27e53545d7d6374d73c7d34de57 Author: Jan Wedekind (Dr) Date: Thu Jun 16 21:24:10 2016 +0100 Minor changes commit b3502991ccaaa2d1aaad4f0b8f6d6ca7c5f209b4 Author: Jan Wedekind (Dr) Date: Thu Jun 16 21:20:31 2016 +0100 Adding more documentation commit 4a294d6e63bd2ec5fe99a467e757eabbcd53c7f1 Author: Jan Wedekind (Dr) Date: Thu Jun 16 12:46:28 2016 +0100 Changed colour channel example commit 855149279c3f2954c582c58e975310a8b508b22b Author: Jan Wedekind (Dr) Date: Thu Jun 16 12:44:56 2016 +0100 Use nicer example image commit 936a09e6e5ebf9e13f9c6b12b2e24efddf887f2c Author: Jan Wedekind (Dr) Date: Thu Jun 16 07:51:27 2016 +0100 Example on how to swap red and blue channel commit c3b55613de1b120231864f70fc2b2417a8bcb2ec Author: Jan Wedekind (Dr) Date: Wed Jun 15 17:20:15 2016 +0100 Fix tests for complex coercions involving arrays commit 4aa0e562ddeacd72957903d38f4d9b1ad2f30ed1 Author: Jan Wedekind (Dr) Date: Wed Jun 15 17:19:51 2016 +0100 Add DEBUG environment variable to show assembler code commit 25818b7313f8be20c7ff7af892630fa5d4d33232 Author: Jan Wedekind (Dr) Date: Wed Jun 15 07:48:39 2016 +0100 Compose complex values from arrays commit 7a885b630091e37f99288d1713e4863fde83217c Author: Jan Wedekind (Dr) Date: Wed Jun 15 07:39:35 2016 +0100 Define JIT interface methods commit 87e1b557ea8c8af4b3da7c396d9d8fae081e54ad Author: Jan Wedekind (Dr) Date: Tue Jun 14 21:58:38 2016 +0100 Method for adding type tags to header commit a2f55a10b568a022768e0cd721f02ec5decfb210 Author: Jan Wedekind (Dr) Date: Tue Jun 14 21:25:35 2016 +0100 "symbol-list" for generating lists of symbols commit 2f7ce0044a0d350c25146ac5069c2b9c59c52a98 Author: Jan Wedekind (Dr) Date: Tue Jun 14 17:18:17 2016 +0100 Define methods of arbitrary arity commit a6d3c2b4413f5008a29a21e7549eab1069c812e8 Author: Jan Wedekind (Dr) Date: Tue Jun 14 12:56:12 2016 +0100 generalise code for defining operations commit a465edf0c326d9fa43adb4482c12ce4abb4637ed Author: Jan Wedekind (Dr) Date: Mon Jun 13 22:40:14 2016 +0100 define-nary-dispatch commit 12ab90181646458e95d3c1cb33ce4931385ff896 Author: Jan Wedekind (Dr) Date: Mon Jun 13 17:27:58 2016 +0100 compose RGB from multiple arrays commit 35ce2e88d56dafd6555a5977a375d370f729fe8f Author: Jan Wedekind (Dr) Date: Mon Jun 13 07:48:46 2016 +0100 compose RGB value from arrays commit 97a26f64106af2d9f8ed0f6a8f13013c8be53b63 Author: Jan Wedekind (Dr) Date: Sun Jun 12 21:55:38 2016 +0100 Coerce RGB array from arrays of scalars commit 063b7bff32aa1df270c193d6604243e3090bbbf6 Author: Jan Wedekind (Dr) Date: Sat Jun 11 20:37:43 2016 +0100 "wrap" method for type matching and wrapping commit 45b30ada7c721fef7c5c8589e73a2b499c6ca520 Author: Jan Wedekind (Dr) Date: Fri Jun 10 23:05:31 2016 +0100 Use "content" in complex implementation commit f821f1099517bf422ad2fefaad7730c409a1d0a2 Author: Jan Wedekind (Dr) Date: Fri Jun 10 17:48:10 2016 +0100 Use "content" in RGB implementation commit 1bc94f133f3b80aafcc254f4a33a5a199438b2b8 Author: Jan Wedekind (Dr) Date: Fri Jun 10 12:27:33 2016 +0100 Add build artifacts commit fa030c1ca6a396cb4561203756dc8b2e6f161a6c Author: Jan Wedekind (Dr) Date: Fri Jun 10 07:44:33 2016 +0100 Add "-q" option to Circle CI commit d88ecbf36fbab9871a62550648e8fd9c0c585a8b Author: Jan Wedekind (Dr) Date: Fri Jun 10 07:37:46 2016 +0100 Display release commit 85cdd26fd7b1322faada05e758d3c541041c150a Author: Jan Wedekind (Dr) Date: Thu Jun 9 12:57:15 2016 +0100 README.md: "tar xJf" instead of "tar xzf" commit b6b371c0ff057ce8890335b051ebb2718eeca88f Author: Jan Wedekind (Dr) Date: Thu Jun 9 12:54:58 2016 +0100 Use bootstrap script in circle.yml commit 2dd05cdce74f1f195d2e818be9d45d077501c3e1 Author: Jan Wedekind (Dr) Date: Wed Jun 8 21:41:14 2016 +0100 Correct position for diagnostic statemetns in test suite commit 2d80b79df6cc89c3a88b57d5d4635d9cbd529291 Author: Jan Wedekind (Dr) Date: Wed Jun 8 07:50:11 2016 +0100 Version 0.4.1 commit b40791e4633a266965e55c2e09eaa619e7a8ea0f Author: Jan Wedekind (Dr) Date: Tue Jun 7 22:02:55 2016 +0100 Refactor delegate-op commit 5e17d65859278f06bdccb7a1d5f3be6855de582d Author: Jan Wedekind (Dr) Date: Tue Jun 7 21:23:22 2016 +0100 Minor simplification commit 19528e5059923bbc7c9d1b6fff145502523c49c1 Author: Jan Wedekind (Dr) Date: Tue Jun 7 17:17:15 2016 +0100 Changed behaviour of "content" for pointer commit 6677b051f2a2f668ad729fca5d1705c39ee4ad0e Author: Jan Wedekind (Dr) Date: Fri Jun 3 23:19:44 2016 +0100 Refactoring delegate-op (WIP) commit 4c6bba3d04ee0561b8fdda356e8966a9d97fe5b4 Author: Jan Wedekind (Dr) Date: Fri Jun 3 22:39:59 2016 +0100 Minor refactor commit be9c3e6bd5159e879cbf27053b9cca742cbb4bfa Author: Jan Wedekind (Dr) Date: Fri Jun 3 22:33:10 2016 +0100 Minor refactor commit 47202fa55880d3d1e5cae69aa9200d4f3e7cdecc Author: Jan Wedekind Date: Fri Jun 3 16:43:39 2016 +0100 Refactoring (WIP) commit 55c64b38eed6ea10ffd812517ee78414b2acfc64 Author: Jan Wedekind (Dr) Date: Fri Jun 3 07:49:25 2016 +0100 term -> delegate, removed unary-extract2 commit 7fcabfffa19fe827a666ce82d1897bb82e93c9a1 Author: Jan Wedekind (Dr) Date: Wed Jun 1 22:33:41 2016 +0100 Use scalar base class to simplify code commit 4da0e52d72c23e9c3aeb1edb37425536db4a4011 Author: Jan Wedekind (Dr) Date: Wed Jun 1 22:21:49 2016 +0100 Scalar base class commit 815e10ca0109b4e206541ea73bcbc0aa4310a6ca Author: Jan Wedekind (Dr) Date: Wed Jun 1 12:42:40 2016 +0100 Refactoring delegate-op (WIP) commit cc1e547993a2ba7162c2dee186704e16e0bc3d3d Author: Jan Wedekind (Dr) Date: Wed Jun 1 07:51:47 2016 +0100 Hack to get RGB comparisons working commit e891c1952a8fe4b1e18b8ffedddabfc849c1a545 Author: Jan Wedekind (Dr) Date: Sun May 29 22:13:55 2016 +0100 Hack to get complex conjugate working again commit a8c7e438666d7473919c2955bd5e88dd0e0c4281 Author: Jan Wedekind (Dr) Date: Sun May 29 21:48:06 2016 +0100 Some RGB comparisons passing, complex conjugate broken commit 12289afa141bbaa2f2b4c03c1f6988478e851505 Author: Jan Wedekind (Dr) Date: Fri May 27 17:40:36 2016 +0100 Don't run configure twice commit 8fdc1709a8347df5d4793467cc099e650ab23b41 Author: Jan Wedekind (Dr) Date: Fri May 27 08:19:30 2016 +0100 Minimum/maximum move for 8-bit numbers commit 8f4ce3dcce7e5e5b9809f3c10d0d859bf3ffbb1b Author: Jan Wedekind (Dr) Date: Thu May 26 17:40:53 2016 +0100 min, max for 8-bit values commit b2d4bac26b7e22a73eb2625db74efd3015b978bf Author: Jan Wedekind (Dr) Date: Thu May 26 12:42:14 2016 +0100 Renamed conversion -> coercion commit 81c64fcef1f072a7c7e3ca4f5817f55eb51c9e4a Author: Jan Wedekind (Dr) Date: Thu May 26 07:47:18 2016 +0100 Refactor min and max commit 9971cb7e0254ebb76d4a4f3a573cc9a86735f4c5 Author: Jan Wedekind Date: Wed May 25 12:54:27 2016 +0100 Enable a few tests, remove redundant ones commit 4d85464d067417ff02367a3101f576a24420890e Author: Jan Wedekind (Dr) Date: Wed May 25 07:43:55 2016 +0100 Coercion for unsigned and large signed integer commit 97a3121e2dc2c3dee1b4bdd8c01adc7f42145f61 Author: Jan Wedekind (Dr) Date: Tue May 24 21:44:54 2016 +0100 Extend integer when coercing different signs commit cdc1ff5763564f22ccf3f78233705808029517ed Author: Jan Wedekind (Dr) Date: Fri May 20 22:38:22 2016 +0100 Refactoring comparison code commit 20f04a07c9077c59b62a247bdf5f515e25ac945e Author: Jan Wedekind (Dr) Date: Fri May 20 17:46:29 2016 +0100 Intermediate types for array comparisons commit 724e185f6f55f0138e92e65b108a5602b6e09ca1 Author: Jan Wedekind (Dr) Date: Fri May 20 12:34:44 2016 +0100 Get complex and rgb working again commit c4346a9df01647b70b7279b02562793bb59a5a11 Author: Jan Wedekind (Dr) Date: Thu May 19 21:27:00 2016 +0100 Refactoring comparison code commit 98a7c7de6aa911cddd89f5940cda8b04b512d607 Author: Jan Wedekind (Dr) Date: Wed May 18 22:25:02 2016 +0100 Ignore gh-pages commit 43f57202f9f8af57ecece668b4b857c0fa4ef9bb Merge: 4c58171d 3297821d Author: Jan Wedekind (Dr) Date: Wed May 18 18:17:11 2016 +0100 Merge branch 'master' of github.com:wedesoft/aiscm commit 4c58171dfa989b39839765bb681d52977469ffaa Author: Jan Wedekind (Dr) Date: Wed May 18 17:40:15 2016 +0100 Minor and major value commit 3297821de5a4caa890a7a0733a9c2359c07606d1 Merge: 6df0d9c8 30bd97e1 Author: Jan Wedekind Date: Wed May 18 13:04:47 2016 +0100 Merge branch 'master' of github.com:wedesoft/aiscm commit 6df0d9c874d7b84a4aabd8d2467971ac04b2a797 Author: Jan Wedekind Date: Wed May 18 13:03:16 2016 +0100 Link to Github page commit 30bd97e1625e752151bf692f5ee993399fc71056 Author: Jan Wedekind Date: Wed May 18 13:03:16 2016 +0100 Link to Github page commit dc3bf8c5d41c89e78981dca348749948dda46089 Author: Jan Wedekind (Dr) Date: Tue May 17 17:29:55 2016 +0100 Merged n-ary-struct with n-ary-fun commit b8c9420ec3d2bf445c8f8edca8846cd7ee1b5548 Author: Jan Wedekind (Dr) Date: Tue May 17 12:49:37 2016 +0100 Refactoring delegation code commit dcec590d67114b69ba99ea3aa75f10e83f4cc9b1 Author: Jan Wedekind (Dr) Date: Tue May 17 07:44:27 2016 +0100 Make decompose-arg a local function commit fd3a86f9c100037275ba6b95180c2226eb50ff1d Author: Jan Wedekind (Dr) Date: Mon May 16 22:42:05 2016 +0100 Remove dummy parameters "kind" and "op" commit dc61a1e5ce761d6bc74ca295fc409b67d2c63150 Author: Jan Wedekind (Dr) Date: Mon May 16 08:18:40 2016 +0100 Separate choice of element-wise function from "make-function" commit 4f0e6ff0cb10ac76ca5d32d7026e99fd4163cf05 Author: Jan Wedekind (Dr) Date: Sun May 15 22:32:19 2016 +0100 Remove redundant delegate-op for structures commit 585d38fd3e3ac0643c2740bfaf4b56923baf8bf6 Author: Jan Wedekind (Dr) Date: Sat May 14 23:15:44 2016 +0100 Less use of "... . args" commit d2b88eebb36999b7c22024c7bb1474d9b1a098e9 Author: Jan Wedekind (Dr) Date: Sat May 14 23:12:11 2016 +0100 Changing make-function parameter commit 3aaa23abab00b9679a58acbe6327b7f05005b2f1 Author: Jan Wedekind (Dr) Date: Sat May 14 22:34:27 2016 +0100 Remove need for 'apply' when invoking prepare-arguments commit e67826181ad13564025d3bcf7e4b8ce141cd52aa Author: Jan Wedekind (Dr) Date: Thu May 12 21:40:51 2016 +0100 Simpler type coercion of arguments commit 3db370ff546bf5bffb88811fc5fcca8e5d8e7f36 Author: Jan Wedekind (Dr) Date: Wed May 11 21:41:52 2016 +0100 Reordering of arguments commit 280a79ad290ac13c0f818ecd910cfc47fe7cdf74 Author: Jan Wedekind (Dr) Date: Wed May 11 10:14:21 2016 +0100 Minor changes commit fe7d2585eb6638c3feb075bc0564a6184f24d7e7 Author: Jan Wedekind (Dr) Date: Fri May 6 22:36:56 2016 +0100 Decompose values directly commit 2c54285dc6b07887e48622617b18475257888220 Author: Jan Wedekind (Dr) Date: Tue May 3 22:06:44 2016 +0100 Move code for decomposing arguments commit c6aa5c4b2e40072566919abbb9ab6eb397274e22 Author: Jan Wedekind (Dr) Date: Mon May 2 12:32:20 2016 +0100 Use "unary-extract" to implement conj commit 9a78dbfd4768d2d0a8b93c3a0418cfb885ce7849 Author: Jan Wedekind (Dr) Date: Sun May 1 23:15:10 2016 +0100 (rgb type1 type2 type3) commit 07ba9d5b24d6e87224c1895dc47c2e6c39156487 Author: Jan Wedekind (Dr) Date: Sat Apr 30 21:54:53 2016 +0100 Conjugate of real number is same number commit dc6a4b9f4b97e61151a73c037e4d6c3a38e53367 Author: Jan Wedekind (Dr) Date: Fri Apr 29 22:04:49 2016 +0100 Imaginary part of pointer to real number commit b96e38e8bc23038df5fb2ad234e7ab1da1f9b237 Author: Jan Wedekind (Dr) Date: Fri Apr 29 08:12:28 2016 +0100 "component" method to extract components of value commit d82dab5a13d4b8ece364c4b06605cff607c09c94 Merge: b6bca794 a4697fb0 Author: Jan Wedekind (Dr) Date: Thu Apr 28 20:54:03 2016 +0100 Merge branch 'tensors' commit a4697fb063fa32479d94e416366bebf79c7c2bc4 Author: Jan Wedekind (Dr) Date: Thu Apr 28 20:49:56 2016 +0100 complex conjugate commit f0e0a30f7f08442bcacf7739d2aad1b9a446b294 Author: Jan Wedekind (Dr) Date: Thu Apr 28 13:10:05 2016 +0100 Compile function to get real part of real number commit 96057463de1b0bfeed2f9bf6ee994673498c2f83 Author: Jan Wedekind (Dr) Date: Thu Apr 28 07:35:12 2016 +0100 Move to-type to element module commit f92b9bcf3347bf7087088b5cf0e756b5e4128cfb Author: Jan Wedekind (Dr) Date: Wed Apr 27 21:41:24 2016 +0100 Enabled type conversions for complex number commit 5f472f02a14c41c813b395a5811b917982b6a4ab Author: Jan Wedekind (Dr) Date: Tue Apr 26 17:35:40 2016 +0100 Compose complex number in compiled code commit b97e547221f9d9a5b9a47e6461952544df6793af Author: Jan Wedekind (Dr) Date: Tue Apr 26 07:45:03 2016 +0100 Refactor code for generating copy instructions commit 721374c32eb724762116e63d44ee75267dd9d8b1 Author: Jan Wedekind (Dr) Date: Tue Apr 26 07:31:44 2016 +0100 Compile complex identity function commit a489f29a5503c281cb8ac7c287e4f240ce9d03df Author: Jan Wedekind (Dr) Date: Sat Apr 23 21:30:30 2016 +0100 Enabled I/O tests relying on RGB conversions commit bb2701c35cd12c7622054437332bb27603d3db9e Author: Jan Wedekind (Dr) Date: Fri Apr 22 23:08:25 2016 +0100 Use "n-ary-fun" to define "rgb" function commit b17804e4fe83662c42c29ce314c7be7026a3208f Author: Jan Wedekind (Dr) Date: Fri Apr 22 22:48:25 2016 +0100 Implemented "n-ary-fun" to replace "*ary-fun" macros commit 3869ee937d96564346ff197ec936eda6314cf083 Author: Jan Wedekind (Dr) Date: Thu Apr 21 22:52:20 2016 +0100 Simplified "to-type" for RGB values commit ff4b036b466ecb719cd8e8c23c87630c4906a7b7 Author: Jan Wedekind (Dr) Date: Thu Apr 21 22:48:33 2016 +0100 Content of typed RGB values and parameters commit 71a4cc66ce5fcc61aa55d52083e6f23ed7e6ec05 Author: Jan Wedekind (Dr) Date: Thu Apr 21 17:16:48 2016 +0100 Minor changes commit 726e8bf881112d211112c31a22d76e4d8bc4256e Author: Jan Wedekind (Dr) Date: Thu Apr 21 13:33:04 2016 +0100 Build RGB value commit c06d79696267baf33eeb91b5f565175af028f736 Author: Jan Wedekind (Dr) Date: Thu Apr 21 07:45:19 2016 +0100 Working on RGB operations commit d1fc8ce733aa7958b395d6faed14ffc1aacc9f2e Author: Jan Wedekind (Dr) Date: Wed Apr 20 23:02:41 2016 +0100 Refactoring RGB operations commit 1644ec37e337e8e172eff559356f3638bc52609c Author: Jan Wedekind (Dr) Date: Wed Apr 20 07:37:25 2016 +0100 Remove redundant definitions for AND, OR, and XOR commit 605b14078f8525996818b0cd7c0d0e3160884bf2 Author: Jan Wedekind (Dr) Date: Tue Apr 19 23:53:18 2016 +0100 Merge unary-mutating and binary-mutating commit 6e70a14f3aabedcb5e41a542870b0f403c56e5ef Author: Jan Wedekind (Dr) Date: Tue Apr 19 23:08:58 2016 +0100 Merge unary-functional and binary-functional commit 3d8d24afc89ce1cfdcc42c84700f2891b5ece1f1 Author: Jan Wedekind (Dr) Date: Tue Apr 19 22:27:12 2016 +0100 map-if with multiple lists commit 851ae9c2cfea3c924508ad38944e3979330a701c Author: Jan Wedekind (Dr) Date: Tue Apr 19 22:25:52 2016 +0100 Use append-map instead of concatenate and map commit 787a1290b7ac3a977cef7730e1950b223fb2ccc2 Author: Jan Wedekind (Dr) Date: Tue Apr 19 07:47:17 2016 +0100 Add documentation for JMP statement commit 931dfdc55f2148e017f0a04553c8a62b3d815b63 Author: Jan Wedekind (Dr) Date: Tue Apr 19 07:32:59 2016 +0100 Test for "requires-intermediate?" commit 2581d14d7050a5fdb4088c97477386277d424731 Author: Jan Wedekind (Dr) Date: Mon Apr 18 23:03:43 2016 +0100 Indentation commit 178f8339e51a58b5e9a93e3c92903439c3e7453d Author: Jan Wedekind (Dr) Date: Mon Apr 18 22:26:06 2016 +0100 Replace macros for intermediate values with functions commit ff9cb70982008587f272ef317215521e613bdfae Author: Jan Wedekind (Dr) Date: Mon Apr 18 07:34:14 2016 +0100 Enabled passing test commit 3ed4bff0e7f3faf29f3f09bb273cafff72dd2435 Author: Jan Wedekind (Dr) Date: Sun Apr 17 21:39:27 2016 +0100 RGB type conversions commit 6db4333f8d4c01abb8bdba2a5ea5a348a1c5a673 Author: Jan Wedekind (Dr) Date: Sun Apr 17 20:21:24 2016 +0100 Split up test files some more commit 81d1bafd5ec9dccea812bc50223f57f4fbe9b136 Author: Jan Wedekind (Dr) Date: Fri Apr 15 22:07:46 2016 +0100 Scalar arrays and RGB values * add RGB and scalar array * extract red channel from scalar array commit 64b02ceb4c09de692c0fb7a38fb9138713df4a49 Author: Jan Wedekind (Dr) Date: Fri Apr 15 07:38:15 2016 +0100 Prevent infinite recursion in RGB-scalar operation commit 96d1f35f4b04c2f5acb01c71e1c274e087f868c8 Author: Jan Wedekind (Dr) Date: Thu Apr 14 20:51:01 2016 +0100 More refactoring for delegation of composite ops commit bf429d3967ad251f1505beb13b6fa84a9eb95d47 Author: Jan Wedekind (Dr) Date: Thu Apr 14 17:38:48 2016 +0100 Refactoring operations on composite values commit 0a896c9abf35a715f1922bffb792a7ae01ec568c Author: Jan Wedekind (Dr) Date: Thu Apr 14 12:54:55 2016 +0100 Use automated test counting commit ec7582ae624846ca363f704a24fdc0c6dfaae516 Author: Jan Wedekind (Dr) Date: Wed Apr 13 21:51:43 2016 +0100 Refactor code for inserting intermediate variables commit 2b4997879d6f86baff8af8200cf0f827015c06c7 Author: Jan Wedekind (Dr) Date: Wed Apr 13 12:56:00 2016 +0100 Nested operations commit 67341e90a00465281951f2cf633895d4a84bae16 Author: Jan Wedekind (Dr) Date: Tue Apr 12 21:30:36 2016 +0100 Nested unary functional parameter commit 1ffbabb73e6bac22c82e51c65a63e063e2b49c49 Author: Jan Wedekind (Dr) Date: Tue Apr 12 20:55:52 2016 +0100 Nested operations (second binary parameter) commit afca161bbfc45accf9d70a0efa54aab23d6cd8ce Author: Jan Wedekind (Dr) Date: Tue Apr 12 07:54:06 2016 +0100 Negate RGB value (WIP) commit 1496aabc98f5c331d8504f100fc16a2492399af1 Author: Jan Wedekind (Dr) Date: Sat Apr 9 22:23:07 2016 +0100 Minor refactor commit 57de4daf9840d418ad3e0349f1a349c870eb21dd Author: Jan Wedekind (Dr) Date: Sat Apr 9 22:18:22 2016 +0100 Copying of RGB values commit 1ccaa9a1b51c364eaea0f3c310a8a638adce0809 Author: Jan Wedekind (Dr) Date: Sat Apr 9 22:15:20 2016 +0100 Rename 'cmd' -> 'op' commit 4c89dc3c1742c1264c54bd170925281a3d124eab Author: Jan Wedekind (Dr) Date: Fri Apr 8 21:36:00 2016 +0100 Minor refactor, added bootstrap script commit 050e01e165e1bfa87be4f791fe81bdbfb16ebf9b Author: Jan Wedekind (Dr) Date: Fri Apr 8 17:44:39 2016 +0100 Refactor binary operation macros commit 95d37335825dcc6ee7b5d02b78d51747ece97653 Author: Jan Wedekind (Dr) Date: Fri Apr 8 16:50:49 2016 +0100 Refactoring binary functions (WIP) commit 0733013b9a4453cf29e2ede2c002e401b9a4ba32 Author: Jan Wedekind (Dr) Date: Fri Apr 8 07:48:50 2016 +0100 Negate twice commit 38501f01749cce9bcbb4d8de325e1315c82a06ff Author: Jan Wedekind (Dr) Date: Thu Apr 7 22:30:12 2016 +0100 Refactor unary operation macros commit 67c2c0dcd0d187139ab8c8c508f5842b0f38776b Author: Jan Wedekind (Dr) Date: Thu Apr 7 17:20:18 2016 +0100 Align unary function macros commit 8792c959f68819b8d701c78fd4029ea8a81b12a1 Author: Jan Wedekind (Dr) Date: Wed Apr 6 23:57:20 2016 +0100 Extract colour channels (WIP) commit f00107206ca93bbfce8e9d8a17e2a2b435c92975 Author: Jan Wedekind (Dr) Date: Mon Apr 4 13:04:21 2016 +0100 Refactor memory I/O of RGB values commit c74163c0cde32d7d08cbbaf7eaaf4db645b71d48 Author: Jan Wedekind (Dr) Date: Sun Apr 3 21:17:33 2016 +0100 Identity operation for RGB array commit a8682c548b421542e200d7392daea3a05043c06e Author: Jan Wedekind (Dr) Date: Sat Apr 2 23:07:35 2016 +0100 Write RGB value to memory commit 7ea38a5aa6a58294f6e6cff7b7ffdb9411041b6a Author: Jan Wedekind (Dr) Date: Fri Apr 1 21:16:47 2016 +0100 Remove some uncommented code commit d3b09303b9bdbd525567a75da9fc3c80396d7eb4 Author: Jan Wedekind (Dr) Date: Fri Apr 1 21:08:09 2016 +0100 Introduced raw32 and raw64 commit 0904cf424d7eba9f962c0629739f1c9d16c880d6 Author: Jan Wedekind (Dr) Date: Fri Apr 1 18:00:26 2016 +0100 Replace get-bits with size-of commit 9b505dc3b70ba1bb002ec4d80e65fd5c450688cb Author: Jan Wedekind (Dr) Date: Fri Apr 1 12:54:00 2016 +0100 Type conversions for integer values commit eec85a03f1e7920c96a4ae91de4091c4ddb12390 Author: Jan Wedekind (Dr) Date: Wed Mar 30 23:15:53 2016 +0100 Integer division and modulo commit 46be1da03904357409860610b8be35ad4539d98c Author: Jan Wedekind (Dr) Date: Tue Mar 29 22:54:22 2016 +0100 Integer division (WIP) commit 2a021c3b224ea154c8b7269789d9ef0901325c53 Author: Jan Wedekind (Dr) Date: Mon Mar 28 22:43:27 2016 +0100 Working on division and modulo commit 4fe141a96c60c79c4110f0217d930027ced377ac Author: Jan Wedekind (Dr) Date: Sun Mar 27 22:32:10 2016 +0100 Minor changes commit 968ffad0d7aeffaa5bcfed7dcef4f306ed2675cf Author: Jan Wedekind (Dr) Date: Sun Mar 27 22:23:36 2016 +0100 Macro for using intermediate values commit 99735d57a81ed7b46e438a1602607fe7be6a82a2 Author: Jan Wedekind (Dr) Date: Sat Mar 26 22:20:23 2016 +0000 Fixed comparisons commit 222922b1a4b9f239614cd0e893bd4090edd64305 Author: Jan Wedekind (Dr) Date: Mon Mar 21 22:18:21 2016 +0000 Minor refactor commit 1e1dc548decc40158670558ea97a2a71c68a44db Author: Jan Wedekind (Dr) Date: Mon Mar 21 22:01:39 2016 +0000 Element-wise comparison commit b5997c456a8852809d1fcc55a8bdc157fdd5a602 Author: Jan Wedekind (Dr) Date: Fri Mar 18 22:29:34 2016 +0000 Element-wise comparison with different types commit 06bdb3aa082c53e7f291aa389aa4cbd3e5952e53 Author: Jan Wedekind (Dr) Date: Fri Mar 18 17:40:19 2016 +0000 Element-wise comparison commit 7d9591b712841be677546225027afff5532e5f54 Author: Jan Wedekind (Dr) Date: Fri Mar 18 07:45:11 2016 +0000 Removed some redundant tests commit 4ad9751e491b9af01f014d01f385ae3835432cf6 Author: Jan Wedekind (Dr) Date: Fri Mar 18 07:34:46 2016 +0000 Enabled a few tests commit 6941c60fe4e6286ea14eabed086b3164f58d4d74 Author: Jan Wedekind (Dr) Date: Fri Mar 18 07:28:27 2016 +0000 Removing mov-part from module export commit 4291ee43b60d9dfc0a30e7404f3c3f6c00ca358b Author: Jan Wedekind (Dr) Date: Thu Mar 17 23:12:50 2016 +0000 Implemented mov-signed and mov-unsigned commit 6d48869097216eb3dea6e3f85dbeccf34dd454e8 Author: Jan Wedekind (Dr) Date: Thu Mar 17 17:56:27 2016 +0000 Element-wise not commit 43e722e3d9cbde410da3710e9ecf0d51c58e1cb6 Author: Jan Wedekind (Dr) Date: Thu Mar 17 17:02:40 2016 +0000 Boolean or and boolean operations with mixed input commit b52045882df436ab87cf033439a5dabf75db7a9b Author: Jan Wedekind (Dr) Date: Thu Mar 17 13:08:30 2016 +0000 Implement element-wise boolean comparison commit 7dc802374c2eae78c3e5a24b535b6ce82731b95c Author: Jan Wedekind (Dr) Date: Wed Mar 16 17:34:58 2016 +0000 Element-wise not-equal zero commit 038d7d061472f4d73e03a355ac2e748d42031918 Author: Jan Wedekind (Dr) Date: Wed Mar 16 12:57:40 2016 +0000 Renaming some functions commit 29b5e25d6984344e30a0ce65e22b8306cd0b3ee7 Author: Jan Wedekind (Dr) Date: Wed Mar 16 07:52:15 2016 +0000 "operand" method for reading value from register or memory commit e28f137cc3e9ca99f11e9f8dcefffd822657ca29 Author: Jan Wedekind (Dr) Date: Tue Mar 15 22:25:17 2016 +0000 Element-wise comparison with zero commit 65895e31386b6fa2f5800fce0b51c8436915cabe Author: Jan Wedekind (Dr) Date: Tue Mar 15 12:58:34 2016 +0000 Test shl and shr commit 786d9bd3151835ed642cc2282d1fb52088743733 Author: Jan Wedekind (Dr) Date: Tue Mar 15 07:50:07 2016 +0000 More binary operations commit 1d37c39d32b18acc88f3f2952c5fe613941af495 Author: Jan Wedekind (Dr) Date: Mon Mar 14 21:50:40 2016 +0000 Duplication of arrays commit 3a3307692d3a1af7655e4ae258cf8ccc7f7b6260 Author: Jan Wedekind (Dr) Date: Mon Mar 14 17:35:03 2016 +0000 Shift-left and shift-right commit 5da1517822d089e9a2bb104c02d99337cac4bc6b Author: Jan Wedekind (Dr) Date: Mon Mar 14 07:50:36 2016 +0000 Implement binary operations +, -, and * commit 0a1ca84797e7dd3d1af8f84d56be9454e13048ea Author: Jan Wedekind (Dr) Date: Mon Mar 14 07:27:58 2016 +0000 Renamed some methods commit a3d5ee014ae2353d03213c88adc8d9dae1e1c0d5 Author: Jan Wedekind (Dr) Date: Sun Mar 13 22:41:41 2016 +0000 Combined initialisation of tensor and array operation commit c84cc0e51d99b8aeb6d6875c8fd2cd640912d51b Author: Jan Wedekind (Dr) Date: Sun Mar 13 14:47:18 2016 +0000 Small refactor commit ad7338f181d40945f76d14a03c5978e752146c21 Author: Jan Wedekind (Dr) Date: Sun Mar 13 14:42:59 2016 +0000 Get multiplication working commit f9d038399b9416e6d91ba5e225866435ac9fd19b Author: Jan Wedekind (Dr) Date: Sat Mar 12 23:16:07 2016 +0000 Add subtraction commit a13663a90776b7e64a5bad51b669d0e4a8ae02bc Author: Jan Wedekind (Dr) Date: Sat Mar 12 23:08:46 2016 +0000 Refactor unary operation commit 480d4dadc8d04c05e20daca7ce8388cab0d84a7a Author: Jan Wedekind (Dr) Date: Sat Mar 12 22:50:38 2016 +0000 Enable bitwise not commit 0e79e87eebb47f6f6d886a75b69729ed59ce2a86 Author: Jan Wedekind (Dr) Date: Sat Mar 12 22:42:43 2016 +0000 Enabling more tests commit 6e9b56feb5323b8b2a10c271ef1213ad8e44e881 Author: Jan Wedekind (Dr) Date: Sat Mar 12 21:50:28 2016 +0000 More compact element-wise functions commit 63325bf701df4800fd6b496a553902ba968ce057 Author: Jan Wedekind (Dr) Date: Fri Mar 11 17:43:44 2016 +0000 On-the-fly coercion for functions commit c4416bc3eb7bce65df01da09024f2e8b472bbf44 Author: Jan Wedekind (Dr) Date: Fri Mar 11 17:37:12 2016 +0000 op -> term commit 35b7a13c83d89b70983cea7685f778ef0d5958fb Author: Jan Wedekind (Dr) Date: Fri Mar 11 17:33:32 2016 +0000 Reduce unwrapping code commit efde376a876f8e6c253e8fe279642fcb3634a8f7 Author: Jan Wedekind (Dr) Date: Thu Mar 10 12:34:01 2016 +0000 MOVZX not required/supported for converting 32-bit to 64-bit commit ec8a36ce4b88210f8cab7b39f0f7fa444243fd87 Author: Jan Wedekind (Dr) Date: Wed Mar 9 19:31:59 2016 +0000 Enable + for arrays commit cd6c7934e52aaf72afb11885b0cfbaa6e2ab3819 Author: Jan Wedekind (Dr) Date: Wed Mar 9 09:04:12 2016 +0000 Correct number of planned tests commit 7c591fd6e61c279f65b83cee7ead60158563a78e Author: Jan Wedekind (Dr) Date: Wed Mar 9 08:37:27 2016 +0000 Compile function for negating array commit e2e207f5e7bd73e8dccbac56c03cd1cbaa9063aa Author: Jan Wedekind (Dr) Date: Wed Mar 9 07:52:35 2016 +0000 Refactor binary operation commit e961c14b2f7bedc1e6ffde734109cd6890235d0d Author: Jan Wedekind (Dr) Date: Wed Mar 9 07:34:48 2016 +0000 Disable operators and tests commit 7e8985397d930ba5f2c17abef1bd873622d3ffc6 Author: Jan Wedekind (Dr) Date: Tue Mar 8 22:24:13 2016 +0000 Unary negation of element commit ad29527ac0f136b5266db45b89d9184beb18eddf Author: Jan Wedekind (Dr) Date: Tue Mar 8 08:19:42 2016 +0000 expression -> parameter commit 124db4dd29c2c63a4067544e1299ee91909559f5 Author: Jan Wedekind (Dr) Date: Tue Mar 8 08:01:22 2016 +0000 Disable broken tests commit aeaf15bfb48edbceef6ed58030ee2b16b77d605b Author: Jan Wedekind (Dr) Date: Tue Mar 8 08:00:46 2016 +0000 Remove code fragments commit 69f1097233e1cf110296298f72d3d32c79e654bb Author: Jan Wedekind (Dr) Date: Mon Mar 7 22:19:40 2016 +0000 Array-array operation commit a7e31fec953fe6da15bdab08de19472813aab606 Author: Jan Wedekind (Dr) Date: Mon Mar 7 17:24:05 2016 +0000 Less variables in test suite commit 0b234cb1edcdcfd5e71e698347cd225d5df8d091 Author: Jan Wedekind (Dr) Date: Mon Mar 7 12:44:16 2016 +0000 Have lookup object take car of loop variables commit a07cd4e03cec823bdcba90d2ac40de7d22c11dad Author: Jan Wedekind (Dr) Date: Sat Mar 5 15:23:40 2016 +0000 Use tensors for array operation output commit 1d4121205f2ca0b648e34b6c86a5181af7c9dece Author: Jan Wedekind (Dr) Date: Fri Mar 4 22:03:09 2016 +0000 Array-scalar-operation with different types commit f400328bc26b033fac83f800b167f1c1068788be Author: Jan Wedekind (Dr) Date: Fri Mar 4 21:40:52 2016 +0000 Scalar-array operation commit aa73183c68af7b9656f000ae287ab13ae2786899 Author: Jan Wedekind (Dr) Date: Thu Mar 3 22:53:15 2016 +0000 Scalar-array operation (WIP) commit cafefd7be324e67898a23db954f3e96e8b5d517d Author: Jan Wedekind (Dr) Date: Wed Mar 2 22:29:59 2016 +0000 Compile and run array-scalar operation commit 12584a57d9a8bb28f42d7773c1abc047533aa10b Author: Jan Wedekind (Dr) Date: Wed Mar 2 17:43:34 2016 +0000 Array-scalar operation (WIP) commit 5b9d12af426af6b6faef6b759ba80ade2ccececf Author: Jan Wedekind (Dr) Date: Wed Mar 2 07:52:23 2016 +0000 Looping over function (WIP) commit b6bca794d35b16685f617b69566a009d7f845de4 Author: Jan Wedekind (Dr) Date: Tue Mar 1 17:26:05 2016 +0000 Update benchmarking code commit 2c56fcc0e1b1c4554f8fdbbb931048ed1904eea4 Author: Jan Wedekind (Dr) Date: Tue Mar 1 07:51:05 2016 +0000 Tensor-scalar operations (WIP) commit 3fa8dc546be226404599e702e09cb0666ca68832 Author: Jan Wedekind (Dr) Date: Mon Feb 29 17:34:27 2016 +0000 Use intermediate value if coercion requires it Use intermediate register to sign-extend second argument of ADD operation. commit 012f042b8dc445576e50f68e13dbbd30fe703e64 Author: Jan Wedekind (Dr) Date: Mon Feb 29 07:46:11 2016 +0000 Coerce scalar commit da0d495b38012db819f6c105930a50c0ad36f258 Author: Jan Wedekind (Dr) Date: Thu Feb 25 23:09:50 2016 +0000 Generate correct MOV instruction to clip integer value commit 4c80cc72ed78eec985ef6319626d5d3983bf6336 Author: Jan Wedekind (Dr) Date: Thu Feb 25 22:31:06 2016 +0000 Sign-extending integer values commit 5a96fa8f18beda5f52430c420edd9c4854a122ec Author: Jan Wedekind (Dr) Date: Thu Feb 25 07:55:30 2016 +0000 Compile integer + function commit 624f725d14130158b1a2f76191e7105a330f6d7f Author: Jan Wedekind (Dr) Date: Tue Feb 23 21:30:16 2016 +0000 Enable boolean identity commit f4e8fe0eafb484ed73d94c8ea77d5e6fb61d0412 Author: Jan Wedekind (Dr) Date: Tue Feb 23 17:40:03 2016 +0000 Use 'value' accessor commit 5626c4da1e051d33e767c683b6575ff33baf382e Author: Jan Wedekind (Dr) Date: Tue Feb 23 17:21:12 2016 +0000 Tensor operation with 2D array commit 9aeee94b275f9ca22726d2cbe48b5021156d4db4 Author: Jan Wedekind (Dr) Date: Mon Feb 22 22:43:45 2016 +0000 Compile identity function for array commit c20ddbc2bb4ee92db34956f3dcb5332a38b4d321 Author: Jan Wedekind (Dr) Date: Sun Feb 21 22:46:09 2016 +0000 Extract loops from tensor expressions (WIP) commit a69de06f1ae5186342e6ed9a5551914571276480 Author: Jan Wedekind (Dr) Date: Sun Feb 21 22:25:20 2016 +0000 Add code for pointer operations commit 395d704bca78f2579be5584fdfdaf71889fc9c87 Author: Jan Wedekind (Dr) Date: Sat Feb 20 22:50:19 2016 +0000 Initialisation, increment, and body of array loop commit c76af9102f59aee0fc60e9f9a8c37bb457b7f1eb Author: Jan Wedekind (Dr) Date: Fri Feb 19 23:20:27 2016 +0000 Generate code for trivial function commit 938a16ad677518bf989cbe07f48e53ce36f7c1e0 Author: Jan Wedekind (Dr) Date: Thu Feb 18 23:08:21 2016 +0000 Substitution of lookup indices commit 2e4d2266e5229c56acc75b757af814cd036e0b2d Author: Jan Wedekind (Dr) Date: Thu Feb 18 12:51:26 2016 +0000 Build 2D tensor expressions commit 09f0b65e9456c553b8448fc660af4ae193f44813 Author: Jan Wedekind (Dr) Date: Wed Feb 17 22:55:00 2016 +0000 Determine type of tensor expression commit f1cd0de50ede239e4194f861109198bd39d07eae Author: Jan Wedekind (Dr) Date: Wed Feb 17 22:43:51 2016 +0000 Add dimension and strides to tensors commit 25771dd515d370c0d1bb98912badeb1f5a940f38 Author: Jan Wedekind (Dr) Date: Wed Feb 17 17:46:06 2016 +0000 Redoing tensor expressions (WIP) commit d48f41ed44355ed54d92f7830b6f74f0bfaf173e Author: Jan Wedekind (Dr) Date: Wed Feb 17 17:35:34 2016 +0000 Better testing for array skeletons commit 94a4cbee952ddfe7d363997b0d57264fd5ddedf5 Author: Jan Wedekind (Dr) Date: Wed Feb 17 17:20:04 2016 +0000 Revert to initial implementation of skeleton commit a60bd83cffd78cfa445f9f264bf58b994690ee36 Author: Jan Wedekind (Dr) Date: Wed Feb 17 07:49:45 2016 +0000 Moved dimension to tensor, added typecode method commit 8c87c1a75d34dd69334c93923d2e0786c1797224 Author: Jan Wedekind (Dr) Date: Tue Feb 16 22:30:44 2016 +0000 Build tensor expressions commit 5404230226b2320118f57dfc5eff2e6f8df61d5d Author: Jan Wedekind (Dr) Date: Tue Feb 16 17:46:59 2016 +0000 Tensor and lookup objects (WIP) commit c39c8e79c3474546c735d28ccfa91ba79f384f3d Author: Jan Wedekind (Dr) Date: Tue Feb 16 12:23:59 2016 +0000 Disabled higher-level JIT tests commit a6af34f94caf8d65d27016a537a88978c900c986 Author: Jan Wedekind (Dr) Date: Mon Feb 15 21:42:14 2016 +0000 Playing around with tensor expressions commit f1ab507bc09164485a169a71ba831ce2a9e57322 Author: Jan Wedekind (Dr) Date: Mon Feb 15 12:38:48 2016 +0000 Experimenting with tensors commit 46e81285e5544c01dfe652929ee5ec41fea02abe Merge: 52901649 4843e271 Author: Jan Wedekind (Dr) Date: Fri Feb 12 21:28:11 2016 +0000 Merge branch 'master' into tensors commit 4843e27175078c6da8cd05036a758ef48ae4743c Author: Jan Wedekind (Dr) Date: Fri Feb 12 21:27:57 2016 +0000 Added link to Lush commit 52901649958e7146d2684b467fcee575741ce51c Author: Jan Wedekind (Dr) Date: Fri Feb 12 21:27:41 2016 +0000 Playing around with tensors commit 1e25fefc9f2783d9565e8de8290678b4541f0156 Author: Jan Wedekind (Dr) Date: Fri Feb 12 07:53:42 2016 +0000 Link to Theano commit d9bf7e43fff840fe31aafa60c83902c06e5ee86d Author: Jan Wedekind (Dr) Date: Thu Feb 11 07:37:12 2016 +0000 Bugfix for V4l2 commit 0d1b390ac51954d62465a9200b58bad3bb2d26f4 Author: Jan Wedekind (Dr) Date: Wed Feb 10 22:48:12 2016 +0000 Bugfix for IO_READ mode commit 4e99e28fc05bc5c3c7e4703766284b35c669a9ef Author: Jan Wedekind (Dr) Date: Wed Feb 10 22:43:41 2016 +0000 Align data when loading/constructing image commit 6652d8e46c8ff71d58f6c0a7270cd79286b7d5c3 Author: Jan Wedekind (Dr) Date: Wed Feb 10 21:35:09 2016 +0000 Removed pacat.c and parec.c commit 15c8056a67fda99d74f411eadfc00351dd3f6641 Author: Jan Wedekind (Dr) Date: Wed Feb 10 16:44:33 2016 +0000 Minor changes commit 7ae0cddc3267ce51afaa3da94f3b7b168e4631f6 Merge: fe7f2928 a0bf8f2f Author: Jan Wedekind (Dr) Date: Wed Feb 10 16:42:53 2016 +0000 Merge branch 'master' of github.com:wedesoft/aiscm commit fe7f2928244336123e8530a32caebd1e7846c7ef Author: Jan Wedekind (Dr) Date: Wed Feb 10 16:42:43 2016 +0000 Use buttondown.css commit c98540ecc74c9af6a055326201529f8f46eef8fb Author: Jan Wedekind (Dr) Date: Wed Feb 10 13:05:09 2016 +0000 Added Github Pandoc commit a0bf8f2f1fcccb9a0e847d044f3c7a5787aca4a6 Author: Jan Wedekind Date: Wed Feb 10 08:34:56 2016 +0000 Better Makefile.dist commit 8a1878f16342815bd0c848ed58004f86af7c811d Author: Jan Wedekind (Dr) Date: Tue Feb 9 22:19:07 2016 +0000 Example for JIT compiler commit 71cfdb4f4364411d095b3a16ade88172f63a0365 Author: Jan Wedekind (Dr) Date: Tue Feb 9 12:54:14 2016 +0000 Add images to documentation commit 0e2254ec07389ce5ff80b6a70bb5aca4005f5a4b Author: Jan Wedekind (Dr) Date: Mon Feb 8 22:20:03 2016 +0000 Insert tested assembler example into documentation commit ba459fdaaee02ae22f69856f9462ac78d5ec5588 Author: Jan Wedekind (Dr) Date: Mon Feb 8 22:18:14 2016 +0000 Insert tested code into documentation commit 949918fc6017e584c0fa04f3b53bf8553125a005 Author: Jan Wedekind (Dr) Date: Mon Feb 8 20:49:23 2016 +0000 Integration tests for lists of images commit 3ba235b54b37c5c5b004dfbdcde43db341092639 Author: Jan Wedekind (Dr) Date: Mon Feb 8 07:45:04 2016 +0000 Documentation about reading and writing images commit fd6c6b714f6ee1b03122a65da64b280cb5d42d43 Author: Jan Wedekind (Dr) Date: Sat Feb 6 23:00:10 2016 +0000 Get xz instead of gz file commit d495c6902fc09c26466f1e6e4e1c727909b25cce Author: Jan Wedekind (Dr) Date: Sat Feb 6 22:34:19 2016 +0000 Updating dependencies, enable parallel build commit 4e7f07286f4b548ca4439cf646413ab83dc96f07 Author: Jan Wedekind (Dr) Date: Sat Feb 6 21:45:31 2016 +0000 Version 0.3.1 commit bc6e48b4e7668f3bd9ad5631bedea1e7cce03aea Author: Jan Wedekind (Dr) Date: Thu Feb 4 21:51:01 2016 +0000 Integration test for assembler commit 69fe62ce5b596364c39714288009fb4b5efa8ea7 Author: Jan Wedekind (Dr) Date: Thu Feb 4 21:42:13 2016 +0000 Add some integration tests commit 2f36a5d7363e1686a8c6ee97e4afb34e7f20abbd Author: Jan Wedekind (Dr) Date: Thu Feb 4 17:22:14 2016 +0000 Adding some integration tests commit 53e8814b4b0fe7b908ab6de547359148728f494d Author: Jan Wedekind (Dr) Date: Wed Feb 3 21:50:32 2016 +0000 Added fix for missing build-aux/config.rpath commit abbd14d5a713f4b82746d484a09000315c7d37b4 Author: Jan Wedekind (Dr) Date: Wed Feb 3 21:44:11 2016 +0000 Use GUILE_PKG instead of PKG_CHECK_MODULES commit 0b3d38e9dde654d2bf2be076ddb68e849ea65cbc Author: Jan Wedekind (Dr) Date: Wed Feb 3 21:13:37 2016 +0000 Audio I/O with different sample types commit 8c875d42ca4e59097814e0c15bb7ee139f7a89c9 Author: Jan Wedekind (Dr) Date: Mon Feb 1 17:38:28 2016 +0000 Added some sample format constants commit 72bd1ea57c14262b6981bdc3f217e3ee2a955360 Author: Jan Wedekind (Dr) Date: Mon Feb 1 17:23:06 2016 +0000 Make method names in error message match registered name commit 33237f6080d5dde7cd27c300da07d46a3dc7308a Author: Jan Wedekind (Dr) Date: Mon Feb 1 17:16:29 2016 +0000 Example for pulse audio input commit 950e175fb7d1976b94dbc826f961be96d4a17ba4 Author: Jan Wedekind (Dr) Date: Mon Feb 1 12:50:22 2016 +0000 Record audio commit 4248b0ec0ae49a9530440a2de6345d21ad020780 Author: Jan Wedekind (Dr) Date: Mon Feb 1 07:31:55 2016 +0000 Add ffmpeg examples commit d45876d87cfd15f1077a82e11c54102eca6a39b9 Author: Jan Wedekind (Dr) Date: Mon Feb 1 07:31:18 2016 +0000 Flush audio buffer commit 087196fe75ab1e4c772899a9d6e143e42d37f854 Author: Jan Wedekind (Dr) Date: Sun Jan 31 21:31:27 2016 +0000 Working on Pulse audio recording bindings commit dde31fae299d8f7c84ea44bb9b259f536068d574 Author: Jan Wedekind (Dr) Date: Fri Jan 29 21:39:49 2016 +0000 More compact error method commit 2385a196f3d0275568e66dfc1d787fd052da6cd3 Author: Jan Wedekind (Dr) Date: Fri Jan 29 12:56:01 2016 +0000 Check dimensions of audio output array commit e6ebca8e379e3448a2f6b1008cbf1a43375418ef Author: Jan Wedekind (Dr) Date: Thu Jan 28 22:11:52 2016 +0000 Check type of audio data commit ecfad91a64a4e8cfeee12111b36a71c223be2e07 Author: Jan Wedekind (Dr) Date: Thu Jan 28 22:01:48 2016 +0000 Method for draining audio output buffer commit 6aff45fae61125fc414bae94a8f48b83f0609f11 Author: Jan Wedekind (Dr) Date: Thu Jan 28 12:58:18 2016 +0000 Add latency function commit ca25687ead377350f4d2d2c039a605b999ae3536 Author: Jan Wedekind (Dr) Date: Wed Jan 27 23:15:38 2016 +0000 Write to audio device commit f97e023facb80d4ad5ac1b957ee6f40773ed0943 Author: Jan Wedekind (Dr) Date: Wed Jan 27 07:50:30 2016 +0000 Add rate and channel parameter to pulse audio commit daf892697e1a12bb3404a8240bd7a27d0296a425 Author: Jan Wedekind (Dr) Date: Tue Jan 26 22:36:28 2016 +0000 Initialisation of pulse audio commit 429910e235ac73cf6c33bd646bf3095509e34f8f Author: Jan Wedekind (Dr) Date: Tue Jan 26 07:55:22 2016 +0000 Add empty library for pulse audio wrappers commit 0d268c43d6e525fa39c789ebe7abb7bc152ca9cc Author: Jan Wedekind (Dr) Date: Mon Jan 25 13:05:31 2016 +0000 Add pulse audio examples commit 2b82483611f76e1177d2df559819e38d2c9c9007 Author: Jan Wedekind (Dr) Date: Mon Jan 25 12:29:14 2016 +0000 Ensure compact image when saving commit 8853cc632d7b4dfedd489e7c9f1dbcd14221697a Author: Jan Wedekind (Dr) Date: Sun Jan 24 13:09:35 2016 +0000 Disabled test commit 7443132ef9d0ce7ef3a1f42f9c4fc37758649e0f Author: Jan Wedekind (Dr) Date: Sat Jan 23 21:32:06 2016 +0000 Check image type and dimension before saving commit 1667ac3fb3cb176687c83ad036ae5b3877f361ee Author: Jan Wedekind (Dr) Date: Sat Jan 23 20:53:49 2016 +0000 Load and save images without using libswscale commit 76c5484efd16303a8d720aadf2565518fa24dcd9 Author: Jan Wedekind (Dr) Date: Fri Jan 22 21:21:39 2016 +0000 Disable some tests commit 38c310e94a518b2c958a3d1c8005f1105de8cae2 Author: Jan Wedekind (Dr) Date: Fri Jan 22 21:00:15 2016 +0000 Interface to ImageMagick using BGR instead of BGRA commit 0c11693112338d5e2c4b1b17e5b1bfd81a79891d Author: Jan Wedekind (Dr) Date: Fri Jan 22 20:23:46 2016 +0000 Save colour image commit 99f7aeb72454299d7a147d954c0bb42d318e3643 Author: Jan Wedekind (Dr) Date: Fri Jan 22 07:47:39 2016 +0000 Handle errors when writing images commit 5a4df098015be5d35b200c72167759a10978c926 Author: Jan Wedekind (Dr) Date: Thu Jan 21 21:57:40 2016 +0000 Saving of images (WIP) commit 72ee27da7bb0bcedfebdfcc49b24145228660c34 Author: Jan Wedekind (Dr) Date: Thu Jan 21 21:25:54 2016 +0000 Use image list when writing images commit 6468667ad75ec78bed55dc75c361847966413df9 Author: Jan Wedekind (Dr) Date: Thu Jan 21 19:56:24 2016 +0000 Try to write image commit a3f3d7fb09493c9638ddd6515e7902d876d7cda1 Author: Jan Wedekind Date: Thu Jan 21 12:32:31 2016 +0000 Disabled color image loading test commit d805b8ef57520ff02a777f3925e229ceb919c1fb Author: Jan Wedekind (Dr) Date: Thu Jan 21 12:26:20 2016 +0000 Added missing index.png test fixture commit e8e26843ca2daf77f79a129656e1c033345798c2 Author: Jan Wedekind (Dr) Date: Thu Jan 21 07:47:37 2016 +0000 Load greyscale image commit 1ea07e32de663c8d18339435ffe8bd0491e38207 Author: Jan Wedekind (Dr) Date: Wed Jan 20 22:02:03 2016 +0000 Add error handling to ImageMagick commit 64bf9f57814178e8f2bbf8a8aeb352ea531709d6 Author: Jan Wedekind (Dr) Date: Wed Jan 20 20:40:28 2016 +0000 Circle CI specific fixes commit 8717fddbd21633f4a30a7d23c9523dd0683090fd Author: Jan Wedekind (Dr) Date: Wed Jan 20 20:30:57 2016 +0000 Revert changes to Circle CI configuration commit e09513e4bf6c66aefb71cd01d365297a7b69e84c Author: Jan Wedekind (Dr) Date: Wed Jan 20 20:17:59 2016 +0000 Use aptitude to install on Circle CI server commit 6f172f77de0eb10b2f6cd529211875f3ed65765b Author: Jan Wedekind (Dr) Date: Wed Jan 20 17:53:35 2016 +0000 Read image from file commit 0e973047967780b41548a710ba8b2fd17d9b564e Author: Jan Wedekind (Dr) Date: Wed Jan 20 17:35:01 2016 +0000 Add more packages to Circle CI configuration commit 43d0b472d2ce1bb60029b68a54c799dc3fce5a82 Author: Jan Wedekind (Dr) Date: Tue Jan 19 21:49:23 2016 +0000 Load image from file (WIP) commit f4b8ecffec21aa90d665a50ac322b0ec623ec205 Author: Jan Wedekind (Dr) Date: Tue Jan 19 17:46:20 2016 +0000 Switch to ImageMagick core commit 3951fbe1ef8adf06d74fa04feb586d29303a9587 Author: Jan Wedekind (Dr) Date: Mon Jan 18 22:04:29 2016 +0000 Added empty "magick" module commit 26253a6248adbbc8654da6b01ff297ee131e6204 Author: Jan Wedekind (Dr) Date: Mon Jan 18 17:21:11 2016 +0000 Complex conjugate for arrays commit e47160d9d3f84e37be4e97e4a8440bef3cb2ed10 Author: Jan Wedekind Date: Sun Jan 17 21:19:39 2016 +0000 Trying complex number arrays commit ef5b3e92d328bcb875e16b3af159b99bc17ead5e Author: Jan Wedekind (Dr) Date: Fri Jan 15 22:12:05 2016 +0000 Complex number conjugate commit e56f60825f36021e7b8ca7619fb8dc70f56e5cee Author: Jan Wedekind (Dr) Date: Fri Jan 15 12:38:34 2016 +0000 Minor changes commit 19409edac9767bdf97e8982f7a16d3ca02076290 Author: Jan Wedekind (Dr) Date: Thu Jan 14 21:59:52 2016 +0000 Base class for composite does not work commit 6477ba2b9453efaf55a762f4e82f314d0f0152ac Author: Jan Wedekind (Dr) Date: Thu Jan 14 17:10:40 2016 +0000 Real and imaginary part of real array commit 29817065972cf1c0c5df520bf05a96e082bcbc98 Author: Jan Wedekind (Dr) Date: Wed Jan 13 21:04:20 2016 +0000 Get red, green, or blue channel from grey image commit cfd0515eb065ca21630934fe55ea06b9f560f666 Author: Jan Wedekind (Dr) Date: Fri Dec 25 22:20:51 2015 +0000 real-part and imag-part for complex arrays commit 744bdcd5cec0018f648104490525b2a85ddb1e84 Author: Jan Wedekind (Dr) Date: Thu Dec 24 23:07:16 2015 +0000 real part of real number commit a44bb1d98be21603bbb221b12931ba9179b62f6a Merge: b8fa48af a5fd5916 Author: Jan Wedekind (Dr) Date: Wed Dec 23 22:13:39 2015 +0000 Merge branch 'master' of github.com:wedesoft/aiscm Conflicts: aiscm/rgb.scm commit b8fa48af3deb48b59039ad6508fe81a12c546e5a Author: Jan Wedekind (Dr) Date: Wed Dec 23 22:08:12 2015 +0000 Unary plus commit 8946c28c5b1000bdccedfb1762109d96f8574e6e Author: Jan Wedekind (Dr) Date: Wed Dec 23 20:01:26 2015 +0000 Complex arrays commit c61237c81101c1c061e5fe93470a98f7eeed1c3c Author: Jan Wedekind (Dr) Date: Mon Dec 21 14:47:46 2015 +0000 Division involving complex number commit b0bd192ef51b925699c86f3196d20694b5d518fb Author: Jan Wedekind (Dr) Date: Mon Dec 21 14:22:30 2015 +0000 Complex division commit 4ff92c0a26181b42de57b9a9324534e5b8e51f69 Author: Jan Wedekind (Dr) Date: Sun Dec 20 23:06:14 2015 +0000 Add complex multiplication commit 5580c79f9dc474e3016603dc165e821d50de4997 Author: Jan Wedekind (Dr) Date: Sat Dec 19 22:49:36 2015 +0000 Generic operator macro for structures commit 370ea99cb392b3ac62be675b17bacb13124259d7 Author: Jan Wedekind (Dr) Date: Fri Dec 18 22:31:10 2015 +0000 Simplify matching of RGB and complex commit bcc14b7e4d8c34daaf40346ba13b974d56e70d60 Author: Jan Wedekind (Dr) Date: Fri Dec 18 07:49:34 2015 +0000 Test content of pointer directly commit d54632ccc2b0c42daf1de8ba88213f6d87cfe78b Author: Jan Wedekind (Dr) Date: Thu Dec 17 22:07:28 2015 +0000 Replaced 'decompose' with 'content' commit f12e74f0aa1563b80491de577be8e50140312843 Author: Jan Wedekind (Dr) Date: Fri Dec 11 23:38:08 2015 +0000 Bugfix for packing real value into complex array commit f00f93edc4cb7201b6a51ddd86a1a53e1742e601 Author: Jan Wedekind (Dr) Date: Thu Dec 10 17:39:13 2015 +0000 Type conversion for complex numbers commit 9b46b91c909e7e80659a6bf00d2973eeec6bd73f Author: Jan Wedekind (Dr) Date: Thu Dec 10 17:36:08 2015 +0000 Compile code involving arrays of complex numbers commit 28aaf543e4308fb15002d4bba6dbc6d02389702f Author: Jan Wedekind (Dr) Date: Wed Dec 9 17:54:07 2015 +0000 Addition for complex numbers commit 940d2a69a2859ccc3b6765e6280adb5794876ad2 Author: Jan Wedekind (Dr) Date: Wed Dec 9 12:49:13 2015 +0000 'real-part' and 'imag-part' in compiled code commit cc7a6cd63c18ac3648d93d1fa680fc8d9f0aa9ed Author: Jan Wedekind (Dr) Date: Wed Dec 9 07:39:06 2015 +0000 Matching for booleans only commit 3aa413f6b00699079225770a7142414a21088789 Author: Jan Wedekind (Dr) Date: Tue Dec 8 22:57:17 2015 +0000 Introduced commit 416ad5228bed3395392d97a6a97555b8748b9617 Author: Jan Wedekind (Dr) Date: Tue Dec 8 17:50:26 2015 +0000 Make type matching extendable commit a5fd5916a29b13f3cf9e6d31d5def10944458505 Merge: e04c804a f930de74 Author: Jan Wedekind Date: Tue Dec 8 12:35:23 2015 +0000 Merge branch 'master' of github.com:wedesoft/aiscm commit e04c804ac717b01941ce40b88b1370d2faa29a90 Author: Jan Wedekind Date: Tue Dec 8 12:34:58 2015 +0000 Simpler RGB operation implementation commit 0c39cb7b8b2d4d2fe7a36753df589b0862f4c2c1 Author: Jan Wedekind (Dr) Date: Mon Dec 7 22:35:35 2015 +0000 Implement returning of complex values commit f930de745c68a66f3e3d4b380452aad53305ff6e Author: Jan Wedekind (Dr) Date: Sun Nov 29 21:33:43 2015 +0000 Bugfix for size of complex value commit 1f9085eef13503ae0be2f17819a23ce35d6583dc Author: Jan Wedekind (Dr) Date: Sun Nov 29 20:56:10 2015 +0000 Working on complex numbers commit 8a7fb7ef33d3f7169971249af514081c8401e45f Author: Jan Wedekind (Dr) Date: Sat Nov 28 21:18:22 2015 +0000 Using David Kastrup's suggestion http://lists.gnu.org/archive/html/guile-user/2015-11/msg00080.html commit a3e57b8af300343dcbe6d8092e79007f7c132664 Author: Jan Wedekind (Dr) Date: Fri Nov 27 07:48:17 2015 +0000 Make some operations n-ary commit 230e07fd4460c405a2155bd8a7fad658a040ee7c Author: Jan Wedekind (Dr) Date: Thu Nov 26 22:47:07 2015 +0000 n-ary operations && and || commit b6ae617305b2038d0afbfc96d24d21cc198e9110 Author: Jan Wedekind (Dr) Date: Wed Nov 25 07:46:52 2015 +0000 n-ary && and || for booleans commit 943c1b4ab5448f4aeefff5dba8061f434006d03f Author: Jan Wedekind (Dr) Date: Fri Nov 13 12:49:28 2015 +0000 Rename major/minor to max/min commit ef35db0c877e0e8be263bdeb2966c203e053dcd6 Author: Jan Wedekind (Dr) Date: Fri Nov 13 12:36:24 2015 +0000 Fix minor, major for signed byte commit 03dbd2defeb3e5d8dc896b5737c5b146423d8c7e Author: Jan Wedekind (Dr) Date: Fri Nov 13 07:47:45 2015 +0000 Minor simplification commit 20d32748e0c4791baadc78473ea200c13d980d7a Author: Jan Wedekind (Dr) Date: Thu Nov 12 21:12:14 2015 +0000 CMOVcc for less than 16 bits commit f7bf70fb45bfeed43e3a7c8669b3e05dc4f76e4c Author: Jan Wedekind (Dr) Date: Thu Nov 12 12:39:20 2015 +0000 Minor, major for RGB values commit 43dad078e2ec36ffe58ad68f678a4dbc797cd937 Author: Jan Wedekind (Dr) Date: Thu Nov 12 07:51:19 2015 +0000 minor and major for integers commit 34771fa11cd040957d43c5fb60174b4b9778d4e5 Author: Jan Wedekind (Dr) Date: Thu Nov 12 07:43:13 2015 +0000 =0, !=0 for integers commit 8e9c5c6a6a0079b83dab2504558adefc65e1fb87 Author: Jan Wedekind (Dr) Date: Thu Nov 12 07:32:46 2015 +0000 Array operation for 'major' and 'minor' commit e9964837d6093a71867384b9cee7f17a0521acdd Author: Jan Wedekind (Dr) Date: Wed Nov 11 21:38:39 2015 +0000 Bugfix commit dccfe7bb2edd7a5db8d1ad121b55f70bf0013a4d Author: Jan Wedekind (Dr) Date: Wed Nov 11 07:31:45 2015 +0000 Major number of signed and unsigned integer commit a25a18e07dc1cc8e64291ddf878e475736862678 Author: Jan Wedekind (Dr) Date: Wed Nov 11 07:28:19 2015 +0000 swap code positions of major and minor commit 56d6fd620f8062ca068f04a5f893b96feb328061 Author: Jan Wedekind (Dr) Date: Tue Nov 10 22:04:29 2015 +0000 CMOVxx commit fbf2c14415c47077e45a154ce1352373ea478f64 Author: Jan Wedekind (Dr) Date: Tue Nov 10 13:08:38 2015 +0000 CMOVB, CMOVNB, ... commit 828f48f1d795e67eaf41735bf060fe6d2f324208 Author: Jan Wedekind (Dr) Date: Mon Nov 9 22:03:54 2015 +0000 Removed some TODOs commit 4f1ef7adde805ca5d0ad03b1e70fb6080d8cf3bb Author: Jan Wedekind (Dr) Date: Mon Nov 9 22:01:55 2015 +0000 RGB comparison operations commit a51b4ad3e66cb67cbd65ef04010833d51dbeda67 Author: Jan Wedekind (Dr) Date: Sun Nov 8 22:21:11 2015 +0000 Compare RGB values commit 553a06692607ae124f1fc0ee96f9fa9944d3429f Author: Jan Wedekind (Dr) Date: Wed Nov 4 22:14:39 2015 +0000 Version 0.2.3 commit 0921770499eed84d225916158e59c3624b238aba Author: Jan Wedekind (Dr) Date: Wed Nov 4 21:55:49 2015 +0000 Rename get-value -> value commit 81ad89f678f1f7fe5b8bb94fc94e6eccfb235553 Author: Jan Wedekind (Dr) Date: Wed Nov 4 21:40:33 2015 +0000 Moved etc/test.scm code into etc/env.scm commit f666d79b99f4ea7d5d5a62e1c04552c310882edd Author: Jan Wedekind (Dr) Date: Wed Nov 4 12:51:17 2015 +0000 Replace get-value with get commit 7695759a0bb0164ac1dd3dcdcb232d91a4a9c313 Author: Jan Wedekind (Dr) Date: Wed Nov 4 07:56:05 2015 +0000 Replacing get-value with get in some cases commit ca5698c998332641e2dba789ab896d44f5c39287 Author: Jan Wedekind (Dr) Date: Wed Nov 4 07:51:20 2015 +0000 Removed 'decompose' for variables commit 756c4796655cdae84423247df4fcdcd9fc75f887 Author: Jan Wedekind (Dr) Date: Tue Nov 3 17:24:42 2015 +0000 Removed 'types' commit 6a41be935418e91cc117cb41176f4285d017b3b5 Author: Jan Wedekind (Dr) Date: Tue Nov 3 17:14:59 2015 +0000 Remove experimental code commit f451cf0786fe6199a13737fcb724e9aedf6a231f Author: Jan Wedekind (Dr) Date: Tue Nov 3 13:18:32 2015 +0000 Bugfix for boolean variables commit 15e0a1e458c095f2c3265d3f291f2c0699ae6f87 Author: Jan Wedekind (Dr) Date: Mon Nov 2 22:18:19 2015 +0000 Do not use 'types' for return type commit 622ab3bac5b7656963539c9e5303a6dc65994600 Author: Jan Wedekind (Dr) Date: Mon Nov 2 17:47:42 2015 +0000 Removed 'vars' and 'basic' commit 12e042580b1cbc296e78a07bb814459f897d7471 Author: Jan Wedekind (Dr) Date: Mon Nov 2 12:43:59 2015 +0000 Rearranging code commit 6b222fc628d0fa2ad320c89c01083066e6f58a2c Author: Jan Wedekind (Dr) Date: Fri Oct 30 22:54:58 2015 +0000 Construct RGB values in code commit d0a6ae4d4f11988e2c8586f38fe26ae52af7c68a Author: Jan Wedekind Date: Fri Oct 30 12:58:05 2015 +0000 Compose RGB values in compiled code commit 67ea900941c45c1f316b781009b76e82f17ab918 Author: Jan Wedekind (Dr) Date: Thu Oct 29 21:39:16 2015 +0000 Instantiate array-element and element-array methods commit 35eb976c5f4706d4d4fa16e483ca78c561cad363 Author: Jan Wedekind (Dr) Date: Thu Oct 29 17:33:21 2015 +0000 Test RGB operations commit 806511667574941951eb7c0b0451baf6ddbc6c83 Author: Jan Wedekind (Dr) Date: Thu Oct 29 17:21:57 2015 +0000 Added tests for integer operations commit e2977409a695d99e5db1bd4a3d3147db3165a8c8 Author: Jan Wedekind (Dr) Date: Thu Oct 29 07:46:46 2015 +0000 Bugfix for (+ rgb array) commit 01f6e66d57b0754352f561e584674dadea4d3651 Author: Jan Wedekind (Dr) Date: Wed Oct 28 22:07:22 2015 +0000 Delegate RGB operations to untyped class commit 3fca7947b864de8f14888d4b0a5022c6b0e1cbba Author: Jan Wedekind (Dr) Date: Wed Oct 28 12:56:17 2015 +0000 Delegate unary RGB methods to class commit a093298f91e7b8cb39e0a964a2ea5e6de551d196 Author: Jan Wedekind (Dr) Date: Tue Oct 27 17:44:00 2015 +0000 Renamed 'skel' -> 'skeleton' commit bf909a638903887428c74243df62fbc2e2deea73 Author: Jan Wedekind (Dr) Date: Tue Oct 27 16:42:36 2015 +0000 Simplifying 'jit' method commit c98ba117d573cc857753655bd3dfdfdf2bcab0b5 Author: Jan Wedekind (Dr) Date: Tue Oct 27 07:34:18 2015 +0000 'store' operates on elements instead of variables commit 20575643c3b62671befea494fabe4e7ea98c862f Author: Jan Wedekind (Dr) Date: Mon Oct 26 21:45:48 2015 +0000 Changed tests for 'assemble' commit e101471649780b6c329d74569abbfde98110689b Author: Jan Wedekind (Dr) Date: Mon Oct 26 19:19:48 2015 +0000 'make -j 8' -> 'make -j' commit 60a510d8379695965178c3034dfff5943a700286 Author: Jan Wedekind (Dr) Date: Mon Oct 26 19:19:31 2015 +0000 Typo commit 2c0066014586568831059a0782a02f2203afeeae Author: Jan Wedekind (Dr) Date: Mon Oct 26 17:56:00 2015 +0000 Changing 'assemble' commit 0f18cb0a5eacb6121436f5739c354b6e040f5ecb Author: Jan Wedekind (Dr) Date: Mon Oct 26 07:45:02 2015 +0000 Refactoring 'jit' method commit 54eba9bdd00312181da6ee743cabe91d7796a710 Author: Jan Wedekind (Dr) Date: Sat Oct 24 22:43:01 2015 +0100 Replaced 'wrap' and 'unwrap' with 'wrapped' commit b49097186d7194e3ea7949883d828d0c16ed572d Author: Jan Wedekind (Dr) Date: Sat Oct 24 22:22:44 2015 +0100 Removed 'return-type' commit 9405e2583ac15b1b30540dfaad9598910d40684c Author: Jan Wedekind (Dr) Date: Sat Oct 24 21:37:12 2015 +0100 Removed 'is-ptr?' and 'is-var?' commit 929f23b06f4e72e33e9de1bd1a1ec33d47a8dc6e Author: Jan Wedekind (Dr) Date: Fri Oct 23 22:13:52 2015 +0100 More compact code for determining input of command commit 626f9d7b2e84bd50a084fef92d5b7610382d3ee3 Author: Jan Wedekind (Dr) Date: Fri Oct 23 17:51:09 2015 +0100 Introduced 'map-if' commit 388b1d7ffc22e0d0edd3c5b45720471c14267715 Author: Jan Wedekind (Dr) Date: Fri Oct 23 12:48:05 2015 +0100 Remove line breaks in 'repeat' method commit 672b6cc47e64ca4058f78a59c67e496cf6f7a6eb Author: Jan Wedekind (Dr) Date: Fri Oct 23 12:47:39 2015 +0100 Made 'virtual-variables' method smaller commit 6d7d2df7b4f87a33e64ff1205d7f6c0af5973b00 Author: Jan Wedekind (Dr) Date: Fri Oct 23 07:54:51 2015 +0100 Use let-keywords to reduce code commit 70e13da7d74e09dfeaea45aca3cf3559812e69a9 Author: Jan Wedekind (Dr) Date: Thu Oct 22 22:58:01 2015 +0100 Shoehorn pointers and sequences into 'build' method commit f67d4c546a34d294932841e448765b8b2198133e Author: Jan Wedekind (Dr) Date: Thu Oct 22 17:50:47 2015 +0100 Renamed 'elevate' to 'build' commit d8af9855b1a78ec80ea301db845cfcc3442ad287 Author: Jan Wedekind (Dr) Date: Thu Oct 22 17:19:25 2015 +0100 Test that 'vars' generates list of variables commit a5c7a52462bb4dfd972438f15df46d07d0892b98 Author: Jan Wedekind (Dr) Date: Thu Oct 22 13:20:03 2015 +0100 Slightly simpler code to selectively evaluate Simpler code for evaluating element-wise code for elements only commit ff6cc4058a9e4eb2ab1b35ecc196e64d313f4c0a Author: Jan Wedekind (Dr) Date: Thu Oct 22 13:19:28 2015 +0100 README: how to download latest release commit 60aa0b47f8ef36c66575b7a029e61b0cd762d4c6 Author: Jan Wedekind (Dr) Date: Thu Oct 22 13:12:01 2015 +0100 Updated README commit c761bf096c18951ebe2c797e3e3308012fe4439b Author: Jan Wedekind (Dr) Date: Thu Oct 22 08:22:50 2015 +0100 element-type -> project commit 7f0021b76c1589d705c85866069adaee6c9e520d Author: Jan Wedekind (Dr) Date: Thu Oct 22 07:50:01 2015 +0100 Use shortcut for creating variables commit e33c7ea0f359e41f7f94028620892e7f6d530f8e Author: Jan Wedekind (Dr) Date: Wed Oct 21 22:25:57 2015 +0100 Removed 'compose-from' commit 64df636fb1bb65bf497cb6816144ceed30e92e3d Author: Jan Wedekind (Dr) Date: Wed Oct 21 21:33:42 2015 +0100 Fixed test still using 'compose-from' commit 76eb4be832a75e52d85d714ff8cb95b0c518d9fa Author: Jan Wedekind (Dr) Date: Wed Oct 21 17:25:11 2015 +0100 Added tests for 2D array skeletons commit 69e3134fae355f4eef44285a326e99acf420ace3 Author: Jan Wedekind (Dr) Date: Tue Oct 20 22:21:20 2015 +0100 (get-value (skel ...)) -> (basic ...) commit 7b33fed4dc177f0aaa0375352cbadd40bfb6b5c1 Author: Jan Wedekind (Dr) Date: Mon Oct 19 23:03:32 2015 +0100 Reduced scope of retval commit 4f01d7b4f9ed0dd5bc563f8758e105d19a0258d3 Author: Jan Wedekind (Dr) Date: Mon Oct 19 22:40:53 2015 +0100 Changed definition of 'returnable?' commit 4dc26d14e7f85169efe673b5e1404c93df7ea9fb Author: Jan Wedekind (Dr) Date: Mon Oct 19 17:36:52 2015 +0100 Convert boolean return values commit d18d40a78903b5e06d552521985ad93d17e041f3 Author: Jan Wedekind (Dr) Date: Mon Oct 19 12:58:13 2015 +0100 Added missing whitespace commit 422f939d622bf02ecbb206567b9d41f1c8ce9b53 Author: Jan Wedekind (Dr) Date: Mon Oct 19 12:57:23 2015 +0100 Removed broken badges commit 02585c6823283d58d94157cb12ef6df47a234b71 Author: Jan Wedekind (Dr) Date: Mon Oct 19 07:51:32 2015 +0100 Got type-wrapped elements working commit 568801d818ed62f6be52b912b696031764df29d5 Author: Jan Wedekind (Dr) Date: Sun Oct 18 22:56:59 2015 +0100 Minor fixes for fetching RGB values commit ad7bd00e6c50f0f04f6fe032b513b853b543a573 Merge: 9ca5622c 33bbf364 Author: Jan Wedekind (Dr) Date: Sun Oct 18 22:08:45 2015 +0100 Merge branch 'master' into wrapped-elements commit 33bbf3642631b82d45da9970944dcff293b8e472 Author: Jan Wedekind (Dr) Date: Sun Oct 18 22:08:35 2015 +0100 Show build status of master commit 9ca5622c00aae3bcd394c4931e703ba7d46e6074 Merge: 58d94ee0 2d3df70b Author: Jan Wedekind (Dr) Date: Sun Oct 18 22:06:59 2015 +0100 Merge branch 'master' into wrapped-elements commit 2d3df70bd866aff780a364a63b2b1ed30ce7fcfb Author: Jan Wedekind (Dr) Date: Sun Oct 18 22:06:42 2015 +0100 Switched back commit 58d94ee03de3cc97452a6a1418b20db63c73107a Merge: f14d3180 03522dc4 Author: Jan Wedekind (Dr) Date: Sun Oct 18 22:05:05 2015 +0100 Merge branch 'master' into wrapped-elements commit 03522dc4f2bbc33b798f83a0260262300a5630a2 Author: Jan Wedekind (Dr) Date: Sun Oct 18 22:04:39 2015 +0100 Show build status of master commit f14d3180ffcc72735d21d7e8cad47a6f2b4411ef Author: Jan Wedekind (Dr) Date: Sat Oct 17 23:26:13 2015 +0100 Working on wrapped variables commit 31a4cedfe6cfbff04a4ec1c82c40047501d091a3 Author: Jan Wedekind (Dr) Date: Thu Oct 15 07:29:52 2015 +0100 Updated TODO list commit 5eabd85406f23c592f09a5895214213a3ee25d8d Author: Jan Wedekind (Dr) Date: Tue Oct 13 12:53:58 2015 +0100 Updated TODO, formatting change commit 1fb96be95936df3b54aa4f0ccbfeaa4ba31e0c3f Author: Jan Wedekind (Dr) Date: Mon Oct 12 21:19:29 2015 +0100 Display video with multiple channels commit 7de8c0c73e2d8d12685592ec227b88dbdf848524 Author: Jan Wedekind (Dr) Date: Mon Oct 12 17:55:38 2015 +0100 Display list of images commit cbf02f586ec21605f8d9dd14a5085483fa9187f5 Author: Jan Wedekind (Dr) Date: Sun Oct 11 22:38:38 2015 +0100 Bugfix to get <<. >>, /, and % working commit f5394a9d87f482b06eabc85f993458b52b02f2f2 Author: Jan Wedekind (Dr) Date: Sat Oct 10 22:42:01 2015 +0100 Element-wise modulo for arrays commit 05cd6cf74797c83adfae222642b5e9e1c2b5f539 Author: Jan Wedekind (Dr) Date: Sat Oct 10 22:35:38 2015 +0100 Bugfix for modulo "MOV reg, AH" does not work if register 'reg' requires a REX prefix. commit 47a913814f7e4e98e996efa95518daf061f1dcf5 Author: Jan Wedekind (Dr) Date: Fri Oct 9 23:54:26 2015 +0100 Modulo for integers commit de68037385d42a43c7ffc320c17f797e5e182724 Author: Jan Wedekind (Dr) Date: Fri Oct 9 17:59:56 2015 +0100 Modulo (%) for unsigned byte and unsigned short commit 34b0cf1c8158778a0e4b69f297f6d6f411998d17 Author: Jan Wedekind (Dr) Date: Fri Oct 9 16:55:49 2015 +0100 Added comment commit a1f267a8b3de0512ee878128478c24fef11d1939 Author: Jan Wedekind (Dr) Date: Fri Oct 9 16:54:06 2015 +0100 Added AH, CH, DH, and BH commit 26c6836c8171e766899617c4d82c4760086909ba Author: Jan Wedekind (Dr) Date: Fri Oct 9 07:46:52 2015 +0100 Removed superfluous implementation to store commit ba55c60bd134afd29380dd900f0be924fd04a1f5 Author: Jan Wedekind (Dr) Date: Fri Oct 9 07:46:23 2015 +0100 RGB operations ^, <<, >>, and / commit 08a1147422d295249f56c21c8ce36df3cd91d2d6 Author: Jan Wedekind (Dr) Date: Thu Oct 8 22:46:09 2015 +0100 Added a few RGB operations commit 639292b6588a73cabed7d8ad33ac31da0a83c26e Author: Jan Wedekind (Dr) Date: Thu Oct 8 17:47:08 2015 +0100 Removed 'reference' Pointer constructor accepts empty shape argument commit f35553ab144b8a8eab499db57b141434e88eb582 Author: Jan Wedekind (Dr) Date: Thu Oct 8 17:43:56 2015 +0100 Replaced 'unwrap' with 'get' and 'fetch' commit 9a74210de5f795483af605dfe80ef15fd3e31a22 Author: Jan Wedekind (Dr) Date: Thu Oct 8 17:40:49 2015 +0100 Shifted 'wrap' calls around commit 389dbf616230e30e51c7e88edef88712fd3b102d Author: Jan Wedekind (Dr) Date: Thu Oct 8 17:20:32 2015 +0100 Simpler tests for RGB values commit ec5636a107ab28d80166b527a8c5919ce4b360bb Author: Jan Wedekind (Dr) Date: Thu Oct 8 07:50:32 2015 +0100 Return RGB value commit fc2ca37ef2157b60a503877ee4bbba3af70f1d99 Author: Jan Wedekind (Dr) Date: Tue Oct 6 18:15:07 2015 +0100 (sequence (rgb 1 2 3)) commit 82d03295e6725c855c32ba42031f4abce79a7842 Author: Jan Wedekind Date: Tue Oct 6 15:44:14 2015 +0100 Link to Ceempl commit 708d4160a46671ad8afd0c7c1ab57ea7b42dd686 Merge: 9954bf3f f28b654b Author: Jan Wedekind (Dr) Date: Mon Oct 5 22:50:07 2015 +0100 Merge branch 'master' of github.com:wedesoft/aiscm Conflicts: aiscm/rgb.scm tests/test_rgb.scm commit 9954bf3fb1f0d31f82fa6f5e7abc7418f1c66507 Author: Jan Wedekind (Dr) Date: Mon Oct 5 22:48:18 2015 +0100 Type coercion for RGB and 2D array commit 8536b079686c8fa547f9a0502fbbabe9190bbdc5 Author: Jan Wedekind (Dr) Date: Mon Oct 5 22:38:45 2015 +0100 Type coercion for RGB and sequence type commit f28b654b2d65e224b86c199e8e65dd06eee4140d Author: Jan Wedekind (Dr) Date: Mon Oct 5 22:38:45 2015 +0100 Type coercion for RGB and sequence type commit e69b13918dfceb65512fa01288f0fe1c1a3bd128 Author: Jan Wedekind (Dr) Date: Mon Oct 5 07:40:49 2015 +0100 Refactoring RGB plus and minus operators commit ada86b7d8cea7f0a432c22d5ff8db91bd3bec427 Author: Jan Wedekind (Dr) Date: Sun Oct 4 22:56:16 2015 +0100 RGB plus and minus (boilerplate) commit 0967f5b96833e23205a36a5ac65f931534dff11b Author: Jan Wedekind (Dr) Date: Fri Oct 2 18:04:20 2015 +0100 site_SCRIPTS -> site_DATA commit adb94c695482beca6a6748162dadf2317c919d24 Author: Jan Wedekind (Dr) Date: Fri Oct 2 17:35:52 2015 +0100 Refactor extraction of red/green/blue commit 5f9c5b913b1210f0d9de0a81cbc043c20a620d2a Merge: 1afce210 00fc3677 Author: Jan Wedekind (Dr) Date: Thu Oct 1 21:42:37 2015 +0100 Merge branch 'master' of github.com:wedesoft/aiscm commit 1afce210f287e3d09688a34325d4525b86c64996 Author: Jan Wedekind (Dr) Date: Thu Oct 1 21:39:07 2015 +0100 Remove 'param' commit 00fc3677777867497dbd111625e11082b7dc7eeb Author: Jan Wedekind Date: Thu Oct 1 12:52:28 2015 +0100 Add link to Torch/LuaJIT commit 820eee831b67cbb29f652565624916a920a3fbe7 Author: Jan Wedekind (Dr) Date: Thu Oct 1 07:37:14 2015 +0100 Removed some TODOs commit cf2504aa6c25fa6239d363abbaf819d0fa97f858 Author: Jan Wedekind (Dr) Date: Wed Sep 30 22:55:43 2015 +0100 Use 'to-fragment' for simple parameters commit baceca014276f7d81976f37fac9fa1a749ac18fd Author: Jan Wedekind (Dr) Date: Wed Sep 30 17:46:52 2015 +0100 "IMUL r r/m imm" for imm with more than 8 bits commit 6cb6a1115909c2ae5f554856d3f012798c930724 Author: Jan Wedekind (Dr) Date: Wed Sep 30 07:50:32 2015 +0100 Remove indirection for 'code' commit 53e1a0786ad04e5136c087a18130e6e69262c422 Author: Jan Wedekind (Dr) Date: Wed Sep 30 07:43:40 2015 +0100 Remove indirection for 'get-value' commit 5787de367a6226ce967865f0f1554af1ef211433 Author: Jan Wedekind (Dr) Date: Wed Sep 30 07:39:43 2015 +0100 Prevent 'red' being called on sequence skeleton commit d671acb32e9c73202674dc8af816193beedc8507 Author: Jan Wedekind (Dr) Date: Tue Sep 29 21:57:16 2015 +0100 Only instantiate code for elements commit e88c8a8223f7d1a236446ac514837f99145e1a85 Author: Jan Wedekind (Dr) Date: Mon Sep 28 22:42:52 2015 +0100 Renamed some methods commit bcb86462f1afa2971648ba4d8d21e7329bd13d30 Author: Jan Wedekind (Dr) Date: Mon Sep 28 21:59:27 2015 +0100 Use objects instead of list for loops commit 437f19aa8e56f9c43046719727a1cb8d16db5f7e Author: Jan Wedekind (Dr) Date: Mon Sep 28 21:33:08 2015 +0100 Typecode of RGB skeleton Determine typecode of RGB value composed from three variables commit 1945fb9a9593b419b83b9e88a59297038bc9a3ad Author: Jan Wedekind (Dr) Date: Mon Sep 28 13:17:47 2015 +0100 Removed 'for' & 'until', made 'repeat' a function commit 4620c5a2c4050bff0f4c0d8a9cbefdc2dc759271 Author: Jan Wedekind (Dr) Date: Mon Sep 28 07:49:40 2015 +0100 Removed 'let-vars', simplified 'blocked' * removed 'let-vars' macro * converted 'blocked' from macro to function commit 86dc77c8f604231eec33ceb2f24d007355637c0e Author: Jan Wedekind (Dr) Date: Sat Sep 26 21:36:57 2015 +0100 Version 0.2.2 commit edf5c75cfb4266c97f52c94691afd597df55acfa Author: Jan Wedekind (Dr) Date: Fri Sep 25 23:54:04 2015 +0100 Use macros to define generic operations commit 29b8b87c1898a79ac42ff888b4652cc89366fad9 Author: Jan Wedekind (Dr) Date: Fri Sep 25 21:44:49 2015 +0100 Changed debian/copyright variable to GPL-3 commit 1383be934787e1d3ffc1f68e6c6d8149135ed486 Author: Jan Wedekind (Dr) Date: Fri Sep 25 21:31:50 2015 +0100 Fix to get benchmark running commit 495f1933d49b1f8d15a378e339cf0c814bcf37e4 Author: Jan Wedekind (Dr) Date: Fri Sep 25 21:27:37 2015 +0100 Removed construction.gif commit ab8d0e220d71332886ddb78ea434559b847f290d Author: Jan Wedekind (Dr) Date: Fri Sep 25 21:24:39 2015 +0100 Remove Gitter link commit 92e722f7516d1652f26d3ccc384ee0c7934f5c32 Author: Jan Wedekind (Dr) Date: Fri Sep 25 17:55:35 2015 +0100 Spill predefined variable if it is blocked commit efa81731a56f72ae67816d74674756f2db6ca109 Author: Jan Wedekind (Dr) Date: Thu Sep 24 21:55:54 2015 +0100 Ported ome tests over to new JIT methods commit e23e9347dd7a7df92add1c09f5054b14dc92b9b3 Author: Jan Wedekind (Dr) Date: Thu Sep 24 17:53:05 2015 +0100 Removed some unused code commit f682464ed2d9b2ee7eebcbe7673c14823ce1751c Author: Jan Wedekind (Dr) Date: Thu Sep 24 17:29:36 2015 +0100 Added test for blocked predefined registers commit 6ed6b948cf545ca0b96691f1f4a3bc722d3e8cc1 Author: Jan Wedekind (Dr) Date: Thu Sep 24 12:51:47 2015 +0100 Separate selection of spill candidate commit 5f0986f05601424dfe385ea2c90ba122316952e0 Author: Jan Wedekind (Dr) Date: Thu Sep 24 12:37:09 2015 +0100 Make spilling code more modular commit f2e5398eeda300a9c82510bd66f28a280a7c5254 Author: Jan Wedekind (Dr) Date: Wed Sep 23 17:50:56 2015 +0100 XPASS -> PASS commit 14e8e8a7f432fbcbf278794b3c33ea6b359f1f8a Author: Jan Wedekind (Dr) Date: Wed Sep 23 17:44:49 2015 +0100 Call MOV correctly MOV needs to be invoked with arguments of same size (8-bit, 16-bit, ...) otherwise it will not compile correctly in some cases. commit de0963ab355db4fc6e0623c852f4e7561d4af03c Author: Jan Wedekind (Dr) Date: Tue Sep 22 21:39:46 2015 +0100 Bugfix commit cd37173c416590618cefafa1dcaebd5fa6afd931 Author: Jan Wedekind (Dr) Date: Tue Sep 22 17:44:38 2015 +0100 Methods for different types of operations commit af01b3405296653dc7d9f0290c0e17ff389812b2 Author: Jan Wedekind (Dr) Date: Mon Sep 21 22:35:09 2015 +0100 Working on shift-left and shift-right commit 798a3311d1c3b2c800dbe9a353578510b262bcbf Author: Jan Wedekind (Dr) Date: Mon Sep 21 17:32:07 2015 +0100 Added shift by CL operations commit 3b990e174c45465db7d7c6acabaed361a5582039 Author: Jan Wedekind (Dr) Date: Mon Sep 21 07:46:38 2015 +0100 Removed some comments commit 314a1cab4c37bb91d7d8498d1d7bbddfed780c60 Author: Jan Wedekind (Dr) Date: Sun Sep 20 23:02:02 2015 +0100 Convert integer RGB arrays to image commit c82b1be4b48825b77a45a0313cb9259bba03e808 Author: Jan Wedekind (Dr) Date: Sat Sep 19 23:22:39 2015 +0100 RGB type conversion commit d5d17c6e5ca5b03c0ffbc1e78924a52e674a18bc Author: Jan Wedekind (Dr) Date: Sat Sep 19 22:09:15 2015 +0100 Have 'code' return function instead of list commit cb41905b7f6708d8536e166ee63d20a065ddfa3d Author: Jan Wedekind (Dr) Date: Fri Sep 18 17:51:16 2015 +0100 red, green, blue extraction for scalar arrays commit ba12c3ea92fd6f162efe8aa14d79e28a17479fdc Author: Jan Wedekind (Dr) Date: Fri Sep 18 07:48:49 2015 +0100 Extract channels from colour values commit f5ae502a8c18ef074da9e6e62ca63bee1d188d4d Author: Jan Wedekind (Dr) Date: Thu Sep 17 22:34:28 2015 +0100 Fragment defines return value commit ab84b0ebbd0385d6a189c3331fe89aa9957107ea Author: Jan Wedekind (Dr) Date: Wed Sep 16 21:31:29 2015 +0100 (show window array) commit 6d10590c34061e6afe60e27cddc89190f74e8b35 Author: Jan Wedekind (Dr) Date: Wed Sep 16 21:26:54 2015 +0100 Updated TODO list commit fa0c332808eebf8c83ffdf9dfe5fcd5de4667392 Author: Jan Wedekind (Dr) Date: Wed Sep 16 17:41:59 2015 +0100 Swapped colour channels in image conversion commit 69c5cc4135504526a58be5bbd9f4a71879ca3683 Author: Jan Wedekind (Dr) Date: Wed Sep 16 17:37:13 2015 +0100 Extract color channel commit 8e46ad2daf0247fa615fd455241c6a9cf932b909 Author: Jan Wedekind (Dr) Date: Tue Sep 15 22:34:51 2015 +0100 Minor change commit 4cad8d092231dd7ec1fc30742d400b0686c4ad1e Merge: acdd8148 0f77858a Author: Jan Wedekind (Dr) Date: Tue Sep 15 17:51:53 2015 +0100 Merge branch 'master' of github.com:wedesoft/aiscm Conflicts: etc/env.scm commit acdd81484dbdd8941a3d7c11390b7c00b4b96cab Author: Jan Wedekind (Dr) Date: Tue Sep 15 17:49:59 2015 +0100 Fetch and store RGB values commit 0f77858a46936a1f97f0a92ba850d0a937452d80 Author: Jan Wedekind Date: Tue Sep 15 12:51:51 2015 +0100 fragment -> frag in etc/env.scm commit 33a298277361762d564133d9b4e032d4ad9cb6c2 Author: Jan Wedekind (Dr) Date: Tue Sep 15 07:52:26 2015 +0100 Minor changes commit f3161eb70842e7d477bb277b67a20e62b44bb396 Author: Jan Wedekind (Dr) Date: Mon Sep 14 22:49:02 2015 +0100 Better base class of pointer commit 494c219e1f5a62646b9a5187cbda0419e03473ef Author: Jan Wedekind (Dr) Date: Mon Sep 14 17:30:03 2015 +0100 Make 'parameter' more specific commit 596a063ecec554cf689e561a39c1be63beee1e12 Author: Jan Wedekind (Dr) Date: Mon Sep 14 17:26:43 2015 +0100 Minor changes commit b3c87613e0160dc3a7f0aaf0ac35d1391a14d7bc Author: Jan Wedekind (Dr) Date: Sat Sep 12 21:01:50 2015 +0100 Test for intrgb conversion commit 26f84344ce20623e45d93cac81d92d06ad2ff958 Author: Jan Wedekind (Dr) Date: Fri Sep 11 23:24:19 2015 +0100 Convert RGB array to image commit ae3e795bf3c02754de023b21cf4d46666270ddaf Author: Jan Wedekind (Dr) Date: Fri Sep 11 22:17:33 2015 +0100 Convert integer arrays to images commit 327e751c284d82a30a84993317ffcba9af0cd4c3 Author: Jan Wedekind (Dr) Date: Fri Sep 11 21:14:59 2015 +0100 Added support for diagnostic output in test suite commit 6abc0c1846e660a3723b0bdbddb6f583e9e50739 Author: Jan Wedekind (Dr) Date: Fri Sep 11 20:59:52 2015 +0100 Use RGB when converting from image to array commit ff53f34152e1c980a030ffdf031cdc3c4c525084 Author: Jan Wedekind (Dr) Date: Fri Sep 11 17:32:48 2015 +0100 Color channels for scalar values commit f9c75ca17ee30488da1b176a8524e9db82ddabb3 Author: Jan Wedekind (Dr) Date: Fri Sep 11 16:44:34 2015 +0100 Test red, green, and blue channel extraction commit 5a3ebe239e3d862073f7eda09bda0248aaf5efd2 Author: Jan Wedekind (Dr) Date: Thu Sep 10 22:30:26 2015 +0100 Require compiled and installed code for benchmark commit 31c182f09dcf8ddac4f8a2ac2c0959959aad9810 Author: Jan Wedekind (Dr) Date: Thu Sep 10 19:11:57 2015 +0100 Change garbage collector settings commit c23c1d42f97bf0ef60a485a72c3526e850e9c238 Author: Jan Wedekind (Dr) Date: Thu Sep 10 17:45:14 2015 +0100 Type matching for RGB values commit b9e406def5999fc17e645a66b28c9702e69e6e60 Author: Jan Wedekind (Dr) Date: Thu Sep 10 07:43:58 2015 +0100 Bugfix for benchmark commit 3d72b9918fff5ae7bca885aa80b8dfd26377dcdc Author: Jan Wedekind (Dr) Date: Wed Sep 9 21:53:26 2015 +0100 Coerce different RGB types commit 0866583c3a52fce9bcf7a22e2be63cb52c86e375 Author: Jan Wedekind (Dr) Date: Wed Sep 9 21:51:02 2015 +0100 Coercion of RGB with scalar commit f7e53006b6d2d3071cdba6742ddb617420319f23 Author: Jan Wedekind (Dr) Date: Tue Sep 8 21:56:39 2015 +0100 Display typed RGB values commit be1674b10dcd3eae4b3f5342647df0b8c2cc11ef Author: Jan Wedekind (Dr) Date: Tue Sep 8 21:38:22 2015 +0100 Concatenation of byte vectors commit ed19017ddf67864fc4c06031dceb5b022617e090 Author: Jan Wedekind (Dr) Date: Tue Sep 8 21:23:34 2015 +0100 Extract parts from byte vector commit 13945e1656dc8ed99680f075314e13539a8e527d Author: Jan Wedekind (Dr) Date: Tue Sep 8 21:13:26 2015 +0100 Added untyped RGB value commit 83db8cfa7ba734140bd0f7d1e0a1a3531fc91712 Author: Jan Wedekind (Dr) Date: Tue Sep 8 17:51:42 2015 +0100 Unpacking of RGB values commit 35d576741ff1c869ab315afbb25d1d07eb8fda6f Author: Jan Wedekind (Dr) Date: Tue Sep 8 07:50:34 2015 +0100 RGB values (WIP) commit afcb96016ef47b040da5b97a891fd8a1e74629b7 Author: Jan Wedekind (Dr) Date: Fri Sep 4 12:28:31 2015 +0100 Updated TODO commit 2d2ceba44f092c4942ded2f9afffe2efc177831a Author: Jan Wedekind Date: Fri Sep 4 12:09:17 2015 +0100 Return last displayed image commit c0dae908fd059682f6e91eceb9dbf4e0e9e1cc89 Author: Jan Wedekind (Dr) Date: Thu Sep 3 21:54:02 2015 +0100 Convert arrays to image before displaying commit d0840ee873252789e3d54730c06e121d57cdf869 Author: Jan Wedekind (Dr) Date: Thu Sep 3 17:43:56 2015 +0100 Minor simplifications commit 21d67192e0a4f12a7f541ba5d7332f823553cf77 Author: Jan Wedekind (Dr) Date: Thu Sep 3 17:35:29 2015 +0100 Rename 'env' -> 'let-vars' commit dbc10090daff64cab87ea605a2769d720ddf85e1 Merge: 5220b65c 0a1b435e Author: Jan Wedekind Date: Thu Sep 3 16:37:17 2015 +0100 Merge branch 'master' of github.com:wedesoft/aiscm commit 5220b65c16440118c8fa90593219a4577cd728b9 Author: Jan Wedekind Date: Thu Sep 3 16:36:54 2015 +0100 Get benchmark working commit 0a1b435e4e71cbd87dfae47947c2543557606675 Author: Jan Wedekind (Dr) Date: Thu Sep 3 12:50:10 2015 +0100 Use 'env' in more places commit 83d2512ec999de427bde4e6285968fda2d6a210c Author: Jan Wedekind (Dr) Date: Thu Sep 3 07:47:57 2015 +0100 'env' applies 'begin' instead of 'list' commit 383593c09321bd7427a87e7873cd5602fd4d165b Author: Jan Wedekind (Dr) Date: Wed Sep 2 21:45:33 2015 +0100 Split test file for array operations commit 1f35ad15c528e67274a6799c697336f92c4a121e Author: Jan Wedekind (Dr) Date: Wed Sep 2 18:04:45 2015 +0100 Updating version number commit a8758a9cb12b85dccaa6c839c18ae1762a3db457 Author: Jan Wedekind (Dr) Date: Tue Sep 1 18:04:12 2015 +0100 Using code fragments to compile operations commit fbb4145c0e27cd9a3018d807bf847c51d8eb6427 Author: Jan Wedekind (Dr) Date: Mon Aug 31 00:17:02 2015 +0100 Division commit ba9e7c7b30cd4cc429a903bca668645fbc84c248 Author: Jan Wedekind (Dr) Date: Sun Aug 30 23:58:42 2015 +0100 Comparison operations commit e9aa8242f0377d6cd268200683ddd7c48ac2a47b Author: Jan Wedekind (Dr) Date: Sun Aug 30 23:27:54 2015 +0100 Binary boolean operations commit d224de9cc4a55dc5407c0d9833cd766a792f71ee Author: Jan Wedekind (Dr) Date: Fri Aug 28 23:42:08 2015 +0100 Make binary operations more generic commit 2ea7c444d201fd5fb347e4a4d507f58f1cb5ef27 Author: Jan Wedekind (Dr) Date: Fri Aug 28 23:00:46 2015 +0100 Element-wise equal and not-equal zero commit 5c2efc80b2e58e1fb24acca956e93c93b189eedb Merge: e5bde2ca b4b7effe Author: Jan Wedekind (Dr) Date: Fri Aug 28 12:40:35 2015 +0100 Merge branch 'code-fragments' of github.com:wedesoft/aiscm into code-fragments commit e5bde2ca01d4233efd7963127f8fca8739c42eb1 Author: Jan Wedekind (Dr) Date: Fri Aug 28 12:40:08 2015 +0100 Unary operation for code fragments commit b4b7effe79a2fc6a1f83942f916c7347166f03bc Author: Jan Wedekind Date: Fri Aug 28 08:42:48 2015 +0100 Circle CI uses 8 cores commit 6c80c525e4f11b9d56876454ac432b2fd4f8c255 Author: Jan Wedekind (Dr) Date: Thu Aug 27 23:23:41 2015 +0100 Adding more binary code fragments commit 67dfadd525c6f9bbe486d066754de568f68f8214 Author: Jan Wedekind (Dr) Date: Thu Aug 27 22:07:44 2015 +0100 Refactoring commit 1163af1a31981d7fe72f9c7e1bdcaa096184485b Author: Jan Wedekind (Dr) Date: Thu Aug 27 18:05:46 2015 +0100 Macro for creating simple loop commit 9d2dbe02b92f8d944c6c8c9e6ce2353889f7f06a Author: Jan Wedekind (Dr) Date: Thu Aug 27 17:40:55 2015 +0100 INC commit 579fddf717bcf920f283710a4a6ff53766913ef1 Author: Jan Wedekind (Dr) Date: Wed Aug 26 22:38:21 2015 +0100 Add arrays using code fragments commit 68b43f62293d4567413df6ecabf0c8fa48a2148d Author: Jan Wedekind (Dr) Date: Wed Aug 26 17:50:46 2015 +0100 typecast of code fragments commit f5e01ab5c7ebcd412777048ba1a26f53fb6c260b Author: Jan Wedekind (Dr) Date: Tue Aug 25 17:21:15 2015 +0100 Removed temporary commit 3a6ad2e2a8b9be701b25c7c5886d790aed1fa377 Author: Jan Wedekind (Dr) Date: Tue Aug 25 07:46:05 2015 +0100 Refactoring loop-code commit 1414385ff9bbb6fa23edcbfe189d23eef1874891 Author: Jan Wedekind (Dr) Date: Mon Aug 24 22:15:43 2015 +0100 Quick and dirty loop for code fragments commit 4daa83e201d5c53006c974438569627adf2d58d1 Author: Jan Wedekind (Dr) Date: Sun Aug 23 21:35:29 2015 +0100 Remove fragment value commit 7ec4891b3c7064d0f003d78689d08fb56dad3d39 Author: Jan Wedekind (Dr) Date: Sun Aug 23 20:54:19 2015 +0100 Implicit fetching code commit f1b024e4cc1dde6821ce8f94a2f66b7929a01b1e Author: Jan Wedekind (Dr) Date: Sat Aug 22 22:53:53 2015 +0100 Remove duplicate value prevention commit 4ee43bfb0d643ae70d6d2232b6426199905cd762 Author: Jan Wedekind (Dr) Date: Tue Aug 18 22:55:36 2015 +0100 Allocate return value commit c34205e2c9ec363cca9f14f52dca13f7dbd51e6a Author: Jan Wedekind (Dr) Date: Mon Aug 17 22:54:48 2015 +0100 Make assembling of code fragments more generic commit fab8b8418d7cb65b39f6b61635443a0282d61373 Author: Jan Wedekind (Dr) Date: Sun Aug 16 23:14:09 2015 +0100 Decomposition of sequences commit 3987cb82fa68a7c0b0f01b22c2cd1cc773f9addf Author: Jan Wedekind (Dr) Date: Fri Aug 14 23:09:43 2015 +0100 Pointer to pointer copy operation commit 0312c31a7de5ee92e07b25d66213d90892acd7e5 Author: Jan Wedekind (Dr) Date: Thu Aug 13 22:18:02 2015 +0100 Simpler implementation of storing commit afcf6c541d4cee5a637d18b1e43c4d43a5074cc3 Author: Jan Wedekind (Dr) Date: Thu Aug 13 17:37:18 2015 +0100 TODO commit 36b1023d5419da51ae2523cf58980b61efe5943c Author: Jan Wedekind (Dr) Date: Wed Aug 12 17:49:38 2015 +0100 Removed one line of redundant code commit 015b58831074c223853aa55ff4f8fed18511694e Author: Jan Wedekind (Dr) Date: Wed Aug 12 12:45:25 2015 +0100 Introduced code fragment with null result commit 9952d3853b736917f906f131d44d8bbddaa36516 Author: Jan Wedekind (Dr) Date: Sun Aug 9 21:44:38 2015 +0100 'store' should not return anything commit 69386c9f7cdfefc9afe643eacfa048992a7c2a2a Author: Jan Wedekind (Dr) Date: Sun Aug 9 21:30:46 2015 +0100 Storing of data commit ca155f8621ae35e7684e8ff25d1c1e84c1a64a29 Author: Jan Wedekind (Dr) Date: Fri Aug 7 17:57:53 2015 +0100 Compile fetch operation commit f6f19fe2949ba92b0dc87d12dfe642a1ef2e36b6 Author: Jan Wedekind (Dr) Date: Fri Aug 7 08:29:23 2015 +0100 Store stuff in pointers commit d1a024868dd1f14a7b6ac9808c9907f48c59285d Author: Jan Wedekind (Dr) Date: Thu Aug 6 12:36:03 2015 +0100 Proper printing for pointers commit 2a3bfd21e74a8866bf3f7ac2c489ed28be768720 Author: Jan Wedekind (Dr) Date: Thu Aug 6 12:11:48 2015 +0100 Minor bugfix commit 5cc00c630358f5f5f6164b8a515f182b7d8efbce Author: Jan Wedekind (Dr) Date: Wed Aug 5 22:52:05 2015 +0100 Code fragment for fetching value from pointer commit e12beca00bf7b2aa20f53b0e9c09b76a236e0603 Author: Jan Wedekind (Dr) Date: Wed Aug 5 17:12:06 2015 +0100 Print sequence objects made of variables commit 2eefbbec6d757e9345bd61146cae95a0f3ba1bcd Author: Jan Wedekind (Dr) Date: Tue Aug 4 21:40:48 2015 +0100 Added 'jit' method for compiling code fragments commit c9b71231178ec193847403896ad50cec6021fe69 Author: Jan Wedekind (Dr) Date: Tue Aug 4 17:56:40 2015 +0100 'build' method for parametrising code fragment commit 23c80ce8839e85649356456b564013d84f3d015c Author: Jan Wedekind (Dr) Date: Tue Aug 4 17:36:39 2015 +0100 Test addition of different types commit f6d17a33e1fc149e5a892ec9ff6b1377761505e0 Author: Jan Wedekind (Dr) Date: Tue Aug 4 07:44:57 2015 +0100 Moved code fragment implementation commit f2600ef33729a5307403ea83d9d4fae4e3979dfe Author: Jan Wedekind (Dr) Date: Mon Aug 3 22:30:30 2015 +0100 Run operation composed from code fragments commit cc7d6cf815171331d3467cc0c032dc30071874c2 Author: Jan Wedekind (Dr) Date: Mon Aug 3 17:52:31 2015 +0100 Typecasts and addition of code fragments commit 056e4e559dedc2aa8c7833c666358f87c38a04c5 Author: Jan Wedekind (Dr) Date: Sun Aug 2 21:44:23 2015 +0100 Using loop, now on to tested implementation commit e73307542ad4fc069916c70a2ebcbb38864c910e Author: Jan Wedekind (Dr) Date: Fri Jul 31 23:34:57 2015 +0100 Trying out code fragments commit bbb81479c416b11f3903ba45dbebc82f1b6f742c Author: Jan Wedekind (Dr) Date: Fri Jul 31 16:55:36 2015 +0100 Simplified 'define-class*' commit 410d5e1fb144580294a79a191683e196db51b23a Author: Jan Wedekind (Dr) Date: Fri Jul 31 12:42:51 2015 +0100 Bugfix for xorg bindings commit f6fcf1e062e026faf2ea1c68e00925c6a981aa6d Author: Jan Wedekind (Dr) Date: Fri Jul 31 12:42:27 2015 +0100 Changed define-class* commit 830ccaf941e402312a92bbcb1e99764af997bfe2 Author: Jan Wedekind (Dr) Date: Fri Jul 31 12:30:37 2015 +0100 'super' to determine first super class commit b02f525d92fe01bc913fce4f7ad5534048b07864 Author: Jan Wedekind (Dr) Date: Fri Jul 31 12:19:51 2015 +0100 Removed 'def-once' commit 67fbe0edaf698fff01d972ea15ebed56e10093a1 Author: Jan Wedekind (Dr) Date: Thu Jul 30 17:31:30 2015 +0100 Refactor using template-class macro commit c1abbf2f2993664362eae45d03e3eaf4d439f156 Author: Jan Wedekind (Dr) Date: Thu Jul 30 07:33:13 2015 +0100 Template class declaration commit 148d4ca566f10f405d69b363bc12df016ecf2387 Author: Jan Wedekind (Dr) Date: Wed Jul 29 22:24:20 2015 +0100 More compact meta class declaration commit f463121ea281e6c95e1f83040c67baa0054665a3 Merge: 4c35f159 1b8876de Author: Jan Wedekind (Dr) Date: Sun Jul 26 22:21:44 2015 +0100 Merge branch 'master' into code-fragments commit 1b8876deb032a823886eeac74e8616a221200612 Author: Jan Wedekind (Dr) Date: Sun Jul 26 22:21:28 2015 +0100 Use PNG badges commit 4c35f159a53effcfc4304ec8386cc9390fe4625d Merge: e01f58db 90b8fc8d Author: Jan Wedekind (Dr) Date: Fri Jul 24 16:23:21 2015 +0100 Merge branch 'master' into code-fragments commit 90b8fc8d96e74ff9da8e0c0611e4571c2cf70f03 Author: Jan Wedekind (Dr) Date: Fri Jul 24 16:23:09 2015 +0100 Add link to Gitter chat commit e01f58db865272b934116d0dac2abd63aa756c87 Merge: 229a62b0 6eadbac3 Author: Jan Wedekind (Dr) Date: Thu Jul 23 23:15:45 2015 +0100 Merge branch 'master' into code-fragments commit 6eadbac3ddfd14772cd475692d168ce850fb64fa Author: Jan Wedekind (Dr) Date: Thu Jul 23 23:12:40 2015 +0100 Remove Travis CI commit 731d010a2f9a5f799c26a78028ce62b2f0dd0845 Author: Jan Wedekind (Dr) Date: Thu Jul 23 23:05:47 2015 +0100 Added Circle CI badge commit 229a62b049a90e0c970b123734298576ca9c0d00 Merge: d132a1e5 a917356d Author: Jan Wedekind (Dr) Date: Thu Jul 23 22:56:37 2015 +0100 Merge branch 'master' into code-fragments commit a917356dec637bca09a4b914099eb9b8f67b9ba3 Author: Jan Wedekind (Dr) Date: Thu Jul 23 22:54:29 2015 +0100 Add Circle CI configuration commit d132a1e5eba5d0a73988da79ba8486f631b8d8c3 Author: Jan Wedekind (Dr) Date: Thu Jul 23 22:12:52 2015 +0100 Convenience methods to access attributes commit 0cfe9cb77b7d2afa137018b91c82a683556b07bf Author: Jan Wedekind (Dr) Date: Thu Jul 23 07:51:05 2015 +0100 Type conversion commit 393982bf1eaf31bd3a57dfaafe28611f26c501be Author: Jan Wedekind (Dr) Date: Tue Jul 21 17:35:59 2015 +0100 Added jit function using code fragments commit 9eb26ccfa950bfbd5e909510731be11f07bb887f Author: Jan Wedekind (Dr) Date: Tue Jul 21 12:46:36 2015 +0100 Added code fragments commit b6a8a5c3df0f75fee059ca2359d1a028d95e1009 Author: Jan Wedekind (Dr) Date: Mon Jul 20 17:24:37 2015 +0100 Separate instantiation of parameter variables commit fb30abbf7cf5267dc2428adcc4a657c37cd5682b Author: Jan Wedekind (Dr) Date: Fri Jul 17 22:47:43 2015 +0100 Adding XMM* registers commit fe9c0e4ab6ba03ed180c08e3376c11d9ecdd94a9 Author: Jan Wedekind (Dr) Date: Fri Jul 17 22:06:52 2015 +0100 Added tests for register codes commit e1c86345453b86011f5895cf46aa353139daf415 Author: Jan Wedekind (Dr) Date: Thu Jul 16 17:30:29 2015 +0100 Shortcuts for typed arrays commit c67717980e1b919f50d661bf3b0be0d8592e7a0c Author: Jan Wedekind (Dr) Date: Tue Jul 14 17:42:48 2015 +0100 Coercion for floating point numbers commit d380839d108514fc67fc64df8d441dd13ff2a1a3 Author: Jan Wedekind (Dr) Date: Tue Jul 14 17:17:29 2015 +0100 Matching and foreign interface for floating point commit c414ef3afcadc9ec59aa77fe7778bea35845bf9a Author: Jan Wedekind (Dr) Date: Tue Jul 14 07:46:39 2015 +0100 More floating point stuff commit d0cdc3165e3b474617b81b26acfff617f023e180 Author: Jan Wedekind (Dr) Date: Mon Jul 13 23:01:32 2015 +0100 Adding floating point numbers commit 3553a0589f93f2b0dce60f0635606dead50b5b01 Author: Jan Wedekind (Dr) Date: Sun Jul 12 22:36:17 2015 +0100 Added floating point class commit 1b6e60f44a11f2be894158817805515f6478eac1 Author: Jan Wedekind (Dr) Date: Sat Jul 11 22:34:34 2015 +0100 Simplified code for unpacking/packing integers commit 872617d3a4f8327dcbfb7a6638cb97296abffbce Author: Jan Wedekind (Dr) Date: Sat Jul 11 21:40:23 2015 +0100 Version 0.1.8 commit 8fcae10f19482594bfe6a1d8f1c894b6c6e3aaea Author: Jan Wedekind (Dr) Date: Sat Jul 11 21:20:51 2015 +0100 Updating TODO commit f7fb16e33617b5904850f50fdc746a999a548412 Author: Jan Wedekind (Dr) Date: Fri Jul 10 22:09:27 2015 +0100 (write window img) -> (show window img) commit 88e312f931979d55a42e4148bf7c12372ac5410b Author: Jan Wedekind (Dr) Date: Fri Jul 10 21:59:38 2015 +0100 Installation documentation commit ab4e2fef0224eda12e173eb71a31e796ac6a8f69 Author: Jan Wedekind (Dr) Date: Fri Jul 10 21:58:29 2015 +0100 -> commit 5618f74633008f792b0beb8b0d2aeb358aec2037 Author: Jan Wedekind (Dr) Date: Fri Jul 10 17:27:02 2015 +0100 Added test for SETB DL commit e3a2e77ef6c4da007d1683eb5950374f115301f1 Author: Jan Wedekind (Dr) Date: Thu Jul 9 21:56:39 2015 +0100 Test retrieval of registers commit 2b78abf6d6775dbd8238cfb0af79e97e32b8e9d0 Author: Jan Wedekind (Dr) Date: Thu Jul 9 21:53:15 2015 +0100 Method for identifying conditional jump statements commit 74e76f8fffd0e85b28cf7e5aa3514c2c96166e89 Author: Jan Wedekind (Dr) Date: Thu Jul 9 13:04:26 2015 +0100 Comment out objdump invocation commit 4fa23c40b0167859849c19d3c63e4f2381d7432b Author: Jan Wedekind (Dr) Date: Thu Jul 9 12:48:14 2015 +0100 Separated assembler commit 0a95c37a8d22f4e1092d6235ff3ebf6f541b862f Author: Jan Wedekind (Dr) Date: Wed Jul 8 21:18:30 2015 +0100 Playing around with monkey patching commit 7b02f73b6b72230bfec309ba7f3aa36d8772cb3f Author: Jan Wedekind (Dr) Date: Wed Jul 8 07:42:13 2015 +0100 There is no MOVZX for 32 to 64 bit expansion commit 6057f6a865588f429be4c0bb76999b6a3e39686d Author: Jan Wedekind (Dr) Date: Tue Jul 7 22:20:41 2015 +0100 Unsigned division with DIV commit 63b85898f188ee70228b6e9a97ea829e8aa4367b Author: Jan Wedekind (Dr) Date: Tue Jul 7 17:35:29 2015 +0100 Update blocked intervals when inserting spill code commit 5dbcd604d8ea015787aec98529e083fd7a5dd13d Author: Jan Wedekind (Dr) Date: Sat Jul 4 23:09:34 2015 +0100 Signed division commit dcf38f57b480c3c2644c0e4b300bfa620cf5a7cd Author: Jan Wedekind (Dr) Date: Fri Jul 3 22:58:02 2015 +0100 Avoid blocked registers when allocating commit dd313f7534d89c0df605dc5798d696dff6894045 Author: Jan Wedekind (Dr) Date: Thu Jul 2 22:05:13 2015 +0100 Determine intervals where a register is blocked commit d756c92ca1aef51d7c102d3aca242372305bd6fa Author: Jan Wedekind (Dr) Date: Thu Jul 2 12:48:47 2015 +0100 Function for stripping block regions from program commit 8e65f952f683ec87ab8b82587b28fac8f708fd53 Author: Jan Wedekind (Dr) Date: Thu Jul 2 08:16:59 2015 +0100 Regions for blocking registers commit 5ad14c2a47e9dd2a010686bb3b7e6b007021a10d Author: Jan Wedekind (Dr) Date: Wed Jul 1 22:50:35 2015 +0100 Minor simplification commit 993854b9704e6cbc93a431f5f3d37230a2e30b06 Author: Jan Wedekind (Dr) Date: Wed Jul 1 21:27:26 2015 +0100 Register coloring with blocked registers commit e181a97f49d46d71a3a2b2a23bfd73a466f17847 Author: Jan Wedekind (Dr) Date: Wed Jul 1 17:48:26 2015 +0100 Good fit for list of signed and unsigned integers commit 1d9a4dfd1540dbba45d8753afad5cbb2436d23db Author: Jan Wedekind (Dr) Date: Wed Jul 1 17:22:11 2015 +0100 Updated TODO commit 447ff67fc472ad9ae6dbd6e8755625daefd98154 Author: Jan Wedekind (Dr) Date: Tue Jun 30 21:49:25 2015 +0100 Parallelize Travis-CI build commit ef1d35734b4784a457072fa4affbe24f92a4ea99 Author: Jan Wedekind (Dr) Date: Tue Jun 30 21:48:03 2015 +0100 Added CBW, CWDE, CDQE, CWD, CDQ, and CQO commit 09de5d42ef51a4ca1f7a42475bcf01a050013089 Author: Jan Wedekind (Dr) Date: Tue Jun 30 17:09:24 2015 +0100 Find fitting type for multiple values commit 8d5481e383a1024a06bb2b8e1f5ff146e74454be Author: Jan Wedekind (Dr) Date: Mon Jun 29 22:18:46 2015 +0100 Comparison of signed and unsigned integers commit dbba58af166f6b5b1ecd72fd7112740c5b20489a Author: Jan Wedekind (Dr) Date: Sat Jun 27 23:16:50 2015 +0100 IDIV commit d73e45f04566ebf233255cefa8e63f62f2512dff Author: Jan Wedekind (Dr) Date: Sat Jun 27 21:30:12 2015 +0100 Shorter method names commit de909d18beae6b9f3cb4a55b30ced8fd0f6d58d7 Author: Jan Wedekind (Dr) Date: Fri Jun 26 23:04:41 2015 +0100 'seq' and 'arr' macro for compact syntax commit bae6b78e7102298530271fb450eb4cd1e512cb13 Author: Jan Wedekind (Dr) Date: Thu Jun 25 21:21:25 2015 +0100 Boolean and/or for arrays commit 655ad103ece104253f3153023ea2d2e54b36da90 Author: Jan Wedekind (Dr) Date: Thu Jun 25 20:54:59 2015 +0100 Using curried definitions to simplify code commit 94be45957132ea0d6608f0e27ecda4d0e8763e07 Author: Jan Wedekind (Dr) Date: Thu Jun 25 17:38:30 2015 +0100 bit-wise xor commit d66c9d44d135b366686f9dc9b2b61c3bbe1403d8 Author: Jan Wedekind (Dr) Date: Thu Jun 25 17:27:37 2015 +0100 bit-wise or commit e3b661d5e087fc3b867992ada6d82998ca6ef70b Author: Jan Wedekind (Dr) Date: Thu Jun 25 17:10:59 2015 +0100 bit-wise and commit 1149564c50cd1e97a74659cd558245bb14f0fe54 Author: Jan Wedekind (Dr) Date: Wed Jun 24 22:10:21 2015 +0100 More comparisons: <, <=, >, >= commit 695551172015d20f7416a58fa95a00c471c38700 Author: Jan Wedekind (Dr) Date: Wed Jun 24 17:26:06 2015 +0100 Element-wise comparison commit 52790b39ed45b04607fc59c789664ab80e60a7bd Author: Jan Wedekind (Dr) Date: Wed Jun 24 07:50:15 2015 +0100 Renaming some methods commit 94ac3110529d5e03bc51d9c8f39f61b37b257efe Author: Jan Wedekind (Dr) Date: Wed Jun 24 07:40:08 2015 +0100 Element-wise not commit bb3a7535db1935f7f6cc38c1b36af6a2e02c6f42 Author: Jan Wedekind (Dr) Date: Wed Jun 24 07:32:40 2015 +0100 Conversion for list of booleans to multiarray commit 5ae65980704d8f8dd12f7c900f52a263737b77da Author: Jan Wedekind (Dr) Date: Tue Jun 23 23:06:06 2015 +0100 Added TEST statement commit bd69d6f8a777a2635a478d4222755ae41445fe6b Author: Jan Wedekind (Dr) Date: Tue Jun 23 17:56:01 2015 +0100 Encapsulate ADD, SUB, MUL, ... commit 14a7f5686d6abc639beccae73129e4f9b796639c Author: Jan Wedekind (Dr) Date: Tue Jun 23 12:53:22 2015 +0100 Renamed destructive-op -> destructive-unary-op commit b27d1aa0a41bb632326a20b6d6c655d9e9f135f4 Author: Jan Wedekind (Dr) Date: Tue Jun 23 07:38:09 2015 +0100 Benchmark for method dispatch commit 6af359c07ea1858ab5e7eac3123750cac5cbc99d Author: Jan Wedekind (Dr) Date: Mon Jun 22 21:57:50 2015 +0100 Unary operation with different output type commit b6f31e296d3cd794b5208f6e8470ecfff725edd0 Author: Jan Wedekind (Dr) Date: Mon Jun 22 17:54:50 2015 +0100 Added is-zero? commit 6421239ad0cc1c86b49deeec8181941a77050e7f Author: Jan Wedekind (Dr) Date: Sat Jun 20 22:12:06 2015 +0100 Bitwise negation commit db9e39e18ab55af090d3f6e9614e4b8f60fc6a8f Author: Jan Wedekind (Dr) Date: Sat Jun 20 21:45:26 2015 +0100 Fixed a compiler warning commit 05e05f334960218ca986376bb96fd4c247496105 Author: Jan Wedekind (Dr) Date: Sat Jun 20 21:45:09 2015 +0100 Suggesting to use colorgcc commit 07ba8e527cd5372dd404d332ace06f71504c8778 Author: Jan Wedekind (Dr) Date: Sat Jun 20 21:34:32 2015 +0100 Updated documentation commit 658fcf4721ddca26562854007445b7310d1c276f Author: Jan Wedekind (Dr) Date: Fri Jun 19 21:56:43 2015 +0100 Minor changes commit e04b01933ed5d917fdb14656d1ff1c7f5fda1d5c Author: Jan Wedekind (Dr) Date: Fri Jun 19 17:40:13 2015 +0100 Updated dependencies for parallel builds commit 320400da11ceffc6a40118b6860fde51af56a9fd Author: Jan Wedekind (Dr) Date: Fri Jun 19 17:39:17 2015 +0100 Use '=' instead of 'eqv?' commit 7a1a005e7b45f9471e077b86836bfe64f819df21 Author: Jan Wedekind (Dr) Date: Fri Jun 19 17:30:04 2015 +0100 Check size of type operation commit 2f9e95556862ad90d9fc8d340cab75b84016d43c Author: Jan Wedekind (Dr) Date: Thu Jun 18 23:13:04 2015 +0100 Generate and reuse code for type conversions commit f9b957d0e27ef25535f166862f7552ea660f3cda Author: Jan Wedekind (Dr) Date: Thu Jun 18 22:37:19 2015 +0100 Use result of coercion in generated code commit 80bcde0e67bf2f8a30109ce9b3ebd156e42cc4aa Author: Jan Wedekind (Dr) Date: Thu Jun 18 18:26:17 2015 +0100 Renamed shape/2 -> coerce-shapes/2 commit f02de40a09f371d9f179d15e6c3b9349a34fc1db Author: Jan Wedekind (Dr) Date: Thu Jun 18 18:25:59 2015 +0100 Typecast when converting to smaller integer commit 6aab09f575dd795ceba23cd7321c7ff14112fa65 Author: Jan Wedekind (Dr) Date: Thu Jun 18 18:09:47 2015 +0100 Typecast when doing signed<->unsigned conversion commit 44f70cd60978870deab2d0cedd2564e05d8c9a1c Author: Jan Wedekind (Dr) Date: Thu Jun 18 07:54:02 2015 +0100 Got type conversions to larger integer working commit a8f4ca4b6bcebca1fc85aeac57c90b6d1e168c7e Author: Jan Wedekind (Dr) Date: Tue Jun 16 22:08:01 2015 +0100 Updated standards version commit a92b2f0db3708e05ddebeb0fea4a13813589064d Author: Jan Wedekind (Dr) Date: Tue Jun 16 12:53:21 2015 +0100 Fixing standards version commit a495fb714976f06a1f6d0685b98b8e5f3ce2b155 Author: Jan Wedekind (Dr) Date: Tue Jun 16 12:24:50 2015 +0100 Removed redundant code commit 0d906fee4a2085fe65019bbb94ed6f517a13d5ee Author: Jan Wedekind (Dr) Date: Mon Jun 15 22:08:12 2015 +0100 Delete la-files using debian/rules file commit d7233b5c3215e0b207012be65c45de20c7befc1a Author: Jan Wedekind (Dr) Date: Mon Jun 15 17:36:57 2015 +0100 More benchmarks commit 559488d50aad2bfc6d49b03e7a6a84b847841ab0 Author: Jan Wedekind (Dr) Date: Mon Jun 15 17:19:20 2015 +0100 Using 'for' loop commit 65c809ac3902f0fa327e02ed113d403d0548238c Author: Jan Wedekind (Dr) Date: Mon Jun 15 08:28:30 2015 +0100 Added for loop commit eb81def50e9e07d02b77a11f282a6b8ea9c2be1b Author: Jan Wedekind (Dr) Date: Mon Jun 15 07:31:54 2015 +0100 Test empty sequence commit 981d9a6235205b43c52826d44efea64a1afc357a Author: Jan Wedekind (Dr) Date: Sun Jun 14 22:08:02 2015 +0100 Faster memory allocation commit 0ad24897b13d3292aba2b6948680b42b1a0d2458 Author: Jan Wedekind (Dr) Date: Sat Jun 13 23:02:40 2015 +0100 Bugfix for benchmark commit ac41d76a5ae0857d205d8540a3a1b9b198eeedee Author: Jan Wedekind (Dr) Date: Fri Jun 12 22:07:25 2015 +0100 Added a benchmark for element-wise negation commit c17079e4c9eddc95b07621658d8b3ba7348b6e2a Author: Jan Wedekind (Dr) Date: Fri Jun 12 21:22:19 2015 +0100 Added 'run' for running benchmarks commit 6db9e80996cd4501d58ff03e51bab1d5a75bab84 Author: Jan Wedekind (Dr) Date: Fri Jun 12 17:29:14 2015 +0100 Add benchmark to Makefile commit f53695841a5f296241215740c052972197c54645 Author: Jan Wedekind (Dr) Date: Thu Jun 11 22:13:21 2015 +0100 Updating dependencies and version number commit 137c406513e3585258fb253dcd9185cb7a22a6ae Author: Jan Wedekind (Dr) Date: Thu Jun 11 17:47:12 2015 +0100 Separate Makefile.debian commit f529fd0002957f44025e987f1e028be95cd1fc15 Author: Jan Wedekind (Dr) Date: Wed Jun 10 22:42:01 2015 +0100 Enabled test for scalar plus 4D array commit 0ff325e1967dc66d28b2006aaddc71302009463e Author: Jan Wedekind (Dr) Date: Wed Jun 10 22:33:28 2015 +0100 Bugfix for end-point of array loop commit 7ca970c68ce28cb550d0e2f1cedd3d98a1e2eda0 Author: Jan Wedekind (Dr) Date: Wed Jun 10 22:32:45 2015 +0100 Starting to add benchmarks commit d63363b1fa028a8e110422631eebb05e02340155 Author: Jan Wedekind (Dr) Date: Wed Jun 10 12:51:51 2015 +0100 Updated TODO commit b78f6f527d011ae1ab49d87a75dbf8d295a3d17c Author: Jan Wedekind (Dr) Date: Wed Jun 10 07:45:10 2015 +0100 Adding 1D array and 2D array commit bae0d877e2ef5784179b7d74869210bdc679d007 Author: Jan Wedekind (Dr) Date: Tue Jun 9 23:04:40 2015 +0100 Interval colouring instead of graph colouring commit 35a40d6dbccdc4e9ef71712f185f2eb4a33e78d2 Author: Jan Wedekind (Dr) Date: Tue Jun 9 22:51:37 2015 +0100 Moved live-intervals and overlap Also removed some graph methods commit baceefcab9afabc282285a8a8dd510d5893a6fce Author: Jan Wedekind (Dr) Date: Tue Jun 9 22:50:55 2015 +0100 Only allocate stack space if required commit d976529384cf08c98ec73ed55a272c1ac0da28a6 Author: Jan Wedekind (Dr) Date: Tue Jun 9 17:48:43 2015 +0100 Updated TODO commit 4f706dd24903e8e26042d7b7042b67179cca20ba Author: Jan Wedekind (Dr) Date: Tue Jun 9 17:38:40 2015 +0100 scalar-array operation with 4D array still failing commit 8e079961fd26f329c29b51edf8d29bf8ea559dde Author: Jan Wedekind (Dr) Date: Tue Jun 9 08:43:46 2015 +0100 Correct graph coloring with updated conflict count commit 3a72bb18123248a2d8b51b1d8720ebdfa93d784f Author: Jan Wedekind (Dr) Date: Tue Jun 9 07:51:11 2015 +0100 color-intervals requires adjacency function now commit f27781594a0b98ca0ff0d3ffcc3665d64db14503 Author: Jan Wedekind (Dr) Date: Mon Jun 8 22:35:18 2015 +0100 Removed assv-set and assoc-set, added assq-remove commit bbdf3e62b3a9570516e12a0bfd1210fd70f061b2 Author: Jan Wedekind (Dr) Date: Mon Jun 8 21:13:21 2015 +0100 color-graph -> color-intervals commit 24e6252e765d412b703575f9bf0d96e57f31a086 Author: Jan Wedekind (Dr) Date: Mon Jun 8 21:12:58 2015 +0100 Use 'filter-map' commit c405d305779b101579919d1f71abf51516bc98bc Author: Jan Wedekind (Dr) Date: Mon Jun 8 17:37:09 2015 +0100 Generalise 'fill' for n-dimensional arrays commit 80ad7b488ce4f99fff85ecb46617b367db25cf3f Author: Jan Wedekind (Dr) Date: Sun Jun 7 21:54:00 2015 +0100 Print dots under last row only once commit 383389cc35d1a45b7d77788b9ed843b3fc6cdb91 Author: Jan Wedekind (Dr) Date: Sun Jun 7 21:37:00 2015 +0100 Removed suffix parameter commit 9c824ffb434ba77df354f133a7ae1e8115579097 Author: Jan Wedekind (Dr) Date: Sun Jun 7 21:35:02 2015 +0100 Remove prefix parameter commit 2b7b02e516739feb2533c204d1fb84425b57421d Author: Jan Wedekind (Dr) Date: Sun Jun 7 01:06:29 2015 +0100 Faster printing of arrays (WIP) commit 9591d48d58413b1038104744c6c5ad6dba4a0ace Author: Jan Wedekind (Dr) Date: Fri Jun 5 22:54:28 2015 +0100 Make printing of sequences faster (WIP) commit 201e0f09f3c6adb9c41246b413a73419d70b2767 Author: Jan Wedekind (Dr) Date: Fri Jun 5 22:13:16 2015 +0100 Removed "display" methods commit e5a81c33f4f7515623ff65a670b583b358785b39 Author: Jan Wedekind (Dr) Date: Fri Jun 5 16:28:58 2015 +0100 Fast conflict detection using live intervals commit bb44bf8ac6b2675b8cdb3070c738274406c33d2b Author: Jan Wedekind (Dr) Date: Fri Jun 5 13:28:20 2015 +0100 Better test report commit 5fde7ca65cb23d91f831b897145ba3f552ed2f58 Author: Jan Wedekind (Dr) Date: Thu Jun 4 23:10:31 2015 +0100 Simpler test suite commit 5a61785d7ed626fd656afa5d037175c511871388 Author: Jan Wedekind (Dr) Date: Fri May 29 23:17:06 2015 +0100 Changed interface for graph coloring Changed the parameters of the color-graph function so that replacing the conflicts function is possible. commit 415b135d9f61aef703e4b05ad6e3db1e7a39dfe7 Author: Jan Wedekind (Dr) Date: Thu May 28 17:45:59 2015 +0100 Bugfix for interval overlap commit 7b8d92d57008faa0b205f7e1dbda35807dc024b5 Author: Jan Wedekind (Dr) Date: Wed May 27 22:44:24 2015 +0100 Determine overlap of live intervals commit 03fa1cc59d2925c2f2935e8131942ba877c142bf Author: Jan Wedekind (Dr) Date: Wed May 27 22:38:08 2015 +0100 Graph coloring only needs adjacency function commit 6d9bc90e55eb8c0307a56d06de7f3f5e3006b481 Author: Jan Wedekind (Dr) Date: Wed May 27 18:06:32 2015 +0100 Removed 'has-node?' and 'remove-nodes' commit 467aefa1d255001f42daffa236e80cc92f9b29fd Author: Jan Wedekind (Dr) Date: Fri May 22 22:31:09 2015 +0100 Updating dependencies commit ff8c503021cb6a2e0977be4b8906142ee9aeb96e Author: Jan Wedekind (Dr) Date: Thu May 21 17:24:05 2015 +0100 Minor fix to documentation commit 13d4cd4a8fc47caa3fecdf5dc45f199ae0c9d672 Author: Jan Wedekind (Dr) Date: Thu May 21 17:09:25 2015 +0100 Clean all "*.go*" files commit a84c91dc9db1f06b39989b3b066772189f7bfb1f Author: Jan Wedekind (Dr) Date: Thu May 21 17:07:48 2015 +0100 Updated TODO commit dfbd4b2f24b09da83310526adcf0a9d8bd4b7d0e Author: Jan Wedekind (Dr) Date: Thu May 21 17:06:31 2015 +0100 Minor simplifications commit f6e28f2cc68282341ab3eadb3ad0734aef8553f6 Author: Jan Wedekind (Dr) Date: Wed May 20 17:08:43 2015 +0100 for -> element-wise commit 7e7e73da73f340c7f0578cda46925fe049958ed6 Author: Jan Wedekind (Dr) Date: Tue May 19 22:56:23 2015 +0100 Use for-loop macro commit 0bc6f59359b6849a67eedfab3e9d84e7e28dce09 Author: Jan Wedekind (Dr) Date: Tue May 19 17:23:03 2015 +0100 Check that env can return a list of statements commit 7df8887555ab818213201b5c6a907e330eddd45d Author: Jan Wedekind (Dr) Date: Tue May 19 17:17:06 2015 +0100 Export and test 'env' shorthand commit 5ab39e2ee266bd97daea1c5df921833353765929 Author: Jan Wedekind (Dr) Date: Wed May 13 22:02:19 2015 +0100 Swap order of variable name and type commit 59e9ea7e242a0ac0f00d0f5a4178c453ade5cfd9 Author: Jan Wedekind (Dr) Date: Tue May 12 23:16:12 2015 +0100 Introduced 'env' macro for compact syntax commit b9548237df54871e8f190e7c3a9b5632462121e6 Author: Jan Wedekind (Dr) Date: Tue May 12 12:37:13 2015 +0100 Added link to build service commit 7d4301088d4cd51a62a49e1dc1975dcebed58c27 Author: Jan Wedekind (Dr) Date: Mon May 11 23:00:47 2015 +0100 Using 'until' macro commit c8efff5c1cb6808a5ebe781b48374bd4666ae2a3 Author: Jan Wedekind (Dr) Date: Tue May 5 10:36:27 2015 +0100 Added pandoc to build-dependencies commit f10930de81d969e069f94c5ed27068596b0fe7f4 Author: Jan Wedekind (Dr) Date: Tue May 5 09:37:46 2015 +0100 Add Debian packaging stuff commit bfcc184a5cccae9c5a877362710f0bf365a03c90 Author: Jan Wedekind (Dr) Date: Mon May 4 22:19:08 2015 +0100 Renamed some methods, minor performance fix commit 5c37199b385e00b2ad38553fe264e710ce08bba3 Author: Jan Wedekind (Dr) Date: Sat May 2 23:09:23 2015 +0100 Add aiscm.gif to distributable commit 2021c1c5662dd01ab080084bba6c821eaed03571 Author: Jan Wedekind (Dr) Date: Sat May 2 09:56:30 2015 +0100 Revert to old libswscale version commit e60bd39438124d9f412af2898a03710d2e6454ea Author: Jan Wedekind Date: Fri May 1 13:09:52 2015 +0100 Require libswscale 2.1.1 commit 16e97d7e8e2d0b136185704e5bbcc3eb35dec9be Author: Jan Wedekind (Dr) Date: Thu Apr 30 23:38:06 2015 +0100 Spill stack-parameters back on stack commit 3a486dbdbf3d18752f40847e2c4658dccde096d2 Author: Jan Wedekind (Dr) Date: Wed Apr 29 23:13:16 2015 +0100 Spill parameters before fetching other parameters commit 446b5ac1177b2133abc3978d1d4b8c78219c2662 Author: Jan Wedekind (Dr) Date: Wed Apr 29 18:56:09 2015 +0100 Ignore *.go... files commit db3d4c8260816c745eb48f4b1adb0066db06050c Author: Jan Wedekind (Dr) Date: Wed Apr 29 18:55:06 2015 +0100 Added methods for loading and spilling parameters commit 5e5f87079ae6e5045e9b3f6588447cb4abcb662c Author: Jan Wedekind (Dr) Date: Tue Apr 28 23:22:14 2015 +0100 Update predefined variables commit c9c49b739cb8ad417a44c848dfda6c9471bccf5f Author: Jan Wedekind (Dr) Date: Tue Apr 28 22:49:45 2015 +0100 Disable tests again commit 1c6d0591fc0c968139d37567731450b35cd4fe88 Author: Jan Wedekind Date: Mon Apr 27 08:38:04 2015 +0100 Enable test commit f850b31aa37ab35946c1e4c0c3eacdf11b5f614b Author: Jan Wedekind Date: Mon Apr 27 08:37:35 2015 +0100 BGRA -> BGR commit ad565b3ae683d1f5a3198448d6652c3471b591bf Author: Jan Wedekind (Dr) Date: Sun Apr 26 22:42:39 2015 +0100 Define spill location in 'replace-variables' commit 808e6aa311dda8daa30ff3c1f58184876ee98eeb Author: Jan Wedekind (Dr) Date: Sun Apr 26 22:30:02 2015 +0100 Not using keyword parameter for offset commit 175b313a4ebaa9a667075c17d3b044188687a79f Author: Jan Wedekind (Dr) Date: Sun Apr 26 22:26:59 2015 +0100 Test spilling of two variables commit bd96262440ec0bf81e007aa971b4750431013d25 Author: Jan Wedekind (Dr) Date: Sat Apr 25 23:56:39 2015 +0100 Spill predefined variables at the beginning commit 3f47ed65974c8f5ba790688ca7a0056b34070d75 Author: Jan Wedekind (Dr) Date: Sat Apr 25 23:15:05 2015 +0100 Test saving of callee-saved registers commit 95e9136212ef6968380ef21337509e72c031409b Author: Jan Wedekind (Dr) Date: Sat Apr 25 00:19:41 2015 +0100 Prevent spilling of predefined variables For the moment prevent spilling of predefined variables. commit a8f592dcd6359e7088e96daf4c803318894fed6f Author: Jan Wedekind (Dr) Date: Fri Apr 24 17:25:44 2015 +0100 Bugfix for stack collisions Bugfix for stack collision between callee-saved and spilled registers. commit 4921c7c4da7ee6ba80a7bca4bf088f64c9cd4ae0 Author: Jan Wedekind (Dr) Date: Thu Apr 23 22:38:17 2015 +0100 Spilling of variables working! commit 2e4f933ee44e0f54e0161786e8ab36376a19c2dd Author: Jan Wedekind (Dr) Date: Wed Apr 22 23:01:36 2015 +0100 Improve display of pointers commit 51fd3ae14b7e70cac3e16ace4d6b8a7b9873395a Author: Jan Wedekind (Dr) Date: Wed Apr 22 22:31:57 2015 +0100 Print name of register commit b63808492819639bdc1db6d0456ddda20eb8aad8 Author: Jan Wedekind (Dr) Date: Tue Apr 21 23:12:04 2015 +0100 Refactoring commit b8b919f43cf8449154a57fafbdf6d360aa487385 Author: Jan Wedekind (Dr) Date: Tue Apr 21 12:48:22 2015 +0100 Compute length of variable live and unused commit 5050a81a25ff7e3cf5522607c66b8bacbabde3e0 Author: Jan Wedekind (Dr) Date: Mon Apr 20 22:42:17 2015 +0100 Rename 'live' -> 'live-analysis' commit dde966f49a8a741154286c35b4780421962d4f9e Author: Jan Wedekind (Dr) Date: Mon Apr 20 21:49:44 2015 +0100 interference-graph takes live list as argument commit 6f079d02253895da24990e9e030ed9921b84db3b Author: Jan Wedekind (Dr) Date: Mon Apr 20 21:29:53 2015 +0100 Renamed: collisions -> interference-graph commit 3bcfda89f045d5e651007ce09c190629ed2f7922 Author: Jan Wedekind (Dr) Date: Fri Apr 17 23:36:12 2015 +0100 Working on variable-spilling commit 2bbe2842f247e2296d15a4693d33d0cd99b8045e Author: Jan Wedekind (Dr) Date: Fri Apr 17 23:13:50 2015 +0100 Trying out register spilling commit a9ed381134dc801dca3c246a0059c2c77bb5f482 Author: Jan Wedekind (Dr) Date: Fri Apr 17 23:13:31 2015 +0100 Added method for counting occurrences of variable commit 85bd84a30124fe53d35895d58dab0f51627d80f4 Author: Jan Wedekind (Dr) Date: Fri Apr 17 23:13:08 2015 +0100 Corrected description of test commit 6e0a87a3046dac824eb25cd3211f74350e4d5246 Author: Jan Wedekind (Dr) Date: Fri Apr 17 23:12:33 2015 +0100 Don't ignore PDFs commit b3b582b9be4cfc246c1d4ee1e91ade59c3c445c6 Author: Jan Wedekind (Dr) Date: Wed Apr 15 17:40:50 2015 +0100 Minor simplifications commit fe13e808291e8a134cb2d69e6e6a4d6bf5724547 Author: Jan Wedekind (Dr) Date: Wed Apr 15 07:44:46 2015 +0100 Removed common-list dependency commit 58ead15c811a135d68314efa42fb4b040dce62b8 Author: Jan Wedekind (Dr) Date: Tue Apr 14 22:54:33 2015 +0100 Variable spilling using temporaries commit 0219df3ad38bd8eb7387783957bf8286dfd5d94c Author: Jan Wedekind (Dr) Date: Sun Apr 12 22:12:12 2015 +0100 subst -> substitute-variables commit 36cf155b83edb5c14adc725bef7439492f1d0a55 Author: Jan Wedekind (Dr) Date: Tue Apr 7 21:42:13 2015 +0100 Added another test for spilled variables commit 4aec335b3c977b8deb427e813cd647c3cf575fbc Author: Jan Wedekind (Dr) Date: Tue Apr 7 21:38:24 2015 +0100 Added 'compact' for removing false elements commit e901d033e42f63c239913884af450f155e24527f Author: Jan Wedekind (Dr) Date: Tue Apr 7 18:03:03 2015 +0100 Added method for spilling a variable commit f83275672be43a398dc19227f82028cb02961423 Author: Jan Wedekind (Dr) Date: Sat Apr 4 22:32:29 2015 +0100 Bind variables to false when out of registers commit a63bb6b89c1532db884c79acfe18e11492023fa0 Author: Jan Wedekind (Dr) Date: Sat Apr 4 00:36:24 2015 +0100 Minor simplification commit d3f51a7ae5ea51214dfb8a2ccc70b0acc5e4adaa Author: Jan Wedekind (Dr) Date: Sat Apr 4 00:16:18 2015 +0100 color-graph should return false on failure commit 319367ba8ddf9ab8152d7cf38329ba91a9ec867e Author: Jan Wedekind (Dr) Date: Thu Apr 2 21:32:17 2015 +0100 Removed 'flatten-n' commit a9595309d443f2aab2f19ebc72f2463d07632355 Author: Jan Wedekind (Dr) Date: Wed Apr 1 17:27:11 2015 +0100 Implementation of (+ x) not required commit 1274b752e0413589f1d6df5d13f803b287a8df5c Author: Jan Wedekind (Dr) Date: Wed Apr 1 17:25:31 2015 +0100 Enabled multiplication for arrays commit cde96c20522e8b740f13143d5e91f90bfe0e01ac Author: Jan Wedekind (Dr) Date: Tue Mar 31 21:42:20 2015 +0100 get-type -> typecode commit 397b6d6e08db481a58bee22404375d5a037c2639 Author: Jan Wedekind (Dr) Date: Tue Mar 31 21:38:05 2015 +0100 Make type explicit for unary/binary op commit cad513d87dafffe71b135f1942f57c798acfed69 Author: Jan Wedekind (Dr) Date: Tue Mar 31 08:52:32 2015 +0100 Updated TODO commit 7dc55279a0222b06049817ae7ee8868701da4353 Author: Jan Wedekind (Dr) Date: Mon Mar 30 17:29:10 2015 +0100 Enabled binary array-array-operations commit f559f7f708c5e2ac56278805d166a7531cbaede5 Author: Jan Wedekind (Dr) Date: Mon Mar 30 12:47:09 2015 +0100 Enabled image transpose test commit f20a75c76a596267132a38f970b672243042e25c Author: Jan Wedekind (Dr) Date: Sun Mar 29 22:26:25 2015 +0100 Bugfix: negative stack offsets for local variables commit 128f82fbc03774595fe78e661d25d05a69450c9a Author: Jan Wedekind (Dr) Date: Sat Mar 28 22:11:13 2015 +0000 Bugfix for terminating condition of live analysis commit 7e340477c7364c4e710ce0b0e0aad95ea3208afc Author: Jan Wedekind (Dr) Date: Sat Mar 28 22:10:59 2015 +0000 Removed 'zipmap' commit ed11b6dc5183369a384892d7d78e772f5c6df2dc Author: Jan Wedekind (Dr) Date: Sat Mar 28 22:10:23 2015 +0000 Removed some junk comments commit 60769033f30ee35cd25881cf4b6f345163a9f6c8 Author: Jan Wedekind (Dr) Date: Fri Mar 27 22:51:39 2015 +0000 Save and restore callee-saved registers commit e1ba4ebb0180fcd7fb2888ffcd27434dbb2f74d0 Author: Jan Wedekind (Dr) Date: Thu Mar 26 22:23:13 2015 +0000 Determine callee-saved registers commit b1125c2f2418013f05f86e88a577c184742f7e7d Author: Jan Wedekind (Dr) Date: Wed Mar 25 22:17:24 2015 +0000 Changed register-allocate to return register map commit 355be4811cc656520cd1ea29990e839d0bbd3ea0 Author: Jan Wedekind (Dr) Date: Wed Mar 25 17:24:13 2015 +0000 register allocation with custom register set commit 06b4aabc2f31b6f36832254028fc52a10804b2fe Author: Jan Wedekind (Dr) Date: Tue Mar 24 22:29:09 2015 +0000 Updating tests for program structure Directed some tests at 'virtual-registers' instead of 'wrap' commit 16350b1297318a71e8a5f2decf4d6aa69960f908 Author: Jan Wedekind (Dr) Date: Tue Mar 24 21:44:10 2015 +0000 Make 'wrap' use 'virtual-registers' commit 11a4c4dc46a4ab6965561f3be36619bfba787e06 Author: Jan Wedekind (Dr) Date: Tue Mar 24 17:13:26 2015 +0000 Updated TODO commit 26d2d31d8d35addf3a40d4d3ae45b964f4298a2a Author: Jan Wedekind (Dr) Date: Mon Mar 23 22:04:11 2015 +0000 Binary scalar-array operation commit f0684be6a50cab7c9b35cdc2cef9c14275d5e07f Author: Jan Wedekind (Dr) Date: Mon Mar 23 18:00:08 2015 +0000 Binary array-scalar operations commit 097584b2f3dab5601d955d5345ccfc1e69057532 Author: Jan Wedekind (Dr) Date: Fri Mar 20 22:58:28 2015 +0000 Commenting out unused code commit d5dd2d43af0bbb70a5c2a5b17959ef060d12d312 Author: Jan Wedekind (Dr) Date: Thu Mar 19 22:31:01 2015 +0000 Load parameters from stack commit 256b32745ba9e0943b903143606e67a53225200e Author: Jan Wedekind (Dr) Date: Thu Mar 19 17:08:40 2015 +0000 Use 'make-list' instead of 'list' commit f3b654a2ef0f2a9695874fe50645d9f3050f09f5 Author: Jan Wedekind (Dr) Date: Wed Mar 18 12:40:27 2015 +0000 More compact syntax for (MOV a b), ... commit 2254699c6a36d9a8c89dd898426a7dd0ac85aec6 Author: Jan Wedekind (Dr) Date: Tue Mar 17 21:14:45 2015 +0000 Register allocation for SHL, MOVSZ, CMP, ... commit 86f69fe0747b5363989766a44f4deda50f0504e4 Author: Jan Wedekind (Dr) Date: Mon Mar 16 22:29:50 2015 +0000 Using common variables 'p' and 'q' in tests commit abd50ce206283168f32a92791164f1823a9c5b06 Author: Jan Wedekind (Dr) Date: Mon Mar 16 22:13:28 2015 +0000 Tests for variable substitutions commit 1e07a5ba24f0ec48f5e22d085be1c3c4d7c65a3f Author: Jan Wedekind (Dr) Date: Sun Mar 15 21:55:11 2015 +0000 Bugfix: 'wrap' should not regenerate machine code commit 6a573eb01f108515419b07bdd8bf52ba26319de1 Author: Jan Wedekind (Dr) Date: Sun Mar 15 21:25:26 2015 +0000 Remove duplicate RET statements commit 86b450dc5be75937b7f938f2388df41a31f86ac4 Author: Jan Wedekind (Dr) Date: Sat Mar 14 22:21:31 2015 +0000 Added typesize and strides commit 89e2dbaed0bfdcdf78230031dfabe39bc0dd0bf3 Author: Jan Wedekind (Dr) Date: Fri Mar 13 22:54:14 2015 +0000 'define-unary-op' for '-' commit 70efbd0cac4f7d8b7fa7a8459306e728f745ef22 Author: Jan Wedekind (Dr) Date: Fri Mar 13 22:08:27 2015 +0000 'unary-op' using register allocation commit 2cb98461e3d99748a5ec1142ef3e10550bd28d4b Author: Jan Wedekind (Dr) Date: Thu Mar 12 21:56:21 2015 +0000 Flatten code before register allocation Also make labels unique before flattening code. commit e3a50214f15828677c02019b917974b9beb12a1b Author: Jan Wedekind (Dr) Date: Wed Mar 11 22:00:47 2015 +0000 Unary minus for sequences with register allocation commit db4c45e011182b4628a58d7319fdf65828b0cdc9 Merge: d1ff58fc d391c187 Author: Jan Wedekind (Dr) Date: Tue Mar 10 21:40:35 2015 +0000 Merge branch 'register-allocation' of github.com:wedesoft/aiscm into register-allocation Conflicts: tests/test_jit.scm commit d1ff58fc9babf8b2c3f9bd4bfacac34ed5e5d46d Author: Jan Wedekind (Dr) Date: Tue Mar 10 21:38:07 2015 +0000 Test for pointer argument in register allocator commit d391c187036489b1c77a1e9ab6e3914915c94015 Author: Jan Wedekind Date: Tue Mar 3 21:37:17 2015 +0000 Test pointer argument commit ef6c86f550b56bc2fa6f55978b14c3bdec47a6ea Author: Jan Wedekind (Dr) Date: Tue Feb 24 17:31:24 2015 +0000 Don't reserve RAX if function does not need it commit c5ee46512f814354e1bc6f395d25d5ebed1dbfe6 Author: Jan Wedekind (Dr) Date: Mon Feb 23 21:40:33 2015 +0000 Test register allocation on constant function commit 1947f2b207ee7b9426e8864b8c0ab8374d60e85e Author: Jan Wedekind (Dr) Date: Sat Feb 21 23:09:18 2015 +0000 Have 'wrap' handle sequences as parameters commit 9a45acff782e77c21d514fc76b3b1364a88e58dd Author: Jan Wedekind (Dr) Date: Thu Feb 19 21:15:23 2015 +0000 Test for allocation of first 6 integer parameters commit 92e4da52e61a7df6e17f82b1bc12455dc3de26e8 Author: Jan Wedekind (Dr) Date: Wed Feb 18 21:05:42 2015 +0000 Force 'imm' to be integer or memory object commit a5751670ffd82cdf894bbd4432c103a1c86f4f5b Author: Jan Wedekind (Dr) Date: Tue Feb 17 22:20:44 2015 +0000 Added 'collate' to construct lists of objects commit 82f684cf6034275b53ff413034a99fc59329f3d7 Author: Jan Wedekind (Dr) Date: Tue Feb 17 12:38:23 2015 +0000 'match' passes sequences through commit a111b33bd31752283966ff2c8d145710da768414 Author: Jan Wedekind (Dr) Date: Mon Feb 16 22:15:09 2015 +0000 Simplified 'gather' commit 348a102c3338bed88ef86777df4d2967a20dcc6a Author: Jan Wedekind (Dr) Date: Mon Feb 16 22:06:13 2015 +0000 Added 'gather' for grouping lists commit 5697a71956f23f3678d3ace10383cc63dae84a94 Author: Jan Wedekind (Dr) Date: Sat Feb 14 23:03:13 2015 +0000 Replace 'construct' with 'param' commit 8d623619a4c4b05699b48067e4aa54ad01ba44f8 Author: Jan Wedekind (Dr) Date: Fri Feb 13 21:45:44 2015 +0000 Updated TODO list commit 9b9bb846d2de35e3e4b1451c1f7966378a336ac1 Author: Jan Wedekind (Dr) Date: Thu Feb 12 22:22:27 2015 +0000 'content' maps booleans to unsigned byte commit 886dda817bd090ef571e4600f37f48d2449004af Author: Jan Wedekind (Dr) Date: Thu Feb 12 22:06:49 2015 +0000 'content' should return untyped values commit ece9712c33e2653dbbae4ab7c7f0cf2684a74041 Author: Jan Wedekind (Dr) Date: Thu Feb 12 22:01:12 2015 +0000 'content' of pointer preserves base and size commit a8682bff9efbfdebe96bfacba302526332013b9b Author: Jan Wedekind (Dr) Date: Wed Feb 11 21:54:35 2015 +0000 Replaced 'repeat' with 'make-list' commit 12ef6ffef0200096a0e7eedb660b9b40fe6ce415 Author: Jan Wedekind (Dr) Date: Wed Feb 11 21:50:30 2015 +0000 'content' and 'construct' for arrays commit 3fd39609d27d9790ccdcd10781269754131f7259 Author: Jan Wedekind (Dr) Date: Mon Feb 9 21:20:46 2015 +0000 Bugfix for 'virtual-registers' function commit 7f1c11e2c611445693306e3747f956ed2134aafc Author: Jan Wedekind (Dr) Date: Mon Feb 9 17:22:25 2015 +0000 Made 'virtual-registers' return machine code commit abc2336a460f64d8d4667ac1e0044375d32d4991 Author: Jan Wedekind (Dr) Date: Sat Feb 7 22:10:13 2015 +0000 Implemented 'zipmap' using 'zip' and 'map' commit 2145be6eeb992a72f0d7a1cd7b0375929eac0b55 Author: Jan Wedekind (Dr) Date: Sat Feb 7 22:00:16 2015 +0000 apply append -> concatenate commit 6e70eb6b6e4474b3674def102d39c5e0d7f48f09 Author: Jan Wedekind (Dr) Date: Fri Feb 6 16:55:24 2015 +0000 Testing 'types' and 'content' for 2D array commit 1c06fbdf117d6cb818e1bae3476f4634718bdc41 Author: Jan Wedekind (Dr) Date: Fri Feb 6 16:51:35 2015 +0000 'types' and 'content' for sequences commit cb2694d726f0e8a9941c60d4d9566b1ec681d06b Author: Jan Wedekind (Dr) Date: Thu Feb 5 22:32:00 2015 +0000 'types' and 'content' for pointers commit 680d2eca4d39847e80f5cacf848be6a62090647e Author: Jan Wedekind (Dr) Date: Thu Feb 5 17:20:19 2015 +0000 Removed tests for pass-parameters, reg, arg, ... commit 7a8ad5ae89aae5c950b42570c58d23df43d5caae Author: Jan Wedekind (Dr) Date: Sat Jan 31 23:06:06 2015 +0000 Test allocation of pointer variable commit ea7e1a3b7e11350468a1eb1c78e7d9c860f7c600 Author: Jan Wedekind (Dr) Date: Fri Jan 30 21:42:29 2015 +0000 Added pointer variables to input commit 3a33fa15dfcca108136122a5bb93c50e6bac7d5b Author: Jan Wedekind (Dr) Date: Fri Jan 30 20:23:02 2015 +0000 Test substitution in instruction with pointer commit ceb915cad4526ba301a29178efa67c7c548f34b1 Author: Jan Wedekind (Dr) Date: Wed Jan 28 21:35:07 2015 +0000 Pointer variables and substitution for pointers commit 8a42c1b60a1ff3633f5a60ea1f3a60582a6cfbeb Author: Jan Wedekind (Dr) Date: Sun Jan 25 21:57:12 2015 +0000 Method for flattening code commit 1bc92ba60b03dec7bf63a7d97bfac2b9ef350521 Author: Jan Wedekind (Dr) Date: Sat Jan 24 22:56:28 2015 +0000 Updated TODO list commit 45fa18ab72a317a5ee6f10d1cc9a69782ae2ed94 Author: Jan Wedekind (Dr) Date: Sat Jan 24 22:42:24 2015 +0000 Make labels unique before merging environments commit 2018abb8b74ce1ff5a33735190a12ed387c28390 Author: Jan Wedekind (Dr) Date: Fri Jan 23 07:53:57 2015 +0000 Register allocation with function arguments commit f32ccb0841b3167a7db95ee710b71b67f099bc55 Author: Jan Wedekind (Dr) Date: Wed Jan 21 12:24:04 2015 +0000 Register allocation with predefined registers commit 0c9248652674b6d0f418400500504016af66ccbe Author: Jan Wedekind (Dr) Date: Tue Jan 20 22:07:27 2015 +0000 Register allocation for parameter-less programs commit 2c1f30a22a84a5d0841da953f3abf5f241e71ec0 Author: Jan Wedekind (Dr) Date: Tue Jan 20 12:30:37 2015 +0000 Added fixed-point iteration commit b19ec2a721140521245d09b501768ce34c1f60f2 Author: Jan Wedekind (Dr) Date: Mon Jan 19 21:59:18 2015 +0000 'color-graph' with predefined colors commit 3a51fed6fafb59a5480a67097ebd5719c83e4c5b Author: Jan Wedekind (Dr) Date: Sun Jan 18 21:06:07 2015 +0000 Added some code to TODO commit 530cc89c244083d14940c7be81e3e8f250723f96 Merge: 2d19db68 8922ad29 Author: Jan Wedekind (Dr) Date: Sun Jan 18 21:05:07 2015 +0000 Merge branch 'master' into register-allocation Conflicts: .travis.yml TODO.md commit 8922ad293a5defc3f159c7220dc4da3a792e00a9 Author: Jan Wedekind (Dr) Date: Sun Jan 18 00:02:19 2015 +0000 Only require MJPEG tools version 1.9.0 commit f69bb2913716daad86c6f8f4f88154f0dfda4e60 Author: Jan Wedekind (Dr) Date: Sat Jan 17 23:35:31 2015 +0000 Requiring MJPEG tools version 2.0.0 commit e11544c9a7e4a6a1d0545037836c9f5cb18b5da5 Author: Jan Wedekind (Dr) Date: Sat Jan 17 23:33:02 2015 +0000 Only require MJPEG tools version 1.9.0 commit 74ebb2555cfe375d9a4777afa9d1454c90adcd19 Author: Jan Wedekind (Dr) Date: Sat Jan 17 23:31:06 2015 +0000 MJPG to I420/YV12 conversion with custom offsets commit 725db2be1df0734560582ac75fd2294fea8b0061 Author: Jan Wedekind (Dr) Date: Fri Jan 16 22:54:40 2015 +0000 Modified MJPEG decoding code a bit commit 767090a24a6bd03f944c88ea426258e387a34db1 Author: Jan Wedekind (Dr) Date: Thu Jan 15 22:12:07 2015 +0000 Added MJPEG-tools to Travis configuration commit 8e14f51ec7541f3ffb516387683df6169d8d97fc Author: Jan Wedekind (Dr) Date: Thu Jan 15 22:11:14 2015 +0000 Added MJPEG decoder commit 2d19db68970c65e077d3495477d628d37beb734a Merge: 88247873 f190a0cc Author: Jan Wedekind (Dr) Date: Thu Jan 15 17:26:23 2015 +0000 Merge branch 'master' into register-allocation Conflicts: TODO.md commit f190a0cc6f66406c638f71d9d093a9a8c8aa24f3 Author: Jan Wedekind (Dr) Date: Thu Jan 15 17:25:10 2015 +0000 Updated TODO commit 88247873e6bf6916f2c45b881d4b3364ca75de7e Author: Jan Wedekind (Dr) Date: Wed Jan 14 21:37:32 2015 +0000 Bugfix for display of commands commit bddefb8a7ec2a95e511321454641b64506c86054 Author: Jan Wedekind (Dr) Date: Wed Jan 14 20:32:38 2015 +0000 Added detection of collisions commit ad6c4880fcf4981d47b522d9a38eaeb646bce84c Author: Jan Wedekind (Dr) Date: Tue Jan 13 22:00:06 2015 +0000 Improved display of variables commit 63a22a655caa74afe53742fb31af69d2a0f5fd1a Author: Jan Wedekind (Dr) Date: Mon Jan 12 21:50:45 2015 +0000 Added ADD with variables commit 6acf0927e63f1a34265c57aee6c134f3bd274c30 Author: Jan Wedekind (Dr) Date: Sun Jan 11 22:27:31 2015 +0000 Added analysis of live variables commit 04688986b8aa914e8e7cce40572d5abc4a9c1809 Author: Jan Wedekind (Dr) Date: Sat Jan 10 22:26:24 2015 +0000 Simpler definition of 'labels' commit 58533fcd7bf146f099fac83cda6acd466500643c Author: Jan Wedekind (Dr) Date: Thu Jan 8 15:43:40 2015 +0000 Slightly more readable 'argmin' commit c7c2cc76de3cddd75b2467f470a8da1f2911702e Author: Jan Wedekind (Dr) Date: Thu Jan 8 12:16:45 2015 +0000 Implemented 'next-indices' for jump statements commit 53b6f35af7262518f9ad255d49be2000995f661a Author: Jan Wedekind (Dr) Date: Mon Jan 5 21:56:01 2015 +0000 Implementing "next-indices" commit 40686d38d4170e071984ab403eb4bcc8e7a76981 Author: Jan Wedekind (Dr) Date: Thu Jan 1 22:55:37 2015 +0000 Graph coloring with some predefined colors commit dfca898af3fd3f96e8b74cb7455755e2031f1e3d Author: Jan Wedekind (Dr) Date: Sat Dec 27 22:34:49 2014 +0000 Implemented naive register allocation commit 880eecac7048511789b8191e7e65192b966c53e6 Author: Jan Wedekind (Dr) Date: Fri Dec 26 22:48:39 2014 +0000 Extract variables of program commit d84cb64cfd6e43b4e9153cd49b1cdbc349639a9a Merge: e1e8cd47 bccf06c1 Author: Jan Wedekind (Dr) Date: Thu Dec 25 21:35:47 2014 +0000 Merge branch 'master' into register-allocation commit bccf06c1100b94d8fb4b947dfb3701ffe577c46e Author: Jan Wedekind Date: Wed Dec 24 13:18:15 2014 +0000 Install libreadline on Travis CI commit 14d73900eae5ecee532f69c2751198558f01e26a Author: Jan Wedekind Date: Wed Dec 24 10:35:46 2014 +0000 Added link to I/O docs commit b76a891bb0441827a91f31dcb82c5b3bd72c02a8 Author: Jan Wedekind Date: Wed Dec 24 09:54:50 2014 +0000 Disabled test for conversion to BGRA commit 82923f0500530d280177c40da7d1ceffdc578c54 Author: Jan Wedekind Date: Tue Dec 23 22:47:50 2014 +0000 set library path on Travis CI commit 58c3ffe50019b78705e7767d2492abaf42ba6e9c Author: Jan Wedekind Date: Tue Dec 23 22:14:07 2014 +0000 Install X.Org and OpenGL on Travis CI commit 489f25c0653418cb6bc64174e422cf1a7a3baffc Author: Jan Wedekind Date: Tue Dec 23 21:48:39 2014 +0000 Build guile-2.0.11 on Travis-CI commit e1e8cd479503002691580896a1810aeedad8ee41 Author: Jan Wedekind (Dr) Date: Tue Dec 2 21:42:02 2014 +0000 Added 'subst' for substituting registers commit c14a32b862c47349bf4e1ab9d4b0c61f2bb8a413 Author: Jan Wedekind (Dr) Date: Fri Nov 21 17:37:05 2014 +0000 Updating docs, minor changes commit 4291967680a739d7543cd0e85e952ba37626e34e Author: Jan Wedekind (Dr) Date: Wed Nov 19 21:00:08 2014 +0000 Using curried definitions commit 2e4b4f1eab7373bba84eb1a10f6e6a1657693c76 Author: Jan Wedekind (Dr) Date: Mon Nov 17 21:51:19 2014 +0000 Added graph coloring implementation commit cc0d1cbe53266207e2e50c70333aeea4dedebc1a Author: Jan Wedekind (Dr) Date: Thu Nov 13 21:05:33 2014 +0000 Added argmin and argmax commit 456000bbe6b52780c70af7b7defe80f9515e1f36 Author: Jan Wedekind (Dr) Date: Wed Nov 5 20:46:08 2014 +0000 Added 'product' and 'sort-by' commit 03e9fbb6ba31dccf78a5e0bf9baad7fc83eb256c Author: Jan Wedekind (Dr) Date: Fri Oct 31 16:43:50 2014 +0000 Added assq-set (immutable version of assq-set!) commit 4aabedc0998dc7ddecfa201d384a33894e44c59b Author: Jan Wedekind (Dr) Date: Fri Oct 24 17:50:35 2014 +0100 Updated TODO commit 84ed70bb0c9e077e3e07fdf7026dadac61c361dd Author: Jan Wedekind (Dr) Date: Sun Oct 12 20:21:58 2014 +0100 Documentation about X.org commit e2a36b97bef4ed40773f546961f528674d6abc8b Author: Jan Wedekind (Dr) Date: Sun Oct 12 18:56:10 2014 +0100 Learned about 'iota', updated docs a bit commit 559c106a6329e046a915e6649f42dfc304b3add6 Author: Jan Wedekind (Dr) Date: Fri Oct 10 20:41:08 2014 +0100 Compact array before converting to image commit 02077a78b7eed6a2025c620071854d8337311db8 Author: Jan Wedekind (Dr) Date: Thu Oct 9 21:29:51 2014 +0100 Conversion for UBYTE array to image commit a1a25f6c2879d5b1d8311fb05e0b3de74d03ec28 Author: Jan Wedekind (Dr) Date: Sun Oct 5 21:13:24 2014 +0100 Align memory for faster colorspace operations commit 56cc415f459bd607bf3c1083d0746c310c13ae9a Author: Jan Wedekind (Dr) Date: Sun Oct 5 19:02:49 2014 +0100 Introduced 'malloc' commit b975dad8dade416680b9408fdbab9fd21ae2fef5 Author: Jan Wedekind (Dr) Date: Fri Oct 3 16:38:30 2014 +0100 Maintain list of allocated Xvideo ports commit eb38cde3a36437e619ef6920245b7becf04f420d Author: Jan Wedekind (Dr) Date: Thu Oct 2 22:16:31 2014 +0100 Swap Cr and Cb for YV12 images commit 2ea2c1f3b38c505de52e9f4ab9d44fe1992e70c3 Author: Jan Wedekind (Dr) Date: Thu Oct 2 21:02:13 2014 +0100 Use offsets and pitches given by Xvideo driver commit a1818312fb501033ecd305eb23f5d18e59f840f7 Author: Jan Wedekind (Dr) Date: Wed Oct 1 22:09:19 2014 +0100 Added Xvideo output (WIP) commit b8bf992e0e507fa46ee28998bdd7a7cbdfc2f7be Author: Jan Wedekind (Dr) Date: Wed Oct 1 21:54:48 2014 +0100 Added YV12 format commit 5cb405ee860fea05d761229453b3ccc431bc0f81 Author: Jan Wedekind (Dr) Date: Wed Oct 1 21:29:07 2014 +0100 Check for Xvideo commit d6548eb2c171997fbbd298baac680f03ad4ab274 Author: Jan Wedekind (Dr) Date: Fri Sep 26 17:38:28 2014 +0100 Conversion of images with different pitches commit a4ce0a571d101d695cb11a081d97cd83b0e8e936 Author: Jan Wedekind (Dr) Date: Fri Sep 26 16:25:06 2014 +0100 Using 'shape' instead of width and height commit bd9efb99dc8d7d7bb68fe7ffdc8c72d12d3f321c Author: Jan Wedekind (Dr) Date: Fri Sep 26 08:20:19 2014 +0100 Minor changes commit 0fe83388b446a0208869196f977bdfedb78f6437 Author: Jan Wedekind (Dr) Date: Wed Sep 24 22:55:28 2014 +0100 Use simpler constructor commit 1ec573291a645324f7796ec48f2047d4a37674d8 Author: Jan Wedekind (Dr) Date: Wed Sep 24 22:53:10 2014 +0100 Simplified constructor commit ae08f81961fde5b8b5ffc0ef8127e93b49e69983 Author: Jan Wedekind (Dr) Date: Wed Sep 24 22:40:44 2014 +0100 image->multiarray commit 24a609cc89cda7dccc68534e4083781585cfba2f Author: Jan Wedekind (Dr) Date: Mon Sep 22 22:25:50 2014 +0100 'read' -> 'grab' commit a163b944fe0262883b41bfc683346b3ec67e6cff Author: Jan Wedekind (Dr) Date: Mon Sep 22 22:08:27 2014 +0100 Objectified V4L2 input commit d9db365efae4b65e76645fb1e659225ab869b0db Author: Jan Wedekind (Dr) Date: Sun Sep 21 19:52:50 2014 +0100 Bugfix for segfault commit 0ea30e8d8470c0233afeef88589bec756233840a Author: Jan Wedekind (Dr) Date: Sun Sep 21 19:18:35 2014 +0100 'close' -> 'destroy' commit fb7fee59a9b433376f57c6e53b16208264ec7e95 Author: Jan Wedekind (Dr) Date: Sun Sep 21 18:56:38 2014 +0100 Added 'show' for video display commit 78ace8bc600f62e403169083f0c823c1929d228b Author: Jan Wedekind (Dr) Date: Sun Sep 21 18:20:20 2014 +0100 Added 'show' method for images commit b2c10cfc4d27e9932213bf45575ab0a7559dd647 Author: Jan Wedekind (Dr) Date: Fri Sep 19 23:03:54 2014 +0100 Renamed frame to image commit 5a87595f1e8b7cf5d1545616ec99731edb296663 Author: Jan Wedekind (Dr) Date: Fri Sep 19 17:29:29 2014 +0100 Objectified Xorg window display code commit d6d20df0087c522b66ce8c1b63ab5f55686b49ed Author: Jan Wedekind (Dr) Date: Fri Sep 19 16:46:48 2014 +0100 Added type checks for SMOB objects commit a5703101cbfd13c846b6a510a8449134d73bc199 Author: Jan Wedekind (Dr) Date: Thu Sep 18 20:56:01 2014 +0100 Use pitches to compute offsets commit 8dec93c9e4a4fa009359210093300f5d68b7728a Author: Jan Wedekind (Dr) Date: Wed Sep 17 18:39:32 2014 +0100 'convert' allows to specify pitches and offsets commit 5da88275846c0767f9e1a411b676de55d6791d7a Author: Jan Wedekind (Dr) Date: Tue Sep 16 22:43:46 2014 +0100 Replaced 'cond' with 'case' in some cases commit 3e3f1661f01a7170745afd69fbd3c0fa6723691b Author: Jan Wedekind (Dr) Date: Tue Sep 16 20:04:09 2014 +0100 Skip conversion if destination format is identical commit 4ef42ef604036af67cc3f45733bf3b239592edcd Author: Jan Wedekind (Dr) Date: Tue Sep 16 08:08:10 2014 +0100 Error handling for OpenGL commit eb1ede0914f113d83c7f31952593943dbb8f6607 Author: Jan Wedekind (Dr) Date: Mon Sep 15 19:49:49 2014 +0100 Added OpenGL output (glDrawPixels) commit bd5c969134689ff494fd057efbe3e3e955929196 Author: Jan Wedekind (Dr) Date: Sun Sep 14 20:29:38 2014 +0100 Added V4L2 user-pointer input commit 092eb76d47e182d54bb15f5acd40e03dc97bd991 Author: Jan Wedekind (Dr) Date: Sun Sep 14 19:54:35 2014 +0100 Added read-input for V4L2 devices commit 9c032edc36497d891af79ab89dee2e3c5e1a5dd7 Author: Jan Wedekind (Dr) Date: Sat Sep 13 22:13:48 2014 +0100 Close windows when closing display connection commit 7f4dfa661390495dfc45319252c53c952c9d8ba1 Author: Jan Wedekind (Dr) Date: Fri Sep 12 17:35:10 2014 +0100 Sort V4L2 formats by compression and size commit a2c1fe3e9563a93a506a3e030c69dff130783ddf Author: Jan Wedekind (Dr) Date: Fri Sep 12 16:42:50 2014 +0100 Compute proper frame size commit 4aca79c4345f4c1e280747aa6f5ecab35e5f597a Author: Jan Wedekind (Dr) Date: Fri Sep 12 08:31:33 2014 +0100 Added more frame formats commit feea82235ef72979ce1746b6e0385c799b12e120 Author: Jan Wedekind (Dr) Date: Thu Sep 11 22:39:19 2014 +0100 Decode and encode V4L2 format numbers commit 4265a8823128ca7077730aaf6cfedef3e0984f5a Author: Jan Wedekind (Dr) Date: Thu Sep 11 08:35:11 2014 +0100 Using Scheme list for list of windows commit a7af75f18ced61c62db1a10fd8d8dd55e6af7289 Author: Jan Wedekind (Dr) Date: Thu Sep 11 08:21:08 2014 +0100 Only look up 'convert' method once commit 63a671d7f1b3a77070774920675c8e512e00d19e Author: Jan Wedekind (Dr) Date: Wed Sep 10 22:19:05 2014 +0100 Window title and resizing commit 1da7badbfeb05a25ce083ff5e382c95da9a2b17e Author: Jan Wedekind (Dr) Date: Wed Sep 10 21:45:01 2014 +0100 Only convert frame when required commit 7564ba92d79a7c55d42ba82facd382b0e10d70d4 Author: Jan Wedekind (Dr) Date: Wed Sep 10 21:34:00 2014 +0100 Convert frames on-the-fly commit 17272e43d4215877560b73ed178e792835aecc4b Author: Jan Wedekind (Dr) Date: Tue Sep 9 22:30:18 2014 +0100 Added scaling of frames and more colourspaces commit 6ce79de9d87c8b2be220dc06140a69e275241fdd Author: Jan Wedekind (Dr) Date: Tue Sep 9 18:42:32 2014 +0100 Removed superfluous format statements in tests commit 7ef530387a4c2c5052e46fcbae1c176f7979027c Author: Jan Wedekind (Dr) Date: Tue Sep 9 18:25:34 2014 +0100 Added selection of video format commit 0b91ce273ceea4a905ae9f6d2d0ce6652f466b6b Author: Jan Wedekind (Dr) Date: Mon Sep 8 19:20:39 2014 +0100 Convert V4L2 pixel format to swscale format commit 51752535b3ec4dd9deb83642aab524676e198f4b Author: Jan Wedekind (Dr) Date: Sun Sep 7 21:55:22 2014 +0100 Added class and BGRA format commit 5c7d0393523120678afde174a27203a88133b48d Author: Jan Wedekind (Dr) Date: Sat Sep 6 22:16:13 2014 +0100 Working on frame conversions commit b75d4cae763aa6d5c7bd3077c0ff3dbc3f9e1b54 Author: Jan Wedekind (Dr) Date: Fri Sep 5 17:29:10 2014 +0100 Added definition of PIX_FMT_GRAY8 commit 56b4e4ad6d3c048acdf2ead718402b08fab95bed Author: Jan Wedekind (Dr) Date: Fri Sep 5 16:44:04 2014 +0100 Added routine painting black image into window commit 53bbc3d2ca34a3775ae6a76c5f17293fb705ef68 Author: Jan Wedekind (Dr) Date: Thu Sep 4 22:30:37 2014 +0100 Catch window close events commit 4992938fadd4d80a579810fd2e28b29eaa88bab3 Author: Jan Wedekind (Dr) Date: Thu Sep 4 22:06:16 2014 +0100 Added handling of key events commit 3b3a2152c1b92fdcf436c0fb40c1ea14e9a4a85c Author: Jan Wedekind (Dr) Date: Thu Sep 4 21:47:33 2014 +0100 Working on X11 event loop commit 18b5193996ad9bae2595bf2147259dcbf04a74f6 Author: Jan Wedekind (Dr) Date: Wed Sep 3 22:18:21 2014 +0100 Added xdisplay-process-events commit 87e91ed485a599342c90e90674877f742106cba0 Author: Jan Wedekind (Dr) Date: Wed Sep 3 22:03:23 2014 +0100 Renamed some methods commit 8d9f7438be2ca6a206a57c257f73191ec87bb18d Author: Jan Wedekind (Dr) Date: Wed Sep 3 21:18:48 2014 +0100 Added check for X11 commit c3e701c0d257f5a7a4b517e53eb0c86bf6f5d2df Author: Jan Wedekind (Dr) Date: Tue Sep 2 22:55:17 2014 +0100 Added showing and hiding of X11 window commit 8a6ae06172e52d92055e73c0d141573ec50f5a39 Author: Jan Wedekind (Dr) Date: Mon Sep 1 21:49:23 2014 +0100 Working on XOrg bindings commit 05d96726a8bdd95d6457b551b14c642ae20ff2a8 Author: Jan Wedekind (Dr) Date: Sun Aug 31 20:06:54 2014 +0100 Improved display of arrays commit fadb27a03a4264c188aba4beb32690f8cdc135c0 Author: Jan Wedekind (Dr) Date: Fri Aug 29 17:17:13 2014 +0100 'drop' -> 'dump' commit 449408d191d3b3fef1936ea76a1e21facaf7292f Author: Jan Wedekind (Dr) Date: Wed Aug 27 21:00:37 2014 +0100 Using more meaningful error messages commit 1385d64d6d28f8e0420cb3ce93a8e797d1df4c68 Author: Jan Wedekind (Dr) Date: Wed Aug 27 20:47:09 2014 +0100 Using bytevectors to allocate memory commit 7fed160a5958690a244f0e87e282d9ad3659744b Author: Jan Wedekind (Dr) Date: Wed Aug 27 20:39:54 2014 +0100 Bugfix for error output commit 7a3ac84af7fddafdc42084a5820ba461a7b7587f Author: Jan Wedekind (Dr) Date: Wed Aug 27 19:41:33 2014 +0100 Working on V4L2 input commit 426fa217807824c9c59702f0716e567557e4cb23 Author: Jan Wedekind (Dr) Date: Tue Aug 26 21:17:06 2014 +0100 Continuing V4L2 implementation commit dacd82ad7c08c84b8dfb170c5f630c8a1e9bc0bd Author: Jan Wedekind (Dr) Date: Mon Aug 25 22:04:42 2014 +0100 Working on V4L2 input commit d0f56f4e22598c346405b0553d986dda6c589125 Author: Jan Wedekind (Dr) Date: Mon Aug 25 19:36:21 2014 +0100 Working on V4L2 input commit b031d9520d95510bde271a3846f6792bb1bc1a32 Author: Jan Wedekind (Dr) Date: Sun Aug 24 11:55:11 2014 +0100 Added SMOB type for V4L2 commit a5534efc902f3b43da43c232a62e564743a3d64c Author: Jan Wedekind (Dr) Date: Sun Aug 24 11:11:13 2014 +0100 Added empty v4l2 extension commit 5cd5487dbc1c1f6568cd568aeb2c375ad24b8a83 Author: Jan Wedekind (Dr) Date: Fri Aug 22 16:58:07 2014 +0100 Bugfix for test commit a7c113b2aea22939341c7f94a19ed2364ac7b12a Author: Jan Wedekind (Dr) Date: Fri Aug 22 08:41:06 2014 +0100 Partial bugfix: avoid multiplying stride many times commit 953fe9cb9336f8dc0e9173b323032a148a02d3d9 Author: Jan Wedekind (Dr) Date: Thu Aug 21 21:23:57 2014 +0100 Added array multiplication commit 851c59055dbe32637cc6639fc124eb065ed61c84 Author: Jan Wedekind (Dr) Date: Thu Aug 21 21:20:06 2014 +0100 Added macros to define unary and binary operations commit 0c318f5e7836617a07c585f4fbfdfda6e1064a73 Author: Jan Wedekind (Dr) Date: Thu Aug 21 21:07:19 2014 +0100 Added 'obj' for getting bytevector with code commit c578ec956a539d0f2f71f9a7d575910dddb9d78d Author: Jan Wedekind (Dr) Date: Wed Aug 20 22:47:55 2014 +0100 Renamed some pointer variables commit 7185e55117395da291fe7e93030ca098050f1cef Author: Jan Wedekind (Dr) Date: Wed Aug 20 22:36:55 2014 +0100 Test 3D array-array operation '+' commit 46e18252224c1ba6aaf6868bb247a0c3265f9143 Author: Jan Wedekind (Dr) Date: Tue Aug 19 20:59:44 2014 +0100 Not using parameter registers commit a24edc4c8cb19126251acacd59c8cbf5fe73df61 Author: Jan Wedekind (Dr) Date: Mon Aug 18 23:05:26 2014 +0100 Removed redundant calls to set-live commit aa793e40b936806abbbcfb24282f3448102514b6 Author: Jan Wedekind (Dr) Date: Mon Aug 18 22:38:17 2014 +0100 'args' -> 'arg-codes' commit d4f5bcb58587b198013c1519c112b075376dbb29 Author: Jan Wedekind (Dr) Date: Mon Aug 18 19:31:03 2014 +0100 'fun', 'expr' -> 'proc' commit e30cc2ff0cb22919b5a4e8abe5e4c50740205d16 Author: Jan Wedekind (Dr) Date: Mon Aug 18 19:30:25 2014 +0100 Added some tests for 3D arrays commit bb9585d86ed946f6952e44aa076d9f9243b1fce6 Author: Jan Wedekind (Dr) Date: Sun Aug 17 21:59:33 2014 +0100 Minor simplifications commit f3c6faa84478631776a2ac8f945f39e92fd4ce1e Author: Jan Wedekind (Dr) Date: Sat Aug 16 23:06:45 2014 +0100 Correct encoding for Jcc rel32 commit 487509f8f5f307d6593ca1cacb37c9046860fe4f Author: Jan Wedekind (Dr) Date: Fri Aug 15 08:17:26 2014 +0100 Minor simplification commit 7120d1aa34fd781772e78e08761f7c880547f230 Author: Jan Wedekind (Dr) Date: Fri Aug 15 08:09:52 2014 +0100 Simplified resolving of jumps commit 6fcdb2c3bce6b009acb01839cb23aae9c11a3a63 Author: Jan Wedekind (Dr) Date: Thu Aug 14 19:12:52 2014 +0100 Failing tests for jump over long jump statement commit 104220a108ca725709d1047123d4bbdbdd746a5b Author: Jan Wedekind (Dr) Date: Thu Aug 14 18:32:19 2014 +0100 'len' -> 'instruction-length' commit 4c49015a3925f5c700c67c05d30122a1a02cde4a Author: Jan Wedekind (Dr) Date: Mon Aug 11 22:23:06 2014 +0100 Updated TODO commit b42ef5f3070c4d3d4705f4e3eae5deaa65b39cfb Author: Jan Wedekind (Dr) Date: Sun Aug 10 21:29:50 2014 +0100 Introduced 'loc' to handle changing stack pointer commit 8331d12ee4dba6a2c2d9d55b23afd78c1714fd67 Author: Jan Wedekind (Dr) Date: Sat Aug 9 18:35:52 2014 +0100 Version 0.1.6 commit 1670db4573daa8440901b4b8d78634b7bb868616 Author: Jan Wedekind (Dr) Date: Sat Aug 9 16:55:29 2014 +0100 Using 'binary-op' to implement plus and minus commit 5ef1ebe593cfcbb6880c34b22ee3dc6758cb6b7e Author: Jan Wedekind (Dr) Date: Fri Aug 8 16:08:06 2014 +0100 Bugfix to get subtraction of 2D arrays working commit 3cb91c56bd9705f2e95dfc1cded5aa976d212572 Author: Jan Wedekind (Dr) Date: Fri Aug 8 15:12:10 2014 +0100 Added some tests for operations on 2D arrays commit eaa87bae48d9de75b1208a10ed1e67ab94964999 Author: Jan Wedekind (Dr) Date: Fri Aug 8 14:27:40 2014 +0100 Added version check for Guile 2.0.9 or later commit 4fd3cfb61fa146e24d55435fd9cbfcc110035d23 Author: Jan Wedekind (Dr) Date: Fri Aug 8 13:30:11 2014 +0100 Bugfix for coercion of multi-dimensional arrays commit 0736cca32e11f47b2a860312b027802a014071d1 Author: Jan Wedekind (Dr) Date: Wed Aug 6 13:13:31 2014 +0100 Disabled test for unary operation on 2D array commit 912cb704d267d694502108ccfa3a16670bcc250c Author: Jan Wedekind (Dr) Date: Tue Aug 5 21:04:13 2014 +0100 Made implementation of '-' recursive commit 14c2d351f250a32c203ff2b6d7e4c1c06c9862ee Author: Jan Wedekind (Dr) Date: Sat Aug 2 22:48:33 2014 +0100 (CMP *rx *r) -> (CMP *r *rx) commit 70434d44e47e8d0f50e99f13cec9a44935a43213 Author: Jan Wedekind (Dr) Date: Sat Aug 2 22:47:03 2014 +0100 SIB byte also required for R12-based addressing commit 713c3679af4a64e76952e1049813a93dd01826db Author: Jan Wedekind (Dr) Date: Sat Aug 2 15:20:43 2014 +0100 Special case for REX encoding with R12/RBP commit a2e5120ce0807951ec825c6db2d7890fd960bb75 Author: Jan Wedekind (Dr) Date: Thu Jul 31 21:26:23 2014 +0100 Separate environments for labels commit 6c6826ffb44ccac94260d6c869a9c560cc7358cc Author: Jan Wedekind (Dr) Date: Thu Jul 31 21:07:08 2014 +0100 Simplified resolving of jump addresses commit 5b41f0e58c35d46cf6e42c40ce69061b9ff555c8 Author: Jan Wedekind (Dr) Date: Thu Jul 31 18:29:09 2014 +0100 Simplified application of label offsets commit 3d2a339d952ac9669a9dadc55b88c638bdf5c317 Author: Jan Wedekind (Dr) Date: Thu Jul 31 17:54:44 2014 +0100 Simplified code for determining label offsets commit 762609e108d1b1f7f032c1089c58c7c2827fb12c Author: Jan Wedekind (Dr) Date: Thu Jul 31 16:23:36 2014 +0100 Added some more tests for jump statements commit c5efbe2c173a5af21a9035ce25857601075ade93 Author: Jan Wedekind (Dr) Date: Thu Jul 31 16:17:47 2014 +0100 Simplified API for resolving jump statements commit 1e6708f3bdde66651d1bd65da36ef918cd44b3d0 Author: Jan Wedekind (Dr) Date: Thu Jul 31 15:26:36 2014 +0100 Let 'asm' flatten the lists commit cc8114c2c9f3bb5794e396eb72d9cb2caf7c8868 Author: Jan Wedekind (Dr) Date: Thu Jul 31 15:03:11 2014 +0100 Added better test suite commit 8b42f90556988cf4f9130d8a3d961b121976e561 Author: Jan Wedekind (Dr) Date: Wed Jul 30 23:36:25 2014 +0100 Fixed LD_LIBRARY_PATH bug in Makefile commit 11f3739fab892311580bdd4a539ea43e0a265024 Author: Jan Wedekind (Dr) Date: Wed Jul 30 23:20:20 2014 +0100 Require Guile version 2.0.9 or later commit 638306ef4df968f9a8a0dc16c517a4dfe5e37a7e Author: Jan Wedekind (Dr) Date: Wed Jul 30 22:11:05 2014 +0100 Added test for projection commit 20af41cb5cfc3b5d642876eda2de63f62d6b4f93 Author: Jan Wedekind (Dr) Date: Wed Jul 30 15:17:00 2014 +0100 Added 'rebase' commit fb9b27877aab91c8a6396d625e005d02f8282eec Author: Jan Wedekind (Dr) Date: Tue Jul 29 22:37:47 2014 +0100 'first-element' commit cc40ac0cf1c9f15e8527786bd3d5e74957af1d8a Author: Jan Wedekind (Dr) Date: Tue Jul 29 22:31:55 2014 +0100 Added 'first-element' commit 44963d57718048b1577b59d23e4d140db6bd382b Author: Jan Wedekind (Dr) Date: Tue Jul 29 22:30:26 2014 +0100 Changed 'target' -> 'typecode' commit 56cd72692bf14034500b86fd8a7ab06954588c04 Author: Jan Wedekind (Dr) Date: Tue Jul 29 15:32:07 2014 +0100 Made wrapping of parameters more regular commit 5f7c31bf4f9a6631a20c725e6979d217e5d6e2b0 Author: Jan Wedekind (Dr) Date: Tue Jul 29 15:00:56 2014 +0100 Indentation commit ec51ef326a13957066cb0109bef92c847243fab6 Author: Jan Wedekind (Dr) Date: Mon Jul 28 16:40:02 2014 +0100 Minor modifications commit 43885dbd8430898149532bb1003d3af937515cd1 Author: Jan Wedekind (Dr) Date: Mon Jul 28 16:26:04 2014 +0100 Converted 'jit-wrap' to a macro commit e7774d5bbaa4977341e77ea3ed8450e42cd91d86 Author: Jan Wedekind (Dr) Date: Sat Jul 26 18:54:17 2014 +0100 'pool' -> 'jit-function' commit 35a289b2fbdecf351bc3ee39abda27d56d8e58c7 Author: Jan Wedekind (Dr) Date: Fri Jul 25 23:53:47 2014 +0100 Bugfix missing signed-expansions commit e5d78d246b13efd16f0d0fd24ca374ecefe0ad93 Author: Jan Wedekind (Dr) Date: Fri Jul 25 23:27:56 2014 +0100 Bugfix for sign-extending numbers commit f6966920c5bc422cdd0a18827eda514386505240 Author: Jan Wedekind (Dr) Date: Thu Jul 24 22:29:53 2014 +0100 Added 'expand' to repeat elements commit 89dd5d8b5baaa73caafec8b242a21120ac43d2f8 Author: Jan Wedekind (Dr) Date: Thu Jul 24 17:17:39 2014 +0100 Bugfix for n-dimensional arrays commit 7461faa2e175bc4d413fb62f4ad0d420df0d263a Author: Jan Wedekind (Dr) Date: Thu Jul 24 17:09:49 2014 +0100 Bugfix for equal size but different signed-ness commit f4820de6f13a8092304974edb97c46a0fd8dcfcb Author: Jan Wedekind (Dr) Date: Thu Jul 24 16:42:31 2014 +0100 Moved some code into jit.scm commit 6077e91730960d3a69f75f8acc30386eb49af0cf Author: Jan Wedekind (Dr) Date: Thu Jul 24 16:34:34 2014 +0100 Using slow version of 'fill' commit ffbc3f1afc5c7ff4dabf6bcee1e202fe7df35635 Author: Jan Wedekind (Dr) Date: Thu Jul 24 15:41:25 2014 +0100 Common code for allocation of return values commit d1729826c75ef635380cedc3f69a117969e53f89 Author: Jan Wedekind (Dr) Date: Wed Jul 23 22:29:26 2014 +0100 Added 'attach' as counterpart to 'cons' commit 79b8b576ae8446989c42d76b395757491dea71d7 Author: Jan Wedekind (Dr) Date: Wed Jul 23 21:57:57 2014 +0100 Fixed order for crop, drop, and downsample commit 1004127d1ff11d569d0f1ce0ea5fe049a2118523 Author: Jan Wedekind (Dr) Date: Tue Jul 22 22:33:48 2014 +0100 Changed argument order for downsample commit 404ef3f70f95137c20ead48bbaf5c4b440f0f17d Author: Jan Wedekind (Dr) Date: Tue Jul 22 21:44:45 2014 +0100 Extended 'crop' and 'drop' to n-dimensional arrays commit d019e0f45452260975e94681e2ea7f8a5caffa21 Author: Jan Wedekind (Dr) Date: Tue Jul 22 21:12:33 2014 +0100 Replaced 'slice' with 'drop' and 'crop' commit c28f708882479bafcca52d8c3ca9bf6666760251 Author: Jan Wedekind (Dr) Date: Tue Jul 22 17:56:34 2014 +0100 Exposed 'drop' commit 9c03c202bc9424c592ae57cf937112f94a825c99 Author: Jan Wedekind (Dr) Date: Tue Jul 22 16:30:33 2014 +0100 Added 'uncycle' and 'unroll' commit 6c91b3b812b4e2df45de42d010e7a9440c667bf8 Author: Jan Wedekind (Dr) Date: Tue Jul 22 15:07:48 2014 +0100 Take stride values into account commit f6d8c3cde723cf4fc7d08a95bc7b46fd400c6672 Author: Jan Wedekind (Dr) Date: Tue Jul 22 15:07:29 2014 +0100 Using 'list' instead of '`' and ',' commit a93c32e380f2bc5c6d7223dd763be17f7685e13f Author: Jan Wedekind (Dr) Date: Tue Jul 22 12:59:05 2014 +0100 Downsampling with phase specified commit d0aecb8ee06aa3151d38ae865b2adbe550a91c4a Author: Jan Wedekind (Dr) Date: Tue Jul 22 12:21:52 2014 +0100 Downsampling with phase = n - 1 commit 4a2aa20172aa3b1dd5b3fceac83ba804b2c924bc Author: Jan Wedekind (Dr) Date: Mon Jul 21 22:43:23 2014 +0100 IMUL EAX, EDI, 42 commit 500a9dec9d112595baec6c809e72db31b68392e4 Author: Jan Wedekind (Dr) Date: Sat Jul 19 22:42:03 2014 +0100 Test multiplication of long integers commit f323c5b102329389c92f926e8e6058b4779821a9 Author: Jan Wedekind (Dr) Date: Sat Jul 19 22:16:26 2014 +0100 IMUL r, r/m commit 5293bc6cf5e93a64ed1f029f18831b7cf6eabf95 Author: Jan Wedekind (Dr) Date: Fri Jul 18 22:40:57 2014 +0100 Simplified 'params' method commit b84039262cf4e946a26adcd0030a2ce4481e1645 Author: Jan Wedekind (Dr) Date: Fri Jul 18 22:29:16 2014 +0100 Made passing of return value more regular commit 0a31a6a4e5a70564830c6799a656ab5859e93709 Author: Jan Wedekind (Dr) Date: Fri Jul 18 21:02:21 2014 +0100 Made declaration of return type more regular commit ec849bf68c0c6212590fc4b968323261f6fff522 Author: Jan Wedekind (Dr) Date: Fri Jul 18 18:28:11 2014 +0100 Use 'let' instead of 'let*' in environment commit 228e0c1f22ddddb6eedc0496f5c1181b7e9b4800 Author: Jan Wedekind (Dr) Date: Fri Jul 18 18:04:44 2014 +0100 Making code more regular commit 81fd454d61e09fdcf7a67b6330bbb07f6a05a440 Author: Jan Wedekind (Dr) Date: Fri Jul 18 17:29:40 2014 +0100 Minor fixes commit ef7291e41779c9d8e4daf48615dbea50c3f2cf86 Author: Jan Wedekind (Dr) Date: Fri Jul 18 17:27:03 2014 +0100 'pend' -> '*rx' commit deba47eda5b2142b37cfa544ba8cf2d45e7a0332 Author: Jan Wedekind (Dr) Date: Fri Jul 18 17:05:01 2014 +0100 Changed argument order for 'asm' commit 22e2fb27fe0e3d648f9b6b73d24b5f8fc96de022 Author: Jan Wedekind (Dr) Date: Fri Jul 18 16:38:39 2014 +0100 Introduced 'params' for more compact JIT syntax commit bf2b81d2b0652535d63d0dcd91fc21d7e095e5d7 Author: Jan Wedekind (Dr) Date: Fri Jul 18 15:26:49 2014 +0100 'v' -> 'r' commit 813afa1a36d41135df0ae5b22419932ca6351f07 Author: Jan Wedekind (Dr) Date: Fri Jul 18 15:01:06 2014 +0100 Trying to take care of changing stack pointer commit d691aa05489781c12551cf5a0141857e5b5cf381 Author: Jan Wedekind (Dr) Date: Mon Jul 14 17:50:56 2014 +0100 Compact code for retrieving arguments commit b5b4f58a65475ea910ac03eb5f86fb2c5b9fa04b Author: Jan Wedekind (Dr) Date: Mon Jul 14 16:40:37 2014 +0100 Minor simplifications commit 9a93375ae72821842936111f8eb655b946d895fb Author: Jan Wedekind (Dr) Date: Mon Jul 14 16:33:09 2014 +0100 Pointer constructor allocates memory by default commit e471586a2f11e1d221c7fcbac162ceffd713f082 Author: Jan Wedekind (Dr) Date: Mon Jul 14 15:13:15 2014 +0100 Making code more regular commit 641b4be346d27ef32660cb1a1d8e4e97c236415f Author: Jan Wedekind (Dr) Date: Mon Jul 14 14:22:24 2014 +0100 'asm' requires list of argument types now commit cc8ea26404204a4b554e7518cd8d1b63f78f029c Author: Jan Wedekind (Dr) Date: Mon Jul 14 13:59:50 2014 +0100 Updated TODO commit 4a42159871243dbe2494893c403d158c7f24b47b Author: Jan Wedekind (Dr) Date: Mon Jul 14 13:42:11 2014 +0100 Trying to make code more regular commit 17d7bd405cb80aec30fac843c97fa554f72d191a Author: Jan Wedekind (Dr) Date: Sat Jul 12 13:57:51 2014 +0100 More complete implementation of '-' commit 867656c0132ff9644031bb8febee891bae131b3c Author: Jan Wedekind (Dr) Date: Wed Jul 9 22:58:56 2014 +0100 Minor simplifications commit 4547203720c9d94753a5e8a56a8bc094a3739320 Author: Jan Wedekind (Dr) Date: Wed Jul 9 21:01:01 2014 +0100 Reversed argument of 'element' commit c284a611ee865180a30e31e6c96e5c43f5d01900 Author: Jan Wedekind (Dr) Date: Wed Jul 9 20:48:36 2014 +0100 Minor simplifications commit c525d7633eebf7664f3227f2c13a5121e8b8f3a7 Author: Jan Wedekind (Dr) Date: Wed Jul 9 19:45:52 2014 +0100 Support for accessing multi-dimensional arrays commit 8e51c363bc9448af7b2dbd4e369f378171fca520 Author: Jan Wedekind (Dr) Date: Wed Jul 9 19:13:40 2014 +0100 'array->list' -> 'multiarray->list' commit c4382513f59858d39884504d7f82c20c924595d0 Author: Jan Wedekind (Dr) Date: Wed Jul 9 19:11:47 2014 +0100 'sequence->list' -> 'array->list' commit 75c7d7cea8a6e75c46ab53b5659750d87ce72297 Author: Jan Wedekind (Dr) Date: Wed Jul 9 18:58:13 2014 +0100 A zero-dimensional array is a pointer commit d03f28c7fbd0cd3a55285a1f11e8523bdf7e090d Author: Jan Wedekind (Dr) Date: Wed Jul 9 17:51:33 2014 +0100 Working on multi-dimensional arrays commit ae2dbe647b8a1e50a2b74698436460cb52a91671 Author: Jan Wedekind (Dr) Date: Tue Jul 8 23:42:20 2014 +0100 Added default strides for n-dimensional array commit e7d017962ececc7f5dbdc665c57dcd25b57acd3b Author: Jan Wedekind (Dr) Date: Tue Jul 8 16:50:24 2014 +0100 Query shape of n-dimensional array commit 18f659c81ff29f4d4f86c26a83b4fcd342826512 Author: Jan Wedekind (Dr) Date: Tue Jul 8 16:11:44 2014 +0100 Determine shape of nested lists commit de7db3fccf1c2ee31640aa419d3549604567ac6f Author: Jan Wedekind (Dr) Date: Tue Jul 8 14:19:28 2014 +0100 Removed 'lambda', 'var', and 'lookup' commit 2a2e309c91600bdf91b8b6487d10bcab37dbb7e6 Author: Jan Wedekind (Dr) Date: Tue Jul 8 14:08:28 2014 +0100 Use 'multiarray' as typename commit 1bd9c9a27056701c6d196ff71d4940d045379a3a Author: Jan Wedekind (Dr) Date: Mon Jul 7 21:38:22 2014 +0100 Added example for Intel x86-64 assembler commit 1d448a58b1407951ad06b86db8473a0f0912fd47 Author: Jan Wedekind (Dr) Date: Fri Jul 4 23:44:13 2014 +0100 '' -> '', '' -> '' commit 7b54c0f0e8be69be18fa8a610c1f847cfff67e93 Author: Jan Wedekind (Dr) Date: Fri Jul 4 23:39:41 2014 +0100 Only using '' to represent pointers commit 3b636f8223690a91d7b4761d94d132662659c878 Author: Jan Wedekind (Dr) Date: Fri Jul 4 13:38:47 2014 +0100 Removed support for '(ptr 1)' commit 32f7deb2516992759444a0d7cd6990a372cbf484 Author: Jan Wedekind (Dr) Date: Fri Jul 4 13:31:58 2014 +0100 Simplified implementation of 'reg' commit 396f6fc414a07b2fca5c80ae321069e18d6aba5d Author: Jan Wedekind (Dr) Date: Fri Jul 4 13:15:53 2014 +0100 'init-form' -> 'init-value' commit eb95694d8e50acff8d8bb3d454ac0e1037eb9629 Author: Jan Wedekind (Dr) Date: Fri Jul 4 13:13:20 2014 +0100 Not exporting 'scale' any more commit 602806009b43b661c2d350dde3ca133ec1fbc8b4 Author: Jan Wedekind (Dr) Date: Fri Jul 4 13:03:49 2014 +0100 Infer scale from pointer type commit 276b9d79d10a0f12d826ada44aeb5abf92d5d2b7 Author: Jan Wedekind (Dr) Date: Fri Jul 4 12:49:45 2014 +0100 Added TODO commit a88bef59dd816bf0e9b1c0bd362cba7614c8a353 Author: Jan Wedekind (Dr) Date: Fri Jul 4 12:45:38 2014 +0100 Minor changes commit a216d1c111032570523716b113337ac567be7502 Author: Jan Wedekind (Dr) Date: Fri Jul 4 12:28:27 2014 +0100 Only one class for representing registers commit 4876a559a2a339ca0662f0cb31a5a5567e96f7d7 Author: Jan Wedekind (Dr) Date: Thu Jul 3 21:46:47 2014 +0100 Minor change commit b2adbe58b2200e44e5cd6883b9015ffda747fc27 Author: Jan Wedekind (Dr) Date: Thu Jul 3 13:24:18 2014 +0100 Have 'asm' append RET to specified code block commit 6619f1163eee7e81ed579e9c20668502c018783e Author: Jan Wedekind (Dr) Date: Wed Jul 2 19:33:23 2014 +0100 Using register pool to implement operations commit 7f4bae0195e551c6fa8b5c0be496a5d2b08ffe89 Author: Jan Wedekind (Dr) Date: Wed Jul 2 18:03:58 2014 +0100 'storage-size' -> 'size-of' commit eefee28fe8949c61284cd76cedd6d4533a627f96 Author: Jan Wedekind (Dr) Date: Wed Jul 2 17:50:50 2014 +0100 Using instead of > or > commit 87f59e39e5b4255ee1795a75b25f494fe6f11329 Author: Jan Wedekind (Dr) Date: Wed Jul 2 16:22:39 2014 +0100 Simplified constructor for register pool commit e7d3db510aa895c47c5ae9382f23c7ee8a899194 Author: Jan Wedekind (Dr) Date: Wed Jul 2 15:29:46 2014 +0100 Updated ChangeLog commit a821bba6abe293a381de6403e4c08c7d5ceaf12d Author: Jan Wedekind (Dr) Date: Wed Jul 2 15:27:29 2014 +0100 Version 0.1.5 commit ead37af5f94e6abc00a791be6535512445cf9b1c Author: Jan Wedekind (Dr) Date: Wed Jul 2 15:25:44 2014 +0100 Updating documentation commit 894ce9a18c491e92c7b7b6037f59327f4e84c9b3 Author: Jan Wedekind (Dr) Date: Wed Jul 2 15:13:39 2014 +0100 'environment' -> 'env' commit 91c5054a84a6333fcecc5e2e6b65d8d976ed2481 Author: Jan Wedekind (Dr) Date: Tue Jul 1 22:16:59 2014 +0100 Moved foreign type declarations into 'asm' method commit c356943a1d2827d30eeb2c1124fcc369d59fc5ff Author: Jan Wedekind (Dr) Date: Mon Jun 30 19:17:01 2014 +0100 Removed 'step' variables commit 5694551e2fe1b84960c59f3e3cfb14d7df94f80d Author: Jan Wedekind (Dr) Date: Mon Jun 30 18:57:39 2014 +0100 More compact code for '-' commit ee56e74d936abe83dc8bc8dc7e52de3a12c4ca2a Author: Jan Wedekind (Dr) Date: Mon Jun 30 18:54:29 2014 +0100 More compact code for array operations commit 649cd0fee5c1d9d0e402af44ec8eefe1971788bb Author: Jan Wedekind (Dr) Date: Mon Jun 30 18:25:36 2014 +0100 More concise declaration of pointer types commit 004b63bc6c9f96f2e765d4d7f7fdddcbed47b4e0 Author: Jan Wedekind (Dr) Date: Mon Jun 30 17:53:02 2014 +0100 Simplified code for selecting registers commit 6921ed90c66483f22c47cf3f798e8ee90aec560f Author: Jan Wedekind (Dr) Date: Mon Jun 30 14:31:14 2014 +0100 Simplified syntax for scale argument commit 1fb14a45305728218a658589245c56bcec168ff9 Author: Jan Wedekind (Dr) Date: Mon Jun 30 13:32:32 2014 +0100 Saving of callee-saved registers commit 4cf4b70ee9adc641cad8c392f61c46549949c21e Author: Jan Wedekind (Dr) Date: Sun Jun 29 23:06:50 2014 +0100 Minor changes to register pool implementation commit 74d38fa9403cc9c68d7ae9fbb7673354e1eb8e7b Author: Jan Wedekind (Dr) Date: Sun Jun 29 21:26:48 2014 +0100 Register allocation should return requested type commit 31d2898a6f43691ee77c3d27f8b327b53b02febf Author: Jan Wedekind (Dr) Date: Thu Jun 26 16:43:47 2014 +0100 More compact code for instantiation of registers commit 6850d5476acd5beab470eed17b34a187579d1a78 Author: Jan Wedekind (Dr) Date: Thu Jun 26 16:04:10 2014 +0100 Change order of arguments for 'reg' commit e4299a825eb94db4aafdd711714d843fa8ffc576 Author: Jan Wedekind (Dr) Date: Thu Jun 26 15:58:33 2014 +0100 Using '1+' and '1-' commit e7dacf0c6f7d7ecde441c2f8bb77d1c228e09c86 Author: Jan Wedekind (Dr) Date: Thu Jun 26 15:45:57 2014 +0100 Export 'toplevel-define!' commit c6211f860e4088afc7b06f102229e55b380595bf Author: Jan Wedekind (Dr) Date: Thu Jun 26 15:16:04 2014 +0100 Updated TODO commit 960880bb6673956ca63e15c60e9695dc5bd9e75d Author: Jan Wedekind (Dr) Date: Thu Jun 26 15:10:35 2014 +0100 Tested spilling of two registers commit e91eb45313c940f84989d84d2215b6d9f93a1fd1 Author: Jan Wedekind (Dr) Date: Thu Jun 26 14:51:55 2014 +0100 Implemented spilling of registers commit 0fbcbc5f31acb8f6c944dc56fe1289cf6ef0c0f3 Author: Jan Wedekind (Dr) Date: Thu Jun 26 14:36:29 2014 +0100 Working on register pool commit e9cd06b362fad8b2f20291640dbc827fbcce3cf2 Author: Jan Wedekind (Dr) Date: Thu Jun 26 14:33:26 2014 +0100 Implemented 'flatten-n' commit c12d84883f44f367244daee5b195fd81a92f87d2 Author: Jan Wedekind (Dr) Date: Wed Jun 25 17:51:48 2014 +0100 Working on register pool again commit 25e8adb685227011b9371cb2f8ecc8c3e04206a4 Author: Jan Wedekind (Dr) Date: Wed Jun 25 15:27:26 2014 +0100 Working on register allocation commit b845193cafd8e0677cea1a376cd3f6caf5cc4048 Author: Jan Wedekind (Dr) Date: Wed Jun 25 14:44:51 2014 +0100 Changed formatting of README commit 3335fa80cd1ccc859a384cd647a51eecde12eb4d Author: Jan Wedekind (Dr) Date: Mon Jun 23 22:51:45 2014 +0100 Renamed some variables commit 9bb2d58738f85effa55bf456bfab524a420145f5 Author: Jan Wedekind (Dr) Date: Mon Jun 23 17:58:22 2014 +0100 Working on register-pool implementation commit dfcccabee9704108f17efc70760c0c251175d107 Author: Jan Wedekind (Dr) Date: Mon Jun 23 13:20:46 2014 +0100 Added stack pointer example to tests commit eb99bdb6e3284dcc3670aae14e3265ee236b1864 Author: Jan Wedekind (Dr) Date: Mon Jun 16 22:10:46 2014 +0100 Working on documentation commit ca9f60e6fab44d96da6c6bab46dea60ede64794d Author: Jan Wedekind (Dr) Date: Mon Jun 16 16:15:17 2014 +0100 Added missing files commit 517905157ca86b557fbee9edf39a0a7c640b8f93 Author: Jan Wedekind (Dr) Date: Mon Jun 16 16:07:26 2014 +0100 Add Pandoc commit 14e357077eb46ba26b58032156f460af0770e634 Author: Jan Wedekind (Dr) Date: Wed Jun 11 23:09:21 2014 +0100 Added some documentation commit 2e14f0b3d2242e3201b0a89f59f39adf649206f0 Author: Jan Wedekind (Dr) Date: Fri Jun 6 19:27:25 2014 +0100 intro.html -> installation.html commit 9ba4d1a00a92c523ecf6c9dea0ec4dbd77bac609 Author: Jan Wedekind (Dr) Date: Thu Jun 5 20:23:12 2014 +0100 Using Pandoc for documentation commit dc03fc787f8caec417f04cf17eae7e98f87a5a21 Author: Jan Wedekind (Dr) Date: Tue Jun 3 19:33:56 2014 +0100 PUSH/POP for 16-, 32-, and 64-bit registers commit f130678b2ba8dae361054517ea51946eda50b146 Author: Jan Wedekind (Dr) Date: Tue May 27 09:06:05 2014 +0100 Address with 32-bit displacement commit e1219599cdc76a2d646744bebc7d3210ee0b9a30 Author: Jan Wedekind (Dr) Date: Tue May 27 08:32:10 2014 +0100 Replacing let (...) with let [...] commit 0a0796c0f211b196499b7b3c5b7d49a5cedd159d Author: Jan Wedekind (Dr) Date: Tue May 27 08:23:01 2014 +0100 Check that sequences have same size commit 9f14bc2365dfbd51d9c8d234a0711d4f2de71732 Author: Jan Wedekind (Dr) Date: Fri May 9 19:05:37 2014 +0100 Fixed some variable names: r/m -> r, r/m -> m commit e80fc79f71e6b01117b61a7b180d299748ecd3b1 Author: Jan Wedekind (Dr) Date: Fri May 9 08:46:28 2014 +0100 SUB r/m, imm commit b4d1e74e50f7f619bdc71704ade48be3b5ae617d Author: Jan Wedekind (Dr) Date: Fri May 9 08:41:05 2014 +0100 ADD r/m, imm commit 5aa748bde11928cb71790f9730f37069415a0956 Author: Jan Wedekind (Dr) Date: Wed May 7 19:09:37 2014 +0100 MOV r/m, imm commit 6bb97a00ff5cc13b700e36953c91ebe97aa3a0d9 Author: Jan Wedekind (Dr) Date: Wed May 7 12:40:02 2014 +0100 Implemented 'postfixes' to reduce redundant code commit 2a2944a22978d08893af2be291f628fcbe28e6e4 Author: Jan Wedekind (Dr) Date: Wed May 7 08:55:30 2014 +0100 Made implementation of MOVSX and MOVZX more compact commit df504afb3100ba4c53cc5aae69504634ca77ff34 Author: Jan Wedekind (Dr) Date: Wed May 7 08:42:24 2014 +0100 Using MOVSX and MOVZX where appropriate commit 36134f965a85392a17fdccbf89e9e2f08a8635e5 Author: Jan Wedekind (Dr) Date: Tue May 6 22:46:03 2014 +0100 Hack to get MOVZX working commit fdb93da2c8efd134e85c7b86d2aa3fb91ea59ac8 Author: Jan Wedekind (Dr) Date: Sun May 4 21:31:11 2014 +0100 Made code of JIT implementation more regular commit 6bc6380fa776a16e029605581ce8e70583eb2f0c Author: Jan Wedekind (Dr) Date: Sun May 4 21:04:32 2014 +0100 Making code more compact commit 7d071ba37b4f2bb43034b7d00c53973cdd45b700 Author: Jan Wedekind (Dr) Date: Sat May 3 23:17:15 2014 +0100 Using "prefixes" method to generate all prefixes commit 010e6ddf9dabc714c41c5b6d515ae3cf9b397ba0 Author: Jan Wedekind (Dr) Date: Sat May 3 21:26:16 2014 +0100 Generalising addressing mode commit 847894a6a343c7c12252c669e7b3777ef4c5c8dd Author: Jan Wedekind (Dr) Date: Fri May 2 23:01:55 2014 +0100 Simplifying code for REX prefixes commit 2082f1f646bd1fe94181e1076d61c4208ddd2757 Author: Jan Wedekind (Dr) Date: Thu May 1 22:37:26 2014 +0100 Minor simplification commit 43d711263516108111652e546151cfdbd780b73a Author: Jan Wedekind (Dr) Date: Thu May 1 22:32:37 2014 +0100 Bugfix for REX prefix of MOV command commit 16db334cefd99e7e11c8981aebe079d7094ed1e9 Author: Jan Wedekind (Dr) Date: Thu May 1 22:28:30 2014 +0100 Generalised definition of ModR/M commit f3fc446a9f486e585cbeee22e4ae53e19507eb65 Author: Jan Wedekind (Dr) Date: Thu May 1 18:48:50 2014 +0100 Refactoring addressing code commit ead2c9e54bf41249850678e7322e1572bedf32a5 Author: Jan Wedekind (Dr) Date: Thu May 1 09:14:35 2014 +0100 Refactoring machine code for addressing commit ba692b73afa94e4042bdf615ba0d0288506eb8fb Author: Jan Wedekind (Dr) Date: Tue Apr 29 18:46:20 2014 +0100 Added special case for LEA with RSP as base commit 9ff64979fd0248240a7bf3dd61223f6f4c8526ed Author: Jan Wedekind (Dr) Date: Tue Apr 29 18:34:51 2014 +0100 Moved REPL setup into Makefile commit 3c0f51f5fddac3a1bc29601d8d4811542c9f664e Author: Jan Wedekind (Dr) Date: Tue Apr 29 18:06:55 2014 +0100 Introduced address operator commit 0e081c61155465276c97768c8277e1c9a6875991 Author: Jan Wedekind (Dr) Date: Sun Apr 20 00:15:30 2014 +0200 Removed some external links commit bea7dc90fae320f91d6b4f46605ac436431e0cfd Author: Jan Wedekind (Dr) Date: Sun Apr 20 00:10:19 2014 +0200 Remove Pandoc from Travis build commit 20ee4f575df91c72e62bda2a1a48de0024b81ec7 Author: Jan Wedekind (Dr) Date: Sun Apr 20 00:08:51 2014 +0200 Removed Pandoc compilation to HTML commit 44d83d199f7c24f85bd2a26f0348eb8df5dd9f63 Author: Jan Wedekind (Dr) Date: Sat Apr 19 22:37:09 2014 +0200 Bugfix for addition of arrays commit 9c833b450101e9a371ae5f73a9644c65408cf325 Author: Jan Wedekind (Dr) Date: Fri Apr 18 23:18:53 2014 +0200 Replaced 'fill!' with fill commit 0847746c8ec332a73f6964fb71d08f81327e9ce2 Author: Jan Wedekind (Dr) Date: Fri Apr 18 00:10:05 2014 +0200 Added MOVZX (copy with zero extension) commit 494e2b805d9597c45459cd6734cda8e0349763d2 Author: Jan Wedekind (Dr) Date: Thu Apr 10 22:56:51 2014 +0100 Added MOVSX commit 3524cf1104fdec6c728f4fb26a98d38e4fc7364e Author: Jan Wedekind (Dr) Date: Wed Apr 9 18:51:51 2014 +0100 ADD CX, DX; ADD CL, DL commit 8aba9700b3e0e934924c4ba3adf13573d06fa45e Author: Jan Wedekind (Dr) Date: Wed Apr 9 18:38:20 2014 +0100 ADD r/m8, imm8; ADD r/m16, imm16, ... commit 831e06b574c00a155547c49e301705906c2b90cb Author: Jan Wedekind (Dr) Date: Wed Apr 9 09:01:02 2014 +0100 Added array-array implementation of plus commit aeed84c3ddd3a8547d0b82a04781d96889fabab6 Author: Jan Wedekind (Dr) Date: Tue Apr 8 22:27:52 2014 +0100 Scalar-array and array-scalar plus operator commit 054a08519751d8277660222ad564f1b3c22223a8 Author: Jan Wedekind (Dr) Date: Tue Apr 8 08:50:45 2014 +0100 Added coercion for sequences commit a29545eb3be90a50475b9960687ee997dbf5fd14 Author: Jan Wedekind (Dr) Date: Mon Apr 7 23:28:56 2014 +0100 Use '-' instead of 'neg' commit c1b26fa93948c6e246f8992a216ef6893a1e3159 Author: Jan Wedekind (Dr) Date: Mon Apr 7 12:58:36 2014 +0100 Fixed get-size ambiguity commit 5dd51f1dee9b229a76553dc5daa4913a97ae3327 Author: Jan Wedekind (Dr) Date: Mon Apr 7 09:21:26 2014 +0100 Added negation of integer arrays commit ebe851773f1e833ba65e78c11a48bfdafc6b11f0 Author: Jan Wedekind (Dr) Date: Sun Apr 6 22:49:35 2014 +0100 Filling of integer arrays (8-bit, 16-bit, ...) commit 5d1e80e2c319ab390edbe3077ce1b31aaa7d7a02 Author: Jan Wedekind (Dr) Date: Fri Apr 4 22:58:26 2014 +0100 Added LEA with base, index, and offset commit 9c04a81a57b5760e04e359eec9af8470e95e16f1 Author: Jan Wedekind (Dr) Date: Fri Apr 4 18:00:44 2014 +0100 Added some variations of LEA commit ca5acf6cc2dcbf15d73c072c620929d0cfe6eefc Author: Jan Wedekind (Dr) Date: Thu Apr 3 22:34:46 2014 +0100 SHL, SHR, ... for 16 and 8 bit commit dad7195490e2ff565e081f45a72a5d04a38fe692 Author: Jan Wedekind (Dr) Date: Thu Apr 3 22:25:28 2014 +0100 More variations of MOV commit bf263c44e85a7f61a281827dd7398cbf3fc23824 Author: Jan Wedekind (Dr) Date: Wed Apr 2 23:49:05 2014 +0100 NEG for 16- and 8-bit integers commit e7c5082a1d11ab86bf5e4eb0d126d84d093e75bb Author: Jan Wedekind (Dr) Date: Wed Apr 2 12:50:22 2014 +0100 Removed redundancy in implementation of MOV commit 0e6fac5ec6a89bf8f6133a5f5623b07b8f701f69 Author: Jan Wedekind (Dr) Date: Wed Apr 2 08:45:06 2014 +0100 "MOV DIL, 42" requires REX prefix #x40 commit 831ee6b36011755e22755e2eb279d41541567a54 Author: Jan Wedekind (Dr) Date: Tue Apr 1 23:01:52 2014 +0100 MOV AL, BL commit 1b75ce50c346094f7333c8e1e7d5c83b9101f36e Author: Jan Wedekind (Dr) Date: Tue Apr 1 19:07:10 2014 +0100 More MOV operations with 8- and 16-bit commit b088b4ae3189d8ece9cb36c40968e9675e58c9c9 Author: Jan Wedekind (Dr) Date: Mon Mar 31 13:29:05 2014 +0100 Only use 'opcode' where necessary commit 1c8cd1a0b7eff5080446978dcef9accc3bddd008 Author: Jan Wedekind (Dr) Date: Tue Mar 25 22:25:35 2014 +0000 Writing 8- and 16-bit numbers to memory commit 1ab9d9af272733627cf6ddc49c11b82c8be15833 Author: Jan Wedekind (Dr) Date: Tue Mar 25 08:23:55 2014 +0000 Simplified jumps commit 7a8ee0a9f9019b2c997f1ad9ec0c48670b9ed831 Author: Jan Wedekind (Dr) Date: Mon Mar 24 21:44:46 2014 +0000 Removed some redundancy commit e3ea6cd3a77fda546ab130bbf1ee17c2dd345ce5 Author: Jan Wedekind (Dr) Date: Mon Mar 24 18:57:15 2014 +0000 Removed some redundancy commit 2ad631ef8c044373027410ddd33d7b5eaa8e7bc2 Author: Jan Wedekind (Dr) Date: Mon Mar 24 18:54:41 2014 +0000 Changed base class of

    commit 067f745cbeff8c04a23d27e2d393a2a433962a37 Author: Jan Wedekind (Dr) Date: Mon Mar 24 18:43:02 2014 +0000 Load 64-bit integer from memory commit aeff35d1c9076556012ce84a6b8b912562a22b5d Author: Jan Wedekind (Dr) Date: Mon Mar 24 17:52:38 2014 +0000 Improved tests for memory I/O commit 34456224a24550f55e06123c41f53b14996a59de Author: Jan Wedekind (Dr) Date: Mon Mar 24 13:26:33 2014 +0000 Added array operation to fill integer array commit 1f49691fd795e8c82aa164ebf53a4b8577d28fbc Author: Jan Wedekind (Dr) Date: Fri Mar 21 22:18:36 2014 +0000 Share common opcode parts between SETcc and Jcc commit 9a001c0980eadd239074be5ec4a9ba3c9cb51e38 Author: Jan Wedekind (Dr) Date: Fri Mar 21 21:00:17 2014 +0000 Using JMPcc for different jump statements commit 00666b13e687f4ac4419b03bcaecec9619a41268 Author: Jan Wedekind (Dr) Date: Fri Mar 21 18:57:58 2014 +0000 Added JB commit 1fbf240f245c7c59099fa795cf371ed40637592c Author: Jan Wedekind (Dr) Date: Thu Mar 20 22:06:37 2014 +0000 Added JE (jump if equal) commit 6733ba3aa4e6491d072e7a673ef076ad224a0a81 Author: Jan Wedekind (Dr) Date: Thu Mar 20 21:31:10 2014 +0000 Added word registers commit 654eb9767807d85b1ff5003061fb9fce5a80fb70 Author: Jan Wedekind (Dr) Date: Thu Mar 20 21:26:00 2014 +0000 SET -> SETcc commit 1a96fb84d8abce208cbc4b920b423958a0760b66 Author: Jan Wedekind (Dr) Date: Thu Mar 20 19:21:07 2014 +0000 Completed set byte on condition * SETB * SETNB * SETE * SETNE * SETBE * SETNBE * SETL * SETNL * SETLE * SETNLE commit eb92af0bfbc0cce735418002c055a58bb266a456 Author: Jan Wedekind (Dr) Date: Thu Mar 20 17:37:53 2014 +0000 Added SETB commit 5046d24c6e09b7ab81af27dd9c64e527ae75d4ce Author: Jan Wedekind (Dr) Date: Tue Mar 18 22:17:44 2014 +0000 Added SETE and CMP commit 45ec9f24e5335b5d3f787b2037390091f1fcf537 Author: Jan Wedekind (Dr) Date: Tue Mar 18 12:53:24 2014 +0000 Using symbols as labels commit 467de5d55147958922bdec6eefddd7a676460c0f Author: Jan Wedekind (Dr) Date: Tue Mar 18 08:30:25 2014 +0000 Use byte jump commit e09ffd876ca700f6a956daae2a9220474cec08fe Author: Jan Wedekind (Dr) Date: Mon Mar 17 18:56:07 2014 +0000 Simplified resolving of JMP statements commit 3edbd2cdc78379fd6e3350b3609ef2cc44445a72 Author: Jan Wedekind (Dr) Date: Mon Mar 17 18:38:39 2014 +0000 Added test with several jumps commit b6b1bd1f0607582c73eceda1e7576efcb5a0944e Author: Jan Wedekind (Dr) Date: Mon Mar 17 18:32:10 2014 +0000 Resolve labels commit 4b752dcf527e382e5fa193e9eef7f4bf2996fdea Author: Jan Wedekind (Dr) Date: Sun Mar 16 21:13:00 2014 +0000 Renamed labels method commit d6485612f2488bdc6ed19fb722fd8f588fef665b Author: Jan Wedekind (Dr) Date: Thu Mar 13 22:14:47 2014 +0000 Using fold to compute label offsets commit 5eb3472183cb4a769dbd92d85a5a99738ca54e11 Author: Jan Wedekind (Dr) Date: Thu Mar 13 21:57:16 2014 +0000 Use