diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.in | 724 | ||||
-rw-r--r-- | src/Makefile.inc | 19 | ||||
-rw-r--r-- | src/curl.rc | 63 | ||||
-rw-r--r-- | src/curl_config.h | 974 | ||||
-rw-r--r-- | src/curl_config.h.in | 973 | ||||
-rw-r--r-- | src/curlutil.c | 134 | ||||
-rw-r--r-- | src/curlutil.h | 49 | ||||
-rw-r--r-- | src/getpass.c | 267 | ||||
-rw-r--r-- | src/getpass.h | 34 | ||||
-rw-r--r-- | src/homedir.c | 120 | ||||
-rw-r--r-- | src/homedir.h | 27 | ||||
-rw-r--r-- | src/hugehelp.c | 6958 | ||||
-rw-r--r-- | src/hugehelp.h | 26 | ||||
-rw-r--r-- | src/main.c | 5830 | ||||
-rw-r--r-- | src/os-specific.c | 221 | ||||
-rw-r--r-- | src/os-specific.h | 38 | ||||
-rw-r--r-- | src/setup.h | 218 | ||||
-rw-r--r-- | src/urlglob.c | 567 | ||||
-rw-r--r-- | src/urlglob.h | 67 | ||||
-rw-r--r-- | src/version.h | 35 | ||||
-rw-r--r-- | src/writeenv.c | 120 | ||||
-rw-r--r-- | src/writeenv.h | 27 | ||||
-rw-r--r-- | src/writeout.c | 295 | ||||
-rw-r--r-- | src/writeout.h | 27 |
24 files changed, 17813 insertions, 0 deletions
diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..48dd835 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,724 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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@ + +# ./src/Makefile.inc + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = curl$(EXEEXT) +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.inc $(srcdir)/curl_config.h.in +subdir = src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \ + $(top_srcdir)/m4/curl-confopts.m4 \ + $(top_srcdir)/m4/curl-functions.m4 \ + $(top_srcdir)/m4/curl-override.m4 \ + $(top_srcdir)/m4/curl-reentrant.m4 \ + $(top_srcdir)/m4/curl-system.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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/lib/curl_config.h curl_config.h \ + $(top_builddir)/include/curl/curlbuild.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am__objects_1 = main.$(OBJEXT) hugehelp.$(OBJEXT) urlglob.$(OBJEXT) \ + writeout.$(OBJEXT) writeenv.$(OBJEXT) getpass.$(OBJEXT) \ + homedir.$(OBJEXT) curlutil.$(OBJEXT) os-specific.$(OBJEXT) +am__objects_2 = strtoofft.$(OBJEXT) strdup.$(OBJEXT) rawstr.$(OBJEXT) \ + nonblock.$(OBJEXT) +am__objects_3 = +am_curl_OBJECTS = $(am__objects_1) $(am__objects_2) $(am__objects_3) +curl_OBJECTS = $(am_curl_OBJECTS) +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(curl_SOURCES) +DIST_SOURCES = $(curl_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@ +CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@ +CURLDEBUG_FALSE = @CURLDEBUG_FALSE@ +CURLDEBUG_TRUE = @CURLDEBUG_TRUE@ +CURL_CA_BUNDLE = @CURL_CA_BUNDLE@ +CURL_DISABLE_DICT = @CURL_DISABLE_DICT@ +CURL_DISABLE_FILE = @CURL_DISABLE_FILE@ +CURL_DISABLE_FTP = @CURL_DISABLE_FTP@ +CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@ +CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@ +CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@ +CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@ +CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@ +CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@ +CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@ +CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@ +CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@ +CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@ +CURL_LIBS = @CURL_LIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@ +HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@ +HAVE_PK11_CREATEGENERICOBJECT = @HAVE_PK11_CREATEGENERICOBJECT@ +IDN_ENABLED = @IDN_ENABLED@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPV6_ENABLED = @IPV6_ENABLED@ +KRB4_ENABLED = @KRB4_ENABLED@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MANOPT = @MANOPT@ +MIMPURE_FALSE = @MIMPURE_FALSE@ +MIMPURE_TRUE = @MIMPURE_TRUE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@ +NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@ +# Use the C locale to ensure that only ASCII characters appear in the +# embedded text. +NROFF = env LC_ALL=C @NROFF@ @MANOPT@ # figured out by the configure script +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH = @PATH@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKGADD_NAME = @PKGADD_NAME@ +PKGADD_PKG = @PKGADD_PKG@ +PKGADD_VENDOR = @PKGADD_VENDOR@ +PKGCONFIG = @PKGCONFIG@ +RANDOM_FILE = @RANDOM_FILE@ +RANLIB = @RANLIB@ +REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SONAME_BUMP_FALSE = @SONAME_BUMP_FALSE@ +SONAME_BUMP_TRUE = @SONAME_BUMP_TRUE@ +SSL_ENABLED = @SSL_ENABLED@ +STATICLIB_FALSE = @STATICLIB_FALSE@ +STATICLIB_TRUE = @STATICLIB_TRUE@ +STRIP = @STRIP@ +SUPPORT_FEATURES = @SUPPORT_FEATURES@ +SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@ +TEST_SERVER_LIBS = @TEST_SERVER_LIBS@ +USE_ARES = @USE_ARES@ +USE_EMBEDDED_ARES_FALSE = @USE_EMBEDDED_ARES_FALSE@ +USE_EMBEDDED_ARES_TRUE = @USE_EMBEDDED_ARES_TRUE@ +USE_GNUTLS = @USE_GNUTLS@ +USE_LIBSSH2 = @USE_LIBSSH2@ +USE_MANUAL_FALSE = @USE_MANUAL_FALSE@ +USE_MANUAL_TRUE = @USE_MANUAL_TRUE@ +USE_NSS = @USE_NSS@ +USE_SSLEAY = @USE_SSLEAY@ +USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ +VERSION = @VERSION@ +VERSIONNUM = @VERSIONNUM@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +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@ +libext = @libext@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://curl.haxx.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +########################################################################### +AUTOMAKE_OPTIONS = foreign nostdinc + +# Specify our include paths here, and do it relative to $(top_srcdir) and +# $(top_builddir), to ensure that these paths which belong to the library +# being currently built and tested are searched before the library which +# might possibly already be installed in the system. +# +# $(top_builddir)/include/curl for generated curlbuild.h included from curl.h +# $(top_builddir)/include for generated curlbuild.h included from lib/setup.h +# $(top_srcdir)/include is for libcurl's external include files +# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file +# $(top_builddir)/src is for curl's generated src/curl_config.h file +# $(top_srcdir)/lib is for libcurl's lib/setup.h and other "borrowed" files +# $(top_srcdir)/src is for curl's src/setup.h and "curl-private" files +INCLUDES = -I$(top_builddir)/include/curl \ + -I$(top_builddir)/include \ + -I$(top_srcdir)/include \ + -I$(top_builddir)/lib \ + -I$(top_builddir)/src \ + -I$(top_srcdir)/lib \ + -I$(top_srcdir)/src + + +# libcurl has sources that provide functions named curlx_* that aren't part of +# the official API, but we re-use the code here to avoid duplication. +CURLX_ONES = $(top_srcdir)/lib/strtoofft.c \ + $(top_srcdir)/lib/strdup.c \ + $(top_srcdir)/lib/rawstr.c \ + $(top_srcdir)/lib/nonblock.c + +CURL_SOURCES = main.c hugehelp.c urlglob.c writeout.c writeenv.c \ + getpass.c homedir.c curlutil.c os-specific.c + +CURL_HFILES = hugehelp.h setup.h config-win32.h config-mac.h \ + config-riscos.h urlglob.h version.h os-specific.h \ + writeout.h writeenv.h getpass.h homedir.h curlutil.h + +curl_SOURCES = $(CURL_SOURCES) $(CURLX_ONES) $(CURL_HFILES) +curl_LDADD = $(top_builddir)/lib/libcurl.la @CURL_LIBS@ +curl_DEPENDENCIES = $(top_builddir)/lib/libcurl.la +BUILT_SOURCES = hugehelp.c +CLEANFILES = hugehelp.c +EXTRA_DIST = mkhelp.pl makefile.dj Makefile.vc6 Makefile.b32 Makefile.m32 \ + Makefile.riscos curl_config.h.in macos/curl.mcp.xml.sit.hqx \ + macos/MACINSTALL.TXT macos/src/curl_GUSIConfig.cpp vc6curlsrc.dsp \ + macos/src/macos_main.cpp config-amigaos.h makefile.amiga curl.rc \ + Makefile.netware Makefile.inc Makefile.Watcom vc6curlsrc.dsw \ + CMakeLists.txt + +MANPAGE = $(top_srcdir)/docs/curl.1 +README = $(top_srcdir)/docs/MANUAL +MKHELP = $(top_srcdir)/src/mkhelp.pl +HUGE = hugehelp.c +all: $(BUILT_SOURCES) curl_config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +curl_config.h: stamp-h2 + @if test ! -f $@; then \ + rm -f stamp-h2; \ + $(MAKE) stamp-h2; \ + else :; fi + +stamp-h2: $(srcdir)/curl_config.h.in $(top_builddir)/config.status + @rm -f stamp-h2 + cd $(top_builddir) && $(SHELL) ./config.status src/curl_config.h +$(srcdir)/curl_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h2 + touch $@ + +distclean-hdr: + -rm -f curl_config.h stamp-h2 +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +curl$(EXEEXT): $(curl_OBJECTS) $(curl_DEPENDENCIES) + @rm -f curl$(EXEEXT) + $(LINK) $(curl_LDFLAGS) $(curl_OBJECTS) $(curl_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curlutil.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpass.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/homedir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hugehelp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonblock.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/os-specific.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawstr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoofft.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/urlglob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writeenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writeout.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +strtoofft.o: $(top_srcdir)/lib/strtoofft.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT strtoofft.o -MD -MP -MF "$(DEPDIR)/strtoofft.Tpo" -c -o strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/strtoofft.Tpo" "$(DEPDIR)/strtoofft.Po"; else rm -f "$(DEPDIR)/strtoofft.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='strtoofft.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c + +strtoofft.obj: $(top_srcdir)/lib/strtoofft.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT strtoofft.obj -MD -MP -MF "$(DEPDIR)/strtoofft.Tpo" -c -o strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/strtoofft.Tpo" "$(DEPDIR)/strtoofft.Po"; else rm -f "$(DEPDIR)/strtoofft.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strtoofft.c' object='strtoofft.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi` + +strdup.o: $(top_srcdir)/lib/strdup.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT strdup.o -MD -MP -MF "$(DEPDIR)/strdup.Tpo" -c -o strdup.o `test -f '$(top_srcdir)/lib/strdup.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strdup.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/strdup.Tpo" "$(DEPDIR)/strdup.Po"; else rm -f "$(DEPDIR)/strdup.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strdup.c' object='strdup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o strdup.o `test -f '$(top_srcdir)/lib/strdup.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strdup.c + +strdup.obj: $(top_srcdir)/lib/strdup.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT strdup.obj -MD -MP -MF "$(DEPDIR)/strdup.Tpo" -c -o strdup.obj `if test -f '$(top_srcdir)/lib/strdup.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strdup.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/strdup.Tpo" "$(DEPDIR)/strdup.Po"; else rm -f "$(DEPDIR)/strdup.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/strdup.c' object='strdup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o strdup.obj `if test -f '$(top_srcdir)/lib/strdup.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strdup.c'; fi` + +rawstr.o: $(top_srcdir)/lib/rawstr.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rawstr.o -MD -MP -MF "$(DEPDIR)/rawstr.Tpo" -c -o rawstr.o `test -f '$(top_srcdir)/lib/rawstr.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/rawstr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rawstr.Tpo" "$(DEPDIR)/rawstr.Po"; else rm -f "$(DEPDIR)/rawstr.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/rawstr.c' object='rawstr.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rawstr.o `test -f '$(top_srcdir)/lib/rawstr.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/rawstr.c + +rawstr.obj: $(top_srcdir)/lib/rawstr.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rawstr.obj -MD -MP -MF "$(DEPDIR)/rawstr.Tpo" -c -o rawstr.obj `if test -f '$(top_srcdir)/lib/rawstr.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/rawstr.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/rawstr.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rawstr.Tpo" "$(DEPDIR)/rawstr.Po"; else rm -f "$(DEPDIR)/rawstr.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/rawstr.c' object='rawstr.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rawstr.obj `if test -f '$(top_srcdir)/lib/rawstr.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/rawstr.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/rawstr.c'; fi` + +nonblock.o: $(top_srcdir)/lib/nonblock.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nonblock.o -MD -MP -MF "$(DEPDIR)/nonblock.Tpo" -c -o nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/nonblock.Tpo" "$(DEPDIR)/nonblock.Po"; else rm -f "$(DEPDIR)/nonblock.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='nonblock.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nonblock.o `test -f '$(top_srcdir)/lib/nonblock.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/nonblock.c + +nonblock.obj: $(top_srcdir)/lib/nonblock.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nonblock.obj -MD -MP -MF "$(DEPDIR)/nonblock.Tpo" -c -o nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/nonblock.Tpo" "$(DEPDIR)/nonblock.Po"; else rm -f "$(DEPDIR)/nonblock.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/lib/nonblock.c' object='nonblock.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nonblock.obj `if test -f '$(top_srcdir)/lib/nonblock.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/nonblock.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) curl_config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) curl_config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) curl_config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) curl_config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/macos $(distdir)/macos/src + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$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: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(PROGRAMS) curl_config.h +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-info-am + + +# Here are the stuff to create a built-in manual + +# This generates the hugehelp.c file in both uncompressed and compressed formats +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@$(HUGE): $(README) $(MANPAGE) mkhelp.pl +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#include "setup.h"' > $(HUGE) +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#ifndef HAVE_LIBZ' >> $(HUGE) +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE) +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#else' >> $(HUGE) +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c $(README) >> $(HUGE) +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#endif /* HAVE_LIBZ */' >> $(HUGE) +# This generates the hugehelp.c file uncompressed only +@HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@$(HUGE): $(README) $(MANPAGE) mkhelp.pl +@HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ echo '#include "setup.h"' > $(HUGE) +@HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE) + +# built-in manual has been disabled, make a blank file +@USE_MANUAL_FALSE@$(HUGE): +@USE_MANUAL_FALSE@ echo "/* built-in manual is disabled, blank function */" > $(HUGE) +@USE_MANUAL_FALSE@ echo '#include "hugehelp.h"' >> $(HUGE) +@USE_MANUAL_FALSE@ echo "void hugehelp(void) {}" >>$(HUGE) +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/Makefile.inc b/src/Makefile.inc new file mode 100644 index 0000000..9faf89d --- /dev/null +++ b/src/Makefile.inc @@ -0,0 +1,19 @@ +# ./src/Makefile.inc + +# libcurl has sources that provide functions named curlx_* that aren't part of +# the official API, but we re-use the code here to avoid duplication. +CURLX_ONES = $(top_srcdir)/lib/strtoofft.c \ + $(top_srcdir)/lib/strdup.c \ + $(top_srcdir)/lib/rawstr.c \ + $(top_srcdir)/lib/nonblock.c + +CURL_SOURCES = main.c hugehelp.c urlglob.c writeout.c writeenv.c \ + getpass.c homedir.c curlutil.c os-specific.c + +CURL_HFILES = hugehelp.h setup.h config-win32.h config-mac.h \ + config-riscos.h urlglob.h version.h os-specific.h \ + writeout.h writeenv.h getpass.h homedir.h curlutil.h + +curl_SOURCES = $(CURL_SOURCES) $(CURLX_ONES) $(CURL_HFILES) + + diff --git a/src/curl.rc b/src/curl.rc new file mode 100644 index 0000000..58e439d --- /dev/null +++ b/src/curl.rc @@ -0,0 +1,63 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +#include <winver.h> +#include "version.h" + +LANGUAGE 0x09,0x01 + +#define RC_VERSION CURL_VERSION_MAJOR, CURL_VERSION_MINOR, CURL_VERSION_PATCH, 0 + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RC_VERSION + PRODUCTVERSION RC_VERSION + FILEFLAGSMASK 0x3fL +#if defined(DEBUGBUILD) || defined(_DEBUG) + FILEFLAGS 1 +#else + FILEFLAGS 0 +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L + +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "cURL, http://curl.haxx.se/\0" + VALUE "FileDescription", "The cURL executable\0" + VALUE "FileVersion", CURL_VERSION "\0" + VALUE "InternalName", "curl\0" + VALUE "OriginalFilename", "curl.exe\0" + VALUE "ProductName", "The cURL executable\0" + VALUE "ProductVersion", CURL_VERSION "\0" + VALUE "LegalCopyright", "© " CURL_COPYRIGHT "\0" + VALUE "License", "http://curl.haxx.se/docs/copyright.html\0" + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/src/curl_config.h b/src/curl_config.h new file mode 100644 index 0000000..1ac94f3 --- /dev/null +++ b/src/curl_config.h @@ -0,0 +1,974 @@ +/* src/curl_config.h. Generated from curl_config.h.in by configure. */ +/* lib/curl_config.h.in. Generated from configure.ac by autoheader. */ + +/* when building libcurl itself */ +/* #undef BUILDING_LIBCURL */ + +/* Location of default ca bundle */ +#define CURL_CA_BUNDLE "/etc/ssl/certs/ca-certificates.crt" + +/* Location of default ca path */ +/* #undef CURL_CA_PATH */ + +/* to disable cookies support */ +/* #undef CURL_DISABLE_COOKIES */ + +/* to disable cryptographic authentication */ +/* #undef CURL_DISABLE_CRYPTO_AUTH */ + +/* to disable DICT */ +/* #undef CURL_DISABLE_DICT */ + +/* to disable FILE */ +/* #undef CURL_DISABLE_FILE */ + +/* to disable FTP */ +/* #undef CURL_DISABLE_FTP */ + +/* to disable HTTP */ +/* #undef CURL_DISABLE_HTTP */ + +/* to disable IMAP */ +/* #undef CURL_DISABLE_IMAP */ + +/* to disable LDAP */ +#define CURL_DISABLE_LDAP 1 + +/* to disable LDAPS */ +#define CURL_DISABLE_LDAPS 1 + +/* to disable POP3 */ +/* #undef CURL_DISABLE_POP3 */ + +/* to disable proxies */ +/* #undef CURL_DISABLE_PROXY */ + +/* to disable RTSP */ +/* #undef CURL_DISABLE_RTSP */ + +/* to disable SMTP */ +/* #undef CURL_DISABLE_SMTP */ + +/* to disable TELNET */ +/* #undef CURL_DISABLE_TELNET */ + +/* to disable TFTP */ +/* #undef CURL_DISABLE_TFTP */ + +/* to disable verbose strings */ +/* #undef CURL_DISABLE_VERBOSE_STRINGS */ + +/* to make a symbol visible */ +/* #undef CURL_EXTERN_SYMBOL */ + +/* to enable hidden symbols */ +/* #undef CURL_HIDDEN_SYMBOLS */ + +/* W$ LDAP with non-W$ compiler */ +/* #undef CURL_LDAP_HYBRID */ + +/* Use W$ LDAP implementation */ +/* #undef CURL_LDAP_WIN */ + +/* when not building a shared library */ +/* #undef CURL_STATICLIB */ + +/* your Entropy Gathering Daemon socket pathname */ +/* #undef EGD_SOCKET */ + +/* Define if you want to enable IPv6 support */ +#define ENABLE_IPV6 1 + +/* Define to the type qualifier of arg 1 for getnameinfo. */ +#define GETNAMEINFO_QUAL_ARG1 const + +/* Define to the type of arg 1 for getnameinfo. */ +#define GETNAMEINFO_TYPE_ARG1 struct sockaddr * + +/* Define to the type of arg 2 for getnameinfo. */ +#define GETNAMEINFO_TYPE_ARG2 socklen_t + +/* Define to the type of args 4 and 6 for getnameinfo. */ +#define GETNAMEINFO_TYPE_ARG46 socklen_t + +/* Define to the type of arg 7 for getnameinfo. */ +#define GETNAMEINFO_TYPE_ARG7 unsigned int + +/* Specifies the number of arguments to getservbyport_r */ +#define GETSERVBYPORT_R_ARGS 6 + +/* Specifies the size of the buffer to pass to getservbyport_r */ +#define GETSERVBYPORT_R_BUFSIZE 4096 + +/* Define to 1 if you have the alarm function. */ +#define HAVE_ALARM 1 + +/* Define to 1 if you have the <alloca.h> header file. */ +#define HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the <arpa/inet.h> header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Define to 1 if you have the <arpa/tftp.h> header file. */ +#define HAVE_ARPA_TFTP_H 1 + +/* Define to 1 if you have the <assert.h> header file. */ +#define HAVE_ASSERT_H 1 + +/* Define to 1 if you have the basename function. */ +#define HAVE_BASENAME 1 + +/* Define to 1 if bool is an available type. */ +#define HAVE_BOOL_T 1 + +/* Define to 1 if you have the clock_gettime function and monotonic timer. */ +#define HAVE_CLOCK_GETTIME_MONOTONIC 1 + +/* Define to 1 if you have the closesocket function. */ +/* #undef HAVE_CLOSESOCKET */ + +/* Define to 1 if you have the CloseSocket camel case function. */ +/* #undef HAVE_CLOSESOCKET_CAMEL */ + +/* Define to 1 if you have the connect function. */ +#define HAVE_CONNECT 1 + +/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */ +#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1 + +/* Define to 1 if you have the <crypto.h> header file. */ +/* #undef HAVE_CRYPTO_H */ + +/* Define to 1 if you have the <des.h> header file. */ +/* #undef HAVE_DES_H */ + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the `ENGINE_cleanup' function. */ +#define HAVE_ENGINE_CLEANUP 1 + +/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */ +#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1 + +/* Define to 1 if you have the <errno.h> header file. */ +#define HAVE_ERRNO_H 1 + +/* Define to 1 if you have the <err.h> header file. */ +/* #undef HAVE_ERR_H */ + +/* Define to 1 if you have the fcntl function. */ +#define HAVE_FCNTL 1 + +/* Define to 1 if you have the <fcntl.h> header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have a working fcntl O_NONBLOCK function. */ +#define HAVE_FCNTL_O_NONBLOCK 1 + +/* Define to 1 if you have the fdopen function. */ +#define HAVE_FDOPEN 1 + +/* Define to 1 if you have the `fork' function. */ +#define HAVE_FORK 1 + +/* Define to 1 if you have the freeaddrinfo function. */ +#define HAVE_FREEADDRINFO 1 + +/* Define to 1 if you have the freeifaddrs function. */ +#define HAVE_FREEIFADDRS 1 + +/* Define to 1 if you have the ftruncate function. */ +#define HAVE_FTRUNCATE 1 + +/* Define to 1 if you have a working getaddrinfo function. */ +#define HAVE_GETADDRINFO 1 + +/* Define to 1 if the getaddrinfo function is threadsafe. */ +#define HAVE_GETADDRINFO_THREADSAFE 1 + +/* Define to 1 if you have the `geteuid' function. */ +#define HAVE_GETEUID 1 + +/* Define to 1 if you have the gethostbyaddr function. */ +#define HAVE_GETHOSTBYADDR 1 + +/* Define to 1 if you have the gethostbyaddr_r function. */ +#define HAVE_GETHOSTBYADDR_R 1 + +/* gethostbyaddr_r() takes 5 args */ +/* #undef HAVE_GETHOSTBYADDR_R_5 */ + +/* gethostbyaddr_r() takes 7 args */ +/* #undef HAVE_GETHOSTBYADDR_R_7 */ + +/* gethostbyaddr_r() takes 8 args */ +#define HAVE_GETHOSTBYADDR_R_8 1 + +/* Define to 1 if you have the gethostbyname function. */ +#define HAVE_GETHOSTBYNAME 1 + +/* Define to 1 if you have the gethostbyname_r function. */ +#define HAVE_GETHOSTBYNAME_R 1 + +/* gethostbyname_r() takes 3 args */ +/* #undef HAVE_GETHOSTBYNAME_R_3 */ + +/* gethostbyname_r() takes 5 args */ +/* #undef HAVE_GETHOSTBYNAME_R_5 */ + +/* gethostbyname_r() takes 6 args */ +#define HAVE_GETHOSTBYNAME_R_6 1 + +/* Define to 1 if you have the gethostname function. */ +#define HAVE_GETHOSTNAME 1 + +/* Define to 1 if you have a working getifaddrs function. */ +#define HAVE_GETIFADDRS 1 + +/* Define to 1 if you have the getnameinfo function. */ +#define HAVE_GETNAMEINFO 1 + +/* Define to 1 if you have the `getpass_r' function. */ +/* #undef HAVE_GETPASS_R */ + +/* Define to 1 if you have the `getppid' function. */ +#define HAVE_GETPPID 1 + +/* Define to 1 if you have the `getprotobyname' function. */ +#define HAVE_GETPROTOBYNAME 1 + +/* Define to 1 if you have the `getpwuid' function. */ +#define HAVE_GETPWUID 1 + +/* Define to 1 if you have the `getrlimit' function. */ +#define HAVE_GETRLIMIT 1 + +/* Define to 1 if you have the getservbyport_r function. */ +#define HAVE_GETSERVBYPORT_R 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have a working glibc-style strerror_r function. */ +/* #undef HAVE_GLIBC_STRERROR_R */ + +/* Define to 1 if you have a working gmtime_r function. */ +#define HAVE_GMTIME_R 1 + +/* if you have the gssapi libraries */ +/* #undef HAVE_GSSAPI */ + +/* Define to 1 if you have the <gssapi/gssapi_generic.h> header file. */ +/* #undef HAVE_GSSAPI_GSSAPI_GENERIC_H */ + +/* Define to 1 if you have the <gssapi/gssapi.h> header file. */ +/* #undef HAVE_GSSAPI_GSSAPI_H */ + +/* Define to 1 if you have the <gssapi/gssapi_krb5.h> header file. */ +/* #undef HAVE_GSSAPI_GSSAPI_KRB5_H */ + +/* if you have the GNU gssapi libraries */ +/* #undef HAVE_GSSGNU */ + +/* if you have the Heimdal gssapi libraries */ +/* #undef HAVE_GSSHEIMDAL */ + +/* if you have the MIT gssapi libraries */ +/* #undef HAVE_GSSMIT */ + +/* Define to 1 if you have the `idna_strerror' function. */ +/* #undef HAVE_IDNA_STRERROR */ + +/* Define to 1 if you have the `idn_free' function. */ +/* #undef HAVE_IDN_FREE */ + +/* Define to 1 if you have the <idn-free.h> header file. */ +/* #undef HAVE_IDN_FREE_H */ + +/* Define to 1 if you have the <ifaddrs.h> header file. */ +#define HAVE_IFADDRS_H 1 + +/* Define to 1 if you have the `inet_addr' function. */ +#define HAVE_INET_ADDR 1 + +/* Define to 1 if you have the inet_ntoa_r function. */ +/* #undef HAVE_INET_NTOA_R */ + +/* inet_ntoa_r() takes 2 args */ +/* #undef HAVE_INET_NTOA_R_2 */ + +/* inet_ntoa_r() takes 3 args */ +/* #undef HAVE_INET_NTOA_R_3 */ + +/* Define to 1 if you have a IPv6 capable working inet_ntop function. */ +#define HAVE_INET_NTOP 1 + +/* Define to 1 if you have a IPv6 capable working inet_pton function. */ +#define HAVE_INET_PTON 1 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the ioctl function. */ +#define HAVE_IOCTL 1 + +/* Define to 1 if you have the ioctlsocket function. */ +/* #undef HAVE_IOCTLSOCKET */ + +/* Define to 1 if you have the IoctlSocket camel case function. */ +/* #undef HAVE_IOCTLSOCKET_CAMEL */ + +/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function. + */ +/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */ + +/* Define to 1 if you have a working ioctlsocket FIONBIO function. */ +/* #undef HAVE_IOCTLSOCKET_FIONBIO */ + +/* Define to 1 if you have a working ioctl FIONBIO function. */ +#define HAVE_IOCTL_FIONBIO 1 + +/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */ +#define HAVE_IOCTL_SIOCGIFADDR 1 + +/* Define to 1 if you have the <io.h> header file. */ +/* #undef HAVE_IO_H */ + +/* if you have the Kerberos4 libraries (including -ldes) */ +/* #undef HAVE_KRB4 */ + +/* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */ +/* #undef HAVE_KRB_GET_OUR_IP_FOR_REALM */ + +/* Define to 1 if you have the <krb.h> header file. */ +/* #undef HAVE_KRB_H */ + +/* Define to 1 if you have the lber.h header file. */ +/* #undef HAVE_LBER_H */ + +/* Define to 1 if you have the ldapssl.h header file. */ +/* #undef HAVE_LDAPSSL_H */ + +/* Define to 1 if you have the ldap.h header file. */ +/* #undef HAVE_LDAP_H */ + +/* Use LDAPS implementation */ +/* #undef HAVE_LDAP_SSL */ + +/* Define to 1 if you have the ldap_ssl.h header file. */ +/* #undef HAVE_LDAP_SSL_H */ + +/* Define to 1 if you have the `ldap_url_parse' function. */ +/* #undef HAVE_LDAP_URL_PARSE */ + +/* Define to 1 if you have the <libgen.h> header file. */ +#define HAVE_LIBGEN_H 1 + +/* Define to 1 if you have the `idn' library (-lidn). */ +/* #undef HAVE_LIBIDN */ + +/* Define to 1 if you have the `resolv' library (-lresolv). */ +/* #undef HAVE_LIBRESOLV */ + +/* Define to 1 if you have the `resolve' library (-lresolve). */ +/* #undef HAVE_LIBRESOLVE */ + +/* Define to 1 if you have the `ssh2' library (-lssh2). */ +/* #undef HAVE_LIBSSH2 */ + +/* Define to 1 if you have the <libssh2.h> header file. */ +/* #undef HAVE_LIBSSH2_H */ + +/* Define to 1 if you have the `libssh2_version' function. */ +/* #undef HAVE_LIBSSH2_VERSION */ + +/* Define to 1 if you have the `ssl' library (-lssl). */ +#define HAVE_LIBSSL 1 + +/* if zlib is available */ +#define HAVE_LIBZ 1 + +/* Define to 1 if you have the <limits.h> header file. */ +#define HAVE_LIMITS_H 1 + +/* if your compiler supports LL */ +#define HAVE_LL 1 + +/* Define to 1 if you have the <locale.h> header file. */ +#define HAVE_LOCALE_H 1 + +/* Define to 1 if you have a working localtime_r function. */ +#define HAVE_LOCALTIME_R 1 + +/* Define to 1 if the compiler supports the 'long long' data type. */ +#define HAVE_LONGLONG 1 + +/* Define to 1 if you have the malloc.h header file. */ +#define HAVE_MALLOC_H 1 + +/* Define to 1 if you have the memory.h header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the memrchr function or macro. */ +/* #undef HAVE_MEMRCHR */ + +/* Define to 1 if you have the MSG_NOSIGNAL flag. */ +#define HAVE_MSG_NOSIGNAL 1 + +/* Define to 1 if you have the <netdb.h> header file. */ +#define HAVE_NETDB_H 1 + +/* Define to 1 if you have the <netinet/in.h> header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the <netinet/tcp.h> header file. */ +#define HAVE_NETINET_TCP_H 1 + +/* Define to 1 if you have the <net/if.h> header file. */ +#define HAVE_NET_IF_H 1 + +/* Define to 1 if NI_WITHSCOPEID exists and works. */ +/* #undef HAVE_NI_WITHSCOPEID */ + +/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE + */ +/* #undef HAVE_OLD_GSSMIT */ + +/* Define to 1 if you have the <openssl/crypto.h> header file. */ +#define HAVE_OPENSSL_CRYPTO_H 1 + +/* Define to 1 if you have the <openssl/engine.h> header file. */ +#define HAVE_OPENSSL_ENGINE_H 1 + +/* Define to 1 if you have the <openssl/err.h> header file. */ +#define HAVE_OPENSSL_ERR_H 1 + +/* Define to 1 if you have the <openssl/pem.h> header file. */ +#define HAVE_OPENSSL_PEM_H 1 + +/* Define to 1 if you have the <openssl/pkcs12.h> header file. */ +#define HAVE_OPENSSL_PKCS12_H 1 + +/* Define to 1 if you have the <openssl/rsa.h> header file. */ +#define HAVE_OPENSSL_RSA_H 1 + +/* Define to 1 if you have the <openssl/ssl.h> header file. */ +#define HAVE_OPENSSL_SSL_H 1 + +/* Define to 1 if you have the <openssl/x509.h> header file. */ +#define HAVE_OPENSSL_X509_H 1 + +/* Define to 1 if you have the <pem.h> header file. */ +/* #undef HAVE_PEM_H */ + +/* Define to 1 if you have the `perror' function. */ +#define HAVE_PERROR 1 + +/* Define to 1 if you have the `pipe' function. */ +#define HAVE_PIPE 1 + +/* if you have the function PK11_CreateGenericObject */ +/* #undef HAVE_PK11_CREATEGENERICOBJECT */ + +/* Define to 1 if you have a working poll function. */ +#define HAVE_POLL 1 + +/* If you have a fine poll */ +#define HAVE_POLL_FINE 1 + +/* Define to 1 if you have the <poll.h> header file. */ +#define HAVE_POLL_H 1 + +/* Define to 1 if you have a working POSIX-style strerror_r function. */ +#define HAVE_POSIX_STRERROR_R 1 + +/* Define to 1 if you have the <pwd.h> header file. */ +#define HAVE_PWD_H 1 + +/* Define to 1 if you have the `RAND_egd' function. */ +#define HAVE_RAND_EGD 1 + +/* Define to 1 if you have the `RAND_screen' function. */ +/* #undef HAVE_RAND_SCREEN */ + +/* Define to 1 if you have the `RAND_status' function. */ +#define HAVE_RAND_STATUS 1 + +/* Define to 1 if you have the recv function. */ +#define HAVE_RECV 1 + +/* Define to 1 if you have the recvfrom function. */ +#define HAVE_RECVFROM 1 + +/* Define to 1 if you have the <rsa.h> header file. */ +/* #undef HAVE_RSA_H */ + +/* Define to 1 if you have the select function. */ +#define HAVE_SELECT 1 + +/* Define to 1 if you have the send function. */ +#define HAVE_SEND 1 + +/* Define to 1 if you have the <setjmp.h> header file. */ +#define HAVE_SETJMP_H 1 + +/* Define to 1 if you have the `setlocale' function. */ +#define HAVE_SETLOCALE 1 + +/* Define to 1 if you have the `setmode' function. */ +/* #undef HAVE_SETMODE */ + +/* Define to 1 if you have the `setrlimit' function. */ +#define HAVE_SETRLIMIT 1 + +/* Define to 1 if you have the setsockopt function. */ +#define HAVE_SETSOCKOPT 1 + +/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */ +/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */ + +/* Define to 1 if you have the <sgtty.h> header file. */ +#define HAVE_SGTTY_H 1 + +/* Define to 1 if you have the sigaction function. */ +#define HAVE_SIGACTION 1 + +/* Define to 1 if you have the siginterrupt function. */ +#define HAVE_SIGINTERRUPT 1 + +/* Define to 1 if you have the signal function. */ +#define HAVE_SIGNAL 1 + +/* Define to 1 if you have the <signal.h> header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define to 1 if you have the sigsetjmp function or macro. */ +#define HAVE_SIGSETJMP 1 + +/* Define to 1 if sig_atomic_t is an available typedef. */ +#define HAVE_SIG_ATOMIC_T 1 + +/* Define to 1 if sig_atomic_t is already defined as volatile. */ +/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */ + +/* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */ +#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 + +/* Define to 1 if you have the socket function. */ +#define HAVE_SOCKET 1 + +/* Define to 1 if you have the <socket.h> header file. */ +/* #undef HAVE_SOCKET_H */ + +/* Define this if you have the SPNEGO library fbopenssl */ +/* #undef HAVE_SPNEGO */ + +/* Define to 1 if you have the `SSL_get_shutdown' function. */ +#define HAVE_SSL_GET_SHUTDOWN 1 + +/* Define to 1 if you have the <ssl.h> header file. */ +/* #undef HAVE_SSL_H */ + +/* Define to 1 if you have the <stdbool.h> header file. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdio.h> header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define to 1 if you have the strcasestr function. */ +/* #undef HAVE_STRCASESTR */ + +/* Define to 1 if you have the strcmpi function. */ +/* #undef HAVE_STRCMPI */ + +/* Define to 1 if you have the strdup function. */ +#define HAVE_STRDUP 1 + +/* Define to 1 if you have the strerror_r function. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the stricmp function. */ +/* #undef HAVE_STRICMP */ + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the strlcat function. */ +/* #undef HAVE_STRLCAT */ + +/* Define to 1 if you have the `strlcpy' function. */ +/* #undef HAVE_STRLCPY */ + +/* Define to 1 if you have the strncasecmp function. */ +#define HAVE_STRNCASECMP 1 + +/* Define to 1 if you have the strncmpi function. */ +/* #undef HAVE_STRNCMPI */ + +/* Define to 1 if you have the strnicmp function. */ +/* #undef HAVE_STRNICMP */ + +/* Define to 1 if you have the <stropts.h> header file. */ +#define HAVE_STROPTS_H 1 + +/* Define to 1 if you have the strstr function. */ +#define HAVE_STRSTR 1 + +/* Define to 1 if you have the strtok_r function. */ +#define HAVE_STRTOK_R 1 + +/* Define to 1 if you have the strtoll function. */ +#define HAVE_STRTOLL 1 + +/* if struct sockaddr_storage is defined */ +#define HAVE_STRUCT_SOCKADDR_STORAGE 1 + +/* Define to 1 if you have the timeval struct. */ +#define HAVE_STRUCT_TIMEVAL 1 + +/* Define to 1 if you have the <sys/filio.h> header file. */ +/* #undef HAVE_SYS_FILIO_H */ + +/* Define to 1 if you have the <sys/ioctl.h> header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the <sys/param.h> header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the <sys/poll.h> header file. */ +#define HAVE_SYS_POLL_H 1 + +/* Define to 1 if you have the <sys/resource.h> header file. */ +#define HAVE_SYS_RESOURCE_H 1 + +/* Define to 1 if you have the <sys/select.h> header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the <sys/sockio.h> header file. */ +/* #undef HAVE_SYS_SOCKIO_H */ + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/time.h> header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <sys/uio.h> header file. */ +#define HAVE_SYS_UIO_H 1 + +/* Define to 1 if you have the <sys/un.h> header file. */ +#define HAVE_SYS_UN_H 1 + +/* Define to 1 if you have the <sys/utime.h> header file. */ +/* #undef HAVE_SYS_UTIME_H */ + +/* Define to 1 if you have the <termios.h> header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define to 1 if you have the <termio.h> header file. */ +#define HAVE_TERMIO_H 1 + +/* Define to 1 if you have the <time.h> header file. */ +#define HAVE_TIME_H 1 + +/* Define to 1 if you have the <tld.h> header file. */ +/* #undef HAVE_TLD_H */ + +/* Define to 1 if you have the `tld_strerror' function. */ +/* #undef HAVE_TLD_STRERROR */ + +/* Define to 1 if you have the `uname' function. */ +#define HAVE_UNAME 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `utime' function. */ +#define HAVE_UTIME 1 + +/* Define to 1 if you have the <utime.h> header file. */ +#define HAVE_UTIME_H 1 + +/* Define to 1 if compiler supports C99 variadic macro style. */ +#define HAVE_VARIADIC_MACROS_C99 1 + +/* Define to 1 if compiler supports old gcc variadic macro style. */ +#define HAVE_VARIADIC_MACROS_GCC 1 + +/* Define to 1 if you have the winber.h header file. */ +/* #undef HAVE_WINBER_H */ + +/* Define to 1 if you have the windows.h header file. */ +/* #undef HAVE_WINDOWS_H */ + +/* Define to 1 if you have the winldap.h header file. */ +/* #undef HAVE_WINLDAP_H */ + +/* Define to 1 if you have the winsock2.h header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define to 1 if you have the winsock.h header file. */ +/* #undef HAVE_WINSOCK_H */ + +/* Define this symbol if your OS supports changing the contents of argv */ +#define HAVE_WRITABLE_ARGV 1 + +/* Define to 1 if you have the writev function. */ +#define HAVE_WRITEV 1 + +/* Define to 1 if you have the ws2tcpip.h header file. */ +/* #undef HAVE_WS2TCPIP_H */ + +/* Define to 1 if you have the <x509.h> header file. */ +/* #undef HAVE_X509_H */ + +/* if you have the zlib.h header file */ +#define HAVE_ZLIB_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Define to 1 if you are building a native Windows target. */ +/* #undef NATIVE_WINDOWS */ + +/* Define to 1 if you need the lber.h header file even with ldap.h */ +/* #undef NEED_LBER_H */ + +/* Define to 1 if you need the malloc.h header file even with stdlib.h */ +/* #undef NEED_MALLOC_H */ + +/* Define to 1 if you need the memory.h header file even with stdlib.h */ +/* #undef NEED_MEMORY_H */ + +/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */ +/* #undef NEED_REENTRANT */ + +/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */ +/* #undef NEED_THREAD_SAFE */ + +/* cpu-machine-OS */ +#define OS "arm-unknown-eabi" + +/* Name of package */ +#define PACKAGE "curl" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "curl" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "curl -" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "curl" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "-" + +/* a suitable file to read random data from */ +#define RANDOM_FILE "/dev/urandom" + +/* Define to the type of arg 1 for recvfrom. */ +#define RECVFROM_TYPE_ARG1 int + +/* Define to the type pointed by arg 2 for recvfrom. */ +#define RECVFROM_TYPE_ARG2 void + +/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */ +#define RECVFROM_TYPE_ARG2_IS_VOID 1 + +/* Define to the type of arg 3 for recvfrom. */ +#define RECVFROM_TYPE_ARG3 size_t + +/* Define to the type of arg 4 for recvfrom. */ +#define RECVFROM_TYPE_ARG4 int + +/* Define to the type pointed by arg 5 for recvfrom. */ +#define RECVFROM_TYPE_ARG5 struct sockaddr + +/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */ +/* #undef RECVFROM_TYPE_ARG5_IS_VOID */ + +/* Define to the type pointed by arg 6 for recvfrom. */ +#define RECVFROM_TYPE_ARG6 socklen_t + +/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */ +/* #undef RECVFROM_TYPE_ARG6_IS_VOID */ + +/* Define to the function return type for recvfrom. */ +#define RECVFROM_TYPE_RETV ssize_t + +/* Define to the type of arg 1 for recv. */ +#define RECV_TYPE_ARG1 int + +/* Define to the type of arg 2 for recv. */ +#define RECV_TYPE_ARG2 void * + +/* Define to the type of arg 3 for recv. */ +#define RECV_TYPE_ARG3 size_t + +/* Define to the type of arg 4 for recv. */ +#define RECV_TYPE_ARG4 int + +/* Define to the function return type for recv. */ +#define RECV_TYPE_RETV ssize_t + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void + +/* Define to the type qualifier of arg 5 for select. */ +#define SELECT_QUAL_ARG5 + +/* Define to the type of arg 1 for select. */ +#define SELECT_TYPE_ARG1 int + +/* Define to the type of args 2, 3 and 4 for select. */ +#define SELECT_TYPE_ARG234 fd_set * + +/* Define to the type of arg 5 for select. */ +#define SELECT_TYPE_ARG5 struct timeval * + +/* Define to the function return type for select. */ +#define SELECT_TYPE_RETV int + +/* Define to the type qualifier of arg 2 for send. */ +#define SEND_QUAL_ARG2 const + +/* Define to the type of arg 1 for send. */ +#define SEND_TYPE_ARG1 int + +/* Define to the type of arg 2 for send. */ +#define SEND_TYPE_ARG2 void * + +/* Define to the type of arg 3 for send. */ +#define SEND_TYPE_ARG3 size_t + +/* Define to the type of arg 4 for send. */ +#define SEND_TYPE_ARG4 int + +/* Define to the function return type for send. */ +#define SEND_TYPE_RETV ssize_t + +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 8 + +/* The size of `off_t', as computed by sizeof. */ +#define SIZEOF_OFF_T 8 + +/* The size of `short', as computed by sizeof. */ +#define SIZEOF_SHORT 2 + +/* The size of `size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 8 + +/* The size of `time_t', as computed by sizeof. */ +#define SIZEOF_TIME_T 8 + +/* The size of `void*', as computed by sizeof. */ +#define SIZEOF_VOIDP 8 + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to the type of arg 3 for strerror_r. */ +#define STRERROR_R_TYPE_ARG3 size_t + +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +#define TIME_WITH_SYS_TIME 1 + +/* Define to enable c-ares support */ +/* #undef USE_ARES */ + +/* Define to disable non-blocking sockets. */ +/* #undef USE_BLOCKING_SOCKETS */ + +/* if GnuTLS is enabled */ +/* #undef USE_GNUTLS */ + +/* if libSSH2 is in use */ +/* #undef USE_LIBSSH2 */ + +/* If you want to build curl with the built-in manual */ +#define USE_MANUAL 1 + +/* if NSS is enabled */ +/* #undef USE_NSS */ + +/* if OpenSSL is in use */ +#define USE_OPENSSL 1 + +/* if SSL is enabled */ +#define USE_SSLEAY 1 + +/* Define to 1 if you are building a Windows target without large file + support. */ +/* #undef USE_WIN32_LARGE_FILES */ + +/* to enable SSPI support */ +/* #undef USE_WINDOWS_SSPI */ + +/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */ +/* #undef USE_YASSLEMUL */ + +/* Version number of package */ +#define VERSION "7.20.1" + +/* Define to avoid automatic inclusion of winsock.h */ +/* #undef WIN32_LEAN_AND_MEAN */ + +/* Define to 1 if OS is AIX. */ +#ifndef _ALL_SOURCE +/* # undef _ALL_SOURCE */ +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Type to use in place of in_addr_t when system does not provide it. */ +/* #undef in_addr_t */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* #undef size_t */ + +/* the signed version of size_t */ +/* #undef ssize_t */ diff --git a/src/curl_config.h.in b/src/curl_config.h.in new file mode 100644 index 0000000..846fb27 --- /dev/null +++ b/src/curl_config.h.in @@ -0,0 +1,973 @@ +/* lib/curl_config.h.in. Generated from configure.ac by autoheader. */ + +/* when building libcurl itself */ +#undef BUILDING_LIBCURL + +/* Location of default ca bundle */ +#undef CURL_CA_BUNDLE + +/* Location of default ca path */ +#undef CURL_CA_PATH + +/* to disable cookies support */ +#undef CURL_DISABLE_COOKIES + +/* to disable cryptographic authentication */ +#undef CURL_DISABLE_CRYPTO_AUTH + +/* to disable DICT */ +#undef CURL_DISABLE_DICT + +/* to disable FILE */ +#undef CURL_DISABLE_FILE + +/* to disable FTP */ +#undef CURL_DISABLE_FTP + +/* to disable HTTP */ +#undef CURL_DISABLE_HTTP + +/* to disable IMAP */ +#undef CURL_DISABLE_IMAP + +/* to disable LDAP */ +#undef CURL_DISABLE_LDAP + +/* to disable LDAPS */ +#undef CURL_DISABLE_LDAPS + +/* to disable POP3 */ +#undef CURL_DISABLE_POP3 + +/* to disable proxies */ +#undef CURL_DISABLE_PROXY + +/* to disable RTSP */ +#undef CURL_DISABLE_RTSP + +/* to disable SMTP */ +#undef CURL_DISABLE_SMTP + +/* to disable TELNET */ +#undef CURL_DISABLE_TELNET + +/* to disable TFTP */ +#undef CURL_DISABLE_TFTP + +/* to disable verbose strings */ +#undef CURL_DISABLE_VERBOSE_STRINGS + +/* to make a symbol visible */ +#undef CURL_EXTERN_SYMBOL + +/* to enable hidden symbols */ +#undef CURL_HIDDEN_SYMBOLS + +/* W$ LDAP with non-W$ compiler */ +#undef CURL_LDAP_HYBRID + +/* Use W$ LDAP implementation */ +#undef CURL_LDAP_WIN + +/* when not building a shared library */ +#undef CURL_STATICLIB + +/* your Entropy Gathering Daemon socket pathname */ +#undef EGD_SOCKET + +/* Define if you want to enable IPv6 support */ +#undef ENABLE_IPV6 + +/* Define to the type qualifier of arg 1 for getnameinfo. */ +#undef GETNAMEINFO_QUAL_ARG1 + +/* Define to the type of arg 1 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG1 + +/* Define to the type of arg 2 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG2 + +/* Define to the type of args 4 and 6 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG46 + +/* Define to the type of arg 7 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG7 + +/* Specifies the number of arguments to getservbyport_r */ +#undef GETSERVBYPORT_R_ARGS + +/* Specifies the size of the buffer to pass to getservbyport_r */ +#undef GETSERVBYPORT_R_BUFSIZE + +/* Define to 1 if you have the alarm function. */ +#undef HAVE_ALARM + +/* Define to 1 if you have the <alloca.h> header file. */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the <arpa/inet.h> header file. */ +#undef HAVE_ARPA_INET_H + +/* Define to 1 if you have the <arpa/tftp.h> header file. */ +#undef HAVE_ARPA_TFTP_H + +/* Define to 1 if you have the <assert.h> header file. */ +#undef HAVE_ASSERT_H + +/* Define to 1 if you have the basename function. */ +#undef HAVE_BASENAME + +/* Define to 1 if bool is an available type. */ +#undef HAVE_BOOL_T + +/* Define to 1 if you have the clock_gettime function and monotonic timer. */ +#undef HAVE_CLOCK_GETTIME_MONOTONIC + +/* Define to 1 if you have the closesocket function. */ +#undef HAVE_CLOSESOCKET + +/* Define to 1 if you have the CloseSocket camel case function. */ +#undef HAVE_CLOSESOCKET_CAMEL + +/* Define to 1 if you have the connect function. */ +#undef HAVE_CONNECT + +/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */ +#undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA + +/* Define to 1 if you have the <crypto.h> header file. */ +#undef HAVE_CRYPTO_H + +/* Define to 1 if you have the <des.h> header file. */ +#undef HAVE_DES_H + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the `ENGINE_cleanup' function. */ +#undef HAVE_ENGINE_CLEANUP + +/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */ +#undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES + +/* Define to 1 if you have the <errno.h> header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the <err.h> header file. */ +#undef HAVE_ERR_H + +/* Define to 1 if you have the fcntl function. */ +#undef HAVE_FCNTL + +/* Define to 1 if you have the <fcntl.h> header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have a working fcntl O_NONBLOCK function. */ +#undef HAVE_FCNTL_O_NONBLOCK + +/* Define to 1 if you have the fdopen function. */ +#undef HAVE_FDOPEN + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define to 1 if you have the freeaddrinfo function. */ +#undef HAVE_FREEADDRINFO + +/* Define to 1 if you have the freeifaddrs function. */ +#undef HAVE_FREEIFADDRS + +/* Define to 1 if you have the ftruncate function. */ +#undef HAVE_FTRUNCATE + +/* Define to 1 if you have a working getaddrinfo function. */ +#undef HAVE_GETADDRINFO + +/* Define to 1 if the getaddrinfo function is threadsafe. */ +#undef HAVE_GETADDRINFO_THREADSAFE + +/* Define to 1 if you have the `geteuid' function. */ +#undef HAVE_GETEUID + +/* Define to 1 if you have the gethostbyaddr function. */ +#undef HAVE_GETHOSTBYADDR + +/* Define to 1 if you have the gethostbyaddr_r function. */ +#undef HAVE_GETHOSTBYADDR_R + +/* gethostbyaddr_r() takes 5 args */ +#undef HAVE_GETHOSTBYADDR_R_5 + +/* gethostbyaddr_r() takes 7 args */ +#undef HAVE_GETHOSTBYADDR_R_7 + +/* gethostbyaddr_r() takes 8 args */ +#undef HAVE_GETHOSTBYADDR_R_8 + +/* Define to 1 if you have the gethostbyname function. */ +#undef HAVE_GETHOSTBYNAME + +/* Define to 1 if you have the gethostbyname_r function. */ +#undef HAVE_GETHOSTBYNAME_R + +/* gethostbyname_r() takes 3 args */ +#undef HAVE_GETHOSTBYNAME_R_3 + +/* gethostbyname_r() takes 5 args */ +#undef HAVE_GETHOSTBYNAME_R_5 + +/* gethostbyname_r() takes 6 args */ +#undef HAVE_GETHOSTBYNAME_R_6 + +/* Define to 1 if you have the gethostname function. */ +#undef HAVE_GETHOSTNAME + +/* Define to 1 if you have a working getifaddrs function. */ +#undef HAVE_GETIFADDRS + +/* Define to 1 if you have the getnameinfo function. */ +#undef HAVE_GETNAMEINFO + +/* Define to 1 if you have the `getpass_r' function. */ +#undef HAVE_GETPASS_R + +/* Define to 1 if you have the `getppid' function. */ +#undef HAVE_GETPPID + +/* Define to 1 if you have the `getprotobyname' function. */ +#undef HAVE_GETPROTOBYNAME + +/* Define to 1 if you have the `getpwuid' function. */ +#undef HAVE_GETPWUID + +/* Define to 1 if you have the `getrlimit' function. */ +#undef HAVE_GETRLIMIT + +/* Define to 1 if you have the getservbyport_r function. */ +#undef HAVE_GETSERVBYPORT_R + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have a working glibc-style strerror_r function. */ +#undef HAVE_GLIBC_STRERROR_R + +/* Define to 1 if you have a working gmtime_r function. */ +#undef HAVE_GMTIME_R + +/* if you have the gssapi libraries */ +#undef HAVE_GSSAPI + +/* Define to 1 if you have the <gssapi/gssapi_generic.h> header file. */ +#undef HAVE_GSSAPI_GSSAPI_GENERIC_H + +/* Define to 1 if you have the <gssapi/gssapi.h> header file. */ +#undef HAVE_GSSAPI_GSSAPI_H + +/* Define to 1 if you have the <gssapi/gssapi_krb5.h> header file. */ +#undef HAVE_GSSAPI_GSSAPI_KRB5_H + +/* if you have the GNU gssapi libraries */ +#undef HAVE_GSSGNU + +/* if you have the Heimdal gssapi libraries */ +#undef HAVE_GSSHEIMDAL + +/* if you have the MIT gssapi libraries */ +#undef HAVE_GSSMIT + +/* Define to 1 if you have the `idna_strerror' function. */ +#undef HAVE_IDNA_STRERROR + +/* Define to 1 if you have the `idn_free' function. */ +#undef HAVE_IDN_FREE + +/* Define to 1 if you have the <idn-free.h> header file. */ +#undef HAVE_IDN_FREE_H + +/* Define to 1 if you have the <ifaddrs.h> header file. */ +#undef HAVE_IFADDRS_H + +/* Define to 1 if you have the `inet_addr' function. */ +#undef HAVE_INET_ADDR + +/* Define to 1 if you have the inet_ntoa_r function. */ +#undef HAVE_INET_NTOA_R + +/* inet_ntoa_r() takes 2 args */ +#undef HAVE_INET_NTOA_R_2 + +/* inet_ntoa_r() takes 3 args */ +#undef HAVE_INET_NTOA_R_3 + +/* Define to 1 if you have a IPv6 capable working inet_ntop function. */ +#undef HAVE_INET_NTOP + +/* Define to 1 if you have a IPv6 capable working inet_pton function. */ +#undef HAVE_INET_PTON + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the ioctl function. */ +#undef HAVE_IOCTL + +/* Define to 1 if you have the ioctlsocket function. */ +#undef HAVE_IOCTLSOCKET + +/* Define to 1 if you have the IoctlSocket camel case function. */ +#undef HAVE_IOCTLSOCKET_CAMEL + +/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function. + */ +#undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO + +/* Define to 1 if you have a working ioctlsocket FIONBIO function. */ +#undef HAVE_IOCTLSOCKET_FIONBIO + +/* Define to 1 if you have a working ioctl FIONBIO function. */ +#undef HAVE_IOCTL_FIONBIO + +/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */ +#undef HAVE_IOCTL_SIOCGIFADDR + +/* Define to 1 if you have the <io.h> header file. */ +#undef HAVE_IO_H + +/* if you have the Kerberos4 libraries (including -ldes) */ +#undef HAVE_KRB4 + +/* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */ +#undef HAVE_KRB_GET_OUR_IP_FOR_REALM + +/* Define to 1 if you have the <krb.h> header file. */ +#undef HAVE_KRB_H + +/* Define to 1 if you have the lber.h header file. */ +#undef HAVE_LBER_H + +/* Define to 1 if you have the ldapssl.h header file. */ +#undef HAVE_LDAPSSL_H + +/* Define to 1 if you have the ldap.h header file. */ +#undef HAVE_LDAP_H + +/* Use LDAPS implementation */ +#undef HAVE_LDAP_SSL + +/* Define to 1 if you have the ldap_ssl.h header file. */ +#undef HAVE_LDAP_SSL_H + +/* Define to 1 if you have the `ldap_url_parse' function. */ +#undef HAVE_LDAP_URL_PARSE + +/* Define to 1 if you have the <libgen.h> header file. */ +#undef HAVE_LIBGEN_H + +/* Define to 1 if you have the `idn' library (-lidn). */ +#undef HAVE_LIBIDN + +/* Define to 1 if you have the `resolv' library (-lresolv). */ +#undef HAVE_LIBRESOLV + +/* Define to 1 if you have the `resolve' library (-lresolve). */ +#undef HAVE_LIBRESOLVE + +/* Define to 1 if you have the `ssh2' library (-lssh2). */ +#undef HAVE_LIBSSH2 + +/* Define to 1 if you have the <libssh2.h> header file. */ +#undef HAVE_LIBSSH2_H + +/* Define to 1 if you have the `libssh2_version' function. */ +#undef HAVE_LIBSSH2_VERSION + +/* Define to 1 if you have the `ssl' library (-lssl). */ +#undef HAVE_LIBSSL + +/* if zlib is available */ +#undef HAVE_LIBZ + +/* Define to 1 if you have the <limits.h> header file. */ +#undef HAVE_LIMITS_H + +/* if your compiler supports LL */ +#undef HAVE_LL + +/* Define to 1 if you have the <locale.h> header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if you have a working localtime_r function. */ +#undef HAVE_LOCALTIME_R + +/* Define to 1 if the compiler supports the 'long long' data type. */ +#undef HAVE_LONGLONG + +/* Define to 1 if you have the malloc.h header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the memory.h header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the memrchr function or macro. */ +#undef HAVE_MEMRCHR + +/* Define to 1 if you have the MSG_NOSIGNAL flag. */ +#undef HAVE_MSG_NOSIGNAL + +/* Define to 1 if you have the <netdb.h> header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the <netinet/in.h> header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the <netinet/tcp.h> header file. */ +#undef HAVE_NETINET_TCP_H + +/* Define to 1 if you have the <net/if.h> header file. */ +#undef HAVE_NET_IF_H + +/* Define to 1 if NI_WITHSCOPEID exists and works. */ +#undef HAVE_NI_WITHSCOPEID + +/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE + */ +#undef HAVE_OLD_GSSMIT + +/* Define to 1 if you have the <openssl/crypto.h> header file. */ +#undef HAVE_OPENSSL_CRYPTO_H + +/* Define to 1 if you have the <openssl/engine.h> header file. */ +#undef HAVE_OPENSSL_ENGINE_H + +/* Define to 1 if you have the <openssl/err.h> header file. */ +#undef HAVE_OPENSSL_ERR_H + +/* Define to 1 if you have the <openssl/pem.h> header file. */ +#undef HAVE_OPENSSL_PEM_H + +/* Define to 1 if you have the <openssl/pkcs12.h> header file. */ +#undef HAVE_OPENSSL_PKCS12_H + +/* Define to 1 if you have the <openssl/rsa.h> header file. */ +#undef HAVE_OPENSSL_RSA_H + +/* Define to 1 if you have the <openssl/ssl.h> header file. */ +#undef HAVE_OPENSSL_SSL_H + +/* Define to 1 if you have the <openssl/x509.h> header file. */ +#undef HAVE_OPENSSL_X509_H + +/* Define to 1 if you have the <pem.h> header file. */ +#undef HAVE_PEM_H + +/* Define to 1 if you have the `perror' function. */ +#undef HAVE_PERROR + +/* Define to 1 if you have the `pipe' function. */ +#undef HAVE_PIPE + +/* if you have the function PK11_CreateGenericObject */ +#undef HAVE_PK11_CREATEGENERICOBJECT + +/* Define to 1 if you have a working poll function. */ +#undef HAVE_POLL + +/* If you have a fine poll */ +#undef HAVE_POLL_FINE + +/* Define to 1 if you have the <poll.h> header file. */ +#undef HAVE_POLL_H + +/* Define to 1 if you have a working POSIX-style strerror_r function. */ +#undef HAVE_POSIX_STRERROR_R + +/* Define to 1 if you have the <pwd.h> header file. */ +#undef HAVE_PWD_H + +/* Define to 1 if you have the `RAND_egd' function. */ +#undef HAVE_RAND_EGD + +/* Define to 1 if you have the `RAND_screen' function. */ +#undef HAVE_RAND_SCREEN + +/* Define to 1 if you have the `RAND_status' function. */ +#undef HAVE_RAND_STATUS + +/* Define to 1 if you have the recv function. */ +#undef HAVE_RECV + +/* Define to 1 if you have the recvfrom function. */ +#undef HAVE_RECVFROM + +/* Define to 1 if you have the <rsa.h> header file. */ +#undef HAVE_RSA_H + +/* Define to 1 if you have the select function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the send function. */ +#undef HAVE_SEND + +/* Define to 1 if you have the <setjmp.h> header file. */ +#undef HAVE_SETJMP_H + +/* Define to 1 if you have the `setlocale' function. */ +#undef HAVE_SETLOCALE + +/* Define to 1 if you have the `setmode' function. */ +#undef HAVE_SETMODE + +/* Define to 1 if you have the `setrlimit' function. */ +#undef HAVE_SETRLIMIT + +/* Define to 1 if you have the setsockopt function. */ +#undef HAVE_SETSOCKOPT + +/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */ +#undef HAVE_SETSOCKOPT_SO_NONBLOCK + +/* Define to 1 if you have the <sgtty.h> header file. */ +#undef HAVE_SGTTY_H + +/* Define to 1 if you have the sigaction function. */ +#undef HAVE_SIGACTION + +/* Define to 1 if you have the siginterrupt function. */ +#undef HAVE_SIGINTERRUPT + +/* Define to 1 if you have the signal function. */ +#undef HAVE_SIGNAL + +/* Define to 1 if you have the <signal.h> header file. */ +#undef HAVE_SIGNAL_H + +/* Define to 1 if you have the sigsetjmp function or macro. */ +#undef HAVE_SIGSETJMP + +/* Define to 1 if sig_atomic_t is an available typedef. */ +#undef HAVE_SIG_ATOMIC_T + +/* Define to 1 if sig_atomic_t is already defined as volatile. */ +#undef HAVE_SIG_ATOMIC_T_VOLATILE + +/* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */ +#undef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID + +/* Define to 1 if you have the socket function. */ +#undef HAVE_SOCKET + +/* Define to 1 if you have the <socket.h> header file. */ +#undef HAVE_SOCKET_H + +/* Define this if you have the SPNEGO library fbopenssl */ +#undef HAVE_SPNEGO + +/* Define to 1 if you have the `SSL_get_shutdown' function. */ +#undef HAVE_SSL_GET_SHUTDOWN + +/* Define to 1 if you have the <ssl.h> header file. */ +#undef HAVE_SSL_H + +/* Define to 1 if you have the <stdbool.h> header file. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdio.h> header file. */ +#undef HAVE_STDIO_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the strcasestr function. */ +#undef HAVE_STRCASESTR + +/* Define to 1 if you have the strcmpi function. */ +#undef HAVE_STRCMPI + +/* Define to 1 if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the strerror_r function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the stricmp function. */ +#undef HAVE_STRICMP + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the strlcat function. */ +#undef HAVE_STRLCAT + +/* Define to 1 if you have the `strlcpy' function. */ +#undef HAVE_STRLCPY + +/* Define to 1 if you have the strncasecmp function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the strncmpi function. */ +#undef HAVE_STRNCMPI + +/* Define to 1 if you have the strnicmp function. */ +#undef HAVE_STRNICMP + +/* Define to 1 if you have the <stropts.h> header file. */ +#undef HAVE_STROPTS_H + +/* Define to 1 if you have the strstr function. */ +#undef HAVE_STRSTR + +/* Define to 1 if you have the strtok_r function. */ +#undef HAVE_STRTOK_R + +/* Define to 1 if you have the strtoll function. */ +#undef HAVE_STRTOLL + +/* if struct sockaddr_storage is defined */ +#undef HAVE_STRUCT_SOCKADDR_STORAGE + +/* Define to 1 if you have the timeval struct. */ +#undef HAVE_STRUCT_TIMEVAL + +/* Define to 1 if you have the <sys/filio.h> header file. */ +#undef HAVE_SYS_FILIO_H + +/* Define to 1 if you have the <sys/ioctl.h> header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the <sys/param.h> header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the <sys/poll.h> header file. */ +#undef HAVE_SYS_POLL_H + +/* Define to 1 if you have the <sys/resource.h> header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/sockio.h> header file. */ +#undef HAVE_SYS_SOCKIO_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/time.h> header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <sys/uio.h> header file. */ +#undef HAVE_SYS_UIO_H + +/* Define to 1 if you have the <sys/un.h> header file. */ +#undef HAVE_SYS_UN_H + +/* Define to 1 if you have the <sys/utime.h> header file. */ +#undef HAVE_SYS_UTIME_H + +/* Define to 1 if you have the <termios.h> header file. */ +#undef HAVE_TERMIOS_H + +/* Define to 1 if you have the <termio.h> header file. */ +#undef HAVE_TERMIO_H + +/* Define to 1 if you have the <time.h> header file. */ +#undef HAVE_TIME_H + +/* Define to 1 if you have the <tld.h> header file. */ +#undef HAVE_TLD_H + +/* Define to 1 if you have the `tld_strerror' function. */ +#undef HAVE_TLD_STRERROR + +/* Define to 1 if you have the `uname' function. */ +#undef HAVE_UNAME + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `utime' function. */ +#undef HAVE_UTIME + +/* Define to 1 if you have the <utime.h> header file. */ +#undef HAVE_UTIME_H + +/* Define to 1 if compiler supports C99 variadic macro style. */ +#undef HAVE_VARIADIC_MACROS_C99 + +/* Define to 1 if compiler supports old gcc variadic macro style. */ +#undef HAVE_VARIADIC_MACROS_GCC + +/* Define to 1 if you have the winber.h header file. */ +#undef HAVE_WINBER_H + +/* Define to 1 if you have the windows.h header file. */ +#undef HAVE_WINDOWS_H + +/* Define to 1 if you have the winldap.h header file. */ +#undef HAVE_WINLDAP_H + +/* Define to 1 if you have the winsock2.h header file. */ +#undef HAVE_WINSOCK2_H + +/* Define to 1 if you have the winsock.h header file. */ +#undef HAVE_WINSOCK_H + +/* Define this symbol if your OS supports changing the contents of argv */ +#undef HAVE_WRITABLE_ARGV + +/* Define to 1 if you have the writev function. */ +#undef HAVE_WRITEV + +/* Define to 1 if you have the ws2tcpip.h header file. */ +#undef HAVE_WS2TCPIP_H + +/* Define to 1 if you have the <x509.h> header file. */ +#undef HAVE_X509_H + +/* if you have the zlib.h header file */ +#undef HAVE_ZLIB_H + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if you are building a native Windows target. */ +#undef NATIVE_WINDOWS + +/* Define to 1 if you need the lber.h header file even with ldap.h */ +#undef NEED_LBER_H + +/* Define to 1 if you need the malloc.h header file even with stdlib.h */ +#undef NEED_MALLOC_H + +/* Define to 1 if you need the memory.h header file even with stdlib.h */ +#undef NEED_MEMORY_H + +/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */ +#undef NEED_REENTRANT + +/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */ +#undef NEED_THREAD_SAFE + +/* cpu-machine-OS */ +#undef OS + +/* 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 + +/* a suitable file to read random data from */ +#undef RANDOM_FILE + +/* Define to the type of arg 1 for recvfrom. */ +#undef RECVFROM_TYPE_ARG1 + +/* Define to the type pointed by arg 2 for recvfrom. */ +#undef RECVFROM_TYPE_ARG2 + +/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG2_IS_VOID + +/* Define to the type of arg 3 for recvfrom. */ +#undef RECVFROM_TYPE_ARG3 + +/* Define to the type of arg 4 for recvfrom. */ +#undef RECVFROM_TYPE_ARG4 + +/* Define to the type pointed by arg 5 for recvfrom. */ +#undef RECVFROM_TYPE_ARG5 + +/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG5_IS_VOID + +/* Define to the type pointed by arg 6 for recvfrom. */ +#undef RECVFROM_TYPE_ARG6 + +/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG6_IS_VOID + +/* Define to the function return type for recvfrom. */ +#undef RECVFROM_TYPE_RETV + +/* Define to the type of arg 1 for recv. */ +#undef RECV_TYPE_ARG1 + +/* Define to the type of arg 2 for recv. */ +#undef RECV_TYPE_ARG2 + +/* Define to the type of arg 3 for recv. */ +#undef RECV_TYPE_ARG3 + +/* Define to the type of arg 4 for recv. */ +#undef RECV_TYPE_ARG4 + +/* Define to the function return type for recv. */ +#undef RECV_TYPE_RETV + +/* Define as the return type of signal handlers (`int' or `void'). */ +#undef RETSIGTYPE + +/* Define to the type qualifier of arg 5 for select. */ +#undef SELECT_QUAL_ARG5 + +/* Define to the type of arg 1 for select. */ +#undef SELECT_TYPE_ARG1 + +/* Define to the type of args 2, 3 and 4 for select. */ +#undef SELECT_TYPE_ARG234 + +/* Define to the type of arg 5 for select. */ +#undef SELECT_TYPE_ARG5 + +/* Define to the function return type for select. */ +#undef SELECT_TYPE_RETV + +/* Define to the type qualifier of arg 2 for send. */ +#undef SEND_QUAL_ARG2 + +/* Define to the type of arg 1 for send. */ +#undef SEND_TYPE_ARG1 + +/* Define to the type of arg 2 for send. */ +#undef SEND_TYPE_ARG2 + +/* Define to the type of arg 3 for send. */ +#undef SEND_TYPE_ARG3 + +/* Define to the type of arg 4 for send. */ +#undef SEND_TYPE_ARG4 + +/* Define to the function return type for send. */ +#undef SEND_TYPE_RETV + +/* The size of `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of `off_t', as computed by sizeof. */ +#undef SIZEOF_OFF_T + +/* The size of `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of `size_t', as computed by sizeof. */ +#undef SIZEOF_SIZE_T + +/* The size of `time_t', as computed by sizeof. */ +#undef SIZEOF_TIME_T + +/* The size of `void*', as computed by sizeof. */ +#undef SIZEOF_VOIDP + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to the type of arg 3 for strerror_r. */ +#undef STRERROR_R_TYPE_ARG3 + +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +#undef TIME_WITH_SYS_TIME + +/* Define to enable c-ares support */ +#undef USE_ARES + +/* Define to disable non-blocking sockets. */ +#undef USE_BLOCKING_SOCKETS + +/* if GnuTLS is enabled */ +#undef USE_GNUTLS + +/* if libSSH2 is in use */ +#undef USE_LIBSSH2 + +/* If you want to build curl with the built-in manual */ +#undef USE_MANUAL + +/* if NSS is enabled */ +#undef USE_NSS + +/* if OpenSSL is in use */ +#undef USE_OPENSSL + +/* if SSL is enabled */ +#undef USE_SSLEAY + +/* Define to 1 if you are building a Windows target without large file + support. */ +#undef USE_WIN32_LARGE_FILES + +/* to enable SSPI support */ +#undef USE_WINDOWS_SSPI + +/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */ +#undef USE_YASSLEMUL + +/* Version number of package */ +#undef VERSION + +/* Define to avoid automatic inclusion of winsock.h */ +#undef WIN32_LEAN_AND_MEAN + +/* Define to 1 if OS is AIX. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Type to use in place of in_addr_t when system does not provide it. */ +#undef in_addr_t + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#undef size_t + +/* the signed version of size_t */ +#undef ssize_t diff --git a/src/curlutil.c b/src/curlutil.c new file mode 100644 index 0000000..bca2db7 --- /dev/null +++ b/src/curlutil.c @@ -0,0 +1,134 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include "setup.h" + +#include "curlutil.h" + +#if defined(WIN32) && !defined(MSDOS) + +struct timeval cutil_tvnow(void) +{ + /* + ** GetTickCount() is available on _all_ Windows versions from W95 up + ** to nowadays. Returns milliseconds elapsed since last system boot, + ** increases monotonically and wraps once 49.7 days have elapsed. + */ + struct timeval now; + DWORD milliseconds = GetTickCount(); + now.tv_sec = milliseconds / 1000; + now.tv_usec = (milliseconds % 1000) * 1000; + return now; +} + +#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC) + +struct timeval cutil_tvnow(void) +{ + /* + ** clock_gettime() is granted to be increased monotonically when the + ** monotonic clock is queried. Time starting point is unspecified, it + ** could be the system start-up time, the Epoch, or something else, + ** in any case the time starting point does not change once that the + ** system has started up. + */ + struct timeval now; + struct timespec tsnow; + if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) { + now.tv_sec = tsnow.tv_sec; + now.tv_usec = tsnow.tv_nsec / 1000; + } + /* + ** Even when the configure process has truly detected monotonic clock + ** availability, it might happen that it is not actually available at + ** run-time. When this occurs simply fallback to other time source. + */ +#ifdef HAVE_GETTIMEOFDAY + else + (void)gettimeofday(&now, NULL); +#else + else { + now.tv_sec = (long)time(NULL); + now.tv_usec = 0; + } +#endif + return now; +} + +#elif defined(HAVE_GETTIMEOFDAY) + +struct timeval cutil_tvnow(void) +{ + /* + ** gettimeofday() is not granted to be increased monotonically, due to + ** clock drifting and external source time synchronization it can jump + ** forward or backward in time. + */ + struct timeval now; + (void)gettimeofday(&now, NULL); + return now; +} + +#else + +struct timeval cutil_tvnow(void) +{ + /* + ** time() returns the value of time in seconds since the Epoch. + */ + struct timeval now; + now.tv_sec = (long)time(NULL); + now.tv_usec = 0; + return now; +} + +#endif + +/* + * Make sure that the first argument is the more recent time, as otherwise + * we'll get a weird negative time-diff back... + * + * Returns: the time difference in number of milliseconds. + */ +long cutil_tvdiff(struct timeval newer, struct timeval older) +{ + return (newer.tv_sec-older.tv_sec)*1000+ + (newer.tv_usec-older.tv_usec)/1000; +} + +/* + * Same as cutil_tvdiff but with full usec resolution. + * + * Returns: the time difference in seconds with subsecond resolution. + */ +double cutil_tvdiff_secs(struct timeval newer, struct timeval older) +{ + return (double)(newer.tv_sec-older.tv_sec)+ + (double)(newer.tv_usec-older.tv_usec)/1000000.0; +} + +/* return the number of seconds in the given input timeval struct */ +long cutil_tvlong(struct timeval t1) +{ + return t1.tv_sec; +} + diff --git a/src/curlutil.h b/src/curlutil.h new file mode 100644 index 0000000..a993a77 --- /dev/null +++ b/src/curlutil.h @@ -0,0 +1,49 @@ +#ifndef __CURL_SRC_UTIL_H +#define __CURL_SRC_UTIL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include "setup.h" + + +struct timeval cutil_tvnow(void); + +/* + * Make sure that the first argument (t1) is the more recent time and t2 is + * the older time, as otherwise you get a weird negative time-diff back... + * + * Returns: the time difference in number of milliseconds. + */ +long cutil_tvdiff(struct timeval t1, struct timeval t2); + +/* + * Same as cutil_tvdiff but with full usec resolution. + * + * Returns: the time difference in seconds with subsecond resolution. + */ +double cutil_tvdiff_secs(struct timeval t1, struct timeval t2); + +long cutil_tvlong(struct timeval t1); + + +#endif /* __CURL_SRC_UTIL_H */ + diff --git a/src/getpass.c b/src/getpass.c new file mode 100644 index 0000000..b441a5a --- /dev/null +++ b/src/getpass.c @@ -0,0 +1,267 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +/* This file is a reimplementation of the previous one, due to license + problems. */ + +#include "setup.h" + +#ifndef HAVE_GETPASS_R +/* this file is only for systems without getpass_r() */ + +#include <stdio.h> +#include <string.h> + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#include "getpass.h" + +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif +#ifdef HAVE_TERMIOS_H +#include <termios.h> +#else +#ifdef HAVE_TERMIO_H +#include <termio.h> +#endif +#endif + +/* The last #include file should be: */ +#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG) +#include "memdebug.h" +#endif + +#ifdef __VMS +/* VMS implementation */ +#include descrip +#include starlet +#include iodef +/* #include iosbdef */ +char *getpass_r(const char *prompt, char *buffer, size_t buflen) +{ + long sts; + short chan; + + /* MSK, 23-JAN-2004, iosbdef.h wasn't in VAX V7.2 or CC 6.4 */ + /* distribution so I created this. May revert back later to */ + /* struct _iosb iosb; */ + struct _iosb + { + short int iosb$w_status; /* status */ + short int iosb$w_bcnt; /* byte count */ + int unused; /* unused */ + } iosb; + + $DESCRIPTOR(ttdesc, "TT"); + + buffer[0]='\0'; + sts = sys$assign(&ttdesc, &chan,0,0); + if (sts & 1) { + sts = sys$qiow(0, chan, + IO$_READPROMPT | IO$M_NOECHO, + &iosb, 0, 0, buffer, buflen, 0, 0, + prompt, strlen(prompt)); + + if((sts & 1) && (iosb.iosb$w_status&1)) + buffer[iosb.iosb$w_bcnt] = '\0'; + + sts = sys$dassgn(chan); + } + return buffer; /* we always return success */ +} +#define DONE +#endif /* __VMS */ + + +#ifdef WIN32 +/* Windows implementation */ +#include <conio.h> +#endif + +#ifdef __SYMBIAN32__ +#define getch() getchar() +#endif + +#if defined(WIN32) || defined(__SYMBIAN32__) + +char *getpass_r(const char *prompt, char *buffer, size_t buflen) +{ + size_t i; + fputs(prompt, stderr); + + for(i=0; i<buflen; i++) { + buffer[i] = (char)getch(); + if ( buffer[i] == '\r' || buffer[i] == '\n' ) { + buffer[i] = 0; + break; + } + else + if ( buffer[i] == '\b') + /* remove this letter and if this is not the first key, remove the + previous one as well */ + i = i - (i>=1?2:1); + } +#ifndef __SYMBIAN32__ + /* since echo is disabled, print a newline */ + fputs("\n", stderr); +#endif + /* if user didn't hit ENTER, terminate buffer */ + if (i==buflen) + buffer[buflen-1]=0; + + return buffer; /* we always return success */ +} +#define DONE +#endif /* WIN32 || __SYMBIAN32__ */ + +#ifdef NETWARE +/* NetWare implementation */ +#ifdef __NOVELL_LIBC__ +#include <screen.h> +char *getpass_r(const char *prompt, char *buffer, size_t buflen) +{ + return getpassword(prompt, buffer, buflen); +} +#else +#include <nwconio.h> +char *getpass_r(const char *prompt, char *buffer, size_t buflen) +{ + size_t i = 0; + + printf("%s", prompt); + do { + buffer[i++] = getch(); + if (buffer[i-1] == '\b') { + /* remove this letter and if this is not the first key, + remove the previous one as well */ + if (i > 1) { + printf("\b \b"); + i = i - 2; + } else { + RingTheBell(); + i = i - 1; + } + } else if (buffer[i-1] != 13) { + putchar('*'); + } + } while ((buffer[i-1] != 13) && (i < buflen)); + buffer[i-1] = 0; + printf("\r\n"); + return buffer; +} +#endif /* __NOVELL_LIBC__ */ +#define DONE +#endif /* NETWARE */ + +#ifndef DONE /* not previously provided */ + +#ifdef HAVE_TERMIOS_H +#define struct_term struct termios +#else +#ifdef HAVE_TERMIO_H +#define struct_term struct termio +#else +#undef struct_term +#endif +#endif + +static bool ttyecho(bool enable, int fd) +{ +#ifdef struct_term + static struct_term withecho; + static struct_term noecho; +#endif + if(!enable) { + /* disable echo by extracting the current 'withecho' mode and remove the + ECHO bit and set back the struct */ +#ifdef HAVE_TERMIOS_H + tcgetattr(fd, &withecho); + noecho = withecho; + noecho.c_lflag &= ~ECHO; + tcsetattr(fd, TCSANOW, &noecho); +#else /* HAVE_TERMIOS_H */ +#ifdef HAVE_TERMIO_H + ioctl(fd, TCGETA, &withecho); + noecho = withecho; + noecho.c_lflag &= ~ECHO; + ioctl(fd, TCSETA, &noecho); +#else /* HAVE_TERMIO_H */ +/* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H, we can't disable echo! */ + (void)fd; /* prevent compiler warning on unused variable */ + return FALSE; /* not disabled */ +#endif +#endif + return TRUE; /* disabled */ + } + else { + /* re-enable echo, assumes we disabled it before (and set the structs we + now use to reset the terminal status) */ +#ifdef HAVE_TERMIOS_H + tcsetattr(fd, TCSAFLUSH, &withecho); +#else /* HAVE_TERMIOS_H */ +#ifdef HAVE_TERMIO_H + ioctl(fd, TCSETA, &withecho); +#else +/* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H */ + return FALSE; /* not enabled */ +#endif +#endif + return TRUE; /* enabled */ + } +} + +char *getpass_r(const char *prompt, /* prompt to display */ + char *password, /* buffer to store password in */ + size_t buflen) /* size of buffer to store password in */ +{ + ssize_t nread; + bool disabled; + int fd=open("/dev/tty", O_RDONLY); + if(-1 == fd) + fd = 1; /* use stdin if the tty couldn't be used */ + + disabled = ttyecho(FALSE, fd); /* disable terminal echo */ + + fputs(prompt, stderr); + nread=read(fd, password, buflen); + if(nread > 0) + password[--nread]=0; /* zero terminate where enter is stored */ + else + password[0]=0; /* got nothing */ + + if(disabled) { + /* if echo actually was disabled, add a newline */ + fputs("\n", stderr); + (void)ttyecho(TRUE, fd); /* enable echo */ + } + + if(1 != fd) + close(fd); + + return password; /* return pointer to buffer */ +} + +#endif /* DONE */ +#endif /* HAVE_GETPASS_R */ diff --git a/src/getpass.h b/src/getpass.h new file mode 100644 index 0000000..3b29d47 --- /dev/null +++ b/src/getpass.h @@ -0,0 +1,34 @@ +#ifndef __GETPASS_H +#define __GETPASS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +#ifndef HAVE_GETPASS_R +/* If there's a system-provided function named like this, we trust it is + also found in one of the standard headers. */ + +/* + * Returning NULL will abort the continued operation! + */ +char* getpass_r(const char *prompt, char* buffer, size_t buflen ); +#endif + +#endif diff --git a/src/homedir.c b/src/homedir.c new file mode 100644 index 0000000..ab1d369 --- /dev/null +++ b/src/homedir.c @@ -0,0 +1,120 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include "setup.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#ifdef HAVE_PWD_H +#include <pwd.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#ifdef __VMS +#include <unixlib.h> +#endif + +#include "homedir.h" + +#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG) +#include "memdebug.h" +#endif + +static +char *GetEnv(const char *variable, char do_expand) +{ + char *env = NULL; +#ifdef WIN32 + char buf1[1024], buf2[1024]; + DWORD rc; + + /* Don't use getenv(); it doesn't find variable added after program was + * started. Don't accept truncated results (i.e. rc >= sizeof(buf1)). */ + + rc = GetEnvironmentVariable(variable, buf1, sizeof(buf1)); + if (rc > 0 && rc < sizeof(buf1)) { + env = buf1; + variable = buf1; + } + if (do_expand && strchr(variable,'%')) { + /* buf2 == variable if not expanded */ + rc = ExpandEnvironmentStrings (variable, buf2, sizeof(buf2)); + if (rc > 0 && rc < sizeof(buf2) && + !strchr(buf2,'%')) /* no vars still unexpanded */ + env = buf2; + } +#else + (void)do_expand; +#ifdef __VMS + env = getenv(variable); + if (env && strcmp("HOME",variable) == 0) { + env = decc_translate_vms(env); + } +#else + /* no length control */ + env = getenv(variable); +#endif +#endif + return (env && env[0])?strdup(env):NULL; +} + +/* return the home directory of the current user as an allocated string */ +char *homedir(void) +{ + char *home; + + home = GetEnv("CURL_HOME", FALSE); + if(home) + return home; + + home = GetEnv("HOME", FALSE); + if(home) + return home; + +#if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID) + { + struct passwd *pw = getpwuid(geteuid()); + + if (pw) { +#ifdef __VMS + home = decc_translate_vms(pw->pw_dir); +#else + home = pw->pw_dir; +#endif + if (home && home[0]) + home = strdup(home); + else + home = NULL; + } + } +#endif /* PWD-stuff */ +#ifdef WIN32 + home = GetEnv("APPDATA", TRUE); + if(!home) + home = GetEnv("%USERPROFILE%\\Application Data", TRUE); /* Normally only + on Win-2K/XP */ +#endif /* WIN32 */ + return home; +} diff --git a/src/homedir.h b/src/homedir.h new file mode 100644 index 0000000..c88d517 --- /dev/null +++ b/src/homedir.h @@ -0,0 +1,27 @@ +#ifndef HEADER_CURL_HOMEDIR_H +#define HEADER_CURL_HOMEDIR_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +char *homedir(void); + +#endif /* HEADER_CURL_HOMEDIR_H */ diff --git a/src/hugehelp.c b/src/hugehelp.c new file mode 100644 index 0000000..d3e5761 --- /dev/null +++ b/src/hugehelp.c @@ -0,0 +1,6958 @@ +#include "setup.h" +#ifndef HAVE_LIBZ +/* + * NEVER EVER edit this manually, fix the mkhelp.pl script instead! + * Generation time: Sun Mar 28 23:35:15 2010 + */ +#include "setup.h" +#ifdef USE_MANUAL +#include "hugehelp.h" +#include <stdio.h> +void hugehelp(void) +{ + fputs( +" _ _ ____ _\n" +" Project ___| | | | _ \\| |\n" +" / __| | | | |_) | |\n" +" | (__| |_| | _ <| |___\n" +" \\___|\\___/|_| \\_\\_____|\n" +"\n" +"NAME\n" +" curl - transfer a URL\n" +"\n" +"SYNOPSIS\n" +" curl [options] [URL...]\n" +"\n" +"DESCRIPTION\n" +" curl is a tool to transfer data from or to a server, using one of the\n" +" supported protocols (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT,\n" +, stdout); + fputs( +" TELNET, LDAP or FILE). The command is designed to work without user\n" +" interaction.\n" +"\n" +" curl offers a busload of useful tricks like proxy support, user authen-\n" +" tication, FTP upload, HTTP post, SSL connections, cookies, file trans-\n" +" fer resume and more. As you will see below, the number of features will\n" +" make your head spin!\n" +"\n" +" curl is powered by libcurl for all transfer-related features. See\n" +" libcurl(3) for details.\n" +"\n" +"URL\n" +, stdout); + fputs( +" The URL syntax is protocol-dependent. You'll find a detailed descrip-\n" +" tion in RFC 3986.\n" +"\n" +" You can specify multiple URLs or parts of URLs by writing part sets\n" +" within braces as in:\n" +"\n" +" http://site.{one,two,three}.com\n" +"\n" +" or you can get sequences of alphanumeric series by using [] as in:\n" +"\n" +" ftp://ftp.numericals.com/file[1-100].txt\n" +" ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)\n" +" ftp://ftp.letters.com/file[a-z].txt\n" +"\n" +, stdout); + fputs( +" No nesting of the sequences is supported at the moment, but you can use\n" +" several ones next to each other:\n" +"\n" +" http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html\n" +"\n" +" You can specify any amount of URLs on the command line. They will be\n" +" fetched in a sequential manner in the specified order.\n" +"\n" +" Since curl 7.15.1 you can also specify a step counter for the ranges,\n" +" so that you can get every Nth number or letter:\n" +"\n" +, stdout); + fputs( +" http://www.numericals.com/file[1-100:10].txt\n" +" http://www.letters.com/file[a-z:2].txt\n" +"\n" +" If you specify URL without protocol:// prefix, curl will attempt to\n" +" guess what protocol you might want. It will then default to HTTP but\n" +" try other protocols based on often-used host name prefixes. For exam-\n" +" ple, for host names starting with \"ftp.\" curl will assume you want to\n" +" speak FTP.\n" +"\n" +, stdout); + fputs( +" curl will do its best to use what you pass to it as a URL. It is not\n" +" trying to validate it as a syntactically correct URL by any means but\n" +" is instead very liberal with what it accepts.\n" +"\n" +" Curl will attempt to re-use connections for multiple file transfers, so\n" +" that getting many files from the same server will not do multiple con-\n" +" nects / handshakes. This improves speed. Of course this is only done on\n" +, stdout); + fputs( +" files specified on a single command line and cannot be used between\n" +" separate curl invokes.\n" +"\n" +"PROGRESS METER\n" +" curl normally displays a progress meter during operations, indicating\n" +" the amount of transferred data, transfer speeds and estimated time\n" +" left, etc.\n" +"\n" +" However, since curl displays this data to the terminal by default, if\n" +" you invoke curl to do an operation and it is about to write data to the\n" +, stdout); + fputs( +" terminal, it disables the progress meter as otherwise it would mess up\n" +" the output mixing progress meter and response data.\n" +"\n" +" If you want a progress meter for HTTP POST or PUT requests, you need to\n" +" redirect the response output to a file, using shell redirect (>), -o\n" +" [file] or similar.\n" +"\n" +" It is not the same case for FTP upload as that operation does not spit\n" +" out any response data to the terminal.\n" +"\n" +, stdout); + fputs( +" If you prefer a progress \"bar\" instead of the regular meter, -# is your\n" +" friend.\n" +"OPTIONS\n" +" In general, all boolean options are enabled with --option and yet again\n" +" disabled with --no-option. That is, you use the exact same option name\n" +" but prefix it with \"no-\". However, in this list we mostly only list and\n" +" show the --option version of them. (This concept with --no options was\n" +" added in 7.19.0. Previously most options were toggled on/off on\n" +, stdout); + fputs( +" repeated use of the same command line option.)\n" +"\n" +" -a/--append\n" +" (FTP/SFTP) When used in an upload, this will tell curl to append\n" +" to the target file instead of overwriting it. If the file\n" +" doesn't exist, it will be created. Note that this flag is\n" +" ignored by some SSH servers (including OpenSSH).\n" +"\n" +" -A/--user-agent <agent string>\n" +" (HTTP) Specify the User-Agent string to send to the HTTP server.\n" +, stdout); + fputs( +" Some badly done CGIs fail if this field isn't set to\n" +" \"Mozilla/4.0\". To encode blanks in the string, surround the\n" +" string with single quote marks. This can also be set with the\n" +" -H/--header option of course.\n" +"\n" +" If this option is set more than once, the last one will be the\n" +" one that's used.\n" +"\n" +" --anyauth\n" +" (HTTP) Tells curl to figure out authentication method by itself,\n" +, stdout); + fputs( +" and use the most secure one the remote site claims to support.\n" +" This is done by first doing a request and checking the response-\n" +" headers, thus possibly inducing an extra network round-trip.\n" +" This is used instead of setting a specific authentication\n" +" method, which you can do with --basic, --digest, --ntlm, and\n" +" --negotiate.\n" +"\n" +, stdout); + fputs( +" Note that using --anyauth is not recommended if you do uploads\n" +" from stdin, since it may require data to be sent twice and then\n" +" the client must be able to rewind. If the need should arise when\n" +" uploading from stdin, the upload operation will fail.\n" +"\n" +" -b/--cookie <name=data>\n" +" (HTTP) Pass the data to the HTTP server as a cookie. It is sup-\n" +" posedly the data previously received from the server in a \"Set-\n" +, stdout); + fputs( +" Cookie:\" line. The data should be in the format \"NAME1=VALUE1;\n" +" NAME2=VALUE2\".\n" +"\n" +" If no '=' symbol is used in the line, it is treated as a file-\n" +" name to use to read previously stored cookie lines from, which\n" +" should be used in this session if they match. Using this method\n" +" also activates the \"cookie parser\" which will make curl record\n" +, stdout); + fputs( +" incoming cookies too, which may be handy if you're using this in\n" +" combination with the -L/--location option. The file format of\n" +" the file to read cookies from should be plain HTTP headers or\n" +" the Netscape/Mozilla cookie file format.\n" +"\n" +" NOTE that the file specified with -b/--cookie is only used as\n" +" input. No cookies will be stored in the file. To store cookies,\n" +, stdout); + fputs( +" use the -c/--cookie-jar option or you could even save the HTTP\n" +" headers to a file using -D/--dump-header!\n" +"\n" +" If this option is set more than once, the last one will be the\n" +" one that's used.\n" +"\n" +" -B/--use-ascii\n" +" Enable ASCII transfer when using FTP or LDAP. For FTP, this can\n" +" also be enforced by using an URL that ends with \";type=A\". This\n" +, stdout); + fputs( +" option causes data sent to stdout to be in text mode for win32\n" +" systems.\n" +"\n" +" --basic\n" +" (HTTP) Tells curl to use HTTP Basic authentication. This is the\n" +" default and this option is usually pointless, unless you use it\n" +" to override a previously set option that sets a different\n" +" authentication method (such as --ntlm, --digest, or --negoti-\n" +" ate).\n" +"\n" +" --ciphers <list of ciphers>\n" +, stdout); + fputs( +" (SSL) Specifies which ciphers to use in the connection. The list\n" +" of ciphers must specify valid ciphers. Read up on SSL cipher\n" +" list details on this URL:\n" +" http://www.openssl.org/docs/apps/ciphers.html\n" +"\n" +" NSS ciphers are done differently than OpenSSL and GnuTLS. The\n" +" full list of NSS ciphers is in the NSSCipherSuite entry at this\n" +, stdout); + fputs( +" URL: http://directory.fedora.redhat.com/docs/mod_nss.html#Direc-\n" +" tives\n" +"\n" +" If this option is used several times, the last one will override\n" +" the others.\n" +"\n" +" --compressed\n" +" (HTTP) Request a compressed response using one of the algorithms\n" +" libcurl supports, and return the uncompressed document. If this\n" +" option is used and the server sends an unsupported encoding,\n" +, stdout); + fputs( +" curl will report an error.\n" +"\n" +" --connect-timeout <seconds>\n" +" Maximum time in seconds that you allow the connection to the\n" +" server to take. This only limits the connection phase, once\n" +" curl has connected this option is of no more use. See also the\n" +" -m/--max-time option.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -c/--cookie-jar <file name>\n" +, stdout); + fputs( +" Specify to which file you want curl to write all cookies after a\n" +" completed operation. Curl writes all cookies previously read\n" +" from a specified file as well as all cookies received from\n" +" remote server(s). If no cookies are known, no file will be writ-\n" +" ten. The file will be written using the Netscape cookie file\n" +" format. If you set the file name to a single dash, \"-\", the\n" +, stdout); + fputs( +" cookies will be written to stdout.\n" +"\n" +" NOTE If the cookie jar can't be created or written to, the whole\n" +" curl operation won't fail or even report an error clearly. Using\n" +" -v will get a warning displayed, but that is the only visible\n" +" feedback you get about this possibly lethal situation.\n" +"\n" +" If this option is used several times, the last specified file\n" +" name will be used.\n" +"\n" +, stdout); + fputs( +" -C/--continue-at <offset>\n" +" Continue/Resume a previous file transfer at the given offset.\n" +" The given offset is the exact number of bytes that will be\n" +" skipped, counting from the beginning of the source file before\n" +" it is transferred to the destination. If used with uploads, the\n" +" FTP server command SIZE will not be used by curl.\n" +"\n" +" Use \"-C -\" to tell curl to automatically find out where/how to\n" +, stdout); + fputs( +" resume the transfer. It then uses the given output/input files\n" +" to figure that out.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --create-dirs\n" +" When used in conjunction with the -o option, curl will create\n" +" the necessary local directory hierarchy as needed. This option\n" +" creates the dirs mentioned with the -o option, nothing else. If\n" +, stdout); + fputs( +" the -o file name uses no dir or if the dirs it mentions already\n" +" exist, no dir will be created.\n" +"\n" +" To create remote directories when using FTP or SFTP, try --ftp-\n" +" create-dirs.\n" +"\n" +" --crlf (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).\n" +"\n" +" --crlfile <file>\n" +" (HTTPS/FTPS) Provide a file using PEM format with a Certificate\n" +" Revocation List that may specify peer certificates that are to\n" +, stdout); + fputs( +" be considered revoked.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" (Added in 7.19.7)\n" +"\n" +" -d/--data <data>\n" +" (HTTP) Sends the specified data in a POST request to the HTTP\n" +" server, in the same way that a browser does when a user has\n" +" filled in an HTML form and presses the submit button. This will\n" +" cause curl to pass the data to the server using the content-type\n" +, stdout); + fputs( +" application/x-www-form-urlencoded. Compare to -F/--form.\n" +"\n" +" -d/--data is the same as --data-ascii. To post data purely\n" +" binary, you should instead use the --data-binary option. To URL-\n" +" encode the value of a form field you may use --data-urlencode.\n" +"\n" +" If any of these options is used more than once on the same com-\n" +" mand line, the data pieces specified will be merged together\n" +, stdout); + fputs( +" with a separating &-symbol. Thus, using '-d name=daniel -d\n" +" skill=lousy' would generate a post chunk that looks like\n" +" 'name=daniel&skill=lousy'.\n" +"\n" +" If you start the data with the letter @, the rest should be a\n" +" file name to read the data from, or - if you want curl to read\n" +" the data from stdin. The contents of the file must already be\n" +, stdout); + fputs( +" URL-encoded. Multiple files can also be specified. Posting data\n" +" from a file named 'foobar' would thus be done with --data @foo-\n" +" bar.\n" +"\n" +" --data-binary <data>\n" +" (HTTP) This posts data exactly as specified with no extra pro-\n" +" cessing whatsoever.\n" +"\n" +" If you start the data with the letter @, the rest should be a\n" +" filename. Data is posted in a similar manner as --data-ascii\n" +, stdout); + fputs( +" does, except that newlines are preserved and conversions are\n" +" never done.\n" +"\n" +" If this option is used several times, the ones following the\n" +" first will append data as described in -d/--data.\n" +"\n" +" --data-urlencode <data>\n" +" (HTTP) This posts data, similar to the other --data options with\n" +" the exception that this performs URL-encoding. (Added in 7.18.0)\n" +, stdout); + fputs( +" To be CGI-compliant, the <data> part should begin with a name\n" +" followed by a separator and a content specification. The <data>\n" +" part can be passed to curl using one of the following syntaxes:\n" +"\n" +" content\n" +" This will make curl URL-encode the content and pass that\n" +" on. Just be careful so that the content doesn't contain\n" +" any = or @ symbols, as that will then make the syntax\n" +, stdout); + fputs( +" match one of the other cases below!\n" +"\n" +" =content\n" +" This will make curl URL-encode the content and pass that\n" +" on. The preceding = symbol is not included in the data.\n" +"\n" +" name=content\n" +" This will make curl URL-encode the content part and pass\n" +" that on. Note that the name part is expected to be URL-\n" +" encoded already.\n" +"\n" +" @filename\n" +, stdout); + fputs( +" This will make curl load data from the given file\n" +" (including any newlines), URL-encode that data and pass\n" +" it on in the POST.\n" +"\n" +" name@filename\n" +" This will make curl load data from the given file\n" +" (including any newlines), URL-encode that data and pass\n" +" it on in the POST. The name part gets an equal sign\n" +, stdout); + fputs( +" appended, resulting in name=urlencoded-file-content. Note\n" +" that the name is expected to be URL-encoded already.\n" +"\n" +" --digest\n" +" (HTTP) Enables HTTP Digest authentication. This is a authentica-\n" +" tion that prevents the password from being sent over the wire in\n" +" clear text. Use this in combination with the normal -u/--user\n" +" option to set user name and password. See also --ntlm, --negoti-\n" +, stdout); + fputs( +" ate and --anyauth for related options.\n" +"\n" +" If this option is used several times, the following occurrences\n" +" make no difference.\n" +"\n" +" --disable-eprt\n" +" (FTP) Tell curl to disable the use of the EPRT and LPRT commands\n" +" when doing active FTP transfers. Curl will normally always first\n" +" attempt to use EPRT, then LPRT before using PORT, but with this\n" +, stdout); + fputs( +" option, it will use PORT right away. EPRT and LPRT are exten-\n" +" sions to the original FTP protocol, and may not work on all\n" +" servers, but they enable more functionality in a better way than\n" +" the traditional PORT command.\n" +"\n" +" Since curl 7.19.0, --eprt can be used to explicitly enable EPRT\n" +" again and --no-eprt is an alias for --disable-eprt.\n" +"\n" +, stdout); + fputs( +" Disabling EPRT only changes the active behavior. If you want to\n" +" switch to passive mode you need to not use -P/--ftp-port or\n" +" force it with --ftp-pasv.\n" +"\n" +" --disable-epsv\n" +" (FTP) Tell curl to disable the use of the EPSV command when\n" +" doing passive FTP transfers. Curl will normally always first\n" +" attempt to use EPSV before PASV, but with this option, it will\n" +" not try using EPSV.\n" +"\n" +, stdout); + fputs( +" Since curl 7.19.0, --epsv can be used to explicitly enable EPRT\n" +" again and --no-epsv is an alias for --disable-epsv.\n" +"\n" +" Disabling EPSV only changes the passive behavior. If you want to\n" +" switch to active mode you need to use -P/--ftp-port.\n" +"\n" +" -D/--dump-header <file>\n" +" Write the protocol headers to the specified file.\n" +"\n" +" This option is handy to use when you want to store the headers\n" +, stdout); + fputs( +" that a HTTP site sends to you. Cookies from the headers could\n" +" then be read in a second curl invocation by using the\n" +" -b/--cookie option! The -c/--cookie-jar option is however a bet-\n" +" ter way to store cookies.\n" +"\n" +" When used in FTP, the FTP server response lines are considered\n" +" being \"headers\" and thus are saved there.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +, stdout); + fputs( +" -e/--referer <URL>\n" +" (HTTP) Sends the \"Referer Page\" information to the HTTP server.\n" +" This can also be set with the -H/--header flag of course. When\n" +" used with -L/--location you can append \";auto\" to the --referer\n" +" URL to make curl automatically set the previous URL when it fol-\n" +" lows a Location: header. The \";auto\" string can be used alone,\n" +" even if you don't set an initial --referer.\n" +"\n" +, stdout); + fputs( +" If this option is used several times, the last one will be used.\n" +"\n" +" --engine <name>\n" +" Select the OpenSSL crypto engine to use for cipher operations.\n" +" Use --engine list to print a list of build-time supported\n" +" engines. Note that not all (or none) of the engines may be\n" +" available at run-time.\n" +"\n" +" --environment\n" +" (RISC OS ONLY) Sets a range of environment variables, using the\n" +, stdout); + fputs( +" names the -w option supports, to allow easier extraction of use-\n" +" ful information after having run curl.\n" +"\n" +" --egd-file <file>\n" +" (SSL) Specify the path name to the Entropy Gathering Daemon\n" +" socket. The socket is used to seed the random engine for SSL\n" +" connections. See also the --random-file option.\n" +"\n" +" -E/--cert <certificate[:password]>\n" +" (SSL) Tells curl to use the specified certificate file when get-\n" +, stdout); + fputs( +" ting a file with HTTPS or FTPS. The certificate must be in PEM\n" +" format. If the optional password isn't specified, it will be\n" +" queried for on the terminal. Note that this option assumes a\n" +" \"certificate\" file that is the private key and the private cer-\n" +" tificate concatenated! See --cert and --key to specify them\n" +" independently.\n" +"\n" +, stdout); + fputs( +" If curl is built against the NSS SSL library then this option\n" +" tells curl the nickname of the certificate to use within the NSS\n" +" database defined by the environment variable SSL_DIR (or by\n" +" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n" +" nsspem.so) is available then PEM files may be loaded.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --cert-type <type>\n" +, stdout); + fputs( +" (SSL) Tells curl what certificate type the provided certificate\n" +" is in. PEM, DER and ENG are recognized types. If not specified,\n" +" PEM is assumed.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --cacert <CA certificate>\n" +" (SSL) Tells curl to use the specified certificate file to verify\n" +" the peer. The file may contain multiple CA certificates. The\n" +, stdout); + fputs( +" certificate(s) must be in PEM format. Normally curl is built to\n" +" use a default file for this, so this option is typically used to\n" +" alter that default file.\n" +"\n" +" curl recognizes the environment variable named 'CURL_CA_BUNDLE'\n" +" if it is set, and uses the given path as a path to a CA cert\n" +" bundle. This option overrides that variable.\n" +"\n" +" The windows version of curl will automatically look for a CA\n" +, stdout); + fputs( +" certs file named 'curl-ca-bundle.crt', either in the same direc-\n" +" tory as curl.exe, or in the Current Working Directory, or in any\n" +" folder along your PATH.\n" +"\n" +" If curl is built against the NSS SSL library then this option\n" +" tells curl the nickname of the CA certificate to use within the\n" +" NSS database defined by the environment variable SSL_DIR (or by\n" +, stdout); + fputs( +" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n" +" nsspem.so) is available then PEM files may be loaded.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --capath <CA certificate directory>\n" +" (SSL) Tells curl to use the specified certificate directory to\n" +" verify the peer. The certificates must be in PEM format, and the\n" +, stdout); + fputs( +" directory must have been processed using the c_rehash utility\n" +" supplied with openssl. Using --capath can allow curl to make\n" +" SSL-connections much more efficiently than using --cacert if the\n" +" --cacert file contains many CA certificates.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -f/--fail\n" +" (HTTP) Fail silently (no output at all) on server errors. This\n" +, stdout); + fputs( +" is mostly done to better enable scripts etc to better deal with\n" +" failed attempts. In normal cases when a HTTP server fails to\n" +" deliver a document, it returns an HTML document stating so\n" +" (which often also describes why and more). This flag will pre-\n" +" vent curl from outputting that and return error 22.\n" +"\n" +" This method is not fail-safe and there are occasions where non-\n" +, stdout); + fputs( +" successful response codes will slip through, especially when\n" +" authentication is involved (response codes 401 and 407).\n" +"\n" +" --ftp-account [data]\n" +" (FTP) When an FTP server asks for \"account data\" after user name\n" +" and password has been provided, this data is sent off using the\n" +" ACCT command. (Added in 7.13.0)\n" +"\n" +" If this option is used twice, the second will override the pre-\n" +" vious use.\n" +"\n" +, stdout); + fputs( +" --ftp-create-dirs\n" +" (FTP/SFTP) When an FTP or SFTP URL/operation uses a path that\n" +" doesn't currently exist on the server, the standard behavior of\n" +" curl is to fail. Using this option, curl will instead attempt to\n" +" create missing directories.\n" +"\n" +" --ftp-method [method]\n" +" (FTP) Control what method curl should use to reach a file on a\n" +" FTP(S) server. The method argument should be one of the follow-\n" +, stdout); + fputs( +" ing alternatives:\n" +"\n" +" multicwd\n" +" curl does a single CWD operation for each path part in\n" +" the given URL. For deep hierarchies this means very many\n" +" commands. This is how RFC1738 says it should be done.\n" +" This is the default but the slowest behavior.\n" +"\n" +" nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR\n" +, stdout); + fputs( +" etc and give a full path to the server for all these com-\n" +" mands. This is the fastest behavior.\n" +"\n" +" singlecwd\n" +" curl does one CWD with the full target directory and then\n" +" operates on the file \"normally\" (like in the multicwd\n" +" case). This is somewhat more standards compliant than\n" +" 'nocwd' but without the full penalty of 'multicwd'.\n" +" (Added in 7.15.1)\n" +"\n" +, stdout); + fputs( +" --ftp-pasv\n" +" (FTP) Use passive mode for the data conection. Passive is the\n" +" internal default behavior, but using this option can be used to\n" +" override a previous -P/-ftp-port option. (Added in 7.11.0)\n" +"\n" +" If this option is used several times, the following occurrences\n" +" make no difference. Undoing an enforced passive really isn't\n" +" doable but you must then instead enforce the correct -P/--ftp-\n" +, stdout); + fputs( +" port again.\n" +"\n" +" Passive mode means that curl will try the EPSV command first and\n" +" then PASV, unless --disable-epsv is used.\n" +"\n" +" --ftp-alternative-to-user <command>\n" +" (FTP) If authenticating with the USER and PASS commands fails,\n" +" send this command. When connecting to Tumbleweed's Secure\n" +" Transport server over FTPS using a client certificate, using\n" +, stdout); + fputs( +" \"SITE AUTH\" will tell the server to retrieve the username from\n" +" the certificate. (Added in 7.15.5)\n" +"\n" +" --ftp-skip-pasv-ip\n" +" (FTP) Tell curl to not use the IP address the server suggests in\n" +" its response to curl's PASV command when curl connects the data\n" +" connection. Instead curl will re-use the same IP address it\n" +" already uses for the control connection. (Added in 7.14.2)\n" +"\n" +, stdout); + fputs( +" This option has no effect if PORT, EPRT or EPSV is used instead\n" +" of PASV.\n" +"\n" +" --ftp-pret\n" +" (FTP) Tell curl to send a PRET command before PASV (and EPSV).\n" +" Certain FTP servers, mainly drftpd, require this non-standard\n" +" command for directory listings as well as up and downloads in\n" +" PASV mode. (Added in 7.20.x)\n" +"\n" +" --ssl (FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection.\n" +, stdout); + fputs( +" Reverts to a non-secure connection if the server doesn't support\n" +" SSL/TLS. See also --ftp-ssl-control and --ssl-reqd for differ-\n" +" ent levels of encryption required. (Added in 7.20.0)\n" +"\n" +" This option was formerly known as --ftp-ssl (Added in 7.11.0)\n" +" and that can still be used but will be removed in a future ver-\n" +" sion.\n" +"\n" +" --ftp-ssl-control\n" +, stdout); + fputs( +" (FTP) Require SSL/TLS for the FTP login, clear for transfer.\n" +" Allows secure authentication, but non-encrypted data transfers\n" +" for efficiency. Fails the transfer if the server doesn't sup-\n" +" port SSL/TLS. (Added in 7.16.0)\n" +"\n" +" --ssl-reqd\n" +" (FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection.\n" +" Terminates the connection if the server doesn't support SSL/TLS.\n" +" (Added in 7.20.0)\n" +"\n" +, stdout); + fputs( +" This option was formerly known as --ftp-ssl-reqd (added in\n" +" 7.15.5) and that can still be used but will be removed in a\n" +" future version.\n" +"\n" +" --ftp-ssl-ccc\n" +" (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS\n" +" layer after authenticating. The rest of the control channel com-\n" +" munication will be unencrypted. This allows NAT routers to fol-\n" +, stdout); + fputs( +" low the FTP transaction. The default mode is passive. See --ftp-\n" +" ssl-ccc-mode for other modes. (Added in 7.16.1)\n" +"\n" +" --ftp-ssl-ccc-mode [active/passive]\n" +" (FTP) Use CCC (Clear Command Channel) Sets the CCC mode. The\n" +" passive mode will not initiate the shutdown, but instead wait\n" +" for the server to do it, and will not reply to the shutdown from\n" +, stdout); + fputs( +" the server. The active mode initiates the shutdown and waits for\n" +" a reply from the server. (Added in 7.16.2)\n" +"\n" +" -F/--form <name=content>\n" +" (HTTP) This lets curl emulate a filled-in form in which a user\n" +" has pressed the submit button. This causes curl to POST data\n" +" using the Content-Type multipart/form-data according to RFC2388.\n" +" This enables uploading of binary files etc. To force the 'con-\n" +, stdout); + fputs( +" tent' part to be a file, prefix the file name with an @ sign. To\n" +" just get the content part from a file, prefix the file name with\n" +" the symbol <. The difference between @ and < is then that @\n" +" makes a file get attached in the post as a file upload, while\n" +" the < makes a text field and just get the contents for that text\n" +" field from a file.\n" +"\n" +, stdout); + fputs( +" Example, to send your password file to the server, where 'pass-\n" +" word' is the name of the form-field to which /etc/passwd will be\n" +" the input:\n" +"\n" +" curl -F password=@/etc/passwd www.mypasswords.com\n" +"\n" +" To read the file's content from stdin instead of a file, use -\n" +" where the file name should've been. This goes for both @ and <\n" +" constructs.\n" +"\n" +, stdout); + fputs( +" You can also tell curl what Content-Type to use by using\n" +" 'type=', in a manner similar to:\n" +"\n" +" curl -F \"web=@index.html;type=text/html\" url.com\n" +"\n" +" or\n" +"\n" +" curl -F \"name=daniel;type=text/foo\" url.com\n" +"\n" +" You can also explicitly change the name field of an file upload\n" +" part by setting filename=, like this:\n" +"\n" +" curl -F \"file=@localfile;filename=nameinpost\" url.com\n" +"\n" +, stdout); + fputs( +" See further examples and details in the MANUAL.\n" +"\n" +" This option can be used multiple times.\n" +"\n" +" --form-string <name=string>\n" +" (HTTP) Similar to --form except that the value string for the\n" +" named parameter is used literally. Leading '@' and '<' charac-\n" +" ters, and the ';type=' string in the value have no special mean-\n" +" ing. Use this in preference to --form if there's any possibility\n" +, stdout); + fputs( +" that the string value may accidentally trigger the '@' or '<'\n" +" features of --form.\n" +"\n" +" -g/--globoff\n" +" This option switches off the \"URL globbing parser\". When you set\n" +" this option, you can specify URLs that contain the letters {}[]\n" +" without having them being interpreted by curl itself. Note that\n" +" these letters are not normal legal URL contents but they should\n" +, stdout); + fputs( +" be encoded according to the URI standard.\n" +"\n" +" -G/--get\n" +" When used, this option will make all data specified with\n" +" -d/--data or --data-binary to be used in a HTTP GET request\n" +" instead of the POST request that otherwise would be used. The\n" +" data will be appended to the URL with a '?' separator.\n" +"\n" +" If used in combination with -I, the POST data will instead be\n" +, stdout); + fputs( +" appended to the URL with a HEAD request.\n" +"\n" +" If this option is used several times, the following occurrences\n" +" make no difference. This is because undoing a GET doesn't make\n" +" sense, but you should then instead enforce the alternative\n" +" method you prefer.\n" +"\n" +" -h/--help\n" +" Usage help.\n" +"\n" +" -H/--header <header>\n" +" (HTTP) Extra header to use when getting a web page. You may\n" +, stdout); + fputs( +" specify any number of extra headers. Note that if you should add\n" +" a custom header that has the same name as one of the internal\n" +" ones curl would use, your externally set header will be used\n" +" instead of the internal one. This allows you to make even trick-\n" +" ier stuff than curl would normally do. You should not replace\n" +" internally set headers without knowing perfectly well what\n" +, stdout); + fputs( +" you're doing. Remove an internal header by giving a replacement\n" +" without content on the right side of the colon, as in: -H\n" +" \"Host:\".\n" +"\n" +" curl will make sure that each header you add/replace is sent\n" +" with the proper end-of-line marker, you should thus not add that\n" +" as a part of the header content: do not add newlines or carriage\n" +" returns, they will only mess things up for you.\n" +"\n" +, stdout); + fputs( +" See also the -A/--user-agent and -e/--referer options.\n" +"\n" +" This option can be used multiple times to add/replace/remove\n" +" multiple headers.\n" +"\n" +" --hostpubmd5 <md5>\n" +" Pass a string containing 32 hexadecimal digits. The string\n" +" should be the 128 bit MD5 checksum of the remote host's public\n" +" key, curl will refuse the connection with the host unless the\n" +, stdout); + fputs( +" md5sums match. This option is only for SCP and SFTP transfers.\n" +" (Added in 7.17.1)\n" +"\n" +" --ignore-content-length\n" +" (HTTP) Ignore the Content-Length header. This is particularly\n" +" useful for servers running Apache 1.x, which will report incor-\n" +" rect Content-Length for files larger than 2 gigabytes.\n" +"\n" +" -i/--include\n" +" (HTTP) Include the HTTP-header in the output. The HTTP-header\n" +, stdout); + fputs( +" includes things like server-name, date of the document, HTTP-\n" +" version and more...\n" +"\n" +" --interface <name>\n" +" Perform an operation using a specified interface. You can enter\n" +" interface name, IP address or host name. An example could look\n" +" like:\n" +"\n" +" curl --interface eth0:1 http://www.netscape.com/\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -I/--head\n" +, stdout); + fputs( +" (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature\n" +" the command HEAD which this uses to get nothing but the header\n" +" of a document. When used on a FTP or FILE file, curl displays\n" +" the file size and last modification time only.\n" +"\n" +" -j/--junk-session-cookies\n" +" (HTTP) When curl is told to read cookies from a given file, this\n" +" option will make it discard all \"session cookies\". This will\n" +, stdout); + fputs( +" basically have the same effect as if a new session is started.\n" +" Typical browsers always discard session cookies when they're\n" +" closed down.\n" +"\n" +" -J/--remote-header-name\n" +" (HTTP) This option tells the -O/--remote-name option to use the\n" +" server-specified Content-Disposition filename instead of\n" +" extracting a filename from the URL.\n" +"\n" +" -k/--insecure\n" +, stdout); + fputs( +" (SSL) This option explicitly allows curl to perform \"insecure\"\n" +" SSL connections and transfers. All SSL connections are attempted\n" +" to be made secure by using the CA certificate bundle installed\n" +" by default. This makes all connections considered \"insecure\"\n" +" fail unless -k/--insecure is used.\n" +"\n" +" See this online resource for further details:\n" +" http://curl.haxx.se/docs/sslcerts.html\n" +, stdout); + fputs( +"\n" +" --keepalive-time <seconds>\n" +" This option sets the time a connection needs to remain idle\n" +" before sending keepalive probes and the time between individual\n" +" keepalive probes. It is currently effective on operating systems\n" +" offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options\n" +" (meaning Linux, recent AIX, HP-UX and more). This option has no\n" +" effect if --no-keepalive is used. (Added in 7.18.0)\n" +"\n" +, stdout); + fputs( +" If this option is used multiple times, the last occurrence sets\n" +" the amount.\n" +" --key <key>\n" +" (SSL/SSH) Private key file name. Allows you to provide your pri-\n" +" vate key in this separate file.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --key-type <type>\n" +" (SSL) Private key file type. Specify which type your --key pro-\n" +, stdout); + fputs( +" vided private key is. DER, PEM, and ENG are supported. If not\n" +" specified, PEM is assumed.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --krb <level>\n" +" (FTP) Enable Kerberos authentication and use. The level must be\n" +" entered and should be one of 'clear', 'safe', 'confidential', or\n" +" 'private'. Should you use a level that is not one of these,\n" +, stdout); + fputs( +" 'private' will instead be used.\n" +"\n" +" This option requires a library built with kerberos4 or GSSAPI\n" +" (GSS-Negotiate) support. This is not very common. Use -V/--ver-\n" +" sion to see if your curl supports it.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -K/--config <config file>\n" +" Specify which config file to read curl arguments from. The con-\n" +, stdout); + fputs( +" fig file is a text file in which command line arguments can be\n" +" written which then will be used as if they were written on the\n" +" actual command line. Options and their parameters must be speci-\n" +" fied on the same config file line, separated by whitespace,\n" +" colon, the equals sign or any combination thereof (however, the\n" +" preferred separator is the equals sign). If the parameter is to\n" +, stdout); + fputs( +" contain whitespace, the parameter must be enclosed within\n" +" quotes. Within double quotes, the following escape sequences are\n" +" available: \\\\, \\\", \\t, \\n, \\r and \\v. A backslash preceding any\n" +" other letter is ignored. If the first column of a config line is\n" +" a '#' character, the rest of the line will be treated as a com-\n" +" ment. Only write one option per physical line in the config\n" +" file.\n" +"\n" +, stdout); + fputs( +" Specify the filename to -K/--config as '-' to make curl read the\n" +" file from stdin.\n" +"\n" +" Note that to be able to specify a URL in the config file, you\n" +" need to specify it using the --url option, and not by simply\n" +" writing the URL on its own line. So, it could look similar to\n" +" this:\n" +"\n" +" url = \"http://curl.haxx.se/docs/\"\n" +"\n" +" Long option names can optionally be given in the config file\n" +, stdout); + fputs( +" without the initial double dashes.\n" +"\n" +" When curl is invoked, it always (unless -q is used) checks for a\n" +" default config file and uses it if found. The default config\n" +" file is checked for in the following places in this order:\n" +"\n" +" 1) curl tries to find the \"home dir\": It first checks for the\n" +" CURL_HOME and then the HOME environment variables. Failing that,\n" +, stdout); + fputs( +" it uses getpwuid() on UNIX-like systems (which returns the home\n" +" dir given the current user in your system). On Windows, it then\n" +" checks for the APPDATA variable, or as a last resort the '%USER-\n" +" PROFILE%\\Application Data'.\n" +"\n" +" 2) On windows, if there is no _curlrc file in the home dir, it\n" +" checks for one in the same dir the curl executable is placed. On\n" +, stdout); + fputs( +" UNIX-like systems, it will simply try to load .curlrc from the\n" +" determined home dir.\n" +"\n" +" # --- Example file ---\n" +" # this is a comment\n" +" url = \"curl.haxx.se\"\n" +" output = \"curlhere.html\"\n" +" user-agent = \"superagent/1.0\"\n" +"\n" +" # and fetch another URL too\n" +" url = \"curl.haxx.se/docs/manpage.html\"\n" +" -O\n" +" referer = \"http://nowhereatall.com/\"\n" +, stdout); + fputs( +" # --- End of example file ---\n" +"\n" +" This option can be used multiple times to load multiple config\n" +" files.\n" +"\n" +" --libcurl <file>\n" +" Append this option to any ordinary curl command line, and you\n" +" will get a libcurl-using source code written to the file that\n" +" does the equivalent of what your command-line operation does!\n" +"\n" +" NOTE: this does not properly support -F and the sending of mul-\n" +, stdout); + fputs( +" tipart formposts, so in those cases the output program will be\n" +" missing necessary calls to curl_formadd(3), and possibly more.\n" +"\n" +" If this option is used several times, the last given file name\n" +" will be used. (Added in 7.16.1)\n" +"\n" +" --limit-rate <speed>\n" +" Specify the maximum transfer rate you want curl to use. This\n" +" feature is useful if you have a limited pipe and you'd like your\n" +, stdout); + fputs( +" transfer not to use your entire bandwidth.\n" +"\n" +" The given speed is measured in bytes/second, unless a suffix is\n" +" appended. Appending 'k' or 'K' will count the number as kilo-\n" +" bytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it\n" +" gigabytes. Examples: 200K, 3m and 1G.\n" +"\n" +" The given rate is the average speed counted during the entire\n" +, stdout); + fputs( +" transfer. It means that curl might use higher transfer speeds in\n" +" short bursts, but over time it uses no more than the given rate.\n" +" If you also use the -Y/--speed-limit option, that option will\n" +" take precedence and might cripple the rate-limiting slightly, to\n" +" help keeping the speed-limit logic working.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -l/--list-only\n" +, stdout); + fputs( +" (FTP) When listing an FTP directory, this switch forces a name-\n" +" only view. Especially useful if you want to machine-parse the\n" +" contents of an FTP directory since the normal directory view\n" +" doesn't use a standard look or format.\n" +"\n" +" This option causes an FTP NLST command to be sent. Some FTP\n" +" servers list only files in their response to NLST; they do not\n" +, stdout); + fputs( +" include subdirectories and symbolic links.\n" +"\n" +" --local-port <num>[-num]\n" +" Set a preferred number or range of local port numbers to use for\n" +" the connection(s). Note that port numbers by nature are a\n" +" scarce resource that will be busy at times so setting this range\n" +" to something too narrow might cause unnecessary connection setup\n" +" failures. (Added in 7.15.2)\n" +"\n" +" -L/--location\n" +, stdout); + fputs( +" (HTTP/HTTPS) If the server reports that the requested page has\n" +" moved to a different location (indicated with a Location: header\n" +" and a 3XX response code), this option will make curl redo the\n" +" request on the new place. If used together with -i/--include or\n" +" -I/--head, headers from all requested pages will be shown. When\n" +" authentication is used, curl only sends its credentials to the\n" +, stdout); + fputs( +" initial host. If a redirect takes curl to a different host, it\n" +" won't be able to intercept the user+password. See also --loca-\n" +" tion-trusted on how to change this. You can limit the amount of\n" +" redirects to follow by using the --max-redirs option.\n" +"\n" +" When curl follows a redirect and the request is not a plain GET\n" +" (for example POST or PUT), it will do the following request with\n" +, stdout); + fputs( +" a GET if the HTTP response was 301, 302, or 303. If the response\n" +" code was any other 3xx code, curl will re-send the following\n" +" request using the same unmodified method.\n" +"\n" +" --location-trusted\n" +" (HTTP/HTTPS) Like -L/--location, but will allow sending the name\n" +" + password to all hosts that the site may redirect to. This may\n" +" or may not introduce a security breach if the site redirects you\n" +, stdout); + fputs( +" to a site to which you'll send your authentication info (which\n" +" is plaintext in the case of HTTP Basic authentication).\n" +"\n" +" --mail-rcpt <address>\n" +" (SMTP) Specify a single address that the given mail should get\n" +" sent to. This option can be used multiple times to specify many\n" +" recipients.\n" +"\n" +" (Added in 7.20.0)\n" +"\n" +" --mail-from <address>\n" +, stdout); + fputs( +" (SMTP) Specify a single address that the given mail should get\n" +" sent from.\n" +"\n" +" (Added in 7.20.0)\n" +"\n" +" --max-filesize <bytes>\n" +" Specify the maximum size (in bytes) of a file to download. If\n" +" the file requested is larger than this value, the transfer will\n" +" not start and curl will return with exit code 63.\n" +"\n" +" NOTE: The file size is not always known prior to download, and\n" +, stdout); + fputs( +" for such files this option has no effect even if the file trans-\n" +" fer ends up being larger than this given limit. This concerns\n" +" both FTP and HTTP transfers.\n" +"\n" +" -m/--max-time <seconds>\n" +" Maximum time in seconds that you allow the whole operation to\n" +" take. This is useful for preventing your batch jobs from hang-\n" +" ing for hours due to slow networks or links going down. See\n" +, stdout); + fputs( +" also the --connect-timeout option.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -M/--manual\n" +" Manual. Display the huge help text.\n" +"\n" +" -n/--netrc\n" +" Makes curl scan the .netrc (_netrc on Windows) file in the\n" +" user's home directory for login name and password. This is typi-\n" +" cally used for FTP on UNIX. If used with HTTP, curl will enable\n" +, stdout); + fputs( +" user authentication. See netrc(4) or ftp(1) for details on the\n" +" file format. Curl will not complain if that file doesn't have\n" +" the right permissions (it should not be either world- or group-\n" +" readable). The environment variable \"HOME\" is used to find the\n" +" home directory.\n" +"\n" +" A quick and very simple example of how to setup a .netrc to\n" +, stdout); + fputs( +" allow curl to FTP to the machine host.domain.com with user name\n" +" 'myself' and password 'secret' should look similar to:\n" +"\n" +" machine host.domain.com login myself password secret\n" +"\n" +" --netrc-optional\n" +" Very similar to --netrc, but this option makes the .netrc usage\n" +" optional and not mandatory as the --netrc option does.\n" +"\n" +" --negotiate\n" +" (HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate\n" +, stdout); + fputs( +" method was designed by Microsoft and is used in their web appli-\n" +" cations. It is primarily meant as a support for Kerberos5\n" +" authentication but may be also used along with another authenti-\n" +" cation method. For more information see IETF draft draft-brezak-\n" +" spnego-http-04.txt.\n" +"\n" +" If you want to enable Negotiate for your proxy authentication,\n" +" then use --proxy-negotiate.\n" +"\n" +, stdout); + fputs( +" This option requires a library built with GSSAPI support. This\n" +" is not very common. Use -V/--version to see if your version sup-\n" +" ports GSS-Negotiate.\n" +"\n" +" When using this option, you must also provide a fake -u/--user\n" +" option to activate the authentication code properly. Sending a\n" +" '-u :' is enough as the user name and password from the -u\n" +" option aren't actually used.\n" +"\n" +, stdout); + fputs( +" If this option is used several times, the following occurrences\n" +" make no difference.\n" +"\n" +" -N/--no-buffer\n" +" Disables the buffering of the output stream. In normal work sit-\n" +" uations, curl will use a standard buffered output stream that\n" +" will have the effect that it will output the data in chunks, not\n" +" necessarily exactly when the data arrives. Using this option\n" +" will disable that buffering.\n" +"\n" +, stdout); + fputs( +" Note that this is the negated option name documented. You can\n" +" thus use --buffer to enforce the buffering.\n" +"\n" +" --no-keepalive\n" +" Disables the use of keepalive messages on the TCP connection, as\n" +" by default curl enables them.\n" +"\n" +" Note that this is the negated option name documented. You can\n" +" thus use --keepalive to enforce keepalive.\n" +"\n" +" --no-sessionid\n" +, stdout); + fputs( +" (SSL) Disable curl's use of SSL session-ID caching. By default\n" +" all transfers are done using the cache. Note that while nothing\n" +" should ever get hurt by attempting to reuse SSL session-IDs,\n" +" there seem to be broken SSL implementations in the wild that may\n" +" require you to disable this in order for you to succeed. (Added\n" +" in 7.16.0)\n" +"\n" +" Note that this is the negated option name documented. You can\n" +, stdout); + fputs( +" thus use --sessionid to enforce session-ID caching.\n" +"\n" +" --noproxy <no-proxy-list>\n" +" Comma-separated list of hosts which do not use a proxy, if one\n" +" is specified. The only wildcard is a single * character, which\n" +" matches all hosts, and effectively disables the proxy. Each name\n" +" in this list is matched as either a domain which contains the\n" +" hostname, or the hostname itself. For example, local.com would\n" +, stdout); + fputs( +" match local.com, local.com:80, and www.local.com, but not\n" +" www.notlocal.com. (Added in 7.19.4).\n" +"\n" +" --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication\n" +" method was designed by Microsoft and is used by IIS web servers.\n" +" It is a proprietary protocol, reverse-engineered by clever peo-\n" +" ple and implemented in curl based on their efforts. This kind of\n" +, stdout); + fputs( +" behavior should not be endorsed, you should encourage everyone\n" +" who uses NTLM to switch to a public and documented authentica-\n" +" tion method instead, such as Digest.\n" +"\n" +" If you want to enable NTLM for your proxy authentication, then\n" +" use --proxy-ntlm.\n" +"\n" +" This option requires a library built with SSL support. Use\n" +" -V/--version to see if your curl supports NTLM.\n" +"\n" +, stdout); + fputs( +" If this option is used several times, the following occurrences\n" +" make no difference.\n" +"\n" +" -o/--output <file>\n" +" Write output to <file> instead of stdout. If you are using {} or\n" +" [] to fetch multiple documents, you can use '#' followed by a\n" +" number in the <file> specifier. That variable will be replaced\n" +" with the current string for the URL being fetched. Like in:\n" +"\n" +, stdout); + fputs( +" curl http://{one,two}.site.com -o \"file_#1.txt\"\n" +"\n" +" or use several variables like:\n" +"\n" +" curl http://{site,host}.host[1-5].com -o \"#1_#2\"\n" +"\n" +" You may use this option as many times as the number of URLs you\n" +" have.\n" +"\n" +" See also the --create-dirs option to create the local directo-\n" +" ries dynamically. Specifying the output as '-' (a single dash)\n" +" will force the output to be done to stdout.\n" +"\n" +, stdout); + fputs( +" -O/--remote-name\n" +" Write output to a local file named like the remote file we get.\n" +" (Only the file part of the remote file is used, the path is cut\n" +" off.)\n" +"\n" +" The remote file name to use for saving is extracted from the\n" +" given URL, nothing else.\n" +"\n" +" You may use this option as many times as the number of URLs you\n" +" have.\n" +"\n" +" --remote-name-all\n" +, stdout); + fputs( +" This option changes the default action for all given URLs to be\n" +" dealt with as if -O/--remote-name were used for each one. So if\n" +" you want to disable that for a specific URL after --remote-name-\n" +" all has been used, you must use \"-o -\" or --no-remote-name.\n" +" (Added in 7.19.0)\n" +"\n" +" --pass <phrase>\n" +" (SSL/SSH) Passphrase for the private key\n" +"\n" +, stdout); + fputs( +" If this option is used several times, the last one will be used.\n" +"\n" +" --post301\n" +" Tells curl to respect RFC 2616/10.3.2 and not convert POST\n" +" requests into GET requests when following a 301 redirection. The\n" +" non-RFC behaviour is ubiquitous in web browsers, so curl does\n" +" the conversion by default to maintain consistency. However, a\n" +" server may require a POST to remain a POST after such a redi-\n" +, stdout); + fputs( +" rection. This option is meaningful only when using -L/--location\n" +" (Added in 7.17.1)\n" +"\n" +" --post302\n" +" Tells curl to respect RFC 2616/10.3.2 and not convert POST\n" +" requests into GET requests when following a 302 redirection. The\n" +" non-RFC behaviour is ubiquitous in web browsers, so curl does\n" +" the conversion by default to maintain consistency. However, a\n" +, stdout); + fputs( +" server may require a POST to remain a POST after such a redi-\n" +" rection. This option is meaningful only when using -L/--location\n" +" (Added in 7.19.1)\n" +"\n" +" --proxy-anyauth\n" +" Tells curl to pick a suitable authentication method when commu-\n" +" nicating with the given proxy. This might cause an extra\n" +" request/response round-trip. (Added in 7.13.2)\n" +"\n" +" --proxy-basic\n" +, stdout); + fputs( +" Tells curl to use HTTP Basic authentication when communicating\n" +" with the given proxy. Use --basic for enabling HTTP Basic with a\n" +" remote host. Basic is the default authentication method curl\n" +" uses with proxies.\n" +"\n" +" --proxy-digest\n" +" Tells curl to use HTTP Digest authentication when communicating\n" +" with the given proxy. Use --digest for enabling HTTP Digest with\n" +" a remote host.\n" +"\n" +, stdout); + fputs( +" --proxy-negotiate\n" +" Tells curl to use HTTP Negotiate authentication when communicat-\n" +" ing with the given proxy. Use --negotiate for enabling HTTP\n" +" Negotiate with a remote host. (Added in 7.17.1)\n" +"\n" +" --proxy-ntlm\n" +" Tells curl to use HTTP NTLM authentication when communicating\n" +" with the given proxy. Use --ntlm for enabling NTLM with a remote\n" +" host.\n" +"\n" +" --proxy1.0 <proxyhost[:port]>\n" +, stdout); + fputs( +" Use the specified HTTP 1.0 proxy. If the port number is not\n" +" specified, it is assumed at port 1080.\n" +"\n" +" The only difference between this and the HTTP proxy option\n" +" (-x/--proxy), is that attempts to use CONNECT through the proxy\n" +" will specify an HTTP 1.0 protocol instead of the default HTTP\n" +" 1.1.\n" +"\n" +" -p/--proxytunnel\n" +" When an HTTP proxy is used (-x/--proxy), this option will cause\n" +, stdout); + fputs( +" non-HTTP protocols to attempt to tunnel through the proxy\n" +" instead of merely using it to do HTTP-like operations. The tun-\n" +" nel approach is made with the HTTP proxy CONNECT request and\n" +" requires that the proxy allows direct connect to the remote port\n" +" number curl wants to tunnel through to.\n" +"\n" +" --pubkey <key>\n" +" (SSH) Public key file name. Allows you to provide your public\n" +, stdout); + fputs( +" key in this separate file.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -P/--ftp-port <address>\n" +" (FTP) Reverses the default initiator/listener roles when con-\n" +" necting with FTP. This switch makes curl use active mode. In\n" +" practice, curl then tells the server to connect back to the\n" +" client's specified address and port, while passive mode asks the\n" +, stdout); + fputs( +" server to setup an IP address and port for it to connect to.\n" +" <address> should be one of:\n" +"\n" +" interface\n" +" i.e \"eth0\" to specify which interface's IP address you\n" +" want to use (Unix only)\n" +"\n" +" IP address\n" +" i.e \"192.168.10.1\" to specify the exact IP address\n" +"\n" +" host name\n" +" i.e \"my.host.domain\" to specify the machine\n" +"\n" +, stdout); + fputs( +" - make curl pick the same IP address that is already used\n" +" for the control connection\n" +"\n" +" If this option is used several times, the last one will be used. Dis-\n" +" able the use of PORT with --ftp-pasv. Disable the attempt to use the\n" +" EPRT command instead of PORT by using --disable-eprt. EPRT is really\n" +" PORT++.\n" +"\n" +" Starting in 7.19.5, you can append \":[start]-[end]\" to the right of the\n" +, stdout); + fputs( +" address, to tell curl what TCP port range to use. That means you spec-\n" +" ify a port range, from a lower to a higher number. A single number\n" +" works as well, but do note that it increases the risk of failure since\n" +" the port may not be available.\n" +"\n" +" -q If used as the first parameter on the command line, the curlrc\n" +" config file will not be read and used. See the -K/--config for\n" +" details on the default config file search path.\n" +"\n" +, stdout); + fputs( +" -Q/--quote <command>\n" +" (FTP/SFTP) Send an arbitrary command to the remote FTP or SFTP\n" +" server. Quote commands are sent BEFORE the transfer takes place\n" +" (just after the initial PWD command in an FTP transfer, to be\n" +" exact). To make commands take place after a successful transfer,\n" +" prefix them with a dash '-'. To make commands be sent after\n" +, stdout); + fputs( +" libcurl has changed the working directory, just before the\n" +" transfer command(s), prefix the command with a '+' (this is only\n" +" supported for FTP). You may specify any number of commands. If\n" +" the server returns failure for one of the commands, the entire\n" +" operation will be aborted. You must send syntactically correct\n" +" FTP commands as RFC959 defines to FTP servers, or one of the\n" +, stdout); + fputs( +" commands listed below to SFTP servers. This option can be used\n" +" multiple times.\n" +"\n" +" SFTP is a binary protocol. Unlike for FTP, libcurl interprets\n" +" SFTP quote commands before sending them to the server. Follow-\n" +" ing is the list of all supported SFTP quote commands:\n" +"\n" +" chgrp group file\n" +" The chgrp command sets the group ID of the file named by\n" +, stdout); + fputs( +" the file operand to the group ID specified by the group\n" +" operand. The group operand is a decimal integer group ID.\n" +"\n" +" chmod mode file\n" +" The chmod command modifies the file mode bits of the\n" +" specified file. The mode operand is an octal integer mode\n" +" number.\n" +"\n" +" chown user file\n" +" The chown command sets the owner of the file named by the\n" +, stdout); + fputs( +" file operand to the user ID specified by the user oper-\n" +" and. The user operand is a decimal integer user ID.\n" +"\n" +" ln source_file target_file\n" +" The ln and symlink commands create a symbolic link at the\n" +" target_file location pointing to the source_file loca-\n" +" tion.\n" +"\n" +" mkdir directory_name\n" +" The mkdir command creates the directory named by the\n" +, stdout); + fputs( +" directory_name operand.\n" +"\n" +" pwd The pwd command returns the absolute pathname of the cur-\n" +" rent working directory.\n" +"\n" +" rename source target\n" +" The rename command renames the file or directory named by\n" +" the source operand to the destination path named by the\n" +" target operand.\n" +"\n" +" rm file\n" +, stdout); + fputs( +" The rm command removes the file specified by the file op-\n" +" erand.\n" +"\n" +" rmdir directory\n" +" The rmdir command removes the directory entry specified\n" +" by the directory operand, provided it is empty.\n" +"\n" +" symlink source_file target_file\n" +" See ln.\n" +"\n" +" --random-file <file>\n" +" (SSL) Specify the path name to file containing what will be con-\n" +, stdout); + fputs( +" sidered as random data. The data is used to seed the random\n" +" engine for SSL connections. See also the --egd-file option.\n" +"\n" +" -r/--range <range>\n" +" (HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial docu-\n" +" ment) from a HTTP/1.1, FTP or SFTP server or a local FILE.\n" +" Ranges can be specified in a number of ways.\n" +"\n" +" 0-499 specifies the first 500 bytes\n" +"\n" +, stdout); + fputs( +" 500-999 specifies the second 500 bytes\n" +"\n" +" -500 specifies the last 500 bytes\n" +"\n" +" 9500- specifies the bytes from offset 9500 and forward\n" +"\n" +" 0-0,-1 specifies the first and last byte only(*)(H)\n" +"\n" +" 500-700,600-799\n" +" specifies 300 bytes from offset 500(H)\n" +"\n" +" 100-199,500-599\n" +" specifies two separate 100-byte ranges(*)(H)\n" +"\n" +, stdout); + fputs( +" (*) = NOTE that this will cause the server to reply with a multipart\n" +" response!\n" +"\n" +" Only digit characters (0-9) are valid in the 'start' and 'stop' fields\n" +" of the 'start-stop' range syntax. If a non-digit character is given in\n" +" the range, the server's response will be unspecified, depending on the\n" +" server's configuration.\n" +"\n" +" You should also be aware that many HTTP/1.1 servers do not have this\n" +, stdout); + fputs( +" feature enabled, so that when you attempt to get a range, you'll\n" +" instead get the whole document.\n" +"\n" +" FTP and SFTP range downloads only support the simple 'start-stop' syn-\n" +" tax (optionally with one of the numbers omitted). FTP use depends on\n" +" the extended FTP command SIZE.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --raw When used, it disables all internal HTTP decoding of content or\n" +, stdout); + fputs( +" transfer encodings and instead makes them passed on unaltered,\n" +" raw. (Added in 7.16.2)\n" +"\n" +" -R/--remote-time\n" +" When used, this will make libcurl attempt to figure out the\n" +" timestamp of the remote file, and if that is available make the\n" +" local file get that same timestamp.\n" +"\n" +" --retry <num>\n" +" If a transient error is returned when curl tries to perform a\n" +, stdout); + fputs( +" transfer, it will retry this number of times before giving up.\n" +" Setting the number to 0 makes curl do no retries (which is the\n" +" default). Transient error means either: a timeout, an FTP 4xx\n" +" response code or an HTTP 5xx response code.\n" +"\n" +" When curl is about to retry a transfer, it will first wait one\n" +" second and then for all forthcoming retries it will double the\n" +, stdout); + fputs( +" waiting time until it reaches 10 minutes which then will be the\n" +" delay between the rest of the retries. By using --retry-delay\n" +" you disable this exponential backoff algorithm. See also\n" +" --retry-max-time to limit the total time allowed for retries.\n" +" (Added in 7.12.3)\n" +"\n" +" If this option is used multiple times, the last occurrence\n" +" decide the amount.\n" +"\n" +" --retry-delay <seconds>\n" +, stdout); + fputs( +" Make curl sleep this amount of time before each retry when a\n" +" transfer has failed with a transient error (it changes the\n" +" default backoff time algorithm between retries). This option is\n" +" only interesting if --retry is also used. Setting this delay to\n" +" zero will make curl use the default backoff time. (Added in\n" +" 7.12.3)\n" +"\n" +" If this option is used multiple times, the last occurrence\n" +, stdout); + fputs( +" determines the amount.\n" +"\n" +" --retry-max-time <seconds>\n" +" The retry timer is reset before the first transfer attempt.\n" +" Retries will be done as usual (see --retry) as long as the timer\n" +" hasn't reached this given limit. Notice that if the timer hasn't\n" +" reached the limit, the request will be made and while perform-\n" +" ing, it may take longer than this given time period. To limit a\n" +, stdout); + fputs( +" single request's maximum time, use -m/--max-time. Set this\n" +" option to zero to not timeout retries. (Added in 7.12.3)\n" +"\n" +" If this option is used multiple times, the last occurrence\n" +" determines the amount.\n" +"\n" +" -s/--silent\n" +" Silent or quiet mode. Don't show progress meter or error mes-\n" +" sages. Makes Curl mute.\n" +"\n" +" -S/--show-error\n" +, stdout); + fputs( +" When used with -s it makes curl show an error message if it\n" +" fails.\n" +"\n" +" --socks4 <host[:port]>\n" +" Use the specified SOCKS4 proxy. If the port number is not speci-\n" +" fied, it is assumed at port 1080. (Added in 7.15.2)\n" +"\n" +" This option overrides any previous use of -x/--proxy, as they\n" +" are mutually exclusive.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +, stdout); + fputs( +" --socks4a <host[:port]>\n" +" Use the specified SOCKS4a proxy. If the port number is not spec-\n" +" ified, it is assumed at port 1080. (Added in 7.18.0)\n" +"\n" +" This option overrides any previous use of -x/--proxy, as they\n" +" are mutually exclusive.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --socks5-hostname <host[:port]>\n" +" Use the specified SOCKS5 proxy (and let the proxy resolve the\n" +, stdout); + fputs( +" host name). If the port number is not specified, it is assumed\n" +" at port 1080. (Added in 7.18.0)\n" +"\n" +" This option overrides any previous use of -x/--proxy, as they\n" +" are mutually exclusive.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +" (This option was previously wrongly documented and used as\n" +" --socks without the number appended.)\n" +"\n" +" --socks5 <host[:port]>\n" +, stdout); + fputs( +" Use the specified SOCKS5 proxy - but resolve the host name\n" +" locally. If the port number is not specified, it is assumed at\n" +" port 1080.\n" +"\n" +" This option overrides any previous use of -x/--proxy, as they\n" +" are mutually exclusive.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +" (This option was previously wrongly documented and used as\n" +, stdout); + fputs( +" --socks without the number appended.)\n" +"\n" +" This option (as well as --socks4) does not work with IPV6, FTPS\n" +" or LDAP.\n" +"\n" +" --socks5-gssapi-service <servicename>\n" +" The default service name for a socks server is rcmd/server-fqdn.\n" +" This option allows you to change it.\n" +"\n" +" Examples:\n" +" --socks5 proxy-name --socks5-gssapi-service sockd would use\n" +" sockd/proxy-name\n" +, stdout); + fputs( +" --socks5 proxy-name --socks5-gssapi-service sockd/real-name\n" +" would use sockd/real-name for cases where the proxy-name does\n" +" not match the princpal name.\n" +" (Added in 7.19.4).\n" +"\n" +" --socks5-gssapi-nec\n" +" As part of the gssapi negotiation a protection mode is negoti-\n" +" ated. The rfc1961 says in section 4.3/4.4 it should be pro-\n" +" tected, but the NEC reference implementation does not. The\n" +, stdout); + fputs( +" option --socks5-gssapi-nec allows the unprotected exchange of\n" +" the protection mode negotiation. (Added in 7.19.4).\n" +"\n" +" --stderr <file>\n" +" Redirect all writes to stderr to the specified file instead. If\n" +" the file name is a plain '-', it is instead written to stdout.\n" +" This option has no point when you're using a shell with decent\n" +" redirecting capabilities.\n" +"\n" +, stdout); + fputs( +" If this option is used several times, the last one will be used.\n" +"\n" +" --tcp-nodelay\n" +" Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man\n" +" page for details about this option. (Added in 7.11.2)\n" +"\n" +" -t/--telnet-option <OPT=val>\n" +" Pass options to the telnet protocol. Supported options are:\n" +"\n" +" TTYPE=<term> Sets the terminal type.\n" +"\n" +" XDISPLOC=<X display> Sets the X display location.\n" +"\n" +, stdout); + fputs( +" NEW_ENV=<var,val> Sets an environment variable.\n" +"\n" +" --tftp-blksize <value>\n" +" (TFTP) Set TFTP BLKSIZE option (must be >512). This is the block\n" +" size that curl will try to use when tranferring data to or from\n" +" a TFTP server. By default 512 bytes will be used.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" (Added in 7.20.0)\n" +"\n" +" -T/--upload-file <file>\n" +, stdout); + fputs( +" This transfers the specified local file to the remote URL. If\n" +" there is no file part in the specified URL, Curl will append the\n" +" local file name. NOTE that you must use a trailing / on the last\n" +" directory to really prove to Curl that there is no file name or\n" +" curl will think that your last directory name is the remote file\n" +" name to use. That will most likely cause the upload operation to\n" +, stdout); + fputs( +" fail. If this is used on a HTTP(S) server, the PUT command will\n" +" be used.\n" +"\n" +" Use the file name \"-\" (a single dash) to use stdin instead of a\n" +" given file. Alternately, the file name \".\" (a single period)\n" +" may be specified instead of \"-\" to use stdin in non-blocking\n" +" mode to allow reading server output while stdin is being\n" +" uploaded.\n" +"\n" +, stdout); + fputs( +" You can specify one -T for each URL on the command line. Each -T\n" +" + URL pair specifies what to upload and to where. curl also sup-\n" +" ports \"globbing\" of the -T argument, meaning that you can upload\n" +" multiple files to a single URL by using the same URL globbing\n" +" style supported in the URL, like this:\n" +"\n" +" curl -T \"{file1,file2}\" http://www.uploadtothissite.com\n" +"\n" +" or even\n" +"\n" +, stdout); + fputs( +" curl -T \"img[1-1000].png\" ftp://ftp.picturemania.com/upload/\n" +"\n" +" --trace <file>\n" +" Enables a full trace dump of all incoming and outgoing data,\n" +" including descriptive information, to the given output file. Use\n" +" \"-\" as filename to have the output sent to stdout.\n" +"\n" +" This option overrides previous uses of -v/--verbose or --trace-\n" +" ascii.\n" +"\n" +, stdout); + fputs( +" If this option is used several times, the last one will be used.\n" +"\n" +" --trace-ascii <file>\n" +" Enables a full trace dump of all incoming and outgoing data,\n" +" including descriptive information, to the given output file. Use\n" +" \"-\" as filename to have the output sent to stdout.\n" +"\n" +" This is very similar to --trace, but leaves out the hex part and\n" +" only shows the ASCII part of the dump. It makes smaller output\n" +, stdout); + fputs( +" that might be easier to read for untrained humans.\n" +"\n" +" This option overrides previous uses of -v/--verbose or --trace.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --trace-time\n" +" Prepends a time stamp to each trace or verbose line that curl\n" +" displays. (Added in 7.14.0)\n" +"\n" +" -u/--user <user:password>\n" +" Specify the user name and password to use for server authentica-\n" +, stdout); + fputs( +" tion. Overrides -n/--netrc and --netrc-optional.\n" +"\n" +" If you just give the user name (without entering a colon) curl\n" +" will prompt for a password.\n" +"\n" +" If you use an SSPI-enabled curl binary and do NTLM authentica-\n" +" tion, you can force curl to pick up the user name and password\n" +" from your environment by simply specifying a single colon with\n" +" this option: \"-u :\".\n" +"\n" +, stdout); + fputs( +" If this option is used several times, the last one will be used.\n" +"\n" +" -U/--proxy-user <user:password>\n" +" Specify the user name and password to use for proxy authentica-\n" +" tion.\n" +"\n" +" If you use an SSPI-enabled curl binary and do NTLM authentica-\n" +" tion, you can force curl to pick up the user name and password\n" +" from your environment by simply specifying a single colon with\n" +" this option: \"-U :\".\n" +"\n" +, stdout); + fputs( +" If this option is used several times, the last one will be used.\n" +"\n" +" --url <URL>\n" +" Specify a URL to fetch. This option is mostly handy when you\n" +" want to specify URL(s) in a config file.\n" +"\n" +" This option may be used any number of times. To control where\n" +" this URL is written, use the -o/--output or the -O/--remote-name\n" +" options.\n" +"\n" +" -v/--verbose\n" +, stdout); + fputs( +" Makes the fetching more verbose/talkative. Mostly useful for\n" +" debugging. A line starting with '>' means \"header data\" sent by\n" +" curl, '<' means \"header data\" received by curl that is hidden in\n" +" normal cases, and a line starting with '*' means additional info\n" +" provided by curl.\n" +"\n" +" Note that if you only want HTTP headers in the output,\n" +" -i/--include might be the option you're looking for.\n" +"\n" +, stdout); + fputs( +" If you think this option still doesn't give you enough details,\n" +" consider using --trace or --trace-ascii instead.\n" +"\n" +" This option overrides previous uses of --trace-ascii or --trace.\n" +"\n" +" Use -S/--silent to make curl quiet.\n" +"\n" +" -V/--version\n" +" Displays information about curl and the libcurl version it uses.\n" +" The first line includes the full version of curl, libcurl and\n" +, stdout); + fputs( +" other 3rd party libraries linked with the executable.\n" +"\n" +" The second line (starts with \"Protocols:\") shows all protocols\n" +" that libcurl reports to support.\n" +"\n" +" The third line (starts with \"Features:\") shows specific features\n" +" libcurl reports to offer. Available features include:\n" +"\n" +" IPv6 You can use IPv6 with this.\n" +"\n" +" krb4 Krb4 for FTP is supported.\n" +"\n" +" SSL HTTPS and FTPS are supported.\n" +"\n" +, stdout); + fputs( +" libz Automatic decompression of compressed files over HTTP is\n" +" supported.\n" +"\n" +" NTLM NTLM authentication is supported.\n" +"\n" +" GSS-Negotiate\n" +" Negotiate authentication and krb5 for FTP is supported.\n" +"\n" +" Debug This curl uses a libcurl built with Debug. This enables\n" +" more error-tracking and memory debugging etc. For curl-\n" +" developers only!\n" +"\n" +" AsynchDNS\n" +, stdout); + fputs( +" This curl uses asynchronous name resolves.\n" +"\n" +" SPNEGO SPNEGO Negotiate authentication is supported.\n" +"\n" +" Largefile\n" +" This curl supports transfers of large files, files larger\n" +" than 2GB.\n" +"\n" +" IDN This curl supports IDN - international domain names.\n" +"\n" +" SSPI SSPI is supported. If you use NTLM and set a blank user\n" +, stdout); + fputs( +" name, curl will authenticate with your current user and\n" +" password.\n" +"\n" +" -w/--write-out <format>\n" +" Defines what to display on stdout after a completed and success-\n" +" ful operation. The format is a string that may contain plain\n" +" text mixed with any number of variables. The string can be spec-\n" +" ified as \"string\", to get read from a particular file you spec-\n" +, stdout); + fputs( +" ify it \"@filename\" and to tell curl to read the format from\n" +" stdin you write \"@-\".\n" +"\n" +" The variables present in the output format will be substituted\n" +" by the value or text that curl thinks fit, as described below.\n" +" All variables are specified as %{variable_name} and to output a\n" +" normal % you just write them as %%. You can output a newline by\n" +, stdout); + fputs( +" using \\n, a carriage return with \\r and a tab space with \\t.\n" +"\n" +" NOTE: The %-symbol is a special symbol in the win32-environment,\n" +" where all occurrences of % must be doubled when using this\n" +" option.\n" +"\n" +" The variables available at this point are:\n" +"\n" +" url_effective The URL that was fetched last. This is most mean-\n" +" ingful if you've told curl to follow location:\n" +, stdout); + fputs( +" headers.\n" +"\n" +" http_code The numerical response code that was found in the\n" +" last retrieved HTTP(S) or FTP(s) transfer. In\n" +" 7.18.2 the alias response_code was added to show\n" +" the same info.\n" +"\n" +" http_connect The numerical code that was found in the last\n" +" response (from a proxy) to a curl CONNECT\n" +, stdout); + fputs( +" request. (Added in 7.12.4)\n" +"\n" +" time_total The total time, in seconds, that the full opera-\n" +" tion lasted. The time will be displayed with mil-\n" +" lisecond resolution.\n" +"\n" +" time_namelookup\n" +" The time, in seconds, it took from the start\n" +" until the name resolving was completed.\n" +"\n" +, stdout); + fputs( +" time_connect The time, in seconds, it took from the start\n" +" until the TCP connect to the remote host (or\n" +" proxy) was completed.\n" +"\n" +" time_appconnect\n" +" The time, in seconds, it took from the start\n" +" until the SSL/SSH/etc connect/handshake to the\n" +" remote host was completed. (Added in 7.19.0)\n" +"\n" +, stdout); + fputs( +" time_pretransfer\n" +" The time, in seconds, it took from the start\n" +" until the file transfer was just about to begin.\n" +" This includes all pre-transfer commands and nego-\n" +" tiations that are specific to the particular pro-\n" +" tocol(s) involved.\n" +"\n" +" time_redirect The time, in seconds, it took for all redirection\n" +, stdout); + fputs( +" steps include name lookup, connect, pretransfer\n" +" and transfer before the final transaction was\n" +" started. time_redirect shows the complete execu-\n" +" tion time for multiple redirections. (Added in\n" +" 7.12.3)\n" +"\n" +" time_starttransfer\n" +" The time, in seconds, it took from the start\n" +, stdout); + fputs( +" until the first byte was just about to be trans-\n" +" ferred. This includes time_pretransfer and also\n" +" the time the server needed to calculate the\n" +" result.\n" +"\n" +" size_download The total amount of bytes that were downloaded.\n" +"\n" +" size_upload The total amount of bytes that were uploaded.\n" +"\n" +, stdout); + fputs( +" size_header The total amount of bytes of the downloaded head-\n" +" ers.\n" +"\n" +" size_request The total amount of bytes that were sent in the\n" +" HTTP request.\n" +"\n" +" speed_download The average download speed that curl measured for\n" +" the complete download. Bytes per second.\n" +"\n" +" speed_upload The average upload speed that curl measured for\n" +, stdout); + fputs( +" the complete upload. Bytes per second.\n" +"\n" +" content_type The Content-Type of the requested document, if\n" +" there was any.\n" +"\n" +" num_connects Number of new connects made in the recent trans-\n" +" fer. (Added in 7.12.3)\n" +"\n" +" num_redirects Number of redirects that were followed in the\n" +" request. (Added in 7.12.3)\n" +"\n" +, stdout); + fputs( +" redirect_url When a HTTP request was made without -L to follow\n" +" redirects, this variable will show the actual URL\n" +" a redirect would take you to. (Added in 7.18.2)\n" +"\n" +" ftp_entry_path The initial path libcurl ended up in when logging\n" +" on to the remote FTP server. (Added in 7.15.4)\n" +"\n" +" ssl_verify_result\n" +, stdout); + fputs( +" The result of the SSL peer certificate verifica-\n" +" tion that was requested. 0 means the verification\n" +" was successful. (Added in 7.19.0)\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -x/--proxy <proxyhost[:port]>\n" +" Use the specified HTTP proxy. If the port number is not speci-\n" +" fied, it is assumed at port 1080.\n" +"\n" +, stdout); + fputs( +" This option overrides existing environment variables that set\n" +" the proxy to use. If there's an environment variable setting a\n" +" proxy, you can set proxy to \"\" to override it.\n" +"\n" +" Note that all operations that are performed over a HTTP proxy\n" +" will transparently be converted to HTTP. It means that certain\n" +" protocol specific operations might not be available. This is not\n" +, stdout); + fputs( +" the case if you can tunnel through the proxy, as done with the\n" +" -p/--proxytunnel option.\n" +"\n" +" Starting with 7.14.1, the proxy host can be specified the exact\n" +" same way as the proxy environment variables, including the pro-\n" +" tocol prefix (http://) and the embedded user + password.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -X/--request <command>\n" +, stdout); + fputs( +" (HTTP) Specifies a custom request method to use when communicat-\n" +" ing with the HTTP server. The specified request will be used\n" +" instead of the method otherwise used (which defaults to GET).\n" +" Read the HTTP 1.1 specification for details and explanations.\n" +" Common additional HTTP requests include PUT and DELETE, but\n" +" related technologies like WebDAV offers PROPFIND, COPY, MOVE and\n" +" more.\n" +"\n" +, stdout); + fputs( +" (FTP) Specifies a custom FTP command to use instead of LIST when\n" +" doing file lists with FTP.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -y/--speed-time <time>\n" +" If a download is slower than speed-limit bytes per second during\n" +" a speed-time period, the download gets aborted. If speed-time is\n" +" used, the default speed-limit will be 1 unless set with -Y.\n" +"\n" +, stdout); + fputs( +" This option controls transfers and thus will not affect slow\n" +" connects etc. If this is a concern for you, try the --connect-\n" +" timeout option.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -Y/--speed-limit <speed>\n" +" If a download is slower than this given speed (in bytes per sec-\n" +" ond) for speed-time seconds it gets aborted. speed-time is set\n" +, stdout); + fputs( +" with -y and is 30 if not set.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -z/--time-cond <date expression>\n" +" (HTTP/FTP) Request a file that has been modified later than the\n" +" given time and date, or one that has been modified before that\n" +" time. The date expression can be all sorts of date strings or if\n" +" it doesn't match any internal ones, it tries to get the time\n" +, stdout); + fputs( +" from a given file name instead! See the curl_getdate(3) man\n" +" pages for date expression details.\n" +"\n" +" Start the date expression with a dash (-) to make it request for\n" +" a document that is older than the given date/time, default is a\n" +" document that is newer than the specified date/time.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" --max-redirs <num>\n" +, stdout); + fputs( +" Set maximum number of redirection-followings allowed. If\n" +" -L/--location is used, this option can be used to prevent curl\n" +" from following redirections \"in absurdum\". By default, the limit\n" +" is set to 50 redirections. Set this option to -1 to make it lim-\n" +" itless.\n" +"\n" +" If this option is used several times, the last one will be used.\n" +"\n" +" -0/--http1.0\n" +, stdout); + fputs( +" (HTTP) Forces curl to issue its requests using HTTP 1.0 instead\n" +" of using its internally preferred: HTTP 1.1.\n" +"\n" +" -1/--tlsv1\n" +" (SSL) Forces curl to use TLS version 1 when negotiating with a\n" +" remote TLS server.\n" +"\n" +" -2/--sslv2\n" +" (SSL) Forces curl to use SSL version 2 when negotiating with a\n" +" remote SSL server.\n" +"\n" +" -3/--sslv3\n" +" (SSL) Forces curl to use SSL version 3 when negotiating with a\n" +, stdout); + fputs( +" remote SSL server.\n" +"\n" +" -4/--ipv4\n" +" If libcurl is capable of resolving an address to multiple IP\n" +" versions (which it is if it is IPv6-capable), this option tells\n" +" libcurl to resolve names to IPv4 addresses only.\n" +"\n" +" -6/--ipv6\n" +" If libcurl is capable of resolving an address to multiple IP\n" +" versions (which it is if it is IPv6-capable), this option tells\n" +, stdout); + fputs( +" libcurl to resolve names to IPv6 addresses only.\n" +"\n" +" -#/--progress-bar\n" +" Make curl display progress information as a progress bar instead\n" +" of the default statistics.\n" +"\n" +"FILES\n" +" ~/.curlrc\n" +" Default config file, see -K/--config for details.\n" +"\n" +"ENVIRONMENT\n" +" The environment variables can be specified in lower case or upper case.\n" +" The lower case version has precedence. http_proxy is an exception as it\n" +, stdout); + fputs( +" is only available in lower case.\n" +"\n" +" http_proxy [protocol://]<host>[:port]\n" +" Sets the proxy server to use for HTTP.\n" +" HTTPS_PROXY [protocol://]<host>[:port]\n" +" Sets the proxy server to use for HTTPS.\n" +"\n" +" FTP_PROXY [protocol://]<host>[:port]\n" +" Sets the proxy server to use for FTP.\n" +"\n" +" ALL_PROXY [protocol://]<host>[:port]\n" +" Sets the proxy server to use if no protocol-specific proxy is\n" +" set.\n" +"\n" +, stdout); + fputs( +" NO_PROXY <comma-separated list of hosts>\n" +" list of host names that shouldn't go through any proxy. If set\n" +" to a asterisk '*' only, it matches all hosts.\n" +"\n" +"EXIT CODES\n" +" There are a bunch of different error codes and their corresponding\n" +" error messages that may appear during bad conditions. At the time of\n" +" this writing, the exit codes are:\n" +"\n" +" 1 Unsupported protocol. This build of curl has no support for this\n" +, stdout); + fputs( +" protocol.\n" +"\n" +" 2 Failed to initialize.\n" +"\n" +" 3 URL malformed. The syntax was not correct.\n" +"\n" +" 5 Couldn't resolve proxy. The given proxy host could not be\n" +" resolved.\n" +"\n" +" 6 Couldn't resolve host. The given remote host was not resolved.\n" +"\n" +" 7 Failed to connect to host.\n" +"\n" +" 8 FTP weird server reply. The server sent data curl couldn't\n" +" parse.\n" +"\n" +, stdout); + fputs( +" 9 FTP access denied. The server denied login or denied access to\n" +" the particular resource or directory you wanted to reach. Most\n" +" often you tried to change to a directory that doesn't exist on\n" +" the server.\n" +"\n" +" 11 FTP weird PASS reply. Curl couldn't parse the reply sent to the\n" +" PASS request.\n" +"\n" +" 13 FTP weird PASV reply, Curl couldn't parse the reply sent to the\n" +" PASV request.\n" +"\n" +, stdout); + fputs( +" 14 FTP weird 227 format. Curl couldn't parse the 227-line the\n" +" server sent.\n" +"\n" +" 15 FTP can't get host. Couldn't resolve the host IP we got in the\n" +" 227-line.\n" +"\n" +" 17 FTP couldn't set binary. Couldn't change transfer method to\n" +" binary.\n" +"\n" +" 18 Partial file. Only a part of the file was transferred.\n" +"\n" +" 19 FTP couldn't download/access the given file, the RETR (or simi-\n" +" lar) command failed.\n" +"\n" +, stdout); + fputs( +" 21 FTP quote error. A quote command returned error from the server.\n" +" 22 HTTP page not retrieved. The requested url was not found or\n" +" returned another error with the HTTP error code being 400 or\n" +" above. This return code only appears if -f/--fail is used.\n" +"\n" +" 23 Write error. Curl couldn't write data to a local filesystem or\n" +" similar.\n" +"\n" +" 25 FTP couldn't STOR file. The server denied the STOR operation,\n" +, stdout); + fputs( +" used for FTP uploading.\n" +"\n" +" 26 Read error. Various reading problems.\n" +"\n" +" 27 Out of memory. A memory allocation request failed.\n" +"\n" +" 28 Operation timeout. The specified time-out period was reached\n" +" according to the conditions.\n" +"\n" +" 30 FTP PORT failed. The PORT command failed. Not all FTP servers\n" +" support the PORT command, try doing a transfer using PASV\n" +" instead!\n" +"\n" +, stdout); + fputs( +" 31 FTP couldn't use REST. The REST command failed. This command is\n" +" used for resumed FTP transfers.\n" +"\n" +" 33 HTTP range error. The range \"command\" didn't work.\n" +"\n" +" 34 HTTP post error. Internal post-request generation error.\n" +"\n" +" 35 SSL connect error. The SSL handshaking failed.\n" +"\n" +" 36 FTP bad download resume. Couldn't continue an earlier aborted\n" +" download.\n" +"\n" +, stdout); + fputs( +" 37 FILE couldn't read file. Failed to open the file. Permissions?\n" +"\n" +" 38 LDAP cannot bind. LDAP bind operation failed.\n" +"\n" +" 39 LDAP search failed.\n" +"\n" +" 41 Function not found. A required LDAP function was not found.\n" +"\n" +" 42 Aborted by callback. An application told curl to abort the oper-\n" +" ation.\n" +"\n" +" 43 Internal error. A function was called with a bad parameter.\n" +"\n" +, stdout); + fputs( +" 45 Interface error. A specified outgoing interface could not be\n" +" used.\n" +"\n" +" 47 Too many redirects. When following redirects, curl hit the maxi-\n" +" mum amount.\n" +"\n" +" 48 Unknown TELNET option specified.\n" +"\n" +" 49 Malformed telnet option.\n" +"\n" +" 51 The peer's SSL certificate or SSH MD5 fingerprint was not ok.\n" +"\n" +" 52 The server didn't reply anything, which here is considered an\n" +" error.\n" +"\n" +, stdout); + fputs( +" 53 SSL crypto engine not found.\n" +"\n" +" 54 Cannot set SSL crypto engine as default.\n" +"\n" +" 55 Failed sending network data.\n" +"\n" +" 56 Failure in receiving network data.\n" +"\n" +" 58 Problem with the local certificate.\n" +"\n" +" 59 Couldn't use specified SSL cipher.\n" +"\n" +" 60 Peer certificate cannot be authenticated with known CA certifi-\n" +" cates.\n" +"\n" +" 61 Unrecognized transfer encoding.\n" +"\n" +" 62 Invalid LDAP URL.\n" +"\n" +, stdout); + fputs( +" 63 Maximum file size exceeded.\n" +"\n" +" 64 Requested FTP SSL level failed.\n" +"\n" +" 65 Sending the data requires a rewind that failed.\n" +"\n" +" 66 Failed to initialise SSL Engine.\n" +"\n" +" 67 The user name, password, or similar was not accepted and curl\n" +" failed to log in.\n" +"\n" +" 68 File not found on TFTP server.\n" +"\n" +" 69 Permission problem on TFTP server.\n" +"\n" +" 70 Out of disk space on TFTP server.\n" +"\n" +" 71 Illegal TFTP operation.\n" +"\n" +, stdout); + fputs( +" 72 Unknown TFTP transfer ID.\n" +"\n" +" 73 File already exists (TFTP).\n" +"\n" +" 74 No such user (TFTP).\n" +"\n" +" 75 Character conversion failed.\n" +"\n" +" 76 Character conversion functions required.\n" +"\n" +" 77 Problem with reading the SSL CA cert (path? access rights?).\n" +"\n" +" 78 The resource referenced in the URL does not exist.\n" +"\n" +" 79 An unspecified error occurred during the SSH session.\n" +"\n" +" 80 Failed to shut down the SSL connection.\n" +"\n" +, stdout); + fputs( +" 82 Could not load CRL file, missing or wrong format (added in\n" +" 7.19.0).\n" +"\n" +" 83 Issuer check failed (added in 7.19.0).\n" +"\n" +" XX More error codes will appear here in future releases. The exist-\n" +" ing ones are meant to never change.\n" +"\n" +"AUTHORS / CONTRIBUTORS\n" +" Daniel Stenberg is the main author, but the whole list of contributors\n" +" is found in the separate THANKS file.\n" +"\n" +"WWW\n" +" http://curl.haxx.se\n" +"\n" +"FTP\n" +, stdout); + fputs( +" ftp://ftp.sunet.se/pub/www/utilities/curl/\n" +"\n" +"SEE ALSO\n" +" ftp(1), wget(1)\n" +"\n" +"LATEST VERSION\n" +"\n" +" You always find news about what's going on as well as the latest versions\n" +" from the curl web pages, located at:\n" +"\n" +" http://curl.haxx.se\n" +"\n" +"SIMPLE USAGE\n" +"\n" +" Get the main page from Netscape's web-server:\n" +"\n" +" curl http://www.netscape.com/\n" +"\n" +" Get the README file the user's home directory at funet's ftp-server:\n" +"\n" +" curl ftp://ftp.funet.fi/README\n" +"\n" +, stdout); + fputs( +" Get a web page from a server using port 8000:\n" +"\n" +" curl http://www.weirdserver.com:8000/\n" +"\n" +" Get a list of a directory of an FTP site:\n" +"\n" +" curl ftp://cool.haxx.se/\n" +"\n" +" Get the definition of curl from a dictionary:\n" +"\n" +" curl dict://dict.org/m:curl\n" +"\n" +" Fetch two documents at once:\n" +"\n" +" curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/\n" +"\n" +" Get a file off an FTPS server:\n" +"\n" +" curl ftps://files.are.secure.com/secrets.txt\n" +"\n" +, stdout); + fputs( +" or use the more appropriate FTPS way to get the same file:\n" +"\n" +" curl --ftp-ssl ftp://files.are.secure.com/secrets.txt\n" +"\n" +" Get a file from an SSH server using SFTP:\n" +"\n" +" curl -u username sftp://shell.example.com/etc/issue\n" +"\n" +" Get a file from an SSH server using SCP using a private key to authenticate:\n" +"\n" +" curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \\\n" +" scp://shell.example.com/~/personal.txt\n" +"\n" +" Get the main page from an IPv6 web server:\n" +"\n" +, stdout); + fputs( +" curl -g \"http://[2001:1890:1112:1::20]/\"\n" +"\n" +"DOWNLOAD TO A FILE\n" +"\n" +" Get a web page and store in a local file:\n" +"\n" +" curl -o thatpage.html http://www.netscape.com/\n" +"\n" +" Get a web page and store in a local file, make the local file get the name\n" +" of the remote document (if no file name part is specified in the URL, this\n" +" will fail):\n" +"\n" +" curl -O http://www.netscape.com/index.html\n" +"\n" +" Fetch two files and store them with their remote names:\n" +"\n" +, stdout); + fputs( +" curl -O www.haxx.se/index.html -O curl.haxx.se/download.html\n" +"\n" +"USING PASSWORDS\n" +"\n" +" FTP\n" +"\n" +" To ftp files using name+passwd, include them in the URL like:\n" +"\n" +" curl ftp://name:passwd@machine.domain:port/full/path/to/file\n" +"\n" +" or specify them with the -u flag like\n" +"\n" +" curl -u name:passwd ftp://machine.domain:port/full/path/to/file\n" +"\n" +" FTPS\n" +"\n" +" It is just like for FTP, but you may also want to specify and use\n" +" SSL-specific options for certificates etc.\n" +"\n" +, stdout); + fputs( +" Note that using FTPS:// as prefix is the \"implicit\" way as described in the\n" +" standards while the recommended \"explicit\" way is done by using FTP:// and\n" +" the --ftp-ssl option.\n" +"\n" +" SFTP / SCP\n" +"\n" +" This is similar to FTP, but you can specify a private key to use instead of\n" +" a password. Note that the private key may itself be protected by a password\n" +" that is unrelated to the login password of the remote system. If you\n" +" provide a private key file you must also provide a public key file.\n" +, stdout); + fputs( +"\n" +" HTTP\n" +"\n" +" Curl also supports user and password in HTTP URLs, thus you can pick a file\n" +" like:\n" +"\n" +" curl http://name:passwd@machine.domain/full/path/to/file\n" +"\n" +" or specify user and password separately like in\n" +"\n" +" curl -u name:passwd http://machine.domain/full/path/to/file\n" +"\n" +" HTTP offers many different methods of authentication and curl supports\n" +" several: Basic, Digest, NTLM and Negotiate. Without telling which method to\n" +, stdout); + fputs( +" use, curl defaults to Basic. You can also ask curl to pick the most secure\n" +" ones out of the ones that the server accepts for the given URL, by using\n" +" --anyauth.\n" +"\n" +" NOTE! Since HTTP URLs don't support user and password, you can't use that\n" +" style when using Curl via a proxy. You _must_ use the -u style fetch\n" +" during such circumstances.\n" +"\n" +" HTTPS\n" +"\n" +" Probably most commonly used with private certificates, as explained below.\n" +"\n" +"PROXY\n" +"\n" +, stdout); + fputs( +" Get an ftp file using a proxy named my-proxy that uses port 888:\n" +"\n" +" curl -x my-proxy:888 ftp://ftp.leachsite.com/README\n" +"\n" +" Get a file from a HTTP server that requires user and password, using the\n" +" same proxy as above:\n" +"\n" +" curl -u user:passwd -x my-proxy:888 http://www.get.this/\n" +"\n" +" Some proxies require special authentication. Specify by using -U as above:\n" +"\n" +" curl -U user:passwd -x my-proxy:888 http://www.get.this/\n" +"\n" +, stdout); + fputs( +" A comma-separated list of hosts and domains which do not use the proxy can\n" +" be specified as:\n" +"\n" +" curl --noproxy localhost,get.this -x my-proxy:888 http://www.get.this/\n" +"\n" +" If the proxy is specified with --proxy1.0 instead of --proxy or -x, then\n" +" curl will use HTTP/1.0 instead of HTTP/1.1 for any CONNECT attempts.\n" +"\n" +" curl also supports SOCKS4 and SOCKS5 proxies with --socks4 and --socks5.\n" +"\n" +" See also the environment variables Curl support that offer further proxy\n" +" control.\n" +"\n" +"RANGES\n" +"\n" +, stdout); + fputs( +" With HTTP 1.1 byte-ranges were introduced. Using this, a client can request\n" +" to get only one or more subparts of a specified document. Curl supports\n" +" this with the -r flag.\n" +"\n" +" Get the first 100 bytes of a document:\n" +"\n" +" curl -r 0-99 http://www.get.this/\n" +"\n" +" Get the last 500 bytes of a document:\n" +"\n" +" curl -r -500 http://www.get.this/\n" +"\n" +" Curl also supports simple ranges for FTP files as well. Then you can only\n" +" specify start and stop position.\n" +"\n" +, stdout); + fputs( +" Get the first 100 bytes of a document using FTP:\n" +"\n" +" curl -r 0-99 ftp://www.get.this/README\n" +"\n" +"UPLOADING\n" +"\n" +" FTP / FTPS / SFTP / SCP\n" +"\n" +" Upload all data on stdin to a specified server:\n" +"\n" +" curl -T - ftp://ftp.upload.com/myfile\n" +"\n" +" Upload data from a specified file, login with user and password:\n" +"\n" +" curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile\n" +"\n" +" Upload a local file to the remote site, and use the local file name remote\n" +" too:\n" +"\n" +, stdout); + fputs( +" curl -T uploadfile -u user:passwd ftp://ftp.upload.com/\n" +"\n" +" Upload a local file to get appended to the remote file:\n" +"\n" +" curl -T localfile -a ftp://ftp.upload.com/remotefile\n" +"\n" +" Curl also supports ftp upload through a proxy, but only if the proxy is\n" +" configured to allow that kind of tunneling. If it does, you can run curl in\n" +" a fashion similar to:\n" +"\n" +" curl --proxytunnel -x proxy:port -T localfile ftp.upload.com\n" +"\n" +" HTTP\n" +"\n" +" Upload all data on stdin to a specified http site:\n" +"\n" +, stdout); + fputs( +" curl -T - http://www.upload.com/myfile\n" +"\n" +" Note that the http server must have been configured to accept PUT before\n" +" this can be done successfully.\n" +"\n" +" For other ways to do http data upload, see the POST section below.\n" +"\n" +"VERBOSE / DEBUG\n" +"\n" +" If curl fails where it isn't supposed to, if the servers don't let you in,\n" +" if you can't understand the responses: use the -v flag to get verbose\n" +" fetching. Curl will output lots of info and what it sends and receives in\n" +, stdout); + fputs( +" order to let the user see all client-server interaction (but it won't show\n" +" you the actual data).\n" +"\n" +" curl -v ftp://ftp.upload.com/\n" +"\n" +" To get even more details and information on what curl does, try using the\n" +" --trace or --trace-ascii options with a given file name to log to, like\n" +" this:\n" +"\n" +" curl --trace trace.txt www.haxx.se\n" +"\n" +"\n" +"DETAILED INFORMATION\n" +"\n" +" Different protocols provide different ways of getting detailed information\n" +, stdout); + fputs( +" about specific files/documents. To get curl to show detailed information\n" +" about a single file, you should use -I/--head option. It displays all\n" +" available info on a single file for HTTP and FTP. The HTTP information is a\n" +" lot more extensive.\n" +"\n" +" For HTTP, you can get the header information (the same as -I would show)\n" +" shown before the data by using -i/--include. Curl understands the\n" +" -D/--dump-header option when getting files from both FTP and HTTP, and it\n" +, stdout); + fputs( +" will then store the headers in the specified file.\n" +"\n" +" Store the HTTP headers in a separate file (headers.txt in the example):\n" +"\n" +" curl --dump-header headers.txt curl.haxx.se\n" +"\n" +" Note that headers stored in a separate file can be very useful at a later\n" +" time if you want curl to use cookies sent by the server. More about that in\n" +" the cookies section.\n" +"\n" +"POST (HTTP)\n" +"\n" +" It's easy to post data using curl. This is done using the -d <data>\n" +" option. The post data must be urlencoded.\n" +"\n" +, stdout); + fputs( +" Post a simple \"name\" and \"phone\" guestbook.\n" +"\n" +" curl -d \"name=Rafael%20Sagula&phone=3320780\" \\\n" +" http://www.where.com/guest.cgi\n" +"\n" +" How to post a form with curl, lesson #1:\n" +"\n" +" Dig out all the <input> tags in the form that you want to fill in. (There's\n" +" a perl program called formfind.pl on the curl site that helps with this).\n" +"\n" +" If there's a \"normal\" post, you use -d to post. -d takes a full \"post\n" +" string\", which is in the format\n" +"\n" +, stdout); + fputs( +" <variable1>=<data1>&<variable2>=<data2>&...\n" +"\n" +" The 'variable' names are the names set with \"name=\" in the <input> tags, and\n" +" the data is the contents you want to fill in for the inputs. The data *must*\n" +" be properly URL encoded. That means you replace space with + and that you\n" +" write weird letters with %XX where XX is the hexadecimal representation of\n" +" the letter's ASCII code.\n" +"\n" +" Example:\n" +"\n" +" (page located at http://www.formpost.com/getthis/\n" +"\n" +, stdout); + fputs( +" <form action=\"post.cgi\" method=\"post\">\n" +" <input name=user size=10>\n" +" <input name=pass type=password size=10>\n" +" <input name=id type=hidden value=\"blablabla\">\n" +" <input name=ding value=\"submit\">\n" +" </form>\n" +"\n" +" We want to enter user 'foobar' with password '12345'.\n" +"\n" +" To post to this, you enter a curl command line like:\n" +"\n" +" curl -d \"user=foobar&pass=12345&id=blablabla&ding=submit\" (continues)\n" +" http://www.formpost.com/getthis/post.cgi\n" +"\n" +"\n" +, stdout); + fputs( +" While -d uses the application/x-www-form-urlencoded mime-type, generally\n" +" understood by CGI's and similar, curl also supports the more capable\n" +" multipart/form-data type. This latter type supports things like file upload.\n" +"\n" +" -F accepts parameters like -F \"name=contents\". If you want the contents to\n" +" be read from a file, use <@filename> as contents. When specifying a file,\n" +" you can also specify the file content type by appending ';type=<mime type>'\n" +, stdout); + fputs( +" to the file name. You can also post the contents of several files in one\n" +" field. For example, the field name 'coolfiles' is used to send three files,\n" +" with different content types using the following syntax:\n" +"\n" +" curl -F \"coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html\" \\\n" +" http://www.post.com/postit.cgi\n" +"\n" +" If the content-type is not specified, curl will try to guess from the file\n" +" extension (it only knows a few), or use the previously specified type (from\n" +, stdout); + fputs( +" an earlier file if several files are specified in a list) or else it will\n" +" using the default type 'text/plain'.\n" +"\n" +" Emulate a fill-in form with -F. Let's say you fill in three fields in a\n" +" form. One field is a file name which to post, one field is your name and one\n" +" field is a file description. We want to post the file we have written named\n" +" \"cooltext.txt\". To let curl do the posting of this data instead of your\n" +" favourite browser, you have to read the HTML source of the form page and\n" +, stdout); + fputs( +" find the names of the input fields. In our example, the input field names\n" +" are 'file', 'yourname' and 'filedescription'.\n" +"\n" +" curl -F \"file=@cooltext.txt\" -F \"yourname=Daniel\" \\\n" +" -F \"filedescription=Cool text file with cool text inside\" \\\n" +" http://www.post.com/postit.cgi\n" +"\n" +" To send two files in one post you can do it in two ways:\n" +"\n" +" 1. Send multiple files in a single \"field\" with a single field name:\n" +"\n" +" curl -F \"pictures=@dog.gif,cat.gif\"\n" +"\n" +, stdout); + fputs( +" 2. Send two fields with two field names:\n" +"\n" +" curl -F \"docpicture=@dog.gif\" -F \"catpicture=@cat.gif\"\n" +"\n" +" To send a field value literally without interpreting a leading '@'\n" +" or '<', or an embedded ';type=', use --form-string instead of\n" +" -F. This is recommended when the value is obtained from a user or\n" +" some other unpredictable source. Under these circumstances, using\n" +" -F instead of --form-string would allow a user to trick curl into\n" +" uploading a file.\n" +"\n" +"REFERRER\n" +"\n" +, stdout); + fputs( +" A HTTP request has the option to include information about which address\n" +" that referred to actual page. Curl allows you to specify the\n" +" referrer to be used on the command line. It is especially useful to\n" +" fool or trick stupid servers or CGI scripts that rely on that information\n" +" being available or contain certain data.\n" +"\n" +" curl -e www.coolsite.com http://www.showme.com/\n" +"\n" +" NOTE: The Referer: [sic] field is defined in the HTTP spec to be a full URL.\n" +"\n" +"USER AGENT\n" +"\n" +, stdout); + fputs( +" A HTTP request has the option to include information about the browser\n" +" that generated the request. Curl allows it to be specified on the command\n" +" line. It is especially useful to fool or trick stupid servers or CGI\n" +" scripts that only accept certain browsers.\n" +"\n" +" Example:\n" +"\n" +" curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/\n" +"\n" +" Other common strings:\n" +" 'Mozilla/3.0 (Win95; I)' Netscape Version 3 for Windows 95\n" +" 'Mozilla/3.04 (Win95; U)' Netscape Version 3 for Windows 95\n" +, stdout); + fputs( +" 'Mozilla/2.02 (OS/2; U)' Netscape Version 2 for OS/2\n" +" 'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)' NS for AIX\n" +" 'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)' NS for Linux\n" +"\n" +" Note that Internet Explorer tries hard to be compatible in every way:\n" +" 'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)' MSIE for W95\n" +"\n" +" Mozilla is not the only possible User-Agent name:\n" +" 'Konqueror/1.0' KDE File Manager desktop client\n" +, stdout); + fputs( +" 'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser\n" +"\n" +"COOKIES\n" +"\n" +" Cookies are generally used by web servers to keep state information at the\n" +" client's side. The server sets cookies by sending a response line in the\n" +" headers that looks like 'Set-Cookie: <data>' where the data part then\n" +" typically contains a set of NAME=VALUE pairs (separated by semicolons ';'\n" +" like \"NAME1=VALUE1; NAME2=VALUE2;\"). The server can also specify for what\n" +, stdout); + fputs( +" path the \"cookie\" should be used for (by specifying \"path=value\"), when the\n" +" cookie should expire (\"expire=DATE\"), for what domain to use it\n" +" (\"domain=NAME\") and if it should be used on secure connections only\n" +" (\"secure\").\n" +"\n" +" If you've received a page from a server that contains a header like:\n" +" Set-Cookie: sessionid=boo123; path=\"/foo\";\n" +"\n" +" it means the server wants that first pair passed on when we get anything in\n" +" a path beginning with \"/foo\".\n" +"\n" +, stdout); + fputs( +" Example, get a page that wants my name passed in a cookie:\n" +"\n" +" curl -b \"name=Daniel\" www.sillypage.com\n" +"\n" +" Curl also has the ability to use previously received cookies in following\n" +" sessions. If you get cookies from a server and store them in a file in a\n" +" manner similar to:\n" +"\n" +" curl --dump-header headers www.example.com\n" +"\n" +" ... you can then in a second connect to that (or another) site, use the\n" +" cookies from the 'headers' file like:\n" +"\n" +" curl -b headers www.example.com\n" +"\n" +, stdout); + fputs( +" While saving headers to a file is a working way to store cookies, it is\n" +" however error-prone and not the preferred way to do this. Instead, make curl\n" +" save the incoming cookies using the well-known netscape cookie format like\n" +" this:\n" +"\n" +" curl -c cookies.txt www.example.com\n" +"\n" +" Note that by specifying -b you enable the \"cookie awareness\" and with -L\n" +" you can make curl follow a location: (which often is used in combination\n" +, stdout); + fputs( +" with cookies). So that if a site sends cookies and a location, you can\n" +" use a non-existing file to trigger the cookie awareness like:\n" +"\n" +" curl -L -b empty.txt www.example.com\n" +"\n" +" The file to read cookies from must be formatted using plain HTTP headers OR\n" +" as netscape's cookie file. Curl will determine what kind it is based on the\n" +" file contents. In the above command, curl will parse the header and store\n" +" the cookies received from www.example.com. curl will send to the server the\n" +, stdout); + fputs( +" stored cookies which match the request as it follows the location. The\n" +" file \"empty.txt\" may be a nonexistent file.\n" +"\n" +" Alas, to both read and write cookies from a netscape cookie file, you can\n" +" set both -b and -c to use the same file:\n" +"\n" +" curl -b cookies.txt -c cookies.txt www.example.com\n" +"\n" +"PROGRESS METER\n" +"\n" +" The progress meter exists to show a user that something actually is\n" +" happening. The different fields in the output have the following meaning:\n" +"\n" +, stdout); + fputs( +" % Total % Received % Xferd Average Speed Time Curr.\n" +" Dload Upload Total Current Left Speed\n" +" 0 151M 0 38608 0 0 9406 0 4:41:43 0:00:04 4:41:39 9287\n" +"\n" +" From left-to-right:\n" +" % - percentage completed of the whole transfer\n" +" Total - total size of the whole expected transfer\n" +" % - percentage completed of the download\n" +" Received - currently downloaded amount of bytes\n" +, stdout); + fputs( +" % - percentage completed of the upload\n" +" Xferd - currently uploaded amount of bytes\n" +" Average Speed\n" +" Dload - the average transfer speed of the download\n" +" Average Speed\n" +" Upload - the average transfer speed of the upload\n" +" Time Total - expected time to complete the operation\n" +" Time Current - time passed since the invoke\n" +" Time Left - expected time left to completion\n" +" Curr.Speed - the average transfer speed the last 5 seconds (the first\n" +, stdout); + fputs( +" 5 seconds of a transfer is based on less time of course.)\n" +"\n" +" The -# option will display a totally different progress bar that doesn't\n" +" need much explanation!\n" +"\n" +"SPEED LIMIT\n" +"\n" +" Curl allows the user to set the transfer speed conditions that must be met\n" +" to let the transfer keep going. By using the switch -y and -Y you\n" +" can make curl abort transfers if the transfer speed is below the specified\n" +" lowest limit for a specified time.\n" +"\n" +, stdout); + fputs( +" To have curl abort the download if the speed is slower than 3000 bytes per\n" +" second for 1 minute, run:\n" +"\n" +" curl -Y 3000 -y 60 www.far-away-site.com\n" +"\n" +" This can very well be used in combination with the overall time limit, so\n" +" that the above operation must be completed in whole within 30 minutes:\n" +"\n" +" curl -m 1800 -Y 3000 -y 60 www.far-away-site.com\n" +"\n" +" Forcing curl not to transfer data faster than a given rate is also possible,\n" +, stdout); + fputs( +" which might be useful if you're using a limited bandwidth connection and you\n" +" don't want your transfer to use all of it (sometimes referred to as\n" +" \"bandwidth throttle\").\n" +"\n" +" Make curl transfer data no faster than 10 kilobytes per second:\n" +"\n" +" curl --limit-rate 10K www.far-away-site.com\n" +"\n" +" or\n" +"\n" +" curl --limit-rate 10240 www.far-away-site.com\n" +"\n" +" Or prevent curl from uploading data faster than 1 megabyte per second:\n" +"\n" +" curl -T upload --limit-rate 1M ftp://uploadshereplease.com\n" +"\n" +, stdout); + fputs( +" When using the --limit-rate option, the transfer rate is regulated on a\n" +" per-second basis, which will cause the total transfer speed to become lower\n" +" than the given number. Sometimes of course substantially lower, if your\n" +" transfer stalls during periods.\n" +"\n" +"CONFIG FILE\n" +"\n" +" Curl automatically tries to read the .curlrc file (or _curlrc file on win32\n" +" systems) from the user's home dir on startup.\n" +"\n" +" The config file could be made up with normal command line switches, but you\n" +, stdout); + fputs( +" can also specify the long options without the dashes to make it more\n" +" readable. You can separate the options and the parameter with spaces, or\n" +" with = or :. Comments can be used within the file. If the first letter on a\n" +" line is a '#'-symbol the rest of the line is treated as a comment.\n" +"\n" +" If you want the parameter to contain spaces, you must enclose the entire\n" +" parameter within double quotes (\"). Within those quotes, you specify a\n" +" quote as \\\".\n" +"\n" +, stdout); + fputs( +" NOTE: You must specify options and their arguments on the same line.\n" +"\n" +" Example, set default time out and proxy in a config file:\n" +"\n" +" # We want a 30 minute timeout:\n" +" -m 1800\n" +" # ... and we use a proxy for all accesses:\n" +" proxy = proxy.our.domain.com:8080\n" +"\n" +" White spaces ARE significant at the end of lines, but all white spaces\n" +" leading up to the first characters of each line are ignored.\n" +"\n" +" Prevent curl from reading the default file by using -q as the first command\n" +, stdout); + fputs( +" line parameter, like:\n" +"\n" +" curl -q www.thatsite.com\n" +"\n" +" Force curl to get and display a local help page in case it is invoked\n" +" without URL by making a config file similar to:\n" +"\n" +" # default url to get\n" +" url = \"http://help.with.curl.com/curlhelp.html\"\n" +"\n" +" You can specify another config file to be read by using the -K/--config\n" +" flag. If you set config file name to \"-\" it'll read the config from stdin,\n" +" which can be handy if you want to hide options from being visible in process\n" +, stdout); + fputs( +" tables etc:\n" +"\n" +" echo \"user = user:passwd\" | curl -K - http://that.secret.site.com\n" +"\n" +"EXTRA HEADERS\n" +"\n" +" When using curl in your own very special programs, you may end up needing\n" +" to pass on your own custom headers when getting a web page. You can do\n" +" this by using the -H flag.\n" +"\n" +" Example, send the header \"X-you-and-me: yes\" to the server when getting a\n" +" page:\n" +"\n" +" curl -H \"X-you-and-me: yes\" www.love.com\n" +"\n" +" This can also be useful in case you want curl to send a different text in a\n" +, stdout); + fputs( +" header than it normally does. The -H header you specify then replaces the\n" +" header curl would normally send. If you replace an internal header with an\n" +" empty one, you prevent that header from being sent. To prevent the Host:\n" +" header from being used:\n" +"\n" +" curl -H \"Host:\" www.server.com\n" +"\n" +"FTP and PATH NAMES\n" +"\n" +" Do note that when getting files with the ftp:// URL, the given path is\n" +" relative the directory you enter. To get the file 'README' from your home\n" +" directory at your ftp site, do:\n" +"\n" +, stdout); + fputs( +" curl ftp://user:passwd@my.site.com/README\n" +"\n" +" But if you want the README file from the root directory of that very same\n" +" site, you need to specify the absolute file name:\n" +"\n" +" curl ftp://user:passwd@my.site.com//README\n" +"\n" +" (I.e with an extra slash in front of the file name.)\n" +"\n" +"SFTP and SCP and PATH NAMES\n" +"\n" +" With sftp: and scp: URLs, the path name given is the absolute name on the\n" +" server. To access a file relative to the remote user's home directory,\n" +, stdout); + fputs( +" prefix the file with /~/ , such as:\n" +"\n" +" curl -u $USER sftp://home.example.com/~/.bashrc\n" +"\n" +"FTP and firewalls\n" +"\n" +" The FTP protocol requires one of the involved parties to open a second\n" +" connection as soon as data is about to get transfered. There are two ways to\n" +" do this.\n" +"\n" +" The default way for curl is to issue the PASV command which causes the\n" +" server to open another port and await another connection performed by the\n" +, stdout); + fputs( +" client. This is good if the client is behind a firewall that don't allow\n" +" incoming connections.\n" +"\n" +" curl ftp.download.com\n" +"\n" +" If the server for example, is behind a firewall that don't allow connections\n" +" on other ports than 21 (or if it just doesn't support the PASV command), the\n" +" other way to do it is to use the PORT command and instruct the server to\n" +" connect to the client on the given (as parameters to the PORT command) IP\n" +" number and port.\n" +"\n" +, stdout); + fputs( +" The -P flag to curl supports a few different options. Your machine may have\n" +" several IP-addresses and/or network interfaces and curl allows you to select\n" +" which of them to use. Default address can also be used:\n" +"\n" +" curl -P - ftp.download.com\n" +"\n" +" Download with PORT but use the IP address of our 'le0' interface (this does\n" +" not work on windows):\n" +"\n" +" curl -P le0 ftp.download.com\n" +"\n" +" Download with PORT but use 192.168.0.10 as our IP address to use:\n" +"\n" +, stdout); + fputs( +" curl -P 192.168.0.10 ftp.download.com\n" +"\n" +"NETWORK INTERFACE\n" +"\n" +" Get a web page from a server using a specified port for the interface:\n" +"\n" +" curl --interface eth0:1 http://www.netscape.com/\n" +"\n" +" or\n" +"\n" +" curl --interface 192.168.1.10 http://www.netscape.com/\n" +"\n" +"HTTPS\n" +"\n" +" Secure HTTP requires SSL libraries to be installed and used when curl is\n" +" built. If that is done, curl is capable of retrieving and posting documents\n" +" using the HTTPS protocol.\n" +"\n" +" Example:\n" +"\n" +, stdout); + fputs( +" curl https://www.secure-site.com\n" +"\n" +" Curl is also capable of using your personal certificates to get/post files\n" +" from sites that require valid certificates. The only drawback is that the\n" +" certificate needs to be in PEM-format. PEM is a standard and open format to\n" +" store certificates with, but it is not used by the most commonly used\n" +" browsers (Netscape and MSIE both use the so called PKCS#12 format). If you\n" +, stdout); + fputs( +" want curl to use the certificates you use with your (favourite) browser, you\n" +" may need to download/compile a converter that can convert your browser's\n" +" formatted certificates to PEM formatted ones. This kind of converter is\n" +" included in recent versions of OpenSSL, and for older versions Dr Stephen\n" +" N. Henson has written a patch for SSLeay that adds this functionality. You\n" +" can get his patch (that requires an SSLeay installation) from his site at:\n" +" http://www.drh-consultancy.demon.co.uk/\n" +, stdout); + fputs( +"\n" +" Example on how to automatically retrieve a document using a certificate with\n" +" a personal password:\n" +"\n" +" curl -E /path/to/cert.pem:password https://secure.site.com/\n" +"\n" +" If you neglect to specify the password on the command line, you will be\n" +" prompted for the correct password before any data can be received.\n" +"\n" +" Many older SSL-servers have problems with SSLv3 or TLS, that newer versions\n" +" of OpenSSL etc is using, therefore it is sometimes useful to specify what\n" +, stdout); + fputs( +" SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL\n" +" version to use (for SSLv3, SSLv2 or TLSv1 respectively):\n" +"\n" +" curl -2 https://secure.site.com/\n" +"\n" +" Otherwise, curl will first attempt to use v3 and then v2.\n" +"\n" +" To use OpenSSL to convert your favourite browser's certificate into a PEM\n" +" formatted one that curl can use, do something like this (assuming netscape,\n" +" but IE is likely to work similarly):\n" +"\n" +" You start with hitting the 'security' menu button in netscape.\n" +"\n" +, stdout); + fputs( +" Select 'certificates->yours' and then pick a certificate in the list\n" +"\n" +" Press the 'export' button\n" +"\n" +" enter your PIN code for the certs\n" +"\n" +" select a proper place to save it\n" +"\n" +" Run the 'openssl' application to convert the certificate. If you cd to the\n" +" openssl installation, you can do it like:\n" +"\n" +" # ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]\n" +"\n" +"\n" +"RESUMING FILE TRANSFERS\n" +"\n" +" To continue a file transfer where it was previously aborted, curl supports\n" +, stdout); + fputs( +" resume on http(s) downloads as well as ftp uploads and downloads.\n" +"\n" +" Continue downloading a document:\n" +"\n" +" curl -C - -o file ftp://ftp.server.com/path/file\n" +"\n" +" Continue uploading a document(*1):\n" +"\n" +" curl -C - -T file ftp://ftp.server.com/path/file\n" +"\n" +" Continue downloading a document from a web server(*2):\n" +"\n" +" curl -C - -o file http://www.server.com/\n" +"\n" +" (*1) = This requires that the ftp server supports the non-standard command\n" +" SIZE. If it doesn't, curl will say so.\n" +"\n" +, stdout); + fputs( +" (*2) = This requires that the web server supports at least HTTP/1.1. If it\n" +" doesn't, curl will say so.\n" +"\n" +"TIME CONDITIONS\n" +"\n" +" HTTP allows a client to specify a time condition for the document it\n" +" requests. It is If-Modified-Since or If-Unmodified-Since. Curl allow you to\n" +" specify them with the -z/--time-cond flag.\n" +"\n" +" For example, you can easily make a download that only gets performed if the\n" +" remote file is newer than a local copy. It would be made like:\n" +"\n" +, stdout); + fputs( +" curl -z local.html http://remote.server.com/remote.html\n" +"\n" +" Or you can download a file only if the local file is newer than the remote\n" +" one. Do this by prepending the date string with a '-', as in:\n" +"\n" +" curl -z -local.html http://remote.server.com/remote.html\n" +"\n" +" You can specify a \"free text\" date as condition. Tell curl to only download\n" +" the file if it was updated since January 12, 2012:\n" +"\n" +" curl -z \"Jan 12 2012\" http://remote.server.com/remote.html\n" +"\n" +, stdout); + fputs( +" Curl will then accept a wide range of date formats. You always make the date\n" +" check the other way around by prepending it with a dash '-'.\n" +"\n" +"DICT\n" +"\n" +" For fun try\n" +"\n" +" curl dict://dict.org/m:curl\n" +" curl dict://dict.org/d:heisenbug:jargon\n" +" curl dict://dict.org/d:daniel:web1913\n" +"\n" +" Aliases for 'm' are 'match' and 'find', and aliases for 'd' are 'define'\n" +" and 'lookup'. For example,\n" +"\n" +" curl dict://dict.org/find:curl\n" +"\n" +, stdout); + fputs( +" Commands that break the URL description of the RFC (but not the DICT\n" +" protocol) are\n" +"\n" +" curl dict://dict.org/show:db\n" +" curl dict://dict.org/show:strat\n" +"\n" +" Authentication is still missing (but this is not required by the RFC)\n" +"\n" +"LDAP\n" +"\n" +" If you have installed the OpenLDAP library, curl can take advantage of it\n" +" and offer ldap:// support.\n" +"\n" +" LDAP is a complex thing and writing an LDAP query is not an easy task. I do\n" +, stdout); + fputs( +" advice you to dig up the syntax description for that elsewhere. Two places\n" +" that might suit you are:\n" +"\n" +" Netscape's \"Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10:\n" +" Working with LDAP URLs\":\n" +" http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm\n" +"\n" +" RFC 2255, \"The LDAP URL Format\" http://curl.haxx.se/rfc/rfc2255.txt\n" +"\n" +" To show you an example, this is now I can get all people from my local LDAP\n" +" server that has a certain sub-domain in their email address:\n" +"\n" +, stdout); + fputs( +" curl -B \"ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se\"\n" +"\n" +" If I want the same info in HTML format, I can get it by not using the -B\n" +" (enforce ASCII) flag.\n" +"\n" +"ENVIRONMENT VARIABLES\n" +"\n" +" Curl reads and understands the following environment variables:\n" +"\n" +" http_proxy, HTTPS_PROXY, FTP_PROXY\n" +"\n" +" They should be set for protocol-specific proxies. General proxy should be\n" +" set with\n" +"\n" +" ALL_PROXY\n" +"\n" +" A comma-separated list of host names that shouldn't go through any proxy is\n" +, stdout); + fputs( +" set in (only an asterisk, '*' matches all hosts)\n" +"\n" +" NO_PROXY\n" +"\n" +" If the host name matches one of these strings, or the host is within the\n" +" domain of one of these strings, transactions with that node will not be\n" +" proxied.\n" +"\n" +"\n" +" The usage of the -x/--proxy flag overrides the environment variables.\n" +"\n" +"NETRC\n" +"\n" +" Unix introduced the .netrc concept a long time ago. It is a way for a user\n" +" to specify name and password for commonly visited ftp sites in a file so\n" +, stdout); + fputs( +" that you don't have to type them in each time you visit those sites. You\n" +" realize this is a big security risk if someone else gets hold of your\n" +" passwords, so therefore most unix programs won't read this file unless it is\n" +" only readable by yourself (curl doesn't care though).\n" +"\n" +" Curl supports .netrc files if told so (using the -n/--netrc and\n" +" --netrc-optional options). This is not restricted to only ftp,\n" +" but curl can use it for all protocols where authentication is used.\n" +"\n" +, stdout); + fputs( +" A very simple .netrc file could look something like:\n" +"\n" +" machine curl.haxx.se login iamdaniel password mysecret\n" +"\n" +"CUSTOM OUTPUT\n" +"\n" +" To better allow script programmers to get to know about the progress of\n" +" curl, the -w/--write-out option was introduced. Using this, you can specify\n" +" what information from the previous transfer you want to extract.\n" +"\n" +" To display the amount of bytes downloaded together with some text and an\n" +" ending newline:\n" +"\n" +, stdout); + fputs( +" curl -w 'We downloaded %{size_download} bytes\\n' www.download.com\n" +"\n" +"KERBEROS FTP TRANSFER\n" +"\n" +" Curl supports kerberos4 and kerberos5/GSSAPI for FTP transfers. You need\n" +" the kerberos package installed and used at curl build time for it to be\n" +" used.\n" +"\n" +" First, get the krb-ticket the normal way, like with the kinit/kauth tool.\n" +" Then use curl in way similar to:\n" +"\n" +" curl --krb private ftp://krb4site.com -u username:fakepwd\n" +"\n" +, stdout); + fputs( +" There's no use for a password on the -u switch, but a blank one will make\n" +" curl ask for one and you already entered the real password to kinit/kauth.\n" +"\n" +"TELNET\n" +"\n" +" The curl telnet support is basic and very easy to use. Curl passes all data\n" +" passed to it on stdin to the remote server. Connect to a remote telnet\n" +" server using a command line similar to:\n" +"\n" +" curl telnet://remote.server.com\n" +"\n" +" And enter the data to pass to the server on stdin. The result will be sent\n" +, stdout); + fputs( +" to stdout or to the file you specify with -o.\n" +"\n" +" You might want the -N/--no-buffer option to switch off the buffered output\n" +" for slow connections or similar.\n" +"\n" +" Pass options to the telnet protocol negotiation, by using the -t option. To\n" +" tell the server we use a vt100 terminal, try something like:\n" +"\n" +" curl -tTTYPE=vt100 telnet://remote.server.com\n" +"\n" +" Other interesting options for it -t include:\n" +"\n" +" - XDISPLOC=<X display> Sets the X display location.\n" +"\n" +, stdout); + fputs( +" - NEW_ENV=<var,val> Sets an environment variable.\n" +"\n" +" NOTE: the telnet protocol does not specify any way to login with a specified\n" +" user and password so curl can't do that automatically. To do that, you need\n" +" to track when the login prompt is received and send the username and\n" +" password accordingly.\n" +"\n" +"PERSISTENT CONNECTIONS\n" +"\n" +" Specifying multiple files on a single command line will make curl transfer\n" +" all of them, one after the other in the specified order.\n" +"\n" +, stdout); + fputs( +" libcurl will attempt to use persistent connections for the transfers so that\n" +" the second transfer to the same host can use the same connection that was\n" +" already initiated and was left open in the previous transfer. This greatly\n" +" decreases connection time for all but the first transfer and it makes a far\n" +" better use of the network.\n" +"\n" +" Note that curl cannot use persistent connections for transfers that are used\n" +" in subsequence curl invokes. Try to stuff as many URLs as possible on the\n" +, stdout); + fputs( +" same command line if they are using the same host, as that'll make the\n" +" transfers faster. If you use a http proxy for file transfers, practically\n" +" all transfers will be persistent.\n" +"\n" +"MULTIPLE TRANSFERS WITH A SINGLE COMMAND LINE\n" +"\n" +" As is mentioned above, you can download multiple files with one command line\n" +" by simply adding more URLs. If you want those to get saved to a local file\n" +" instead of just printed to stdout, you need to add one save option for each\n" +, stdout); + fputs( +" URL you specify. Note that this also goes for the -O option (but not\n" +" --remote-name-all).\n" +"\n" +" For example: get two files and use -O for the first and a custom file\n" +" name for the second:\n" +"\n" +" curl -O http://url.com/file.txt ftp://ftp.com/moo.exe -o moo.jpg\n" +"\n" +" You can also upload multiple files in a similar fashion:\n" +"\n" +" curl -T local1 ftp://ftp.com/moo.exe -T local2 ftp://ftp.com/moo2.txt\n" +"\n" +"IPv6\n" +"\n" +" curl will connect to a server with IPv6 when a host lookup returns an IPv6\n" +, stdout); + fputs( +" address and fall back to IPv4 if the connection fails. The --ipv4 and --ipv6\n" +" options can specify which address to use when both are available. IPv6\n" +" addresses can also be specified directly in URLs using the syntax:\n" +"\n" +" http://[2001:1890:1112:1::20]/overview.html\n" +"\n" +" When this style is used, the -g option must be given to stop curl from\n" +" interpreting the square brackets as special globbing characters. Link local\n" +, stdout); + fputs( +" and site local addresses including a scope identifier, such as fe80::1234%1,\n" +" may also be used, but the scope portion must be numeric and the percent\n" +" character must be URL escaped. The previous example in an SFTP URL might\n" +" look like:\n" +"\n" +" sftp://[fe80::1234%251]/\n" +"\n" +" IPv6 addresses provided other than in URLs (e.g. to the --proxy, --interface\n" +" or --ftp-port options) should not be URL encoded.\n" +"\n" +"\n" +"MAILING LISTS\n" +"\n" +" For your convenience, we have several open mailing lists to discuss curl,\n" +, stdout); + fputs( +" its development and things relevant to this. Get all info at\n" +" http://curl.haxx.se/mail/. Some of the lists available are:\n" +"\n" +" curl-users\n" +"\n" +" Users of the command line tool. How to use it, what doesn't work, new\n" +" features, related tools, questions, news, installations, compilations,\n" +" running, porting etc.\n" +"\n" +" curl-library\n" +"\n" +" Developers using or developing libcurl. Bugs, extensions, improvements.\n" +"\n" +" curl-announce\n" +"\n" +, stdout); + fputs( +" Low-traffic. Only receives announcements of new public versions. At worst,\n" +" that makes something like one or two mails per month, but usually only one\n" +" mail every second month.\n" +"\n" +" curl-and-php\n" +"\n" +" Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP\n" +" with a curl angle.\n" +"\n" +" curl-and-python\n" +"\n" +" Python hackers using curl with or without the python binding pycurl.\n" +"\n" +" Please direct curl questions, feature requests and trouble reports to one of\n" +, stdout); + fputs( +" these mailing lists instead of mailing any individual.\n" +, stdout) ; +} +#endif /* USE_MANUAL */ +#else +/* + * NEVER EVER edit this manually, fix the mkhelp.pl script instead! + * Generation time: Sun Mar 28 23:35:15 2010 + */ +#include "setup.h" +#ifdef USE_MANUAL +#include "hugehelp.h" +#include <stdio.h> +#include <stdlib.h> +#include <zlib.h> +static const unsigned char hugehelpgz[] = { + /* This mumbo-jumbo is the huge help text compressed with gzip. + Thanks to this operation, the size of this data shrunk from 130818 + to 40275 bytes. You can disable the use of compressed help + texts by NOT passing -c to the mkhelp.pl tool. */ + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd, + 0x7b, 0x5b, 0x23, 0xd7, 0xb1, 0x2e, 0xfe, 0x3f, 0x9f, 0xa2, 0x23, 0xff, + 0x12, 0x41, 0x22, 0x89, 0xcb, 0x5c, 0xec, 0x21, 0x33, 0xde, 0xc6, 0xc0, + 0xd8, 0x6c, 0x33, 0x03, 0x07, 0x31, 0xbe, 0x1c, 0xc7, 0xcf, 0x3c, 0x2d, + 0xa9, 0x81, 0x0e, 0x92, 0x5a, 0xe9, 0x6e, 0x01, 0x72, 0x76, 0xf6, 0x67, + 0x3f, 0x55, 0x6f, 0x55, 0xad, 0xb5, 0xfa, 0x22, 0x66, 0x9c, 0xd8, 0x39, + 0xbf, 0x73, 0x9e, 0x93, 0xbd, 0x3d, 0x80, 0xd4, 0xbd, 0xae, 0xb5, 0x6a, + 0xd5, 0xf5, 0xad, 0x28, 0xfa, 0xd0, 0xff, 0xde, 0xe3, 0xbf, 0xf7, 0xf4, + 0x3f, 0xfa, 0xb9, 0x11, 0x45, 0xe7, 0x79, 0xf6, 0xd7, 0x64, 0x5c, 0xb6, + 0x3f, 0xfb, 0xfe, 0xfd, 0x7f, 0x45, 0xf2, 0x7f, 0xf4, 0xce, 0x5f, 0xe8, + 0xe7, 0xc6, 0xa3, 0x6d, 0x6f, 0x47, 0xfe, 0x85, 0xff, 0x7a, 0xbf, 0x15, + 0x7d, 0xe8, 0x85, 0xff, 0x8a, 0x36, 0xf1, 0xc2, 0x7b, 0xed, 0xe1, 0x25, + 0xff, 0xfe, 0xfe, 0xfd, 0xe3, 0x9d, 0xfc, 0x85, 0x47, 0xc5, 0xff, 0x6c, + 0xf3, 0x7b, 0x7f, 0x79, 0xcf, 0xbf, 0xd2, 0x27, 0x1b, 0x1b, 0x6f, 0x0f, + 0xde, 0x1c, 0xdb, 0xab, 0xe3, 0x65, 0x3e, 0x8d, 0xfa, 0x51, 0x99, 0xc7, + 0xf3, 0xe2, 0x2a, 0xc9, 0xa3, 0x38, 0x7a, 0x77, 0x71, 0xba, 0xb1, 0x31, + 0xfc, 0xe1, 0xed, 0xd9, 0xf9, 0xf0, 0x64, 0x58, 0x79, 0xec, 0xc7, 0x6c, + 0x51, 0xa6, 0xd9, 0xbc, 0xf8, 0x29, 0xfa, 0x91, 0x1e, 0x1a, 0x0c, 0x06, + 0x3f, 0x6d, 0x6c, 0x1c, 0x1d, 0x0f, 0x0f, 0x2f, 0x4e, 0xce, 0x2f, 0x4f, + 0xce, 0xde, 0x56, 0x9e, 0x8d, 0xd2, 0x22, 0xa2, 0xc6, 0xca, 0x2c, 0x9b, + 0xd2, 0x3f, 0xbe, 0xfd, 0x49, 0x5c, 0xc6, 0xd1, 0x55, 0x9e, 0xcd, 0xa2, + 0x2c, 0xe7, 0x2f, 0xe2, 0xa8, 0x48, 0xf2, 0xbb, 0x24, 0xef, 0x45, 0xcb, + 0x22, 0x9d, 0x5f, 0x47, 0xd9, 0x3c, 0x89, 0xb2, 0xab, 0xa8, 0xbc, 0x49, + 0xac, 0xb9, 0x62, 0xb9, 0x58, 0x64, 0x79, 0x99, 0x4c, 0xa2, 0x45, 0x9e, + 0x95, 0xd9, 0x38, 0x9b, 0x16, 0xd1, 0xe6, 0xd7, 0x97, 0x97, 0xe7, 0xbd, + 0x88, 0xff, 0x1d, 0xf6, 0xa2, 0xd7, 0xfc, 0xfb, 0x6b, 0xfc, 0x1a, 0x0d, + 0x0f, 0xcf, 0xf9, 0x5f, 0x7c, 0x14, 0x5d, 0xca, 0x8f, 0xa3, 0x93, 0xc3, + 0xcb, 0x9e, 0x35, 0x77, 0x79, 0x7c, 0xfa, 0xf6, 0xf8, 0x92, 0x3e, 0x3d, + 0x3d, 0x3a, 0x38, 0x8f, 0x78, 0x14, 0xd1, 0xeb, 0x93, 0xd3, 0xe3, 0xad, + 0x01, 0x7d, 0x75, 0x93, 0x44, 0xe3, 0x6c, 0x36, 0x8b, 0xe7, 0x13, 0x1e, + 0xfe, 0x24, 0x29, 0xd2, 0xeb, 0x39, 0xf5, 0x4b, 0xc3, 0xbc, 0xcf, 0xf2, + 0xdb, 0xe8, 0x3e, 0x2d, 0x6f, 0xb2, 0x65, 0x49, 0x23, 0x4d, 0x72, 0x6b, + 0x2e, 0x9d, 0x97, 0x49, 0x1e, 0x8f, 0x79, 0x5d, 0x06, 0x1b, 0x95, 0x15, + 0xc8, 0xae, 0x68, 0xbe, 0x05, 0x4d, 0x70, 0xb4, 0x2c, 0xa6, 0x59, 0x3c, + 0xe1, 0x69, 0xd1, 0x9b, 0x57, 0x4b, 0x5a, 0x90, 0x3c, 0x1d, 0xdf, 0x16, + 0xd1, 0x34, 0xbd, 0x4d, 0x78, 0x52, 0x0f, 0x2b, 0x9b, 0x64, 0x0f, 0x6d, + 0x47, 0xf1, 0x92, 0xe6, 0x3f, 0xef, 0x5b, 0x73, 0x65, 0x3a, 0x8e, 0xb9, + 0x03, 0x1a, 0x34, 0x4d, 0x28, 0x5a, 0x2e, 0xb8, 0x39, 0x99, 0x7d, 0xb4, + 0xc8, 0x0a, 0x7a, 0x6b, 0x38, 0x3c, 0xa5, 0x91, 0xcf, 0xe7, 0x09, 0x06, + 0x52, 0xf4, 0xe8, 0x8f, 0xec, 0x36, 0x4d, 0xe8, 0x97, 0xab, 0x74, 0x9a, + 0xc8, 0xea, 0xbb, 0xe6, 0x78, 0x1b, 0xf2, 0xa4, 0x58, 0xce, 0x92, 0x88, + 0x67, 0x3a, 0xcb, 0xf2, 0x64, 0x10, 0x1d, 0x14, 0xd1, 0x2a, 0x5b, 0xd2, + 0x14, 0xa7, 0x53, 0xda, 0x91, 0x24, 0x1a, 0x25, 0xd3, 0xec, 0xbe, 0xc7, + 0xfb, 0x10, 0xcd, 0x97, 0xb3, 0x11, 0xbd, 0x42, 0xc3, 0xbf, 0x4a, 0xe2, + 0x72, 0x49, 0xaf, 0xe2, 0x31, 0x6b, 0x6e, 0x16, 0xd3, 0x2c, 0xe8, 0xdd, + 0x3c, 0xba, 0x49, 0x68, 0x96, 0xc5, 0x22, 0x9d, 0xff, 0x6e, 0xa3, 0x49, + 0x0b, 0x8b, 0xec, 0x3e, 0xc9, 0x69, 0x31, 0xa3, 0xd1, 0x2a, 0xa2, 0x99, + 0x8f, 0xe4, 0x9b, 0x2b, 0x5e, 0xff, 0x78, 0x3a, 0x75, 0x04, 0xd2, 0xcf, + 0x93, 0x69, 0xcc, 0x9b, 0x6d, 0x7d, 0x0d, 0xa2, 0x61, 0xe2, 0x68, 0x41, + 0xdf, 0xdb, 0x7c, 0xb2, 0x85, 0x37, 0x27, 0x49, 0x19, 0xa7, 0xd3, 0x82, + 0x16, 0x9e, 0x89, 0xd6, 0x36, 0x98, 0x86, 0x4c, 0x7f, 0x46, 0xc5, 0x6a, + 0x5e, 0xc6, 0x0f, 0xdc, 0xb7, 0xd1, 0x4d, 0x7f, 0x92, 0x2c, 0x92, 0xf9, + 0x24, 0x99, 0x97, 0x83, 0xe8, 0x87, 0x6c, 0xd9, 0xa5, 0x6e, 0xaf, 0x52, + 0x5a, 0x81, 0x38, 0xd2, 0x96, 0x78, 0x78, 0xb4, 0xeb, 0xe3, 0x3c, 0x5d, + 0x04, 0x8b, 0x9f, 0xcd, 0x69, 0x97, 0xa3, 0x8b, 0xd7, 0x87, 0xd1, 0x93, + 0x17, 0x9f, 0x3d, 0xf7, 0xbb, 0x4c, 0x4d, 0xd0, 0x04, 0xe3, 0x39, 0x91, + 0xe8, 0x22, 0x19, 0xa7, 0x57, 0x34, 0xaf, 0xd9, 0x72, 0x5a, 0xa6, 0x0b, + 0x5a, 0x71, 0x1e, 0x41, 0xc1, 0xc4, 0xb5, 0x88, 0xf3, 0xb2, 0xe0, 0xb5, + 0xc3, 0x07, 0x34, 0xf7, 0xfb, 0x3c, 0x2d, 0x99, 0xd0, 0xf9, 0x0b, 0x5a, + 0xe9, 0xb2, 0xb0, 0xe6, 0x98, 0xba, 0xa8, 0x9f, 0x11, 0x51, 0x13, 0xad, + 0x70, 0x5c, 0x50, 0xa7, 0xfb, 0xae, 0xaf, 0xe8, 0xa6, 0x2c, 0x17, 0xfb, + 0xdb, 0xdb, 0x45, 0x5a, 0x26, 0x83, 0xbf, 0xd3, 0x21, 0xe9, 0x95, 0xf7, + 0x59, 0xaf, 0xbc, 0xc9, 0x93, 0xe4, 0x1f, 0x03, 0xa2, 0x59, 0xf7, 0x20, + 0x75, 0xc9, 0xfb, 0xc8, 0xc3, 0xba, 0x4e, 0xb8, 0x83, 0xbf, 0x2d, 0x93, + 0x39, 0x37, 0x48, 0x43, 0x88, 0xa7, 0x8b, 0x9b, 0x98, 0x76, 0x33, 0x21, + 0xf2, 0xe3, 0x63, 0x47, 0x04, 0xc2, 0x23, 0x92, 0x83, 0xf7, 0xe3, 0x4f, + 0x8d, 0x3e, 0xaf, 0xd0, 0x25, 0xfd, 0x3b, 0xd0, 0x97, 0x62, 0x5a, 0x6b, + 0xea, 0x6c, 0x9b, 0x89, 0xea, 0xc7, 0xdd, 0xfe, 0xee, 0xce, 0xce, 0x4f, + 0x83, 0xf2, 0xa1, 0xfc, 0xc8, 0x17, 0x76, 0x76, 0xfc, 0x2b, 0xfc, 0xf4, + 0x26, 0xcf, 0x38, 0x9a, 0x12, 0xd1, 0x70, 0xff, 0x3f, 0x27, 0x79, 0x56, + 0x6c, 0xb5, 0x34, 0x35, 0x4d, 0x4a, 0x3a, 0x62, 0x41, 0x3b, 0x71, 0xff, + 0x67, 0xe9, 0xd6, 0x1e, 0x7e, 0x9b, 0x45, 0xf3, 0xa4, 0xc0, 0xaa, 0x0a, + 0xeb, 0x08, 0xa6, 0x4d, 0xdb, 0xef, 0x19, 0x48, 0x5c, 0xe2, 0xdb, 0x59, + 0x36, 0x23, 0x1a, 0xe8, 0xd1, 0xc1, 0x2c, 0xdd, 0x62, 0xd1, 0xb9, 0x73, + 0x0c, 0x27, 0x21, 0x7e, 0x14, 0x4f, 0x99, 0x15, 0x15, 0xd4, 0x30, 0x0d, + 0x96, 0x18, 0x40, 0x12, 0x8f, 0x6f, 0xa2, 0x8c, 0xde, 0xce, 0x9b, 0x9b, + 0x12, 0xcf, 0x57, 0x83, 0x2c, 0xbf, 0xde, 0x8e, 0xf3, 0xf1, 0x4d, 0x7a, + 0x47, 0x2b, 0xf3, 0xe2, 0xc5, 0xf3, 0x3e, 0xfd, 0xf3, 0xe2, 0xa7, 0xed, + 0xbb, 0x6c, 0x4a, 0x0b, 0xf5, 0xf4, 0xa7, 0x6d, 0xde, 0xee, 0xbf, 0xc7, + 0xbd, 0x51, 0x6f, 0xfc, 0x8f, 0xc1, 0x4d, 0x39, 0x9b, 0x3e, 0x46, 0x45, + 0xd4, 0x5e, 0x14, 0xcf, 0xb2, 0xe5, 0xbc, 0x74, 0x84, 0x43, 0x34, 0x58, + 0x06, 0xdc, 0x69, 0x9a, 0xce, 0xe9, 0xcc, 0x12, 0xa5, 0xaf, 0xe4, 0xc4, + 0x8e, 0x12, 0x7f, 0xb8, 0xcb, 0xf1, 0x0d, 0x4d, 0x95, 0x28, 0x29, 0xd6, + 0x65, 0x28, 0x53, 0x9a, 0x0c, 0xbd, 0x36, 0xa7, 0x43, 0x9c, 0x4a, 0x3b, + 0xd2, 0x55, 0x4a, 0xcf, 0x65, 0xf9, 0x24, 0xc9, 0x3d, 0x4d, 0x0f, 0x53, + 0x5a, 0x35, 0x39, 0xb5, 0x9f, 0x0e, 0x76, 0x9f, 0x0d, 0x76, 0xdd, 0x02, + 0xd1, 0x56, 0x66, 0x6e, 0x88, 0xd4, 0x74, 0x99, 0x2c, 0x68, 0x38, 0x4b, + 0x66, 0x7f, 0x72, 0x8a, 0xb9, 0xdd, 0x88, 0x4e, 0xf1, 0x35, 0xb1, 0x1d, + 0xb7, 0x94, 0xc4, 0xf9, 0x6f, 0xe2, 0xb2, 0x42, 0x92, 0xbc, 0xba, 0xab, + 0xe8, 0x2d, 0x6d, 0xbd, 0x31, 0x96, 0x3c, 0x92, 0x3d, 0x6e, 0xae, 0xec, + 0xfd, 0xfd, 0xfd, 0x7a, 0xda, 0xdb, 0xdf, 0xad, 0x91, 0x5f, 0xf0, 0x52, + 0x1b, 0xd1, 0xec, 0xef, 0x55, 0xc9, 0xe6, 0xe4, 0x2a, 0xc2, 0xc0, 0xfc, + 0xc2, 0x33, 0xdb, 0x70, 0x5c, 0xde, 0xb8, 0x06, 0xb5, 0x48, 0xbf, 0x27, + 0x57, 0xe9, 0x43, 0x4f, 0x16, 0x06, 0x2b, 0x1e, 0x53, 0xfb, 0xb3, 0x05, + 0x93, 0x86, 0x35, 0x77, 0xbd, 0x4c, 0x0a, 0xe2, 0x8c, 0x3c, 0x5d, 0x7b, + 0x15, 0xcd, 0xcf, 0xd2, 0xeb, 0x9b, 0x32, 0xba, 0x8f, 0x99, 0xeb, 0x9c, + 0x94, 0xf2, 0x36, 0xb3, 0x77, 0xe2, 0x34, 0x57, 0x31, 0xf1, 0x8b, 0x88, + 0xc9, 0x4b, 0x98, 0x39, 0x53, 0xa4, 0xe3, 0x3b, 0xb4, 0x48, 0x42, 0x70, + 0x51, 0x70, 0xf1, 0x8d, 0xe2, 0x82, 0x37, 0x6d, 0x4e, 0x84, 0x51, 0xd2, + 0x0d, 0xb1, 0xe4, 0xbf, 0x6e, 0xe8, 0x0a, 0x88, 0xe6, 0xf1, 0x2c, 0xd1, + 0x61, 0x32, 0xcf, 0x7c, 0x4d, 0x8b, 0x9a, 0x3c, 0xc4, 0x33, 0xc7, 0xc6, + 0x88, 0x29, 0xf5, 0xb0, 0x4f, 0xee, 0x69, 0x3a, 0x18, 0x25, 0x11, 0x25, + 0x9f, 0x1a, 0x1c, 0xc4, 0x0e, 0x1f, 0xb6, 0x4e, 0x38, 0xc5, 0x02, 0x77, + 0x04, 0x96, 0x88, 0x87, 0x1f, 0x05, 0x93, 0xa5, 0x25, 0x8b, 0x6f, 0xf9, + 0x36, 0xaa, 0x5d, 0x7a, 0xf2, 0x66, 0x34, 0xa1, 0x19, 0xa5, 0xc4, 0xf7, + 0x46, 0x74, 0x2c, 0x79, 0x7a, 0x34, 0x4e, 0x59, 0x19, 0x6e, 0x6c, 0x41, + 0x0d, 0xf3, 0x87, 0x69, 0xc9, 0x1c, 0x07, 0x02, 0x07, 0x56, 0x86, 0x8e, + 0xea, 0x3c, 0x0b, 0xe7, 0xcf, 0x43, 0xa3, 0xe7, 0xee, 0xe2, 0x69, 0x4a, + 0x62, 0x43, 0xe2, 0x5e, 0x00, 0x67, 0x1f, 0xf3, 0xad, 0x38, 0x9d, 0xae, + 0x88, 0x08, 0xf3, 0x9c, 0xe5, 0x32, 0xde, 0x3c, 0xe2, 0x66, 0x7c, 0x78, + 0xa2, 0x59, 0x42, 0xb7, 0x49, 0x65, 0x39, 0x53, 0xe6, 0x6d, 0x44, 0xb4, + 0x74, 0x43, 0x81, 0xfe, 0xe8, 0x26, 0xc1, 0x21, 0xc7, 0xd4, 0x31, 0x34, + 0x6e, 0x7d, 0x3c, 0x4e, 0x16, 0x65, 0xe1, 0xe7, 0x74, 0xd8, 0xb2, 0xdf, + 0x74, 0x77, 0xf2, 0xba, 0x87, 0xf7, 0x2d, 0x16, 0xd6, 0xf1, 0x7e, 0x7f, + 0xe5, 0xb2, 0x00, 0xd0, 0xa3, 0x43, 0xe0, 0xe6, 0xc4, 0xfd, 0xd0, 0x19, + 0xc0, 0xa2, 0xcf, 0x78, 0xa4, 0xfc, 0x6c, 0x21, 0xf2, 0x10, 0xce, 0x25, + 0xef, 0xa2, 0x08, 0x44, 0xd2, 0x2d, 0x2d, 0x08, 0x2f, 0xa6, 0xbf, 0x57, + 0xa8, 0x57, 0xb7, 0xa7, 0xdc, 0x7d, 0x41, 0xb2, 0x24, 0x31, 0xf5, 0x49, + 0x71, 0x43, 0xd7, 0x70, 0xc1, 0x3c, 0x81, 0x67, 0x3a, 0x23, 0x8a, 0xb9, + 0xe3, 0x1d, 0x5e, 0x24, 0xc9, 0x64, 0x10, 0x9d, 0x5d, 0xf1, 0x51, 0xcd, + 0x69, 0xd0, 0x25, 0xbe, 0x66, 0x7e, 0x42, 0x2b, 0x37, 0x81, 0xb0, 0x35, + 0x77, 0xac, 0x03, 0x63, 0x09, 0x58, 0x03, 0x58, 0x08, 0x0d, 0x75, 0x5a, + 0x65, 0x3c, 0x90, 0x1a, 0xf8, 0x38, 0xf3, 0xe0, 0x68, 0x8b, 0xa3, 0x08, + 0x64, 0x48, 0xbf, 0x95, 0xf7, 0x49, 0x32, 0xf7, 0x6c, 0x94, 0x78, 0x1e, + 0x6f, 0x1b, 0x08, 0x23, 0x9d, 0xdf, 0x65, 0x3c, 0xc0, 0x8d, 0x8d, 0xf3, + 0x8b, 0xb3, 0xaf, 0x2e, 0x8e, 0x87, 0xc3, 0xe8, 0xcd, 0xf1, 0xe5, 0xf1, + 0x45, 0x95, 0x7a, 0xe6, 0x59, 0x3e, 0xc3, 0xa6, 0x46, 0x93, 0xb4, 0x58, + 0x4c, 0xe3, 0x15, 0x6f, 0x37, 0xcd, 0xe5, 0x3a, 0xe7, 0xb3, 0x35, 0x4b, + 0x98, 0xd9, 0x4c, 0x96, 0x39, 0x38, 0xfd, 0x82, 0xf6, 0x4f, 0xa5, 0x1d, + 0xba, 0xc4, 0x21, 0x22, 0xcd, 0xaf, 0xfd, 0x4a, 0x27, 0x01, 0x0b, 0xb5, + 0xcd, 0x60, 0xf9, 0x83, 0x05, 0xd0, 0x5e, 0xe4, 0x05, 0x52, 0x59, 0x23, + 0x16, 0x56, 0x79, 0x56, 0x7c, 0x8d, 0xcc, 0x20, 0x7f, 0xd0, 0xc5, 0x3f, + 0xf3, 0x72, 0x47, 0x72, 0x45, 0xf7, 0x05, 0xb1, 0x56, 0x4f, 0x1a, 0x5f, + 0x93, 0x3c, 0x03, 0xb9, 0x95, 0x97, 0x68, 0x9c, 0xe8, 0x0c, 0xdc, 0xb0, + 0xb1, 0xd0, 0x10, 0x76, 0x59, 0xfa, 0xa5, 0xd1, 0xd0, 0xd0, 0x67, 0xe9, + 0x9c, 0x28, 0x8e, 0x68, 0x54, 0x4f, 0x3e, 0x0d, 0xfc, 0xca, 0x9a, 0xe3, + 0x83, 0x21, 0x6b, 0x24, 0x0d, 0xd1, 0x5b, 0xb4, 0xef, 0xc4, 0x32, 0xdd, + 0x3c, 0x31, 0xc0, 0x14, 0xc7, 0x24, 0x1e, 0x31, 0x83, 0x62, 0xb1, 0x94, + 0x84, 0x89, 0x24, 0xec, 0xc6, 0xcd, 0x5f, 0x7b, 0xeb, 0xf1, 0x39, 0xe4, + 0x51, 0xc5, 0x23, 0xde, 0x5c, 0x1e, 0x48, 0x6d, 0x39, 0xe9, 0x44, 0x81, + 0xcb, 0xdc, 0xa7, 0x05, 0x4e, 0xd8, 0x7d, 0xb6, 0x9c, 0x92, 0x50, 0xc8, + 0x0f, 0x2c, 0x17, 0xe1, 0x72, 0x52, 0x97, 0x0b, 0xea, 0x75, 0x96, 0x3e, + 0x40, 0x7c, 0xa9, 0xb5, 0x42, 0x63, 0xa3, 0x3f, 0x17, 0xb4, 0x1d, 0x32, + 0x9e, 0x41, 0xc8, 0x66, 0x21, 0x59, 0x32, 0x07, 0x69, 0x6c, 0x26, 0x1f, + 0x1c, 0xb0, 0xbe, 0xf3, 0xb3, 0xe1, 0x25, 0xdf, 0x04, 0xe7, 0xef, 0x2e, + 0xa9, 0x21, 0xba, 0xb6, 0x8a, 0x92, 0x36, 0x96, 0x5f, 0x9c, 0x27, 0x10, + 0xc1, 0xad, 0x39, 0xda, 0xc3, 0x14, 0xe7, 0x5d, 0x2f, 0x1c, 0xeb, 0xd4, + 0xc6, 0x07, 0x9d, 0x82, 0x49, 0xd9, 0x34, 0x8a, 0xe2, 0x26, 0xa1, 0x83, + 0xe4, 0x5e, 0xdb, 0xfc, 0x7c, 0xab, 0x17, 0xf5, 0x5d, 0x73, 0x3f, 0xf2, + 0xa3, 0x3f, 0x71, 0xcf, 0x45, 0x3a, 0x4b, 0xa7, 0x71, 0x70, 0x17, 0x3a, + 0x96, 0xe4, 0x8f, 0xe6, 0x98, 0xd8, 0x2f, 0xc6, 0xec, 0xe5, 0x70, 0x5e, + 0x40, 0x9c, 0x6b, 0xbf, 0x51, 0x93, 0x2c, 0x91, 0xf7, 0x58, 0x18, 0x76, + 0x1c, 0x88, 0xb7, 0x8c, 0x8f, 0x7c, 0x65, 0x99, 0xea, 0xd4, 0xd1, 0x58, + 0x36, 0x66, 0xe9, 0x50, 0xcb, 0xdc, 0xc2, 0x75, 0x46, 0x71, 0xde, 0x71, + 0xcc, 0x4c, 0x05, 0x9e, 0x3c, 0xb9, 0x5e, 0xd2, 0xe0, 0x65, 0x55, 0x69, + 0x7e, 0x9f, 0xf0, 0xd0, 0x59, 0x28, 0x77, 0x87, 0x9b, 0xa4, 0xbd, 0xf9, + 0x64, 0xb0, 0x71, 0x06, 0x55, 0xcd, 0xe9, 0x75, 0x27, 0x7c, 0x27, 0xcf, + 0x99, 0x13, 0xf6, 0x20, 0x86, 0x8f, 0x48, 0x5f, 0x4b, 0x40, 0x75, 0xc2, + 0xd8, 0xe2, 0x3c, 0x89, 0x92, 0x39, 0x13, 0xcf, 0x44, 0x58, 0x65, 0xbf, + 0x2f, 0x5f, 0x61, 0xc7, 0x57, 0x74, 0x9d, 0xc7, 0xd7, 0x71, 0xea, 0xce, + 0xbc, 0x12, 0xda, 0x24, 0xb2, 0x87, 0xe7, 0x99, 0x3e, 0xcf, 0x9c, 0x89, + 0x99, 0xac, 0x6e, 0xea, 0x12, 0xbc, 0x28, 0xe1, 0x3b, 0x8a, 0xf6, 0x04, + 0x6b, 0xab, 0xed, 0xf2, 0xd5, 0x64, 0xcd, 0x8d, 0x70, 0x0d, 0xf3, 0x9d, + 0x06, 0xca, 0xc4, 0x2d, 0x45, 0x2d, 0x76, 0x06, 0xfe, 0xf4, 0x41, 0xa0, + 0x49, 0x59, 0x97, 0xa2, 0x9b, 0xe6, 0x9e, 0x65, 0xbb, 0xa2, 0x24, 0xfe, + 0x01, 0xfe, 0x86, 0xcf, 0x68, 0x9c, 0x8e, 0x23, 0xdd, 0x64, 0xf7, 0x42, + 0x36, 0x6e, 0x16, 0xd4, 0x46, 0x91, 0xe2, 0x3a, 0xe5, 0xcf, 0x67, 0x83, + 0x68, 0x13, 0x0c, 0x94, 0xb8, 0x2c, 0xdf, 0x04, 0x7e, 0x16, 0x6e, 0x41, + 0xee, 0x63, 0x27, 0xb0, 0xc7, 0x93, 0x89, 0x08, 0x5a, 0x2c, 0x2a, 0xbd, + 0x18, 0xec, 0x0c, 0xd8, 0x46, 0x90, 0xdc, 0xa5, 0x19, 0xe9, 0x7b, 0x7c, + 0x07, 0xf1, 0x45, 0xeb, 0xde, 0x8b, 0x58, 0xfb, 0xe1, 0x1b, 0xf4, 0xfa, + 0x1a, 0xeb, 0x93, 0xcd, 0xb7, 0x49, 0x41, 0x8c, 0x02, 0xf6, 0x9b, 0x93, + 0x72, 0x02, 0xce, 0xc3, 0x6b, 0x63, 0x72, 0x2c, 0x88, 0x2e, 0xe4, 0xbd, + 0xba, 0x9a, 0x5b, 0x8e, 0x4e, 0xfa, 0xf1, 0x76, 0xbf, 0x1f, 0x2f, 0x58, + 0xb1, 0xa9, 0x99, 0x03, 0x36, 0x89, 0x48, 0xb7, 0x59, 0x13, 0xde, 0x8a, + 0xbe, 0x63, 0x79, 0x03, 0x5c, 0x9a, 0xe5, 0xc2, 0xb9, 0x53, 0x21, 0xb1, + 0x74, 0x22, 0x91, 0xf0, 0x21, 0x31, 0xce, 0xd3, 0xda, 0x9c, 0x51, 0x6a, + 0x9c, 0xb3, 0x14, 0x87, 0x4b, 0xce, 0x51, 0x21, 0x8f, 0x37, 0xa2, 0x1b, + 0x27, 0x37, 0xed, 0x86, 0xf6, 0x6b, 0x20, 0x12, 0x16, 0x4e, 0x29, 0x3f, + 0x5d, 0x6b, 0x8e, 0x0f, 0xc9, 0xbc, 0x4b, 0x2b, 0x94, 0x3c, 0xa4, 0xac, + 0xc2, 0xf2, 0x0e, 0xab, 0xf4, 0xc0, 0x57, 0xca, 0x38, 0xc7, 0x62, 0x0c, + 0x20, 0xde, 0x97, 0x89, 0x1c, 0x31, 0x0c, 0xf7, 0x6a, 0x1a, 0x5f, 0x13, + 0x1d, 0xd5, 0x9a, 0x23, 0x4d, 0x3d, 0x63, 0xf6, 0x4e, 0xdc, 0xb5, 0x20, + 0xf1, 0x9e, 0x34, 0xe2, 0xaf, 0xf5, 0x22, 0x2d, 0xa2, 0x4d, 0x62, 0xd0, + 0xd3, 0x25, 0xb4, 0x8c, 0x33, 0x9a, 0x18, 0x7d, 0xb5, 0xe5, 0xcf, 0x59, + 0xff, 0x80, 0xd6, 0x8f, 0xb5, 0xee, 0x7e, 0x4c, 0x27, 0xa1, 0x8c, 0x5e, + 0xca, 0x8f, 0xa2, 0xe4, 0x5b, 0xe6, 0xf3, 0xfa, 0x92, 0x32, 0xaf, 0xda, + 0x8a, 0x86, 0x2a, 0x30, 0xf2, 0xdc, 0xde, 0xf1, 0xab, 0x07, 0xc1, 0x3b, + 0xbc, 0x50, 0x05, 0x2d, 0x9f, 0x2d, 0x18, 0xd8, 0x9b, 0x0c, 0x65, 0x50, + 0x6b, 0x6e, 0xc8, 0x23, 0xa5, 0xf9, 0xc6, 0x13, 0x26, 0x18, 0xb9, 0x8f, + 0xa3, 0xc3, 0xaf, 0x4e, 0x88, 0x5c, 0xae, 0x48, 0x1d, 0xa5, 0x59, 0x61, + 0x01, 0x59, 0x7d, 0xa6, 0x1b, 0x99, 0xd8, 0x32, 0xcd, 0x1b, 0x6b, 0x46, + 0x7a, 0x63, 0x28, 0x8d, 0xe9, 0xff, 0x3a, 0x6f, 0xb2, 0x9f, 0x69, 0x01, + 0xe3, 0xed, 0xa7, 0x83, 0x1d, 0x3a, 0x23, 0x97, 0xa4, 0xb5, 0xcc, 0xc7, + 0xd9, 0x84, 0x94, 0xf9, 0x69, 0x3c, 0xbf, 0x2d, 0x22, 0xd0, 0x2a, 0xf6, + 0x43, 0x46, 0xca, 0x77, 0xd7, 0x32, 0xcf, 0xe9, 0x96, 0x9c, 0x44, 0xe1, + 0xe5, 0x61, 0xc7, 0x45, 0xa6, 0x23, 0x87, 0xc0, 0x04, 0x81, 0xe8, 0x6f, + 0x4b, 0xde, 0x8e, 0x59, 0x9c, 0xdf, 0x9a, 0xb4, 0xe1, 0xb4, 0x83, 0x51, + 0x82, 0x81, 0xe1, 0xf9, 0x66, 0x73, 0xfd, 0xaf, 0x69, 0xa1, 0xd9, 0x44, + 0xc0, 0x22, 0xbf, 0x9c, 0xbe, 0xcc, 0xe4, 0x12, 0xbf, 0x1d, 0x9e, 0xfb, + 0x61, 0xde, 0xfa, 0x20, 0x6b, 0x71, 0xd4, 0x32, 0x9b, 0x2a, 0x98, 0x12, + 0xe8, 0x4d, 0x3a, 0x9f, 0x62, 0x9d, 0x98, 0xc6, 0x74, 0xcc, 0x78, 0xe1, + 0x3c, 0xed, 0x34, 0xfb, 0xe6, 0xef, 0x99, 0x82, 0xba, 0x05, 0x4e, 0x41, + 0xb0, 0xfb, 0x7d, 0x62, 0xc9, 0x6c, 0x6e, 0x69, 0xdf, 0xe8, 0x4b, 0x3a, + 0x15, 0x85, 0x3b, 0x16, 0x57, 0xe9, 0xf5, 0x32, 0x4f, 0x84, 0x91, 0xc3, + 0x42, 0x63, 0x86, 0x19, 0x66, 0xbb, 0x37, 0x19, 0x88, 0x8f, 0xa4, 0xde, + 0x64, 0x7a, 0xd5, 0xab, 0x35, 0xc7, 0xc7, 0xd7, 0x58, 0x1e, 0xf8, 0x42, + 0x91, 0x8c, 0xd1, 0xd4, 0x3c, 0x51, 0xf6, 0x3d, 0xe3, 0x55, 0x65, 0xed, + 0x3e, 0x1a, 0x4f, 0xe3, 0x74, 0x56, 0x88, 0x56, 0xa0, 0xaa, 0x6b, 0x9d, + 0x6e, 0x2e, 0x55, 0x8a, 0x03, 0xc1, 0x8c, 0x58, 0x8a, 0xcc, 0x0b, 0x96, + 0x13, 0x79, 0xbb, 0x62, 0xbb, 0x3e, 0xd1, 0x29, 0xe9, 0x82, 0xe3, 0x5b, + 0x10, 0x25, 0x7a, 0x91, 0x9b, 0xa7, 0x5f, 0x6b, 0x4e, 0x36, 0xa5, 0xe0, + 0xf5, 0x5c, 0x16, 0x6c, 0x51, 0x2a, 0xd2, 0x11, 0x11, 0x24, 0x49, 0x55, + 0xcb, 0x31, 0x28, 0x80, 0xb5, 0x53, 0xd2, 0x83, 0xf3, 0x98, 0x65, 0xce, + 0x12, 0xb6, 0xb0, 0x08, 0x64, 0xd3, 0x27, 0x12, 0x59, 0xb4, 0x8e, 0x0e, + 0x36, 0x1f, 0x91, 0x0b, 0x2b, 0x4c, 0xa2, 0x50, 0xe9, 0x97, 0x8d, 0x2e, + 0x2a, 0x6a, 0x8e, 0x6b, 0xab, 0x59, 0x6b, 0x4e, 0xd6, 0xb6, 0x47, 0x42, + 0x7a, 0x4a, 0x2a, 0xb8, 0x69, 0x92, 0x24, 0x1c, 0x09, 0x5d, 0xf6, 0xfb, + 0xa4, 0x13, 0xa5, 0xe3, 0x1e, 0xff, 0x36, 0x49, 0x49, 0xf9, 0x2c, 0xf1, + 0xeb, 0xbc, 0x9c, 0xce, 0x7a, 0x51, 0xc8, 0xfd, 0xdd, 0x8e, 0xcf, 0x93, + 0xeb, 0x8c, 0x74, 0xe2, 0xb2, 0x49, 0x75, 0xe0, 0x34, 0xc2, 0x6a, 0x54, + 0x78, 0x70, 0xf4, 0x61, 0xa2, 0x00, 0xc9, 0x10, 0xc4, 0x8e, 0xd9, 0x8a, + 0x34, 0xe1, 0xd3, 0xc9, 0xc3, 0xa1, 0xa1, 0x08, 0x3f, 0xad, 0xf3, 0x24, + 0x88, 0xf5, 0x45, 0x49, 0x8c, 0xa7, 0xa7, 0x42, 0x22, 0xf1, 0xb8, 0x59, + 0xbc, 0xc2, 0x0e, 0x91, 0x34, 0xe2, 0x24, 0x00, 0x1c, 0x1c, 0x62, 0x20, + 0xe5, 0x7d, 0x3a, 0x56, 0xf1, 0x9a, 0x17, 0xa4, 0xce, 0x80, 0xd9, 0x00, + 0x30, 0x4d, 0xf9, 0xc1, 0xd9, 0x92, 0xf6, 0x97, 0xde, 0xe2, 0xcb, 0x56, + 0x54, 0x92, 0x7b, 0xda, 0xad, 0x81, 0x1c, 0x9b, 0x44, 0x44, 0x26, 0xba, + 0xed, 0x58, 0x92, 0x8b, 0xf3, 0x14, 0xca, 0x57, 0xa3, 0x39, 0x19, 0x33, + 0x4f, 0x32, 0x1c, 0x27, 0xbf, 0xae, 0x82, 0x8d, 0x17, 0x68, 0x70, 0xb4, + 0x98, 0x23, 0x05, 0x07, 0x67, 0x44, 0xa7, 0x59, 0xac, 0x8c, 0xd1, 0x4b, + 0xbe, 0xb3, 0x5f, 0xf1, 0x64, 0xd6, 0xf0, 0xcb, 0x73, 0x68, 0x7c, 0x37, + 0x55, 0x91, 0x27, 0xe0, 0x8b, 0xa2, 0xd6, 0x49, 0x6b, 0xa6, 0x0a, 0x32, + 0xed, 0xd7, 0x09, 0x95, 0x48, 0x33, 0x01, 0xab, 0x74, 0x6d, 0x2d, 0xfc, + 0x85, 0x4b, 0x3b, 0x93, 0xa4, 0x77, 0x6c, 0x39, 0x74, 0xda, 0x94, 0x34, + 0x0e, 0x53, 0x48, 0x67, 0x98, 0x94, 0xf5, 0xe6, 0x0e, 0xd1, 0xe1, 0x7e, + 0x47, 0xcd, 0x29, 0xb0, 0x1c, 0xa2, 0x55, 0x5d, 0x3a, 0x5a, 0x60, 0xb5, + 0x97, 0x5c, 0xb1, 0x5e, 0x42, 0x44, 0xd1, 0x61, 0xd3, 0xf9, 0xee, 0xab, + 0x6f, 0x0f, 0x4e, 0xdf, 0x1d, 0xef, 0xfe, 0xb9, 0x4e, 0x3d, 0xf4, 0xdd, + 0x9e, 0x7c, 0xb7, 0xd7, 0x69, 0xe3, 0x68, 0x44, 0x40, 0x51, 0xd4, 0x7d, + 0xd5, 0x25, 0x05, 0x76, 0x36, 0xca, 0xa6, 0x3c, 0x4b, 0xbb, 0x93, 0xc1, + 0xc9, 0x68, 0x14, 0x3d, 0x95, 0xf0, 0x4b, 0xb9, 0xfe, 0x64, 0x61, 0xf8, + 0xf6, 0xac, 0x8f, 0x1d, 0xfa, 0xbe, 0x6a, 0xd6, 0x20, 0x80, 0x78, 0x12, + 0x2e, 0x46, 0x51, 0xe2, 0x36, 0xd4, 0x0d, 0xe2, 0x96, 0x0b, 0xa1, 0x47, + 0x3a, 0x13, 0x38, 0x48, 0x75, 0x5e, 0x2f, 0x33, 0xe6, 0x29, 0xfb, 0x21, + 0x81, 0xeb, 0x16, 0x90, 0x8f, 0x52, 0x10, 0xd6, 0x8a, 0xa8, 0xb7, 0x1c, + 0xdf, 0x0c, 0xe8, 0xd2, 0x13, 0x9e, 0x92, 0x16, 0x7a, 0x3c, 0xeb, 0xfc, + 0x8e, 0xaf, 0x03, 0x56, 0xd1, 0xef, 0x68, 0x16, 0xb2, 0xf5, 0x1d, 0x1d, + 0x0b, 0x29, 0x85, 0xb4, 0x2f, 0x1d, 0x3d, 0xce, 0xa0, 0x2c, 0x58, 0x90, + 0x55, 0x03, 0xe4, 0xf3, 0x95, 0xd7, 0x9b, 0xa3, 0xb3, 0x93, 0xcd, 0xb8, + 0x47, 0x35, 0x6b, 0xb3, 0x5b, 0xc1, 0x18, 0x02, 0x9f, 0x27, 0x1a, 0x35, + 0xeb, 0xc0, 0x2b, 0x3d, 0x91, 0xdd, 0x3c, 0xd1, 0xe3, 0x2b, 0xea, 0x6e, + 0x9d, 0xf2, 0xa9, 0xb1, 0x11, 0x09, 0xdb, 0x4a, 0xda, 0x72, 0x59, 0x45, + 0xfd, 0x53, 0x22, 0xe8, 0x69, 0xa6, 0x0c, 0xdd, 0x0b, 0xad, 0x2a, 0xbd, + 0x44, 0x8e, 0x06, 0xb2, 0xab, 0x96, 0x73, 0xa9, 0xcf, 0x30, 0xcf, 0xc6, + 0x56, 0xd8, 0x40, 0xe5, 0x68, 0x39, 0x72, 0x22, 0xdd, 0x90, 0x56, 0x16, + 0x94, 0xaf, 0x4c, 0x97, 0x34, 0x8f, 0x96, 0xe6, 0xde, 0x26, 0x65, 0x31, + 0x8e, 0x17, 0xc9, 0xb6, 0xde, 0xe8, 0xb6, 0x91, 0xe8, 0x45, 0x06, 0xd2, + 0x64, 0x5e, 0x67, 0x97, 0xc7, 0x26, 0x26, 0xe9, 0x93, 0x5e, 0x97, 0x17, + 0x41, 0x36, 0x38, 0xb3, 0x7c, 0xc2, 0x20, 0x24, 0x2b, 0x93, 0x8e, 0x1b, + 0x02, 0xd5, 0x9c, 0xb4, 0xa9, 0x01, 0x8c, 0xab, 0x36, 0x19, 0x35, 0x35, + 0x1a, 0x71, 0xd9, 0xd9, 0xa0, 0x9e, 0x20, 0x6c, 0xe0, 0x63, 0xe7, 0x79, + 0xa8, 0x73, 0x1b, 0xbd, 0xfd, 0xfa, 0x63, 0x37, 0x86, 0xfe, 0x5f, 0x63, + 0x2f, 0x09, 0xa8, 0xd9, 0x1a, 0x0b, 0x45, 0x92, 0xfd, 0x9c, 0x44, 0xdf, + 0xbb, 0x44, 0xd7, 0x96, 0xd7, 0xab, 0xfd, 0xca, 0xf2, 0xda, 0x9e, 0xf1, + 0xeb, 0x23, 0x6a, 0x7e, 0xb2, 0x9c, 0x2d, 0x54, 0xd2, 0xf8, 0x5d, 0xdb, + 0x31, 0x14, 0x89, 0xea, 0x97, 0x8a, 0x16, 0xa3, 0xe4, 0x17, 0x09, 0x16, + 0x5f, 0x8a, 0x58, 0xd9, 0x8f, 0x8b, 0x71, 0x9a, 0xd6, 0xde, 0x3a, 0x86, + 0x46, 0x15, 0x1d, 0x0c, 0x0f, 0x4f, 0x4e, 0xbc, 0x25, 0xe2, 0x5e, 0x84, + 0x74, 0x9e, 0x06, 0xab, 0x97, 0xb4, 0x24, 0xec, 0xa2, 0x12, 0x5b, 0x1e, + 0x1c, 0x59, 0x32, 0x6e, 0xba, 0xfd, 0xda, 0x4e, 0x1b, 0x8f, 0x2f, 0x99, + 0x13, 0x6d, 0x8c, 0x45, 0x0a, 0x96, 0x86, 0x68, 0x3e, 0x6c, 0x17, 0x03, + 0x59, 0xd0, 0xa5, 0x55, 0xa8, 0x12, 0xf5, 0xe7, 0x72, 0xb5, 0x48, 0x5e, + 0x1d, 0x74, 0x44, 0x82, 0xab, 0xcf, 0x49, 0x16, 0x66, 0x1c, 0xd3, 0xf0, + 0xd5, 0x86, 0x21, 0xb7, 0x13, 0x6f, 0xf1, 0x44, 0x2d, 0x0f, 0xca, 0x1b, + 0xd9, 0x3a, 0x3e, 0x63, 0x11, 0x53, 0x6c, 0xc0, 0x74, 0x0b, 0x3d, 0xd9, + 0xab, 0xb3, 0x96, 0x15, 0x5d, 0xff, 0xb3, 0x22, 0x94, 0xb9, 0x70, 0x63, + 0xb7, 0x5f, 0x15, 0x35, 0x91, 0x8b, 0xc9, 0x06, 0xc7, 0xe5, 0x4b, 0x7e, + 0xa5, 0x26, 0x28, 0x0c, 0x9c, 0x20, 0xd4, 0xdc, 0x18, 0x33, 0xae, 0xf2, + 0x65, 0x5a, 0x93, 0x24, 0x97, 0xc5, 0x12, 0x36, 0xa6, 0x05, 0xc9, 0x4b, + 0xe5, 0x94, 0x18, 0x5c, 0x2f, 0x5a, 0xce, 0xf9, 0xa7, 0xd3, 0x4c, 0x23, + 0xaf, 0xb5, 0x7b, 0xe5, 0x07, 0xfa, 0x4d, 0x9e, 0xf2, 0x5c, 0xe3, 0x28, + 0xe4, 0xb5, 0x22, 0x8d, 0x6b, 0xfb, 0x2a, 0x3d, 0xb0, 0x63, 0x87, 0x1e, + 0x9b, 0xa4, 0xec, 0x04, 0xa4, 0x11, 0xd7, 0x77, 0xac, 0x55, 0x7c, 0xdc, + 0x2c, 0x96, 0xc4, 0xd0, 0x88, 0xe5, 0x3b, 0xf1, 0x25, 0x10, 0x69, 0x78, + 0x79, 0x4d, 0x76, 0xa9, 0x5f, 0x06, 0xc4, 0x64, 0x43, 0x8d, 0xa6, 0x3f, + 0x4e, 0x17, 0x37, 0x7c, 0x3a, 0x5e, 0x42, 0x03, 0x66, 0x29, 0x5b, 0x3e, + 0x68, 0x5c, 0xcf, 0xc3, 0xe1, 0xa9, 0x69, 0x33, 0x38, 0xe0, 0xe0, 0xa8, + 0xf6, 0xb6, 0x2e, 0x7f, 0x6a, 0xae, 0x07, 0x33, 0x77, 0x0a, 0x57, 0xe4, + 0xa6, 0xeb, 0x84, 0xe3, 0x3a, 0x12, 0x01, 0xc5, 0xec, 0xea, 0x30, 0xe0, + 0xda, 0x57, 0x83, 0xe8, 0x02, 0xc2, 0xe0, 0x72, 0xc1, 0xa7, 0x27, 0x82, + 0xeb, 0x52, 0xbf, 0xab, 0x35, 0x87, 0xc1, 0x87, 0x3b, 0x0a, 0x67, 0x5f, + 0xe5, 0xf0, 0x55, 0xd8, 0x66, 0x1a, 0x7c, 0x47, 0x44, 0xbf, 0x5f, 0x67, + 0x19, 0xde, 0x3b, 0x40, 0x92, 0xcd, 0xbc, 0x28, 0xa6, 0x70, 0xda, 0x4c, + 0xb2, 0x71, 0xb1, 0x4d, 0x0a, 0x6f, 0xb1, 0x6d, 0x03, 0xac, 0xb8, 0x67, + 0x8c, 0xb9, 0x0e, 0x87, 0x6e, 0x6e, 0x6c, 0x13, 0x81, 0xe4, 0xed, 0x76, + 0x77, 0xba, 0x12, 0xd6, 0x21, 0xda, 0xe5, 0xa9, 0xda, 0x12, 0xbf, 0x9a, + 0x2f, 0x2f, 0x4f, 0x87, 0x22, 0x57, 0xd4, 0x25, 0xc3, 0x25, 0xeb, 0x2a, + 0xb6, 0x3b, 0x61, 0xe3, 0xb8, 0xaf, 0xe4, 0x0e, 0x18, 0x0e, 0x0f, 0xf1, + 0xe1, 0x70, 0xc9, 0x6a, 0x01, 0x75, 0x93, 0xaf, 0x22, 0x55, 0x82, 0x6b, + 0xcd, 0xf1, 0x6c, 0x6d, 0x7e, 0x62, 0xe6, 0xca, 0xf2, 0xd5, 0xe0, 0x2a, + 0x99, 0x64, 0x79, 0x3c, 0x20, 0x56, 0x4d, 0x24, 0x09, 0x4f, 0x08, 0xe6, + 0x4a, 0xc7, 0xf5, 0x3d, 0xcd, 0x1e, 0xd3, 0xfc, 0xe4, 0x88, 0x9f, 0xae, + 0x93, 0x13, 0x5d, 0xdb, 0x49, 0xf1, 0x61, 0x8d, 0x0c, 0x17, 0x87, 0x39, + 0xcb, 0xd8, 0x5a, 0x5a, 0xb4, 0xb1, 0x4d, 0x3b, 0x35, 0x2d, 0xb7, 0x1c, + 0xec, 0x8e, 0x15, 0xc6, 0x40, 0x83, 0x5c, 0xb0, 0x91, 0x2b, 0x99, 0xb4, + 0x73, 0x87, 0x0b, 0x53, 0x6d, 0x22, 0xff, 0xa4, 0x37, 0xa8, 0xd5, 0x23, + 0x08, 0x88, 0x31, 0x5e, 0x67, 0x39, 0x31, 0xbc, 0x59, 0xd1, 0x20, 0x2d, + 0xf1, 0x3f, 0xab, 0x7e, 0x45, 0x03, 0x17, 0x03, 0x66, 0xb9, 0xcc, 0x65, + 0xf1, 0x97, 0xf3, 0xa0, 0x03, 0x5a, 0xb6, 0xe5, 0x0c, 0x5e, 0x63, 0x5b, + 0x85, 0x76, 0x8e, 0x69, 0x6b, 0x22, 0x3c, 0xc7, 0xc9, 0x9f, 0xb0, 0x06, + 0x14, 0xa2, 0x45, 0x2d, 0xe7, 0xde, 0x1b, 0x29, 0xda, 0x39, 0xeb, 0xe1, + 0x75, 0xf9, 0xc4, 0x79, 0x1d, 0xf2, 0x84, 0x9f, 0xe5, 0x37, 0x69, 0x11, + 0xb3, 0xbc, 0xba, 0x54, 0x38, 0x8f, 0x7d, 0x5e, 0x78, 0xe6, 0xc9, 0x2f, + 0x49, 0xa5, 0xcc, 0xa8, 0x9f, 0xfa, 0x19, 0x7f, 0x13, 0x3f, 0xa4, 0xb3, + 0xe5, 0x4c, 0xec, 0xd9, 0x62, 0x02, 0xd0, 0x27, 0x23, 0xef, 0x9b, 0x23, + 0x7e, 0x98, 0xdd, 0xd7, 0x8e, 0x79, 0xcd, 0xa2, 0xec, 0xac, 0xfa, 0x98, + 0x13, 0x7f, 0x47, 0x52, 0xdb, 0x40, 0xb5, 0x3d, 0x35, 0xb7, 0xcd, 0xd8, + 0xe7, 0x23, 0x77, 0x76, 0xd0, 0x4e, 0xb4, 0xb8, 0x89, 0x8b, 0x84, 0x59, + 0x18, 0xdd, 0xac, 0x6d, 0x53, 0x25, 0xe1, 0xad, 0x70, 0x6f, 0x24, 0x0d, + 0x7e, 0x4d, 0x9b, 0x49, 0x82, 0x33, 0x2e, 0x68, 0x5a, 0x5e, 0xc4, 0x03, + 0xc8, 0x95, 0xd7, 0x62, 0x63, 0x98, 0xd1, 0xad, 0x3b, 0x8b, 0x1f, 0xb0, + 0x2a, 0x26, 0xc4, 0xfd, 0x5a, 0x94, 0xac, 0xb2, 0x71, 0xb0, 0x09, 0x35, + 0x59, 0xe6, 0x25, 0x04, 0x11, 0x96, 0xcc, 0xeb, 0x9b, 0xe0, 0x0c, 0x46, + 0x99, 0xf2, 0x58, 0x3c, 0xe9, 0xcc, 0xe2, 0x76, 0xdb, 0x89, 0x39, 0x9f, + 0xed, 0xb0, 0x26, 0x72, 0xc5, 0x57, 0xb0, 0xae, 0x37, 0x05, 0xd8, 0xc5, + 0x34, 0x01, 0x0d, 0x39, 0x25, 0x6d, 0xa0, 0xde, 0x2a, 0x69, 0xa4, 0x88, + 0x2a, 0xcd, 0x54, 0xd4, 0xa4, 0x78, 0xd2, 0xa6, 0xa7, 0xc6, 0x81, 0xb4, + 0x88, 0xd1, 0xc5, 0x30, 0x5a, 0x32, 0x9f, 0x8a, 0xb5, 0x35, 0xd7, 0x9c, + 0xd7, 0xb5, 0xf0, 0x6e, 0xad, 0x39, 0x33, 0x66, 0x80, 0x52, 0x36, 0x8b, + 0x2d, 0xa8, 0xa5, 0x73, 0x2f, 0x46, 0x32, 0xff, 0xbc, 0x9d, 0x67, 0xf7, + 0xa4, 0x6d, 0xce, 0x33, 0xe9, 0xcb, 0xd6, 0x97, 0xc7, 0xde, 0xe0, 0x46, + 0x89, 0xde, 0x38, 0x8d, 0x27, 0x4b, 0x27, 0x2f, 0x09, 0xcd, 0x99, 0xd4, + 0x6c, 0x03, 0x6d, 0xb5, 0x3b, 0xaa, 0xf4, 0x1c, 0xba, 0x7f, 0x93, 0x32, + 0x14, 0xe2, 0x4d, 0xb3, 0x72, 0xbe, 0xaf, 0x49, 0x5c, 0xdc, 0xf4, 0xa2, + 0x4e, 0xbf, 0xd3, 0x6b, 0xa1, 0xb8, 0xba, 0x6c, 0x6c, 0xe3, 0x72, 0xc2, + 0x52, 0xbb, 0x9c, 0xae, 0x8a, 0xba, 0x8e, 0x93, 0x89, 0x87, 0xc4, 0xba, + 0x2e, 0x74, 0x7a, 0xb5, 0x7c, 0xf2, 0x85, 0xef, 0x1b, 0x13, 0x7a, 0xbc, + 0xbf, 0xc9, 0xa6, 0xad, 0x27, 0x28, 0x50, 0xd5, 0x33, 0x6e, 0x06, 0xd6, + 0x43, 0x76, 0x01, 0xb3, 0x24, 0x5d, 0x63, 0x22, 0xd1, 0x78, 0x9a, 0xc4, + 0xf9, 0x74, 0xa5, 0x5a, 0x5c, 0xfd, 0x04, 0xdd, 0xc9, 0x54, 0xd8, 0xc6, + 0x1b, 0x13, 0x75, 0xe6, 0x73, 0x5e, 0x5f, 0x75, 0x6b, 0x25, 0x13, 0x09, + 0x9a, 0x28, 0xc5, 0x94, 0xaf, 0xab, 0x26, 0x6a, 0xc4, 0x5d, 0xca, 0x56, + 0xa3, 0xc6, 0x6a, 0x27, 0xc9, 0x64, 0x14, 0x8f, 0x6f, 0xb1, 0xd2, 0x68, + 0x53, 0x5c, 0x57, 0x7c, 0xfe, 0x9c, 0xa1, 0x89, 0x48, 0xf9, 0x86, 0x0e, + 0x5e, 0x91, 0x96, 0xcb, 0x78, 0xdd, 0x89, 0xad, 0x0a, 0xed, 0x1f, 0x3c, + 0xb4, 0x55, 0x5a, 0x6e, 0xd3, 0x9d, 0xd7, 0x1c, 0xe9, 0x43, 0x1c, 0x69, + 0x12, 0xcd, 0xe6, 0x4b, 0x92, 0xdd, 0x89, 0xad, 0x66, 0x57, 0x57, 0x44, + 0x20, 0x9f, 0x37, 0x4c, 0x07, 0xf2, 0xc8, 0xf6, 0x85, 0x06, 0x52, 0xb9, + 0x23, 0x56, 0x75, 0xff, 0xf2, 0x85, 0x2d, 0xab, 0x74, 0x9d, 0xf2, 0x5e, + 0x44, 0xd2, 0x5c, 0xd3, 0x64, 0x56, 0x7f, 0x22, 0xf2, 0xeb, 0x2b, 0x3e, + 0x92, 0x20, 0x0c, 0x6b, 0xb4, 0x12, 0xa5, 0x3a, 0x2e, 0xeb, 0xd1, 0x1f, + 0xc6, 0xa4, 0x6f, 0xd3, 0xc5, 0x82, 0x37, 0x0b, 0x01, 0x1a, 0xce, 0xc4, + 0xc3, 0xad, 0x8d, 0x92, 0xeb, 0x74, 0x3e, 0x0f, 0x43, 0x65, 0xb2, 0x65, + 0x3e, 0x76, 0x0a, 0xec, 0x28, 0xa1, 0xf3, 0x51, 0x6f, 0xce, 0x4c, 0x12, + 0xde, 0x89, 0xaa, 0x26, 0x9c, 0x09, 0xa2, 0x6e, 0x8c, 0xfd, 0x9c, 0x5c, + 0xc9, 0x9e, 0x40, 0xc5, 0x50, 0x8b, 0x58, 0xdb, 0x91, 0x79, 0xed, 0xed, + 0x3e, 0xe6, 0xda, 0x18, 0x9e, 0xfc, 0xcf, 0x63, 0xef, 0xf0, 0x36, 0x23, + 0x04, 0x69, 0x31, 0x4c, 0xdd, 0x0d, 0x72, 0x78, 0x47, 0x77, 0x7d, 0xa7, + 0x7f, 0x18, 0xf5, 0x3b, 0x18, 0x48, 0xc5, 0x73, 0xb1, 0x2c, 0x33, 0x3a, + 0xde, 0x1a, 0x1a, 0x80, 0xe8, 0x2e, 0xa6, 0x37, 0xd6, 0xad, 0xf2, 0x64, + 0x5b, 0xfc, 0x3f, 0x59, 0x83, 0x5f, 0x61, 0x0b, 0x65, 0xb1, 0x6d, 0x96, + 0x30, 0x43, 0x95, 0xea, 0x36, 0x11, 0x0b, 0x86, 0xec, 0x8f, 0xb8, 0x19, + 0xb7, 0xa1, 0x1e, 0x8b, 0xcb, 0xbc, 0xa9, 0x2a, 0xa8, 0xa1, 0x58, 0xdc, + 0x82, 0x2d, 0x2c, 0xe0, 0xd7, 0xbb, 0x81, 0xfa, 0xc2, 0x2d, 0x48, 0x4d, + 0xc8, 0xeb, 0xe3, 0xa8, 0xf8, 0x7c, 0x88, 0xa4, 0xff, 0x4a, 0x32, 0x4d, + 0xcd, 0xe4, 0x61, 0x6e, 0xad, 0x5e, 0x35, 0x7a, 0x43, 0xda, 0x6c, 0xb3, + 0x72, 0xd0, 0x05, 0x4d, 0x22, 0x51, 0xcc, 0xa1, 0x29, 0x6c, 0x2a, 0x61, + 0x7f, 0xb7, 0x4a, 0x9b, 0xd1, 0x4d, 0x4a, 0x63, 0xcf, 0xc7, 0x37, 0x2b, + 0xbe, 0x2e, 0xd8, 0x00, 0xc9, 0xce, 0x9b, 0x4b, 0x3f, 0xcb, 0x3a, 0xdb, + 0x42, 0x1f, 0x6a, 0x15, 0x4c, 0x59, 0x63, 0x60, 0x7d, 0x28, 0x9b, 0x1b, + 0xfd, 0xd4, 0xc6, 0x47, 0x64, 0x71, 0xc3, 0x44, 0x9b, 0x4c, 0x59, 0x02, + 0xa0, 0x05, 0x6c, 0x1b, 0x5d, 0x3f, 0x0b, 0x38, 0x38, 0xb6, 0x8d, 0xee, + 0x17, 0x6a, 0x9c, 0x39, 0xa1, 0x18, 0xb0, 0xa4, 0x2b, 0xb6, 0xc2, 0x4a, + 0x6f, 0x74, 0x19, 0x4d, 0xf9, 0x42, 0x5c, 0xd5, 0x9a, 0x53, 0x9f, 0x94, + 0xbe, 0x6e, 0x6b, 0x6f, 0x3e, 0xa9, 0xfa, 0x76, 0x5e, 0x66, 0xfa, 0x95, + 0x5d, 0x7d, 0xb6, 0x2a, 0xa2, 0x53, 0xd5, 0xb5, 0x7a, 0x09, 0x4e, 0x45, + 0x7c, 0x4f, 0xbf, 0x7f, 0x55, 0x36, 0xac, 0x9c, 0xc1, 0x96, 0x56, 0x77, + 0x7a, 0x7a, 0x05, 0x9f, 0xde, 0x16, 0x73, 0x1f, 0xa2, 0x94, 0x32, 0x3a, + 0x7d, 0xcd, 0xd4, 0x76, 0x78, 0x41, 0x3f, 0x53, 0x73, 0xea, 0x31, 0x5b, + 0x47, 0x90, 0x29, 0x2b, 0xe4, 0x6f, 0xbe, 0x1d, 0x46, 0x9b, 0x67, 0xc3, + 0xed, 0x27, 0x2f, 0x76, 0xb6, 0xea, 0x6d, 0xf1, 0x4a, 0x41, 0x62, 0x69, + 0x35, 0xda, 0x0e, 0xb7, 0x39, 0xa0, 0x76, 0x0b, 0x61, 0xcf, 0x77, 0xac, + 0xf4, 0x56, 0xcc, 0x2c, 0xe7, 0xc7, 0x6f, 0xcc, 0x1e, 0x86, 0xdd, 0x8a, + 0xa3, 0x43, 0x1a, 0x0f, 0xdb, 0xf2, 0x9b, 0x84, 0x73, 0x91, 0xdc, 0x99, + 0x55, 0xed, 0x94, 0x15, 0x1e, 0x9c, 0x0a, 0xb6, 0xda, 0x99, 0x7a, 0xb8, + 0x48, 0x98, 0x13, 0xf8, 0xf7, 0x95, 0xb5, 0x41, 0x4e, 0x68, 0x9e, 0xd6, + 0x11, 0x64, 0xd4, 0x82, 0x86, 0x94, 0x43, 0xf6, 0xe7, 0x90, 0x89, 0xc9, + 0x6f, 0x77, 0xc2, 0x6c, 0x4d, 0x0e, 0xcc, 0xd9, 0x0b, 0x5f, 0xef, 0xa7, + 0x81, 0xff, 0x75, 0xc2, 0x16, 0x27, 0x36, 0x92, 0xbc, 0x7c, 0xc4, 0x02, + 0x4e, 0x42, 0xab, 0x4a, 0xdc, 0x49, 0x14, 0x5c, 0x4e, 0x78, 0x0f, 0xf6, + 0x69, 0xc4, 0x3f, 0x98, 0xe7, 0x26, 0xb0, 0x90, 0xb7, 0x8a, 0xdf, 0x3d, + 0x17, 0xc7, 0x87, 0x9b, 0x2c, 0x5e, 0xc9, 0x8a, 0xc5, 0xd1, 0x28, 0xcf, + 0xee, 0x39, 0x80, 0x58, 0x42, 0x10, 0x84, 0xf6, 0xd8, 0x5a, 0x81, 0xa8, + 0x62, 0x16, 0xb3, 0xeb, 0xd7, 0x33, 0xcd, 0x59, 0x5c, 0x34, 0x2c, 0x1e, + 0x7c, 0x7d, 0xf9, 0xe6, 0x14, 0xdb, 0x0a, 0x0d, 0x46, 0xb4, 0x1f, 0x39, + 0xa1, 0xc5, 0x72, 0x44, 0xb2, 0x3d, 0xdf, 0xfd, 0xa5, 0x33, 0xbb, 0x84, + 0x31, 0xc0, 0x46, 0xb9, 0x31, 0x02, 0xa3, 0x94, 0x17, 0x2f, 0xda, 0xac, + 0xfe, 0xca, 0xf8, 0xcd, 0x3c, 0x8b, 0xcd, 0x24, 0x11, 0x87, 0xf4, 0x98, + 0xd5, 0xa2, 0x4e, 0x39, 0xa4, 0x95, 0x4f, 0xd5, 0x44, 0xb2, 0xfd, 0xd0, + 0x27, 0xc5, 0xbd, 0xcf, 0x83, 0xeb, 0x53, 0xf3, 0xe2, 0xd7, 0x64, 0xef, + 0xf0, 0x21, 0x89, 0xc2, 0x4c, 0x28, 0xd4, 0x7c, 0xff, 0x35, 0xed, 0x04, + 0x3f, 0xd1, 0xd8, 0x3d, 0xbf, 0x47, 0xfe, 0x56, 0xc5, 0xd2, 0x41, 0xb4, + 0x95, 0xaf, 0xc4, 0x50, 0x37, 0xc0, 0x69, 0xe6, 0xa0, 0x6a, 0xf5, 0x2f, + 0x10, 0x1f, 0x9f, 0xd6, 0xb9, 0x03, 0x1b, 0x8f, 0xf3, 0x95, 0x04, 0x32, + 0xa8, 0x6d, 0xd7, 0x7c, 0x5c, 0xce, 0xcc, 0x29, 0x6d, 0xca, 0x93, 0xde, + 0x9a, 0x9c, 0xb1, 0xaa, 0x5e, 0x3f, 0xef, 0xea, 0xa4, 0xe5, 0xd7, 0xee, + 0xe2, 0xe9, 0x12, 0xda, 0x6b, 0x2c, 0xfb, 0x20, 0x5e, 0x5f, 0x44, 0x11, + 0xc6, 0x2b, 0x34, 0xae, 0x0d, 0xbb, 0x35, 0x68, 0x95, 0x95, 0x38, 0xcc, + 0x44, 0xae, 0xf7, 0x22, 0x71, 0x11, 0x08, 0x76, 0x06, 0xaa, 0x96, 0x4e, + 0x8b, 0x2c, 0xb5, 0x48, 0x83, 0xfa, 0xe0, 0x5c, 0xe4, 0x41, 0x2f, 0x70, + 0xba, 0xa4, 0x7c, 0x0d, 0x04, 0x64, 0x1c, 0xf8, 0x5e, 0x67, 0x49, 0x7e, + 0x8d, 0xe8, 0xa9, 0x8c, 0xa4, 0xbd, 0xa6, 0x4d, 0x47, 0x7c, 0x76, 0xb1, + 0x8b, 0x0e, 0x83, 0xf0, 0xfe, 0x87, 0xbe, 0x38, 0x44, 0xa0, 0x4d, 0x2e, + 0xe9, 0x5c, 0x9a, 0x54, 0xdf, 0xed, 0x4f, 0x22, 0xf5, 0x2d, 0xcd, 0x69, + 0x25, 0x68, 0x1f, 0x9b, 0x82, 0xce, 0x74, 0xfa, 0x6a, 0x4a, 0x62, 0xd7, + 0xaa, 0x1b, 0x69, 0xe8, 0x92, 0x06, 0xb4, 0x94, 0x6a, 0xa7, 0x43, 0x14, + 0xc6, 0xf8, 0x66, 0x39, 0xbf, 0x35, 0xdb, 0xdc, 0x94, 0x84, 0xee, 0x22, + 0x42, 0xf4, 0x7d, 0xad, 0xb9, 0x6e, 0xd0, 0xd9, 0x1f, 0xc2, 0xb6, 0x5b, + 0x57, 0x59, 0x94, 0x07, 0x8e, 0xa1, 0x0c, 0x1c, 0x52, 0xee, 0xf2, 0x92, + 0x08, 0xd4, 0xe8, 0x8b, 0x9e, 0xb9, 0x5e, 0xcb, 0xc0, 0x0f, 0x10, 0x37, + 0xcf, 0xa1, 0x57, 0x3c, 0xe0, 0x40, 0x70, 0x0d, 0x8a, 0xd3, 0x86, 0x78, + 0x79, 0xdf, 0xfc, 0x8d, 0x5e, 0x65, 0x74, 0xfe, 0x86, 0xb6, 0xdb, 0x50, + 0xe8, 0xdd, 0xfb, 0xf6, 0x5c, 0x82, 0x03, 0xce, 0x5b, 0x61, 0xf2, 0x1f, + 0xba, 0x86, 0xb9, 0x4e, 0xaf, 0xc2, 0xa6, 0x38, 0xc9, 0x34, 0xeb, 0x4e, + 0xdc, 0x9b, 0x30, 0xcc, 0xb1, 0xe6, 0xfc, 0x37, 0x82, 0x18, 0x44, 0xe7, + 0x99, 0xc4, 0x63, 0x63, 0x14, 0x6d, 0xea, 0xa6, 0xdd, 0x27, 0x3c, 0xe9, + 0x49, 0xd4, 0xbd, 0xca, 0xb2, 0x51, 0x9c, 0x77, 0x75, 0x0b, 0xe1, 0x87, + 0x1e, 0xa9, 0x95, 0x4d, 0x63, 0x70, 0x30, 0x9d, 0x2f, 0xe8, 0xb9, 0x3a, + 0x85, 0x8e, 0xe2, 0x8a, 0x5d, 0x24, 0x3c, 0x77, 0x8f, 0x71, 0xe4, 0x4b, + 0x55, 0x41, 0x4a, 0x35, 0x71, 0x43, 0xca, 0x9e, 0x42, 0x7a, 0xa9, 0xb9, + 0x4d, 0xd8, 0x6b, 0xa7, 0xde, 0xef, 0x45, 0xde, 0xe8, 0x9e, 0x05, 0x22, + 0xc4, 0xd0, 0x12, 0x6d, 0x15, 0x59, 0x72, 0x17, 0x46, 0x53, 0xff, 0x76, + 0xc4, 0xc2, 0xcb, 0x46, 0x1b, 0x7a, 0x84, 0xfb, 0x43, 0xe6, 0xe1, 0x82, + 0xbe, 0x25, 0x8e, 0x2d, 0xb2, 0x90, 0xef, 0x06, 0x8f, 0x6b, 0x09, 0xc4, + 0xe9, 0xf1, 0x0c, 0x11, 0xf1, 0xa4, 0x67, 0x64, 0x9e, 0xdc, 0xab, 0xd3, + 0x90, 0x99, 0x2b, 0x5f, 0x05, 0xcc, 0xb7, 0xc5, 0xb4, 0x35, 0x86, 0xf4, + 0x51, 0x58, 0x7c, 0x58, 0x5d, 0xb9, 0xe2, 0x25, 0xc0, 0xce, 0xfd, 0x93, + 0x97, 0xb2, 0x29, 0x95, 0xf0, 0x58, 0x66, 0x6c, 0x98, 0x32, 0x0d, 0xbf, + 0xb1, 0x0e, 0x1c, 0xf5, 0x20, 0xd1, 0xb9, 0x08, 0x58, 0x92, 0x45, 0x8d, + 0x0b, 0xcd, 0xe1, 0x18, 0xc9, 0x8a, 0x38, 0xe6, 0xdf, 0xa0, 0x12, 0xc7, + 0x44, 0x7f, 0x09, 0xa1, 0xf4, 0xdc, 0x02, 0xeb, 0x8d, 0x26, 0x31, 0xda, + 0x4a, 0xa0, 0x2e, 0x4c, 0x2c, 0x6d, 0x84, 0x94, 0x48, 0xb8, 0x1b, 0x2f, + 0x32, 0x8c, 0x6b, 0x2e, 0x9e, 0x89, 0x54, 0x77, 0xe6, 0xf5, 0x85, 0x3f, + 0x66, 0x34, 0xdf, 0x41, 0x55, 0xe2, 0xf8, 0x6c, 0xb0, 0xb3, 0xd5, 0x14, + 0x3a, 0x89, 0x36, 0x0e, 0xbf, 0x3a, 0x81, 0xd1, 0x74, 0x9a, 0xc6, 0x9c, + 0xd1, 0xc0, 0x7d, 0xc8, 0x5c, 0x34, 0xbf, 0xc4, 0x88, 0xe8, 0x9a, 0xed, + 0x7e, 0x8e, 0xf9, 0x86, 0x31, 0x76, 0xce, 0x2c, 0xc2, 0x2b, 0xad, 0xf9, + 0x39, 0xb1, 0xb1, 0xe7, 0x4c, 0x22, 0x3b, 0x63, 0xe3, 0x1a, 0x2e, 0x64, + 0x23, 0xf6, 0x8e, 0x80, 0xd6, 0xb5, 0x43, 0xef, 0xcc, 0x1b, 0xd8, 0xe9, + 0x19, 0xc3, 0x8a, 0x4a, 0xcb, 0x05, 0xa6, 0xd5, 0xb0, 0xd2, 0xfa, 0x4d, + 0x96, 0x94, 0x9d, 0xa4, 0xd8, 0xdf, 0x68, 0x58, 0x59, 0xd0, 0x7d, 0x7b, + 0xbe, 0x9b, 0x93, 0x46, 0xc4, 0x91, 0x8c, 0x4e, 0x3c, 0xcb, 0x0a, 0x85, + 0x0c, 0x91, 0x6b, 0x58, 0x2c, 0xc1, 0xfa, 0xb7, 0x37, 0x07, 0x5d, 0xf6, + 0x3f, 0x99, 0x21, 0x42, 0xd6, 0x24, 0x0a, 0x67, 0x69, 0xda, 0x32, 0x19, + 0xc2, 0xd6, 0x2c, 0x84, 0x8d, 0xff, 0x8e, 0x1b, 0x5e, 0x66, 0x17, 0xfa, + 0xb3, 0x8a, 0x5e, 0x31, 0xff, 0xfe, 0x42, 0xdd, 0xfe, 0x6c, 0x6c, 0x0e, + 0xb5, 0x77, 0xd1, 0x32, 0xd5, 0x09, 0x2e, 0xa2, 0x09, 0x96, 0xa1, 0xbd, + 0x39, 0x38, 0xe0, 0xc3, 0xd5, 0x13, 0xf2, 0xe3, 0xc0, 0xd4, 0x42, 0x92, + 0xb6, 0x1a, 0x2e, 0xcf, 0x57, 0x1f, 0x5e, 0xbd, 0x5f, 0xba, 0x7c, 0x8f, + 0xaf, 0xde, 0x25, 0xa2, 0x8c, 0x49, 0x46, 0x40, 0x74, 0xc9, 0xab, 0x20, + 0xdc, 0x81, 0xb5, 0x7b, 0x09, 0xc6, 0xf3, 0xfe, 0xe3, 0xea, 0xd1, 0x0c, + 0x4c, 0x34, 0xaf, 0x7e, 0xad, 0x5d, 0x07, 0x31, 0xc2, 0x25, 0xc3, 0x83, + 0x6f, 0x6f, 0x4e, 0xd8, 0x1e, 0xf6, 0x3e, 0x8c, 0x37, 0xd4, 0x5b, 0x19, + 0x2d, 0x50, 0x7f, 0xc9, 0xc3, 0x42, 0x4d, 0xd4, 0x38, 0x7d, 0x2d, 0xc2, + 0x5c, 0x45, 0xa6, 0x9b, 0xd8, 0x9d, 0xda, 0x98, 0xdf, 0x17, 0xc6, 0xc4, + 0x3f, 0x34, 0xb9, 0x4a, 0x70, 0x04, 0xc2, 0x72, 0xc2, 0x8b, 0xbd, 0x62, + 0x5a, 0x6a, 0xb1, 0x74, 0x19, 0x27, 0xf3, 0x01, 0x90, 0x92, 0x1f, 0x61, + 0xec, 0x7d, 0xab, 0x57, 0x5d, 0xb3, 0x58, 0xc5, 0x5e, 0xdb, 0xe8, 0xf6, + 0xe6, 0x52, 0x56, 0x98, 0x6c, 0xfb, 0x58, 0x71, 0x69, 0xdd, 0xbe, 0xff, + 0xcb, 0xa6, 0x28, 0x36, 0x3a, 0x50, 0x83, 0x90, 0x03, 0x9b, 0x33, 0xd5, + 0xab, 0x43, 0x6a, 0x1b, 0xdd, 0x5f, 0x11, 0xa7, 0x8b, 0xae, 0x61, 0x02, + 0xb8, 0x9f, 0xd8, 0x22, 0xc7, 0xc6, 0xa6, 0x29, 0x44, 0xa3, 0x54, 0x62, + 0x9d, 0x5f, 0x79, 0x75, 0xa6, 0x8f, 0x40, 0x1f, 0xa5, 0xda, 0x01, 0xe8, + 0xf0, 0x11, 0x62, 0x75, 0xc4, 0xd9, 0x4e, 0x97, 0x6b, 0x29, 0xd0, 0x7c, + 0xca, 0xed, 0xb7, 0x9d, 0x84, 0x26, 0x14, 0xe2, 0x74, 0x3f, 0xc2, 0x83, + 0x6b, 0xbd, 0xee, 0x71, 0xf0, 0x4d, 0xd3, 0x87, 0x68, 0x97, 0x1c, 0x1b, + 0x46, 0x21, 0x70, 0x22, 0xf9, 0x80, 0x56, 0xfc, 0x3e, 0xcb, 0x35, 0x48, + 0x6b, 0x94, 0x80, 0xeb, 0xf3, 0x19, 0xcd, 0xe0, 0x55, 0x62, 0x1b, 0x37, + 0x07, 0xc6, 0x35, 0x43, 0x76, 0xd8, 0x66, 0x8d, 0x70, 0x03, 0xd8, 0x37, + 0x2c, 0xb0, 0xa7, 0x19, 0xca, 0xa3, 0x76, 0x2a, 0xe4, 0x91, 0xd0, 0x5c, + 0x97, 0x1a, 0xdc, 0xdb, 0xee, 0xb0, 0x43, 0xa4, 0xae, 0xe4, 0xf3, 0xca, + 0x52, 0x1a, 0x51, 0xf0, 0x10, 0x03, 0x47, 0x93, 0xf9, 0xe3, 0x1f, 0xf1, + 0xbf, 0xe3, 0x55, 0x1f, 0x2d, 0xc8, 0xc6, 0x17, 0xcb, 0x64, 0x55, 0x99, + 0xe0, 0x5f, 0xb0, 0x51, 0x04, 0x62, 0x50, 0x36, 0xa6, 0x73, 0x92, 0x23, + 0xb7, 0xb1, 0xa1, 0xa9, 0xd1, 0x29, 0x82, 0xc5, 0x4a, 0xbc, 0xd2, 0xe3, + 0xa4, 0xba, 0xe7, 0x88, 0xcc, 0xef, 0x27, 0x8b, 0xbc, 0x6c, 0x89, 0x13, + 0x97, 0x50, 0x57, 0x9f, 0x7a, 0x22, 0x4f, 0x8b, 0x2b, 0xd4, 0x87, 0xa3, + 0x1f, 0x9f, 0x5f, 0x5c, 0x62, 0xa2, 0xa7, 0xfc, 0x8b, 0x1a, 0x6f, 0xeb, + 0xe3, 0x80, 0xd1, 0x41, 0x63, 0x51, 0x39, 0x02, 0x2c, 0x81, 0xdd, 0xcb, + 0xe5, 0x43, 0x0d, 0x82, 0xa4, 0x2a, 0x97, 0xee, 0x13, 0x4f, 0xef, 0x39, + 0x69, 0x06, 0x12, 0x5d, 0x63, 0x6d, 0x25, 0xf1, 0xca, 0xc2, 0x11, 0x78, + 0x0c, 0x3d, 0xb9, 0x33, 0x31, 0x0a, 0xb1, 0x58, 0x9b, 0x5d, 0xea, 0x8c, + 0xbf, 0x64, 0x17, 0x85, 0x8a, 0xd6, 0x6b, 0x5c, 0xb5, 0x3d, 0xc9, 0x27, + 0x98, 0x4e, 0xd1, 0x24, 0xbf, 0x15, 0xe5, 0x48, 0xd3, 0x8b, 0x69, 0x1c, + 0x03, 0x3f, 0x4f, 0xe9, 0x42, 0x2c, 0x51, 0x44, 0x7b, 0x41, 0x4e, 0xb6, + 0x29, 0xa0, 0x12, 0xdc, 0xcf, 0x7a, 0x98, 0x88, 0xad, 0xd4, 0x0c, 0xb2, + 0x7c, 0x30, 0x69, 0x97, 0xb8, 0x27, 0xfe, 0x65, 0xd6, 0xe1, 0xf9, 0x06, + 0x44, 0x00, 0x2d, 0xa7, 0x50, 0x34, 0x0c, 0x28, 0x1a, 0xb1, 0x6e, 0x5e, + 0x96, 0x64, 0xa5, 0xc9, 0x17, 0xa2, 0xb4, 0x5f, 0xa9, 0x05, 0x37, 0x9e, + 0xa6, 0xe5, 0x4a, 0x84, 0xfd, 0x91, 0x28, 0x0e, 0x6a, 0x02, 0x6a, 0x8b, + 0x18, 0xa5, 0x85, 0x9f, 0xa4, 0xf2, 0x96, 0x4c, 0x54, 0xb7, 0xad, 0x41, + 0x8e, 0xc3, 0x20, 0x8d, 0x49, 0x12, 0x1a, 0x98, 0xe0, 0x99, 0x5e, 0x4c, + 0x90, 0x5b, 0xaa, 0x18, 0x47, 0xdc, 0x66, 0x9a, 0x8e, 0x53, 0xd6, 0x96, + 0x74, 0x78, 0xbc, 0x60, 0xf5, 0x7d, 0xe3, 0xbc, 0x10, 0x3d, 0x15, 0xf3, + 0x4c, 0xda, 0x61, 0x9e, 0xc1, 0xd3, 0x4e, 0x63, 0x49, 0x99, 0xab, 0x92, + 0x65, 0x63, 0x44, 0x47, 0xf8, 0x92, 0xf7, 0x15, 0x1b, 0x02, 0x3f, 0xd3, + 0xf8, 0x06, 0x19, 0xa6, 0xe2, 0xde, 0x17, 0xf2, 0x1a, 0x25, 0x37, 0xf1, + 0x5d, 0x9a, 0xe5, 0x83, 0x4a, 0xaa, 0x51, 0xd3, 0x72, 0x58, 0x10, 0x4d, + 0x8c, 0x6f, 0x64, 0xb3, 0xf8, 0x90, 0xf3, 0xbb, 0x1a, 0xbc, 0x04, 0xed, + 0x4c, 0x13, 0x8d, 0xb0, 0x45, 0x30, 0xb5, 0x9c, 0x6f, 0x8b, 0x7d, 0x16, + 0xee, 0xb3, 0x46, 0x9c, 0x1e, 0x42, 0xad, 0x5c, 0x5e, 0x8a, 0x3e, 0x19, + 0x17, 0x77, 0xed, 0xa7, 0xae, 0xb8, 0xfb, 0xe5, 0xa7, 0x0e, 0x01, 0xd3, + 0x20, 0xab, 0xe3, 0xf3, 0xe1, 0xb7, 0x91, 0xf3, 0x96, 0xb4, 0x45, 0xf3, + 0xca, 0x81, 0xf3, 0xf3, 0x02, 0xf9, 0x05, 0x87, 0xee, 0x9f, 0x3c, 0x75, + 0xee, 0xd0, 0x51, 0xff, 0x7a, 0xd2, 0xce, 0x0f, 0x86, 0xdf, 0xd6, 0xce, + 0x98, 0x77, 0x23, 0x58, 0x12, 0x47, 0x5d, 0x1e, 0xe0, 0x24, 0xaa, 0xdc, + 0x82, 0xd2, 0xb8, 0xb5, 0x8f, 0x26, 0xbf, 0xe2, 0xee, 0xd7, 0x21, 0x3f, + 0x6a, 0xe7, 0x31, 0xf2, 0x0b, 0xf7, 0xad, 0x85, 0xfc, 0x68, 0xfa, 0x0d, + 0xf2, 0xb3, 0xb5, 0x6e, 0xa7, 0xbf, 0x75, 0xe4, 0x57, 0x66, 0x46, 0xb7, + 0x20, 0xbd, 0x20, 0xc3, 0xad, 0x49, 0x74, 0x01, 0x29, 0xd5, 0xe2, 0x1a, + 0xdb, 0x2d, 0xf7, 0xdf, 0x21, 0x7e, 0x40, 0x93, 0xfc, 0x24, 0x03, 0x39, + 0x08, 0x94, 0xac, 0x26, 0x7e, 0x23, 0x6c, 0x73, 0xa3, 0x35, 0x74, 0x3f, + 0x70, 0xb2, 0x4a, 0x58, 0xad, 0xcb, 0xe0, 0x25, 0xa6, 0x1b, 0x4c, 0x50, + 0x23, 0x3e, 0xb9, 0x5d, 0xed, 0x66, 0xa3, 0x45, 0x4e, 0x89, 0x35, 0xd2, + 0x3b, 0x45, 0x4c, 0x00, 0x5b, 0xc1, 0xe9, 0x4d, 0x6a, 0x65, 0xa0, 0xf1, + 0xd7, 0x45, 0x28, 0xe7, 0xd9, 0x70, 0x25, 0x12, 0xb4, 0xc9, 0xce, 0xe6, + 0xe2, 0x01, 0x10, 0x1b, 0x19, 0x82, 0x59, 0x62, 0x8b, 0x67, 0x71, 0x60, + 0x13, 0x73, 0xe7, 0x6f, 0x00, 0xd6, 0x84, 0x8f, 0x10, 0xa8, 0x5b, 0x85, + 0x83, 0x70, 0x58, 0x99, 0xf2, 0xef, 0x20, 0xe4, 0xad, 0x09, 0x51, 0xe5, + 0xd5, 0x90, 0xac, 0x33, 0xe1, 0xbb, 0xcd, 0x38, 0x05, 0xe5, 0xc3, 0xb5, + 0x48, 0xd8, 0xc6, 0x22, 0xc3, 0x31, 0xe7, 0x72, 0x23, 0x2c, 0xb4, 0x33, + 0x09, 0xfd, 0xa2, 0x2e, 0xa4, 0x49, 0x8c, 0x30, 0x71, 0x1e, 0x3a, 0x3d, + 0x1a, 0x0e, 0x11, 0x9e, 0x5f, 0x47, 0x57, 0xae, 0xa3, 0xd1, 0x47, 0x4b, + 0x79, 0x8b, 0xa3, 0x68, 0x61, 0x4c, 0xcc, 0x93, 0xdf, 0xd0, 0x0b, 0x99, + 0xd0, 0x82, 0x21, 0x4f, 0x91, 0x09, 0x93, 0x84, 0xcf, 0x75, 0x69, 0x53, + 0xb2, 0xfb, 0x1c, 0x0c, 0x7e, 0xa1, 0x4f, 0x9f, 0xc7, 0xd7, 0x09, 0x27, + 0x33, 0x8a, 0x33, 0xc9, 0x47, 0x1d, 0x69, 0x3e, 0x7c, 0x7b, 0xda, 0xd4, + 0xa5, 0xc5, 0xc1, 0xb6, 0xa6, 0x1d, 0x55, 0x12, 0x8d, 0x90, 0x2c, 0xe6, + 0xd3, 0x8c, 0x64, 0xf1, 0x9b, 0xa1, 0xc9, 0x16, 0x20, 0x5d, 0x89, 0x01, + 0x77, 0xc8, 0x07, 0x62, 0x5c, 0xea, 0xfc, 0x99, 0x9d, 0xcb, 0x1d, 0x1b, + 0x60, 0xe4, 0xa6, 0xdc, 0xb4, 0x96, 0xf2, 0x33, 0x5e, 0x2b, 0xad, 0xfa, + 0xa4, 0x79, 0xa8, 0x72, 0x42, 0x35, 0x5e, 0x80, 0x9f, 0xc7, 0xc9, 0x22, + 0xde, 0x49, 0x82, 0x5e, 0x9d, 0xac, 0x48, 0xf0, 0x63, 0x49, 0xfb, 0x54, + 0x47, 0xb5, 0xaf, 0x47, 0x44, 0xf4, 0x11, 0x1b, 0x93, 0xa6, 0x6a, 0x29, + 0xa3, 0xb4, 0x90, 0xee, 0x29, 0xe3, 0x84, 0xd4, 0x9d, 0x0d, 0xac, 0x47, + 0xb9, 0xc4, 0x15, 0xb6, 0x5e, 0xf0, 0x80, 0x62, 0xd6, 0x75, 0x52, 0x00, + 0x45, 0xb8, 0x69, 0xfd, 0x96, 0x5e, 0xeb, 0x64, 0x7e, 0xcd, 0xc9, 0x8c, + 0x2f, 0x5b, 0x63, 0xa5, 0x92, 0xa9, 0x4f, 0xef, 0xb5, 0x88, 0xca, 0x71, + 0xbe, 0x5a, 0x30, 0xeb, 0x97, 0xf7, 0x94, 0x1f, 0x31, 0x0f, 0x97, 0xb8, + 0xc9, 0x20, 0x1b, 0x7c, 0xd0, 0x12, 0x2c, 0xe0, 0x3a, 0x94, 0x90, 0x52, + 0x08, 0x00, 0xb4, 0x60, 0x25, 0xb8, 0x87, 0x7c, 0xc6, 0x57, 0xed, 0x68, + 0x99, 0x4e, 0x27, 0x12, 0x3a, 0xe6, 0x41, 0x43, 0x1a, 0xce, 0x1a, 0x6e, + 0xa8, 0x18, 0x54, 0x93, 0x85, 0x90, 0xec, 0x8b, 0x10, 0xa9, 0x4d, 0x8e, + 0xd3, 0x9d, 0xd3, 0xdc, 0xb7, 0x4c, 0x68, 0xd6, 0x37, 0x34, 0x51, 0xa1, + 0x7e, 0x4d, 0xdd, 0xc5, 0xe9, 0x14, 0x77, 0x18, 0x35, 0x93, 0x2f, 0xe7, + 0xe8, 0xbd, 0xba, 0x52, 0x77, 0x69, 0x9e, 0xcd, 0x67, 0x4d, 0x3b, 0xc8, + 0xe6, 0xc5, 0xc9, 0xf0, 0x30, 0x3a, 0x1b, 0x46, 0x67, 0x6f, 0x4f, 0x7f, + 0xe0, 0xc3, 0x85, 0x88, 0x63, 0x00, 0x70, 0x70, 0xd7, 0xc1, 0x8b, 0xd1, + 0x5d, 0x9c, 0xa7, 0x50, 0xeb, 0x7a, 0xeb, 0xb9, 0xa1, 0x40, 0x42, 0xe0, + 0xfc, 0xdc, 0xdb, 0x16, 0xfb, 0xf0, 0x48, 0xbe, 0xb5, 0x10, 0x23, 0x98, + 0xc4, 0x45, 0x9a, 0xe4, 0x62, 0x0f, 0x1f, 0x5b, 0x12, 0xdf, 0xb2, 0x99, + 0x53, 0xc6, 0x36, 0xb3, 0xf0, 0x58, 0x4b, 0x20, 0x1b, 0x5f, 0x94, 0xd4, + 0x3d, 0x4d, 0xb4, 0x16, 0xd9, 0x41, 0x13, 0xbd, 0x16, 0xfd, 0x77, 0x8d, + 0x4f, 0x3a, 0x88, 0x54, 0x5e, 0xe9, 0xed, 0xcb, 0xa6, 0x79, 0xa8, 0xe3, + 0x4e, 0xfa, 0x3e, 0x9e, 0x97, 0x79, 0xb6, 0x20, 0x9e, 0xff, 0x55, 0xcc, + 0x2c, 0x0f, 0x33, 0x3d, 0x8a, 0x93, 0x59, 0x23, 0xfa, 0xa0, 0xc8, 0xc6, + 0xb7, 0x49, 0xa9, 0x1e, 0x11, 0xfd, 0x2b, 0x48, 0x59, 0x83, 0x5e, 0x28, + 0x7c, 0x93, 0x17, 0x74, 0x42, 0xd7, 0x93, 0x12, 0x10, 0x93, 0x1c, 0x0d, + 0xa5, 0x69, 0x9e, 0x34, 0x28, 0x88, 0x6a, 0x78, 0x22, 0x9f, 0x26, 0xbc, + 0x2f, 0x53, 0xab, 0x07, 0x24, 0xf6, 0x8f, 0xf9, 0xa6, 0x61, 0x4f, 0xfe, + 0xcb, 0xc0, 0xff, 0xfd, 0xe3, 0xbe, 0xa9, 0xa0, 0x3f, 0xb5, 0x2f, 0x43, + 0x33, 0x44, 0xbe, 0x7a, 0xb5, 0x07, 0x6d, 0x69, 0xd0, 0x1c, 0xb3, 0x97, + 0xeb, 0x96, 0x2b, 0xcb, 0x32, 0xf1, 0x34, 0xb4, 0x8e, 0x56, 0x14, 0xbe, + 0xff, 0x48, 0x32, 0x0e, 0x86, 0xc2, 0x64, 0xc2, 0xe6, 0x2c, 0xf1, 0x8c, + 0xee, 0xad, 0xf3, 0xe3, 0x37, 0x8f, 0x84, 0xd6, 0xc1, 0x34, 0xb9, 0x50, + 0xbd, 0xc3, 0x69, 0xfd, 0x92, 0xbe, 0xea, 0x46, 0x5a, 0xcb, 0xfa, 0xad, + 0x35, 0xf7, 0xb7, 0x25, 0x43, 0x14, 0x4d, 0x34, 0xb5, 0x20, 0xb3, 0xdc, + 0x55, 0x97, 0x2a, 0x5f, 0x4f, 0x0c, 0xb6, 0xc4, 0x74, 0xc0, 0x96, 0x14, + 0x0d, 0xb7, 0x49, 0x27, 0x98, 0x47, 0x47, 0xa3, 0xb4, 0x34, 0x8e, 0x4d, + 0xf8, 0x31, 0x92, 0x95, 0xa2, 0xdb, 0x64, 0xe5, 0x02, 0x78, 0xed, 0x33, + 0x5e, 0x82, 0xe6, 0xda, 0xe9, 0x92, 0x20, 0x59, 0x9c, 0x7e, 0x99, 0xb3, + 0xb2, 0xff, 0xbb, 0x08, 0xfb, 0x1f, 0xe9, 0xb6, 0x8a, 0x12, 0xd9, 0xef, + 0x73, 0xa3, 0xa5, 0x87, 0xcf, 0xe1, 0x54, 0xf3, 0x46, 0xba, 0x8d, 0x03, + 0xa7, 0x9a, 0xae, 0xda, 0x58, 0xaf, 0xa0, 0x68, 0x14, 0x60, 0x52, 0x9a, + 0x75, 0x5f, 0x94, 0x16, 0x28, 0x8e, 0x28, 0xfa, 0x69, 0x3a, 0xca, 0x11, + 0x9a, 0x23, 0x72, 0x52, 0x18, 0x30, 0xd7, 0x10, 0x55, 0x3c, 0x01, 0xb1, + 0x15, 0x29, 0x1d, 0xdf, 0xe2, 0x24, 0x29, 0xc7, 0x0a, 0x37, 0xdc, 0x44, + 0x3f, 0x01, 0xa7, 0xd2, 0xee, 0xea, 0xba, 0x47, 0x5c, 0xc6, 0x0c, 0x4c, + 0xc3, 0x49, 0x17, 0xe9, 0x5c, 0x02, 0xb7, 0x24, 0x72, 0x2d, 0xe0, 0x41, + 0x8e, 0x09, 0x21, 0xe4, 0xff, 0xfd, 0xd1, 0xc9, 0x85, 0x32, 0xcb, 0xd1, + 0x6a, 0x4d, 0xea, 0x46, 0xb4, 0x9d, 0x94, 0xe3, 0xed, 0xc5, 0x6d, 0xba, + 0x3d, 0x2f, 0x8a, 0xc9, 0x68, 0x2b, 0x4c, 0x28, 0xe7, 0x39, 0x73, 0x10, + 0xca, 0xf9, 0x37, 0x87, 0xc3, 0x4f, 0x76, 0x77, 0x59, 0x96, 0x5e, 0x52, + 0xd3, 0x9b, 0xb4, 0x06, 0x8d, 0x4c, 0xb9, 0x82, 0x96, 0x7d, 0x36, 0x28, + 0xb2, 0x2d, 0x28, 0x00, 0x8e, 0xe1, 0x62, 0x95, 0x10, 0xc8, 0x02, 0x47, + 0xa6, 0xe6, 0x91, 0xb1, 0xfd, 0xf1, 0xb7, 0x8c, 0x27, 0x11, 0xc2, 0x40, + 0xb4, 0x43, 0xf4, 0x92, 0xff, 0xfd, 0xe0, 0x11, 0x07, 0x38, 0x4d, 0x65, + 0x4b, 0xf8, 0x5d, 0x15, 0xf2, 0x39, 0x34, 0x67, 0x12, 0x85, 0x5f, 0xd7, + 0xe9, 0x8a, 0xcd, 0x64, 0x03, 0x9e, 0x67, 0x2f, 0x3a, 0x3a, 0xbe, 0x00, + 0x41, 0x1e, 0xbf, 0xfd, 0x0a, 0xc2, 0x21, 0xe7, 0xda, 0x5d, 0xcf, 0xd3, + 0x9f, 0x99, 0xd3, 0x51, 0x9b, 0x85, 0x2c, 0x30, 0xdf, 0x65, 0xfe, 0x84, + 0xd6, 0x9a, 0xe3, 0xf5, 0xe2, 0x55, 0xc4, 0x19, 0xfb, 0x6d, 0x97, 0x29, + 0x16, 0xc6, 0x78, 0x78, 0x10, 0xce, 0xee, 0x57, 0x62, 0x88, 0x8c, 0x2a, + 0x44, 0xcc, 0xe5, 0x6a, 0xd5, 0xe6, 0x38, 0xe7, 0x78, 0x24, 0xbb, 0x1a, + 0x24, 0x2a, 0x92, 0x69, 0x43, 0x9d, 0x3c, 0x1e, 0x8a, 0xa7, 0x3a, 0x30, + 0x24, 0xc3, 0x37, 0x62, 0x73, 0xfd, 0xf7, 0x9b, 0xc5, 0x56, 0x8d, 0x79, + 0x3a, 0x76, 0xf9, 0xd6, 0xf4, 0xf1, 0xea, 0x11, 0x6f, 0x6a, 0x90, 0x3c, + 0xb1, 0xd8, 0x1d, 0x0f, 0xcb, 0x05, 0xc4, 0x8a, 0xf7, 0xc4, 0x41, 0x55, + 0x59, 0x7a, 0xda, 0x53, 0x95, 0x39, 0xf5, 0x52, 0x6b, 0xa4, 0x8d, 0x95, + 0xb0, 0xb9, 0xb2, 0x45, 0x3c, 0x68, 0xb3, 0xb1, 0xa9, 0x18, 0x96, 0xa3, + 0x95, 0x42, 0x85, 0x9a, 0xa6, 0x74, 0xa1, 0xbe, 0xfc, 0xa8, 0x7b, 0x48, + 0x22, 0xed, 0xfb, 0xc3, 0x83, 0xf7, 0x5f, 0xbe, 0x7b, 0x7b, 0x74, 0x7a, + 0xdc, 0xad, 0x53, 0xe4, 0x95, 0x70, 0x7d, 0xe4, 0xf8, 0x26, 0x65, 0xcf, + 0x65, 0xc7, 0x87, 0x51, 0x96, 0xb8, 0xdd, 0x91, 0xfc, 0x8a, 0xdf, 0x10, + 0x8e, 0xad, 0x0b, 0x5e, 0x57, 0x7f, 0x96, 0xf3, 0x09, 0x12, 0x10, 0x83, + 0xc9, 0x5b, 0xce, 0x89, 0xba, 0xd9, 0x6c, 0x80, 0x2d, 0xea, 0x2e, 0xd3, + 0x1f, 0xdd, 0xcf, 0x24, 0x62, 0x07, 0x48, 0x20, 0x01, 0x04, 0x56, 0x45, + 0x74, 0x47, 0xe4, 0x88, 0x61, 0x16, 0x46, 0x34, 0x9e, 0x96, 0xed, 0x2e, + 0x2a, 0x61, 0x0d, 0xdc, 0x12, 0x51, 0x72, 0x5f, 0x07, 0x39, 0xce, 0xcb, + 0x6e, 0x2f, 0x4a, 0x52, 0xb8, 0xec, 0xc2, 0x10, 0xae, 0x49, 0x6b, 0x1a, + 0x0e, 0x87, 0x55, 0xc6, 0x42, 0xd7, 0x83, 0xe4, 0x21, 0x41, 0x14, 0x88, + 0xbe, 0x75, 0x08, 0x23, 0x70, 0x19, 0x7d, 0x97, 0xe5, 0x48, 0xef, 0x3f, + 0xb2, 0x38, 0x4c, 0x7b, 0x28, 0x9e, 0xaf, 0x9a, 0x1e, 0x5e, 0xd6, 0x88, + 0x58, 0x2b, 0xb8, 0x16, 0xbc, 0xc6, 0xf3, 0x83, 0xcb, 0xaf, 0x5b, 0x83, + 0x15, 0x3c, 0x6a, 0xe3, 0x87, 0x6f, 0x1b, 0xb0, 0xd1, 0x72, 0x6d, 0x9c, + 0xe7, 0x07, 0xae, 0x9a, 0xea, 0x21, 0xaa, 0xdd, 0x36, 0x2d, 0x52, 0x2a, + 0xf7, 0xbe, 0xf6, 0xbe, 0x69, 0x25, 0x4a, 0xbb, 0x6c, 0xf8, 0xae, 0x59, + 0x7b, 0xd5, 0xb4, 0xde, 0x34, 0x36, 0x5b, 0x3e, 0xab, 0xee, 0xa2, 0xb1, + 0x9b, 0xe6, 0xff, 0x8c, 0xab, 0x26, 0xc6, 0xe9, 0xa9, 0xf1, 0x50, 0x1f, + 0xb4, 0xdb, 0xce, 0x4d, 0x95, 0x9d, 0x7e, 0x24, 0x3f, 0xf5, 0x11, 0xc0, + 0x0d, 0x06, 0x23, 0x2c, 0x56, 0xae, 0xaa, 0xc4, 0x54, 0xd6, 0x4a, 0xa0, + 0x67, 0x2b, 0x47, 0xec, 0x99, 0xfc, 0x55, 0xdf, 0x2c, 0xd7, 0x93, 0xbc, + 0xc7, 0xda, 0x04, 0x42, 0xd6, 0x99, 0x5f, 0xe4, 0xd9, 0x58, 0x92, 0xb5, + 0x82, 0xc8, 0xc2, 0xf7, 0x79, 0x72, 0x13, 0x17, 0x37, 0xd1, 0xb2, 0x4c, + 0xd9, 0x62, 0x5e, 0xd7, 0x01, 0x96, 0x1c, 0x5e, 0x68, 0xaa, 0xbf, 0xa5, + 0x04, 0x6a, 0x6a, 0xbb, 0x5b, 0x3b, 0x20, 0x33, 0x8a, 0xea, 0x13, 0xc4, + 0x5c, 0xb1, 0x72, 0x5f, 0x57, 0x5b, 0x87, 0xa7, 0xfd, 0x10, 0x12, 0x6e, + 0xc6, 0xb9, 0x9c, 0x30, 0xdb, 0x27, 0x57, 0x34, 0xdd, 0x34, 0x48, 0x13, + 0x5c, 0xba, 0x2e, 0x70, 0xc5, 0xa5, 0x57, 0x6d, 0xc6, 0x29, 0xfb, 0x16, + 0xec, 0x44, 0x2f, 0x9f, 0x42, 0x40, 0xe3, 0xea, 0x37, 0xcf, 0x6f, 0x47, + 0x41, 0x57, 0x6c, 0x8c, 0x24, 0x2a, 0x6e, 0xb7, 0xe7, 0xbc, 0xe6, 0x2c, + 0x93, 0x82, 0xbd, 0xbc, 0x3c, 0xb5, 0x4d, 0x46, 0x49, 0x12, 0x0c, 0x2e, + 0xb6, 0xfa, 0x4d, 0xa7, 0x5b, 0x2c, 0xb3, 0x5b, 0x0e, 0x1c, 0x52, 0x4f, + 0x0a, 0xcd, 0x17, 0x6b, 0xca, 0x28, 0x86, 0xdb, 0x84, 0x88, 0x2f, 0x38, + 0x31, 0xe1, 0xd7, 0x50, 0xfb, 0x2e, 0x10, 0x59, 0x89, 0xb5, 0xd2, 0x29, + 0x0d, 0xbe, 0x9c, 0x24, 0x8a, 0xdf, 0x57, 0x67, 0x74, 0x82, 0xe4, 0xaa, + 0x26, 0x6c, 0xea, 0xf3, 0x64, 0x6e, 0x0e, 0x41, 0x09, 0x93, 0x80, 0x3a, + 0x14, 0x47, 0x15, 0x1b, 0x93, 0xbc, 0x56, 0xb4, 0xdc, 0xba, 0x93, 0x64, + 0x9a, 0xe2, 0x01, 0x86, 0x89, 0xd5, 0x4c, 0x40, 0x55, 0x5c, 0x24, 0x61, + 0x50, 0x9d, 0xc0, 0x88, 0x9e, 0xb5, 0x07, 0x38, 0xd4, 0x0b, 0xda, 0x55, + 0x51, 0x6f, 0x6e, 0x53, 0x12, 0xc0, 0x80, 0xdf, 0x28, 0x7a, 0xa2, 0x45, + 0x2b, 0xf1, 0xc0, 0x56, 0x0e, 0x92, 0x77, 0x4b, 0xaf, 0x34, 0x58, 0xb0, + 0x54, 0x45, 0x5a, 0xe4, 0x0d, 0x3d, 0x9b, 0x5d, 0xab, 0x42, 0x98, 0x02, + 0xaa, 0x8c, 0x0d, 0x28, 0xe5, 0x08, 0xc4, 0x65, 0x98, 0xd6, 0x28, 0xc9, + 0x3f, 0x7b, 0x7b, 0x6b, 0x8c, 0xbe, 0x9a, 0x83, 0xac, 0x41, 0x1a, 0xbc, + 0x18, 0xfd, 0x22, 0xbe, 0x4a, 0xec, 0x2c, 0x12, 0x1d, 0xb3, 0xc8, 0x98, + 0x8d, 0x69, 0x09, 0x25, 0xc2, 0x09, 0x9f, 0xcd, 0xb3, 0xa6, 0x4b, 0x6c, + 0x39, 0xe6, 0xa3, 0xc8, 0x06, 0x00, 0x67, 0xc6, 0x64, 0x57, 0xb4, 0x79, + 0xfb, 0x8b, 0x69, 0xba, 0x60, 0xd6, 0x9e, 0x67, 0xcb, 0xeb, 0x1b, 0x0e, + 0x3c, 0x03, 0x5f, 0x91, 0x0b, 0xb6, 0xc5, 0xb1, 0x51, 0x4b, 0x95, 0x86, + 0x3c, 0x7b, 0x97, 0x4d, 0xd9, 0xac, 0xb9, 0x59, 0x6b, 0xff, 0xe9, 0xce, + 0x2e, 0x86, 0xfb, 0x74, 0xe7, 0xd3, 0x4a, 0xb4, 0x3b, 0x9b, 0xd3, 0xe3, + 0x31, 0x72, 0x61, 0xa2, 0x1f, 0xf9, 0xf2, 0xf8, 0xa9, 0xd5, 0x17, 0x03, + 0xbb, 0x6c, 0x3c, 0x0f, 0xed, 0xb0, 0x71, 0x71, 0x2b, 0xae, 0x82, 0x8e, + 0xbd, 0xcf, 0xaf, 0x77, 0xd4, 0x9a, 0xe1, 0xfc, 0xc6, 0x2d, 0x68, 0x3f, + 0x4e, 0xe5, 0xe5, 0xdc, 0x46, 0x63, 0x51, 0x90, 0xd6, 0x7b, 0x01, 0x36, + 0x20, 0xc0, 0x07, 0x80, 0x51, 0x78, 0xb5, 0xde, 0x32, 0x73, 0x70, 0x78, + 0xe8, 0xbd, 0x76, 0xd5, 0xb8, 0xb0, 0x27, 0x1c, 0x17, 0xb6, 0x2e, 0x59, + 0xaa, 0x76, 0xfc, 0x01, 0x2e, 0xd3, 0xd3, 0x20, 0x6c, 0x18, 0xcc, 0x2b, + 0xf9, 0xb9, 0x66, 0x94, 0x6c, 0x10, 0x18, 0x8c, 0x94, 0xcb, 0x22, 0xa9, + 0xaf, 0xe8, 0xfa, 0xcc, 0x93, 0x3a, 0xf0, 0x98, 0xae, 0xa9, 0xa6, 0x3e, + 0xb0, 0xc1, 0x73, 0xdb, 0x27, 0xac, 0x41, 0xf0, 0x43, 0xa4, 0x6e, 0x2c, + 0xee, 0xfb, 0x46, 0x64, 0x91, 0x43, 0x0a, 0x13, 0xcf, 0x37, 0xfc, 0x3e, + 0x0f, 0x48, 0x9d, 0x9e, 0x07, 0x21, 0xe5, 0x3a, 0xb3, 0x92, 0x16, 0x29, + 0xce, 0x27, 0xce, 0x29, 0xd3, 0x84, 0xeb, 0x30, 0x29, 0x9b, 0xf3, 0x74, + 0x18, 0xd2, 0x26, 0x04, 0x33, 0x31, 0x3f, 0x96, 0x97, 0x00, 0x2d, 0xb0, + 0xbb, 0x89, 0xf7, 0x5a, 0xc9, 0xd6, 0x88, 0x66, 0xa9, 0x84, 0x81, 0x06, + 0xa9, 0x1f, 0xf5, 0x05, 0xd3, 0x13, 0xf6, 0xa3, 0xfc, 0x6c, 0xa7, 0x41, + 0x24, 0x96, 0xe5, 0x19, 0xa7, 0xe2, 0x20, 0x4d, 0x42, 0x5e, 0x91, 0x5c, + 0x65, 0x89, 0xe5, 0xf3, 0x80, 0x2f, 0x8c, 0x15, 0x20, 0xd7, 0x03, 0x5b, + 0x3d, 0x9a, 0x49, 0x56, 0x9b, 0xc3, 0x2d, 0x33, 0xa0, 0xe3, 0xe6, 0xd5, + 0xc6, 0xe2, 0xfc, 0x5a, 0x59, 0x94, 0x8b, 0x30, 0x0d, 0xc2, 0xc9, 0x34, + 0xd6, 0xa0, 0xdf, 0x30, 0x4f, 0x5c, 0x8b, 0xbe, 0xc0, 0xb1, 0x16, 0x77, + 0x2d, 0x11, 0x7a, 0x50, 0x8b, 0xc6, 0xf7, 0x93, 0xf6, 0x80, 0x15, 0xb9, + 0x39, 0x25, 0x29, 0x21, 0x76, 0x58, 0x62, 0x87, 0xdf, 0x1d, 0x05, 0x99, + 0x8b, 0x7c, 0xcc, 0x30, 0x29, 0x10, 0x82, 0x44, 0x5c, 0xcd, 0xd7, 0xc5, + 0xbf, 0x98, 0x9e, 0x00, 0xec, 0xd8, 0xd7, 0x80, 0x02, 0x4f, 0x16, 0x2e, + 0x07, 0x09, 0x10, 0x31, 0x02, 0x4e, 0xc3, 0x38, 0xb0, 0x00, 0x7c, 0xc5, + 0xd5, 0xb9, 0x66, 0x74, 0x1a, 0xc8, 0x30, 0x08, 0xb1, 0xab, 0x90, 0x2b, + 0x76, 0xf1, 0xfa, 0x70, 0xf7, 0xd3, 0x27, 0x9f, 0x91, 0x90, 0xbe, 0x42, + 0xda, 0x90, 0x5f, 0x32, 0x09, 0x70, 0x5d, 0x1f, 0xd9, 0xa4, 0x56, 0x25, + 0x13, 0x30, 0xd5, 0x9f, 0x4f, 0xcc, 0x2f, 0xbb, 0x4f, 0x20, 0xf3, 0xa8, + 0xcf, 0xb0, 0x11, 0x39, 0x95, 0xd1, 0x22, 0x1a, 0x98, 0xa8, 0xe0, 0x48, + 0x62, 0x9d, 0xe4, 0x4a, 0x1d, 0x04, 0x94, 0xc9, 0x18, 0xbb, 0x9c, 0x37, + 0x47, 0x2c, 0xf4, 0xe2, 0xf8, 0xf2, 0x82, 0x51, 0xef, 0x2f, 0xcf, 0x2e, + 0xd6, 0x84, 0xa3, 0xd1, 0xc5, 0xc9, 0x5c, 0x89, 0x17, 0x8d, 0x89, 0x86, + 0xe1, 0x07, 0x4c, 0xb1, 0x0a, 0xb2, 0x32, 0x78, 0x0b, 0x62, 0x81, 0x27, + 0x2e, 0x5a, 0xb3, 0x01, 0x82, 0xa4, 0x80, 0xa2, 0x82, 0xbe, 0x41, 0x47, + 0x89, 0xce, 0xc9, 0x63, 0x13, 0x93, 0x3d, 0x7f, 0x9c, 0x42, 0x30, 0x61, + 0x26, 0x46, 0x9e, 0xb1, 0xf3, 0xe7, 0x60, 0xb4, 0x0a, 0x3b, 0xe8, 0x65, + 0x40, 0xbd, 0x97, 0xd6, 0x50, 0x88, 0x90, 0x55, 0x52, 0x04, 0x76, 0x43, + 0x51, 0xe5, 0x3b, 0xe6, 0xfd, 0xee, 0xb0, 0x04, 0x7f, 0xeb, 0xe0, 0x2d, + 0x3e, 0x40, 0xbf, 0x24, 0x37, 0x6c, 0xf9, 0x09, 0x33, 0xc2, 0x20, 0xce, + 0xa7, 0x08, 0x78, 0x8e, 0xeb, 0x14, 0x9a, 0x9a, 0x9d, 0x4a, 0x00, 0x42, + 0x33, 0x20, 0xc3, 0xe5, 0x19, 0xf0, 0x2e, 0x77, 0x9d, 0x13, 0x3d, 0x53, + 0xea, 0x90, 0x7d, 0x21, 0xa1, 0x67, 0x5a, 0x22, 0x81, 0xa3, 0x6b, 0xa3, + 0xea, 0x3a, 0x52, 0xab, 0xb0, 0xff, 0x67, 0x83, 0xdd, 0xad, 0x1a, 0x93, + 0xe1, 0x08, 0x84, 0x76, 0xce, 0xc2, 0x8e, 0x90, 0x5a, 0xdc, 0x83, 0x58, + 0x0f, 0x34, 0x18, 0x9d, 0xae, 0x04, 0xc3, 0xf7, 0x38, 0xd7, 0xa7, 0x5a, + 0x91, 0x55, 0x50, 0xf1, 0x80, 0xad, 0xba, 0x8e, 0xb6, 0x75, 0xcb, 0x25, + 0x28, 0x60, 0x59, 0xe7, 0xa6, 0x15, 0xf7, 0x7d, 0x93, 0x7f, 0xba, 0xfb, + 0x27, 0x48, 0xa1, 0x65, 0x27, 0xb8, 0x0f, 0xbc, 0xd0, 0xe4, 0x99, 0xca, + 0xcc, 0x77, 0x7f, 0xc1, 0xc5, 0xf7, 0x68, 0x40, 0xd5, 0x2f, 0x8a, 0xa7, + 0x8a, 0xde, 0xcd, 0x35, 0xb0, 0x89, 0x83, 0xfe, 0x0c, 0x6c, 0xc7, 0x2f, + 0x2a, 0x31, 0x65, 0x88, 0x31, 0x30, 0x73, 0x37, 0x6e, 0x31, 0x31, 0x7e, + 0xf2, 0x1a, 0x49, 0x46, 0xcf, 0xb2, 0xd0, 0x0c, 0x53, 0xbb, 0x63, 0xb4, + 0x45, 0x8d, 0x5d, 0x15, 0x54, 0x6b, 0x17, 0x0f, 0xd0, 0x80, 0x42, 0xcb, + 0x55, 0x2f, 0x6f, 0x9c, 0x34, 0xdb, 0x3d, 0x6c, 0xb1, 0x70, 0x40, 0xc8, + 0x82, 0x9e, 0x75, 0x94, 0xa2, 0xb7, 0x4b, 0x5c, 0x83, 0x45, 0x95, 0x48, + 0x38, 0x7d, 0x13, 0x30, 0x4f, 0x94, 0x57, 0x04, 0x7d, 0x28, 0x4c, 0x4e, + 0x35, 0x6e, 0xc2, 0xd6, 0xb9, 0x21, 0x71, 0xf9, 0xeb, 0xa2, 0x5f, 0x66, + 0x88, 0xc2, 0x8b, 0x5e, 0x6a, 0x67, 0x9f, 0xb7, 0x93, 0x28, 0x72, 0x97, + 0x02, 0x79, 0xcf, 0xa0, 0xc9, 0x81, 0xb3, 0x39, 0x54, 0xeb, 0x25, 0x0d, + 0x65, 0xe8, 0x58, 0xb6, 0x48, 0xed, 0xbd, 0x46, 0x18, 0x95, 0xa1, 0xfe, + 0x78, 0xb9, 0xc9, 0xfc, 0xee, 0xa6, 0xa3, 0x41, 0xd6, 0x22, 0x16, 0x7a, + 0xb9, 0x9c, 0xd1, 0x4c, 0xee, 0x93, 0x64, 0xd2, 0x2d, 0xd8, 0x78, 0xcf, + 0xb8, 0x8c, 0x75, 0x01, 0x99, 0xc3, 0x68, 0xb0, 0xe0, 0x4e, 0x59, 0x40, + 0xb8, 0x22, 0x7c, 0x24, 0x16, 0x60, 0x10, 0x1b, 0x36, 0x5f, 0xa0, 0x9a, + 0xa9, 0xbb, 0xad, 0xee, 0x88, 0x18, 0x9e, 0x5c, 0x1e, 0x47, 0x07, 0xef, + 0x2e, 0xbf, 0xee, 0x04, 0xd8, 0xab, 0x01, 0x1b, 0xc6, 0xf5, 0x5e, 0x92, + 0x08, 0x71, 0x27, 0xb4, 0x00, 0x41, 0x53, 0x5c, 0x5d, 0x2d, 0x70, 0x0b, + 0x35, 0x8b, 0xfd, 0xa0, 0xce, 0x22, 0x9e, 0xd5, 0x59, 0x04, 0x67, 0x87, + 0x83, 0x4f, 0xf4, 0xd3, 0xc5, 0x87, 0x83, 0x92, 0x2c, 0x1a, 0x8a, 0xbb, + 0x39, 0x39, 0x67, 0xd0, 0x5b, 0xa0, 0x10, 0x07, 0xc3, 0x2d, 0x96, 0xd7, + 0x1c, 0x26, 0xda, 0x02, 0xb4, 0xc6, 0x70, 0x20, 0x4e, 0x46, 0xd7, 0xf8, + 0x7f, 0x5a, 0x65, 0x26, 0x26, 0x47, 0x76, 0x50, 0xc6, 0xd0, 0x99, 0xee, + 0x4c, 0xe1, 0xd3, 0x97, 0xd6, 0xba, 0xd9, 0xd8, 0x40, 0x63, 0xa8, 0x92, + 0x61, 0xe6, 0xb2, 0x42, 0xb3, 0x7b, 0xc3, 0x5a, 0x30, 0xe2, 0x06, 0xa6, + 0x93, 0xe5, 0x3b, 0x41, 0x02, 0x35, 0x56, 0x38, 0x56, 0xf9, 0x2b, 0xec, + 0xab, 0xb2, 0xa0, 0x4f, 0x07, 0x7b, 0x5b, 0xad, 0x1a, 0x94, 0x72, 0x1d, + 0x96, 0xf7, 0x89, 0x6b, 0x90, 0xd2, 0xcf, 0xc7, 0x97, 0x74, 0x7b, 0x89, + 0x49, 0x94, 0x08, 0xb6, 0x5c, 0x8e, 0x9c, 0x71, 0x26, 0x3b, 0xf9, 0x4d, + 0x1c, 0x25, 0x5e, 0xa2, 0xfa, 0x81, 0x22, 0xf6, 0xd8, 0x1e, 0xba, 0x29, + 0x1b, 0xe6, 0x76, 0x0c, 0xd4, 0x1f, 0x47, 0xe7, 0x24, 0x15, 0xb8, 0x55, + 0x0e, 0x62, 0xb7, 0xa2, 0x4d, 0xf8, 0x00, 0x68, 0x1c, 0x5b, 0x75, 0x01, + 0x86, 0x93, 0x78, 0xe3, 0x34, 0xd4, 0x80, 0x88, 0x5f, 0xce, 0xe8, 0x13, + 0xd6, 0xcc, 0x73, 0x1a, 0x03, 0x7b, 0xec, 0x0c, 0xbc, 0x52, 0x0f, 0x18, + 0x6b, 0x80, 0x76, 0xff, 0x6d, 0xb4, 0xca, 0x55, 0x6a, 0x31, 0x0d, 0xcc, + 0x37, 0xec, 0x72, 0xa7, 0x73, 0x81, 0x2a, 0x27, 0x80, 0x18, 0x89, 0x19, + 0x6c, 0x1c, 0xa7, 0x7b, 0x92, 0xdd, 0xcf, 0x81, 0x1c, 0xd0, 0xa4, 0x26, + 0x0c, 0x9e, 0x99, 0xda, 0xa0, 0x7a, 0x0d, 0xee, 0xed, 0x0c, 0x1e, 0x42, + 0x1a, 0x2f, 0x8a, 0xa9, 0xac, 0x4c, 0x8f, 0xd6, 0xfe, 0xfc, 0x49, 0x2f, + 0x3a, 0x79, 0x73, 0x40, 0xbf, 0x0f, 0xdf, 0x80, 0xb6, 0x73, 0x17, 0xce, + 0x34, 0x1c, 0x9e, 0x6e, 0x5f, 0x9e, 0x0e, 0x83, 0xea, 0x15, 0xc1, 0xa6, + 0x37, 0x93, 0x98, 0x61, 0xdc, 0x85, 0x21, 0x1a, 0x53, 0x16, 0x00, 0xd7, + 0x00, 0xe6, 0x26, 0xbd, 0x0a, 0x0f, 0x85, 0x29, 0x2d, 0xea, 0x42, 0x6f, + 0x1a, 0x8b, 0xb6, 0x05, 0x1b, 0x2a, 0x88, 0x31, 0xc6, 0xd9, 0x2c, 0xa6, + 0x7d, 0x23, 0x41, 0x09, 0x5e, 0xe3, 0x4f, 0x68, 0xc9, 0x27, 0xb6, 0x88, + 0x7c, 0x19, 0x35, 0x33, 0x48, 0xcb, 0x68, 0x4a, 0x23, 0x9c, 0x16, 0xe2, + 0xf9, 0x47, 0xb4, 0x04, 0x8f, 0x49, 0xf7, 0xaa, 0xa6, 0x36, 0xd2, 0x82, + 0xed, 0x6c, 0x3d, 0x1e, 0xfa, 0x75, 0x1f, 0x17, 0xe2, 0xcf, 0x4d, 0x72, + 0xda, 0x7b, 0xa0, 0xb5, 0x08, 0x30, 0x99, 0x0e, 0xb2, 0xe5, 0x36, 0x6e, + 0xea, 0xc0, 0x72, 0xeb, 0xd0, 0x5d, 0x49, 0xbb, 0xed, 0xcd, 0x4b, 0x2a, + 0xf5, 0xc8, 0x07, 0x9c, 0x30, 0x7f, 0x67, 0x99, 0x6b, 0x57, 0x4b, 0xae, + 0xf8, 0x03, 0xbb, 0x61, 0x5b, 0x9c, 0x6d, 0xfd, 0x3c, 0x04, 0x6b, 0xd5, + 0x7e, 0x2c, 0x2e, 0x8c, 0x52, 0x6d, 0xa7, 0xfd, 0x56, 0x33, 0x85, 0x4f, + 0xb3, 0x6b, 0x46, 0x3c, 0x95, 0xd0, 0x72, 0x9c, 0x7f, 0xc3, 0x7e, 0xa8, + 0x2b, 0xe0, 0x53, 0x04, 0xe1, 0xe8, 0x96, 0x57, 0x0d, 0x12, 0x22, 0xf4, + 0x30, 0x45, 0xe8, 0xb2, 0x27, 0x2e, 0x7d, 0xc1, 0x45, 0x5f, 0x36, 0xdd, + 0xe4, 0x91, 0x33, 0x0a, 0x8e, 0x57, 0x7c, 0x35, 0xbd, 0x86, 0xed, 0x49, + 0xc3, 0x75, 0x05, 0x38, 0x64, 0x2d, 0x39, 0xb5, 0x4a, 0x02, 0x9e, 0xa0, + 0x2a, 0x1b, 0xf3, 0x3c, 0xdc, 0x68, 0x4f, 0x4b, 0x2d, 0xcb, 0xd5, 0x76, + 0x56, 0x1e, 0x5b, 0xc0, 0x47, 0xce, 0xca, 0xa5, 0x38, 0xe8, 0x0d, 0xdd, + 0xe1, 0x63, 0x8f, 0x88, 0x9b, 0xc3, 0x23, 0xa9, 0xf7, 0xeb, 0x29, 0x57, + 0x09, 0xb7, 0x4a, 0xb7, 0x4a, 0xb8, 0x9a, 0x01, 0x69, 0x34, 0x83, 0xd3, + 0x44, 0x5c, 0x10, 0xcd, 0x36, 0xd9, 0x8c, 0x5e, 0x9a, 0x91, 0xe1, 0xf0, + 0xb2, 0x98, 0x2f, 0xf5, 0x79, 0x4a, 0xcb, 0x72, 0x7e, 0x94, 0x8c, 0x1b, + 0x81, 0x30, 0x20, 0x6a, 0x75, 0x2f, 0xb5, 0xd2, 0xf0, 0x78, 0xdc, 0x4a, + 0xbf, 0x2c, 0xb0, 0x1f, 0x1e, 0x1e, 0x46, 0x9b, 0x87, 0xa0, 0xd0, 0x43, + 0xe5, 0xa6, 0x87, 0x37, 0x9c, 0xd7, 0x39, 0x65, 0x4c, 0x81, 0x9b, 0x25, + 0x67, 0xa0, 0x4c, 0x30, 0x47, 0x6c, 0x8a, 0x2e, 0x61, 0x3d, 0x84, 0x2c, + 0x5e, 0xb1, 0x2d, 0x4b, 0xa0, 0xa4, 0x2a, 0xe2, 0x95, 0x18, 0x06, 0x90, + 0x6f, 0x6a, 0xbe, 0x7f, 0xbb, 0xff, 0xa4, 0x97, 0xd6, 0x94, 0xf0, 0xe5, + 0xdc, 0xac, 0x71, 0xce, 0x6c, 0x3c, 0x77, 0xd4, 0xaf, 0x5a, 0x52, 0x2c, + 0x67, 0xe6, 0xed, 0xc1, 0x25, 0x23, 0x45, 0x97, 0x1a, 0x82, 0xba, 0x26, + 0xc0, 0xcd, 0x1d, 0x49, 0x50, 0x7f, 0x1c, 0xa0, 0x0c, 0x9a, 0x8e, 0x01, + 0x59, 0x96, 0x93, 0x25, 0x45, 0xb6, 0x95, 0x28, 0x9b, 0x56, 0xc1, 0x58, + 0x57, 0xb4, 0xef, 0x14, 0x1c, 0x49, 0x90, 0xe3, 0x3f, 0x8b, 0xe6, 0xf1, + 0x68, 0xe8, 0x4f, 0x95, 0xd7, 0x7f, 0x94, 0x48, 0xdd, 0x6d, 0xed, 0xf5, + 0xa7, 0x7f, 0x6a, 0x9b, 0x10, 0x98, 0x25, 0xdb, 0xc3, 0x8f, 0xd9, 0x0d, + 0xd6, 0xf4, 0x16, 0xd7, 0x62, 0xd2, 0x45, 0xa2, 0x91, 0x8c, 0xb9, 0x14, + 0x78, 0xd5, 0x72, 0x78, 0x68, 0xd3, 0x27, 0x00, 0xcf, 0x62, 0x02, 0x34, + 0xd5, 0xe1, 0x3e, 0x6e, 0x88, 0x37, 0x26, 0xd1, 0x78, 0xa1, 0x72, 0xc2, + 0x35, 0x77, 0xc4, 0xbb, 0xe2, 0xb0, 0x76, 0xf2, 0x64, 0x31, 0x5d, 0x39, + 0x33, 0x80, 0xb6, 0xbd, 0x4e, 0xcc, 0x0c, 0xad, 0x49, 0x61, 0x10, 0xb3, + 0x0d, 0xb0, 0xa8, 0xb6, 0x82, 0x8e, 0x62, 0x16, 0x02, 0xaf, 0x1a, 0xd1, + 0xf3, 0xb1, 0xf6, 0x5c, 0x03, 0x6b, 0x6e, 0xee, 0x50, 0x20, 0x6d, 0x39, + 0x80, 0x07, 0x45, 0x9c, 0xd6, 0x4c, 0xa9, 0xc7, 0xf2, 0x76, 0xa7, 0xbc, + 0xf8, 0x10, 0x8c, 0x12, 0xd2, 0xa5, 0x91, 0xa7, 0xa3, 0xa0, 0x17, 0xfd, + 0x74, 0x2e, 0x18, 0x0b, 0xf4, 0x53, 0x4c, 0xf2, 0x06, 0x94, 0x51, 0xc7, + 0x8d, 0x64, 0xee, 0x61, 0x50, 0x80, 0x9a, 0xa0, 0x29, 0x70, 0x18, 0x55, + 0x3c, 0x0c, 0xc5, 0x4b, 0x35, 0x29, 0x0c, 0x80, 0x1e, 0x2d, 0x42, 0xac, + 0xf7, 0x4f, 0x1d, 0x2a, 0xf2, 0xc5, 0x25, 0xc7, 0x73, 0x48, 0x58, 0x41, + 0x9c, 0x97, 0xdb, 0xc0, 0xb8, 0x90, 0x14, 0xb5, 0x31, 0x63, 0x21, 0x6b, + 0x49, 0x81, 0x8b, 0xd7, 0x87, 0x7b, 0x4f, 0x3e, 0xfb, 0xac, 0x3d, 0x16, + 0x36, 0xd1, 0xac, 0xad, 0x00, 0xd4, 0x9b, 0x71, 0xa2, 0x24, 0x0b, 0x5e, + 0x9c, 0x8e, 0x5c, 0xbc, 0x86, 0x93, 0x86, 0xbd, 0x8a, 0xd9, 0x1d, 0x37, + 0x8d, 0xf7, 0x3c, 0xa0, 0xae, 0x18, 0xdf, 0x24, 0x95, 0xcc, 0x6a, 0xa9, + 0x68, 0x19, 0x0e, 0x87, 0x18, 0xa0, 0x18, 0x5a, 0xec, 0xa5, 0x9f, 0x73, + 0x6a, 0x6b, 0x7a, 0x0d, 0x7c, 0x8b, 0x5a, 0x73, 0x7f, 0x65, 0x1d, 0xf7, + 0x3a, 0x29, 0x9b, 0xe9, 0x98, 0x8a, 0x39, 0xf7, 0x81, 0xc6, 0xdb, 0x68, + 0x50, 0x92, 0x49, 0x5f, 0x2a, 0x7f, 0x70, 0xca, 0xb9, 0x95, 0x1f, 0xa2, + 0xc1, 0x80, 0x71, 0xbf, 0x74, 0x58, 0x1f, 0x0e, 0x94, 0xf5, 0x8b, 0x16, + 0x0d, 0xbf, 0xf0, 0xf1, 0x6f, 0x82, 0x4f, 0x56, 0x96, 0xb1, 0x15, 0x50, + 0x83, 0x45, 0x9c, 0xf1, 0x23, 0x1c, 0x0a, 0xb7, 0x2b, 0x9c, 0x41, 0x14, + 0x33, 0x6d, 0x43, 0x48, 0x7a, 0xa9, 0x8d, 0xc6, 0x02, 0x8d, 0x2b, 0xf8, + 0x1d, 0x3c, 0x9e, 0xb6, 0x95, 0x30, 0xad, 0x83, 0x03, 0xd8, 0x92, 0x87, + 0xc6, 0xf9, 0xc5, 0xbb, 0xc1, 0x3a, 0x35, 0x14, 0xfd, 0xe3, 0x87, 0x78, + 0x86, 0xba, 0x5e, 0x4e, 0xea, 0x87, 0x5b, 0xdf, 0xe7, 0xd8, 0x69, 0xa8, + 0x4b, 0x68, 0x24, 0x17, 0xb7, 0x4d, 0x97, 0x9f, 0xa9, 0xef, 0x3d, 0xbf, + 0xd3, 0x35, 0x7b, 0x5e, 0xe8, 0xa4, 0x07, 0x45, 0xca, 0x70, 0x1c, 0x80, + 0xa1, 0x78, 0xcc, 0xb9, 0xa7, 0xc9, 0x1a, 0x10, 0x32, 0x7e, 0x13, 0x28, + 0x59, 0xfb, 0xad, 0x01, 0x25, 0xfd, 0xd7, 0x6e, 0xa0, 0xaf, 0xbe, 0xa8, + 0xb4, 0x76, 0x7f, 0x3f, 0x98, 0xad, 0xec, 0xbb, 0xa2, 0x52, 0xdd, 0xd0, + 0xe7, 0xbe, 0x6b, 0x06, 0x80, 0x91, 0x4c, 0xb7, 0x70, 0xe4, 0xe5, 0x11, + 0x2f, 0xc2, 0x22, 0x39, 0xbe, 0x26, 0x10, 0xdd, 0x1b, 0xcd, 0x8c, 0x35, + 0x4d, 0x63, 0xf0, 0xd4, 0x27, 0x96, 0xde, 0x2e, 0xd2, 0x3b, 0x12, 0x3b, + 0xe2, 0xd7, 0x99, 0x6a, 0x8a, 0x23, 0xba, 0x54, 0x88, 0xd0, 0x94, 0xd2, + 0x9a, 0x6a, 0x6a, 0x51, 0xe6, 0xcb, 0x71, 0xd9, 0xf4, 0xcc, 0xfa, 0x62, + 0x7f, 0x82, 0xd9, 0x5c, 0x7a, 0xc5, 0x4d, 0x0c, 0xfe, 0x55, 0xa6, 0x80, + 0x2b, 0x93, 0x47, 0x6c, 0x78, 0xce, 0x75, 0xbc, 0x12, 0xc0, 0x38, 0x77, + 0x7b, 0x22, 0x3e, 0x2b, 0xde, 0x83, 0x87, 0x27, 0x58, 0xbb, 0xf0, 0x9d, + 0xfb, 0x64, 0xf4, 0xea, 0x0b, 0x0e, 0x39, 0x7c, 0x00, 0x0c, 0xac, 0xc0, + 0x41, 0x33, 0x0d, 0x6e, 0xf3, 0x9f, 0x9d, 0x88, 0x23, 0x4e, 0x5a, 0xd6, + 0x9d, 0xb8, 0xf8, 0xba, 0x16, 0x03, 0xe4, 0x94, 0xa0, 0xb5, 0xab, 0x2c, + 0x5b, 0xdb, 0xd8, 0x0f, 0x61, 0x61, 0xc1, 0x20, 0xa7, 0x47, 0x52, 0x6c, + 0x3c, 0x11, 0x0a, 0xe1, 0xf1, 0x16, 0xce, 0xf5, 0x9c, 0xca, 0x21, 0x6c, + 0x43, 0x1c, 0x18, 0xad, 0x5c, 0x81, 0x09, 0xcb, 0x3e, 0x7e, 0xd5, 0x93, + 0x3a, 0xab, 0xac, 0xad, 0xae, 0x5f, 0x10, 0x7e, 0xfa, 0xd5, 0x17, 0xc0, + 0x34, 0xe3, 0x5f, 0xff, 0xec, 0xde, 0xe6, 0x7f, 0x88, 0x8a, 0x89, 0x0b, + 0xac, 0x9d, 0x08, 0x8b, 0x22, 0x57, 0xcb, 0x1c, 0x62, 0x46, 0x22, 0x47, + 0xb2, 0x10, 0x5d, 0x56, 0x11, 0x8b, 0x95, 0x95, 0xbc, 0x39, 0x78, 0xfb, + 0xee, 0xe0, 0x74, 0xf0, 0x98, 0xf8, 0x1a, 0x9a, 0x4a, 0x5d, 0xa0, 0x19, + 0xec, 0x96, 0x15, 0xc1, 0x91, 0xcf, 0xa3, 0x86, 0xfc, 0xcb, 0x4d, 0xf8, + 0x68, 0xb5, 0x9a, 0x68, 0x68, 0x88, 0x20, 0x4c, 0x4e, 0x7a, 0x83, 0x2a, + 0xdc, 0x87, 0xcb, 0x24, 0x16, 0xe4, 0x21, 0x6d, 0x54, 0x45, 0x87, 0x96, + 0x08, 0x71, 0x76, 0x6c, 0xe6, 0xb1, 0xd4, 0xee, 0x32, 0x2b, 0xc6, 0x34, + 0xe5, 0x12, 0xb8, 0x53, 0x46, 0x94, 0x3c, 0xd5, 0x62, 0x9e, 0xdd, 0x2f, + 0xba, 0x72, 0x36, 0xba, 0x2f, 0xbb, 0x8c, 0xbe, 0x43, 0xef, 0x8c, 0x5b, + 0xf2, 0x65, 0x0a, 0x17, 0xea, 0x11, 0x75, 0x85, 0x6a, 0xba, 0x36, 0x04, + 0x5d, 0x33, 0x19, 0x16, 0x02, 0x3d, 0xe6, 0x1a, 0x3f, 0xcb, 0xc5, 0x2c, + 0x93, 0x78, 0xde, 0xe2, 0xa1, 0xaa, 0xa6, 0x06, 0x4b, 0xe5, 0x2c, 0x5c, + 0x0d, 0x65, 0x66, 0xd3, 0x16, 0x0d, 0x24, 0x67, 0x7e, 0xc1, 0x91, 0x14, + 0x02, 0x41, 0xd9, 0x16, 0x1d, 0x22, 0x37, 0x46, 0x50, 0x2c, 0x27, 0xd2, + 0xb1, 0x70, 0xf0, 0x0e, 0x5d, 0xcc, 0x29, 0x47, 0xea, 0xc2, 0xda, 0x4b, + 0xdf, 0x5e, 0x5f, 0x6b, 0xf2, 0x32, 0xcf, 0x9b, 0xd6, 0x8e, 0x66, 0xdd, + 0xc0, 0xc1, 0xd4, 0xca, 0xb9, 0x44, 0xc7, 0x75, 0x90, 0xaa, 0xfe, 0x35, + 0x89, 0x35, 0xd7, 0xd3, 0x6c, 0x94, 0x5d, 0x5d, 0x3d, 0x42, 0x1b, 0x92, + 0x3f, 0x86, 0x26, 0x84, 0x2d, 0x77, 0x38, 0x73, 0x84, 0xdf, 0x1b, 0x69, + 0x3d, 0x59, 0xae, 0xab, 0x30, 0x10, 0x33, 0x27, 0xa0, 0xa9, 0x1a, 0xe6, + 0xa2, 0x30, 0x24, 0xb8, 0xe7, 0xf2, 0x5b, 0x2c, 0x2a, 0x19, 0x85, 0x46, + 0x45, 0x67, 0xd7, 0x58, 0x47, 0x0f, 0x4d, 0x53, 0x44, 0x7f, 0xff, 0xc7, + 0x8f, 0x3f, 0xb5, 0x80, 0x39, 0xb1, 0xeb, 0x42, 0xa3, 0xfa, 0x39, 0xaa, + 0x59, 0xb3, 0x91, 0xe0, 0x23, 0x60, 0x7b, 0x95, 0x47, 0x71, 0xd4, 0xca, + 0x38, 0x83, 0x20, 0x6f, 0xa2, 0x79, 0x61, 0xb0, 0xed, 0xce, 0x3a, 0x8c, + 0x11, 0x5e, 0x50, 0x5a, 0xe8, 0xc6, 0x34, 0xb9, 0x8e, 0x81, 0xf0, 0xe0, + 0x6f, 0x4f, 0x97, 0x24, 0x2b, 0xcc, 0xba, 0x09, 0x14, 0xe7, 0x72, 0xe0, + 0x43, 0x41, 0x0a, 0xc6, 0xe4, 0x8b, 0x13, 0xe7, 0xb4, 0x09, 0x36, 0xe2, + 0x2b, 0xde, 0x88, 0xc6, 0xaa, 0x39, 0x20, 0xc5, 0x5e, 0x1d, 0x85, 0x34, + 0x84, 0x2f, 0x40, 0xf6, 0x87, 0x28, 0xfe, 0x15, 0x60, 0xac, 0x86, 0x10, + 0x13, 0x80, 0x91, 0x09, 0xa6, 0x7b, 0x88, 0x58, 0x84, 0x23, 0xea, 0x52, + 0x78, 0xc0, 0xd6, 0x11, 0xa5, 0xf2, 0xd5, 0xb1, 0x43, 0x87, 0x6b, 0xd0, + 0x7d, 0xa5, 0x10, 0x5c, 0x15, 0x47, 0x0e, 0x00, 0x94, 0xae, 0xba, 0xdf, + 0xbd, 0xab, 0xf1, 0x21, 0x06, 0xfb, 0x36, 0x25, 0x44, 0x71, 0x89, 0x44, + 0xad, 0x33, 0xd8, 0x02, 0xbf, 0x6c, 0xa7, 0x86, 0xf7, 0xd7, 0xfd, 0x8f, + 0xae, 0x07, 0x89, 0x69, 0x0d, 0x22, 0x74, 0x09, 0x6e, 0xcd, 0x24, 0xfd, + 0xfe, 0x49, 0xcf, 0x0f, 0xd6, 0xf7, 0x68, 0x53, 0x19, 0xb5, 0x00, 0xc1, + 0xad, 0x1b, 0xc7, 0xd7, 0xc7, 0x07, 0x47, 0x36, 0xdf, 0x7f, 0x4b, 0x86, + 0x3d, 0xe0, 0xa0, 0x42, 0x9f, 0x90, 0x39, 0x05, 0x47, 0x89, 0xc0, 0xdf, + 0x2d, 0xcd, 0x47, 0x84, 0x4d, 0x33, 0x23, 0x47, 0x4b, 0xc4, 0x18, 0x49, + 0x6c, 0x0c, 0x8b, 0x6d, 0x55, 0x88, 0x5d, 0x0d, 0x16, 0x11, 0x59, 0x5d, + 0xd5, 0x24, 0xf3, 0x0a, 0x09, 0x33, 0x0a, 0xbc, 0x2a, 0xad, 0x75, 0x92, + 0x82, 0xa2, 0x81, 0x01, 0x61, 0xdf, 0x20, 0x23, 0x6e, 0xba, 0x68, 0xe4, + 0x46, 0xc5, 0xd7, 0x9c, 0xbb, 0x39, 0x5d, 0x04, 0xcf, 0x06, 0xd9, 0x73, + 0x2f, 0xe5, 0xe7, 0xba, 0x7b, 0xe5, 0x58, 0x40, 0xb1, 0xf4, 0x61, 0x27, + 0xac, 0xb8, 0x74, 0x93, 0x52, 0x96, 0x81, 0x84, 0x0d, 0xe2, 0x4e, 0xd7, + 0x09, 0x8a, 0x6e, 0x33, 0xff, 0xac, 0xaf, 0x83, 0x15, 0x15, 0x26, 0x86, + 0xec, 0x41, 0x6e, 0x05, 0x71, 0x4b, 0xb3, 0x1a, 0xc3, 0x5c, 0x0f, 0x4d, + 0x5e, 0xb3, 0xf2, 0x46, 0x93, 0x46, 0xed, 0x19, 0xbe, 0xd6, 0x8b, 0x92, + 0x53, 0x4a, 0xdd, 0xc8, 0xf8, 0xbd, 0x9b, 0xb8, 0xf0, 0x7e, 0x01, 0x41, + 0x7b, 0x28, 0xc2, 0xc8, 0x07, 0xf3, 0x6b, 0x36, 0x2b, 0x7c, 0x58, 0x20, + 0xbe, 0xc5, 0x5f, 0xf4, 0x44, 0xce, 0x66, 0x40, 0x00, 0x7e, 0x41, 0x93, + 0xfa, 0x5c, 0x6f, 0x1e, 0x0c, 0x6f, 0xd9, 0x04, 0xb2, 0xaf, 0x1d, 0x57, + 0xe7, 0x4c, 0xcd, 0xe6, 0x49, 0xd5, 0x72, 0xc2, 0x73, 0xb4, 0x34, 0x42, + 0x24, 0xed, 0xa1, 0x68, 0x7c, 0xe3, 0xd6, 0x63, 0x81, 0xaf, 0x5c, 0xe2, + 0x46, 0x88, 0xe7, 0xe1, 0x38, 0x5d, 0x96, 0xf7, 0x24, 0x93, 0x85, 0x77, + 0xf4, 0x85, 0x64, 0x35, 0xd6, 0xbe, 0xe3, 0xf1, 0x3a, 0xdf, 0xae, 0xab, + 0x6a, 0xe1, 0xf2, 0x71, 0x8d, 0xd7, 0xc3, 0xa4, 0x26, 0xa9, 0xe6, 0x49, + 0xce, 0x2e, 0x0e, 0x84, 0x6d, 0xb1, 0x18, 0x7b, 0xdf, 0xe4, 0xe8, 0x5a, + 0x8b, 0x07, 0xe7, 0x81, 0xeb, 0x3e, 0xb0, 0x91, 0x4c, 0x72, 0x0d, 0x75, + 0xd6, 0xba, 0x64, 0x74, 0x45, 0x5c, 0xa7, 0x77, 0x42, 0x2d, 0x36, 0xb2, + 0x96, 0x8c, 0x37, 0x37, 0x06, 0x13, 0xf5, 0xbd, 0x73, 0x5f, 0xd0, 0x1b, + 0xa2, 0x02, 0xe5, 0x39, 0x2c, 0x6d, 0x7e, 0x9c, 0x4d, 0xf9, 0x9e, 0x93, + 0xb2, 0xe6, 0x44, 0xd8, 0x75, 0x3f, 0xdc, 0xd7, 0x24, 0xd5, 0xed, 0x77, + 0xda, 0xe3, 0xdd, 0x3d, 0xb2, 0x50, 0xe1, 0xa0, 0x7c, 0x11, 0x9d, 0x62, + 0xbb, 0x8c, 0x23, 0x4b, 0xd4, 0xb7, 0xad, 0xe3, 0xb5, 0x80, 0xf6, 0xd6, + 0x51, 0x5b, 0xba, 0xc6, 0x02, 0x31, 0x8d, 0x93, 0x7e, 0x76, 0xd5, 0x47, + 0x35, 0x47, 0x2e, 0xa3, 0xc7, 0x5a, 0x59, 0x40, 0xd0, 0x48, 0xdd, 0xe5, + 0x2d, 0xa2, 0xb6, 0xdb, 0x6e, 0x49, 0x0d, 0x8a, 0xcf, 0x9d, 0xc5, 0x4e, + 0x07, 0xa4, 0x6b, 0xb2, 0xcf, 0x56, 0x1e, 0x7b, 0xdd, 0xa1, 0xb8, 0x71, + 0xa2, 0x64, 0x9c, 0xe7, 0x29, 0x9d, 0xc2, 0x06, 0xf8, 0x31, 0x42, 0x18, + 0x7b, 0x72, 0x91, 0x4a, 0x44, 0x18, 0xbb, 0x7b, 0x66, 0xe2, 0xe4, 0x83, + 0x97, 0x66, 0xb9, 0x80, 0x44, 0xc8, 0x39, 0xdb, 0x6d, 0xb2, 0xaf, 0x4f, + 0x76, 0xab, 0x95, 0x52, 0x84, 0x03, 0x23, 0xcc, 0x0d, 0x5e, 0x87, 0x84, + 0x52, 0xf5, 0x3d, 0x40, 0x3f, 0x72, 0x77, 0x60, 0x55, 0x0c, 0x86, 0x03, + 0xc6, 0x2f, 0xfa, 0xb6, 0x18, 0x5e, 0xdb, 0x62, 0x91, 0xf8, 0x15, 0xe3, + 0x1e, 0x81, 0xec, 0xcc, 0xe5, 0xaf, 0x17, 0xcb, 0xd1, 0x6c, 0xf2, 0x2c, + 0x7a, 0x49, 0xff, 0x7c, 0xde, 0xe2, 0x3b, 0x47, 0x75, 0x73, 0x11, 0xf9, + 0x54, 0x10, 0xc2, 0xef, 0x4f, 0xf6, 0xf8, 0x38, 0x3c, 0x50, 0x8b, 0xe3, + 0x14, 0xe0, 0x32, 0x93, 0xf4, 0x3a, 0x2d, 0x0b, 0x97, 0x44, 0x88, 0x57, + 0xd6, 0x97, 0xd5, 0xc2, 0x0a, 0xed, 0xee, 0x7d, 0x16, 0x8d, 0xd2, 0x32, + 0x7a, 0x73, 0xf4, 0x4c, 0x4a, 0xf3, 0x15, 0xcb, 0x99, 0x2f, 0xe1, 0x0a, + 0xec, 0x60, 0x1e, 0x20, 0x49, 0xa7, 0x34, 0xc6, 0x69, 0xa3, 0x46, 0xce, + 0x6d, 0xb2, 0xea, 0x55, 0xaa, 0x43, 0x5c, 0x99, 0x67, 0x36, 0x30, 0xb2, + 0x3b, 0x7a, 0x93, 0x52, 0xdf, 0xe6, 0xb4, 0x6f, 0x11, 0xe8, 0x69, 0xfe, + 0xd4, 0x7f, 0x11, 0x59, 0x55, 0xaf, 0x8a, 0xb8, 0x69, 0x55, 0x1d, 0x90, + 0xf1, 0x78, 0x78, 0x8e, 0xcd, 0x1c, 0x56, 0x91, 0x5c, 0x1e, 0xc3, 0xc8, + 0xfd, 0xb4, 0x6a, 0x5a, 0x95, 0xf2, 0x9c, 0x86, 0x6d, 0xd4, 0x27, 0xe5, + 0xea, 0x7a, 0x5d, 0xcd, 0xc5, 0x13, 0x3c, 0x5a, 0xb1, 0x90, 0x9d, 0xe2, + 0x71, 0x97, 0xf9, 0x1c, 0x44, 0x69, 0xf1, 0x41, 0x48, 0xc7, 0x5c, 0xfa, + 0xb6, 0x81, 0xd2, 0xba, 0x14, 0x18, 0x64, 0x4c, 0xc0, 0x2a, 0x81, 0xe6, + 0x4b, 0xc1, 0x3e, 0x3f, 0x58, 0xb0, 0x91, 0x27, 0xda, 0x1d, 0x3c, 0xf4, + 0xc2, 0x42, 0x64, 0x8a, 0x94, 0xcf, 0xe5, 0xc6, 0x1a, 0x1e, 0x28, 0x44, + 0x63, 0xd4, 0x06, 0xc4, 0x4d, 0x8b, 0x75, 0x6d, 0xca, 0xe1, 0x49, 0xb9, + 0x30, 0xe1, 0x3d, 0x62, 0x66, 0xd7, 0x31, 0x40, 0xda, 0x03, 0xca, 0x4b, + 0xe9, 0x1c, 0x28, 0xf4, 0xd9, 0x9a, 0x79, 0xcb, 0x97, 0x2e, 0xfb, 0xdd, + 0x2e, 0x61, 0x95, 0xc3, 0x35, 0xb4, 0xd7, 0xc8, 0x2d, 0x78, 0xa2, 0x59, + 0x2c, 0x8d, 0xdb, 0xc1, 0x8e, 0xe3, 0xf8, 0x8a, 0xfe, 0xab, 0x6b, 0xd0, + 0xe7, 0x9b, 0xaf, 0x17, 0xa1, 0x9e, 0xba, 0x12, 0x9e, 0x0f, 0x6a, 0x46, + 0xa3, 0xcd, 0x20, 0xfe, 0xc2, 0xea, 0xfd, 0x72, 0xb4, 0xd3, 0x60, 0x10, + 0x1e, 0x27, 0x70, 0xf2, 0x2b, 0x66, 0x7f, 0xad, 0xb9, 0xdc, 0xe7, 0x82, + 0x6d, 0x58, 0xad, 0x63, 0x6d, 0xf1, 0x12, 0x5e, 0x4c, 0x76, 0xad, 0x0c, + 0x9c, 0x55, 0x80, 0x7d, 0x9a, 0x2d, 0x53, 0xb3, 0xde, 0x22, 0x99, 0x46, + 0xe8, 0xdf, 0x0f, 0x6b, 0xdb, 0x0f, 0xa2, 0x83, 0xb9, 0xe9, 0xe2, 0x5a, + 0x54, 0x8c, 0x73, 0x77, 0x1a, 0x55, 0x60, 0x6e, 0x93, 0x86, 0x49, 0x40, + 0x6d, 0x02, 0xc1, 0xcc, 0x48, 0xae, 0xda, 0xd9, 0xdf, 0x0d, 0xeb, 0x07, + 0xcd, 0xb5, 0xd0, 0x04, 0x8a, 0xea, 0xfc, 0x76, 0xd1, 0xf7, 0x27, 0x2a, + 0x89, 0xb5, 0xd1, 0x0b, 0xc3, 0x73, 0x6f, 0xbf, 0x3e, 0x39, 0x3d, 0xde, + 0x8a, 0x5e, 0x27, 0xc0, 0x15, 0xa9, 0x91, 0x0d, 0x1f, 0xde, 0xdf, 0xc9, + 0x27, 0x46, 0xfd, 0xaa, 0x84, 0xb6, 0xe5, 0xbc, 0x39, 0x57, 0x3d, 0xe4, + 0x69, 0x39, 0x12, 0x98, 0x85, 0xe4, 0x65, 0x65, 0x30, 0x5d, 0x1a, 0x08, + 0xbb, 0x05, 0x33, 0xb6, 0x92, 0x1f, 0x6c, 0x6d, 0xbe, 0x62, 0x8e, 0x47, + 0xa1, 0x47, 0x39, 0x79, 0x8d, 0x03, 0xe6, 0x81, 0x47, 0x6a, 0x91, 0xb3, + 0xe0, 0x50, 0xad, 0x9c, 0xde, 0x32, 0x3a, 0xa9, 0x65, 0x97, 0xfe, 0x2c, + 0xc1, 0xe8, 0x58, 0xb5, 0x59, 0x36, 0x71, 0x30, 0x94, 0x52, 0xd9, 0x86, + 0xe7, 0x1b, 0xac, 0xdd, 0x5f, 0x69, 0xed, 0xfe, 0xba, 0x9c, 0xdf, 0xf6, + 0xb5, 0x82, 0xa1, 0x02, 0x7a, 0x14, 0xed, 0x67, 0xef, 0x3b, 0x17, 0x84, + 0x82, 0xc0, 0x60, 0x31, 0x74, 0x36, 0x0b, 0xf9, 0xc5, 0x1a, 0x75, 0x2a, + 0x03, 0x5f, 0x5f, 0x08, 0xc8, 0x0b, 0x0f, 0x52, 0x7c, 0x7d, 0xcc, 0x11, + 0xc9, 0x50, 0x10, 0x3b, 0x56, 0x50, 0xd1, 0x1a, 0xee, 0x0c, 0x42, 0x08, + 0xc6, 0x06, 0xb4, 0x6d, 0x61, 0xa9, 0x67, 0x37, 0xae, 0x1c, 0x1e, 0xe4, + 0x57, 0x0d, 0x2f, 0x61, 0xd1, 0x86, 0xd7, 0x9b, 0x2e, 0x7a, 0x5f, 0xaa, + 0xb1, 0x10, 0x9c, 0x59, 0x26, 0xa5, 0xda, 0x35, 0x2b, 0x09, 0x81, 0x86, + 0x12, 0x5e, 0x18, 0x00, 0x90, 0x8d, 0x30, 0xaa, 0x0f, 0xce, 0x10, 0xc4, + 0x59, 0x36, 0xe8, 0x36, 0x08, 0x67, 0x3c, 0xcd, 0xa4, 0x3a, 0xd2, 0x7d, + 0xe8, 0xd6, 0xfc, 0x4f, 0xdc, 0xf7, 0x7c, 0x95, 0x29, 0x25, 0xf6, 0x5b, + 0x22, 0xe4, 0x5d, 0xb1, 0xb7, 0xe0, 0xa0, 0x48, 0xa6, 0x18, 0xe4, 0x88, + 0x33, 0xdf, 0xc6, 0x3c, 0x28, 0x0d, 0xee, 0x73, 0x91, 0x5a, 0x61, 0xb3, + 0xfa, 0x81, 0xde, 0xed, 0x38, 0xf5, 0x11, 0x91, 0x55, 0x56, 0xa4, 0x22, + 0x59, 0x38, 0xa3, 0x60, 0x20, 0x88, 0xb7, 0x14, 0x74, 0x34, 0x70, 0x03, + 0x70, 0x29, 0xf7, 0x8a, 0xf3, 0x54, 0x71, 0xcc, 0xb1, 0x9f, 0xef, 0x2d, + 0xf8, 0x7a, 0xd1, 0x16, 0x37, 0x66, 0xe9, 0x54, 0xa1, 0x74, 0x13, 0x18, + 0x3a, 0x55, 0xd0, 0x77, 0x70, 0xe9, 0xca, 0x2b, 0x3b, 0xd6, 0x5a, 0xa7, + 0x19, 0x34, 0x12, 0x22, 0x0d, 0x88, 0xe9, 0xcc, 0x23, 0x3c, 0x1d, 0x10, + 0x7d, 0x35, 0x1e, 0xe1, 0x78, 0x05, 0x89, 0x5c, 0x4f, 0x5a, 0xea, 0x79, + 0x0b, 0x62, 0x37, 0x6d, 0x92, 0xc5, 0x36, 0xb8, 0xba, 0x81, 0x2d, 0xb9, + 0x79, 0x92, 0xc3, 0x88, 0x75, 0x8b, 0xd9, 0x81, 0x56, 0xa7, 0xd5, 0x95, + 0x39, 0x6b, 0x55, 0x8f, 0x31, 0xef, 0x8a, 0x14, 0x0e, 0xf2, 0x63, 0x0a, + 0xe1, 0xfb, 0xd7, 0x4f, 0x16, 0x15, 0x6c, 0x2c, 0xde, 0x30, 0x5c, 0xe3, + 0x66, 0xb8, 0x61, 0x20, 0x8a, 0x7a, 0x23, 0x17, 0xca, 0xd2, 0xb0, 0x88, + 0x8d, 0xab, 0xdb, 0x8a, 0x9c, 0x68, 0x00, 0x43, 0xe4, 0xec, 0xb5, 0x91, + 0xab, 0x2b, 0xb7, 0xa6, 0x5c, 0x1c, 0x92, 0x2f, 0x6f, 0xe2, 0x87, 0x87, + 0x41, 0x91, 0x48, 0xfd, 0xb4, 0xa2, 0x98, 0x22, 0xd1, 0xb3, 0x5a, 0x27, + 0x8e, 0x73, 0xfc, 0x93, 0x45, 0x3c, 0x45, 0xb4, 0x23, 0xf3, 0xa3, 0x75, + 0xf5, 0xb8, 0x2a, 0x26, 0xbd, 0x44, 0xa3, 0xdd, 0xf0, 0x46, 0x5c, 0xad, + 0x9a, 0xc5, 0xa8, 0x50, 0x85, 0x41, 0x7c, 0x73, 0x10, 0x16, 0xd1, 0xec, + 0xa4, 0xe1, 0x74, 0xd2, 0xc0, 0x2e, 0xb8, 0x7f, 0x78, 0xe3, 0xdc, 0x28, + 0x58, 0xdd, 0x18, 0xa9, 0x21, 0xda, 0x75, 0x61, 0x3e, 0xb2, 0x94, 0x1e, + 0xbe, 0x4b, 0x27, 0xcb, 0x86, 0xb6, 0x5b, 0x7f, 0xdd, 0xaa, 0xf1, 0x06, + 0xa9, 0x17, 0xe0, 0x3c, 0xfc, 0x44, 0xe6, 0x2e, 0x75, 0x40, 0xf7, 0xa2, + 0xca, 0x63, 0xe3, 0x32, 0xb8, 0x52, 0x18, 0x0e, 0xdc, 0x32, 0x97, 0x87, + 0xe7, 0xef, 0xbf, 0x39, 0x3e, 0x3e, 0x3f, 0x39, 0x62, 0xf6, 0x8f, 0xfb, + 0xc6, 0x7d, 0xf4, 0xf6, 0xf2, 0xdb, 0x53, 0x0f, 0xc5, 0xa1, 0x9a, 0x42, + 0xfd, 0x40, 0xb1, 0xe1, 0x97, 0x9b, 0x3b, 0x4d, 0xe7, 0xcb, 0x87, 0x1e, + 0xca, 0x50, 0x91, 0x9e, 0x71, 0x70, 0xf2, 0x3d, 0xc9, 0x2e, 0xe7, 0xfd, + 0x77, 0xdf, 0x37, 0xb2, 0xa7, 0x82, 0xa0, 0x3c, 0xba, 0xbe, 0xea, 0xe7, + 0xdc, 0xc5, 0xe8, 0x01, 0x23, 0xcc, 0xcf, 0xdd, 0x48, 0xac, 0x05, 0x84, + 0xf9, 0x23, 0x63, 0x8e, 0xab, 0x5a, 0x4b, 0x78, 0xdd, 0x3b, 0xeb, 0x12, + 0x76, 0xbf, 0xe5, 0xb6, 0x8b, 0x67, 0x9c, 0x68, 0x34, 0x08, 0x09, 0x6b, + 0x15, 0xbd, 0xa4, 0x7f, 0xda, 0xb2, 0x35, 0xb7, 0xb9, 0x98, 0x7d, 0x74, + 0x1e, 0x60, 0x57, 0x38, 0x17, 0xd6, 0xc0, 0xe2, 0x96, 0xd4, 0x92, 0xa0, + 0xf9, 0x47, 0xea, 0x23, 0xcc, 0x1b, 0x20, 0x96, 0xae, 0x05, 0x5f, 0xfb, + 0x17, 0xe6, 0xbd, 0xa4, 0xdd, 0xf9, 0xf8, 0x2b, 0xa6, 0xa9, 0x52, 0xa7, + 0x1f, 0x04, 0x44, 0x68, 0xce, 0x91, 0x9f, 0x1d, 0x38, 0x48, 0x18, 0x15, + 0x59, 0xb8, 0x15, 0x4c, 0x50, 0x96, 0xad, 0x05, 0xaf, 0x5d, 0x10, 0x13, + 0x42, 0xb4, 0x8f, 0x94, 0xa8, 0xfc, 0xe8, 0xf8, 0xa2, 0x27, 0x20, 0x09, + 0x21, 0x40, 0x82, 0x47, 0x01, 0x1a, 0x58, 0x01, 0xe7, 0xb2, 0xd5, 0x78, + 0x05, 0x2c, 0x93, 0x7f, 0x1f, 0x36, 0xc2, 0x6d, 0x3e, 0x8a, 0x5e, 0x22, + 0xe0, 0x6f, 0x4d, 0x20, 0xb5, 0x16, 0x98, 0xfd, 0x26, 0xc9, 0x47, 0x49, + 0x9e, 0x15, 0xf5, 0x24, 0x3a, 0x4d, 0xb8, 0xd7, 0x42, 0x9e, 0xdc, 0x8e, + 0x65, 0xe2, 0x36, 0x03, 0x0b, 0xc1, 0xa7, 0xf9, 0x85, 0x46, 0xba, 0x50, + 0x17, 0x91, 0x73, 0xdd, 0x5e, 0xd4, 0xe5, 0x44, 0x41, 0xfe, 0x49, 0xec, + 0xeb, 0x0a, 0x8e, 0x91, 0x34, 0x9e, 0x76, 0x7b, 0x4d, 0xc8, 0xc4, 0xae, + 0x2e, 0x7b, 0x97, 0x03, 0x1f, 0x55, 0x35, 0x86, 0x1d, 0x05, 0x66, 0x43, + 0xc6, 0x62, 0xc2, 0x58, 0x0c, 0x96, 0x85, 0xcd, 0x18, 0xde, 0x40, 0x57, + 0x34, 0xb0, 0xac, 0x5c, 0x73, 0x75, 0xf3, 0x71, 0xfb, 0x05, 0x11, 0x32, + 0x04, 0x0d, 0x8c, 0x64, 0x5d, 0xdf, 0x12, 0xd9, 0x25, 0xd5, 0x5d, 0x40, + 0x64, 0x6f, 0x75, 0xe1, 0x9e, 0x8a, 0x8d, 0xfe, 0xab, 0xe1, 0xf0, 0xe0, + 0xfc, 0xa4, 0xbe, 0xd4, 0xf4, 0x69, 0xff, 0xad, 0xd5, 0x92, 0xdf, 0x72, + 0xc4, 0xe2, 0x2d, 0xc2, 0x3c, 0x7e, 0xe4, 0x1e, 0xb1, 0x74, 0xcd, 0x71, + 0x22, 0xc0, 0xa2, 0xfa, 0x96, 0x2e, 0xb3, 0x35, 0x11, 0x8e, 0x0a, 0x3c, + 0xa4, 0x26, 0xce, 0x3c, 0xaa, 0xd4, 0xa8, 0x24, 0x59, 0xf2, 0x37, 0xa4, + 0xa9, 0x6f, 0xa4, 0xee, 0xd9, 0x55, 0x7a, 0xcd, 0x41, 0xfa, 0xf8, 0xd9, + 0x86, 0xc3, 0x54, 0x3d, 0x6e, 0xc1, 0x83, 0x5e, 0x60, 0x06, 0xe4, 0x99, + 0xe6, 0x98, 0x89, 0xdc, 0xac, 0xd8, 0xc9, 0x2d, 0xe1, 0x26, 0xfc, 0xb6, + 0x3a, 0x75, 0xd3, 0x20, 0x68, 0x02, 0x62, 0x86, 0xeb, 0x63, 0xe6, 0x6a, + 0x90, 0x04, 0xed, 0x8a, 0xa7, 0xb4, 0x6e, 0x6a, 0xd3, 0x7a, 0x79, 0xa6, + 0xbf, 0x24, 0xf3, 0xca, 0x74, 0x55, 0x5c, 0x16, 0x4b, 0x17, 0xbb, 0xfc, + 0xed, 0x79, 0xb3, 0x23, 0xd6, 0x4d, 0x6d, 0xe3, 0x92, 0x71, 0x9d, 0xc3, + 0x11, 0x0c, 0xa2, 0xb3, 0x45, 0x20, 0x7d, 0xdd, 0x24, 0x69, 0xee, 0x3d, + 0xa2, 0x3e, 0x9f, 0x1d, 0x5c, 0xa1, 0x39, 0x59, 0xd1, 0x82, 0x82, 0x72, + 0x2b, 0xf3, 0x60, 0x01, 0xa4, 0xc8, 0x8a, 0xe3, 0xba, 0x82, 0xc4, 0xcf, + 0x53, 0x29, 0x93, 0x62, 0x41, 0x7a, 0x68, 0xa3, 0x4a, 0xa8, 0x58, 0x37, + 0x05, 0xf9, 0x80, 0x01, 0xa8, 0x0b, 0x44, 0xe1, 0x44, 0xc0, 0xec, 0x5f, + 0x55, 0x9c, 0x2e, 0x70, 0x79, 0xd2, 0x29, 0xda, 0x54, 0x00, 0xc3, 0xb6, + 0xaa, 0x6c, 0xe2, 0x33, 0xc8, 0x41, 0x3d, 0x86, 0xfd, 0xaf, 0xb1, 0x20, + 0x41, 0xeb, 0x52, 0xcc, 0x51, 0xf0, 0xb7, 0x02, 0x3f, 0x70, 0x4b, 0x5a, + 0xa4, 0xba, 0x10, 0xc3, 0x09, 0x18, 0xbe, 0x8a, 0x7b, 0x53, 0xf3, 0xf8, + 0x47, 0x80, 0x0a, 0x52, 0x75, 0x42, 0xc1, 0x1f, 0x1a, 0x58, 0x50, 0x19, + 0x30, 0x56, 0xbe, 0x13, 0x64, 0x88, 0x49, 0xb6, 0x64, 0xfe, 0x26, 0x9f, + 0xd6, 0x3d, 0x38, 0x89, 0x14, 0x81, 0x2c, 0xd8, 0x29, 0xc4, 0x5e, 0x9c, + 0x96, 0x22, 0x15, 0x0e, 0x9a, 0x61, 0x3f, 0x8a, 0xfe, 0xf2, 0x97, 0x5e, + 0xf4, 0x97, 0x0e, 0xfd, 0x57, 0xd2, 0x7f, 0xb4, 0xa0, 0x7f, 0x91, 0x9a, + 0x07, 0x7f, 0xb9, 0xa3, 0x0b, 0x34, 0xe2, 0xda, 0x85, 0xc5, 0x94, 0x41, + 0x04, 0x3c, 0xa0, 0x7d, 0x33, 0x8f, 0x50, 0x42, 0x0c, 0xb5, 0x88, 0x07, + 0x9f, 0x7d, 0x98, 0xb0, 0x26, 0x6e, 0xad, 0x24, 0xb5, 0x86, 0x36, 0x6c, + 0x39, 0x9b, 0x8b, 0x82, 0xac, 0x5b, 0x0f, 0xa2, 0x6e, 0x68, 0x91, 0xc4, + 0x08, 0xbb, 0x9f, 0x74, 0xd5, 0x6d, 0x5e, 0x5a, 0x6a, 0x6b, 0x18, 0xa5, + 0x89, 0xf7, 0x5c, 0x55, 0x72, 0x2d, 0x18, 0x09, 0xcb, 0x70, 0x5b, 0xbc, + 0x26, 0x14, 0xf1, 0x33, 0x36, 0xe6, 0x49, 0x81, 0x51, 0xf0, 0x54, 0xe1, + 0x18, 0x6c, 0x90, 0x8e, 0x16, 0x37, 0x2b, 0xe8, 0x99, 0x42, 0x83, 0xe2, + 0xb3, 0xb3, 0x18, 0x5f, 0x1a, 0x65, 0x4b, 0xf9, 0x91, 0xa6, 0xf0, 0x1d, + 0x20, 0xb3, 0x39, 0x8d, 0x89, 0xdd, 0xee, 0x01, 0x5f, 0xa1, 0xf1, 0x75, + 0xfb, 0xdd, 0x2a, 0x36, 0xa2, 0xd5, 0xba, 0x69, 0xab, 0x87, 0x13, 0x94, + 0xae, 0x69, 0xd4, 0xd0, 0xf4, 0xc8, 0x5f, 0x12, 0xa5, 0x36, 0x12, 0x0e, + 0xe4, 0x5c, 0x49, 0x70, 0x11, 0x9a, 0xe5, 0x2c, 0x3c, 0x67, 0x3d, 0xdc, + 0x38, 0x8d, 0x9a, 0x25, 0x92, 0x9a, 0xe6, 0x7d, 0x51, 0x48, 0xef, 0xf7, + 0xaa, 0x50, 0xbf, 0x2f, 0x55, 0x36, 0xc5, 0x71, 0xce, 0xe4, 0x81, 0x3a, + 0x85, 0x2b, 0x0e, 0xb6, 0x59, 0x34, 0x2c, 0x8f, 0xbc, 0xca, 0xf6, 0x26, + 0x8f, 0x83, 0x39, 0x33, 0x17, 0xdc, 0xb9, 0x9f, 0x2b, 0x0f, 0x19, 0x66, + 0x00, 0xa0, 0x16, 0xc3, 0x94, 0xa2, 0xca, 0x14, 0x3e, 0x48, 0xa3, 0xc5, + 0x6b, 0xdf, 0x30, 0x53, 0xf1, 0x78, 0x5e, 0x45, 0x9d, 0xb5, 0x5a, 0x4a, + 0xa7, 0xfe, 0xc2, 0x69, 0x06, 0xe7, 0xa6, 0xda, 0xd8, 0x05, 0xed, 0x4f, + 0x2c, 0x6d, 0x06, 0xd3, 0x36, 0x05, 0x2a, 0x89, 0x58, 0x38, 0x7c, 0xd1, + 0x6f, 0x63, 0xf0, 0x6b, 0x7c, 0x31, 0xe2, 0xc4, 0x12, 0xe8, 0x48, 0x3d, + 0x95, 0x5c, 0x2f, 0x75, 0x1d, 0xec, 0xa9, 0xd9, 0x58, 0x38, 0x87, 0xff, + 0x96, 0x85, 0xa6, 0xb4, 0x34, 0x2b, 0xc4, 0xa6, 0x69, 0x7b, 0x7f, 0xb3, + 0x7b, 0x6c, 0x4b, 0x6d, 0xe4, 0x92, 0x97, 0xba, 0x0e, 0x25, 0xac, 0xca, + 0x45, 0xa1, 0x54, 0xc0, 0x68, 0x95, 0x42, 0xb2, 0xbf, 0x22, 0x61, 0x7a, + 0x52, 0x8d, 0x25, 0x5e, 0x4b, 0xd5, 0x50, 0x74, 0xb8, 0xc7, 0x44, 0xb2, + 0x2d, 0x74, 0x11, 0x3c, 0x67, 0x81, 0xcf, 0xa1, 0x70, 0x02, 0x72, 0x96, + 0x93, 0x16, 0xdb, 0xd8, 0x99, 0xdd, 0x2d, 0x55, 0xe9, 0x51, 0xfe, 0x0f, + 0xd5, 0x20, 0x55, 0x05, 0xeb, 0xdc, 0x64, 0x82, 0xf5, 0xd3, 0xd9, 0x67, + 0xb5, 0x4a, 0xb8, 0x82, 0xcd, 0xd1, 0x85, 0xd6, 0xd7, 0x73, 0x72, 0x18, + 0x4c, 0xe9, 0xeb, 0xb3, 0x37, 0xc7, 0x2e, 0xe3, 0x55, 0x4c, 0x7d, 0xfc, + 0x49, 0x2b, 0xc6, 0xe3, 0x00, 0xd9, 0x04, 0x86, 0x00, 0xd1, 0x6b, 0xd6, + 0xf2, 0xc4, 0xea, 0x5c, 0x27, 0xe5, 0xe2, 0x7e, 0x99, 0x4e, 0x36, 0x81, + 0xd2, 0xf1, 0xee, 0xed, 0xc9, 0xf7, 0x7d, 0x98, 0x89, 0x55, 0x8f, 0x33, + 0x98, 0x0a, 0x43, 0xb8, 0x50, 0x7f, 0xc2, 0xac, 0x05, 0x93, 0xc5, 0x8a, + 0x33, 0x80, 0x5e, 0x14, 0x96, 0x08, 0xc9, 0x7e, 0xe9, 0x5c, 0xa4, 0x18, + 0x69, 0x72, 0x8b, 0x59, 0x10, 0xf1, 0x6f, 0xa0, 0x2d, 0x61, 0xdf, 0x5b, + 0xb2, 0x77, 0x83, 0xfd, 0xe6, 0xe6, 0x0e, 0xce, 0xcf, 0x8f, 0x0e, 0x2e, + 0x0f, 0xdc, 0xdc, 0x00, 0x6e, 0x04, 0x36, 0x07, 0x71, 0x86, 0xf5, 0xfa, + 0x5c, 0x48, 0xb0, 0xfb, 0x7b, 0xce, 0x0f, 0xac, 0x73, 0xbe, 0xf3, 0x8b, + 0x33, 0xb6, 0x34, 0xfe, 0xfe, 0x2f, 0x07, 0xbe, 0x92, 0x1c, 0x6a, 0x26, + 0x35, 0x0b, 0x7a, 0xed, 0x91, 0x00, 0x77, 0x86, 0x90, 0x0e, 0x1b, 0xa0, + 0x46, 0x0a, 0x89, 0x20, 0x17, 0xbd, 0xe7, 0x3d, 0xcd, 0xc7, 0x4e, 0x38, + 0x81, 0xfd, 0x53, 0xb7, 0xb3, 0xd7, 0xcc, 0x2d, 0x0b, 0x26, 0xc2, 0xdc, + 0xb6, 0x86, 0xf5, 0x64, 0x6b, 0x35, 0x8d, 0x92, 0x87, 0x64, 0xbc, 0x2c, + 0xc1, 0xbe, 0x38, 0xba, 0x9d, 0xe9, 0x6b, 0xc2, 0x0b, 0x55, 0x77, 0xd4, + 0xbb, 0xfd, 0xb1, 0x0d, 0x12, 0x04, 0x12, 0x5c, 0x01, 0xc2, 0x83, 0x24, + 0xa9, 0x33, 0x93, 0x02, 0x1a, 0x03, 0x1b, 0xad, 0xda, 0xac, 0x1a, 0x67, + 0x47, 0x40, 0x14, 0x89, 0xce, 0x6d, 0x0e, 0x8d, 0x05, 0xf9, 0x84, 0x98, + 0x5e, 0xdf, 0x42, 0x4c, 0x65, 0xda, 0xf4, 0x41, 0xe3, 0xa1, 0xd2, 0xd5, + 0x82, 0x60, 0x31, 0xa9, 0xe9, 0xfd, 0x54, 0x3e, 0x15, 0x32, 0xa8, 0xba, + 0xa9, 0x47, 0x41, 0x63, 0xf4, 0x29, 0x40, 0x15, 0x23, 0x0a, 0xb1, 0xe9, + 0xcf, 0x31, 0xc7, 0x22, 0x3d, 0x4a, 0x52, 0x31, 0x89, 0xb8, 0xfc, 0xd7, + 0xf6, 0xee, 0x60, 0xa7, 0xd3, 0x1c, 0x3d, 0x52, 0x5a, 0x61, 0x19, 0x8f, + 0xe7, 0x72, 0x3f, 0x0b, 0x30, 0x6f, 0xf6, 0xe1, 0x01, 0x0a, 0x07, 0x25, + 0x99, 0x0f, 0x51, 0x0b, 0x6d, 0x63, 0xe9, 0x9f, 0x35, 0xbc, 0x43, 0xe2, + 0xe1, 0xf4, 0x2c, 0x79, 0x9e, 0x21, 0xac, 0x34, 0x66, 0x63, 0x19, 0xfc, + 0x04, 0x9d, 0xf6, 0x05, 0x9e, 0x4f, 0x24, 0xda, 0xa1, 0xb6, 0xce, 0xff, + 0x54, 0x90, 0xa0, 0xdb, 0x7f, 0xff, 0xf9, 0x7a, 0x6e, 0x57, 0x71, 0x8b, + 0x92, 0x12, 0x04, 0x7a, 0x6c, 0x05, 0x5f, 0x3d, 0x10, 0x00, 0xe4, 0x5a, + 0xf0, 0x13, 0x7b, 0x62, 0xb9, 0xce, 0x20, 0x07, 0x56, 0xb1, 0xfe, 0xa4, + 0x39, 0x9c, 0xb3, 0xa0, 0x62, 0x60, 0x2c, 0x21, 0xc9, 0x8d, 0xab, 0xc3, + 0xd5, 0x97, 0xd6, 0x6e, 0xfb, 0x72, 0xd3, 0xaa, 0x95, 0x0e, 0x85, 0x5a, + 0x82, 0x3a, 0xda, 0x61, 0xfa, 0xfe, 0x1a, 0x78, 0x10, 0x13, 0x53, 0x49, + 0x1d, 0x9c, 0x0a, 0x9e, 0x8a, 0x84, 0xd3, 0x8a, 0x16, 0x25, 0x63, 0x12, + 0x8f, 0xbb, 0x77, 0x43, 0xf1, 0x7b, 0xbf, 0x6b, 0x2b, 0xce, 0xbd, 0xaf, + 0x33, 0x55, 0xf8, 0x85, 0x52, 0x1d, 0xf7, 0x1c, 0xe6, 0xa1, 0x99, 0x4a, + 0xfd, 0xd7, 0xce, 0xac, 0x66, 0x76, 0x37, 0xea, 0x91, 0xd6, 0xbc, 0x09, + 0x12, 0x2a, 0xc1, 0xee, 0x59, 0x3e, 0x43, 0x05, 0x31, 0xc0, 0xf4, 0x81, + 0x19, 0x64, 0x0c, 0xb0, 0x10, 0x1b, 0xe8, 0x9d, 0x1e, 0x01, 0xea, 0xe8, + 0x9a, 0x64, 0xe3, 0xb5, 0x88, 0xa8, 0x06, 0x32, 0xe2, 0xcb, 0xf0, 0xb2, + 0x77, 0xa0, 0xb0, 0xd4, 0xda, 0xf7, 0xc0, 0xcf, 0x9a, 0x4c, 0x36, 0x9f, + 0x6c, 0xc9, 0xda, 0xbb, 0x0a, 0xdb, 0x70, 0xdc, 0x7d, 0xb0, 0xaa, 0xf6, + 0x87, 0xd4, 0x47, 0xef, 0xfc, 0x68, 0x43, 0xbd, 0xa9, 0x28, 0x96, 0x8f, + 0xe6, 0xd9, 0x4c, 0x49, 0xd4, 0x29, 0xfb, 0x30, 0x2d, 0xbd, 0x24, 0x81, + 0x2b, 0x99, 0x7c, 0xfe, 0x88, 0x34, 0x39, 0x8b, 0x1f, 0xd2, 0xd9, 0x72, + 0xe6, 0x13, 0xe3, 0xf0, 0x9e, 0x2f, 0xf3, 0xe0, 0x41, 0xb9, 0x60, 0xd1, + 0x68, 0xc3, 0x97, 0x52, 0xbf, 0x97, 0xce, 0x0f, 0xc8, 0xc4, 0x12, 0x43, + 0x04, 0xa7, 0x0a, 0x53, 0x21, 0x8d, 0x87, 0x8d, 0x42, 0xe9, 0x22, 0x31, + 0x9a, 0xed, 0x4e, 0xc4, 0x6d, 0xca, 0x14, 0x54, 0xdf, 0x54, 0x1b, 0x09, + 0xaa, 0x1a, 0x88, 0x4f, 0x42, 0x02, 0x82, 0xe6, 0x25, 0x67, 0xcb, 0x8d, + 0xa8, 0x89, 0xfb, 0x74, 0x52, 0xde, 0xb4, 0xe2, 0x0d, 0xca, 0x22, 0x62, + 0xda, 0x91, 0x20, 0x94, 0x70, 0x80, 0x09, 0x56, 0x0a, 0x2e, 0xe3, 0x6d, + 0xb1, 0x1b, 0xbb, 0x64, 0xfb, 0x98, 0xa8, 0xee, 0x8a, 0xb3, 0x23, 0x5a, + 0xf4, 0x04, 0x0d, 0x8b, 0x1b, 0xb8, 0x33, 0x2a, 0x55, 0x33, 0x6f, 0x25, + 0x08, 0xf5, 0x1b, 0xb5, 0x8b, 0x08, 0x70, 0x11, 0xe2, 0xa9, 0x25, 0xba, + 0x8a, 0x6e, 0xd0, 0xdb, 0x74, 0xda, 0x2c, 0xa4, 0xb8, 0x82, 0x32, 0xd5, + 0x9d, 0xe1, 0xf5, 0x37, 0x5d, 0xb5, 0xe0, 0xa3, 0x5a, 0xb2, 0xfa, 0xb3, + 0x35, 0xf1, 0x21, 0xea, 0x5e, 0x4b, 0x17, 0x5f, 0x75, 0x5d, 0x16, 0x45, + 0xe3, 0x0a, 0xf4, 0x4e, 0x70, 0xbb, 0x45, 0x8a, 0xfd, 0x68, 0x6f, 0x67, + 0xe7, 0x9b, 0x5e, 0xf4, 0x44, 0x2a, 0xcc, 0xee, 0x7e, 0xd5, 0xba, 0x42, + 0x56, 0xec, 0x49, 0x6a, 0x78, 0xaa, 0x0e, 0x1a, 0xdf, 0x81, 0xdd, 0xeb, + 0xc2, 0x61, 0x4a, 0xec, 0x7b, 0x5a, 0xe6, 0x26, 0x68, 0xcb, 0xe2, 0xaf, + 0xd9, 0x2a, 0x98, 0xb1, 0xeb, 0x50, 0x08, 0x33, 0xc4, 0x0c, 0xf1, 0xee, + 0xdd, 0xd0, 0x6f, 0x89, 0xcf, 0xff, 0x94, 0x4e, 0x5a, 0x32, 0x90, 0x8b, + 0x1b, 0x3e, 0xfd, 0xa3, 0x65, 0x8e, 0xa3, 0xcc, 0x6e, 0x50, 0x29, 0x5b, + 0xc4, 0xa6, 0x75, 0x13, 0xac, 0x48, 0x56, 0xf0, 0x15, 0x56, 0x3d, 0x50, + 0x0d, 0x4f, 0x66, 0xb0, 0xae, 0x2e, 0xa4, 0x24, 0x03, 0xb8, 0xda, 0xb1, + 0x3f, 0x90, 0xce, 0x84, 0x21, 0xc8, 0x49, 0x71, 0x7a, 0x87, 0x84, 0x73, + 0x7a, 0x17, 0x63, 0x7d, 0xb2, 0xac, 0x55, 0x89, 0x9a, 0x0a, 0xfb, 0x32, + 0x6c, 0xe1, 0x98, 0x23, 0xc3, 0xa7, 0x2d, 0xb4, 0xb0, 0x08, 0x0f, 0x44, + 0xda, 0x05, 0xcb, 0x9d, 0xf2, 0x03, 0xd3, 0x55, 0xaf, 0xa9, 0x76, 0x70, + 0x58, 0x20, 0xfc, 0x01, 0xb6, 0xc2, 0xe1, 0x90, 0x38, 0x77, 0x76, 0x8c, + 0x42, 0x36, 0x1c, 0xda, 0xf5, 0xdb, 0x99, 0xa5, 0xa6, 0x0c, 0xc8, 0x9f, + 0x16, 0x65, 0x9f, 0xdd, 0xbb, 0xed, 0xb6, 0x4e, 0xe8, 0x15, 0x9a, 0x51, + 0x6e, 0x50, 0x53, 0x13, 0x0f, 0x87, 0x29, 0xa6, 0x6c, 0xa9, 0xbd, 0x81, + 0x40, 0x4a, 0x3e, 0x52, 0xcc, 0xbe, 0xfa, 0x8d, 0x40, 0x3f, 0x62, 0x94, + 0x77, 0x69, 0x72, 0x4f, 0xc7, 0xe9, 0xd8, 0x63, 0x92, 0x55, 0x39, 0x86, + 0x55, 0xbe, 0x20, 0xaa, 0x1f, 0xdf, 0xd0, 0x7d, 0xd2, 0x47, 0xd8, 0x75, + 0x9b, 0xdc, 0xee, 0xa2, 0x94, 0x11, 0x8e, 0xc6, 0x7a, 0x16, 0x4a, 0xb2, + 0xf8, 0x2c, 0xf8, 0x02, 0x05, 0x4f, 0x70, 0x2c, 0x25, 0xc2, 0xd9, 0x7f, + 0xc5, 0xa3, 0x58, 0x03, 0x82, 0x25, 0x18, 0xb0, 0x0e, 0xe6, 0x0a, 0xba, + 0x63, 0x96, 0x1b, 0x96, 0xec, 0xe3, 0x62, 0x03, 0xe8, 0x53, 0x57, 0xe8, + 0xed, 0xe9, 0xd0, 0xa3, 0x03, 0x98, 0x2b, 0xb0, 0x80, 0xa5, 0x80, 0xf8, + 0x2f, 0x0b, 0x85, 0xfc, 0x58, 0x7b, 0x79, 0x22, 0x87, 0x99, 0x8f, 0xf8, + 0x20, 0xc4, 0xbf, 0x88, 0x80, 0x9b, 0xe6, 0x15, 0xb8, 0x07, 0xee, 0xe3, + 0xcf, 0x62, 0x6e, 0x93, 0xa0, 0xb4, 0xf6, 0x48, 0x15, 0x4e, 0xa7, 0x0b, + 0x2b, 0xa6, 0xc3, 0xd8, 0x8c, 0x2c, 0x2f, 0x22, 0x31, 0xba, 0xb4, 0x6f, + 0xab, 0x92, 0x0a, 0xe7, 0x68, 0x08, 0x32, 0xcc, 0x4b, 0xe2, 0x67, 0x9f, + 0xff, 0xd8, 0xa7, 0x7f, 0x7f, 0x6a, 0xf8, 0x02, 0x4b, 0xc1, 0x93, 0x51, + 0x93, 0x96, 0x85, 0x95, 0xe6, 0x1e, 0x1f, 0x5f, 0xea, 0xd7, 0xa3, 0x1d, + 0xf9, 0xb6, 0x08, 0xca, 0x0a, 0xb4, 0x87, 0x48, 0x98, 0x6f, 0x6e, 0xb3, + 0x60, 0x84, 0xd0, 0x4a, 0x01, 0x00, 0x41, 0x07, 0xb1, 0x86, 0xd8, 0x32, + 0x30, 0x97, 0x3b, 0x07, 0x1e, 0xd8, 0xfa, 0x32, 0x8e, 0x63, 0x96, 0x73, + 0x9c, 0x5b, 0xd2, 0xd7, 0x82, 0x1c, 0xb1, 0x9b, 0xb5, 0x58, 0x31, 0xda, + 0x93, 0x08, 0x74, 0x45, 0xe6, 0x12, 0x5a, 0x40, 0xc8, 0x18, 0x7e, 0xd3, + 0x91, 0xcb, 0x80, 0x44, 0x12, 0x9b, 0x41, 0x02, 0x2e, 0x75, 0x9d, 0xe7, + 0xd9, 0xbd, 0x9d, 0x7d, 0x0d, 0x4a, 0x0e, 0x64, 0x06, 0xef, 0x64, 0xa4, + 0xb6, 0x97, 0x8b, 0x16, 0xcf, 0x2b, 0xa7, 0x2a, 0x34, 0x80, 0x44, 0xc2, + 0x4c, 0xcc, 0xb0, 0x50, 0x46, 0x6b, 0x78, 0x0a, 0x70, 0xe4, 0xb7, 0xcc, + 0x00, 0xe6, 0xca, 0x9a, 0x88, 0x25, 0xdb, 0x65, 0x9d, 0x68, 0xe0, 0xb6, + 0x80, 0xe8, 0x5c, 0x27, 0x6d, 0x25, 0xca, 0x25, 0xb1, 0x1a, 0xb8, 0x0b, + 0x16, 0x75, 0x5d, 0x46, 0xae, 0x46, 0xc7, 0x26, 0x7b, 0x32, 0xc7, 0x30, + 0x7f, 0x69, 0x40, 0x78, 0xbd, 0x50, 0x46, 0x0b, 0x2e, 0x41, 0x1c, 0x3d, + 0xf9, 0xfe, 0xfb, 0x2a, 0x38, 0xe1, 0x56, 0xaf, 0xc2, 0xb1, 0x7c, 0x00, + 0x87, 0xca, 0x17, 0x44, 0x44, 0x59, 0xdb, 0x29, 0xb7, 0x48, 0x7b, 0xb3, + 0xeb, 0x72, 0x20, 0x06, 0xb4, 0x38, 0xd8, 0xfe, 0x14, 0x77, 0x59, 0x2a, + 0x61, 0x6b, 0xe8, 0x7b, 0x10, 0x07, 0xd6, 0x74, 0x90, 0xb8, 0x90, 0x9f, + 0x9e, 0x8b, 0xbc, 0x95, 0xc0, 0x13, 0x04, 0xa7, 0xd9, 0x5a, 0xf1, 0x52, + 0x15, 0x8e, 0x60, 0xe8, 0x52, 0xba, 0x9f, 0xb7, 0x57, 0x36, 0xa9, 0xb9, + 0x7d, 0x5c, 0x81, 0x03, 0x0d, 0x22, 0xc4, 0xf9, 0x95, 0x92, 0x3c, 0x6c, + 0x9f, 0x1a, 0xe7, 0x89, 0xfa, 0x6e, 0xac, 0x5c, 0x50, 0xe3, 0xbc, 0x8a, + 0x9d, 0x87, 0xc3, 0xac, 0x30, 0x3f, 0x4e, 0xe2, 0x95, 0x93, 0x8b, 0xcb, + 0xc7, 0xc7, 0x32, 0x84, 0x7b, 0x85, 0xc7, 0x7b, 0x2d, 0x02, 0xc2, 0x3d, + 0xca, 0x8f, 0x80, 0xf1, 0x98, 0xfd, 0x0e, 0x41, 0x57, 0x9a, 0x98, 0x84, + 0xbb, 0x20, 0xff, 0x53, 0x6b, 0x39, 0x3e, 0xde, 0xff, 0xb6, 0x8a, 0x83, + 0xfd, 0x32, 0x5f, 0x62, 0x89, 0xd8, 0xe7, 0xcb, 0x79, 0xe5, 0x99, 0x4f, + 0x27, 0x63, 0x37, 0x9f, 0x45, 0x97, 0xc9, 0x25, 0xe6, 0xbd, 0xad, 0x2d, + 0x41, 0x20, 0x36, 0x33, 0x31, 0xe1, 0xc0, 0x04, 0x54, 0x0d, 0x8f, 0xe8, + 0xf7, 0x49, 0x34, 0xed, 0xe3, 0xb1, 0xa2, 0x51, 0xd9, 0x21, 0xb4, 0x79, + 0x29, 0x3c, 0x67, 0x36, 0xd5, 0x52, 0x2e, 0x6e, 0xcd, 0x4c, 0x87, 0x30, + 0x22, 0x52, 0x97, 0x51, 0xcc, 0x14, 0x44, 0x87, 0xee, 0xab, 0xe3, 0x7a, + 0x51, 0xab, 0x4d, 0x60, 0xe4, 0xa9, 0xaa, 0x88, 0xe4, 0x09, 0xfa, 0xfb, + 0xfc, 0xdd, 0xe5, 0x96, 0xaf, 0x67, 0x37, 0xc9, 0x6a, 0x36, 0x2b, 0x6b, + 0xbc, 0x25, 0x13, 0x45, 0x32, 0x14, 0x14, 0x94, 0x01, 0x69, 0x26, 0xee, + 0x4c, 0x30, 0x8e, 0xc2, 0x93, 0x9d, 0x5d, 0x12, 0xd5, 0x76, 0xf6, 0x60, + 0x75, 0x79, 0xb2, 0xf3, 0xc4, 0x99, 0xb3, 0xed, 0xa9, 0xc6, 0x8d, 0x37, + 0x91, 0x17, 0xa1, 0x16, 0x82, 0xe4, 0x9f, 0x3c, 0x3c, 0xe0, 0xe3, 0x5e, + 0x1d, 0xa5, 0xa7, 0x50, 0x85, 0x32, 0x09, 0x6a, 0x3c, 0xaf, 0x39, 0x5a, + 0x7e, 0xc5, 0x61, 0x3e, 0x59, 0xce, 0x25, 0xf6, 0x8b, 0x95, 0x5f, 0x64, + 0x3c, 0xd4, 0x2f, 0x87, 0x90, 0x0e, 0x1e, 0x63, 0x4d, 0xa7, 0x2c, 0xde, + 0x57, 0x18, 0x59, 0xcf, 0x63, 0x3a, 0x08, 0xe2, 0xaf, 0x29, 0x77, 0x96, + 0x8b, 0x58, 0x6b, 0xee, 0x4f, 0x3e, 0xd5, 0x56, 0xea, 0xa3, 0x80, 0xd4, + 0x03, 0xf6, 0x86, 0x9a, 0x57, 0x9c, 0x30, 0xe6, 0x8f, 0x49, 0x36, 0x30, + 0xbc, 0xd5, 0x46, 0x1e, 0x04, 0xad, 0xb2, 0x55, 0x08, 0x4c, 0x19, 0x84, + 0x61, 0xb2, 0x1c, 0xe3, 0xae, 0xe7, 0xb0, 0x17, 0x2e, 0xf8, 0x37, 0x12, + 0xcc, 0x47, 0x03, 0xd1, 0xe0, 0xb6, 0x3d, 0x91, 0x36, 0xd5, 0x6c, 0x1c, + 0x43, 0x3c, 0xe5, 0x92, 0x76, 0x59, 0xaf, 0x61, 0x83, 0x91, 0x4b, 0x15, + 0x6e, 0x30, 0x88, 0xf9, 0x55, 0x66, 0x10, 0xb5, 0x4d, 0x90, 0x5e, 0x90, + 0x25, 0x5c, 0x74, 0x66, 0x1e, 0x8e, 0xa5, 0x36, 0x24, 0x68, 0xe7, 0x4b, + 0x0e, 0x56, 0xab, 0xb5, 0x58, 0x81, 0x61, 0x9d, 0x31, 0xa6, 0x6c, 0x3e, + 0xa6, 0xc3, 0xfd, 0x52, 0x63, 0x36, 0x9b, 0xae, 0x7e, 0xc1, 0x1d, 0x31, + 0xfd, 0x0f, 0x13, 0x00, 0x54, 0xa4, 0x87, 0x9d, 0xd2, 0xa5, 0x15, 0xa9, + 0x7a, 0x06, 0x04, 0x62, 0xf1, 0x24, 0x37, 0x13, 0xb7, 0x00, 0xad, 0xea, + 0x56, 0xfc, 0xa3, 0xac, 0x27, 0xce, 0xfe, 0xdf, 0x82, 0x16, 0x49, 0x0b, + 0x9d, 0x2e, 0x18, 0xe2, 0xab, 0x69, 0xdb, 0x5e, 0x8f, 0x51, 0xa2, 0xd3, + 0x06, 0x17, 0xff, 0x77, 0x4e, 0x1b, 0x7e, 0xd7, 0x5f, 0x36, 0xcc, 0x07, + 0x14, 0xa9, 0x41, 0x9c, 0xe5, 0x4b, 0x28, 0x6e, 0x1f, 0xa3, 0x96, 0xe3, + 0xf1, 0x4d, 0x53, 0x5e, 0xb7, 0x7c, 0xaa, 0xb5, 0xe8, 0xe4, 0x06, 0xe7, + 0x84, 0xf8, 0x89, 0x36, 0xa9, 0x0a, 0x8f, 0xfa, 0xab, 0x2d, 0xad, 0x86, + 0x52, 0xe3, 0x4e, 0x46, 0xde, 0x65, 0xaf, 0x8a, 0x8e, 0xb3, 0xa6, 0xc6, + 0x20, 0x02, 0x1f, 0xa5, 0x48, 0x7d, 0x10, 0x25, 0x0f, 0xf8, 0x63, 0xdc, + 0xbe, 0xc9, 0x03, 0xdc, 0x2e, 0xc4, 0xa7, 0x9e, 0x3f, 0x19, 0xb4, 0xdb, + 0x7e, 0x2e, 0x2b, 0x01, 0xa7, 0xc6, 0x92, 0xc5, 0x45, 0x21, 0x70, 0x32, + 0x8b, 0x9c, 0x71, 0x65, 0xc3, 0xd9, 0x49, 0x0d, 0x83, 0x16, 0xfc, 0x8d, + 0x82, 0x41, 0xc0, 0x45, 0x42, 0x2e, 0xd7, 0x62, 0x84, 0x59, 0x49, 0x2e, + 0x17, 0xea, 0x8a, 0x59, 0x36, 0xbc, 0xc7, 0x92, 0x3a, 0x82, 0x6c, 0x0c, + 0x49, 0xb2, 0x6c, 0x2c, 0x94, 0xea, 0xcd, 0xb8, 0xdc, 0x5c, 0x58, 0x29, + 0x57, 0xa7, 0x49, 0xf2, 0x46, 0x28, 0x15, 0x32, 0xd8, 0x59, 0x11, 0xe0, + 0xc5, 0xc2, 0xf9, 0x0d, 0xe2, 0xfa, 0x1d, 0x55, 0xcc, 0xb6, 0x85, 0x30, + 0x1e, 0x8d, 0x68, 0x7b, 0xa3, 0xa4, 0x20, 0x7a, 0x30, 0xbc, 0x87, 0xfa, + 0xa4, 0xd0, 0x2d, 0xeb, 0x4d, 0xc2, 0x4f, 0x51, 0xdf, 0xf7, 0x26, 0x9b, + 0x86, 0x66, 0xb8, 0xa6, 0xbb, 0x8b, 0x24, 0x89, 0x81, 0x47, 0x51, 0x55, + 0xfd, 0x8b, 0x57, 0x53, 0x2b, 0x09, 0xa7, 0x56, 0xbf, 0x60, 0x84, 0x5a, + 0xe8, 0x7f, 0xcd, 0x46, 0x56, 0x42, 0x90, 0xaf, 0xfa, 0x36, 0xe4, 0x5a, + 0xf1, 0xad, 0xdc, 0x70, 0x0d, 0x38, 0xda, 0xb4, 0xa5, 0xd0, 0x26, 0x43, + 0xb1, 0x92, 0xbc, 0x56, 0xb2, 0x12, 0x8b, 0xe8, 0x71, 0xa8, 0x1a, 0xd1, + 0x35, 0x92, 0xf7, 0x26, 0x22, 0x53, 0x91, 0xc8, 0xd1, 0x00, 0x8d, 0x73, + 0x95, 0x9d, 0x54, 0x8e, 0xc6, 0xe2, 0xb0, 0x2b, 0x6c, 0x8d, 0x0c, 0xf0, + 0xeb, 0x29, 0xc3, 0x6f, 0xb0, 0x1b, 0xf3, 0x66, 0xd4, 0xde, 0x1b, 0x7c, + 0x38, 0xe0, 0x8a, 0x95, 0x1c, 0x43, 0x2d, 0xce, 0x89, 0xa5, 0xa6, 0xf6, + 0x49, 0xd5, 0x64, 0xdf, 0xca, 0x7c, 0x9b, 0xcb, 0x18, 0x97, 0xf9, 0xb8, + 0xd1, 0x88, 0x93, 0xe0, 0x8a, 0xb1, 0xda, 0x2e, 0x06, 0x78, 0x90, 0x18, + 0xc7, 0x7b, 0xfd, 0x85, 0x2f, 0x09, 0xf5, 0xe1, 0x6c, 0xb9, 0xc8, 0x8d, + 0xd6, 0xe0, 0x09, 0x16, 0xde, 0xba, 0x85, 0xf3, 0x2f, 0xa8, 0x66, 0xcb, + 0x1b, 0x01, 0xdc, 0xad, 0xb6, 0x7a, 0xcb, 0x0e, 0x4f, 0x76, 0xb5, 0x68, + 0x04, 0x4f, 0x04, 0x85, 0x4c, 0xae, 0xa4, 0x3a, 0x95, 0xf9, 0xad, 0xbc, + 0xa4, 0xed, 0x0a, 0x58, 0x85, 0x49, 0x32, 0x8a, 0x8d, 0xd2, 0x32, 0xba, + 0xa8, 0x51, 0xd8, 0x1a, 0x22, 0x26, 0x66, 0xba, 0xf9, 0x74, 0x0b, 0x6a, + 0x75, 0xb9, 0xd8, 0xdc, 0xdd, 0x42, 0x8f, 0x96, 0xcc, 0x2f, 0x82, 0x7e, + 0xab, 0xbf, 0x5a, 0xeb, 0xb9, 0x84, 0x95, 0x56, 0x4b, 0x01, 0x84, 0x65, + 0x71, 0x0e, 0x27, 0x9c, 0x75, 0x45, 0x59, 0x35, 0x87, 0x6a, 0xcd, 0x46, + 0xc8, 0x36, 0xce, 0x28, 0x29, 0x6d, 0x0b, 0x76, 0xd4, 0x14, 0x02, 0xb9, + 0xbe, 0xe9, 0x11, 0x88, 0xe1, 0x7e, 0x4e, 0xac, 0x94, 0x08, 0x2d, 0xdf, + 0x74, 0xd2, 0xe7, 0x01, 0x5f, 0xe7, 0x59, 0x13, 0x21, 0x8c, 0x9d, 0xec, + 0xbc, 0x06, 0x5b, 0xe2, 0x07, 0x6d, 0x2d, 0x93, 0xd1, 0x61, 0x87, 0x62, + 0xc7, 0x83, 0x85, 0x33, 0x56, 0x53, 0xaa, 0x32, 0x5a, 0xdd, 0x30, 0x54, + 0xd9, 0xd2, 0x06, 0xbd, 0x1f, 0x70, 0xb4, 0x46, 0x3a, 0xbe, 0x55, 0x5f, + 0xac, 0x80, 0x2f, 0xc3, 0x47, 0x85, 0x22, 0xca, 0x22, 0xbc, 0xd2, 0x35, + 0xa1, 0xf2, 0x39, 0x54, 0x50, 0xba, 0x33, 0x94, 0xd4, 0x5a, 0xaa, 0xd4, + 0xf0, 0x39, 0x35, 0xc5, 0x02, 0x09, 0x48, 0x99, 0xde, 0x40, 0xb0, 0xc0, + 0x88, 0x36, 0x32, 0xc9, 0x38, 0x42, 0x96, 0xfd, 0x2c, 0x42, 0x05, 0xb2, + 0xbf, 0x2d, 0x32, 0x5b, 0x77, 0xb6, 0xe2, 0x34, 0xf4, 0x6e, 0x15, 0xa4, + 0xbd, 0x4b, 0x0c, 0x8b, 0xee, 0x89, 0xae, 0x2d, 0x2f, 0xcc, 0x2a, 0x8f, + 0x00, 0x69, 0xac, 0xeb, 0x5b, 0x48, 0x5b, 0xba, 0xf0, 0xad, 0x4b, 0xe3, + 0xc1, 0x5d, 0x8b, 0xa9, 0xf6, 0xcd, 0xef, 0x5e, 0x6b, 0xfb, 0x5b, 0x5b, + 0x30, 0xed, 0xdc, 0x9e, 0xb7, 0xa2, 0xd0, 0x9e, 0x95, 0x88, 0xe5, 0x35, + 0x38, 0xa7, 0xcb, 0xa2, 0x99, 0xe0, 0xe7, 0x8a, 0xb0, 0x59, 0xd4, 0x02, + 0x5b, 0x7c, 0x62, 0xab, 0x2d, 0x23, 0x9c, 0x4c, 0xde, 0xd6, 0x56, 0x99, + 0x30, 0x07, 0x95, 0xc1, 0x6a, 0x88, 0xdb, 0xe3, 0x05, 0xe3, 0x2b, 0xd1, + 0x70, 0xcd, 0x93, 0x05, 0xc3, 0x6e, 0xe5, 0x99, 0xf6, 0xf4, 0x65, 0xd6, + 0x1f, 0x26, 0x09, 0x87, 0x1a, 0x09, 0x74, 0xc0, 0x9b, 0x74, 0x9c, 0x67, + 0x45, 0x76, 0x25, 0xb7, 0xba, 0x91, 0xa7, 0x33, 0x37, 0x71, 0x6e, 0x71, + 0xcc, 0xce, 0xdd, 0x26, 0xbf, 0xd0, 0x72, 0x7c, 0x12, 0xbf, 0xcc, 0x97, + 0xf6, 0x8c, 0x68, 0x9d, 0x53, 0x29, 0xd8, 0x0e, 0x5c, 0x0a, 0x28, 0x5c, + 0xec, 0xa2, 0xf6, 0xf4, 0x8e, 0xb0, 0x88, 0xc9, 0x67, 0x8f, 0x6b, 0xd2, + 0xbc, 0x13, 0x5a, 0xc5, 0x05, 0x17, 0x82, 0x44, 0x97, 0xa1, 0xb2, 0x8e, + 0x62, 0x22, 0x89, 0xfe, 0x63, 0xaf, 0xb5, 0x8f, 0xce, 0x14, 0x18, 0x00, + 0x98, 0xc3, 0x68, 0x1c, 0x56, 0x4c, 0xe4, 0x40, 0xc0, 0x93, 0xe3, 0xcb, + 0xd7, 0xd1, 0x24, 0x8f, 0x69, 0xfa, 0xf8, 0xb7, 0x4f, 0x3a, 0xc0, 0xcf, + 0x71, 0x23, 0x0b, 0xb8, 0x58, 0xf0, 0x26, 0xf5, 0xd9, 0xf3, 0xd8, 0xdf, + 0x79, 0x3a, 0x28, 0x1f, 0x5a, 0x23, 0x05, 0xc5, 0xd6, 0x6c, 0x16, 0x4c, + 0x2d, 0xad, 0xe1, 0xb7, 0x4c, 0x53, 0x3c, 0xf9, 0x9a, 0xcd, 0x1e, 0x56, + 0x75, 0x98, 0xc3, 0x36, 0x50, 0x60, 0x60, 0xe9, 0xf4, 0xf1, 0xb8, 0xa7, + 0x92, 0x7f, 0x21, 0xec, 0x52, 0xc2, 0x2c, 0x83, 0x40, 0xca, 0x35, 0xc5, + 0x42, 0x1e, 0x8d, 0xab, 0x6c, 0x8b, 0xa3, 0xb4, 0x8f, 0xd7, 0xa0, 0x27, + 0xd6, 0x88, 0xb7, 0x5d, 0x8b, 0x5f, 0x36, 0xab, 0x04, 0x38, 0x14, 0x67, + 0xd0, 0x80, 0xc5, 0x57, 0x33, 0x9c, 0x14, 0x2c, 0x47, 0xfd, 0xa5, 0xa6, + 0xc3, 0xb6, 0x27, 0x09, 0x81, 0xc7, 0x02, 0x45, 0xcd, 0xa0, 0xdd, 0x6a, + 0x44, 0x06, 0x39, 0xd5, 0x7c, 0x8f, 0x03, 0x54, 0xcf, 0x85, 0x89, 0xbb, + 0xce, 0xd1, 0xfa, 0xcb, 0x68, 0x1f, 0xb8, 0x4d, 0xc9, 0x9c, 0x4b, 0x6a, + 0xd8, 0xb1, 0xf6, 0x2c, 0x50, 0x39, 0xb1, 0xe3, 0x47, 0x61, 0xc1, 0xe5, + 0xfe, 0xb2, 0x7d, 0x74, 0x71, 0x9e, 0xf0, 0xed, 0x24, 0x21, 0x90, 0x7a, + 0xf3, 0x0e, 0xfe, 0xfd, 0x88, 0xdb, 0x9e, 0x0f, 0xbd, 0xdd, 0x46, 0x90, + 0xfe, 0x68, 0xc9, 0xdf, 0xb5, 0x56, 0xea, 0x56, 0x5e, 0x28, 0x4f, 0xa8, + 0x4f, 0x36, 0x70, 0xae, 0x16, 0x1c, 0x27, 0x37, 0x0b, 0xab, 0xc1, 0xb0, + 0xe4, 0xc7, 0x1a, 0x72, 0x9d, 0x26, 0x96, 0xc2, 0x3b, 0x7a, 0x55, 0x6c, + 0xe1, 0x9a, 0xe5, 0x5d, 0xba, 0x61, 0x53, 0x53, 0xd8, 0x7c, 0x9b, 0x83, + 0x1a, 0xaf, 0xc3, 0xd5, 0x08, 0x3f, 0x95, 0x08, 0xfd, 0x12, 0xe3, 0xac, + 0xd6, 0x06, 0x6d, 0xc2, 0x41, 0xb1, 0x13, 0x7b, 0x1b, 0xdf, 0x2c, 0x49, + 0x1a, 0xed, 0xb5, 0x58, 0xcd, 0xcd, 0x90, 0x0b, 0x5e, 0x46, 0xf7, 0xa9, + 0xa6, 0xe0, 0x5b, 0xa2, 0x96, 0xb4, 0xc0, 0xc9, 0xde, 0x77, 0x00, 0x3c, + 0x6c, 0x54, 0xb7, 0x68, 0x1b, 0x9d, 0xaf, 0x3c, 0x1f, 0x97, 0x7e, 0x01, + 0x1f, 0x0b, 0xbb, 0x0b, 0xa0, 0xff, 0xe9, 0xe8, 0xc3, 0x00, 0xab, 0x44, + 0x20, 0x14, 0x67, 0x19, 0x80, 0xf0, 0x4e, 0x1a, 0xec, 0x55, 0x83, 0x89, + 0x48, 0x65, 0x11, 0x62, 0x22, 0xd2, 0xa7, 0xf0, 0x25, 0x8f, 0x50, 0xd7, + 0x32, 0x92, 0x6a, 0xa6, 0xc6, 0x63, 0x74, 0xb0, 0x14, 0xdb, 0x84, 0xcf, + 0xea, 0xe0, 0x94, 0x76, 0x58, 0x4e, 0xd5, 0x56, 0x7b, 0x79, 0x78, 0x1e, + 0xd8, 0xc2, 0x19, 0x27, 0x60, 0x6d, 0x4a, 0x93, 0x06, 0xeb, 0xcc, 0x5d, + 0xeb, 0xb3, 0x7f, 0xe3, 0xda, 0xf8, 0x19, 0x04, 0xcb, 0xe3, 0x3e, 0xac, + 0x2d, 0x8d, 0xa6, 0xf0, 0xa5, 0x93, 0xf6, 0x2c, 0x0a, 0x5d, 0x21, 0x43, + 0xe2, 0xd6, 0x35, 0xe2, 0xb4, 0x31, 0xcb, 0x93, 0x3c, 0x39, 0xa2, 0xd1, + 0xb0, 0x74, 0x73, 0x4d, 0x83, 0xfb, 0xd2, 0xad, 0x40, 0x53, 0x2a, 0xf3, + 0x0a, 0x23, 0x9c, 0x1c, 0xa8, 0xdc, 0x14, 0x14, 0xdf, 0xe2, 0x04, 0xeb, + 0x10, 0xb6, 0x43, 0x1c, 0xc7, 0x96, 0x43, 0xba, 0x26, 0x4f, 0x1e, 0xd5, + 0xd5, 0x11, 0x1b, 0x42, 0xfa, 0x0b, 0x5f, 0xca, 0xa3, 0x95, 0xe5, 0xaf, + 0x29, 0x7a, 0x4f, 0x9e, 0x28, 0x74, 0x73, 0x30, 0xe0, 0xa2, 0xe5, 0x76, + 0xe2, 0xda, 0xe7, 0x49, 0x32, 0xd3, 0xf8, 0xd0, 0x51, 0x9e, 0xdd, 0xd2, + 0xf9, 0xe0, 0xd7, 0x20, 0x88, 0xf2, 0xea, 0xcb, 0x21, 0x37, 0x53, 0x16, + 0x1d, 0x03, 0x05, 0x2c, 0x6e, 0x1a, 0xe6, 0x1c, 0xe2, 0xb5, 0x66, 0xd2, + 0xf8, 0xd3, 0x22, 0x48, 0x53, 0x88, 0x03, 0xb4, 0xfb, 0x13, 0x77, 0x0f, + 0x97, 0x40, 0xf2, 0x51, 0x10, 0x0d, 0x8d, 0xb4, 0x01, 0xcd, 0xfb, 0x9b, + 0xd3, 0x90, 0x23, 0x8b, 0x90, 0x86, 0x5a, 0xb6, 0xbc, 0x42, 0x4c, 0x22, + 0x08, 0xbc, 0x24, 0xaa, 0x92, 0x3b, 0x9e, 0xbd, 0x7e, 0x75, 0xe5, 0x1f, + 0x70, 0xa7, 0xfd, 0x20, 0x68, 0xdd, 0x95, 0xd3, 0x16, 0x5b, 0xa8, 0x18, + 0x1e, 0x27, 0x1e, 0x47, 0x3e, 0x16, 0xf9, 0x02, 0x01, 0x76, 0x44, 0x32, + 0xcd, 0xdb, 0xdd, 0x65, 0xd4, 0xa8, 0xd4, 0x08, 0x2f, 0x05, 0x6f, 0x0f, + 0x72, 0x54, 0x11, 0x6a, 0xa6, 0xd6, 0xb1, 0x3f, 0x86, 0x21, 0xd2, 0x51, + 0x9b, 0xd1, 0x12, 0xc0, 0x06, 0x49, 0xe1, 0x6d, 0xb3, 0x12, 0x17, 0xe3, + 0x72, 0xd8, 0x18, 0x1e, 0x25, 0xe4, 0x19, 0x18, 0xda, 0x20, 0x3a, 0x66, + 0x3b, 0x6b, 0x8b, 0xf2, 0x60, 0x81, 0x9f, 0x98, 0x23, 0x52, 0x1c, 0x4b, + 0x60, 0x45, 0xd2, 0x8d, 0xab, 0x9a, 0x18, 0xa7, 0x3e, 0xcf, 0x2c, 0xee, + 0x9d, 0x31, 0x45, 0x5d, 0xe5, 0xb6, 0x56, 0x45, 0xaa, 0x28, 0x35, 0x8f, + 0xdd, 0x60, 0x95, 0xed, 0x23, 0x87, 0x96, 0xf5, 0xda, 0x5b, 0xfc, 0x7b, + 0xe2, 0xb3, 0x14, 0x25, 0xa7, 0x05, 0xf0, 0x0a, 0xa3, 0x89, 0xfc, 0x43, + 0xbd, 0xe0, 0xf7, 0xfd, 0xcf, 0x76, 0xb4, 0xd0, 0x26, 0xf0, 0x15, 0xc3, + 0x67, 0x50, 0x90, 0xa2, 0xe5, 0x9e, 0x41, 0xa2, 0x7b, 0x56, 0xba, 0x47, + 0xeb, 0xd0, 0xac, 0x2f, 0x06, 0x4f, 0x2b, 0xe6, 0xdd, 0x79, 0x39, 0x9d, + 0x79, 0x68, 0x20, 0x03, 0x24, 0x7d, 0x7b, 0x79, 0xfa, 0x26, 0x5a, 0xa3, + 0x0e, 0xe0, 0xbb, 0xea, 0x57, 0xff, 0x8a, 0x52, 0x40, 0x5f, 0x9c, 0x9c, + 0x0c, 0xa1, 0x12, 0xa8, 0xa3, 0xba, 0x11, 0x70, 0x51, 0x6a, 0x9e, 0x09, + 0x4b, 0x55, 0x79, 0x4a, 0x1a, 0x7d, 0x8e, 0x1c, 0xb1, 0x32, 0x1b, 0x67, + 0x53, 0x4e, 0x27, 0xe4, 0x97, 0x12, 0x2d, 0x16, 0x8f, 0xcb, 0x9d, 0xc1, + 0xcb, 0xa6, 0xe0, 0x4a, 0x8b, 0xa4, 0x11, 0x30, 0xc3, 0x8a, 0x2c, 0x06, + 0x60, 0x2c, 0x45, 0xd6, 0x06, 0x77, 0x05, 0xd7, 0xa7, 0xb4, 0x6c, 0x0f, + 0xd2, 0x53, 0x88, 0xe2, 0x58, 0xd0, 0x54, 0x1b, 0xc7, 0x6d, 0x8a, 0xa8, + 0xbf, 0x46, 0x2a, 0xa7, 0x96, 0xac, 0xaa, 0x20, 0xf5, 0x00, 0xc6, 0x6c, + 0x92, 0xe5, 0x70, 0xdb, 0x05, 0x38, 0x31, 0x8c, 0x6d, 0xb6, 0x44, 0x48, + 0x0c, 0x0f, 0x6f, 0xd5, 0x3c, 0x4a, 0xf7, 0x37, 0x99, 0x44, 0xa4, 0x60, + 0x99, 0x99, 0x2b, 0x49, 0x10, 0x04, 0xfc, 0x02, 0x02, 0x2f, 0x22, 0x04, + 0xe1, 0x59, 0x49, 0xb8, 0x51, 0x6d, 0xee, 0x35, 0x57, 0x24, 0x4e, 0x32, + 0xad, 0x7a, 0x62, 0xdf, 0xa4, 0xcd, 0x39, 0x4a, 0xaf, 0xd7, 0xe0, 0x6f, + 0xb5, 0x2b, 0x1d, 0x3c, 0xa2, 0xc7, 0xf5, 0x8d, 0xb6, 0xe8, 0xe0, 0x8a, + 0xbe, 0x41, 0xd4, 0xf6, 0xb1, 0xaa, 0x86, 0xaf, 0x8c, 0xad, 0x95, 0x75, + 0x25, 0xc9, 0x8b, 0x6f, 0x83, 0x40, 0xd7, 0x78, 0xd7, 0x70, 0x68, 0x3d, + 0xa6, 0x52, 0x54, 0x53, 0xb3, 0x78, 0x42, 0xff, 0x5b, 0xa5, 0xe3, 0x8c, + 0x46, 0xaa, 0x52, 0x64, 0x6b, 0x08, 0xe7, 0x77, 0x92, 0xf8, 0xa1, 0x72, + 0x66, 0xa6, 0x0f, 0x85, 0x68, 0x54, 0x45, 0x39, 0xc9, 0x96, 0xe2, 0xd6, + 0x85, 0xc1, 0x36, 0xb7, 0xdb, 0xfc, 0xef, 0xff, 0x68, 0xfa, 0xa9, 0x7f, + 0xfc, 0x49, 0xd4, 0x17, 0x09, 0xb0, 0xf5, 0x7e, 0x14, 0x23, 0xa5, 0xc2, + 0xa3, 0x0b, 0xf2, 0xa6, 0x71, 0x36, 0x8b, 0x4c, 0x51, 0x8e, 0x54, 0x5d, + 0x85, 0xd1, 0xf0, 0x0c, 0xbd, 0x8a, 0x75, 0x6c, 0x76, 0x0f, 0x00, 0x6f, + 0x3a, 0xa8, 0xe2, 0x1b, 0xe0, 0x6b, 0x29, 0x0a, 0xd0, 0x64, 0x1d, 0xe2, + 0x92, 0x85, 0xa3, 0x57, 0x61, 0x2d, 0x11, 0x08, 0x2c, 0x26, 0x74, 0x8c, + 0x9f, 0x6f, 0x9a, 0x53, 0x29, 0x05, 0xd5, 0x44, 0x03, 0x91, 0x8d, 0xd6, + 0x98, 0xde, 0xbf, 0xd3, 0x29, 0xeb, 0x95, 0xf7, 0xd9, 0x3f, 0x06, 0xec, + 0x57, 0x03, 0x23, 0xee, 0x67, 0x02, 0x1e, 0xfa, 0xfe, 0x93, 0x5d, 0xd6, + 0xbb, 0x3b, 0x4d, 0xc8, 0x54, 0xac, 0x80, 0xed, 0xb9, 0x8b, 0xd2, 0x5f, + 0x03, 0x3e, 0x52, 0xed, 0x8e, 0x7b, 0xe9, 0xf1, 0x95, 0xf0, 0x8f, 0x01, + 0xff, 0xfb, 0xe3, 0x6e, 0xff, 0xd9, 0x4f, 0xae, 0xd7, 0x4f, 0x76, 0xdf, + 0x7f, 0xb2, 0xd7, 0x69, 0x45, 0x98, 0x65, 0xd3, 0xc4, 0xd2, 0xa0, 0x30, + 0x4d, 0xa1, 0xd3, 0xe2, 0xa1, 0xe2, 0xea, 0x52, 0x1d, 0xd1, 0xc3, 0xad, + 0x01, 0xfc, 0xb1, 0xe9, 0x44, 0x64, 0xb5, 0xe5, 0x03, 0xa0, 0x4f, 0x61, + 0x21, 0xc0, 0x00, 0xa9, 0x41, 0xeb, 0xe2, 0x41, 0xc9, 0x94, 0x58, 0x1b, + 0xb3, 0x19, 0x36, 0xcc, 0x93, 0x40, 0x9a, 0x98, 0xac, 0xe8, 0xde, 0x13, + 0xb4, 0x8b, 0x81, 0x73, 0x35, 0x99, 0x34, 0x69, 0x75, 0x45, 0x25, 0x83, + 0x68, 0xd3, 0x49, 0x00, 0x9c, 0x6a, 0xb2, 0xd5, 0xa6, 0xd0, 0x78, 0x1d, + 0xc2, 0xd3, 0xbc, 0x56, 0x6d, 0xc3, 0x49, 0x16, 0x62, 0xf7, 0xe7, 0xa7, + 0x86, 0x38, 0xf1, 0x81, 0xd3, 0x13, 0xeb, 0x8c, 0x82, 0x52, 0xcf, 0x8a, + 0x31, 0xeb, 0x60, 0x9c, 0xf0, 0xd5, 0xbd, 0x80, 0x4a, 0x37, 0x80, 0x92, + 0x90, 0x8b, 0xe5, 0xfd, 0x3d, 0x21, 0x9a, 0x57, 0xf8, 0xba, 0x32, 0x8c, + 0x9e, 0xe6, 0xdb, 0x11, 0x51, 0x23, 0x13, 0xbf, 0x6c, 0x26, 0xd9, 0x0f, + 0xb6, 0xda, 0x02, 0x29, 0xc3, 0xb6, 0x2c, 0x21, 0x4b, 0x03, 0x9c, 0xa2, + 0x42, 0x30, 0x3b, 0x61, 0x1b, 0x53, 0xbc, 0x8b, 0x24, 0xb4, 0x0c, 0x34, + 0x82, 0x39, 0xb5, 0xda, 0x5e, 0xcf, 0xa1, 0xc0, 0x24, 0xd3, 0x22, 0x19, + 0xfc, 0x5b, 0xc9, 0xaf, 0xb2, 0x45, 0xfd, 0xb8, 0xe1, 0x01, 0xac, 0xb8, + 0x79, 0x11, 0xf6, 0x51, 0x2d, 0xc2, 0x27, 0x85, 0x05, 0x5c, 0x95, 0x3b, + 0x37, 0xa7, 0x42, 0x03, 0xe0, 0x1a, 0x59, 0x12, 0xb1, 0xbb, 0x2c, 0x24, + 0x73, 0xb4, 0x01, 0x4c, 0x82, 0x2c, 0x52, 0xe7, 0x94, 0x80, 0x7b, 0x3e, + 0x93, 0x04, 0x2f, 0x7a, 0xbc, 0x09, 0x86, 0xe7, 0xee, 0xc1, 0x8a, 0xbe, + 0x8d, 0xf1, 0x18, 0xbb, 0x1b, 0x83, 0x3b, 0x49, 0xad, 0x86, 0xea, 0x7c, + 0x5b, 0x34, 0x30, 0xc1, 0x35, 0x40, 0x75, 0x51, 0x03, 0x28, 0xc5, 0x75, + 0x0b, 0xa3, 0x14, 0xef, 0x40, 0x87, 0x18, 0x45, 0xbf, 0xc3, 0x4c, 0x08, + 0xca, 0x61, 0xd0, 0xdc, 0xa3, 0xe0, 0x5d, 0x2f, 0xaa, 0xae, 0x61, 0x36, + 0x1c, 0x45, 0x2f, 0x17, 0x37, 0x39, 0xc9, 0x34, 0x8f, 0x80, 0x10, 0xd0, + 0x53, 0xf2, 0x8c, 0x63, 0xb4, 0x41, 0x96, 0xfd, 0x6f, 0x98, 0x0d, 0xcf, + 0x91, 0xf5, 0x4f, 0x76, 0x76, 0x1b, 0x55, 0x48, 0x7c, 0xe1, 0xf1, 0x0c, + 0x21, 0x2b, 0x6c, 0x76, 0x61, 0x18, 0xfd, 0x28, 0xda, 0x7b, 0xbe, 0xfb, + 0x7c, 0x7b, 0x77, 0x67, 0xf0, 0x64, 0xb0, 0xa7, 0x42, 0x31, 0x30, 0x11, + 0x49, 0x56, 0xe7, 0x2a, 0x3f, 0x11, 0x42, 0x6b, 0xda, 0xa3, 0x51, 0x58, + 0xdf, 0xa3, 0xe6, 0x02, 0x38, 0x56, 0x2d, 0x27, 0xec, 0x6f, 0xf0, 0x98, + 0x03, 0x67, 0x5c, 0x64, 0x86, 0x55, 0xb2, 0x68, 0x38, 0xab, 0xe7, 0x7d, + 0x1e, 0x8a, 0xca, 0x7c, 0x4b, 0x41, 0x53, 0x1e, 0xa5, 0x24, 0xb3, 0x94, + 0x5c, 0x01, 0x8f, 0xd3, 0x9f, 0x49, 0x8e, 0x35, 0xa4, 0x1e, 0xce, 0x0b, + 0xce, 0xc2, 0x32, 0x9a, 0x6b, 0x02, 0x14, 0x4d, 0x58, 0x41, 0xea, 0xb0, + 0x91, 0x3d, 0x12, 0x2e, 0x53, 0x49, 0xc7, 0x05, 0xf6, 0x0a, 0xdd, 0xf9, + 0xa8, 0x3b, 0xf3, 0xb5, 0x65, 0x03, 0xc7, 0xad, 0x71, 0x9e, 0x1a, 0xb9, + 0x22, 0xba, 0x6f, 0x2c, 0xf1, 0x46, 0x58, 0x4a, 0x28, 0x38, 0xfa, 0x81, + 0x50, 0xaa, 0x08, 0x82, 0x82, 0xde, 0x38, 0x49, 0xdb, 0xa0, 0xd3, 0x52, + 0x57, 0x27, 0xc1, 0xef, 0xb8, 0xa2, 0x79, 0xb0, 0x7b, 0x57, 0x94, 0x3c, + 0x6f, 0x67, 0x7d, 0x34, 0xc0, 0xf0, 0x11, 0x9c, 0x39, 0xa1, 0x85, 0xbd, + 0xff, 0x3f, 0xd1, 0xc2, 0xde, 0xff, 0xa3, 0x85, 0x7f, 0x13, 0x2d, 0xbc, + 0xa8, 0xd1, 0x02, 0x14, 0x05, 0xba, 0x74, 0x58, 0xb5, 0x78, 0x94, 0x22, + 0x16, 0xec, 0xae, 0xe4, 0x44, 0x8b, 0x54, 0x52, 0xf1, 0x6a, 0x86, 0x78, + 0xd3, 0x42, 0xb5, 0x7e, 0xe0, 0x6c, 0xb6, 0xac, 0xcf, 0x6a, 0x6e, 0xe5, + 0x0a, 0x55, 0xb5, 0x28, 0x83, 0x34, 0x06, 0xb5, 0x29, 0x58, 0xd8, 0x97, + 0x00, 0x95, 0x4a, 0x54, 0x2e, 0x07, 0x63, 0xe3, 0xf2, 0x6d, 0x27, 0xb0, + 0x6d, 0x17, 0x8e, 0x97, 0x73, 0x16, 0x6b, 0x9f, 0xa4, 0xd8, 0x45, 0xa3, + 0x00, 0xf4, 0x5e, 0x73, 0xca, 0x80, 0x0d, 0x7b, 0x74, 0xc2, 0xdc, 0xf9, + 0xda, 0xa0, 0xad, 0x28, 0x9c, 0xa9, 0xcd, 0x6c, 0x9d, 0x88, 0x2d, 0x93, + 0xd4, 0x39, 0xbe, 0x13, 0x5b, 0x2e, 0xda, 0xc4, 0x85, 0xc8, 0xea, 0x1e, + 0x2f, 0x4b, 0xd0, 0x97, 0x5c, 0xa7, 0x8d, 0x09, 0x3b, 0xec, 0xcb, 0x81, + 0x3e, 0x97, 0x5a, 0x1d, 0x40, 0xcb, 0xf3, 0xad, 0x0f, 0x52, 0x77, 0x05, + 0x73, 0x6a, 0x2a, 0x8a, 0x85, 0x74, 0xc4, 0x03, 0xab, 0x95, 0x62, 0x96, + 0x35, 0x9a, 0x40, 0x63, 0x6d, 0x5d, 0xa4, 0xe6, 0x2a, 0x89, 0x7a, 0x5b, + 0x1f, 0x81, 0x54, 0x2e, 0xfc, 0x27, 0x17, 0x49, 0xfa, 0x6f, 0x59, 0x25, + 0xed, 0xab, 0x35, 0x5c, 0x33, 0x5c, 0xa6, 0xc6, 0x8c, 0xd6, 0xf9, 0x69, + 0xd7, 0xec, 0xfc, 0x3a, 0x5f, 0x6d, 0x7d, 0x5a, 0x6d, 0xf1, 0x34, 0xed, + 0x13, 0x93, 0x0a, 0xb3, 0x81, 0xc3, 0xd8, 0x4a, 0x9d, 0xd9, 0xfc, 0xd0, + 0x71, 0xdd, 0xe4, 0xe9, 0x1e, 0xd6, 0xf8, 0xed, 0x0a, 0x29, 0x3c, 0xca, + 0xea, 0x9d, 0x1d, 0xe0, 0x91, 0x5d, 0x74, 0xa0, 0xd4, 0x32, 0xe7, 0xa6, + 0xc1, 0xe9, 0x5f, 0xdb, 0x45, 0xd8, 0xbc, 0x2a, 0x7b, 0x88, 0x2e, 0x2a, + 0x53, 0x69, 0x31, 0xfa, 0x35, 0x36, 0x6f, 0x77, 0xb0, 0x43, 0x02, 0x16, + 0xff, 0x06, 0x3d, 0x6f, 0x9f, 0xad, 0x0a, 0x3f, 0x7d, 0xde, 0x40, 0xeb, + 0x36, 0x10, 0xf0, 0x00, 0xe8, 0x0e, 0xf3, 0x8a, 0xf8, 0x7d, 0x1b, 0x99, + 0xe1, 0x73, 0xf8, 0xcc, 0x06, 0xf5, 0x99, 0xae, 0x47, 0x2e, 0x4a, 0xcb, + 0x00, 0xb8, 0x88, 0x93, 0x0f, 0xf0, 0xf2, 0xee, 0xce, 0x67, 0x3b, 0xad, + 0x09, 0x5a, 0x60, 0xd0, 0x2d, 0x95, 0x77, 0x34, 0x9b, 0x30, 0x76, 0xa1, + 0xbd, 0x32, 0x38, 0xb1, 0xef, 0xb4, 0x7b, 0x9f, 0x36, 0xfb, 0x0f, 0xdb, + 0xba, 0x06, 0x5b, 0x3d, 0x4d, 0xf6, 0x8a, 0x4b, 0xb3, 0xf9, 0xbb, 0x94, + 0x8c, 0xc3, 0xb3, 0xb7, 0x6f, 0x8f, 0x0f, 0xe9, 0xca, 0xb9, 0xc9, 0xe1, + 0xe2, 0x74, 0xb6, 0xda, 0x36, 0xdd, 0xcf, 0xe3, 0x89, 0xcb, 0x00, 0x78, + 0x71, 0xcc, 0xc8, 0x17, 0x5a, 0x3c, 0x6a, 0xfc, 0xa5, 0x85, 0x38, 0x77, + 0x07, 0xbb, 0xc1, 0x56, 0x2d, 0x6c, 0xa4, 0x25, 0x67, 0x53, 0x4c, 0x5b, + 0x43, 0xbd, 0xad, 0x4f, 0x99, 0xb3, 0x49, 0xb5, 0xd5, 0x59, 0x36, 0x12, + 0x0d, 0x70, 0x19, 0xb4, 0x08, 0x05, 0xd6, 0x12, 0x46, 0xae, 0x50, 0x70, + 0x56, 0x87, 0x5e, 0x12, 0x63, 0x31, 0x90, 0xc8, 0x2d, 0x8b, 0xe2, 0xab, + 0xb4, 0x2c, 0x8c, 0x43, 0x3b, 0xe4, 0x3c, 0x55, 0xda, 0xb6, 0xa9, 0x45, + 0xb2, 0xa7, 0xa5, 0x56, 0x06, 0x03, 0x52, 0x28, 0xb4, 0x58, 0x17, 0x9b, + 0x57, 0x48, 0xbc, 0x10, 0xf5, 0xd2, 0xb8, 0xef, 0xa8, 0xd7, 0x78, 0x41, + 0x1d, 0x21, 0x20, 0xb9, 0x10, 0x0c, 0x41, 0x77, 0x50, 0x2a, 0xdb, 0x6e, + 0x5b, 0xe7, 0x53, 0x25, 0x9a, 0xa1, 0x92, 0xce, 0x56, 0xe7, 0xe2, 0x5c, + 0xd5, 0x26, 0x28, 0x21, 0xf3, 0x1a, 0x3b, 0xad, 0xbe, 0x3a, 0x8b, 0xff, + 0x51, 0x46, 0xd1, 0x52, 0x5d, 0x53, 0xa9, 0x5e, 0x62, 0xc0, 0xe2, 0xb9, + 0x90, 0x91, 0xae, 0x95, 0xa3, 0xa0, 0xac, 0x72, 0x08, 0x97, 0xa3, 0x47, + 0x50, 0xd6, 0x58, 0xb9, 0x11, 0x7b, 0xe9, 0xa3, 0x00, 0x6b, 0x2e, 0x02, + 0x40, 0x2c, 0x84, 0x6b, 0x21, 0x9c, 0xff, 0xed, 0x00, 0x6b, 0x56, 0x42, + 0x5a, 0x92, 0xa6, 0xd6, 0x05, 0x21, 0x5b, 0xcd, 0x4c, 0xd8, 0xc0, 0x8b, + 0xda, 0xe9, 0xd0, 0x0a, 0x6f, 0x59, 0xbe, 0x3d, 0x85, 0xc8, 0xc8, 0xc9, + 0x3c, 0x19, 0x9b, 0xb1, 0x94, 0x7d, 0xb6, 0x50, 0xc8, 0xd8, 0xd7, 0x6f, + 0xa6, 0xa6, 0x55, 0xe0, 0x53, 0x1b, 0xf4, 0xcc, 0xc7, 0x1a, 0x2a, 0xf6, + 0x97, 0x40, 0x0a, 0x5a, 0x71, 0xbc, 0x93, 0x79, 0x03, 0x9d, 0x88, 0x9f, + 0x18, 0x7b, 0xb8, 0x58, 0xad, 0xeb, 0x25, 0xac, 0x5e, 0x98, 0xa2, 0xab, + 0x73, 0x67, 0x84, 0xc2, 0xe0, 0x3d, 0xed, 0x99, 0x2c, 0x52, 0xaa, 0xb9, + 0x1b, 0x38, 0x9b, 0x5c, 0xa8, 0xb5, 0xe4, 0x4d, 0xe7, 0xa5, 0xa5, 0xba, + 0x2e, 0xc2, 0x6a, 0xda, 0x71, 0x71, 0x5b, 0xac, 0xc5, 0x1f, 0x55, 0x04, + 0x19, 0xc4, 0xb3, 0x21, 0xe1, 0x2f, 0x00, 0x27, 0xb6, 0x56, 0x05, 0x57, + 0xa4, 0x0c, 0x47, 0xc9, 0x94, 0x58, 0x6d, 0xce, 0x6d, 0x51, 0x03, 0x73, + 0xad, 0x61, 0x30, 0x74, 0x28, 0xc5, 0xed, 0x85, 0xe6, 0xd3, 0x41, 0x12, + 0x75, 0x18, 0xbf, 0xb8, 0x13, 0x06, 0xb7, 0x8b, 0x6b, 0xca, 0xbd, 0xca, + 0x75, 0xaf, 0x69, 0xa8, 0x6e, 0xac, 0x2d, 0x76, 0x18, 0x63, 0xaf, 0x6a, + 0xbe, 0xe0, 0x2d, 0xdb, 0x7c, 0x37, 0x4f, 0x1f, 0x70, 0x15, 0x34, 0x41, + 0x11, 0xdd, 0xbc, 0x1f, 0x19, 0xd5, 0xee, 0x8b, 0xbd, 0xc1, 0xee, 0xf3, + 0xcf, 0x06, 0xa4, 0x7a, 0xed, 0x56, 0x46, 0x87, 0x20, 0x09, 0x0e, 0x6b, + 0x08, 0xdb, 0x69, 0xb9, 0x44, 0xdb, 0x1c, 0x74, 0x61, 0x07, 0xb3, 0xd5, + 0x20, 0x08, 0xcf, 0x6b, 0x74, 0xa1, 0x21, 0x7c, 0xf5, 0x96, 0xfb, 0x81, + 0xb1, 0x5d, 0x49, 0x0d, 0xda, 0x41, 0x5b, 0x45, 0x69, 0xc3, 0xa9, 0x0b, + 0x0a, 0x49, 0x4f, 0xda, 0x07, 0xb4, 0xbe, 0xba, 0xb4, 0xeb, 0xff, 0x5f, + 0x38, 0xee, 0x56, 0xcd, 0xe5, 0x28, 0xf5, 0x51, 0xe3, 0x52, 0x6c, 0xde, + 0xaa, 0x87, 0x4b, 0x4d, 0xe9, 0xb3, 0x8b, 0x4b, 0x4d, 0x42, 0x13, 0x76, + 0x10, 0x17, 0x77, 0x03, 0x17, 0x11, 0x80, 0x00, 0x24, 0xbd, 0x5c, 0x9a, + 0x40, 0xbb, 0x28, 0x5f, 0x6d, 0xe9, 0xa2, 0xc1, 0x1d, 0x8a, 0x36, 0x5d, + 0x5a, 0x54, 0x58, 0x18, 0x1e, 0x3e, 0x15, 0xbc, 0x06, 0x1b, 0x23, 0xad, + 0xd0, 0xd4, 0x67, 0xf0, 0xf2, 0x6b, 0x7f, 0xfa, 0x93, 0x67, 0x51, 0x43, + 0x8e, 0xdb, 0xd7, 0xb2, 0x4f, 0x50, 0xe4, 0x9e, 0x79, 0x07, 0x82, 0x64, + 0xb9, 0x47, 0x9d, 0xfd, 0x1f, 0x11, 0xdd, 0xff, 0x53, 0xff, 0x47, 0xfa, + 0xf3, 0xa7, 0x8e, 0xbb, 0x06, 0xa0, 0x50, 0x89, 0xf5, 0xd4, 0x4d, 0x5e, + 0x36, 0xa8, 0x87, 0x67, 0x5c, 0x31, 0x73, 0x20, 0x42, 0x70, 0xd0, 0x07, + 0x0e, 0xa2, 0x24, 0x82, 0xca, 0x4c, 0xd5, 0xc3, 0x20, 0x09, 0xe2, 0x52, + 0x8b, 0x85, 0x28, 0xc5, 0xad, 0xa5, 0xe6, 0x64, 0x68, 0x92, 0x27, 0x5e, + 0xec, 0x99, 0xa9, 0x94, 0x4d, 0xc1, 0xf7, 0xc2, 0x76, 0x62, 0xcb, 0x23, + 0x97, 0xfb, 0x87, 0xe1, 0xc3, 0xd4, 0x4c, 0x2d, 0x1f, 0x6c, 0xb8, 0xbc, + 0x37, 0x0e, 0x38, 0xd7, 0xd2, 0xd7, 0x12, 0xd5, 0x29, 0xfe, 0xf1, 0xc4, + 0x45, 0x05, 0xa5, 0x73, 0x36, 0x9f, 0x1b, 0x3a, 0x44, 0x9e, 0x16, 0xb7, + 0x3c, 0x43, 0xcd, 0xcc, 0x8c, 0x24, 0x75, 0x78, 0x23, 0xd0, 0xf7, 0x31, + 0x32, 0x4b, 0x1e, 0xe2, 0xa0, 0x44, 0xc3, 0x37, 0x0b, 0x6e, 0x81, 0xbf, + 0x39, 0xa7, 0x94, 0x54, 0xe6, 0x51, 0x1b, 0xac, 0xa0, 0x10, 0x79, 0x4c, + 0xb6, 0xcc, 0x90, 0x9f, 0x42, 0x20, 0x0f, 0xc3, 0xab, 0x69, 0x04, 0x8d, + 0x87, 0x08, 0x80, 0x2e, 0xe4, 0x19, 0x05, 0x71, 0xe3, 0x89, 0xc1, 0x4c, + 0x6a, 0xea, 0x9e, 0x84, 0x9b, 0x05, 0x78, 0x60, 0x2d, 0x89, 0xb6, 0xd5, + 0x20, 0xeb, 0x1a, 0x62, 0x93, 0xa6, 0x65, 0x24, 0x71, 0x4e, 0xdc, 0x8b, + 0xcd, 0xe1, 0xc1, 0xe4, 0xfe, 0x07, 0x35, 0x0b, 0x34, 0x38, 0x46, 0x2f, + 0xc4, 0xc8, 0xdb, 0xee, 0xb7, 0xed, 0xa1, 0x5c, 0x72, 0x43, 0x64, 0x9f, + 0x31, 0x6d, 0xe5, 0xa3, 0xb4, 0xcc, 0x63, 0x0d, 0x25, 0xd4, 0x54, 0xe8, + 0x40, 0xb8, 0x50, 0xb8, 0xf2, 0xe1, 0xba, 0x54, 0xe8, 0x41, 0xf4, 0x3f, + 0xd0, 0xa9, 0xbe, 0x2d, 0x91, 0x30, 0xc8, 0xbf, 0xf9, 0xf2, 0xf8, 0xf5, + 0xd9, 0xc5, 0x71, 0x35, 0x69, 0x45, 0x72, 0x24, 0xa3, 0xb6, 0xc2, 0x2b, + 0x9b, 0xa8, 0x0f, 0x69, 0x16, 0x14, 0x2c, 0x95, 0x65, 0x5b, 0x9e, 0x7f, + 0x77, 0x14, 0x9c, 0x3c, 0xcb, 0xdf, 0xb6, 0x46, 0x7b, 0xe2, 0xd9, 0x68, + 0x20, 0x58, 0x13, 0xff, 0xdc, 0x42, 0xbd, 0x4f, 0xc1, 0x5a, 0xb3, 0xf1, + 0x09, 0x46, 0x00, 0xea, 0x95, 0x68, 0x3d, 0x60, 0x09, 0x56, 0x29, 0x0a, + 0xb6, 0xbc, 0xb8, 0x46, 0x5b, 0xb0, 0x01, 0x19, 0x81, 0x02, 0x15, 0xbe, + 0xd4, 0xc4, 0x11, 0x47, 0xf0, 0xbe, 0xb0, 0x43, 0x66, 0x10, 0x35, 0x3b, + 0x1a, 0xe9, 0x3a, 0xa0, 0x97, 0x06, 0xee, 0xbe, 0x80, 0xcd, 0xb0, 0xf5, + 0x5a, 0xec, 0xf4, 0xa6, 0x30, 0x28, 0xa0, 0x40, 0x14, 0x26, 0xf0, 0x4b, + 0xe9, 0x4c, 0x07, 0x74, 0xdc, 0xbc, 0x7d, 0xdd, 0xfa, 0x6a, 0xe7, 0x9b, + 0xc5, 0x56, 0xa5, 0xa4, 0xa8, 0x2d, 0x9e, 0x55, 0xae, 0xfa, 0x53, 0x37, + 0xda, 0xb4, 0xf8, 0x9a, 0x16, 0x58, 0x01, 0x87, 0xf9, 0x6a, 0x89, 0x06, + 0x5b, 0xae, 0x70, 0xd1, 0x9a, 0x52, 0x45, 0x6e, 0xd6, 0x6b, 0xb3, 0x9c, + 0x4c, 0x40, 0x30, 0x38, 0x2d, 0x3b, 0xc9, 0x86, 0x0f, 0xe5, 0x8a, 0x2f, + 0x4b, 0x3b, 0xbd, 0xf5, 0x88, 0x16, 0x3e, 0x71, 0xc6, 0x15, 0xe9, 0x1a, + 0x29, 0x42, 0xed, 0x0f, 0x16, 0x8e, 0x2a, 0xc9, 0x95, 0xc5, 0x6a, 0x5e, + 0x42, 0x68, 0x12, 0x00, 0xf9, 0x71, 0x96, 0xf3, 0x92, 0xd6, 0x9a, 0x03, + 0x26, 0x81, 0xdb, 0x34, 0xc4, 0x44, 0x5f, 0xbc, 0x3e, 0x7c, 0xf1, 0xec, + 0x05, 0x44, 0x3f, 0xd4, 0x8e, 0xd1, 0xa8, 0x7b, 0x0d, 0xa9, 0x40, 0x32, + 0xa8, 0x1f, 0x72, 0x83, 0x1d, 0x68, 0x4b, 0x90, 0x12, 0x59, 0x70, 0x99, + 0x4a, 0x94, 0xff, 0x30, 0x68, 0x62, 0xd0, 0x0a, 0x67, 0xd4, 0x76, 0x7b, + 0xae, 0x2b, 0x81, 0x68, 0xb7, 0x06, 0x46, 0x9f, 0x4a, 0x1c, 0xb7, 0x16, + 0x50, 0x33, 0x75, 0x89, 0x34, 0xf4, 0x39, 0xb4, 0x19, 0xdd, 0xc4, 0x9e, + 0xa3, 0x3a, 0x57, 0x9b, 0xae, 0x68, 0x6b, 0xee, 0x6f, 0xd5, 0xf3, 0xac, + 0x54, 0x17, 0x24, 0x82, 0xce, 0xaa, 0x15, 0x55, 0x51, 0xbd, 0x1d, 0xf6, + 0xde, 0x36, 0x43, 0x89, 0x1a, 0xb1, 0x10, 0x2f, 0xc4, 0x99, 0x71, 0xd3, + 0x69, 0x40, 0x5e, 0x2d, 0xfd, 0x35, 0x0b, 0x54, 0xde, 0x5c, 0xe7, 0x0b, + 0xc9, 0xea, 0x68, 0x43, 0xe1, 0x0b, 0x51, 0x53, 0xe4, 0x51, 0x23, 0x76, + 0x07, 0x2d, 0x2e, 0xef, 0x9e, 0x1c, 0xb9, 0x62, 0xae, 0xde, 0x67, 0x39, + 0x5a, 0xb5, 0x37, 0xe7, 0x1e, 0x03, 0xb1, 0x79, 0xa6, 0xe8, 0x9a, 0xf2, + 0x52, 0xf3, 0x68, 0x65, 0xc6, 0x4e, 0xfe, 0xae, 0xbd, 0x39, 0x6d, 0x45, + 0x94, 0x49, 0x69, 0xc3, 0x1a, 0x46, 0x30, 0x8e, 0x15, 0xd4, 0xe1, 0x8d, + 0xe1, 0x84, 0x36, 0xeb, 0xa6, 0x59, 0x98, 0xe9, 0x86, 0x84, 0x70, 0x11, + 0xc4, 0x3f, 0xb8, 0x16, 0x33, 0x98, 0x06, 0xad, 0xaa, 0x85, 0xa6, 0x0c, + 0x17, 0x61, 0xd2, 0x21, 0xda, 0x19, 0x01, 0x98, 0xb1, 0x8d, 0x94, 0xeb, + 0x56, 0x12, 0x51, 0xd2, 0xd0, 0x3c, 0xde, 0x0c, 0xa7, 0x30, 0x8f, 0xb2, + 0x71, 0x19, 0xcc, 0x80, 0x1f, 0x68, 0x6f, 0x4e, 0x45, 0x83, 0xe6, 0xcc, + 0x38, 0xb1, 0x10, 0x11, 0xdb, 0x8f, 0xcf, 0x4c, 0x1e, 0x6c, 0x6c, 0x32, + 0x7d, 0x28, 0xac, 0xa8, 0xb1, 0xc3, 0xeb, 0x67, 0xd6, 0xb6, 0xc3, 0x18, + 0x41, 0x7d, 0x83, 0x4d, 0x88, 0xcc, 0x65, 0x2b, 0xfb, 0xed, 0xcd, 0xb9, + 0x1d, 0xc6, 0x93, 0x8f, 0x6e, 0xb0, 0xf6, 0xd2, 0x58, 0x85, 0xe9, 0x5c, + 0x21, 0xc0, 0xde, 0x4b, 0x1a, 0x24, 0xe7, 0x37, 0x96, 0xef, 0x1f, 0x5f, + 0x90, 0xe9, 0xdc, 0xf0, 0x42, 0x38, 0x7d, 0xcf, 0x1f, 0x5c, 0x0d, 0x3f, + 0x88, 0xab, 0x48, 0x22, 0x91, 0x98, 0x17, 0xd6, 0x90, 0xbd, 0xef, 0xcf, + 0x03, 0x4c, 0x2c, 0xb2, 0x74, 0x6e, 0xb1, 0xa7, 0xca, 0xcb, 0x83, 0x21, + 0x46, 0x6d, 0x40, 0x04, 0x41, 0xc0, 0x54, 0x63, 0x8a, 0xb3, 0x5b, 0x86, + 0xff, 0x73, 0xb7, 0xdb, 0xfb, 0xf5, 0x3a, 0x0c, 0xe8, 0x58, 0x1e, 0xf7, + 0x74, 0x2c, 0xb3, 0x72, 0xca, 0xb9, 0x4b, 0xab, 0xfb, 0xf0, 0x6e, 0x57, + 0xbb, 0x74, 0x67, 0xb2, 0x3e, 0xbe, 0xc5, 0xfd, 0xc4, 0x3a, 0xe7, 0x5f, + 0xad, 0xe3, 0x10, 0x06, 0x32, 0x1e, 0x15, 0xd9, 0x74, 0x59, 0x4a, 0x44, + 0x42, 0x58, 0x26, 0x9a, 0xb8, 0xeb, 0x9a, 0xa5, 0x40, 0x10, 0x8e, 0xdd, + 0xed, 0xeb, 0x33, 0xc7, 0x72, 0x81, 0x8d, 0x35, 0x54, 0x14, 0x6c, 0xc7, + 0xfa, 0xc5, 0xd1, 0xa7, 0xfd, 0x10, 0x05, 0xd3, 0xd4, 0x33, 0xaf, 0xbc, + 0x65, 0x81, 0xd6, 0x33, 0x3c, 0xed, 0xb5, 0x76, 0x20, 0x26, 0x09, 0xe3, + 0x0a, 0x29, 0x29, 0x70, 0x04, 0x86, 0x34, 0x64, 0x7c, 0xef, 0x31, 0x42, + 0x5a, 0xbb, 0xc6, 0xf9, 0xec, 0x03, 0x87, 0x9c, 0x1e, 0xf0, 0xb3, 0x62, + 0xfc, 0x93, 0x60, 0x56, 0x8d, 0x93, 0xa9, 0xc7, 0x78, 0xcd, 0xca, 0xaf, + 0x1b, 0x41, 0x85, 0x0a, 0x1f, 0x1b, 0x09, 0x3f, 0xd8, 0x36, 0x18, 0xbf, + 0xb4, 0x2c, 0xa7, 0x20, 0x63, 0xcd, 0x46, 0xd6, 0xde, 0x9c, 0x0e, 0xd7, + 0xbf, 0xa7, 0xcb, 0xd3, 0x33, 0xb3, 0xd9, 0x44, 0xcd, 0xd0, 0xac, 0x81, + 0x36, 0x69, 0xc3, 0x0e, 0xf8, 0x2f, 0x62, 0x10, 0xac, 0x76, 0x4c, 0xe7, + 0x95, 0x00, 0x12, 0xea, 0x31, 0x9b, 0x21, 0xd1, 0xbd, 0x3d, 0x50, 0x4e, + 0xe2, 0xe4, 0xc3, 0x4c, 0x77, 0xb7, 0xed, 0x82, 0xe5, 0x3a, 0x4d, 0xc2, + 0xaa, 0x70, 0xf7, 0x21, 0x74, 0x4f, 0x8b, 0x19, 0xcc, 0x0a, 0x9d, 0xc4, + 0x80, 0xee, 0xa1, 0xae, 0x91, 0x9e, 0xa1, 0x78, 0xb4, 0x48, 0xf5, 0x28, + 0x4c, 0x1f, 0x13, 0xe3, 0x91, 0x13, 0x85, 0xe5, 0xf1, 0x06, 0x1e, 0x3f, + 0x47, 0xa6, 0x4a, 0x4d, 0xb6, 0x6a, 0xa9, 0x97, 0x41, 0x23, 0x2c, 0x2b, + 0xb9, 0x9e, 0xf4, 0x95, 0x38, 0xaa, 0xac, 0xa8, 0x9f, 0x6f, 0x63, 0x21, + 0x48, 0xfd, 0x7d, 0x89, 0x1f, 0x9f, 0xaf, 0x2d, 0x30, 0x35, 0xf4, 0x55, + 0xa6, 0xa2, 0x8b, 0x84, 0x11, 0x6d, 0x01, 0x98, 0xc7, 0xb9, 0xfe, 0xaa, + 0x40, 0x6f, 0xb2, 0xad, 0x45, 0x0a, 0x12, 0x0a, 0x04, 0xf0, 0x78, 0xd9, + 0x86, 0x3f, 0xbd, 0x65, 0x05, 0x94, 0xd0, 0xf4, 0xee, 0x60, 0xb7, 0x67, + 0xba, 0x95, 0x4a, 0x71, 0x26, 0x21, 0xf3, 0x27, 0xb1, 0x8b, 0x18, 0xe3, + 0xae, 0xeb, 0xd6, 0xb1, 0x0b, 0x09, 0xec, 0x51, 0xb1, 0x31, 0x2c, 0x22, + 0xc6, 0xc0, 0x5e, 0x4e, 0x28, 0xe7, 0x84, 0xfd, 0x06, 0x15, 0xed, 0xf4, + 0x9f, 0xbe, 0x78, 0x51, 0xb9, 0xd7, 0x43, 0x25, 0xf8, 0xd9, 0xce, 0x8e, + 0xc0, 0x18, 0xd4, 0x5f, 0xa3, 0x2f, 0xfa, 0x2f, 0xf0, 0x62, 0xf5, 0x35, + 0x49, 0x73, 0x5f, 0xff, 0x5e, 0x9f, 0xbf, 0x69, 0xe9, 0x0e, 0x16, 0x9c, + 0xb5, 0x6f, 0xbd, 0xe0, 0xee, 0x5a, 0xde, 0xc2, 0xc3, 0xb2, 0x8e, 0xd9, + 0xd5, 0x15, 0x97, 0xe7, 0xe4, 0x27, 0x05, 0xe8, 0x34, 0xcb, 0xef, 0xe3, + 0x7c, 0xd2, 0x9c, 0xee, 0x4e, 0xaf, 0xbf, 0xbb, 0x6e, 0xba, 0xae, 0x98, + 0x16, 0xb6, 0x93, 0x35, 0xa1, 0xcd, 0x3f, 0x6e, 0x6d, 0x7e, 0xbd, 0xd5, + 0x36, 0xfb, 0x4f, 0x77, 0x76, 0x7a, 0xcf, 0xf9, 0xe7, 0x8b, 0x17, 0xed, + 0x47, 0xad, 0xd2, 0xc7, 0x13, 0x9b, 0x5a, 0x65, 0xb4, 0xd4, 0x4e, 0x4b, + 0xeb, 0xbb, 0xd4, 0xea, 0xee, 0x8b, 0x17, 0x3d, 0xee, 0xe5, 0xd9, 0x47, + 0xb5, 0x5e, 0xde, 0x67, 0xde, 0x74, 0xce, 0xaf, 0x7b, 0x72, 0x2c, 0x6a, + 0x33, 0xa0, 0x3f, 0xa3, 0xe8, 0x95, 0x40, 0x3b, 0x44, 0x41, 0x66, 0x85, + 0x77, 0xbb, 0x84, 0xf0, 0x54, 0x08, 0x68, 0x58, 0x20, 0xdb, 0x00, 0x9a, + 0xa2, 0xa8, 0x1f, 0xb1, 0xf7, 0x2f, 0x98, 0x3f, 0xde, 0xc3, 0x86, 0x9e, + 0x89, 0x2b, 0xec, 0x9a, 0x61, 0x25, 0x2c, 0x17, 0xa1, 0x88, 0x36, 0x89, + 0x5c, 0xb6, 0x60, 0x0b, 0xb8, 0x8b, 0xa7, 0xa9, 0xa5, 0xab, 0x46, 0x5d, + 0x18, 0xb0, 0x24, 0xf5, 0x98, 0x7e, 0xcf, 0x16, 0xdd, 0x48, 0xaa, 0xdb, + 0x3b, 0x4d, 0xc4, 0xbc, 0x52, 0xf2, 0x64, 0x5f, 0x9e, 0x91, 0x83, 0x06, + 0x75, 0xee, 0x41, 0x61, 0x97, 0xd8, 0x3b, 0x54, 0xeb, 0x35, 0x72, 0x00, + 0x10, 0x1e, 0xb6, 0x50, 0xf0, 0xfe, 0x60, 0xae, 0xf2, 0xd3, 0xec, 0x16, + 0x01, 0xcc, 0x8f, 0x39, 0x0c, 0xe6, 0x81, 0x37, 0x70, 0x92, 0x18, 0x94, + 0x64, 0xad, 0x2c, 0x82, 0x7b, 0x5f, 0xec, 0x31, 0x4b, 0x51, 0x44, 0xfd, + 0x21, 0xab, 0x54, 0x99, 0x15, 0x4c, 0x43, 0xd6, 0x4f, 0xef, 0x63, 0x2b, + 0xa0, 0x8a, 0x08, 0x40, 0xe3, 0x00, 0x0e, 0x4d, 0x4e, 0x93, 0x43, 0x34, + 0x43, 0xce, 0x27, 0x7c, 0x1a, 0x6c, 0xa7, 0x04, 0x8d, 0x4f, 0x80, 0x9d, + 0xaa, 0xa9, 0x44, 0x6c, 0xfb, 0x17, 0xe4, 0xc4, 0xd0, 0x1d, 0x86, 0xbc, + 0xa1, 0xd8, 0x5b, 0xe8, 0x04, 0xee, 0x66, 0xa3, 0xe6, 0x02, 0xe3, 0xa7, + 0x3c, 0x10, 0x85, 0xab, 0x54, 0xe7, 0x66, 0x01, 0x76, 0xe4, 0xaa, 0x5d, + 0xca, 0xe2, 0x1b, 0xd0, 0x87, 0xd6, 0xc4, 0xb4, 0x9c, 0x61, 0xc1, 0xe1, + 0x41, 0x42, 0x7b, 0x65, 0xc7, 0x68, 0xaf, 0x1c, 0x13, 0xa4, 0x4d, 0x8b, + 0x36, 0x03, 0x88, 0x75, 0xd0, 0x56, 0xa0, 0xf3, 0x1b, 0x66, 0x5c, 0x36, + 0x63, 0xc0, 0xdb, 0xc9, 0xd6, 0x40, 0x06, 0x00, 0xa3, 0xad, 0xec, 0x04, + 0x43, 0x08, 0x56, 0xb6, 0x94, 0x0b, 0x0f, 0xa3, 0x1c, 0x36, 0x3f, 0x69, + 0x97, 0xf3, 0xf0, 0xe4, 0x7f, 0x1e, 0x0f, 0x7e, 0x0d, 0x6b, 0x72, 0x3d, + 0xbc, 0x2e, 0x8f, 0xef, 0xcd, 0xbb, 0x29, 0x31, 0x86, 0x52, 0xd3, 0x4e, + 0xa2, 0x98, 0xe3, 0xe9, 0xd4, 0x57, 0xf3, 0x85, 0xdf, 0x8f, 0x84, 0xfd, + 0xcc, 0x10, 0x71, 0xad, 0x4e, 0x6f, 0xb6, 0x16, 0x42, 0x15, 0x15, 0xda, + 0x51, 0xa5, 0x32, 0x34, 0x2c, 0xbb, 0xc4, 0xf6, 0x19, 0xdc, 0x2f, 0x7c, + 0x27, 0x32, 0x29, 0x2e, 0xe7, 0xa8, 0x7e, 0x4d, 0x63, 0xa8, 0xcb, 0x33, + 0xf1, 0x7d, 0x03, 0x71, 0x36, 0x8c, 0x8b, 0xb9, 0xf0, 0x61, 0x9b, 0x3c, + 0xf3, 0x56, 0xcf, 0x6d, 0xa5, 0xc0, 0x7b, 0x58, 0xd8, 0xdd, 0xec, 0x06, + 0x81, 0x71, 0x1c, 0xc4, 0x8f, 0x80, 0xe0, 0x36, 0x73, 0x14, 0xaf, 0x6d, + 0x19, 0xcf, 0x16, 0x2d, 0x21, 0xbd, 0x92, 0x7e, 0x64, 0x48, 0x10, 0xac, + 0x1c, 0x99, 0xa1, 0x56, 0x3b, 0x6b, 0x36, 0x17, 0x44, 0x1a, 0x0b, 0xe5, + 0xd2, 0x8b, 0x70, 0x44, 0xb8, 0x7e, 0xaa, 0x01, 0xb2, 0x2c, 0x8b, 0x01, + 0x18, 0xb1, 0x25, 0x1b, 0x21, 0xd6, 0x95, 0x4f, 0x81, 0xcb, 0x96, 0xe4, + 0xb9, 0xd4, 0xf8, 0x10, 0xe9, 0x3e, 0xd1, 0x08, 0xa7, 0x2a, 0x78, 0xbd, + 0x55, 0xa5, 0x8b, 0xd7, 0xec, 0xa0, 0x47, 0x1e, 0x93, 0xae, 0xb1, 0x7e, + 0xfe, 0x16, 0x96, 0x70, 0x5f, 0xb3, 0xdd, 0x69, 0x91, 0xe7, 0x68, 0xb9, + 0x18, 0x34, 0x01, 0x1b, 0x4b, 0x5f, 0x27, 0x4c, 0xdf, 0xa7, 0xee, 0x77, + 0x42, 0x57, 0x21, 0x18, 0x05, 0xfa, 0xe1, 0xc1, 0x29, 0x42, 0x7d, 0x5a, + 0xb4, 0x02, 0x9c, 0xc3, 0x70, 0xcc, 0x16, 0x50, 0x37, 0x5f, 0x99, 0xae, + 0xd8, 0xf8, 0x25, 0x5b, 0x6b, 0x9f, 0x2b, 0xce, 0x08, 0x78, 0x4b, 0x2f, + 0x80, 0xe8, 0x7c, 0xfa, 0xf0, 0xd0, 0x50, 0x4c, 0x02, 0xa8, 0x40, 0x29, + 0xb0, 0x22, 0xc4, 0xfe, 0xec, 0xe1, 0xa1, 0xfa, 0xe5, 0x63, 0x08, 0x70, + 0xd8, 0xef, 0x51, 0x26, 0x21, 0xe4, 0xb2, 0x5a, 0x71, 0xcb, 0x3a, 0xca, + 0xe5, 0x7c, 0x1f, 0xa7, 0x65, 0x4b, 0x7e, 0x9c, 0x4a, 0x1c, 0xae, 0x14, + 0x80, 0xc5, 0x32, 0x73, 0x76, 0xd1, 0x0d, 0xb1, 0x02, 0x41, 0x7c, 0x93, + 0x05, 0xb2, 0x06, 0xad, 0x2e, 0x43, 0xcb, 0x3a, 0x71, 0x2f, 0xb2, 0xec, + 0x29, 0xa0, 0xd5, 0xca, 0x74, 0xca, 0xaf, 0x01, 0x68, 0x8c, 0x5a, 0xd8, + 0xa5, 0xe5, 0x4f, 0xe7, 0xcb, 0x32, 0x29, 0xda, 0x4a, 0xea, 0xb4, 0x2d, + 0xfb, 0x14, 0xa0, 0x08, 0x12, 0x0e, 0x52, 0x2f, 0x5a, 0xa2, 0xe3, 0x92, + 0xb4, 0x52, 0xf5, 0x18, 0x19, 0xc9, 0xf6, 0xf1, 0x6a, 0x4b, 0xc4, 0x74, + 0xe4, 0x62, 0xa5, 0xf5, 0x68, 0x26, 0x0f, 0xb4, 0xda, 0x02, 0x53, 0x18, + 0xc1, 0xc3, 0x4b, 0xd2, 0x05, 0xdf, 0x36, 0xd7, 0x59, 0x4e, 0x9b, 0x3a, + 0x53, 0x39, 0x18, 0xd7, 0x4f, 0x5d, 0x1a, 0xd3, 0xae, 0x1c, 0xa0, 0x11, + 0xa3, 0xa5, 0x3b, 0x20, 0xc0, 0x32, 0x2b, 0x95, 0x31, 0x2a, 0xe6, 0x08, + 0xc2, 0xe1, 0x33, 0x31, 0xda, 0x62, 0xdc, 0x8f, 0x85, 0x1e, 0xee, 0x0d, + 0x9e, 0x6c, 0x7d, 0x10, 0x5f, 0x3b, 0x10, 0xf6, 0x3d, 0x3e, 0xfb, 0xfa, + 0x02, 0x71, 0x8d, 0xc5, 0x1d, 0xa7, 0x5a, 0x1e, 0xd8, 0x4a, 0xc4, 0xd5, + 0xce, 0xbd, 0x2c, 0xe2, 0x23, 0x38, 0x4d, 0x56, 0x75, 0xa5, 0x98, 0x26, + 0xc9, 0x42, 0xc6, 0xa6, 0xf8, 0x87, 0x7a, 0x54, 0xdd, 0x49, 0x45, 0x28, + 0xbb, 0x12, 0xa9, 0xde, 0xb7, 0xeb, 0x38, 0x80, 0x46, 0xa1, 0xb3, 0x49, + 0xdb, 0xca, 0xf7, 0xb4, 0x73, 0x9a, 0x4d, 0x11, 0x57, 0x2c, 0x2c, 0x7f, + 0x4d, 0x3d, 0x0f, 0xdb, 0x52, 0x29, 0x89, 0x68, 0xdb, 0xea, 0x88, 0x4a, + 0x37, 0xa3, 0x56, 0xdf, 0xaf, 0x89, 0x8d, 0x8d, 0x7b, 0x5a, 0xae, 0xa6, + 0x44, 0xa0, 0x81, 0x51, 0xe6, 0x4f, 0x66, 0x04, 0x9f, 0xad, 0xc2, 0x76, + 0x0c, 0x1c, 0xef, 0x11, 0xd0, 0x77, 0x2c, 0x61, 0x03, 0x85, 0xe6, 0xe7, + 0x24, 0xcf, 0x02, 0x54, 0x50, 0xac, 0xa2, 0x49, 0x8f, 0x2e, 0x82, 0xc8, + 0x51, 0x23, 0x8f, 0x7d, 0xe0, 0x49, 0xa4, 0x09, 0x24, 0xfd, 0xef, 0xa2, + 0x18, 0x2d, 0xf3, 0x50, 0x3c, 0x4a, 0x35, 0x1f, 0x04, 0xf8, 0xba, 0xd4, + 0xc3, 0x2b, 0xd9, 0x1b, 0x7a, 0x65, 0xb0, 0x44, 0x1f, 0x3a, 0x65, 0x22, + 0xab, 0x67, 0xe2, 0xe9, 0x42, 0x6f, 0xcc, 0x86, 0x02, 0xa7, 0xfc, 0xc9, + 0xf8, 0x08, 0x92, 0x72, 0x62, 0x96, 0x50, 0xb8, 0xda, 0xd6, 0x26, 0x67, + 0xd9, 0xe9, 0xd0, 0xb6, 0xf8, 0x63, 0xa0, 0xaa, 0xc4, 0xbe, 0x4e, 0x66, + 0xde, 0xc8, 0x11, 0x01, 0x8e, 0x92, 0xf0, 0xac, 0x49, 0x88, 0x84, 0xa6, + 0x40, 0x68, 0x6f, 0x33, 0x8e, 0x1c, 0xd1, 0x2b, 0xf7, 0xca, 0xb7, 0xa3, + 0x6f, 0x36, 0xc1, 0x92, 0xd0, 0x8e, 0x66, 0x2e, 0x71, 0x13, 0xbd, 0x0a, + 0x4a, 0xa7, 0x0d, 0x1b, 0x31, 0x4f, 0xf0, 0x2b, 0x49, 0x9c, 0x88, 0x5c, + 0x94, 0x2d, 0x5e, 0x00, 0xb0, 0x76, 0xf6, 0x1e, 0xc1, 0xf9, 0xc6, 0xd3, + 0x69, 0x41, 0x6d, 0xc3, 0x06, 0x50, 0x1b, 0x29, 0xe3, 0xc1, 0x5c, 0x1a, + 0x63, 0x6a, 0x46, 0x63, 0x8b, 0x43, 0xd9, 0x06, 0xd3, 0x05, 0x90, 0x64, + 0x00, 0xbf, 0xd6, 0x53, 0xc9, 0xb1, 0x82, 0xdc, 0x36, 0x10, 0x40, 0xe4, + 0xf5, 0xf5, 0x8a, 0x89, 0x11, 0x82, 0xc0, 0x4b, 0x91, 0xc4, 0x0d, 0xd0, + 0xcc, 0x31, 0xec, 0x8f, 0x61, 0x75, 0x35, 0x71, 0x73, 0x1d, 0xd5, 0xea, + 0xb2, 0xc6, 0x48, 0x12, 0xff, 0x67, 0x09, 0xb7, 0x60, 0x80, 0x74, 0xae, + 0x32, 0x55, 0xdf, 0xbc, 0x21, 0x3e, 0x14, 0x2b, 0xc2, 0xdf, 0x96, 0x29, + 0x93, 0xa8, 0x44, 0x14, 0x1d, 0x01, 0x6b, 0x96, 0xa1, 0x72, 0xa5, 0xc8, + 0x02, 0x87, 0x6f, 0xa8, 0xbf, 0x3b, 0x77, 0x92, 0x41, 0x03, 0x73, 0x0f, + 0x70, 0x11, 0x03, 0x83, 0x46, 0x03, 0xae, 0xd7, 0x6c, 0x19, 0x02, 0xc4, + 0xf4, 0x87, 0x3c, 0x12, 0x6a, 0xb5, 0x8f, 0x36, 0xda, 0x71, 0x63, 0x0c, + 0x99, 0xac, 0x2f, 0x58, 0xfa, 0x01, 0xcc, 0x1a, 0x0f, 0x07, 0x72, 0x87, + 0x8c, 0xc0, 0x10, 0x2a, 0x38, 0xe2, 0xa0, 0x05, 0x2f, 0x97, 0x39, 0x6c, + 0x25, 0x92, 0x99, 0x8b, 0xa5, 0x16, 0x4f, 0xa3, 0x97, 0x1f, 0x88, 0x19, + 0x55, 0xec, 0x76, 0x35, 0x93, 0x0c, 0xcf, 0x0e, 0xbf, 0x19, 0x3e, 0xfd, + 0x60, 0xb0, 0xe8, 0xfa, 0x12, 0x76, 0x8f, 0x86, 0x8b, 0x3e, 0x82, 0x19, + 0xdd, 0x92, 0xa4, 0xc5, 0xe8, 0xf9, 0x79, 0x3a, 0x49, 0x04, 0x32, 0x96, + 0xe1, 0xfd, 0xd2, 0x6c, 0xe9, 0x50, 0x29, 0x22, 0x1f, 0x35, 0xd9, 0x13, + 0xd7, 0x24, 0x43, 0x89, 0xd7, 0x83, 0xa2, 0x89, 0xfd, 0xd0, 0x9e, 0x08, + 0x48, 0x4d, 0xf2, 0x30, 0x9e, 0x2e, 0x8b, 0xf4, 0xee, 0x37, 0xad, 0x56, + 0x2a, 0xab, 0x1e, 0xff, 0x53, 0xcb, 0x1e, 0x7f, 0xdc, 0xba, 0x37, 0x98, + 0xc8, 0x2f, 0x5c, 0xf7, 0xb6, 0x4a, 0xb5, 0xff, 0x77, 0xac, 0xfb, 0xb3, + 0xbe, 0x43, 0x48, 0x78, 0xf9, 0x4b, 0x43, 0xa5, 0xb1, 0x05, 0xcf, 0x34, + 0xb4, 0x74, 0x13, 0xd6, 0xaf, 0x24, 0x8c, 0x36, 0x65, 0x3c, 0xf6, 0xe9, + 0x5d, 0xb2, 0x06, 0xa8, 0x01, 0x26, 0xe0, 0xad, 0x0f, 0x9e, 0x18, 0xb7, + 0x53, 0xe2, 0x97, 0x96, 0xbd, 0xaa, 0xaf, 0xdd, 0x3f, 0xb1, 0x73, 0x4e, + 0x22, 0xf0, 0x7b, 0xd7, 0xba, 0x79, 0xe1, 0xde, 0xc9, 0xa5, 0xf9, 0xbf, + 0x6b, 0xe7, 0x6a, 0xd2, 0x72, 0x75, 0x16, 0x8c, 0xe8, 0xe0, 0xc6, 0x0e, + 0xfc, 0xa2, 0x9c, 0xee, 0x45, 0xfe, 0xa5, 0x82, 0x46, 0xa0, 0x01, 0x44, + 0x4d, 0x68, 0x1e, 0x25, 0x87, 0x4a, 0x19, 0x3a, 0xab, 0x6e, 0x62, 0x55, + 0x51, 0xb6, 0x1a, 0xc4, 0xf3, 0xcf, 0x9c, 0x59, 0x23, 0x18, 0x8e, 0x0c, + 0x04, 0x54, 0x86, 0x91, 0x89, 0xd5, 0x44, 0xe3, 0x9b, 0xac, 0xc5, 0x8d, + 0x07, 0xbd, 0x1d, 0xb9, 0xcc, 0x27, 0x57, 0xd1, 0xc7, 0x91, 0x4c, 0xe5, + 0x70, 0xb7, 0xe0, 0x94, 0xad, 0x8b, 0xc8, 0xff, 0x3f, 0xf2, 0x60, 0xb7, + 0x91, 0x87, 0x05, 0xc5, 0x7f, 0x34, 0x71, 0xb8, 0x50, 0xb6, 0x7f, 0x89, + 0x3c, 0xda, 0xce, 0xd9, 0xa6, 0xc6, 0xe7, 0xf1, 0x32, 0x19, 0xcf, 0xdf, + 0xf2, 0x25, 0xa1, 0x00, 0x1d, 0x86, 0x5b, 0xfd, 0xe4, 0xfc, 0xdb, 0xe7, + 0x70, 0x66, 0x0c, 0x9b, 0x99, 0xff, 0xa7, 0x47, 0x07, 0xe7, 0x2d, 0x2c, + 0xec, 0x9a, 0x6e, 0xf9, 0x45, 0xda, 0x67, 0xfb, 0x27, 0x0b, 0xa6, 0x2f, + 0xf5, 0x17, 0x26, 0xa2, 0x36, 0xd1, 0xdb, 0xf4, 0x0b, 0x7b, 0x1e, 0xdc, + 0x4f, 0x93, 0x86, 0x31, 0x4b, 0x35, 0x5f, 0xb3, 0x58, 0x3e, 0x9e, 0x4d, + 0xb6, 0xe5, 0xcf, 0xfe, 0xd5, 0xdf, 0x26, 0xf3, 0xc1, 0x23, 0xb4, 0x12, + 0x57, 0x82, 0xd7, 0x15, 0x26, 0xbf, 0xa5, 0xc6, 0xb0, 0x2b, 0xde, 0x53, + 0x37, 0xcd, 0xbb, 0x53, 0x15, 0x69, 0x2a, 0x0e, 0x80, 0x89, 0xd6, 0xcd, + 0x92, 0x3f, 0x9d, 0x20, 0xfa, 0x91, 0xcd, 0xc3, 0xcd, 0x84, 0x07, 0x7c, + 0xbf, 0xed, 0x5b, 0xfa, 0xd7, 0x7a, 0xb3, 0xf6, 0x38, 0xec, 0xb4, 0xad, + 0x39, 0x19, 0x85, 0xc8, 0xca, 0xb5, 0x27, 0x45, 0xeb, 0x97, 0xda, 0x5c, + 0x28, 0xe1, 0xe6, 0xaf, 0x08, 0xf9, 0xbe, 0x25, 0xe7, 0x52, 0x70, 0x35, + 0xcb, 0xb1, 0x65, 0xa6, 0xa4, 0xf3, 0xf1, 0x82, 0x4e, 0x41, 0x5b, 0xa2, + 0xf5, 0xe3, 0x20, 0x3a, 0xd5, 0xd9, 0xcc, 0x93, 0x7a, 0xbc, 0xe5, 0x41, + 0x51, 0x41, 0x0b, 0x90, 0xe7, 0x22, 0xcb, 0xb8, 0xc2, 0xb6, 0x22, 0x04, + 0x4a, 0xeb, 0x7b, 0x20, 0x52, 0x05, 0x37, 0x91, 0x3c, 0xd2, 0x48, 0x22, + 0x2f, 0x1d, 0xcc, 0x52, 0x94, 0x5f, 0x8d, 0x77, 0x5f, 0x3c, 0xdf, 0x65, + 0xa9, 0x77, 0x55, 0x38, 0x18, 0x67, 0x34, 0xf3, 0x74, 0xf0, 0x64, 0xfb, + 0xe9, 0xe0, 0x69, 0xe4, 0xf1, 0x67, 0x47, 0x49, 0x5b, 0x6d, 0x75, 0xee, + 0x96, 0x79, 0xd9, 0x48, 0x8f, 0xdc, 0xdb, 0xe3, 0x43, 0x2b, 0x8d, 0xc7, + 0x79, 0x42, 0x35, 0xec, 0x2d, 0x2d, 0xdd, 0xc6, 0x8b, 0x37, 0x10, 0x52, + 0x5f, 0x03, 0x94, 0xd8, 0xb2, 0x2c, 0x91, 0x91, 0xaf, 0x84, 0xad, 0xcc, + 0x75, 0xce, 0xb4, 0xae, 0xc4, 0xb2, 0x6e, 0xb4, 0xc6, 0x4b, 0x4b, 0x24, + 0x5e, 0x7d, 0x6d, 0x82, 0x95, 0x1b, 0x7c, 0x60, 0x67, 0xca, 0x09, 0xf1, + 0xd6, 0x76, 0xa7, 0xf1, 0x85, 0xab, 0xe8, 0x40, 0x0c, 0x03, 0x35, 0x76, + 0x0b, 0x45, 0x99, 0xe0, 0x57, 0x2c, 0x5e, 0xac, 0x12, 0x49, 0x64, 0xb6, + 0xee, 0xc7, 0x81, 0xd1, 0xe5, 0xac, 0x0b, 0x64, 0x11, 0x40, 0x84, 0xbb, + 0xfd, 0xae, 0x5d, 0x15, 0x66, 0x2c, 0x0f, 0x2a, 0xe5, 0x19, 0xac, 0xc5, + 0xfa, 0x43, 0xaf, 0xc8, 0xe3, 0x88, 0x6a, 0x11, 0xbb, 0x0e, 0x3b, 0x49, + 0x1c, 0xd6, 0x0b, 0x71, 0x94, 0x1b, 0x66, 0x7a, 0x6a, 0xc5, 0x99, 0x24, + 0xe3, 0xa6, 0x8e, 0xe5, 0xb2, 0x99, 0xe9, 0xf9, 0x71, 0xbc, 0x88, 0x47, + 0xe9, 0x34, 0x2d, 0xd3, 0x96, 0xf0, 0xbc, 0x5f, 0x51, 0xf6, 0x2b, 0xc7, + 0x8b, 0xfe, 0x3c, 0x6b, 0xb3, 0x11, 0x5e, 0x32, 0xb6, 0x7b, 0x80, 0xe8, + 0xf7, 0xfe, 0xed, 0xd9, 0xd1, 0xf1, 0xe9, 0xc1, 0x0f, 0xe6, 0xf5, 0x76, + 0xa1, 0xc7, 0x28, 0x90, 0x97, 0xc4, 0xc5, 0xea, 0x7d, 0x91, 0x94, 0xf4, + 0xe5, 0xe6, 0x93, 0x2d, 0xf6, 0x47, 0xd5, 0xaf, 0x59, 0x56, 0xbf, 0x42, + 0xb8, 0x67, 0x35, 0xd8, 0xfa, 0x79, 0xd4, 0xc8, 0x64, 0xb7, 0xe2, 0x68, + 0x28, 0xe9, 0x7e, 0x2d, 0x93, 0xe9, 0x3c, 0x29, 0x15, 0xdd, 0x37, 0x7a, + 0x79, 0x76, 0x7e, 0xf9, 0xea, 0x2e, 0x9e, 0xd6, 0x49, 0x86, 0xd1, 0x12, + 0xb4, 0x45, 0xab, 0xb6, 0x12, 0xc9, 0x9b, 0x41, 0x08, 0xe3, 0xd0, 0xc5, + 0x0a, 0xda, 0x93, 0x74, 0x3b, 0x37, 0x62, 0x04, 0x2f, 0x2f, 0x7f, 0x38, + 0x3f, 0x7e, 0xf5, 0x92, 0x55, 0xe6, 0xcf, 0x59, 0xd1, 0x57, 0x53, 0x09, + 0x34, 0x68, 0x5e, 0xe7, 0xd5, 0xa2, 0x79, 0x7d, 0x7f, 0x7f, 0x74, 0x32, + 0x3c, 0x3f, 0x3d, 0x3b, 0x7c, 0xf5, 0xf2, 0x7b, 0x36, 0xb0, 0x32, 0x6a, + 0x78, 0xf0, 0xae, 0xfb, 0xcc, 0xc5, 0x41, 0x35, 0xe1, 0x0e, 0x8f, 0xbf, + 0x7b, 0x7f, 0xfc, 0xf6, 0xdb, 0x57, 0x2f, 0xef, 0xe2, 0xbc, 0xc7, 0xf3, + 0x93, 0xb7, 0x39, 0xa1, 0xb9, 0x05, 0x5e, 0xba, 0xb2, 0x97, 0x9c, 0x7b, + 0x30, 0x9a, 0xde, 0x4a, 0xa1, 0x01, 0x80, 0xfb, 0x37, 0x02, 0x10, 0x2e, + 0x11, 0xa7, 0xcd, 0x46, 0x0b, 0xfe, 0x2d, 0xfa, 0xf2, 0xf4, 0x1b, 0x76, + 0x6f, 0xb9, 0xbb, 0xd9, 0xca, 0xac, 0x7f, 0xfe, 0x6c, 0x77, 0x6f, 0x2b, + 0xc0, 0x0d, 0x67, 0x27, 0x39, 0x8d, 0xf8, 0xb6, 0x61, 0x34, 0xf9, 0xd9, + 0x0a, 0x35, 0x79, 0x5c, 0x70, 0x2d, 0x97, 0xca, 0x37, 0x00, 0xce, 0x01, + 0x9b, 0xad, 0xb8, 0x5a, 0x14, 0x42, 0x94, 0x38, 0x32, 0x83, 0xbe, 0x64, + 0x04, 0xf0, 0xbc, 0x11, 0x84, 0x11, 0xcb, 0xa0, 0x2c, 0xfe, 0xd3, 0x63, + 0x24, 0x46, 0x34, 0x1c, 0xf5, 0x7b, 0xb7, 0x13, 0xf2, 0xaf, 0x7d, 0x30, + 0x5a, 0x6e, 0x94, 0x5a, 0x59, 0x87, 0x4b, 0x86, 0xa0, 0x5d, 0xb0, 0xeb, + 0xf2, 0x91, 0x98, 0x17, 0xac, 0x9f, 0x47, 0x73, 0xac, 0x32, 0xab, 0xc0, + 0xff, 0xa4, 0x64, 0x6a, 0x0e, 0x2d, 0x46, 0x2a, 0x59, 0xc3, 0xbe, 0x5c, + 0xd9, 0x5c, 0x8f, 0x6f, 0x63, 0x25, 0x70, 0x5d, 0xc3, 0x00, 0x93, 0xf1, + 0x58, 0xe9, 0x9a, 0xe6, 0xf1, 0xa8, 0x03, 0x4c, 0xb2, 0xee, 0xe0, 0xcc, + 0x77, 0x95, 0x05, 0x1c, 0xd6, 0x09, 0x7c, 0x29, 0x52, 0xf8, 0x78, 0xdb, + 0x18, 0x02, 0xaf, 0xdf, 0xc6, 0x9a, 0x40, 0xb8, 0x48, 0xdc, 0x30, 0x90, + 0x73, 0x39, 0x04, 0x09, 0xf3, 0xc3, 0x78, 0x2c, 0x0b, 0xb1, 0x3a, 0x0b, + 0x09, 0x75, 0xab, 0xdb, 0x78, 0x02, 0x82, 0xba, 0xe1, 0xf8, 0xa4, 0xd2, + 0x95, 0x1d, 0xc5, 0xde, 0x55, 0x23, 0xd0, 0x8c, 0x48, 0x03, 0x8f, 0x60, + 0x5d, 0x90, 0xf0, 0x30, 0x3d, 0x9a, 0x94, 0x22, 0x46, 0x67, 0xd6, 0x32, + 0x38, 0x9c, 0x79, 0xba, 0x0a, 0xc2, 0x16, 0x64, 0x63, 0x1f, 0xab, 0xa5, + 0xc0, 0x26, 0xa3, 0x81, 0xa3, 0x37, 0x23, 0x34, 0x48, 0x09, 0xec, 0xbf, + 0xda, 0x1c, 0x6e, 0x29, 0x19, 0x0b, 0xb9, 0x9d, 0xbf, 0xf3, 0x49, 0x3e, + 0x6d, 0x25, 0x36, 0xd6, 0x11, 0xa0, 0x53, 0xb7, 0xfd, 0x42, 0x75, 0xfa, + 0x9d, 0x3a, 0x4e, 0x93, 0x1d, 0x37, 0x94, 0x74, 0x0f, 0x93, 0x88, 0xe2, + 0x56, 0xb0, 0x21, 0x89, 0xb7, 0x8d, 0x0e, 0xa6, 0xf0, 0x2e, 0x13, 0x6f, + 0x5c, 0xf5, 0xea, 0x7d, 0x0c, 0x3a, 0x11, 0x77, 0xe2, 0xac, 0xa2, 0x62, + 0x3f, 0xdd, 0x6a, 0x00, 0xa7, 0xad, 0xb4, 0xbc, 0x9d, 0xb7, 0x05, 0x84, + 0xf9, 0xb0, 0x3c, 0xd4, 0xda, 0xd0, 0x10, 0x60, 0x01, 0x56, 0xd2, 0xcc, + 0x07, 0x87, 0xdc, 0x80, 0x54, 0x5c, 0x20, 0xd3, 0x23, 0xd5, 0x05, 0xae, + 0x2c, 0x17, 0xc2, 0x24, 0x38, 0x51, 0x86, 0x78, 0x2a, 0x6d, 0x42, 0x08, + 0x03, 0xe8, 0x58, 0x1d, 0xab, 0x00, 0x9b, 0xd8, 0xb2, 0xa8, 0x56, 0xab, + 0xca, 0x72, 0x0e, 0x98, 0x0d, 0xf4, 0x2f, 0x3d, 0xd0, 0x90, 0x56, 0x96, + 0xaf, 0x27, 0xeb, 0x28, 0x7a, 0x65, 0xff, 0xb2, 0x51, 0xac, 0x88, 0x5f, + 0x58, 0xc4, 0x69, 0x1e, 0x84, 0xd2, 0x20, 0x7c, 0x8d, 0xe7, 0x2e, 0x94, + 0xa4, 0x81, 0x8f, 0x90, 0x7a, 0x07, 0x42, 0xda, 0xf0, 0x93, 0xac, 0xc5, + 0xcd, 0xee, 0x5c, 0x4f, 0xb3, 0xd1, 0x88, 0x26, 0xd5, 0x31, 0x89, 0x94, + 0x46, 0x18, 0xe7, 0xd7, 0x50, 0xd2, 0x7a, 0x06, 0xea, 0xe1, 0x0f, 0x2b, + 0x00, 0xe1, 0xd0, 0xd7, 0xba, 0x48, 0x7f, 0x2d, 0x96, 0x92, 0x79, 0x94, + 0x4f, 0xa0, 0xb5, 0x85, 0x85, 0xb7, 0xc4, 0xfd, 0x8d, 0xcf, 0x23, 0xeb, + 0xbf, 0xce, 0xf1, 0xcb, 0x15, 0xc7, 0x4a, 0xba, 0xeb, 0x53, 0x99, 0x0f, + 0x58, 0x8e, 0x22, 0x75, 0xa5, 0x2d, 0xc1, 0xf6, 0x3c, 0x61, 0x9a, 0x40, + 0xe7, 0xef, 0x3c, 0x8a, 0xdd, 0x1e, 0xff, 0xbb, 0xf7, 0x8f, 0x8e, 0xc1, + 0xb1, 0x31, 0x20, 0xa6, 0x0c, 0xbe, 0x64, 0x08, 0xac, 0xc2, 0x30, 0xe0, + 0x5a, 0x20, 0xdf, 0xb8, 0x4e, 0xc9, 0xda, 0xd6, 0xd3, 0xd9, 0xf5, 0x8f, + 0xbb, 0xfd, 0xdd, 0x9d, 0x9d, 0x9d, 0x9f, 0x06, 0x0b, 0x5e, 0xba, 0x2b, + 0x34, 0x4f, 0xff, 0x0e, 0x16, 0xe9, 0x98, 0x43, 0x5e, 0x68, 0x33, 0xd3, + 0x18, 0x45, 0xa3, 0xa5, 0xbf, 0xed, 0xf0, 0xfa, 0xcc, 0x39, 0x79, 0xa7, + 0x95, 0x8f, 0x3b, 0xd0, 0x4d, 0x86, 0x20, 0x5f, 0xb2, 0x18, 0x27, 0x0f, + 0x47, 0x93, 0xa5, 0x44, 0x23, 0x48, 0xb4, 0x86, 0xba, 0x89, 0x79, 0xb3, + 0x89, 0x54, 0xb5, 0xde, 0x09, 0xdd, 0x78, 0xbd, 0xd6, 0xf2, 0x8c, 0xf8, + 0x36, 0x29, 0xb8, 0x84, 0x28, 0x52, 0x74, 0x03, 0x88, 0xfa, 0x9e, 0x4b, + 0x0c, 0xc0, 0x81, 0x55, 0xba, 0x97, 0x73, 0xdb, 0x44, 0x53, 0xe4, 0x63, + 0x46, 0xd2, 0x27, 0x7f, 0x6d, 0x5c, 0xce, 0x81, 0x62, 0x1b, 0x86, 0xb6, + 0x14, 0x6c, 0x6a, 0xc0, 0xb3, 0xb5, 0x29, 0xe8, 0xde, 0xd4, 0x11, 0x9a, + 0x39, 0x10, 0xcc, 0xdf, 0xbf, 0x13, 0xdc, 0xc6, 0x11, 0x17, 0x59, 0x06, + 0xf6, 0x15, 0xd6, 0xa1, 0xa1, 0xfc, 0x14, 0xe3, 0x34, 0xfd, 0x4d, 0xa5, + 0x56, 0xf4, 0x8a, 0x6e, 0x1e, 0xdf, 0xb0, 0x58, 0xb6, 0x4b, 0x76, 0x2b, + 0xdc, 0x2c, 0xbf, 0x5b, 0x62, 0xee, 0x70, 0xfb, 0xf5, 0x7f, 0xd0, 0x86, + 0x71, 0x05, 0xa7, 0x04, 0xf5, 0x4e, 0x83, 0x8a, 0x16, 0x98, 0xaa, 0x28, + 0x8a, 0xd3, 0x24, 0xe6, 0xa0, 0x62, 0x33, 0xd3, 0xdc, 0x24, 0x0f, 0x22, + 0x30, 0x34, 0x61, 0x02, 0xc4, 0xa7, 0xcb, 0x5e, 0x13, 0xd5, 0xfb, 0x0e, + 0x86, 0x87, 0x27, 0x27, 0x15, 0x85, 0x98, 0x17, 0x4f, 0x8a, 0xfd, 0xc2, + 0xcd, 0x52, 0xcc, 0x68, 0x15, 0xd9, 0xc9, 0x83, 0xe1, 0x36, 0xe4, 0x14, + 0x0e, 0x49, 0x43, 0xfa, 0x28, 0x83, 0xac, 0xc6, 0x45, 0x6a, 0x31, 0x80, + 0xb1, 0xe4, 0x7e, 0x2d, 0xe7, 0x2c, 0x51, 0x70, 0x60, 0xcc, 0xcd, 0x92, + 0x8e, 0x64, 0xf1, 0x91, 0xa6, 0xb7, 0x8f, 0xa5, 0xc7, 0xdf, 0x9e, 0xf4, + 0x5a, 0x82, 0x9d, 0xce, 0x73, 0x8d, 0x29, 0x93, 0xd0, 0x97, 0x48, 0x22, + 0x95, 0x18, 0x9a, 0x95, 0x6f, 0x0d, 0xa1, 0xc0, 0x0c, 0x15, 0x13, 0x30, + 0x5a, 0x5c, 0x29, 0x56, 0xe4, 0xb4, 0x05, 0x69, 0x47, 0xf5, 0x84, 0xa2, + 0x0e, 0x0e, 0xfc, 0xb4, 0x22, 0x85, 0x5a, 0x21, 0x84, 0xe8, 0x25, 0xff, + 0xbb, 0x6f, 0x85, 0x08, 0x1e, 0xab, 0x2f, 0x86, 0xc7, 0x1b, 0x35, 0x82, + 0x2a, 0x08, 0x86, 0x72, 0xdd, 0x3e, 0x8e, 0x58, 0x3b, 0x88, 0xce, 0xdc, + 0xbe, 0xf8, 0xca, 0x47, 0x68, 0xb3, 0x5e, 0x86, 0xa5, 0x6d, 0x3b, 0xf8, + 0xce, 0x42, 0xfa, 0xe1, 0x75, 0xaa, 0x84, 0xef, 0xc7, 0xb5, 0x69, 0xc6, + 0x45, 0xb6, 0x47, 0xe6, 0xa2, 0x3d, 0xd3, 0x4d, 0x3c, 0xcd, 0xe6, 0x5b, + 0xad, 0x4b, 0x85, 0xad, 0x22, 0x41, 0x93, 0x63, 0xc8, 0xc4, 0x7a, 0xe7, + 0x2a, 0x1f, 0xad, 0xc5, 0xcd, 0x85, 0x5c, 0xcb, 0xb8, 0xe5, 0xe7, 0x27, + 0x7d, 0x0d, 0x83, 0x54, 0x78, 0x61, 0xc9, 0x76, 0xe3, 0x79, 0x4c, 0xb2, + 0x3a, 0xae, 0x4d, 0xdb, 0x42, 0xf8, 0x7c, 0x6a, 0x81, 0xc6, 0xac, 0x40, + 0x5f, 0x2d, 0x17, 0xb5, 0xb9, 0x55, 0x0b, 0x46, 0xd4, 0x85, 0x4a, 0x24, + 0x3e, 0x0b, 0xc6, 0x45, 0xa8, 0xec, 0x8d, 0x56, 0x12, 0x0c, 0xe9, 0xd2, + 0x24, 0xd5, 0xa2, 0x20, 0xd7, 0x38, 0x56, 0xa6, 0x0d, 0xd6, 0x28, 0x20, + 0xf9, 0x7d, 0xe2, 0x39, 0xcb, 0x68, 0xbf, 0xf3, 0x1b, 0x9e, 0x8c, 0x77, + 0x66, 0x01, 0xff, 0xf5, 0x09, 0x52, 0xfd, 0x04, 0x1f, 0x20, 0xc8, 0xff, + 0xb7, 0xd7, 0x7e, 0xaf, 0xdf, 0xfd, 0xb6, 0x7b, 0xdd, 0xe7, 0x79, 0xbf, + 0x24, 0xa1, 0x6f, 0xdd, 0xbe, 0xc6, 0x10, 0x22, 0x39, 0xa0, 0x93, 0x71, + 0x80, 0x1b, 0x98, 0x74, 0x50, 0xbb, 0xf8, 0xca, 0xb9, 0xa1, 0x25, 0x72, + 0x71, 0x50, 0x4d, 0x74, 0x0c, 0x83, 0xc5, 0x30, 0x49, 0x9d, 0x1a, 0xdd, + 0x2c, 0xb6, 0x24, 0x21, 0x21, 0x48, 0x5d, 0x7f, 0x5c, 0x9e, 0x71, 0x6a, + 0x8a, 0x38, 0xbc, 0x2a, 0x09, 0xc6, 0x92, 0xfe, 0xca, 0x61, 0x21, 0x06, + 0x20, 0x01, 0x11, 0xbd, 0x6d, 0x71, 0x79, 0x42, 0x1c, 0xe0, 0x2e, 0x46, + 0xc1, 0x9e, 0x2f, 0x2a, 0x1f, 0x20, 0x44, 0x2b, 0x18, 0xc5, 0x07, 0x40, + 0x6f, 0xd5, 0xe4, 0x14, 0xac, 0x67, 0x70, 0x8d, 0xb5, 0xd6, 0x8e, 0x53, + 0xc3, 0x25, 0xaf, 0x25, 0x64, 0x14, 0x94, 0x34, 0xb2, 0xab, 0x64, 0xbb, + 0x8c, 0xa7, 0xb7, 0x31, 0x4b, 0x24, 0x83, 0xe8, 0x8d, 0xac, 0xab, 0x2f, + 0xed, 0xd7, 0x88, 0xff, 0x18, 0x2d, 0xaf, 0xaf, 0x51, 0x82, 0xe2, 0x40, + 0x6e, 0xa0, 0xc2, 0x00, 0x22, 0x60, 0x98, 0xec, 0x7e, 0xde, 0xd5, 0x40, + 0xce, 0x8e, 0x94, 0x49, 0x86, 0x38, 0xd4, 0x11, 0x71, 0xa4, 0x99, 0xe5, + 0xc5, 0xf4, 0xdf, 0x8b, 0xba, 0x2f, 0xdb, 0x5f, 0x22, 0x05, 0x3d, 0x49, + 0xef, 0x14, 0xeb, 0xdd, 0xa9, 0xff, 0xb4, 0x86, 0x37, 0x29, 0x5d, 0x68, + 0xf3, 0x66, 0xf0, 0x96, 0x56, 0x8f, 0x81, 0x87, 0xa0, 0xa7, 0x05, 0xa5, + 0xdb, 0x06, 0xf9, 0x47, 0xeb, 0x2f, 0x9e, 0x4c, 0x52, 0x2d, 0xc2, 0xc5, + 0xc2, 0x58, 0x23, 0xb9, 0x5e, 0xd3, 0x9f, 0xb4, 0xff, 0xf6, 0xca, 0x22, + 0x7a, 0x05, 0xa7, 0xc6, 0x2d, 0x44, 0x16, 0x02, 0xe5, 0x29, 0xde, 0x92, + 0x15, 0x8c, 0xb6, 0x7a, 0x7c, 0xa6, 0x88, 0xd6, 0xa5, 0xc4, 0x4a, 0x05, + 0x6a, 0x27, 0xfe, 0x40, 0xa8, 0x13, 0x4a, 0x54, 0x8b, 0x30, 0xd7, 0x40, + 0x53, 0xd4, 0xec, 0x75, 0x57, 0xa3, 0x99, 0x3c, 0xfc, 0xa9, 0x29, 0x4a, + 0x29, 0x42, 0x2c, 0xb5, 0xed, 0x70, 0x6b, 0xf2, 0x83, 0x5a, 0x99, 0xc8, + 0xac, 0xaa, 0xbd, 0x26, 0x8a, 0x04, 0x12, 0xa5, 0x1c, 0x8c, 0x88, 0x93, + 0x43, 0xaa, 0x42, 0xb4, 0xd9, 0xcc, 0xff, 0x59, 0x39, 0xac, 0xd2, 0xd8, + 0x23, 0x82, 0x18, 0xc0, 0xdd, 0x86, 0x2e, 0xc8, 0x48, 0x50, 0x33, 0x2d, + 0xec, 0x0f, 0x71, 0x45, 0xc1, 0xa9, 0x08, 0x40, 0xe2, 0x9b, 0xe5, 0x68, + 0x20, 0x1c, 0x55, 0xca, 0x7a, 0x89, 0x41, 0x59, 0x74, 0x6b, 0xad, 0xff, + 0x6c, 0x11, 0xe6, 0x86, 0xd8, 0x99, 0xc2, 0xa0, 0x55, 0x0c, 0x5a, 0x7c, + 0x81, 0x16, 0x64, 0x27, 0x62, 0x99, 0xee, 0xa2, 0x26, 0xf5, 0xb0, 0x0a, + 0x61, 0x4d, 0x70, 0xf0, 0x3d, 0xa8, 0xde, 0x45, 0xaf, 0x37, 0xa5, 0x69, + 0xa9, 0xd0, 0x9c, 0x4f, 0x20, 0x40, 0xaf, 0x14, 0x24, 0x3f, 0x05, 0x34, + 0xf9, 0xfc, 0xd6, 0x82, 0x96, 0x24, 0xdf, 0x20, 0x19, 0x2f, 0xcb, 0xaa, + 0x1d, 0x37, 0x18, 0x93, 0xc6, 0x24, 0x63, 0x48, 0x9b, 0x38, 0x03, 0x0a, + 0xbe, 0xd8, 0x39, 0x37, 0xec, 0xb2, 0xfd, 0xce, 0x96, 0xc9, 0xed, 0x50, + 0x6b, 0x1c, 0xa8, 0x59, 0x9b, 0x48, 0x6e, 0x43, 0x76, 0xd5, 0xe2, 0x33, + 0x87, 0xd2, 0xdf, 0xd6, 0x3d, 0x91, 0x5f, 0xde, 0xda, 0xfb, 0x6b, 0xc9, + 0x1f, 0x09, 0x3a, 0x77, 0x18, 0xcb, 0x9a, 0x5a, 0x52, 0xac, 0x01, 0xa6, + 0x08, 0x7a, 0xce, 0x18, 0xe5, 0x8e, 0xd8, 0x90, 0x8b, 0xd3, 0xb7, 0x57, + 0x6d, 0xf1, 0xf7, 0x9b, 0xe8, 0x47, 0x77, 0xcf, 0x03, 0xf3, 0x0d, 0x33, + 0x60, 0x7c, 0xa4, 0xcb, 0x99, 0x36, 0xd5, 0x88, 0xdb, 0x7c, 0xf4, 0x94, + 0x7e, 0x7c, 0xc3, 0x3f, 0xac, 0xb8, 0x25, 0x63, 0x65, 0x99, 0xf9, 0xa2, + 0x09, 0x7c, 0xc0, 0x95, 0x0b, 0xe4, 0xdc, 0x0f, 0x41, 0x45, 0xaf, 0xf1, + 0x4b, 0x9e, 0x3c, 0xf2, 0x0e, 0xcd, 0xed, 0x67, 0x76, 0x20, 0x2e, 0xcb, + 0x8c, 0x29, 0x71, 0x8c, 0x44, 0x8d, 0xd9, 0x22, 0x97, 0x1a, 0x30, 0x92, + 0xad, 0x21, 0x7f, 0xaa, 0x87, 0xaa, 0xc0, 0x51, 0x52, 0xe6, 0x92, 0xae, + 0x81, 0x72, 0x5a, 0xdf, 0x9f, 0x14, 0xfe, 0x68, 0x85, 0x5c, 0x7c, 0x74, + 0x6e, 0x8f, 0xd5, 0x08, 0x6c, 0x60, 0x46, 0xd6, 0x1a, 0xe6, 0xa5, 0xa0, + 0xc5, 0x7c, 0xf6, 0x71, 0xab, 0x78, 0xc4, 0xb7, 0x8c, 0x2b, 0x93, 0x6b, + 0x58, 0x64, 0x5a, 0x9b, 0x4e, 0x24, 0x2f, 0x5f, 0x9b, 0x0e, 0x0f, 0xab, + 0x84, 0xa0, 0x75, 0xa0, 0xda, 0x07, 0x87, 0x4b, 0x0f, 0xf1, 0x7c, 0x60, + 0x2e, 0xb7, 0x66, 0x6a, 0x99, 0xd1, 0x45, 0x9b, 0xaf, 0xfc, 0xd5, 0x16, + 0xd1, 0x35, 0x39, 0x88, 0x50, 0xdf, 0x05, 0x9d, 0xaf, 0x49, 0xe0, 0x9d, + 0x90, 0xd8, 0x33, 0x65, 0x0b, 0xaf, 0xa4, 0x1e, 0xfd, 0xae, 0x51, 0x6d, + 0xb3, 0x58, 0xcd, 0xc7, 0x37, 0x47, 0x6f, 0x87, 0xeb, 0x92, 0x78, 0xd3, + 0xc2, 0x45, 0x2b, 0x73, 0x78, 0x09, 0x3f, 0x4d, 0x42, 0x1c, 0xb3, 0x45, + 0x48, 0x7f, 0x1a, 0xcd, 0xd2, 0x02, 0xae, 0x71, 0xfe, 0xf6, 0xf8, 0xab, + 0x33, 0xfb, 0xb1, 0x76, 0xc9, 0x1f, 0x5d, 0xe1, 0x53, 0x4e, 0xd0, 0x7d, + 0x2c, 0xd7, 0xd9, 0x06, 0xe7, 0x0a, 0x69, 0x78, 0x2f, 0x04, 0x11, 0x24, + 0x0a, 0x1c, 0x0b, 0x2d, 0xf6, 0x94, 0x24, 0xa5, 0xe6, 0xf1, 0xba, 0x2c, + 0x6e, 0x3a, 0x6e, 0x7b, 0x5f, 0x7d, 0xd9, 0xbc, 0xad, 0x8e, 0xde, 0xae, + 0xe9, 0x8e, 0xbf, 0xe9, 0x5b, 0x02, 0x93, 0x5e, 0xd1, 0x5a, 0xc0, 0x07, + 0xd9, 0xe4, 0x2d, 0x27, 0x8f, 0x0b, 0x14, 0xca, 0x8f, 0xca, 0xd4, 0xed, + 0x4a, 0xe4, 0xe3, 0x2e, 0x34, 0x2f, 0xf8, 0x0c, 0x80, 0x26, 0x99, 0xc6, + 0x74, 0x4d, 0x46, 0x2d, 0xa5, 0x00, 0x03, 0xab, 0x7f, 0xb5, 0xda, 0x5c, + 0xb0, 0xca, 0x0a, 0xac, 0x68, 0x55, 0x47, 0x90, 0x4b, 0x0f, 0xe9, 0xbd, + 0xc9, 0xd2, 0x9d, 0x13, 0xb3, 0xae, 0x57, 0xf6, 0xef, 0xe9, 0x92, 0x82, + 0x63, 0x9a, 0x65, 0xc0, 0xe8, 0xa5, 0x5c, 0x47, 0x9f, 0x37, 0x0e, 0x84, + 0x20, 0xbe, 0x98, 0x55, 0xd8, 0x9c, 0x80, 0xb8, 0xd7, 0xd9, 0xc0, 0xe3, + 0x30, 0x83, 0x50, 0xd4, 0x36, 0x29, 0x13, 0x31, 0x19, 0x2b, 0x82, 0x50, + 0x23, 0x58, 0x94, 0x64, 0x3b, 0xef, 0x9c, 0xb0, 0x30, 0x03, 0xe9, 0x5a, + 0xeb, 0xf0, 0x68, 0x61, 0x0e, 0xab, 0xbb, 0x65, 0x99, 0xd5, 0xe2, 0xec, + 0x6e, 0x04, 0x17, 0x3c, 0xb0, 0xb9, 0xe6, 0xc1, 0x6e, 0xa6, 0xaa, 0x88, + 0xec, 0x0a, 0x6b, 0x48, 0x6e, 0xb5, 0x36, 0x1c, 0x24, 0x09, 0xb7, 0xc6, + 0x54, 0x22, 0x0a, 0xaa, 0x23, 0x0f, 0x77, 0x60, 0x1d, 0xe3, 0x1c, 0x2b, + 0x31, 0x00, 0x49, 0xbe, 0x32, 0x12, 0x9b, 0xc7, 0x4b, 0x36, 0x5c, 0xc1, + 0xf1, 0x80, 0x0a, 0x3c, 0xad, 0xcd, 0xad, 0xf8, 0xde, 0xee, 0x7c, 0x61, + 0xe6, 0xb2, 0x8e, 0x59, 0xd3, 0x3d, 0x00, 0x19, 0xbc, 0x06, 0x68, 0x5c, + 0x25, 0x65, 0x5d, 0x8a, 0x16, 0x1f, 0xa3, 0x38, 0x0d, 0x50, 0x32, 0x00, + 0xb5, 0x27, 0x3a, 0x5f, 0xf4, 0x3b, 0xad, 0xb7, 0x5f, 0x50, 0x51, 0x84, + 0x05, 0x1e, 0x48, 0xc0, 0x6a, 0xed, 0x36, 0xf3, 0x9e, 0xf4, 0x62, 0x3a, + 0x52, 0xb1, 0x1c, 0x91, 0x90, 0x56, 0x2e, 0xcb, 0x46, 0x58, 0xa2, 0x66, + 0xe8, 0xc3, 0x23, 0x0b, 0x1d, 0x81, 0x17, 0xdc, 0x7b, 0x4d, 0x21, 0xec, + 0xb1, 0x39, 0xb0, 0x44, 0x64, 0xa1, 0xda, 0x18, 0x47, 0x40, 0x43, 0x60, + 0x98, 0x9f, 0xba, 0xb8, 0x72, 0xc0, 0x17, 0xbd, 0x1f, 0x1d, 0x6e, 0x27, + 0x8f, 0xb6, 0x58, 0x44, 0xbf, 0xff, 0xbb, 0x7d, 0x09, 0x48, 0x8a, 0x7f, + 0xd8, 0x7a, 0x59, 0xad, 0x8f, 0x76, 0xa9, 0xfb, 0xf7, 0xde, 0x26, 0x23, + 0x2b, 0x83, 0x2c, 0x41, 0x6e, 0xee, 0xf7, 0x03, 0x77, 0xe7, 0x5a, 0x13, + 0xd1, 0x3c, 0xb9, 0x17, 0x49, 0xa9, 0xa1, 0x13, 0x88, 0xa4, 0xf9, 0x17, + 0x2e, 0xfb, 0x47, 0xaf, 0x90, 0xc4, 0xc8, 0x8e, 0xff, 0xb0, 0x54, 0xfc, + 0x5f, 0x72, 0x15, 0xed, 0x49, 0xf0, 0xa1, 0x81, 0xb3, 0x3c, 0x2a, 0x9f, + 0x97, 0x8f, 0x14, 0x8e, 0xff, 0x7d, 0x5f, 0xe0, 0x46, 0x94, 0xba, 0x79, + 0xba, 0x34, 0x66, 0xfb, 0xcc, 0x2a, 0xcd, 0xcd, 0x9f, 0xec, 0xf5, 0x03, + 0x65, 0xba, 0xd7, 0x28, 0xdc, 0xc4, 0x9e, 0x47, 0x96, 0x93, 0x82, 0x62, + 0x40, 0x4c, 0xe3, 0xbf, 0xd7, 0xca, 0x0e, 0x70, 0x66, 0x49, 0x52, 0xd7, + 0xc4, 0xb4, 0x52, 0x4d, 0xa7, 0x5a, 0x1b, 0xe3, 0xdf, 0x4a, 0x3c, 0xc1, + 0xee, 0x38, 0xf9, 0xc6, 0x52, 0xa4, 0x25, 0x44, 0xa4, 0x2d, 0xde, 0x00, + 0x81, 0x14, 0x56, 0x41, 0x4d, 0x1a, 0x82, 0x1a, 0x0d, 0x6f, 0x25, 0x1b, + 0x8c, 0xa5, 0xa8, 0x0e, 0xd4, 0x73, 0xef, 0x9c, 0x87, 0x0b, 0x93, 0xf5, + 0xa1, 0xfe, 0xda, 0x14, 0x6f, 0x4b, 0x98, 0x60, 0xc6, 0x21, 0x75, 0x96, + 0xba, 0xf0, 0xca, 0x4e, 0x27, 0xc1, 0xf9, 0x11, 0x70, 0xfd, 0xc8, 0x45, + 0x26, 0xec, 0x3f, 0xde, 0x9c, 0x6a, 0x45, 0x8d, 0xe9, 0xb3, 0x4f, 0xe7, + 0x3d, 0xd2, 0xf9, 0xdc, 0x6a, 0x10, 0x33, 0x49, 0x72, 0x86, 0xcb, 0xaa, + 0xe5, 0xfb, 0xf9, 0x89, 0x31, 0x0a, 0xbb, 0x6e, 0xe3, 0xe3, 0xbd, 0xc2, + 0x32, 0x91, 0x2b, 0x60, 0xc2, 0xc4, 0xf9, 0x5a, 0x91, 0x97, 0x40, 0x72, + 0x09, 0x5b, 0x07, 0xdc, 0x55, 0xd7, 0x06, 0x77, 0x1a, 0x35, 0xd2, 0x85, + 0x3e, 0xe3, 0xf2, 0x04, 0x48, 0x86, 0x98, 0xa6, 0xb1, 0xcf, 0xe0, 0x96, + 0x29, 0xf0, 0xe0, 0x62, 0x58, 0x5f, 0x59, 0x56, 0x26, 0x51, 0xf7, 0xf1, + 0xe6, 0x1c, 0x96, 0x25, 0xeb, 0x25, 0xeb, 0x56, 0x46, 0xc0, 0x49, 0xeb, + 0x2b, 0x53, 0x5d, 0x10, 0x5d, 0x11, 0xaf, 0x71, 0xb6, 0xf8, 0xdb, 0xa3, + 0x35, 0xa9, 0x94, 0x51, 0xb4, 0x69, 0x08, 0x8a, 0x62, 0x39, 0xdb, 0x52, + 0x80, 0x63, 0xbb, 0x07, 0x15, 0x38, 0xf8, 0x43, 0xcd, 0x21, 0x0f, 0xa6, + 0x91, 0xa2, 0xf2, 0xb4, 0x11, 0xdd, 0xc9, 0x36, 0x94, 0xf7, 0x92, 0xe4, + 0xe7, 0x34, 0x07, 0x97, 0xf2, 0xd7, 0xe3, 0x17, 0x35, 0xfb, 0xa9, 0xe7, + 0x51, 0x88, 0xc5, 0x89, 0x86, 0x2b, 0xec, 0x03, 0x54, 0x0b, 0x59, 0x88, + 0x67, 0x9f, 0x28, 0x0a, 0x12, 0x8c, 0xeb, 0x2e, 0xc3, 0x49, 0x2e, 0x52, + 0xbb, 0xb9, 0x66, 0xe9, 0xf4, 0x03, 0xcd, 0x4d, 0x53, 0x55, 0xaa, 0x20, + 0x9e, 0x2d, 0x5b, 0x0f, 0x30, 0x26, 0xc4, 0x9c, 0x93, 0x15, 0xf5, 0x75, + 0xd8, 0x5b, 0x15, 0x45, 0xa9, 0x31, 0x51, 0xc4, 0xa9, 0x97, 0x5c, 0xeb, + 0x3c, 0x2c, 0x09, 0x0c, 0x25, 0xea, 0xf1, 0xe6, 0x24, 0x53, 0x14, 0x51, + 0xb5, 0x5e, 0x88, 0x84, 0xe5, 0x83, 0x21, 0xfd, 0x4c, 0x38, 0x68, 0x1f, + 0x72, 0x95, 0xb4, 0x2c, 0x6b, 0x49, 0xc3, 0x0d, 0xeb, 0xe3, 0xc2, 0xb0, + 0x40, 0xaf, 0xbf, 0x64, 0x50, 0x41, 0x65, 0xd7, 0xc8, 0x03, 0x37, 0x59, + 0xd8, 0x8a, 0x84, 0x6c, 0x6f, 0x66, 0xf9, 0xe3, 0xcd, 0x29, 0x51, 0x7e, + 0xc4, 0x8c, 0xe2, 0xc5, 0x42, 0x7b, 0xfb, 0xf0, 0x26, 0xfc, 0x26, 0xf3, + 0xd5, 0x1a, 0x3c, 0xdb, 0xc4, 0x78, 0x23, 0x9b, 0xf8, 0x36, 0x1b, 0x2d, + 0x8b, 0x1b, 0xc9, 0x2a, 0xcf, 0xa2, 0x0f, 0xf3, 0xac, 0x00, 0x78, 0xbf, + 0x36, 0xe9, 0x47, 0x8a, 0x03, 0x85, 0xcb, 0xc0, 0x98, 0x7a, 0xca, 0xd3, + 0xfe, 0x37, 0xad, 0x83, 0x44, 0x29, 0x59, 0xfe, 0x21, 0x4f, 0x02, 0x82, + 0x82, 0x4b, 0xba, 0xa6, 0xb3, 0x48, 0xaa, 0xd7, 0xe0, 0x43, 0xa3, 0x4b, + 0x0b, 0x6f, 0x59, 0x89, 0xe1, 0xb4, 0x49, 0xfa, 0x75, 0x90, 0x49, 0x01, + 0x2c, 0x40, 0xd9, 0xf5, 0x0f, 0x71, 0x06, 0x2d, 0x34, 0x2b, 0xc0, 0xf6, + 0x5e, 0x0a, 0x1a, 0x9b, 0x33, 0x36, 0x10, 0x31, 0x5b, 0x62, 0x6a, 0xeb, + 0xcd, 0xb1, 0xd9, 0x44, 0xac, 0xcb, 0x77, 0xac, 0xb8, 0xad, 0x21, 0x49, + 0x0b, 0xd2, 0x5c, 0x77, 0xf2, 0x01, 0x41, 0xcd, 0xeb, 0xac, 0xf9, 0xe3, + 0x41, 0x89, 0x9a, 0xc7, 0xfb, 0x27, 0x0e, 0xb7, 0x70, 0xcb, 0x23, 0xa7, + 0x5f, 0xf8, 0x4f, 0xcf, 0x51, 0x5e, 0x0f, 0x92, 0xe8, 0xc7, 0x91, 0x82, + 0xd4, 0x0a, 0x70, 0x19, 0xa3, 0xb5, 0x7c, 0x52, 0x84, 0x2f, 0xf2, 0x97, + 0x5a, 0xb9, 0xeb, 0x3e, 0x2e, 0x3e, 0x34, 0xba, 0x58, 0xb4, 0xb1, 0xea, + 0x22, 0x88, 0xf5, 0x47, 0x23, 0x65, 0x40, 0xd4, 0x91, 0x18, 0xb5, 0x3e, + 0x86, 0xab, 0x6b, 0x4e, 0x38, 0x52, 0xc1, 0x5d, 0x98, 0x4a, 0xb0, 0x5e, + 0x61, 0x7e, 0xe4, 0x07, 0xaf, 0xf1, 0xb6, 0xe4, 0x49, 0x8c, 0x15, 0x23, + 0xff, 0xf8, 0xe3, 0xf3, 0xab, 0xf3, 0xf2, 0x00, 0x17, 0x08, 0x70, 0x3a, + 0xcd, 0xc3, 0x33, 0xd2, 0xa3, 0xf5, 0x81, 0x35, 0xe3, 0x18, 0x4a, 0xb9, + 0x04, 0xc3, 0x63, 0x54, 0x67, 0x10, 0xba, 0xf3, 0x2d, 0x59, 0xfa, 0x2d, + 0xb2, 0x8a, 0xee, 0x40, 0x05, 0x49, 0x75, 0x9e, 0x24, 0x13, 0x43, 0xcd, + 0x22, 0xc1, 0x84, 0x8f, 0x4f, 0x99, 0x7c, 0x0c, 0x93, 0x2b, 0x68, 0x0b, + 0x9b, 0xe8, 0x62, 0xe9, 0xcf, 0xc9, 0x7b, 0x03, 0x79, 0x09, 0x85, 0x03, + 0x9f, 0x1e, 0x2f, 0x71, 0x9d, 0x22, 0xfa, 0x24, 0xb9, 0x87, 0x84, 0x69, + 0x39, 0x81, 0x68, 0x4d, 0x43, 0xaa, 0xa2, 0x8f, 0x6b, 0x6d, 0x6d, 0x14, + 0x18, 0xda, 0x52, 0x7f, 0xc5, 0xa3, 0x6d, 0x59, 0x00, 0x84, 0x1b, 0x16, + 0x44, 0xdf, 0x0f, 0x6c, 0x56, 0x9b, 0x64, 0x8c, 0x1e, 0x5d, 0xb1, 0x06, + 0x65, 0xd6, 0x22, 0x37, 0xad, 0x1f, 0x7f, 0xa0, 0x77, 0x3e, 0xde, 0x23, + 0xcc, 0x89, 0x26, 0xb5, 0x6d, 0x34, 0x4b, 0x92, 0x24, 0x13, 0xbf, 0x0f, + 0xdc, 0x75, 0xcc, 0x5e, 0xbf, 0x00, 0x81, 0x47, 0x9e, 0x09, 0xd4, 0x52, + 0x52, 0x29, 0x8a, 0x65, 0x2e, 0x68, 0xbd, 0x1f, 0x26, 0x25, 0x77, 0xfe, + 0xad, 0x3d, 0x8e, 0xdf, 0xe5, 0xa9, 0x90, 0x8c, 0xa7, 0x67, 0x69, 0xcd, + 0xa8, 0xdc, 0x7e, 0x62, 0x41, 0x6c, 0x58, 0x16, 0x39, 0xf7, 0x2b, 0x8d, + 0x4a, 0x5a, 0xfb, 0x88, 0x31, 0x29, 0xb2, 0xce, 0x7b, 0x0e, 0xee, 0xd6, + 0x31, 0x1d, 0xca, 0x47, 0xfd, 0x4b, 0xfe, 0x48, 0xa9, 0xc1, 0x56, 0x3a, + 0x09, 0xca, 0xfc, 0x32, 0xab, 0xb8, 0xfa, 0xe0, 0x98, 0x72, 0xd5, 0x2a, + 0xe6, 0x4d, 0x28, 0x3e, 0xd2, 0x06, 0x4c, 0x88, 0x2b, 0x58, 0xfb, 0x15, + 0x1b, 0x0c, 0x77, 0x49, 0xea, 0x76, 0xe4, 0xbe, 0x41, 0x7e, 0x7c, 0x6a, + 0x30, 0x20, 0x63, 0xf8, 0x51, 0x3e, 0x8e, 0x7f, 0x7c, 0x44, 0xc2, 0x39, + 0x8f, 0xc1, 0x78, 0x70, 0xe1, 0xc6, 0x40, 0x43, 0xf0, 0x1f, 0x8a, 0xc3, + 0x0c, 0xd4, 0xe9, 0x8b, 0xcf, 0x9a, 0xaa, 0xf2, 0xcf, 0x69, 0x15, 0xcd, + 0x71, 0x58, 0x77, 0xef, 0xa1, 0xb2, 0x48, 0xc6, 0x77, 0x5c, 0x21, 0x72, + 0x2c, 0xa3, 0xab, 0x8f, 0xc2, 0xbc, 0xb4, 0x2f, 0x2e, 0x67, 0x0c, 0xe9, + 0x43, 0xe3, 0xd0, 0xc9, 0x68, 0xd1, 0x98, 0x6a, 0x09, 0x5c, 0xa4, 0x8f, + 0x43, 0x25, 0x1c, 0x73, 0xba, 0x1e, 0x2b, 0xe1, 0x1f, 0xb8, 0x6c, 0x5d, + 0x83, 0x9a, 0xff, 0x04, 0x40, 0x02, 0x49, 0x00, 0x6b, 0xe4, 0xa1, 0x36, + 0x33, 0xb7, 0xaf, 0x48, 0x2f, 0x04, 0xd6, 0xe3, 0x7b, 0x40, 0x22, 0x32, + 0xcd, 0x19, 0x46, 0x39, 0x3e, 0x30, 0xab, 0xb9, 0x60, 0x53, 0x2d, 0x17, + 0x28, 0x5c, 0xc7, 0x0b, 0x32, 0xcd, 0x60, 0xf1, 0x7e, 0x7c, 0x70, 0x02, + 0x43, 0x50, 0xc3, 0x5e, 0xb7, 0x18, 0xfb, 0x5a, 0x56, 0x79, 0x53, 0xbb, + 0x2b, 0x8a, 0xe9, 0x7b, 0x7a, 0x32, 0xbd, 0x5a, 0xbd, 0x17, 0x16, 0xff, + 0xe1, 0x2b, 0x54, 0x9e, 0xb3, 0x93, 0xc2, 0x2e, 0x15, 0x3a, 0xc3, 0x24, + 0xdf, 0x25, 0x24, 0x8d, 0x5d, 0x89, 0xe1, 0x35, 0x42, 0x93, 0xe9, 0xf8, + 0xa3, 0xb4, 0x3f, 0xa7, 0x15, 0xbb, 0x33, 0x37, 0x60, 0xf8, 0x22, 0x78, + 0x80, 0x61, 0x57, 0xd3, 0xb6, 0x3e, 0x2c, 0x63, 0x71, 0x23, 0x1e, 0x95, + 0xfd, 0x31, 0xf1, 0xfb, 0xd7, 0x8b, 0x95, 0x70, 0x99, 0xa1, 0x1f, 0x57, + 0x87, 0xaa, 0x1a, 0xca, 0xef, 0x4b, 0x1e, 0xad, 0xcb, 0x8f, 0x96, 0xa2, + 0x8a, 0xff, 0x1c, 0xa6, 0xc0, 0x47, 0xe7, 0x43, 0x27, 0x0f, 0xa9, 0x40, + 0xbd, 0xb4, 0xa5, 0xa0, 0x28, 0x43, 0x28, 0x92, 0xb2, 0x3d, 0x2d, 0xec, + 0x61, 0xe5, 0xe2, 0xee, 0x65, 0x0a, 0x39, 0x17, 0x46, 0x59, 0x93, 0xcf, + 0x82, 0x32, 0x2f, 0x82, 0x9c, 0x14, 0x6f, 0xb4, 0xa8, 0x8d, 0x3e, 0x02, + 0xa7, 0x90, 0x84, 0x1e, 0x69, 0xbd, 0x83, 0x40, 0x73, 0x1b, 0x71, 0x5b, + 0xb2, 0x65, 0xe8, 0xeb, 0x8f, 0xa7, 0xa1, 0xfd, 0x3c, 0x50, 0x20, 0x14, + 0x6a, 0x84, 0x23, 0xf9, 0x11, 0x01, 0x17, 0xac, 0x7f, 0x5b, 0xcc, 0x19, + 0xb8, 0x2e, 0x29, 0x19, 0x34, 0x81, 0xe9, 0x4a, 0x71, 0x4a, 0xb9, 0xb6, + 0xa5, 0x98, 0x8b, 0xf8, 0x5d, 0x89, 0x98, 0x04, 0xa5, 0x5a, 0xa8, 0x1f, + 0x7d, 0xdf, 0x34, 0xc1, 0xbb, 0x2a, 0x5a, 0x4e, 0x85, 0x09, 0x86, 0x27, + 0xa1, 0x04, 0x8d, 0x02, 0x14, 0xce, 0x00, 0xd8, 0xac, 0x40, 0x86, 0xab, + 0x8f, 0xeb, 0xc5, 0x8a, 0xb1, 0x0f, 0xeb, 0x55, 0x2f, 0xd3, 0x64, 0x9b, + 0x03, 0x9b, 0x33, 0x90, 0x62, 0x7c, 0x89, 0xc5, 0x7a, 0x60, 0x43, 0xad, + 0x40, 0xd7, 0x3a, 0xcb, 0xa7, 0x2b, 0x36, 0x22, 0x2d, 0x21, 0x5a, 0x71, + 0xb7, 0x17, 0xd0, 0x01, 0x54, 0xe0, 0x06, 0xbe, 0xa8, 0xab, 0x4b, 0xd3, + 0x00, 0x09, 0x61, 0x4b, 0x4f, 0xbc, 0x32, 0x8c, 0x1a, 0x69, 0xa3, 0x95, + 0x04, 0x7b, 0x41, 0x88, 0xae, 0x95, 0xea, 0x6a, 0x04, 0x70, 0x61, 0x81, + 0xb5, 0x7c, 0xc1, 0xa6, 0x86, 0x9e, 0x6f, 0xb9, 0x58, 0x81, 0x84, 0x4e, + 0x14, 0xb8, 0x01, 0x5c, 0x40, 0x7f, 0x7a, 0x34, 0x86, 0xf0, 0x57, 0x62, + 0x0d, 0xdf, 0x23, 0x4c, 0x48, 0x2e, 0xb3, 0xb5, 0xd5, 0x35, 0x98, 0x8c, + 0x0c, 0x37, 0x37, 0x85, 0x13, 0x75, 0x4c, 0xda, 0x03, 0xe9, 0x21, 0xf6, + 0xa6, 0x96, 0x6b, 0x0c, 0x53, 0xae, 0x3e, 0xb2, 0xc8, 0x20, 0xa8, 0xdb, + 0xa1, 0xed, 0x5f, 0x56, 0x38, 0x8f, 0x93, 0x53, 0x7d, 0x51, 0xf8, 0x96, + 0x3a, 0x02, 0x61, 0xb6, 0x87, 0x2c, 0xbc, 0x8e, 0x06, 0x31, 0x10, 0xf7, + 0x69, 0xa1, 0x51, 0x57, 0x0a, 0x29, 0xa7, 0xe9, 0x5c, 0xf0, 0xff, 0x7f, + 0x75, 0x7c, 0xb9, 0xd5, 0x04, 0x30, 0x8a, 0x27, 0x7e, 0x64, 0x80, 0xb2, + 0xd4, 0xf3, 0x10, 0xbb, 0x02, 0xd3, 0x2e, 0x81, 0x50, 0x14, 0x9d, 0xe4, + 0x61, 0x31, 0x8d, 0xe7, 0x5a, 0x55, 0xad, 0xd6, 0xdc, 0x21, 0x2d, 0x03, + 0x73, 0xb2, 0x20, 0x4c, 0x48, 0xbd, 0xee, 0xae, 0xac, 0xac, 0x53, 0xb8, + 0x91, 0xa2, 0xc3, 0x2d, 0x1e, 0x1d, 0x9f, 0x1e, 0x5f, 0x1e, 0x23, 0x82, + 0xba, 0x21, 0x92, 0xb0, 0x2a, 0x34, 0xe1, 0x64, 0xdc, 0x9b, 0x79, 0x46, + 0x77, 0x6f, 0xaa, 0xd5, 0xe6, 0xa3, 0xef, 0x92, 0xd1, 0xd1, 0xc1, 0xb7, + 0x12, 0xd2, 0x50, 0x44, 0xe7, 0x17, 0x67, 0xe7, 0xaf, 0x4f, 0xde, 0x1e, + 0xf5, 0xa2, 0xc3, 0xb3, 0xf3, 0x1f, 0x7a, 0xd1, 0x9b, 0xb3, 0x6f, 0x8f, + 0x5b, 0x7c, 0x8a, 0xec, 0xcf, 0x6e, 0x66, 0x9c, 0xbd, 0x5e, 0xb3, 0xdb, + 0x21, 0x22, 0xa5, 0x6e, 0x75, 0x90, 0xe8, 0x73, 0x7a, 0x32, 0xbc, 0xc4, + 0xd6, 0xd7, 0xe3, 0xbd, 0x10, 0xd3, 0x2e, 0xc0, 0xeb, 0x69, 0x61, 0x01, + 0x1c, 0x5c, 0x35, 0xec, 0xb7, 0xa3, 0xea, 0x15, 0x87, 0xf7, 0xb0, 0xd4, + 0xae, 0xd8, 0x57, 0xfc, 0x6f, 0x0b, 0x66, 0x62, 0xec, 0x35, 0x0f, 0xf6, + 0xf7, 0x6a, 0xb1, 0x9f, 0x1b, 0xc9, 0xcb, 0xa1, 0x97, 0x05, 0xa7, 0x69, + 0x54, 0x93, 0xd7, 0xa3, 0xc9, 0x32, 0x6f, 0x4a, 0x3c, 0x71, 0x14, 0x74, + 0x28, 0xb9, 0x4a, 0xbd, 0x8a, 0xd2, 0xc6, 0xde, 0xc7, 0xc2, 0x17, 0xf4, + 0xa0, 0xee, 0x83, 0x17, 0x1a, 0x8e, 0x1d, 0x5f, 0x1b, 0xde, 0x21, 0x04, + 0x04, 0x43, 0xb2, 0x69, 0xef, 0x92, 0x82, 0x3f, 0x65, 0xb8, 0x23, 0xbe, + 0x89, 0x04, 0x87, 0xe8, 0x87, 0x47, 0x03, 0xa8, 0x34, 0xc4, 0x30, 0xf4, + 0xc5, 0x0b, 0xf3, 0x59, 0x3a, 0x60, 0x4c, 0x5c, 0xe6, 0x31, 0x5c, 0x40, + 0x11, 0xd6, 0xa4, 0xa9, 0x9d, 0xa8, 0x76, 0x20, 0x41, 0x0e, 0x41, 0x02, + 0x1a, 0x22, 0x22, 0xe9, 0x76, 0x91, 0x53, 0x42, 0x5c, 0xbf, 0x27, 0x99, + 0x98, 0x80, 0xac, 0xd6, 0xf7, 0xfa, 0x2d, 0x06, 0x12, 0x16, 0x9c, 0xd7, + 0xf0, 0xf3, 0x5f, 0x8f, 0x26, 0x7e, 0x70, 0x34, 0x21, 0x6b, 0xf8, 0x12, + 0x7f, 0xfc, 0x22, 0xaa, 0x08, 0x20, 0xbd, 0x44, 0x27, 0xdc, 0x24, 0xb1, + 0xad, 0x42, 0x1e, 0xfd, 0x46, 0x56, 0xc3, 0x64, 0x4b, 0xcd, 0x4b, 0xc1, + 0x6e, 0xab, 0x5d, 0x87, 0xe5, 0xa2, 0x2a, 0x51, 0x54, 0x28, 0xa2, 0x45, + 0x9c, 0x91, 0x2d, 0x96, 0x70, 0xe1, 0x94, 0xa1, 0x98, 0xf9, 0x76, 0x05, + 0xd6, 0x48, 0x52, 0xfe, 0x86, 0x4b, 0xf7, 0x33, 0x67, 0x3e, 0xd3, 0xe3, + 0x7d, 0x90, 0xff, 0xcb, 0x09, 0x8b, 0xcf, 0xc4, 0xf4, 0x34, 0xbc, 0x68, + 0x2d, 0xc2, 0xf8, 0x16, 0x31, 0x53, 0xe1, 0xe0, 0xb1, 0x5a, 0x6f, 0x59, + 0xfc, 0xe0, 0x2c, 0x75, 0x54, 0xb5, 0xd7, 0xba, 0x1d, 0xec, 0x4b, 0x2c, + 0x6d, 0x85, 0x5b, 0x6e, 0x7e, 0xad, 0xb4, 0xac, 0xe0, 0x8d, 0x7c, 0xfc, + 0xe8, 0x71, 0x57, 0xa9, 0x66, 0x4d, 0x93, 0x6a, 0x6b, 0xe4, 0x6f, 0x5b, + 0xe8, 0xcd, 0x41, 0xb4, 0x87, 0xd3, 0x30, 0xa1, 0x00, 0x75, 0x5c, 0x10, + 0x40, 0x42, 0x4c, 0x0d, 0xcf, 0x48, 0x08, 0x41, 0xc1, 0x5d, 0x36, 0x94, + 0x6b, 0x36, 0xcc, 0x59, 0x44, 0xa4, 0xa2, 0x44, 0x20, 0x78, 0xc1, 0x03, + 0xe7, 0xd2, 0x28, 0xd5, 0x26, 0x6b, 0xb0, 0xab, 0x06, 0x52, 0xdc, 0x92, + 0xc1, 0xa1, 0x81, 0x09, 0x3e, 0x49, 0x52, 0xc3, 0xb8, 0x95, 0xcf, 0xfe, + 0x4e, 0x01, 0x30, 0xa5, 0x0c, 0x38, 0xfb, 0x6a, 0xa9, 0x2d, 0x1e, 0x23, + 0x27, 0xbc, 0xaf, 0xc9, 0x78, 0x2f, 0x24, 0xe5, 0xbd, 0x36, 0x59, 0xbd, + 0xc1, 0xda, 0xe5, 0x27, 0xe1, 0x3b, 0xb5, 0x37, 0x14, 0x37, 0x1b, 0x75, + 0xa1, 0x36, 0xfb, 0x5b, 0x2e, 0x6e, 0x12, 0x90, 0xa2, 0xb2, 0xcd, 0x4d, + 0x7b, 0x48, 0xec, 0x2c, 0x13, 0x2e, 0xf2, 0x36, 0x9b, 0x4e, 0xfc, 0x79, + 0xb2, 0x6c, 0x25, 0xee, 0x6c, 0x5b, 0xec, 0x9e, 0xae, 0x2a, 0x65, 0xd1, + 0x94, 0xbf, 0x1b, 0x8d, 0xcd, 0x93, 0xfb, 0xb0, 0x31, 0x2f, 0x3b, 0xb8, + 0x06, 0x7f, 0xcb, 0x10, 0x74, 0xc6, 0xe0, 0x83, 0xd6, 0x5d, 0xb4, 0xa2, + 0xf2, 0x72, 0x8a, 0x7b, 0x00, 0xe1, 0x67, 0x1a, 0x13, 0x04, 0x95, 0xc0, + 0xc6, 0xdc, 0x77, 0x25, 0xe5, 0x0b, 0x87, 0x4e, 0xda, 0x96, 0x7a, 0x5d, + 0x29, 0x95, 0x6e, 0xe3, 0xae, 0x56, 0x9c, 0x55, 0x12, 0xc6, 0x84, 0xa4, + 0x68, 0x29, 0x27, 0x2b, 0xb6, 0x67, 0xf7, 0x80, 0xd4, 0x7c, 0x35, 0xfb, + 0xd0, 0xe8, 0x1d, 0x75, 0x38, 0xbc, 0x7d, 0x54, 0x2c, 0xf3, 0xc9, 0x72, + 0xd6, 0x09, 0xb3, 0xe0, 0x75, 0x61, 0x98, 0x81, 0xd6, 0x0f, 0x82, 0x5c, + 0x42, 0xd4, 0xeb, 0xb3, 0x9d, 0x9a, 0x05, 0xdd, 0xf0, 0x09, 0x03, 0x44, + 0xc2, 0xfe, 0x6e, 0x48, 0x3f, 0xd4, 0x5e, 0x43, 0x48, 0x2c, 0xf9, 0x5e, + 0xfb, 0x0d, 0x37, 0x6f, 0x87, 0x16, 0x93, 0x05, 0xf0, 0xdd, 0xc1, 0x4e, + 0xbb, 0xb8, 0xcb, 0xd1, 0x7b, 0xe3, 0xc4, 0x17, 0xd7, 0x4e, 0x49, 0x7d, + 0xe5, 0xd1, 0x16, 0x5e, 0x72, 0x93, 0xb8, 0x0c, 0x57, 0x87, 0x58, 0x0f, + 0x69, 0xfd, 0x0a, 0xb8, 0x72, 0xd5, 0x78, 0x0b, 0xc7, 0x15, 0x90, 0x96, + 0x9e, 0x88, 0x39, 0x7d, 0xdf, 0x89, 0x9a, 0xc1, 0xf0, 0x76, 0x99, 0xe5, + 0x4e, 0x8b, 0xbb, 0xdd, 0xd6, 0x12, 0x16, 0xb5, 0xa1, 0xb1, 0x24, 0x76, + 0x79, 0x3a, 0x74, 0x01, 0xc2, 0xbb, 0x22, 0x82, 0x3b, 0xfc, 0x13, 0x5f, + 0xbb, 0x7e, 0x4d, 0x6d, 0x76, 0x7e, 0x59, 0x85, 0x70, 0x3f, 0x84, 0x3d, + 0xbe, 0x30, 0x8b, 0xe9, 0xdd, 0x5e, 0xeb, 0x10, 0x6c, 0x0c, 0x95, 0x41, + 0xb0, 0xa1, 0xc5, 0x06, 0xb1, 0xd7, 0x1c, 0xc4, 0x63, 0xe5, 0xe1, 0xf9, + 0xd5, 0xc6, 0x10, 0x9e, 0xe8, 0x10, 0x9e, 0x7c, 0xec, 0x2a, 0x84, 0x03, + 0x78, 0xf2, 0x4b, 0x57, 0xa1, 0x75, 0x08, 0x4f, 0x39, 0xa0, 0x7e, 0x71, + 0xf7, 0xb4, 0x25, 0xb3, 0xc7, 0x6c, 0x62, 0x60, 0x55, 0x40, 0x4b, 0x99, + 0x4a, 0x31, 0x4e, 0xef, 0x32, 0xe7, 0x32, 0x84, 0x56, 0x50, 0x34, 0xf3, + 0x1e, 0xa6, 0x93, 0x7a, 0xc5, 0x41, 0x1d, 0xb3, 0x07, 0xbe, 0x16, 0x14, + 0x98, 0x2b, 0xfd, 0x85, 0x63, 0x8c, 0xfb, 0xda, 0x43, 0xad, 0xc8, 0xb4, + 0x94, 0xc9, 0x5d, 0x13, 0xeb, 0x8c, 0x84, 0x47, 0x41, 0x34, 0xd3, 0x02, + 0x3a, 0x19, 0xb7, 0xf5, 0xd4, 0x06, 0x95, 0x48, 0xe0, 0x69, 0x30, 0xdd, + 0xe7, 0x32, 0xdd, 0xe7, 0xff, 0x37, 0x4d, 0xf7, 0xf9, 0xfa, 0xe9, 0x7e, + 0x22, 0x56, 0x05, 0x60, 0x86, 0xf6, 0x47, 0x71, 0xbe, 0x16, 0x55, 0xd9, + 0xc2, 0x25, 0x1d, 0xc0, 0x68, 0x25, 0xec, 0xbf, 0x10, 0x64, 0x26, 0xf9, + 0x86, 0x9a, 0x59, 0xcf, 0x0a, 0x2a, 0x12, 0x3d, 0x43, 0x25, 0x15, 0x65, + 0x3a, 0x66, 0x3e, 0xc7, 0xd5, 0x50, 0x5c, 0x9c, 0xef, 0x7f, 0x6f, 0x0f, + 0x5a, 0x2b, 0x72, 0x1e, 0x35, 0x6b, 0x66, 0xf6, 0x22, 0x60, 0xea, 0x06, + 0xa5, 0x37, 0x03, 0x84, 0x1b, 0x6a, 0xf7, 0xf8, 0xed, 0xb7, 0x27, 0x17, + 0x67, 0x6f, 0xdf, 0x1c, 0xbf, 0x75, 0xd1, 0x36, 0x97, 0xa8, 0x3f, 0xd8, + 0x66, 0x45, 0x6b, 0xab, 0xbb, 0x22, 0xf2, 0x2f, 0x4c, 0x39, 0x9c, 0x36, + 0xbb, 0x58, 0xe8, 0x5f, 0x83, 0xb0, 0xb9, 0xe0, 0x21, 0x3b, 0x7e, 0x2c, + 0x94, 0x2d, 0xd8, 0x37, 0x30, 0xe1, 0x18, 0xb7, 0x81, 0x84, 0x1e, 0xb9, + 0xd2, 0xe9, 0x6c, 0x7b, 0x7b, 0x18, 0x27, 0x0b, 0x5b, 0x3f, 0x7f, 0x9f, + 0x68, 0xe1, 0xc6, 0x20, 0x6a, 0xad, 0x32, 0x08, 0xbf, 0x79, 0x41, 0x83, + 0x3f, 0x9a, 0xf1, 0x6a, 0x7f, 0x7b, 0xfb, 0x27, 0xe0, 0x00, 0x7e, 0xae, + 0xf6, 0xcd, 0xe6, 0x95, 0x1c, 0x1a, 0x72, 0x7c, 0x6d, 0x10, 0xcb, 0xf3, + 0x83, 0xc5, 0x6c, 0x23, 0xf0, 0x67, 0x0d, 0xdf, 0x93, 0x2e, 0xfd, 0xfd, + 0x0f, 0xbf, 0x72, 0x17, 0xc3, 0x4a, 0x49, 0x8a, 0x5f, 0xbd, 0x8b, 0x8a, + 0x76, 0x7d, 0x70, 0x7a, 0xfa, 0xab, 0x76, 0x00, 0x95, 0xc3, 0xdb, 0x0b, + 0xfb, 0xce, 0x5e, 0x68, 0x49, 0x92, 0x0d, 0x65, 0xb6, 0xa2, 0x9d, 0xbc, + 0x3d, 0xd3, 0xd1, 0x88, 0xb9, 0xa9, 0x6f, 0xd5, 0x5e, 0x26, 0xae, 0x92, + 0x22, 0x0f, 0xac, 0x81, 0x53, 0x8d, 0x2f, 0x21, 0x3a, 0x39, 0xc0, 0x4e, + 0xb3, 0xfa, 0x02, 0xb5, 0x0c, 0x29, 0x49, 0x99, 0xb3, 0x2d, 0x0a, 0x44, + 0xa2, 0x19, 0xad, 0x5b, 0x0c, 0xc3, 0x0c, 0x42, 0xc1, 0x21, 0x5d, 0xa8, + 0xbf, 0xcb, 0xe9, 0x5c, 0x4c, 0x74, 0x8a, 0xe6, 0x5c, 0x02, 0x20, 0x9f, + 0x15, 0x01, 0x0c, 0x85, 0x4f, 0xd1, 0xf7, 0x27, 0x97, 0xd1, 0xe1, 0xd9, + 0x91, 0x3f, 0xa2, 0x97, 0x12, 0xc8, 0x99, 0xa3, 0x64, 0xd2, 0x72, 0x4e, + 0x4c, 0x8c, 0xd5, 0x85, 0xf4, 0x0a, 0x78, 0x68, 0x0e, 0x16, 0x1d, 0x31, + 0x75, 0x66, 0x27, 0xa2, 0x05, 0x95, 0x82, 0x6f, 0xb9, 0x04, 0xca, 0x4d, + 0x02, 0x2b, 0x42, 0x15, 0x24, 0xd8, 0x99, 0x6a, 0x39, 0x6e, 0x9a, 0xc1, + 0x73, 0x88, 0xa5, 0x88, 0xd5, 0x81, 0xb8, 0x0b, 0x57, 0x6e, 0x9b, 0x8b, + 0x35, 0x89, 0x84, 0xab, 0x03, 0xaf, 0x4b, 0x04, 0xa8, 0x68, 0x52, 0x08, + 0x27, 0x47, 0x01, 0x00, 0x2d, 0x38, 0xfa, 0xc0, 0x08, 0xed, 0x18, 0x4d, + 0x25, 0xee, 0x73, 0x57, 0xed, 0xfe, 0x73, 0x0f, 0xa8, 0xe1, 0x31, 0xaa, + 0x60, 0x3a, 0xe0, 0x44, 0x89, 0x89, 0x25, 0x1d, 0x19, 0xc8, 0x98, 0x55, + 0x49, 0x91, 0xe2, 0xd7, 0x8d, 0x1d, 0x77, 0x4d, 0xb8, 0x7e, 0xf6, 0x94, + 0xda, 0x05, 0x49, 0x9e, 0xe5, 0x29, 0x71, 0x2f, 0xa5, 0x3f, 0x07, 0x47, + 0xfa, 0x89, 0x0e, 0xe6, 0xe2, 0x94, 0x66, 0x3e, 0x15, 0x3b, 0xb8, 0xc6, + 0x7c, 0xa3, 0x42, 0x0e, 0xbc, 0x27, 0xac, 0xef, 0x6a, 0xc1, 0x53, 0xff, + 0xe6, 0x33, 0x33, 0xb7, 0x29, 0x29, 0x78, 0x24, 0x4f, 0xa5, 0x02, 0x71, + 0xed, 0xaa, 0x32, 0xa9, 0x84, 0x2a, 0xc1, 0x62, 0x63, 0xb8, 0xcb, 0xc4, + 0xb6, 0xdd, 0xac, 0x0d, 0x51, 0x8b, 0xc3, 0x79, 0x5e, 0xeb, 0xc7, 0xba, + 0x41, 0x35, 0x72, 0x29, 0x82, 0x89, 0x2e, 0xea, 0x01, 0x57, 0xdc, 0x7c, + 0xb3, 0xb5, 0x4f, 0xeb, 0x8b, 0xe2, 0xeb, 0xc6, 0x4b, 0x8b, 0xee, 0xc9, + 0xcf, 0x1c, 0xb3, 0x88, 0xee, 0x13, 0xce, 0x89, 0xd2, 0x33, 0x89, 0x9a, + 0x46, 0x36, 0x3b, 0x8b, 0x9f, 0x90, 0x54, 0x49, 0x00, 0x5d, 0x69, 0xbc, + 0xe5, 0x58, 0xc7, 0xdb, 0xd0, 0x0f, 0xf3, 0x90, 0xa3, 0xbe, 0xf0, 0x9d, + 0x44, 0x31, 0x5c, 0x54, 0x6c, 0xea, 0x9c, 0xa7, 0x6e, 0x13, 0xa4, 0x7d, + 0xf9, 0x88, 0x3d, 0x7f, 0xc4, 0x99, 0x33, 0xf7, 0xb7, 0xbe, 0xd1, 0xc0, + 0x29, 0xaa, 0x85, 0x41, 0xf1, 0x2a, 0x48, 0x35, 0xbe, 0xb0, 0x86, 0x1f, + 0xa2, 0xe1, 0xe3, 0xb9, 0xfa, 0x2d, 0x04, 0xa8, 0x9d, 0xc1, 0xb9, 0xb3, + 0x46, 0xcc, 0x69, 0x76, 0x55, 0xba, 0x0a, 0x41, 0xac, 0x52, 0x4f, 0x02, + 0x84, 0x4b, 0x9c, 0x6a, 0xdf, 0x28, 0xce, 0x90, 0x69, 0xe7, 0x70, 0x20, + 0x45, 0x0d, 0xf7, 0x5c, 0x50, 0xed, 0xd5, 0x9f, 0x89, 0xdd, 0xda, 0x62, + 0x9f, 0x1f, 0x0c, 0x87, 0xb6, 0xd4, 0x40, 0x91, 0xb2, 0xf5, 0x94, 0x15, + 0x54, 0xcf, 0x26, 0x32, 0xa6, 0x35, 0xa5, 0xb0, 0xc5, 0x90, 0xa1, 0x8d, + 0xd4, 0xa2, 0x23, 0x76, 0x9f, 0xf8, 0x35, 0x77, 0x9d, 0x7d, 0x2b, 0xad, + 0xf5, 0x3e, 0xb2, 0xb3, 0xd6, 0xbe, 0xbe, 0x6d, 0xe9, 0xeb, 0x69, 0x6d, + 0x5e, 0x7b, 0x7b, 0x9f, 0x6a, 0x0a, 0x01, 0xad, 0xf5, 0x61, 0x85, 0x52, + 0x94, 0x38, 0xd4, 0xd6, 0x40, 0x0f, 0xf6, 0x0d, 0x2d, 0x22, 0x69, 0xad, + 0x96, 0x8d, 0xc1, 0x04, 0x5d, 0x3d, 0xf3, 0xd3, 0x22, 0xa9, 0x82, 0xdb, + 0x63, 0xb3, 0x87, 0x1c, 0x93, 0xc6, 0xe9, 0x01, 0x36, 0x08, 0x1f, 0x95, + 0x13, 0x1e, 0x19, 0xf1, 0xf1, 0x35, 0xf1, 0x26, 0x36, 0x8c, 0xa0, 0x9f, + 0x4f, 0x5d, 0x3f, 0x6e, 0xe4, 0xac, 0x87, 0x4a, 0x5e, 0xfd, 0x20, 0xe4, + 0x08, 0x4a, 0x23, 0x41, 0x44, 0x9a, 0x3a, 0x0a, 0x9a, 0x24, 0xab, 0x6f, + 0xfb, 0x5e, 0xe4, 0xf8, 0x9d, 0x6b, 0x21, 0x3c, 0x01, 0x55, 0x41, 0x79, + 0xb0, 0xb8, 0x82, 0x50, 0x22, 0xa5, 0xd2, 0x63, 0x6f, 0x5e, 0xcd, 0xc3, + 0xd3, 0xbe, 0xfb, 0x22, 0x58, 0x13, 0x1b, 0x96, 0xd9, 0x1a, 0xb7, 0xed, + 0xf8, 0x38, 0x16, 0x22, 0xd2, 0x1d, 0xff, 0x7d, 0x71, 0x7c, 0x79, 0xc1, + 0x31, 0xad, 0x80, 0x59, 0xa9, 0x6b, 0xca, 0x74, 0xa6, 0xb6, 0x9c, 0x59, + 0x5e, 0x0a, 0x75, 0x04, 0x5c, 0xd7, 0x53, 0xb2, 0x14, 0x23, 0xc6, 0x3d, + 0xc3, 0x99, 0xd7, 0x95, 0xda, 0xc4, 0xbe, 0x4a, 0x90, 0xdc, 0x43, 0x3e, + 0x42, 0x53, 0x4f, 0x86, 0x5b, 0x7f, 0x1f, 0xe7, 0x03, 0x34, 0x45, 0x61, + 0x6b, 0x1a, 0x0a, 0x3f, 0x50, 0xd7, 0xbb, 0x8b, 0x4a, 0x91, 0x94, 0xa7, + 0xd8, 0x3c, 0xc4, 0x1a, 0x50, 0xde, 0x30, 0x12, 0xb9, 0xce, 0xe9, 0x9a, + 0x94, 0xc4, 0x55, 0xbb, 0x0e, 0x9d, 0x37, 0x50, 0xba, 0x94, 0x4f, 0x11, + 0xa6, 0x0e, 0xb4, 0xad, 0xe8, 0xe9, 0xce, 0x4e, 0xb3, 0xb9, 0x78, 0x94, + 0xdd, 0x99, 0x6b, 0x52, 0x93, 0x3e, 0xa4, 0xb4, 0x0f, 0xf6, 0x0b, 0x97, + 0x29, 0x74, 0x8d, 0xfe, 0x15, 0xc9, 0xcc, 0xbc, 0x60, 0x66, 0x46, 0x08, + 0x96, 0x4d, 0x0e, 0xe5, 0x77, 0x48, 0x42, 0xd1, 0x25, 0xab, 0x1e, 0x45, + 0xc9, 0x4f, 0x31, 0x2c, 0xc1, 0xd8, 0x6a, 0x1a, 0x22, 0x91, 0x6d, 0x45, + 0xb3, 0x9f, 0xb5, 0xcc, 0x53, 0x41, 0x72, 0x82, 0x6e, 0x9e, 0xb5, 0x10, + 0x44, 0x34, 0xbc, 0x3c, 0xbb, 0x88, 0x82, 0x8a, 0xc4, 0x55, 0xae, 0x8b, + 0x78, 0x06, 0x7e, 0xc2, 0x79, 0x67, 0x7b, 0x2d, 0xae, 0x03, 0x97, 0x24, + 0x29, 0x41, 0x47, 0x9c, 0x6d, 0xef, 0x7b, 0x7d, 0xee, 0x1d, 0x5d, 0x3a, + 0xb7, 0x6f, 0x49, 0x03, 0xe0, 0xac, 0x41, 0x83, 0x3b, 0xa3, 0xfb, 0x91, + 0x04, 0xef, 0x59, 0x60, 0x7f, 0xd9, 0x93, 0x73, 0x76, 0xb6, 0x04, 0xad, + 0x4b, 0xbe, 0x23, 0x93, 0x91, 0x66, 0x3e, 0xb2, 0xd9, 0x4a, 0x0d, 0x53, + 0xce, 0x18, 0x58, 0x27, 0x45, 0x39, 0x43, 0x67, 0x1e, 0xd0, 0x4e, 0x2c, + 0xff, 0x83, 0x9a, 0xd7, 0x0f, 0x9f, 0x23, 0x93, 0x4d, 0xdd, 0x28, 0x4a, + 0x42, 0x5a, 0xbb, 0xa3, 0xbe, 0xd9, 0x63, 0x12, 0x05, 0x26, 0x5a, 0xc3, + 0x57, 0xc2, 0xad, 0x9c, 0x6c, 0xe4, 0xc5, 0x8a, 0x1d, 0xbf, 0xce, 0xe7, + 0x67, 0x17, 0x97, 0x56, 0xd0, 0x46, 0xef, 0x4d, 0x7c, 0x54, 0x3b, 0x41, + 0xec, 0xac, 0x87, 0x04, 0x18, 0xd4, 0x36, 0x6f, 0xaf, 0x25, 0x2f, 0xe0, + 0x7a, 0x68, 0x55, 0xdb, 0xe0, 0x42, 0x18, 0xf9, 0xca, 0x3c, 0x5f, 0xae, + 0x5c, 0x0e, 0x58, 0x8e, 0xa6, 0xf2, 0x30, 0x7f, 0x6e, 0xf7, 0x63, 0xfa, + 0x24, 0xd0, 0x27, 0xbb, 0x2d, 0xd4, 0xc1, 0x02, 0xf8, 0xc5, 0xf1, 0xf0, + 0x52, 0x56, 0x8d, 0x7f, 0x6b, 0x8c, 0x5c, 0x52, 0x21, 0xf5, 0xc3, 0x56, + 0xc7, 0x12, 0xa8, 0x83, 0x43, 0x64, 0x66, 0x5a, 0x67, 0xce, 0x79, 0x83, + 0x82, 0x35, 0x7b, 0x12, 0x84, 0xf4, 0x81, 0x71, 0x2a, 0xad, 0x5c, 0x5a, + 0xdd, 0xc1, 0xa8, 0xa3, 0x9d, 0x74, 0xe8, 0xca, 0x95, 0x43, 0x91, 0xe5, + 0xb7, 0x41, 0x0b, 0x4f, 0x03, 0x66, 0xc1, 0xcc, 0x5d, 0x1b, 0x38, 0x31, + 0xcb, 0x38, 0x7f, 0xe8, 0x9c, 0xcf, 0xd7, 0xc9, 0xdc, 0x08, 0x43, 0x9e, + 0xf3, 0xed, 0x3c, 0x73, 0x79, 0xd1, 0x26, 0x1e, 0x05, 0x43, 0xe1, 0x8f, + 0x2d, 0x1a, 0x1e, 0x8e, 0xc6, 0x1a, 0xd9, 0x3d, 0x79, 0xee, 0x56, 0x91, + 0x45, 0x67, 0xe7, 0xda, 0x91, 0xe9, 0x07, 0x77, 0x11, 0xbb, 0xc6, 0xd2, + 0xf9, 0x32, 0xd1, 0xa2, 0x1d, 0x71, 0x3e, 0x4d, 0x11, 0xca, 0x2a, 0xbe, + 0x99, 0x86, 0x21, 0x5a, 0x23, 0x0c, 0x7d, 0x3f, 0x7a, 0x11, 0x91, 0x1a, + 0xef, 0x77, 0x4b, 0x92, 0x0d, 0x71, 0x92, 0xbd, 0x8c, 0x47, 0x07, 0x77, + 0xee, 0x6e, 0x8b, 0x41, 0x74, 0xce, 0x58, 0xae, 0x30, 0xb1, 0x17, 0xff, + 0xe1, 0x5b, 0x93, 0xc3, 0xc2, 0x18, 0xe3, 0x7c, 0x7d, 0x42, 0x38, 0x4d, + 0xb9, 0x08, 0x37, 0x3e, 0xe1, 0x5f, 0x03, 0x64, 0xc8, 0xc6, 0x94, 0x5f, + 0xf8, 0x97, 0x0b, 0x9a, 0x08, 0xe9, 0x26, 0xf5, 0x47, 0x9e, 0x2a, 0x6d, + 0x91, 0xe2, 0x82, 0x26, 0xb8, 0x03, 0xb0, 0x67, 0x3e, 0xd3, 0xbc, 0x25, + 0x29, 0xc7, 0x37, 0xa2, 0x85, 0x2b, 0x7b, 0xc6, 0xc4, 0x58, 0x79, 0xce, + 0x37, 0x25, 0x77, 0xc2, 0x81, 0xac, 0x13, 0x80, 0x2e, 0xe8, 0xdc, 0x70, + 0xb9, 0x24, 0x6a, 0x6b, 0xce, 0x0c, 0x77, 0x6a, 0xbe, 0x73, 0x9f, 0xed, + 0xc5, 0x3c, 0x73, 0x64, 0x87, 0xa7, 0xad, 0xf0, 0x78, 0x0d, 0x98, 0xf6, + 0xa9, 0x50, 0xa3, 0x23, 0x1d, 0x77, 0x8d, 0x55, 0x46, 0xc7, 0x1d, 0xbb, + 0x0c, 0x52, 0x6c, 0x37, 0xab, 0x96, 0x28, 0x05, 0x13, 0x34, 0xf5, 0xcc, + 0x37, 0x75, 0xc5, 0x99, 0x7f, 0xae, 0x2d, 0xcf, 0x83, 0x3c, 0x14, 0x5b, + 0xea, 0x1e, 0x53, 0x3d, 0x41, 0xae, 0xb2, 0x86, 0xa6, 0x50, 0xbd, 0x3f, + 0x9e, 0x0a, 0x31, 0x5c, 0x66, 0x99, 0x94, 0xc5, 0x74, 0xb1, 0x7e, 0x03, + 0x89, 0x22, 0x6c, 0x9a, 0xdd, 0x8b, 0x9e, 0xaa, 0x57, 0x5a, 0xb1, 0x8c, + 0xbd, 0x06, 0x8d, 0x5a, 0xbb, 0xcb, 0x59, 0xa3, 0x5c, 0xce, 0xd3, 0xcf, + 0x54, 0x7d, 0xbb, 0x9d, 0x73, 0xf1, 0xf8, 0xcb, 0xe3, 0xd3, 0xb7, 0xc7, + 0x97, 0x0e, 0xb0, 0xc3, 0x26, 0x14, 0x3c, 0xff, 0x42, 0x0d, 0x5b, 0xaa, + 0x5d, 0x19, 0x2e, 0x71, 0xdd, 0xfd, 0xfa, 0x6c, 0xd7, 0xd9, 0x76, 0x38, + 0x72, 0xae, 0x5b, 0xc8, 0xf9, 0x0b, 0xe2, 0xe7, 0x50, 0xa6, 0xf8, 0xeb, + 0xe8, 0xcd, 0xd1, 0x33, 0x0e, 0xe6, 0xbf, 0x4e, 0x72, 0x46, 0x46, 0xf7, + 0xca, 0x4e, 0x16, 0x70, 0x82, 0x67, 0x7b, 0x01, 0x9e, 0x84, 0x5c, 0x66, + 0xa9, 0x9e, 0x0f, 0x16, 0x63, 0x69, 0x85, 0x38, 0xff, 0x94, 0x14, 0x55, + 0xb1, 0x06, 0x42, 0xb3, 0x16, 0x2b, 0xa3, 0x62, 0x87, 0x88, 0x6c, 0x50, + 0xaf, 0x97, 0x5c, 0x65, 0x13, 0xcf, 0x9e, 0x78, 0x36, 0x91, 0xaf, 0x16, + 0x8c, 0x7a, 0x26, 0x05, 0x95, 0x5b, 0x68, 0xf6, 0x99, 0xb0, 0xa6, 0x43, + 0x39, 0x59, 0x2c, 0x2f, 0x36, 0x5f, 0xe3, 0x90, 0x24, 0x31, 0xb7, 0x05, + 0xef, 0x3d, 0x0b, 0xf5, 0xb5, 0x42, 0x2b, 0xa9, 0xd2, 0xfa, 0xa1, 0x64, + 0x00, 0xaa, 0x3f, 0xfb, 0x67, 0x9f, 0xbb, 0x67, 0xb9, 0x9e, 0x64, 0x3a, + 0x57, 0x30, 0x9a, 0x47, 0xde, 0x50, 0x29, 0x53, 0x2e, 0x5f, 0x1f, 0x23, + 0x23, 0xb2, 0x45, 0xb0, 0xf6, 0xc1, 0x2b, 0x2f, 0xaa, 0xea, 0x28, 0x70, + 0x4e, 0x7d, 0x8d, 0x0b, 0x9e, 0x54, 0xba, 0xb8, 0x09, 0xc9, 0xff, 0xb9, + 0xdc, 0x85, 0xe7, 0x1c, 0x0e, 0x59, 0xd9, 0x4f, 0x63, 0x33, 0x15, 0x14, + 0x00, 0x3b, 0x4d, 0x42, 0x5d, 0x87, 0x07, 0xf6, 0x46, 0x9d, 0x34, 0xf9, + 0xd1, 0xe0, 0xf2, 0x78, 0xbe, 0xab, 0x54, 0x49, 0x53, 0xce, 0xae, 0xe7, + 0xa4, 0xe3, 0x4f, 0x9a, 0x65, 0x41, 0x83, 0xc7, 0xf7, 0xf4, 0x48, 0x4a, + 0x45, 0x5d, 0xb0, 0x1d, 0xc6, 0x1f, 0xf6, 0x0f, 0x3c, 0x51, 0xaa, 0x15, + 0x57, 0x9a, 0x14, 0x4b, 0x67, 0xe0, 0x67, 0xb6, 0x21, 0x26, 0x95, 0xd0, + 0xfa, 0xe7, 0x4f, 0x55, 0xba, 0x31, 0x29, 0x94, 0x39, 0x3f, 0x2f, 0xc4, + 0x94, 0xc1, 0x16, 0x1a, 0x8c, 0xf0, 0xb9, 0x5e, 0x2e, 0xba, 0x95, 0xa5, + 0x95, 0xee, 0x56, 0x1e, 0x58, 0x20, 0xae, 0xf6, 0x3e, 0x9d, 0x6b, 0xfc, + 0x77, 0xe3, 0xf5, 0xe7, 0x6b, 0xac, 0x1a, 0xea, 0x8b, 0x38, 0x06, 0x2d, + 0x05, 0xcf, 0x7f, 0xea, 0x4e, 0x82, 0x03, 0xe9, 0xea, 0xb9, 0x38, 0x2f, + 0x78, 0xb5, 0x0d, 0x4a, 0xd1, 0x0e, 0x12, 0xf4, 0xea, 0x85, 0xaf, 0x8a, + 0xd1, 0xe6, 0xca, 0x73, 0xdd, 0x93, 0x4e, 0x1e, 0xa5, 0xc1, 0x31, 0x7e, + 0x2e, 0x24, 0xf5, 0x1a, 0x9e, 0x64, 0x3b, 0x07, 0x1c, 0x8e, 0x1b, 0xa2, + 0x5c, 0xfb, 0xa7, 0x5f, 0x28, 0x6d, 0xd8, 0x8d, 0x64, 0x82, 0xe0, 0xda, + 0x37, 0x3e, 0xdd, 0x09, 0xc5, 0xc2, 0x09, 0xdb, 0xd2, 0x24, 0x9d, 0x7a, + 0xed, 0x0b, 0x42, 0x19, 0x27, 0xc4, 0xa8, 0xaf, 0x89, 0xa8, 0xf1, 0x8c, + 0x87, 0x11, 0xf0, 0x8f, 0xed, 0x55, 0xd9, 0x5a, 0x28, 0xa4, 0x44, 0x27, + 0x47, 0xc1, 0x83, 0x4f, 0xfc, 0x04, 0xe3, 0x29, 0xdf, 0xb7, 0x2b, 0xd1, + 0xf4, 0x0b, 0x05, 0x1a, 0x0f, 0x1e, 0x7d, 0xaa, 0x51, 0x98, 0x1c, 0x7f, + 0x7b, 0x23, 0xeb, 0xdf, 0x78, 0x46, 0xc8, 0xe1, 0xd0, 0x15, 0x5e, 0x96, + 0x70, 0xca, 0xa2, 0xed, 0x9a, 0xfd, 0xf4, 0xf9, 0x23, 0xcf, 0xea, 0xb5, + 0x54, 0xb8, 0xcb, 0x34, 0x78, 0xef, 0xd3, 0xe6, 0x31, 0x37, 0xc1, 0xdb, + 0xa2, 0x95, 0xf5, 0xa4, 0x45, 0x9b, 0x1c, 0x7c, 0xfd, 0x1f, 0x66, 0x5a, + 0xc9, 0x39, 0x0a, 0xb3, 0xf8, 0x8f, 0x70, 0xbc, 0x9f, 0x85, 0x21, 0xcf, + 0x62, 0x57, 0x71, 0x35, 0x19, 0x42, 0x68, 0x5c, 0x5f, 0xdd, 0x04, 0xab, + 0x13, 0xb4, 0x20, 0x7b, 0x4e, 0x37, 0x75, 0x50, 0x27, 0x5a, 0x35, 0x2d, + 0x4d, 0x51, 0xb7, 0x88, 0x27, 0x1d, 0xdd, 0xd7, 0xb4, 0xa9, 0xa0, 0x8e, + 0xc0, 0x3a, 0xb5, 0x53, 0x3b, 0x06, 0xc5, 0xcd, 0x52, 0x54, 0x5b, 0x37, + 0x23, 0x5f, 0xce, 0x3e, 0x78, 0x6d, 0xcf, 0x73, 0x2f, 0xbd, 0x58, 0x25, + 0x0f, 0xe3, 0x90, 0xe1, 0x7f, 0x45, 0xff, 0x8d, 0x40, 0x8a, 0x7c, 0x15, + 0xd3, 0x80, 0x50, 0x2b, 0xc6, 0x40, 0x0f, 0x36, 0xe3, 0xf6, 0xc4, 0x2c, + 0x8d, 0xa3, 0x0e, 0xba, 0x51, 0xe1, 0x81, 0x1d, 0xb8, 0xb4, 0x4b, 0x37, + 0xc9, 0xf8, 0xd6, 0x8e, 0x8c, 0x6b, 0xa3, 0xf9, 0xd6, 0xf7, 0xdf, 0x0b, + 0xcf, 0x71, 0x90, 0x2f, 0x6a, 0x3d, 0x75, 0x80, 0xe6, 0x74, 0x46, 0x05, + 0x46, 0x9c, 0xb7, 0x1b, 0xc5, 0xac, 0xf3, 0x64, 0x9a, 0x30, 0x70, 0x98, + 0x48, 0xa6, 0x58, 0xe8, 0xb6, 0xe0, 0x47, 0x8e, 0x08, 0x91, 0x52, 0x3c, + 0x89, 0x82, 0xcb, 0xcd, 0xd9, 0x7f, 0xad, 0x06, 0x0a, 0x1a, 0xc1, 0xc1, + 0xbb, 0xcb, 0xaf, 0xcf, 0x2e, 0x86, 0xd1, 0x36, 0xe7, 0x49, 0x5f, 0x5e, + 0x9c, 0x7c, 0xf9, 0x8e, 0x14, 0x3e, 0x67, 0x79, 0x3e, 0x8a, 0x49, 0x11, + 0x9c, 0x72, 0xa8, 0x46, 0x32, 0x1f, 0x25, 0xf9, 0xb5, 0x01, 0x8f, 0x03, + 0xd9, 0x84, 0x79, 0x77, 0x96, 0xfb, 0x2a, 0x1d, 0x52, 0x08, 0xdb, 0x2c, + 0xeb, 0x08, 0xff, 0x4a, 0xe9, 0xbb, 0xcc, 0x6b, 0x33, 0x69, 0x35, 0xf7, + 0xdd, 0x57, 0x5f, 0xbf, 0xfc, 0xfa, 0xe0, 0xed, 0x37, 0x43, 0x43, 0xb7, + 0xfb, 0xee, 0xbb, 0xef, 0x42, 0xc7, 0xcb, 0xfe, 0xf6, 0x36, 0xf0, 0xcc, + 0x6e, 0xe2, 0x87, 0x87, 0x41, 0x91, 0x6c, 0x6c, 0xd0, 0x39, 0xda, 0xf0, + 0xb9, 0x04, 0x0a, 0x79, 0x5c, 0x2c, 0xe9, 0xa6, 0xa3, 0xaf, 0xb7, 0x17, + 0xcb, 0x11, 0x43, 0x2c, 0x6f, 0x2f, 0x4b, 0x2d, 0x28, 0x81, 0xb7, 0xb7, + 0x37, 0x36, 0x86, 0xc7, 0xc7, 0xd1, 0xc1, 0xe9, 0xf0, 0x2c, 0x78, 0x77, + 0x73, 0x77, 0x8b, 0x24, 0x81, 0xeb, 0xa4, 0xa4, 0x5f, 0x36, 0x36, 0x4e, + 0x0f, 0x2e, 0x59, 0xc9, 0xf9, 0xf6, 0xf8, 0x62, 0x78, 0x72, 0xf6, 0x96, + 0x77, 0x87, 0x81, 0x20, 0xe2, 0xe9, 0x3d, 0x63, 0x6f, 0x5d, 0xa5, 0xc8, + 0xd3, 0xbc, 0xb7, 0x52, 0x0e, 0x0c, 0x6e, 0x42, 0xa2, 0x8a, 0xc8, 0x6e, + 0xe2, 0x58, 0xb2, 0x3a, 0x3f, 0x12, 0x13, 0x50, 0xb2, 0xaa, 0x61, 0xde, + 0xc7, 0x8d, 0xc8, 0x1b, 0x3a, 0x04, 0xea, 0x3d, 0x19, 0x49, 0xc8, 0x4c, + 0x4f, 0x10, 0x08, 0x10, 0xac, 0x1e, 0x40, 0x24, 0xb4, 0x4e, 0x7c, 0x78, + 0xf2, 0xe6, 0x9c, 0x64, 0xfe, 0x77, 0xc3, 0x83, 0xaf, 0x8e, 0xf9, 0xd1, + 0xaf, 0x92, 0xd2, 0x6f, 0x87, 0x94, 0x9c, 0xe0, 0x4e, 0xde, 0x26, 0x65, + 0x31, 0x8e, 0x17, 0x1c, 0x77, 0x4e, 0xdd, 0xf4, 0x85, 0x2f, 0x06, 0x6d, + 0x8b, 0xf4, 0xe7, 0xc1, 0xa8, 0xe7, 0xfa, 0x3c, 0x90, 0xa2, 0xc3, 0x76, + 0x2f, 0x8e, 0x0f, 0x8e, 0xde, 0x1c, 0x5b, 0x40, 0x95, 0xdc, 0x23, 0xd4, + 0xe8, 0x4d, 0xc6, 0xd5, 0x6b, 0x9c, 0xe9, 0x93, 0xef, 0x2a, 0x5e, 0x7c, + 0xfa, 0x86, 0x4b, 0x32, 0xb4, 0x77, 0xe7, 0x37, 0x0a, 0xcf, 0x0e, 0xae, + 0xd2, 0x6d, 0x69, 0xdd, 0xfa, 0x8b, 0xdd, 0x92, 0x58, 0x64, 0x92, 0xca, + 0x6f, 0xa2, 0xc6, 0x42, 0xfd, 0xfd, 0x6c, 0x67, 0x67, 0xe7, 0x91, 0x79, + 0xc0, 0xd0, 0xa8, 0xb7, 0x00, 0x4d, 0x65, 0x9f, 0x1f, 0xdf, 0xf6, 0xed, + 0x1b, 0x65, 0x86, 0x66, 0x5b, 0xfe, 0x73, 0x2e, 0x8a, 0x77, 0x5a, 0x26, + 0xed, 0x83, 0x1e, 0x67, 0x99, 0xdb, 0x83, 0xca, 0xf2, 0x4c, 0x18, 0xe7, + 0x26, 0x2d, 0x03, 0x9c, 0x34, 0x1b, 0xfa, 0x24, 0x05, 0xfb, 0x89, 0xf3, + 0x55, 0xbd, 0x49, 0xfe, 0x86, 0xda, 0xe4, 0x1f, 0x83, 0x2c, 0xbf, 0xde, + 0x9e, 0xed, 0xe3, 0x92, 0xa5, 0x87, 0x5e, 0x27, 0xa8, 0xfb, 0x73, 0x9f, + 0xb9, 0xd0, 0xa3, 0x82, 0x97, 0x96, 0xa3, 0x1c, 0x3f, 0x62, 0x5c, 0xbf, + 0x60, 0x1d, 0xb0, 0x9d, 0x5c, 0x5f, 0x56, 0x66, 0x6e, 0xe1, 0x18, 0x2d, + 0x9d, 0x14, 0xbc, 0x65, 0x6c, 0x66, 0x1a, 0x10, 0x0b, 0xa1, 0x5e, 0xe8, + 0x73, 0x21, 0x12, 0xfa, 0x35, 0x27, 0xa2, 0x19, 0x94, 0x0f, 0x25, 0xbf, + 0xc5, 0xce, 0x5a, 0xb5, 0x16, 0x03, 0xb6, 0x8a, 0x58, 0x56, 0x9e, 0x91, + 0x8c, 0x1e, 0x4b, 0xfa, 0xcd, 0x10, 0x61, 0xed, 0x41, 0x34, 0x1a, 0x42, + 0xdd, 0xb9, 0xe1, 0x7a, 0x9f, 0xfd, 0x3e, 0x28, 0xa8, 0x70, 0xf4, 0xf2, + 0x11, 0x9d, 0x07, 0x93, 0x92, 0xd5, 0x9f, 0xeb, 0xc5, 0x11, 0x50, 0xcf, + 0x90, 0x46, 0xd1, 0xe8, 0x0b, 0x20, 0x4b, 0x39, 0x82, 0xde, 0x0a, 0xe9, + 0x0e, 0x45, 0x6b, 0x06, 0x89, 0x14, 0xaa, 0x42, 0x5f, 0xb4, 0x27, 0xdb, + 0x88, 0xc6, 0xf9, 0xe8, 0x9e, 0x0e, 0xcf, 0x5d, 0x0d, 0x1c, 0x5a, 0x81, + 0x3b, 0x5e, 0x82, 0xdb, 0x04, 0xb3, 0x0f, 0x65, 0xdd, 0x47, 0x06, 0xb3, + 0x4f, 0xab, 0xc0, 0x6f, 0xfc, 0xf7, 0xf6, 0xa0, 0x28, 0x6e, 0xb6, 0xd3, + 0xc9, 0xfb, 0x49, 0x11, 0xd3, 0x67, 0xc4, 0xd7, 0x1a, 0x1f, 0x0f, 0xe8, + 0xc3, 0xe8, 0x2f, 0x15, 0xbe, 0x5f, 0x8c, 0xdb, 0x67, 0xf2, 0xdf, 0xdb, + 0x0c, 0xfe, 0x05, 0x80, 0xe2, 0x60, 0xe1, 0x5a, 0xb8, 0x07, 0xcd, 0x4a, + 0x70, 0xe6, 0xe8, 0x38, 0xb6, 0x53, 0x46, 0xff, 0x3a, 0xea, 0x28, 0xb9, + 0xfd, 0xb8, 0xb7, 0xb3, 0xb3, 0xbb, 0xbf, 0xfb, 0xd9, 0x8b, 0x9d, 0xfd, + 0xdd, 0xdd, 0xdd, 0xbd, 0xfd, 0xdd, 0xfd, 0xfd, 0xbd, 0x9d, 0x9f, 0xb6, + 0x3b, 0x1b, 0x1b, 0x47, 0x67, 0xdf, 0xbd, 0x3d, 0x3d, 0x3b, 0x38, 0x8a, + 0x2e, 0xcf, 0x48, 0xdf, 0x65, 0x5b, 0x45, 0xcb, 0x49, 0x07, 0xea, 0x53, + 0x99, 0xc9, 0xcd, 0x16, 0x07, 0x25, 0x3a, 0x1a, 0x5d, 0x66, 0x10, 0x8a, + 0xf9, 0xa5, 0xc1, 0x4d, 0x39, 0xfb, 0x30, 0xfb, 0xfa, 0x98, 0x4e, 0x7a, + 0x12, 0x15, 0xe6, 0xf5, 0x1e, 0x6c, 0xad, 0x11, 0xa9, 0x42, 0x99, 0xba, + 0xa2, 0xe3, 0x70, 0xb2, 0xb9, 0xa8, 0xc0, 0x4d, 0x71, 0x4d, 0xfb, 0xb8, + 0x49, 0x29, 0x4e, 0x52, 0x54, 0x03, 0x1a, 0x5c, 0xb1, 0x00, 0xf5, 0x5b, + 0x4a, 0x61, 0x76, 0x92, 0x07, 0xb6, 0x1a, 0x13, 0x3c, 0x5b, 0x3b, 0x25, + 0xba, 0x78, 0x92, 0x07, 0xcc, 0xba, 0xca, 0x26, 0x04, 0xc9, 0xcc, 0xcf, + 0x0e, 0x08, 0x46, 0xa6, 0xc9, 0xa5, 0xb9, 0x0d, 0x19, 0xee, 0xeb, 0x96, + 0xee, 0xb8, 0x1f, 0xe3, 0x1e, 0xbe, 0x0b, 0xfe, 0x26, 0xbc, 0x74, 0xb6, + 0x9d, 0xf9, 0x49, 0x06, 0xf0, 0x6e, 0x78, 0xf2, 0xf6, 0x2b, 0xf8, 0x97, + 0xbe, 0x3b, 0xbb, 0x38, 0x1a, 0x52, 0xb3, 0x7c, 0x1b, 0x6f, 0xc0, 0x02, + 0xc1, 0x87, 0x56, 0x47, 0x25, 0x47, 0x80, 0xbb, 0xfe, 0x13, 0x34, 0x8e, + 0x49, 0xcf, 0xa5, 0x1e, 0x60, 0x98, 0x81, 0xb4, 0xc8, 0x29, 0x05, 0xed, + 0x0c, 0x0e, 0xa7, 0x41, 0x5e, 0xff, 0x62, 0x16, 0x33, 0x18, 0x6c, 0x32, + 0x10, 0x54, 0x35, 0x44, 0x12, 0x6c, 0x33, 0xac, 0xca, 0x36, 0x4b, 0xad, + 0xdb, 0x65, 0x06, 0x56, 0x81, 0x56, 0xb2, 0xdc, 0x01, 0xe8, 0x56, 0x56, + 0x84, 0xcf, 0xd8, 0xd5, 0x34, 0xbe, 0x46, 0x87, 0xcd, 0xe3, 0x17, 0x74, + 0xa6, 0xdd, 0x7f, 0x6c, 0x97, 0xa8, 0xd9, 0xc7, 0xed, 0x9d, 0x80, 0x00, + 0x90, 0xed, 0x8e, 0x3c, 0x09, 0x35, 0x8c, 0x8b, 0x84, 0x84, 0x1a, 0x33, + 0xec, 0x62, 0xe7, 0x42, 0x18, 0x75, 0xa4, 0x5f, 0x2d, 0x50, 0xb9, 0x21, + 0x46, 0x85, 0x7e, 0x90, 0x16, 0x25, 0x92, 0x3d, 0x2a, 0xc9, 0x79, 0x05, + 0xba, 0x40, 0x3c, 0x3c, 0xfa, 0x44, 0xa2, 0x17, 0xf4, 0x45, 0x59, 0x72, + 0x1e, 0x0c, 0x8d, 0x3d, 0x92, 0x88, 0x18, 0xce, 0xfd, 0x51, 0x91, 0xad, + 0xc3, 0x30, 0xcb, 0xe9, 0x38, 0x2d, 0x3b, 0x96, 0x64, 0xe4, 0x81, 0xb7, + 0xbc, 0x03, 0xac, 0x28, 0x69, 0x28, 0x31, 0xdd, 0x1e, 0x5a, 0x75, 0x44, + 0x93, 0x6e, 0xb3, 0xd9, 0x4c, 0xb2, 0x31, 0x3b, 0x9c, 0x80, 0xe2, 0x5b, + 0x49, 0x35, 0x97, 0xca, 0xd5, 0xd5, 0x60, 0x3e, 0xcb, 0xbd, 0x4b, 0xfa, + 0x87, 0x44, 0xe3, 0x1b, 0x4b, 0xf7, 0x76, 0x1f, 0x66, 0xc7, 0x24, 0x71, + 0x12, 0xaf, 0x14, 0xca, 0xd1, 0x98, 0xfe, 0x00, 0xd9, 0xbf, 0xb2, 0x6c, + 0x61, 0xf5, 0x92, 0x06, 0x57, 0xad, 0xa6, 0x86, 0x6c, 0x20, 0x10, 0xd8, + 0x25, 0x33, 0x05, 0xcb, 0xa3, 0x05, 0xf5, 0xdc, 0xab, 0xbc, 0x17, 0x69, + 0x59, 0x24, 0xd3, 0x2b, 0x2d, 0x42, 0xa7, 0x75, 0xdf, 0x46, 0xab, 0xa0, + 0x01, 0x99, 0x84, 0xc4, 0xff, 0x2e, 0xe7, 0x2e, 0x23, 0x26, 0x53, 0x9e, + 0x71, 0x0d, 0xc6, 0xa9, 0x08, 0xde, 0x55, 0x46, 0x21, 0x9e, 0x99, 0x81, + 0x41, 0xdc, 0x6e, 0x44, 0x0e, 0xa0, 0xb7, 0x36, 0x05, 0x87, 0x06, 0x07, + 0x48, 0x2e, 0x50, 0x47, 0xf0, 0xe0, 0x72, 0x44, 0xab, 0xed, 0x9e, 0xe3, + 0xb5, 0x63, 0x1b, 0x37, 0x56, 0xed, 0x30, 0x2c, 0xab, 0x22, 0x30, 0x84, + 0x06, 0xe7, 0xe7, 0x07, 0x45, 0x03, 0x84, 0x51, 0x9c, 0x0e, 0x1a, 0x82, + 0x55, 0x97, 0x85, 0x5b, 0x51, 0xa0, 0x78, 0xc7, 0xae, 0x78, 0x50, 0xdb, + 0x31, 0x54, 0x8e, 0xb4, 0xfe, 0x1c, 0x7e, 0xf8, 0x08, 0x36, 0x87, 0x64, + 0x42, 0xff, 0x74, 0x25, 0xa7, 0x24, 0x9d, 0x3f, 0x7e, 0x18, 0x75, 0x10, + 0x1f, 0xd5, 0x31, 0xe6, 0xaa, 0x79, 0x49, 0xb0, 0x86, 0xfa, 0x28, 0x19, + 0x71, 0xc0, 0x22, 0xd2, 0xbe, 0x05, 0xed, 0xb3, 0x02, 0xe7, 0x88, 0x83, + 0x20, 0x61, 0xbe, 0xfb, 0xd1, 0x97, 0x71, 0x91, 0x8e, 0x7b, 0xd1, 0x51, + 0x4a, 0xb2, 0x7a, 0xd9, 0xf3, 0x98, 0x8c, 0x0e, 0xc9, 0x72, 0x10, 0x7d, + 0x67, 0xd5, 0x41, 0xe9, 0xce, 0x45, 0xec, 0x29, 0x4c, 0x8b, 0x2e, 0x51, + 0x6d, 0x43, 0x6c, 0xb6, 0x6a, 0x75, 0x0d, 0x93, 0xc2, 0xd0, 0xb6, 0x87, + 0x9b, 0xc3, 0x66, 0xc6, 0xc5, 0x6d, 0x15, 0x68, 0x5d, 0xa4, 0xaa, 0x82, + 0x6d, 0x87, 0x2c, 0x02, 0x61, 0x7d, 0xe7, 0x5a, 0xe8, 0x42, 0x69, 0x2e, + 0x9b, 0x5b, 0x80, 0x92, 0x77, 0xa4, 0xaa, 0x2d, 0xa7, 0xd0, 0xb0, 0x19, + 0xf3, 0xf4, 0xe2, 0x36, 0xb2, 0xe3, 0xba, 0x81, 0xd0, 0x72, 0x5a, 0x27, + 0x5e, 0x11, 0xe5, 0x27, 0x67, 0x97, 0xc7, 0xbf, 0x8b, 0x86, 0x29, 0xd7, + 0x59, 0x74, 0x94, 0xc3, 0x87, 0x9c, 0x9d, 0xdd, 0xea, 0x85, 0x6a, 0xec, + 0xa9, 0x4b, 0x53, 0x55, 0xb3, 0xa0, 0xe5, 0x42, 0x48, 0xf9, 0x9c, 0x7b, + 0x29, 0x5f, 0xce, 0x2b, 0x03, 0x9a, 0xbd, 0x4b, 0xe3, 0xc8, 0x15, 0xb0, + 0xe6, 0xb9, 0xbf, 0x67, 0xd2, 0x7f, 0xef, 0x21, 0xc6, 0x97, 0xfa, 0x22, + 0x00, 0xe0, 0xb8, 0x1d, 0xb5, 0x09, 0xc0, 0x96, 0x32, 0x4e, 0x73, 0xba, + 0x82, 0x99, 0x4f, 0x8d, 0xc5, 0x0c, 0x88, 0x18, 0x37, 0x8c, 0x9d, 0xcd, + 0x1c, 0xf1, 0x88, 0xe8, 0x0a, 0xcb, 0x35, 0x46, 0x3a, 0x9c, 0xc0, 0x83, + 0xab, 0x69, 0xd1, 0xce, 0x5d, 0xc8, 0x4a, 0x91, 0x10, 0x8a, 0xb4, 0x3a, + 0x54, 0xe8, 0x50, 0x08, 0xc2, 0x0d, 0xc4, 0x8d, 0x51, 0xab, 0x90, 0x25, + 0xe6, 0xee, 0x66, 0x0b, 0x64, 0x3b, 0x0e, 0xeb, 0x61, 0x3a, 0x9d, 0x44, + 0xb3, 0x95, 0xa6, 0x3c, 0x2b, 0x1f, 0xe6, 0x1c, 0x1d, 0xa8, 0x2b, 0x9f, + 0x7d, 0xd6, 0xb8, 0x77, 0x1f, 0xdc, 0xd3, 0xfb, 0xf4, 0x75, 0xa0, 0x16, + 0x4d, 0xd9, 0xe7, 0x68, 0xa5, 0x80, 0xbc, 0x6e, 0xd4, 0x90, 0x39, 0xc3, + 0x34, 0x46, 0xe9, 0xd0, 0xd9, 0x0f, 0x5b, 0xf6, 0xc5, 0x55, 0x3b, 0xda, + 0x10, 0xa1, 0x5b, 0xc6, 0x19, 0x17, 0xe2, 0xb9, 0x5e, 0x23, 0x85, 0xda, + 0xc9, 0xab, 0x0f, 0x36, 0x10, 0x50, 0x48, 0x48, 0x1a, 0xb0, 0x4c, 0xc3, + 0xf2, 0xd6, 0x30, 0xd3, 0x86, 0x39, 0xe7, 0x44, 0x07, 0xe3, 0x30, 0x0b, + 0xab, 0x67, 0x6d, 0xe0, 0x20, 0xf3, 0xdd, 0x8d, 0xd1, 0x7f, 0xb7, 0x7e, + 0x38, 0xef, 0xfe, 0x99, 0xe1, 0x1c, 0x44, 0x8f, 0x06, 0xfb, 0x69, 0xfd, + 0x03, 0x66, 0x22, 0x85, 0x9e, 0xd4, 0x49, 0x06, 0x83, 0x90, 0xd1, 0x9f, + 0xac, 0xd1, 0x98, 0x9d, 0x00, 0xa3, 0x2a, 0xd6, 0x64, 0x53, 0x5d, 0x99, + 0x67, 0xf2, 0x34, 0xe4, 0x47, 0x6e, 0xbf, 0x67, 0x43, 0xf9, 0xd8, 0xe1, + 0x5a, 0x9e, 0xbb, 0x45, 0xab, 0xfa, 0xfe, 0x24, 0x03, 0x4b, 0x5a, 0x08, + 0x62, 0xfe, 0x05, 0x81, 0x5c, 0x9e, 0x67, 0xec, 0xf1, 0x07, 0x04, 0x6e, + 0xd0, 0x60, 0x7d, 0x09, 0x39, 0x9e, 0x09, 0x32, 0xa3, 0x6a, 0xaf, 0xe9, + 0x67, 0xbb, 0x02, 0xd7, 0x44, 0xec, 0x51, 0xb1, 0xf1, 0x48, 0xcf, 0xa4, + 0xcb, 0x6a, 0x81, 0xf0, 0xc3, 0x6a, 0xb9, 0x2e, 0xb9, 0x57, 0xa4, 0xe8, + 0x3c, 0x56, 0x2e, 0xa8, 0x65, 0x8d, 0xc2, 0x5f, 0x32, 0x46, 0xa9, 0x6b, + 0xac, 0xe5, 0x50, 0xa4, 0xc8, 0x2a, 0xee, 0xf9, 0x24, 0x91, 0x96, 0xca, + 0xb5, 0x61, 0xc0, 0x87, 0x01, 0xe3, 0x15, 0x72, 0x06, 0xfb, 0x8e, 0xae, + 0x96, 0x39, 0xc2, 0x33, 0x34, 0x1b, 0x5d, 0x93, 0x09, 0xa9, 0xd1, 0x8b, + 0x83, 0xb7, 0x5f, 0x1d, 0xe3, 0xbc, 0x33, 0xdb, 0xf5, 0xa9, 0xb3, 0x9c, + 0x1b, 0xd7, 0x87, 0xb3, 0xb8, 0x10, 0xb0, 0x8e, 0x94, 0xdf, 0x98, 0x2c, + 0xc7, 0xec, 0xa7, 0x7e, 0xa7, 0xc7, 0x20, 0x2d, 0x80, 0xd3, 0x39, 0x4d, + 0x79, 0x10, 0xcc, 0x72, 0xd5, 0x25, 0xbc, 0x11, 0x99, 0x7a, 0x0a, 0x8e, + 0xc1, 0x22, 0x0d, 0xad, 0x10, 0x74, 0xd9, 0x62, 0x39, 0x5a, 0xc4, 0x9a, + 0xa2, 0x15, 0x87, 0x59, 0x3f, 0xaa, 0x09, 0x0c, 0x2a, 0x53, 0xe0, 0xbb, + 0x43, 0x02, 0x22, 0x9d, 0xd4, 0x99, 0x43, 0xea, 0x1c, 0x84, 0x1a, 0x97, + 0xe0, 0x23, 0xed, 0xee, 0xec, 0x78, 0xcc, 0x1d, 0x9f, 0xbd, 0xd4, 0x20, + 0xb2, 0x3c, 0xda, 0xe9, 0xbf, 0x78, 0xb1, 0x8e, 0x7e, 0x5c, 0xa3, 0xc8, + 0x42, 0x79, 0xf6, 0xd1, 0x6d, 0xf6, 0xf9, 0xd1, 0x75, 0x6d, 0xb6, 0xc8, + 0x16, 0x28, 0xd3, 0xa1, 0xee, 0xf8, 0xc2, 0xc5, 0x7c, 0xa8, 0x0e, 0x22, + 0xb6, 0x2f, 0xd8, 0x22, 0xe7, 0x4e, 0xc0, 0xe0, 0xa5, 0xdc, 0x88, 0x9c, + 0x24, 0x00, 0x08, 0x29, 0x53, 0x57, 0x16, 0xec, 0x91, 0x4f, 0x9d, 0x89, + 0xf6, 0xa3, 0x16, 0x26, 0x10, 0x31, 0xd7, 0x2c, 0xd1, 0x55, 0x73, 0x36, + 0xc6, 0x48, 0xdf, 0x9d, 0xb3, 0x32, 0x4a, 0xba, 0x8b, 0x08, 0xec, 0x24, + 0x7d, 0xc2, 0x30, 0xb1, 0x5d, 0x93, 0x45, 0xdf, 0x69, 0x01, 0x3b, 0x2e, + 0x3e, 0xc0, 0xbe, 0x19, 0x81, 0x2c, 0x4e, 0xe7, 0x5a, 0x49, 0xce, 0xed, + 0xfe, 0x1a, 0xc5, 0xf8, 0x32, 0xea, 0x07, 0x2c, 0x5d, 0x51, 0x78, 0x98, + 0x9f, 0xcf, 0x56, 0x26, 0xa3, 0x68, 0x0f, 0x68, 0xdd, 0x0c, 0x5d, 0x95, + 0x8a, 0xbe, 0x3d, 0x15, 0x2c, 0x41, 0x41, 0x0d, 0x96, 0xde, 0xd2, 0xa5, + 0x74, 0x83, 0x2b, 0xa2, 0xc6, 0xc0, 0x3f, 0x6e, 0x28, 0x71, 0x4b, 0x6d, + 0x4e, 0x93, 0x62, 0x53, 0xce, 0x7f, 0x54, 0xed, 0xa4, 0xae, 0x28, 0x2b, + 0x64, 0x23, 0x3f, 0x88, 0xf3, 0x93, 0xfd, 0xeb, 0x63, 0x7b, 0x64, 0x54, + 0x7c, 0x38, 0xad, 0xe6, 0x7a, 0x6d, 0x94, 0xad, 0x06, 0x83, 0x4b, 0x79, + 0x5f, 0xba, 0x8e, 0xdb, 0xbb, 0x93, 0xf7, 0x6d, 0x39, 0x5a, 0x88, 0x9e, + 0xaf, 0x7d, 0x45, 0x66, 0x72, 0xd1, 0xde, 0x86, 0x23, 0xc1, 0xda, 0x09, + 0xb8, 0x45, 0x5a, 0xe5, 0xe0, 0x1b, 0x91, 0xe6, 0x4c, 0x00, 0xb7, 0x89, + 0xe9, 0x06, 0x40, 0xb3, 0xe0, 0x6d, 0xb7, 0x88, 0xa6, 0xb8, 0x52, 0x74, + 0x0a, 0x14, 0x26, 0x39, 0x41, 0x26, 0x0a, 0xbb, 0x4c, 0x3c, 0xd8, 0x47, + 0xbe, 0x9c, 0xcb, 0x2c, 0xe0, 0x70, 0xa0, 0xc1, 0xc7, 0xc5, 0x0d, 0x9c, + 0xec, 0x4e, 0x41, 0x6a, 0xde, 0x44, 0x21, 0x60, 0x05, 0x5d, 0x3d, 0x72, + 0xef, 0x80, 0xab, 0x56, 0x96, 0xa2, 0xba, 0x02, 0x81, 0x3e, 0xf1, 0xb1, + 0x94, 0xcf, 0x2c, 0xa3, 0xd5, 0x58, 0x0a, 0xe2, 0x6f, 0x94, 0x38, 0xac, + 0x91, 0x5c, 0x55, 0x1f, 0x93, 0xb6, 0x44, 0x94, 0x81, 0xfa, 0x83, 0xba, + 0x70, 0x48, 0xaf, 0xad, 0x2d, 0x21, 0x64, 0x59, 0x80, 0x16, 0x48, 0xba, + 0xad, 0xb1, 0x59, 0xcd, 0x22, 0x81, 0x12, 0xea, 0xa1, 0x6e, 0x34, 0xef, + 0x86, 0x31, 0xf1, 0x25, 0xc8, 0x0f, 0x16, 0x7c, 0x46, 0x22, 0xcf, 0xa4, + 0x4f, 0xcc, 0x50, 0x06, 0x28, 0x49, 0x2d, 0x12, 0x58, 0x35, 0xbc, 0x74, + 0xa5, 0xca, 0x4d, 0x0e, 0xfc, 0xf6, 0xf8, 0xe2, 0xcb, 0xb3, 0xe1, 0x31, + 0x71, 0x88, 0xa3, 0xe3, 0x2f, 0xdf, 0x31, 0xf7, 0xe0, 0x1d, 0x13, 0x23, + 0x05, 0x70, 0x19, 0x04, 0x65, 0x19, 0xc9, 0x44, 0x4e, 0x46, 0x96, 0x9c, + 0xc8, 0x9e, 0x51, 0x86, 0xc6, 0x74, 0xa9, 0x14, 0x3d, 0x4d, 0x44, 0xab, + 0x4d, 0x11, 0x4d, 0xe7, 0x21, 0x4b, 0x58, 0x76, 0x9e, 0x33, 0xc6, 0x70, + 0x69, 0x18, 0x1d, 0x86, 0x71, 0x5b, 0xec, 0x7b, 0xd9, 0xf8, 0x4e, 0x6c, + 0x18, 0x7a, 0x20, 0x7c, 0x15, 0x1d, 0xab, 0x96, 0x33, 0x08, 0x4a, 0xe1, + 0x2a, 0x7c, 0xf5, 0x34, 0x93, 0xdb, 0x8b, 0xd3, 0x88, 0x70, 0x96, 0x81, + 0xcb, 0x9e, 0xa2, 0xea, 0x9e, 0xe2, 0x4f, 0x6a, 0xed, 0x9a, 0x42, 0x08, + 0x8e, 0xd8, 0x8c, 0xa4, 0x60, 0x4c, 0x95, 0x2d, 0x83, 0x0b, 0x15, 0x89, + 0x24, 0x2c, 0xcb, 0xed, 0xa9, 0x66, 0x7e, 0x09, 0x5a, 0x51, 0x58, 0xc5, + 0x4d, 0x3e, 0x12, 0x0c, 0x19, 0x20, 0xda, 0x82, 0xe0, 0x07, 0x4b, 0x7d, + 0x17, 0x07, 0x2e, 0xc5, 0x2b, 0x1f, 0x78, 0xbe, 0x94, 0x74, 0xee, 0xd6, + 0xb3, 0x83, 0x4b, 0x99, 0x29, 0x27, 0x97, 0xca, 0x85, 0xec, 0x2a, 0x6a, + 0xc3, 0x8f, 0xe4, 0x33, 0xa3, 0x38, 0x30, 0xc7, 0xe1, 0xa6, 0xc9, 0x79, + 0xe2, 0xd0, 0xb8, 0x40, 0x02, 0x5e, 0x5f, 0x10, 0xc6, 0xec, 0x2c, 0x1a, + 0xce, 0x53, 0xcf, 0x89, 0x56, 0x6f, 0x37, 0x6f, 0x29, 0x8c, 0x47, 0x51, + 0xbd, 0xee, 0xa7, 0x9e, 0x41, 0x69, 0x5d, 0x6a, 0xc1, 0x94, 0x0f, 0x65, + 0x68, 0x62, 0xdb, 0xd8, 0xd8, 0x38, 0x3a, 0xbe, 0x3c, 0x38, 0x39, 0x3d, + 0x3e, 0x8a, 0x4e, 0xde, 0xbe, 0x3e, 0xbb, 0x78, 0x73, 0x70, 0xa9, 0x4e, + 0xa6, 0x23, 0xa7, 0xa3, 0xba, 0x72, 0x26, 0xce, 0x04, 0xe0, 0xf5, 0x57, + 0x90, 0x30, 0xed, 0xe2, 0xb5, 0x02, 0x06, 0xc9, 0x32, 0x24, 0x95, 0x35, + 0xd8, 0x88, 0xd4, 0x39, 0xe5, 0x0b, 0x94, 0xf0, 0xfd, 0xbc, 0xed, 0x1c, + 0x0a, 0x03, 0x5b, 0x4e, 0xd3, 0x30, 0x81, 0xfd, 0xf5, 0x68, 0x53, 0xae, + 0x18, 0x97, 0xdc, 0x4d, 0xc0, 0xad, 0x47, 0x16, 0x0c, 0x68, 0xb2, 0x7f, + 0xc2, 0xb9, 0xad, 0x10, 0x2f, 0xb5, 0xaa, 0xf9, 0x49, 0xe9, 0x8a, 0xf9, + 0x31, 0xb9, 0x70, 0x3b, 0x41, 0x76, 0x15, 0x51, 0x20, 0xaa, 0x06, 0x07, + 0x6d, 0xba, 0x44, 0x25, 0xab, 0x40, 0x22, 0x2e, 0x4d, 0x7c, 0x12, 0xee, + 0x2f, 0x67, 0x72, 0x6d, 0xb0, 0xd7, 0xb6, 0xd4, 0xda, 0x18, 0x0f, 0x65, + 0x32, 0x2f, 0xb8, 0x0e, 0x94, 0x9d, 0x75, 0x7e, 0xc5, 0x33, 0x51, 0xb3, + 0xe3, 0x2a, 0xe8, 0x61, 0xd8, 0xd4, 0xa6, 0x73, 0x42, 0x90, 0xe4, 0xd2, + 0x3f, 0x51, 0x14, 0x33, 0x5e, 0x0b, 0xae, 0xf9, 0xcb, 0x3f, 0xe7, 0x3e, + 0xad, 0x5f, 0xa3, 0x34, 0xbc, 0xc2, 0x12, 0xd4, 0x3d, 0xd2, 0xd3, 0xe6, + 0xcf, 0x6d, 0x61, 0x94, 0x76, 0x44, 0x0f, 0x71, 0x11, 0xc9, 0xbe, 0x76, + 0xaf, 0x61, 0x52, 0xd0, 0x85, 0x6d, 0x0b, 0x45, 0x78, 0x82, 0x10, 0x30, + 0xca, 0x04, 0xa8, 0x04, 0x6b, 0x20, 0xf3, 0x00, 0x7d, 0x97, 0x66, 0x34, + 0x66, 0x11, 0xdf, 0xdb, 0x79, 0x5d, 0x91, 0xa6, 0x46, 0x35, 0x6c, 0x57, + 0x20, 0x6c, 0xe8, 0x9e, 0xc5, 0x4a, 0x06, 0x2f, 0xc4, 0xde, 0xef, 0x8a, + 0xf5, 0xdf, 0x34, 0x6c, 0x73, 0x26, 0x59, 0x6d, 0x50, 0x3d, 0x07, 0x4d, + 0x33, 0x75, 0x65, 0x52, 0xe1, 0x8b, 0x55, 0x4f, 0x65, 0xc8, 0xe9, 0xad, + 0x6b, 0x8c, 0x7e, 0xd2, 0x36, 0x02, 0xe5, 0xe2, 0x28, 0xef, 0xa9, 0xc5, + 0xbc, 0x62, 0x78, 0xec, 0x18, 0xad, 0x61, 0x43, 0x01, 0x19, 0x94, 0x53, + 0xc2, 0x74, 0x1a, 0xe6, 0xe1, 0x8e, 0xb9, 0xbe, 0x14, 0xd7, 0xe8, 0xd4, + 0x7a, 0x72, 0x41, 0x2c, 0xb9, 0x78, 0xd4, 0x15, 0x79, 0x14, 0x4c, 0x6f, + 0xbe, 0x61, 0x48, 0x89, 0xf6, 0x92, 0xc5, 0x09, 0x80, 0xfb, 0x4b, 0x3e, + 0x36, 0x98, 0x3c, 0xbb, 0x33, 0x93, 0xb8, 0x80, 0x8d, 0x11, 0x21, 0xa5, + 0x72, 0x67, 0x80, 0x04, 0x30, 0x57, 0x67, 0xb6, 0xc4, 0xe5, 0xe3, 0xcb, + 0x0a, 0xf7, 0x05, 0xb6, 0x22, 0xe6, 0xac, 0x32, 0x3b, 0x14, 0x12, 0xdc, + 0xe6, 0x5a, 0xb1, 0xba, 0xf3, 0xd4, 0x0c, 0x22, 0x94, 0x34, 0x64, 0xe3, + 0x3c, 0x2b, 0xe4, 0xbc, 0x41, 0xd2, 0xee, 0xf8, 0xea, 0x0f, 0x9d, 0xc5, + 0x0d, 0xf5, 0xd1, 0x89, 0xae, 0x59, 0x57, 0x19, 0x65, 0x61, 0xbc, 0x9b, + 0x6e, 0xcb, 0x44, 0x1e, 0x7f, 0x75, 0x11, 0x5f, 0xc5, 0xc9, 0xf4, 0xf7, + 0x7b, 0x3b, 0xc3, 0xf8, 0x7a, 0x39, 0x8d, 0xff, 0x80, 0x17, 0x5f, 0x3d, + 0x79, 0xb2, 0xb7, 0xf3, 0xe9, 0x67, 0x3b, 0x9d, 0x9a, 0xab, 0x28, 0xf0, + 0x33, 0xc3, 0x6d, 0x88, 0x72, 0xcd, 0xcc, 0x77, 0xd1, 0xcf, 0x60, 0x7c, + 0x9d, 0x72, 0x37, 0x5f, 0xb3, 0xf0, 0xa2, 0x6b, 0x10, 0x23, 0x20, 0x42, + 0xd8, 0xa4, 0xd6, 0x85, 0xa2, 0x1b, 0x97, 0xe8, 0xfa, 0x93, 0xdd, 0x7d, + 0x61, 0x65, 0xd7, 0xb0, 0x4b, 0xc5, 0x42, 0xb1, 0xd1, 0xcb, 0x74, 0x4e, + 0x37, 0xd0, 0xe7, 0x51, 0x19, 0x5f, 0x3b, 0x5a, 0x45, 0x0b, 0xae, 0x92, + 0xb3, 0x59, 0xc2, 0xaf, 0x52, 0xd4, 0x14, 0x1e, 0x44, 0x9b, 0x97, 0x02, + 0x99, 0x06, 0xc1, 0x67, 0x91, 0xe4, 0x53, 0xc9, 0x76, 0x8d, 0x67, 0x16, + 0x72, 0xc9, 0xef, 0xb3, 0x33, 0x7e, 0xb0, 0x98, 0xba, 0xba, 0xd5, 0xd0, + 0xc0, 0x52, 0x4f, 0x70, 0xd3, 0x45, 0xe1, 0xeb, 0x24, 0xc9, 0x75, 0x13, + 0x82, 0xb1, 0xd1, 0x62, 0xa1, 0x0a, 0x44, 0x07, 0xb3, 0xea, 0xb9, 0x82, + 0x2b, 0xfd, 0x89, 0xcd, 0x74, 0x80, 0xdf, 0x51, 0x8d, 0x4e, 0x8b, 0xea, + 0x76, 0x16, 0x92, 0x1f, 0xe4, 0x8a, 0x7c, 0x68, 0x3a, 0x71, 0x65, 0x5e, + 0x71, 0xe9, 0x37, 0xe6, 0xa5, 0x29, 0xb9, 0xbb, 0x9f, 0xbf, 0x02, 0x41, + 0xec, 0x7e, 0xfe, 0x07, 0xf7, 0xd9, 0x9e, 0x7e, 0xb6, 0xf7, 0xf9, 0x1f, + 0x06, 0x03, 0x8c, 0x8f, 0x29, 0xa4, 0x6b, 0x5f, 0x77, 0x35, 0xe9, 0x30, + 0xd6, 0x23, 0x2c, 0x7f, 0x39, 0xe4, 0x1d, 0xd9, 0xeb, 0x8e, 0xf5, 0x1c, + 0xae, 0x72, 0x4f, 0x6d, 0xef, 0x8e, 0x6f, 0xa5, 0x06, 0x58, 0x0c, 0x54, + 0xcf, 0xa2, 0x6d, 0xd1, 0x9d, 0x89, 0x10, 0xed, 0x14, 0x0e, 0xb2, 0x24, + 0x8e, 0xfe, 0xc8, 0x94, 0xfa, 0xc7, 0x8d, 0x48, 0x4d, 0xe4, 0xbc, 0x1d, + 0x28, 0x4b, 0x18, 0x19, 0xd9, 0x4a, 0x6d, 0x79, 0x81, 0x7c, 0xe3, 0x96, + 0x39, 0xca, 0x92, 0xef, 0xc0, 0xa0, 0xd0, 0xc5, 0x9f, 0x14, 0xf6, 0x47, + 0x36, 0x9c, 0xf9, 0x19, 0xf2, 0x19, 0x24, 0x2b, 0x88, 0x24, 0x8c, 0x92, + 0x79, 0x03, 0x9e, 0xfc, 0xfd, 0xf7, 0xdf, 0xab, 0x38, 0x45, 0xbf, 0xe8, + 0xb8, 0x6f, 0x88, 0x13, 0x4d, 0x88, 0xb9, 0xcd, 0x50, 0x4e, 0x41, 0x2b, + 0x93, 0xe8, 0x85, 0x7f, 0xa5, 0xf3, 0x94, 0x46, 0x68, 0x63, 0xa5, 0x8e, + 0x2f, 0x8f, 0x0c, 0x4b, 0x7a, 0x2c, 0x4c, 0x0c, 0x94, 0xb9, 0x09, 0x57, + 0xa0, 0x0f, 0xb5, 0x08, 0x09, 0x9f, 0x77, 0x0e, 0x9b, 0x0e, 0xda, 0xa7, + 0xc6, 0x4c, 0x0d, 0xd6, 0x8d, 0x04, 0xc5, 0x8a, 0x8c, 0xf3, 0xaa, 0x23, + 0x0f, 0x5e, 0xa7, 0x1d, 0x35, 0xf0, 0xca, 0x27, 0x1d, 0x9f, 0x43, 0x2a, + 0xbb, 0x81, 0x2d, 0x7b, 0x25, 0x82, 0x53, 0xfa, 0x73, 0xf2, 0x6a, 0x77, + 0xa7, 0xfd, 0x09, 0xd6, 0x86, 0x22, 0x46, 0x5f, 0x7d, 0xe5, 0x0d, 0xe4, + 0x8f, 0x3d, 0x9f, 0x4e, 0xe4, 0x69, 0x2d, 0x2a, 0x88, 0x22, 0x2b, 0xaf, + 0x3a, 0x23, 0xbe, 0x5f, 0xf9, 0xff, 0xd7, 0x8c, 0x03, 0x01, 0x5f, 0xfa, + 0x6c, 0xb1, 0x1c, 0xcd, 0xd2, 0xca, 0x80, 0xb7, 0x79, 0x82, 0x9f, 0xc3, + 0xa4, 0x92, 0x38, 0xda, 0x40, 0x35, 0x5a, 0x91, 0xfc, 0xba, 0x57, 0x59, + 0x36, 0x8a, 0xf3, 0xae, 0x1a, 0x51, 0x6d, 0x9c, 0xdd, 0xdd, 0xbd, 0x27, + 0x4f, 0x9f, 0x75, 0x07, 0x2a, 0xa5, 0x81, 0x41, 0x40, 0x31, 0x4b, 0x55, + 0x95, 0x91, 0x26, 0x62, 0x39, 0x9e, 0x61, 0x6d, 0xf9, 0x56, 0x67, 0x03, + 0xf3, 0x30, 0xee, 0xee, 0x95, 0xf4, 0xf6, 0x07, 0xee, 0xe7, 0x15, 0xba, + 0xf8, 0x43, 0x3a, 0x79, 0xe5, 0x66, 0xf8, 0x07, 0x9e, 0xcb, 0x2b, 0x9d, + 0x04, 0xed, 0xab, 0xc5, 0xd2, 0x17, 0x5b, 0x1b, 0xad, 0x5c, 0xad, 0x75, + 0x73, 0x6d, 0x13, 0x37, 0x30, 0x69, 0x78, 0xba, 0xfa, 0x13, 0xb1, 0xdc, + 0x42, 0x56, 0xf5, 0x81, 0xe4, 0xdb, 0x0f, 0x7d, 0x6a, 0xa5, 0xcf, 0xad, + 0xf4, 0x3d, 0xbb, 0x8e, 0x66, 0x9c, 0x38, 0xc2, 0x1b, 0xd1, 0xd3, 0x6c, + 0x82, 0x29, 0x6c, 0x1d, 0x2a, 0x08, 0x64, 0x19, 0xfc, 0x48, 0x87, 0x5f, + 0x9d, 0x74, 0xd5, 0x41, 0x2b, 0x8a, 0x5b, 0xaf, 0xcd, 0xb8, 0xe6, 0xa2, + 0x26, 0x14, 0x85, 0x60, 0xc3, 0xe0, 0xc1, 0x63, 0xf6, 0x37, 0x72, 0xbf, + 0x92, 0xfa, 0x43, 0x9d, 0xe9, 0x9d, 0x33, 0x65, 0x73, 0x5d, 0x8e, 0x4f, + 0xc2, 0x66, 0x80, 0xea, 0x22, 0x8e, 0x47, 0x58, 0xaa, 0x17, 0x2e, 0x6b, + 0xa0, 0xff, 0xda, 0x79, 0x03, 0x5c, 0x94, 0xba, 0x3e, 0x4a, 0x5f, 0x09, + 0x37, 0x31, 0x06, 0xd1, 0x71, 0x25, 0xa8, 0x84, 0x12, 0x42, 0xde, 0x01, + 0x5f, 0xc6, 0x28, 0xa9, 0x14, 0x36, 0x12, 0xb1, 0x90, 0xb9, 0xe7, 0x4b, + 0x57, 0xb3, 0xe8, 0xf3, 0x08, 0xb8, 0xff, 0xf2, 0x96, 0xc6, 0xa1, 0x57, + 0xea, 0xbb, 0xe2, 0x25, 0x55, 0x0e, 0x9c, 0xe7, 0x23, 0xf0, 0xda, 0xaa, + 0x58, 0x20, 0x2d, 0xc8, 0x44, 0x47, 0x2b, 0x55, 0xff, 0xb9, 0x85, 0xee, + 0x9f, 0x71, 0x08, 0x5e, 0xf2, 0x36, 0xe0, 0xeb, 0xcf, 0xbb, 0x62, 0xc2, + 0x73, 0xef, 0xf2, 0x30, 0x6a, 0x9e, 0x15, 0x21, 0xd0, 0x70, 0x3e, 0xd9, + 0x95, 0x83, 0x73, 0x11, 0x59, 0x8c, 0x93, 0x4c, 0xe7, 0x50, 0xa7, 0xd2, + 0x64, 0x3a, 0xd1, 0xb2, 0x6a, 0x2a, 0x0b, 0xf5, 0xb4, 0xf1, 0x84, 0x33, + 0x78, 0x59, 0x76, 0xec, 0x72, 0x00, 0x0e, 0xde, 0xeb, 0x3a, 0x74, 0x18, + 0x16, 0xa9, 0x13, 0xb0, 0xbb, 0x3c, 0xb1, 0x92, 0x63, 0x1b, 0x9a, 0x5c, + 0xe6, 0x65, 0xf9, 0x70, 0x62, 0x45, 0x20, 0x3a, 0xf8, 0x58, 0x7d, 0xc9, + 0x41, 0x6e, 0x1c, 0x91, 0xd7, 0x9c, 0x08, 0xa3, 0x9d, 0xbe, 0xe2, 0xe5, + 0xde, 0x1d, 0x5c, 0xa7, 0x57, 0xb2, 0x18, 0xc4, 0x22, 0xaf, 0x93, 0x6d, + 0xfa, 0xb3, 0x47, 0x9f, 0xef, 0xb1, 0x4c, 0xc6, 0xbf, 0x3c, 0x81, 0xdf, + 0x3e, 0xbc, 0xf9, 0x83, 0xb3, 0xe1, 0xce, 0x05, 0xff, 0x92, 0xba, 0x1b, + 0x5f, 0x4d, 0xd2, 0x3a, 0x4a, 0x90, 0xb9, 0x02, 0x6f, 0x7a, 0x41, 0xb3, + 0x17, 0x98, 0x9b, 0x01, 0xbc, 0x96, 0x41, 0x3a, 0x29, 0x7c, 0x98, 0x9b, + 0x3a, 0x16, 0x55, 0x4c, 0x67, 0xa9, 0x3b, 0x55, 0x83, 0x09, 0x07, 0xda, + 0xe2, 0x5e, 0x4d, 0xee, 0xb7, 0x7a, 0x61, 0xf0, 0x90, 0x55, 0xda, 0x74, + 0xe5, 0x80, 0x91, 0x85, 0xc6, 0xdd, 0x6f, 0x6a, 0x6d, 0x2b, 0xc6, 0x72, + 0xd0, 0x74, 0x19, 0x6c, 0x73, 0x5a, 0xdf, 0xc1, 0x6a, 0x79, 0x28, 0x09, + 0xf8, 0x48, 0x8b, 0x72, 0x8b, 0xbb, 0x49, 0xa6, 0x05, 0x34, 0x75, 0x1e, + 0xf4, 0x46, 0x14, 0xac, 0xbb, 0xa1, 0x64, 0xa0, 0xab, 0x2e, 0xd7, 0xab, + 0xda, 0x86, 0x3f, 0x48, 0x78, 0xdb, 0xf1, 0x4c, 0x40, 0xe1, 0x41, 0xb6, + 0xd3, 0xbe, 0xdc, 0x97, 0x2a, 0x04, 0xf5, 0x5f, 0x0f, 0xa2, 0x53, 0x84, + 0xbe, 0x15, 0xb1, 0x64, 0x16, 0xdb, 0x9d, 0x6a, 0x14, 0x40, 0xe4, 0x22, + 0x52, 0xf7, 0x86, 0x14, 0xea, 0xe2, 0x64, 0x4e, 0x23, 0x23, 0xe0, 0xd8, + 0x79, 0x35, 0x53, 0x24, 0x0a, 0x95, 0x40, 0x7a, 0xb0, 0x42, 0xbb, 0xe7, + 0x50, 0xb6, 0xcd, 0x95, 0x8d, 0x0e, 0x88, 0x34, 0x68, 0x44, 0x1c, 0xfa, + 0x2a, 0x72, 0x06, 0xac, 0xdc, 0x11, 0xbe, 0xe4, 0x8c, 0x26, 0x62, 0x66, + 0xd1, 0xd2, 0xbe, 0xe2, 0xc3, 0xa2, 0xd6, 0x40, 0x59, 0x3c, 0x77, 0x26, + 0x9d, 0x0e, 0x34, 0xc5, 0x69, 0xe2, 0xd4, 0x69, 0x05, 0xe3, 0x15, 0x5c, + 0xdc, 0x4c, 0xa1, 0x91, 0x44, 0xc0, 0xf0, 0xfe, 0x05, 0x1e, 0x24, 0x8f, + 0x2b, 0xbe, 0xa3, 0x5f, 0xf8, 0x92, 0x1f, 0xe5, 0xb4, 0xd3, 0x49, 0x2e, + 0xd7, 0x01, 0x7a, 0x05, 0x6e, 0x8a, 0x83, 0xbd, 0x7c, 0x73, 0x1a, 0x59, + 0x86, 0xf6, 0x95, 0x17, 0x0e, 0x2d, 0x6a, 0x07, 0x53, 0x54, 0x5b, 0x88, + 0x48, 0x40, 0xfa, 0x94, 0xdc, 0x6c, 0xb2, 0xb6, 0x9c, 0xe4, 0x15, 0xf1, + 0xe2, 0x54, 0x8e, 0x69, 0xf0, 0x84, 0xbc, 0xca, 0xb4, 0x43, 0xa4, 0xd1, + 0xe5, 0x25, 0xe8, 0xf6, 0xa2, 0x2e, 0x0f, 0x95, 0xbf, 0xe8, 0x62, 0x3d, + 0xf1, 0x71, 0xb0, 0x7c, 0xdd, 0x41, 0xcb, 0xc9, 0xe3, 0x67, 0x5e, 0x7d, + 0x51, 0x59, 0x25, 0x7c, 0x6e, 0x4d, 0xbd, 0x92, 0x68, 0xd9, 0x86, 0x94, + 0x6d, 0xef, 0x06, 0xed, 0xbf, 0x3a, 0xa4, 0x56, 0xa4, 0x30, 0x9a, 0xec, + 0x09, 0x04, 0x6a, 0xf7, 0x59, 0x8a, 0x54, 0x94, 0x46, 0x43, 0x1f, 0x3e, + 0xb9, 0x97, 0xc6, 0x7e, 0x5c, 0x78, 0x90, 0x70, 0x34, 0x21, 0x01, 0xe3, + 0xb6, 0xb4, 0x9b, 0xa9, 0x68, 0x7a, 0xf7, 0x19, 0xec, 0x0a, 0xe0, 0x33, + 0xbb, 0x03, 0xa4, 0x26, 0x78, 0x28, 0x1d, 0xd7, 0x80, 0x53, 0xd7, 0x3b, + 0x58, 0xd0, 0x8e, 0x99, 0x49, 0x9c, 0x12, 0x6f, 0xab, 0xdc, 0xc6, 0xaf, + 0x16, 0xe9, 0x18, 0x75, 0x4e, 0x5f, 0x7d, 0x31, 0xc9, 0xae, 0x99, 0x5b, + 0xf5, 0xe8, 0x62, 0xe5, 0x9f, 0x1d, 0x7e, 0x78, 0x4f, 0x3b, 0x95, 0x01, + 0xe3, 0xac, 0x88, 0xdc, 0x6e, 0x7f, 0xaf, 0x09, 0x5f, 0xa2, 0x86, 0x27, + 0xd9, 0x58, 0xdb, 0x76, 0x4d, 0xcb, 0x7e, 0x50, 0xfb, 0xee, 0x8b, 0xb0, + 0x2f, 0x5b, 0x9c, 0x58, 0x5b, 0x96, 0x02, 0x75, 0xd3, 0xb4, 0x94, 0xeb, + 0xdb, 0xe1, 0xaa, 0xc3, 0xa4, 0xc5, 0x35, 0x26, 0xe4, 0xae, 0x9a, 0x6a, + 0xbc, 0x7c, 0xf7, 0x8b, 0xae, 0x84, 0x3a, 0x76, 0x5f, 0x76, 0xc1, 0xb5, + 0x98, 0x17, 0x19, 0x8a, 0xae, 0x5e, 0x48, 0x5d, 0xb9, 0x09, 0xfb, 0x22, + 0x2f, 0x68, 0xf1, 0xc0, 0x4a, 0x74, 0x0a, 0x33, 0x0c, 0x53, 0x1c, 0xc3, + 0xc0, 0x1a, 0x18, 0x06, 0x7c, 0xd9, 0x3c, 0x46, 0xa6, 0x19, 0x95, 0xe2, + 0x92, 0xd6, 0x8b, 0x16, 0xa2, 0x18, 0x12, 0x7d, 0x0b, 0x76, 0xb8, 0x8a, + 0x61, 0x73, 0x39, 0x5f, 0x70, 0x5a, 0xd7, 0x18, 0x55, 0x75, 0xf5, 0x2c, + 0x0d, 0xa2, 0x77, 0x73, 0xc1, 0xbd, 0x4b, 0x58, 0x3d, 0x0e, 0xfd, 0xe5, + 0x3d, 0xe7, 0xf7, 0xa7, 0x85, 0xaa, 0xf8, 0x13, 0xc3, 0x01, 0x8b, 0x39, + 0x44, 0xcc, 0xd6, 0xda, 0x2f, 0x5f, 0xad, 0x39, 0x47, 0x23, 0xa8, 0x59, + 0x1a, 0x92, 0x80, 0x4b, 0xf8, 0x55, 0x06, 0xc4, 0xde, 0xb9, 0xe3, 0xd7, + 0xc7, 0x17, 0x17, 0xc7, 0x17, 0xbc, 0xde, 0x07, 0x55, 0xfc, 0xfa, 0x1b, + 0x8d, 0x8c, 0xf6, 0xc8, 0x6c, 0x16, 0x11, 0xd6, 0x2c, 0x6b, 0x2c, 0x9c, + 0x50, 0xa1, 0x94, 0x36, 0x22, 0xf3, 0x73, 0x4b, 0x96, 0xbb, 0x18, 0x84, + 0x61, 0x4d, 0x44, 0x3c, 0xa0, 0xb3, 0xdc, 0x4f, 0xf9, 0x5a, 0x11, 0x18, + 0xfa, 0x50, 0x98, 0xd8, 0x88, 0xec, 0xd5, 0x5c, 0xeb, 0x8f, 0xe0, 0xaa, + 0x36, 0xdd, 0x31, 0x90, 0x4b, 0x07, 0x1a, 0xc2, 0x95, 0xa8, 0xf7, 0xda, + 0xd7, 0x16, 0xc7, 0x7c, 0xaf, 0xf8, 0x80, 0xb2, 0xaa, 0x84, 0x95, 0x28, + 0xca, 0xe5, 0x22, 0x9d, 0x38, 0xe3, 0x2e, 0x7d, 0x4e, 0xf2, 0x5e, 0x24, + 0x47, 0xbc, 0xb0, 0x11, 0xc3, 0x99, 0x68, 0xb6, 0x87, 0xd0, 0xb8, 0x26, + 0x49, 0xe5, 0xde, 0x34, 0x86, 0x98, 0x7f, 0x29, 0x5a, 0xa9, 0x98, 0xd9, + 0xb5, 0x8c, 0x2d, 0x25, 0xfc, 0x04, 0x46, 0x45, 0x66, 0x15, 0x16, 0x2b, + 0x10, 0xb2, 0x05, 0x36, 0x5d, 0xcd, 0x7c, 0x20, 0xa4, 0x2f, 0x28, 0x78, + 0x81, 0x44, 0x8d, 0x7c, 0x3f, 0xfa, 0xb1, 0x48, 0xc7, 0x3f, 0xf9, 0x9b, + 0x03, 0x21, 0xcc, 0x3e, 0x56, 0x51, 0x62, 0x0b, 0x68, 0xf2, 0xba, 0x50, + 0xaa, 0xfb, 0x4a, 0x82, 0xd4, 0xbb, 0xe1, 0xf1, 0x45, 0x74, 0xf0, 0x15, + 0xa3, 0x3b, 0xfd, 0x6b, 0xbb, 0xcb, 0xcf, 0xe9, 0xcd, 0x60, 0x7b, 0xab, + 0x29, 0xb9, 0x89, 0x19, 0xbe, 0xb5, 0x6e, 0x42, 0xb8, 0xb1, 0xa9, 0x55, + 0x8f, 0x09, 0x72, 0x27, 0x2b, 0x5b, 0xb8, 0x11, 0x7d, 0x70, 0x13, 0x3f, + 0x66, 0x0b, 0xf9, 0x80, 0x85, 0x9b, 0x28, 0xb9, 0xfc, 0xe2, 0x80, 0xb0, + 0xad, 0xd1, 0xd1, 0x17, 0x0d, 0x35, 0x53, 0x36, 0xe9, 0x20, 0xea, 0xbe, + 0xc9, 0x7e, 0x26, 0x41, 0x20, 0xde, 0x7e, 0x32, 0xd8, 0x89, 0x36, 0xbf, + 0x4b, 0xe7, 0x2f, 0x9e, 0xfd, 0x39, 0x3a, 0xd9, 0xea, 0x56, 0x82, 0x3c, + 0x05, 0xc6, 0x79, 0x14, 0xcf, 0x6f, 0xdd, 0x8e, 0x9d, 0xe1, 0x54, 0x4b, + 0xe8, 0x8a, 0x81, 0x81, 0x4a, 0x65, 0xc2, 0xb5, 0x2d, 0x22, 0xd1, 0x48, + 0xe3, 0x45, 0xa3, 0x6f, 0x1d, 0x20, 0x1d, 0xeb, 0xf4, 0xf4, 0xd4, 0x84, + 0x97, 0xee, 0xc5, 0xb3, 0x46, 0x13, 0x4f, 0x5d, 0x1b, 0xef, 0xa4, 0x8d, + 0x5f, 0xd8, 0xc4, 0xde, 0x60, 0x67, 0x2f, 0xda, 0x3c, 0x1b, 0x6e, 0xef, + 0xb9, 0x16, 0x9a, 0x4d, 0xec, 0xa1, 0x09, 0x7e, 0xa8, 0xfa, 0xf2, 0x53, + 0xee, 0xff, 0xc7, 0x64, 0xfe, 0x53, 0xb4, 0xf9, 0xfd, 0xee, 0x2e, 0x35, + 0xf0, 0xe7, 0xe8, 0xe0, 0xe4, 0xfb, 0xe8, 0xe9, 0x80, 0x1a, 0x7b, 0x1b, + 0xdf, 0x69, 0x73, 0x8a, 0xe1, 0x34, 0x44, 0x23, 0xf4, 0x7d, 0xa3, 0x8d, + 0x67, 0xb5, 0x36, 0x4e, 0x49, 0x0f, 0x7c, 0xa0, 0x2b, 0x65, 0x67, 0xf0, + 0x64, 0x2f, 0x4a, 0x9f, 0x7d, 0xf6, 0xdc, 0x1a, 0xd2, 0x36, 0xf0, 0x7d, + 0xd5, 0x36, 0x29, 0x59, 0xbe, 0x24, 0xe6, 0x1c, 0x3f, 0x10, 0x33, 0x03, + 0x87, 0x00, 0x74, 0xea, 0x4d, 0x9c, 0x4f, 0x94, 0xdc, 0xb8, 0xa8, 0x0a, + 0xed, 0x94, 0xa2, 0x83, 0x25, 0x30, 0x52, 0xd2, 0xa5, 0xb9, 0xdf, 0x18, + 0x0e, 0xeb, 0xa2, 0xf6, 0xe8, 0x9f, 0xa3, 0x37, 0xc3, 0x93, 0x63, 0x9a, + 0xd1, 0x0e, 0x0d, 0xcd, 0xaf, 0xa1, 0x0c, 0x08, 0x5f, 0x61, 0x71, 0x69, + 0x55, 0x37, 0x38, 0xef, 0x07, 0x6d, 0x98, 0x8c, 0x2d, 0x11, 0x5d, 0x0c, + 0xdb, 0x98, 0x15, 0x05, 0xfa, 0x7d, 0x47, 0xb4, 0xd6, 0x3f, 0xb8, 0x66, + 0x95, 0x41, 0xae, 0x59, 0x74, 0xfd, 0x4d, 0x36, 0xa7, 0x63, 0x92, 0x67, + 0x39, 0x87, 0x79, 0x74, 0x2b, 0x92, 0xc2, 0x37, 0x47, 0xc7, 0x92, 0xa7, + 0xf6, 0x26, 0x9e, 0x13, 0x8b, 0x64, 0x44, 0x87, 0xe2, 0x96, 0xbd, 0xee, + 0xe2, 0xbc, 0x91, 0xf7, 0x4f, 0x57, 0xf3, 0x07, 0xda, 0xc7, 0x4f, 0x07, + 0xbb, 0x8c, 0x6a, 0xc7, 0x5a, 0xee, 0xeb, 0x37, 0xf4, 0xf7, 0xee, 0xd3, + 0x6e, 0xc4, 0x5f, 0x55, 0x35, 0x76, 0x3b, 0xaf, 0x1b, 0x87, 0x67, 0x67, + 0xdf, 0x9c, 0x48, 0x00, 0xc6, 0xa1, 0x1a, 0x51, 0x59, 0xb0, 0x72, 0x5a, + 0xb0, 0x30, 0x57, 0xd2, 0xd6, 0x7c, 0xfc, 0x38, 0x5c, 0x6f, 0xb7, 0x49, + 0xb2, 0x00, 0x0c, 0x5d, 0x8d, 0x23, 0x94, 0xca, 0xa2, 0x65, 0x64, 0x2c, + 0x48, 0xa7, 0x93, 0x2a, 0x1a, 0x45, 0xc1, 0x08, 0x61, 0x66, 0xb0, 0x1d, + 0xad, 0x5c, 0x2e, 0x6c, 0xec, 0x8b, 0x40, 0x62, 0x88, 0x2e, 0x8a, 0xd5, + 0x0c, 0xce, 0x52, 0x05, 0x9e, 0x5e, 0x54, 0x5d, 0xb7, 0x3b, 0x4c, 0xca, + 0xbe, 0x0c, 0x7a, 0x5f, 0x6d, 0xb4, 0x5d, 0x35, 0x38, 0x39, 0x73, 0xd9, + 0x42, 0x31, 0x69, 0x61, 0x28, 0x5e, 0x2d, 0xb8, 0x58, 0xe5, 0xd4, 0xd5, + 0x13, 0x46, 0x31, 0xd6, 0x04, 0xb1, 0x44, 0x6f, 0x0f, 0xde, 0x1c, 0xbf, + 0xfa, 0xf6, 0xe0, 0xf4, 0xdd, 0x31, 0xbd, 0xc2, 0xa8, 0xac, 0x9b, 0x3e, + 0xde, 0x08, 0x63, 0x9c, 0xa5, 0xe3, 0x6c, 0xca, 0x3e, 0xa5, 0xee, 0x9f, + 0xbb, 0x1b, 0x12, 0x5e, 0x19, 0x75, 0xf8, 0xad, 0x5d, 0x79, 0x8d, 0xe8, + 0x82, 0xff, 0xda, 0x93, 0xbf, 0xf6, 0xfe, 0xdc, 0xd9, 0xaa, 0x4c, 0xba, + 0xa1, 0x15, 0x33, 0xbd, 0xdc, 0x4b, 0x5c, 0x1d, 0xaa, 0xa4, 0x20, 0xa6, + 0x57, 0x56, 0xa5, 0x63, 0x1e, 0x19, 0xbb, 0xda, 0xf8, 0xd9, 0xcd, 0xd1, + 0x2a, 0xd4, 0xb9, 0x3b, 0xfc, 0xd2, 0x2b, 0x08, 0x17, 0x1d, 0xce, 0x79, + 0x52, 0x71, 0x03, 0xce, 0x6a, 0x6e, 0xc3, 0x9a, 0x48, 0x1e, 0x16, 0x1c, + 0xbe, 0xb5, 0xd9, 0x91, 0x5f, 0x5e, 0x1d, 0x1d, 0x5c, 0x1e, 0xf3, 0x0b, + 0xd6, 0xbd, 0x95, 0xb5, 0xb6, 0xc8, 0x5b, 0x1e, 0xcf, 0x66, 0x47, 0x3e, + 0x7c, 0xc5, 0x13, 0xea, 0x48, 0x8d, 0x01, 0x01, 0x58, 0xac, 0x8d, 0x2b, + 0x9b, 0x6b, 0x10, 0x63, 0x90, 0xa2, 0x57, 0x58, 0x9c, 0xc8, 0x66, 0x47, + 0xbe, 0xeb, 0x38, 0x7b, 0xad, 0x16, 0x6e, 0x55, 0xe7, 0xe4, 0x04, 0x71, + 0xb9, 0x8d, 0xf4, 0x20, 0xa9, 0x95, 0xe4, 0xf7, 0x47, 0x5d, 0x13, 0x62, + 0x61, 0x0a, 0x40, 0xe6, 0xdc, 0xc6, 0x6b, 0x46, 0x21, 0xdb, 0x94, 0xb2, + 0x6c, 0x77, 0xef, 0xc9, 0x9f, 0xb1, 0x9e, 0xaf, 0x3a, 0xdb, 0x74, 0x37, + 0x74, 0xfe, 0xcc, 0x5d, 0xa7, 0x65, 0x50, 0x6e, 0x45, 0xbb, 0x61, 0x5d, + 0x4a, 0x29, 0x4a, 0x82, 0x54, 0x78, 0xd7, 0x61, 0x0b, 0x93, 0x79, 0x61, + 0x41, 0xef, 0x25, 0x7b, 0xc0, 0x92, 0xcc, 0xcd, 0x7d, 0x8f, 0xfd, 0x42, + 0xc9, 0xc0, 0xb9, 0x83, 0x26, 0x95, 0xee, 0xc2, 0xfb, 0xa3, 0x27, 0xef, + 0xca, 0x1c, 0xb5, 0x08, 0x0c, 0xf7, 0x39, 0x5b, 0x59, 0x82, 0x01, 0xfa, + 0x82, 0x3c, 0x2e, 0x7b, 0xd6, 0x90, 0x8a, 0x47, 0x6a, 0xcb, 0x31, 0x45, + 0x04, 0x22, 0x01, 0xb1, 0x96, 0x15, 0xe4, 0x24, 0xf1, 0xf7, 0x07, 0x61, + 0x0e, 0x76, 0x67, 0xc7, 0x23, 0xce, 0x94, 0x73, 0xd1, 0xd4, 0x81, 0x16, + 0xee, 0x96, 0xde, 0x8e, 0x5f, 0x1a, 0x00, 0x0a, 0xf0, 0x45, 0x29, 0x6b, + 0x59, 0x38, 0x9b, 0x11, 0x7c, 0x8b, 0xfa, 0x6c, 0x75, 0x9f, 0x6a, 0x79, + 0x0a, 0x98, 0x86, 0xa8, 0xf0, 0xa2, 0x1b, 0x13, 0xab, 0x99, 0x27, 0xf9, + 0xa3, 0x21, 0x0e, 0x2d, 0xae, 0x27, 0x4c, 0x31, 0x48, 0x73, 0xe1, 0x77, + 0x06, 0x83, 0x81, 0x2f, 0x03, 0xc2, 0xdb, 0xa2, 0x1e, 0x27, 0x20, 0x8a, + 0x07, 0xa8, 0x67, 0x58, 0xe3, 0x4d, 0x08, 0xf2, 0x10, 0xa6, 0xb7, 0x34, + 0xdc, 0x45, 0xad, 0x11, 0xee, 0x68, 0x04, 0x36, 0x8d, 0xae, 0x76, 0xdb, + 0xb5, 0x22, 0x03, 0xb7, 0x6d, 0x9b, 0xf0, 0xc8, 0xd8, 0xc4, 0xd6, 0x58, + 0xc4, 0x48, 0xcd, 0x77, 0x7c, 0x2a, 0x73, 0x6b, 0xc1, 0x14, 0xcc, 0xe9, + 0xfa, 0x52, 0x03, 0x15, 0x5b, 0x22, 0x8b, 0xa6, 0x43, 0xd1, 0x02, 0x37, + 0xcc, 0xe4, 0xb2, 0x7b, 0x64, 0x72, 0x22, 0x5f, 0x94, 0xa3, 0x3f, 0xe6, + 0x62, 0x1a, 0xb0, 0x1b, 0xc4, 0x61, 0xfe, 0x5a, 0x3b, 0x13, 0x31, 0xcd, + 0xb2, 0xbe, 0x0c, 0xb9, 0x5f, 0xb3, 0x5f, 0x34, 0xc7, 0xbb, 0x88, 0x15, + 0x1b, 0x8b, 0xc4, 0xb6, 0x6c, 0x06, 0x27, 0x97, 0x4e, 0xde, 0x9b, 0x49, + 0x38, 0xc6, 0xab, 0x2f, 0x59, 0xd2, 0x96, 0xa0, 0x62, 0xdc, 0x43, 0xf3, + 0x64, 0x1f, 0xf3, 0x8e, 0x8f, 0xad, 0x45, 0xe7, 0x1a, 0xaf, 0xad, 0x8d, + 0xbf, 0x95, 0xab, 0xac, 0x8b, 0x56, 0x54, 0xac, 0xc9, 0x10, 0x94, 0x03, + 0xbe, 0x17, 0xc5, 0xf7, 0x5c, 0x8d, 0x86, 0x68, 0x50, 0xdc, 0x64, 0x62, + 0x91, 0x39, 0x0d, 0xec, 0x8a, 0x6e, 0x86, 0x56, 0xee, 0x39, 0xf6, 0xf5, + 0x9e, 0x0d, 0x10, 0x56, 0x40, 0xde, 0xcc, 0x80, 0x97, 0xa2, 0x9c, 0x08, + 0x83, 0x72, 0xa9, 0xa0, 0x6e, 0xaa, 0x39, 0x8f, 0x9c, 0x58, 0xf4, 0x50, + 0xe9, 0x26, 0x45, 0x34, 0x20, 0xdb, 0x38, 0x24, 0x8a, 0xc2, 0x56, 0x4b, + 0x6a, 0x7d, 0x5b, 0x27, 0xce, 0x1b, 0x0d, 0x73, 0x13, 0xcb, 0xd3, 0xf3, + 0x6c, 0xde, 0x77, 0xf5, 0x85, 0x5c, 0xc4, 0x55, 0x9e, 0x5e, 0x5f, 0x8b, + 0xc6, 0x16, 0xd5, 0xa7, 0xd6, 0x4e, 0x64, 0xa7, 0xbc, 0x2a, 0x1c, 0xb2, + 0xb9, 0x5a, 0xb7, 0x9a, 0x97, 0xae, 0x8e, 0xa9, 0x5a, 0x5c, 0x2a, 0xc4, + 0x6c, 0x1e, 0x48, 0xd9, 0xb7, 0x12, 0x75, 0x60, 0x90, 0x66, 0xc9, 0x66, + 0xaf, 0xaa, 0xc7, 0xf8, 0xec, 0x62, 0x03, 0xe5, 0xed, 0xe7, 0x3e, 0xab, + 0xd4, 0x36, 0x1d, 0xa0, 0x32, 0x3e, 0xde, 0x64, 0xc2, 0x76, 0xe5, 0x19, + 0x5f, 0xc5, 0xf7, 0x2e, 0xd8, 0x49, 0x50, 0x76, 0x47, 0xb1, 0xd7, 0xb8, + 0x36, 0xa2, 0x8a, 0x75, 0xb7, 0x40, 0xdd, 0x6a, 0xe5, 0x43, 0xd9, 0x5d, + 0xe2, 0x91, 0x8d, 0xbc, 0x81, 0xd1, 0x83, 0xd1, 0xe9, 0xe9, 0x77, 0xcc, + 0xa4, 0xe6, 0xce, 0x75, 0xfc, 0x0a, 0x93, 0xac, 0xad, 0xca, 0x20, 0x0a, + 0x9a, 0x14, 0x33, 0x49, 0x16, 0xb2, 0x78, 0x19, 0x9b, 0x7a, 0xa9, 0xad, + 0x45, 0x8d, 0xe5, 0x07, 0xda, 0x7e, 0xa0, 0x9a, 0x08, 0x8e, 0xac, 0x52, + 0x55, 0xe1, 0x22, 0xe3, 0xbc, 0xb7, 0xd7, 0x66, 0xd9, 0x71, 0x9b, 0xd4, + 0x41, 0xca, 0xc9, 0x48, 0x89, 0x00, 0x34, 0xc0, 0x02, 0x9d, 0x73, 0xd8, + 0x1f, 0x4c, 0x63, 0x0e, 0x59, 0xc9, 0x24, 0x16, 0x00, 0x5b, 0x06, 0xa2, + 0x86, 0x21, 0xad, 0xc6, 0x53, 0x1b, 0xc7, 0xcf, 0xc5, 0x66, 0x08, 0xad, + 0x01, 0x96, 0x8e, 0x9b, 0x21, 0x2a, 0x41, 0x50, 0xee, 0xd8, 0x98, 0xfb, + 0xe3, 0xe9, 0x97, 0xa3, 0xca, 0x19, 0xfd, 0xd0, 0x91, 0x3d, 0xbf, 0x38, + 0xfb, 0xea, 0xe2, 0x78, 0x38, 0x8c, 0xde, 0x1c, 0x5f, 0x8a, 0xca, 0x7f, + 0x29, 0x71, 0x70, 0x02, 0x4e, 0x0c, 0x37, 0x83, 0x21, 0x24, 0x58, 0xac, + 0x89, 0xd9, 0x13, 0x80, 0xa6, 0x9a, 0xb1, 0x0b, 0x0d, 0xa2, 0x1c, 0xd4, + 0xf9, 0xa9, 0x86, 0xcf, 0xdd, 0xc0, 0xd0, 0x8f, 0x60, 0x26, 0x78, 0x22, + 0x9d, 0xdd, 0xdc, 0x5b, 0x53, 0x21, 0x23, 0x4b, 0x78, 0xd3, 0x8d, 0x71, + 0x2e, 0x6f, 0x3d, 0xe7, 0xdb, 0x9b, 0x7e, 0x62, 0x7a, 0xbf, 0x8f, 0x2e, + 0xad, 0x58, 0xf7, 0xef, 0x49, 0x0d, 0x56, 0xfa, 0xf8, 0x7d, 0xf4, 0x3d, + 0xb5, 0x39, 0xa1, 0x55, 0xd7, 0x02, 0x8c, 0x43, 0x14, 0xd9, 0xf0, 0x85, + 0x4c, 0x50, 0x02, 0x22, 0x2c, 0xae, 0xb3, 0xcc, 0xf3, 0x0f, 0x14, 0xfc, + 0x45, 0xc2, 0xbc, 0x80, 0x0a, 0x68, 0x30, 0x9d, 0xeb, 0x99, 0xdf, 0x06, + 0x50, 0xe6, 0x69, 0x72, 0x55, 0x42, 0x20, 0xe1, 0xee, 0xa8, 0xb9, 0x1d, + 0x86, 0x2f, 0xdc, 0x7d, 0xc3, 0x1f, 0xed, 0x44, 0x4f, 0x3e, 0x7b, 0xbe, + 0xf3, 0x99, 0xfc, 0x6a, 0xff, 0xbe, 0x78, 0xba, 0xa3, 0x30, 0xa0, 0xf4, + 0xd7, 0xd3, 0xfd, 0xa7, 0xbb, 0xfb, 0x0c, 0x4f, 0xb4, 0xb3, 0xbf, 0x43, + 0xff, 0xff, 0x54, 0x3f, 0x61, 0x0c, 0xa6, 0x17, 0x7b, 0x9f, 0x7d, 0x8a, + 0x30, 0x18, 0xa6, 0x8f, 0x29, 0x75, 0xd2, 0x2f, 0xb3, 0x3e, 0x30, 0x1c, + 0x20, 0x04, 0xfd, 0xbe, 0x6a, 0x90, 0x64, 0xbf, 0x3a, 0x17, 0x52, 0xe4, + 0x89, 0xbb, 0xf2, 0xcc, 0x66, 0x5c, 0x95, 0x34, 0xfe, 0xb0, 0x84, 0xac, + 0x9b, 0x86, 0xbe, 0x2d, 0x55, 0x3c, 0x01, 0x8a, 0x52, 0x79, 0x87, 0x44, + 0x46, 0xc9, 0xa1, 0x0a, 0x5f, 0xfe, 0x25, 0x5d, 0x5b, 0xae, 0xe1, 0x06, + 0x50, 0x55, 0x74, 0xab, 0xf4, 0xbd, 0xb1, 0x2c, 0x21, 0xd1, 0x48, 0x50, + 0x9a, 0xb4, 0x56, 0x48, 0xf4, 0x97, 0xf6, 0x27, 0x06, 0x2c, 0x7e, 0x4b, + 0xa9, 0x21, 0x6a, 0xf6, 0x66, 0x15, 0x55, 0xdb, 0xfa, 0xaa, 0x10, 0xcf, + 0x86, 0xdf, 0x7e, 0xbf, 0x52, 0x41, 0xe5, 0x51, 0x87, 0x29, 0x22, 0xf5, + 0x5c, 0x5a, 0xa6, 0xdc, 0x68, 0xee, 0xdd, 0x22, 0x6c, 0xef, 0x63, 0x9a, + 0xf3, 0x33, 0x02, 0x05, 0xbb, 0x9d, 0xeb, 0x07, 0x9b, 0x93, 0x4a, 0x44, + 0x9b, 0x2b, 0x16, 0x6a, 0xb8, 0x58, 0xae, 0xa2, 0x20, 0x5e, 0x75, 0x24, + 0xdb, 0x97, 0x37, 0x54, 0xfc, 0x2c, 0x90, 0x19, 0x24, 0x82, 0xc2, 0x5d, + 0x86, 0xdb, 0x5e, 0x9e, 0x37, 0xca, 0x6e, 0x74, 0xc5, 0xd4, 0x18, 0xf4, + 0xa7, 0x7d, 0xe0, 0x3c, 0xb9, 0x43, 0xf7, 0xe8, 0xd4, 0x7c, 0x70, 0xbb, + 0xab, 0x66, 0xb3, 0xe9, 0x82, 0xc5, 0xdb, 0x8e, 0xa4, 0x7f, 0x0e, 0xf1, + 0xe3, 0xae, 0xb9, 0xf0, 0x22, 0x42, 0x29, 0x23, 0x45, 0x32, 0x66, 0xb8, + 0x2d, 0x06, 0xa7, 0xdd, 0x32, 0x16, 0xd6, 0xff, 0xc4, 0xc5, 0x6b, 0xe1, + 0x5e, 0x53, 0x40, 0xf6, 0x58, 0x28, 0x7f, 0x1a, 0xa6, 0x95, 0x55, 0xa0, + 0xd8, 0x43, 0x10, 0xd8, 0x0d, 0xa9, 0x2d, 0x4c, 0x37, 0x2d, 0xdd, 0x1c, + 0x41, 0xd9, 0xae, 0xdf, 0x6d, 0x6c, 0x0c, 0xcf, 0x8f, 0x8f, 0x8f, 0xa2, + 0xd3, 0x93, 0x37, 0x27, 0x97, 0x81, 0x40, 0xee, 0x2e, 0x12, 0x33, 0xb8, + 0x16, 0x56, 0xbb, 0xa5, 0xba, 0x1c, 0x1e, 0x75, 0x50, 0xfa, 0xb3, 0xab, + 0x7c, 0x96, 0x68, 0x1a, 0xc3, 0xb4, 0xfe, 0x1e, 0x54, 0x6f, 0x00, 0x55, + 0xa0, 0xbe, 0x86, 0x17, 0xe8, 0x0a, 0x12, 0x6e, 0xc6, 0xae, 0xca, 0x4f, + 0xff, 0x07, 0x0d, 0xd0, 0xa8, 0x4a, 0x4e, 0x0a, 0x9e, 0xe6, 0x8a, 0x38, + 0x69, 0x50, 0x6b, 0x6d, 0x54, 0xbc, 0xb6, 0xc9, 0x54, 0x0b, 0x89, 0x3a, + 0x0b, 0x1d, 0xe2, 0xf5, 0xee, 0x13, 0x24, 0xc4, 0xce, 0x52, 0x81, 0x70, + 0x0e, 0x83, 0x89, 0x5d, 0xd5, 0x94, 0xcb, 0x4c, 0xf8, 0x78, 0xd8, 0x63, + 0x58, 0xd0, 0xca, 0x22, 0x69, 0xad, 0xaf, 0xb0, 0x54, 0xd2, 0x93, 0x1d, + 0x97, 0x2f, 0xb0, 0x00, 0xcf, 0x51, 0x51, 0x9f, 0x3b, 0xdb, 0x8d, 0x48, + 0x1e, 0x59, 0xb2, 0x54, 0x9f, 0x2f, 0xe7, 0x8d, 0xeb, 0xee, 0x07, 0x79, + 0x97, 0xe6, 0xff, 0x7c, 0x07, 0xd7, 0xdb, 0x55, 0x9c, 0xf7, 0x49, 0xf2, + 0x5a, 0xf5, 0xcd, 0xb8, 0x2a, 0x14, 0xa1, 0x81, 0xc6, 0x62, 0xfa, 0x49, + 0x7c, 0x8d, 0x8f, 0x9a, 0xb4, 0xe8, 0x93, 0x3e, 0x32, 0xb8, 0x24, 0xa7, + 0x7a, 0x00, 0x78, 0xea, 0xbd, 0x08, 0x15, 0xaa, 0x5d, 0xe8, 0xb3, 0xc8, + 0x3a, 0x1e, 0x58, 0xcf, 0x76, 0xd1, 0xf3, 0x28, 0x54, 0x3d, 0xcd, 0xd4, + 0x39, 0x94, 0xf2, 0x34, 0x75, 0x2e, 0x4d, 0xd1, 0x7a, 0x16, 0xed, 0x7e, + 0xc6, 0xf3, 0xf8, 0xb8, 0xf9, 0x70, 0x2d, 0x0b, 0x8b, 0x62, 0x13, 0x75, + 0x21, 0xf3, 0xbb, 0x29, 0x79, 0x09, 0x40, 0x2b, 0x97, 0xd5, 0xb5, 0x68, + 0x58, 0x44, 0xeb, 0xb1, 0x7e, 0xa2, 0xae, 0x74, 0x58, 0xa6, 0xe0, 0xdb, + 0x16, 0x09, 0x09, 0x55, 0x1b, 0x65, 0x5d, 0xd8, 0xd6, 0x2a, 0xd1, 0x7a, + 0xdd, 0xdc, 0x67, 0xcc, 0x61, 0x19, 0xd8, 0x3a, 0x42, 0xb4, 0x76, 0x9f, + 0x4e, 0x20, 0x55, 0x9b, 0x11, 0x00, 0xf4, 0x27, 0xc4, 0x27, 0x41, 0xd2, + 0x70, 0x5d, 0xc2, 0xe7, 0xe9, 0x46, 0xa6, 0x02, 0x0c, 0x2f, 0x6b, 0x06, + 0xe3, 0xc2, 0x26, 0xe4, 0x07, 0x2e, 0xc3, 0x52, 0x75, 0x0d, 0x30, 0x6b, + 0xee, 0xf8, 0x5e, 0x38, 0x70, 0xbf, 0x2c, 0xa7, 0x66, 0x57, 0xf0, 0x75, + 0x16, 0xaa, 0x73, 0xe6, 0x64, 0xfe, 0x60, 0xda, 0xbb, 0x3b, 0x24, 0xbf, + 0x4e, 0xb3, 0x7a, 0x41, 0xb6, 0xa6, 0x52, 0x8a, 0x69, 0xf5, 0xb1, 0x3a, + 0xbb, 0x3b, 0xdf, 0xac, 0x5f, 0x75, 0x80, 0xb4, 0x3e, 0xfa, 0xf2, 0xde, + 0xd3, 0x47, 0x36, 0xed, 0x2c, 0x77, 0x15, 0x76, 0x3c, 0xd0, 0x88, 0x77, + 0xc0, 0x34, 0xb6, 0x8d, 0x08, 0x3f, 0xb9, 0x8e, 0x51, 0x82, 0xfd, 0x91, + 0xd1, 0x5b, 0x82, 0x46, 0x6d, 0x28, 0x6f, 0x34, 0x1c, 0x5b, 0xbe, 0x2c, + 0xd8, 0x42, 0xb6, 0x00, 0xdc, 0x90, 0x57, 0x63, 0x5d, 0x4a, 0xa7, 0xe4, + 0x78, 0x07, 0x6f, 0x0b, 0xe7, 0xec, 0x55, 0x99, 0x84, 0x51, 0x4f, 0x9e, + 0x5c, 0x2f, 0x25, 0x89, 0x3a, 0x13, 0xb5, 0x9f, 0xf1, 0x18, 0xf5, 0xbc, + 0x12, 0x6f, 0xe6, 0xc8, 0x21, 0xa1, 0x27, 0x30, 0xde, 0x71, 0x6c, 0x22, + 0xab, 0x88, 0x1c, 0xf5, 0x8b, 0x81, 0xed, 0xb3, 0x63, 0x76, 0x86, 0x81, + 0x1b, 0xc8, 0xf1, 0x0a, 0x4b, 0x3d, 0x49, 0x15, 0xa4, 0x01, 0x32, 0x14, + 0x85, 0x50, 0x1c, 0xb3, 0xe7, 0xbc, 0x2e, 0x76, 0x8a, 0x95, 0xe2, 0x21, + 0x40, 0x03, 0x3d, 0xa5, 0x5a, 0xb4, 0xe4, 0xba, 0x62, 0x8e, 0x5f, 0x58, + 0x0a, 0xaa, 0xc0, 0xc4, 0xb2, 0xdd, 0xff, 0xf0, 0xec, 0xed, 0xeb, 0x93, + 0xaf, 0x1c, 0xb0, 0x85, 0x30, 0xf1, 0x65, 0x99, 0xb1, 0x5d, 0x53, 0x8c, + 0x86, 0xae, 0x08, 0x97, 0x73, 0x78, 0x6b, 0xa5, 0x0d, 0x0d, 0xbb, 0x25, + 0xf6, 0xf4, 0x3e, 0xfc, 0x00, 0x0c, 0x64, 0xfe, 0x84, 0x6d, 0xe5, 0x92, + 0x3d, 0x5e, 0x6c, 0x79, 0xcb, 0x43, 0x0d, 0x7a, 0x47, 0xd2, 0x33, 0xe2, + 0xbc, 0x5c, 0x2e, 0x5c, 0xf4, 0x60, 0x50, 0xa9, 0x43, 0x01, 0x24, 0xf9, + 0x56, 0xe0, 0x8a, 0xd1, 0xcb, 0x85, 0xb0, 0x26, 0x89, 0x7a, 0xac, 0x1a, + 0x76, 0xe5, 0x0e, 0x60, 0xcb, 0x82, 0xa6, 0xdb, 0xeb, 0x05, 0xd0, 0x08, + 0xc9, 0x99, 0x32, 0x1e, 0x56, 0x18, 0x28, 0x6f, 0xae, 0x1c, 0x2e, 0xd3, + 0x25, 0x13, 0xb5, 0x22, 0x4b, 0x33, 0xd1, 0xcc, 0x78, 0xde, 0x52, 0xbb, + 0xf5, 0x07, 0x57, 0xc5, 0x56, 0xc3, 0x7e, 0xbd, 0xab, 0xa8, 0x70, 0x25, + 0x49, 0x5d, 0x68, 0x92, 0x0c, 0x16, 0x21, 0x84, 0x45, 0x4f, 0x5c, 0x9e, + 0xf8, 0xe4, 0x15, 0x7b, 0x68, 0xf6, 0x07, 0x28, 0x74, 0x89, 0xf8, 0x9d, + 0xb0, 0x06, 0x95, 0x72, 0x49, 0x0f, 0x76, 0x7a, 0x72, 0x15, 0xa4, 0x94, + 0x49, 0x88, 0xa0, 0x11, 0x9d, 0x98, 0x8b, 0xd9, 0xd6, 0xd2, 0xfd, 0xa4, + 0xdb, 0x2f, 0x56, 0xb3, 0x51, 0x36, 0xb5, 0x8c, 0x0b, 0x97, 0x54, 0x6d, + 0x0f, 0x95, 0x34, 0x0d, 0xc4, 0x0c, 0x4a, 0xd1, 0x41, 0x74, 0x1d, 0x58, + 0x28, 0x7d, 0x98, 0x94, 0x1f, 0xbf, 0xa0, 0xeb, 0xc3, 0x53, 0x64, 0xb3, + 0x70, 0x19, 0xfe, 0xc9, 0x7c, 0x3c, 0xcd, 0x94, 0xaa, 0x39, 0x31, 0x16, + 0x2b, 0x55, 0x9d, 0x3a, 0xfb, 0xfe, 0xb2, 0x25, 0x1b, 0x3b, 0x80, 0x9c, + 0x4d, 0xe2, 0x0e, 0x1b, 0x87, 0xbf, 0xb3, 0x09, 0xf2, 0xdb, 0xf2, 0x85, + 0x86, 0xe3, 0x1b, 0x34, 0x02, 0x35, 0x24, 0x50, 0xdb, 0x34, 0xd4, 0xbf, + 0x88, 0x6d, 0x51, 0x3c, 0x80, 0x3f, 0x58, 0xe7, 0xf6, 0x68, 0x6d, 0xe9, + 0x89, 0x9e, 0xe2, 0xfc, 0x5a, 0x31, 0x87, 0xd4, 0xa9, 0x06, 0x25, 0xd1, + 0x01, 0xa0, 0x3b, 0x1b, 0x25, 0x0b, 0x25, 0x2e, 0x5c, 0x06, 0xe2, 0xd3, + 0x52, 0x92, 0xfa, 0x34, 0xfd, 0x49, 0xac, 0x93, 0x8e, 0x10, 0x03, 0x8e, + 0xf3, 0x89, 0x0b, 0x49, 0x89, 0xfd, 0x5d, 0x66, 0xc8, 0xcc, 0xde, 0x54, + 0xab, 0x97, 0x59, 0xf0, 0x1a, 0xdb, 0xf3, 0xa0, 0x09, 0x27, 0x6a, 0x43, + 0x91, 0xae, 0x20, 0x4b, 0x30, 0xe0, 0x16, 0xb2, 0x7e, 0x92, 0xc2, 0x37, + 0x21, 0xdf, 0xbf, 0xd2, 0x14, 0x73, 0x3a, 0xcf, 0x0a, 0x1a, 0xa0, 0x60, + 0x48, 0x9f, 0xed, 0xa8, 0x25, 0xae, 0xd4, 0x38, 0xd5, 0x22, 0x3a, 0xb8, + 0x38, 0x26, 0xc9, 0xf6, 0x7a, 0x8e, 0xa4, 0x70, 0x1e, 0x61, 0xa9, 0xfb, + 0x03, 0xc1, 0x9a, 0x57, 0x41, 0xcf, 0x07, 0x77, 0x78, 0x1f, 0xbc, 0xc9, + 0xc4, 0xa4, 0xf1, 0x01, 0x74, 0xc8, 0x5c, 0x00, 0x1a, 0x93, 0xdc, 0xd8, + 0xc0, 0xfa, 0xc0, 0x75, 0x38, 0xbb, 0x5b, 0x48, 0x8a, 0xbd, 0x25, 0xd4, + 0x55, 0x66, 0x40, 0x7d, 0xe7, 0x0d, 0xb6, 0x1e, 0x22, 0xf4, 0xd9, 0x5a, + 0xe3, 0x54, 0xfb, 0x1c, 0x84, 0xbf, 0x19, 0xce, 0x98, 0xf6, 0x55, 0xf1, + 0x80, 0x7a, 0x72, 0xea, 0xb5, 0x5b, 0x8f, 0xfe, 0x86, 0x7b, 0x86, 0x65, + 0x91, 0xba, 0x5c, 0x90, 0xb8, 0xd0, 0x7a, 0x31, 0x64, 0x4f, 0x02, 0xe1, + 0x57, 0xf2, 0xf1, 0x38, 0xb8, 0x5a, 0x6c, 0xd4, 0x2c, 0xfc, 0xc4, 0x45, + 0x62, 0x15, 0x95, 0xa0, 0x0e, 0x4c, 0xf4, 0xac, 0x32, 0x55, 0x70, 0x9c, + 0xf0, 0x88, 0x81, 0x36, 0x6e, 0x45, 0x00, 0x08, 0xf9, 0x53, 0xab, 0x99, + 0xf7, 0x13, 0x37, 0x5b, 0x3f, 0x06, 0xf7, 0x25, 0x7f, 0xf4, 0xca, 0xe1, + 0x0e, 0xf1, 0x28, 0x06, 0xdc, 0x11, 0x58, 0x2a, 0xdc, 0xa7, 0xfc, 0x0b, + 0x3e, 0x46, 0xc0, 0x9b, 0xa1, 0xb7, 0x55, 0xb0, 0x43, 0x14, 0xf2, 0x3d, + 0x1c, 0x88, 0xf8, 0xf8, 0xc0, 0xa1, 0x47, 0xa1, 0x68, 0x1c, 0x54, 0x39, + 0x62, 0x53, 0x0e, 0x67, 0xf0, 0xda, 0x81, 0x2f, 0x92, 0x4a, 0x55, 0x24, + 0x97, 0x22, 0xd4, 0xe9, 0x77, 0x68, 0x2d, 0xba, 0xd3, 0xa9, 0x67, 0xf8, + 0xf6, 0x18, 0xef, 0x2a, 0xb2, 0xe9, 0xbc, 0xc0, 0xa4, 0xbc, 0x8b, 0xf1, + 0xa4, 0x57, 0x95, 0xdc, 0x06, 0xae, 0xc7, 0xc1, 0xa9, 0x3f, 0x0e, 0xfb, + 0x05, 0xf9, 0x21, 0x08, 0x17, 0xb8, 0x4b, 0x0b, 0xf3, 0x43, 0x12, 0x6d, + 0x8f, 0x35, 0x36, 0x42, 0x12, 0xa9, 0x93, 0x72, 0x1c, 0x2c, 0x65, 0x32, + 0xbe, 0xc9, 0x24, 0x9c, 0x96, 0x16, 0x2d, 0x48, 0xbb, 0xec, 0x44, 0xff, + 0xa5, 0x34, 0xf0, 0x8d, 0xcf, 0xd6, 0x63, 0x42, 0x18, 0x08, 0xaa, 0xd6, + 0xc0, 0x13, 0xc4, 0xf1, 0xf7, 0x97, 0x17, 0x07, 0xd1, 0xd7, 0xc7, 0x07, + 0x47, 0xc7, 0x17, 0xc3, 0xda, 0xa5, 0xaf, 0x51, 0x20, 0x22, 0xa1, 0xb1, + 0x3d, 0x18, 0xa2, 0xb1, 0xe5, 0xfc, 0x6b, 0xc0, 0xbe, 0x71, 0xbd, 0x78, + 0x85, 0x83, 0x44, 0xe7, 0x83, 0x15, 0x22, 0x71, 0x1c, 0x70, 0x54, 0x1a, + 0x47, 0x3e, 0x67, 0x41, 0x1b, 0x5a, 0xfa, 0xd7, 0x59, 0xcf, 0xc3, 0x54, + 0x19, 0x0f, 0xe7, 0xe4, 0x2f, 0x93, 0x49, 0x66, 0x59, 0x80, 0xd5, 0x9d, + 0xfb, 0xda, 0x27, 0x5c, 0x07, 0x6c, 0x4b, 0x2f, 0x19, 0x35, 0x20, 0x76, + 0xbe, 0xef, 0x53, 0xbf, 0x7d, 0x5a, 0xfc, 0x3e, 0x23, 0x6e, 0xad, 0x92, + 0xa2, 0x53, 0xb3, 0x06, 0x56, 0xbb, 0xdf, 0x90, 0x02, 0x97, 0x8d, 0x93, + 0xf4, 0x75, 0x6b, 0x4b, 0x7c, 0xba, 0xa6, 0x5c, 0x19, 0xa0, 0xae, 0x41, + 0xe0, 0x52, 0x0d, 0x84, 0x64, 0x3d, 0x41, 0x8d, 0xbc, 0x16, 0x8d, 0x53, + 0xf2, 0x6a, 0xa6, 0x86, 0x85, 0x61, 0x20, 0x3a, 0x05, 0xc8, 0x3a, 0x69, + 0xa9, 0x97, 0x3a, 0xec, 0x22, 0x06, 0x07, 0x49, 0xc3, 0xd2, 0x87, 0xc2, + 0xfb, 0x01, 0xbe, 0x10, 0x0d, 0xd0, 0x2f, 0x2a, 0xae, 0x52, 0xb5, 0x8b, + 0x6a, 0x71, 0x1a, 0x6d, 0x8e, 0xc7, 0xe0, 0x68, 0xde, 0xe2, 0xfa, 0xb9, + 0x4b, 0x03, 0xc6, 0xd6, 0x77, 0x25, 0x18, 0x8c, 0x95, 0x7a, 0x98, 0x3a, + 0x39, 0xdc, 0x4c, 0x36, 0xde, 0xe4, 0xd5, 0x20, 0x09, 0x28, 0x24, 0x66, + 0x14, 0xf1, 0x40, 0xe0, 0xb8, 0x7b, 0x2e, 0x89, 0xbe, 0xce, 0x0a, 0xdc, + 0x05, 0xcd, 0xc7, 0xf9, 0x92, 0x6f, 0x5b, 0x7e, 0xbc, 0xa1, 0xae, 0x2e, + 0x07, 0x79, 0x07, 0x8c, 0x48, 0xb0, 0xaf, 0xf3, 0x83, 0xcb, 0xaf, 0xe1, + 0x68, 0x05, 0x09, 0x1f, 0x01, 0xe9, 0xc1, 0xdc, 0x6b, 0xcd, 0x5c, 0x2c, + 0xa7, 0xc0, 0x89, 0xfc, 0x6b, 0xd8, 0x5d, 0x26, 0x4f, 0xc2, 0x91, 0x07, + 0x13, 0x25, 0xa0, 0x80, 0x52, 0x35, 0x3c, 0x56, 0x4b, 0xcb, 0x20, 0xea, + 0xdd, 0x25, 0xda, 0xb9, 0xb0, 0xcb, 0xae, 0x64, 0xa2, 0x77, 0x65, 0x4e, + 0x20, 0x7a, 0x16, 0xe6, 0x58, 0xe3, 0x09, 0x91, 0x14, 0xf1, 0xc5, 0x95, + 0xa6, 0xd8, 0xf6, 0x68, 0x4f, 0xdb, 0xa1, 0xb1, 0x82, 0x23, 0xfd, 0xc5, + 0x6c, 0x35, 0x68, 0xe2, 0x86, 0x44, 0x5f, 0x2e, 0xcb, 0x2a, 0x5b, 0xa9, + 0xe1, 0x39, 0x3a, 0xc9, 0x32, 0xcf, 0xb2, 0xb2, 0x8a, 0x88, 0x88, 0xd5, + 0x91, 0x13, 0x2d, 0x18, 0x68, 0x32, 0x16, 0x6e, 0x6a, 0xae, 0x72, 0x77, + 0x28, 0x18, 0xc6, 0xa3, 0x22, 0x9b, 0x2e, 0xcb, 0x20, 0xf0, 0xfa, 0x97, + 0x8d, 0x39, 0x18, 0xf4, 0xe6, 0xc9, 0x20, 0x31, 0x82, 0xe2, 0xc8, 0xe1, + 0x3c, 0x26, 0x4d, 0x9f, 0xab, 0xc0, 0xb2, 0xdf, 0x31, 0xcf, 0xe6, 0xd5, + 0xea, 0x27, 0x88, 0xf1, 0xde, 0xda, 0xd8, 0x18, 0xda, 0x66, 0x33, 0xf8, + 0x5e, 0x73, 0xd3, 0x81, 0x13, 0x01, 0x84, 0x3f, 0xf1, 0x1b, 0x8c, 0xe9, + 0x17, 0xc3, 0x43, 0x4a, 0x64, 0x4f, 0xc1, 0xc2, 0x65, 0x8f, 0xd3, 0xa2, + 0x3a, 0x29, 0x7c, 0xe5, 0x3c, 0x17, 0x96, 0x58, 0x76, 0x99, 0x19, 0x50, + 0xae, 0x7a, 0xee, 0x3c, 0x41, 0x54, 0x52, 0xd3, 0x5b, 0x11, 0x33, 0xf9, + 0x12, 0x50, 0x70, 0x2e, 0x1f, 0x95, 0xcb, 0x83, 0xdc, 0xfe, 0xef, 0xed, + 0xa8, 0x27, 0x30, 0x37, 0x2d, 0x60, 0x23, 0xcb, 0xe8, 0xff, 0x43, 0x08, + 0x96, 0x82, 0x15, 0x72, 0x9b, 0x35, 0x84, 0xbf, 0x01, 0xa9, 0x50, 0x37, + 0xf9, 0xd8, 0x53, 0x3f, 0x49, 0x07, 0xc9, 0x3d, 0xeb, 0x2f, 0xa6, 0x23, + 0xf0, 0x17, 0x96, 0x65, 0xea, 0x81, 0x63, 0x80, 0x77, 0x71, 0xe5, 0xac, + 0x7a, 0x5c, 0x38, 0x4a, 0xca, 0x28, 0x89, 0x58, 0x8f, 0x2a, 0x02, 0xe6, + 0x41, 0xdd, 0x88, 0x2a, 0x7a, 0x7b, 0x11, 0x15, 0x99, 0xfc, 0xb4, 0x6c, + 0x23, 0x8d, 0xf1, 0x52, 0xf2, 0x57, 0x35, 0x4a, 0x2b, 0xb6, 0x68, 0x19, + 0x33, 0x8b, 0x3b, 0x95, 0xb0, 0x3a, 0x73, 0x4c, 0xda, 0x18, 0x4d, 0x08, + 0x60, 0xbf, 0x25, 0x80, 0xcf, 0x70, 0xd9, 0x14, 0xbe, 0x30, 0x2a, 0x92, + 0xb5, 0xb9, 0xea, 0x90, 0x29, 0x32, 0x76, 0xa3, 0x5a, 0x02, 0x87, 0xdb, + 0x28, 0x3f, 0x7a, 0xbd, 0xfa, 0x91, 0x10, 0x0f, 0x1f, 0xdd, 0x7d, 0x9c, + 0x96, 0xa1, 0x44, 0x60, 0x33, 0x22, 0x0d, 0x4f, 0xe1, 0xea, 0x47, 0xab, + 0x4a, 0x68, 0x8a, 0x8f, 0xdb, 0xbc, 0xe6, 0xfc, 0x0e, 0xb5, 0x48, 0x29, + 0x96, 0x08, 0xcc, 0x5f, 0x37, 0xa9, 0x46, 0x97, 0xca, 0xa2, 0x9b, 0x39, + 0x90, 0xed, 0x19, 0x30, 0xef, 0x71, 0x68, 0x81, 0xf7, 0xae, 0xba, 0x00, + 0x88, 0x41, 0xf3, 0xb4, 0x0c, 0x1c, 0xea, 0x9e, 0xde, 0x20, 0x27, 0x61, + 0x26, 0x39, 0x56, 0xc5, 0x85, 0x3b, 0x7f, 0x54, 0xd7, 0x61, 0x7f, 0x1c, + 0xc5, 0x3a, 0x8f, 0xfc, 0x7a, 0x14, 0x72, 0x95, 0xec, 0xed, 0x42, 0x25, + 0x95, 0xc0, 0x0d, 0x80, 0xd8, 0x59, 0x39, 0xab, 0x4a, 0xf5, 0x91, 0x60, + 0xdd, 0x51, 0x2f, 0x13, 0x18, 0x89, 0x96, 0x64, 0xaf, 0x7e, 0x66, 0x91, + 0x08, 0x03, 0x8f, 0x53, 0xa5, 0xec, 0x89, 0x24, 0x6e, 0x17, 0x65, 0xbe, + 0x1c, 0x57, 0x00, 0xab, 0x40, 0x0c, 0x15, 0xff, 0xbc, 0x5b, 0xde, 0x2c, + 0xd4, 0xea, 0x37, 0xe3, 0x4a, 0x1a, 0x8b, 0x3e, 0x19, 0x76, 0xb1, 0x25, + 0x65, 0x40, 0xb5, 0x08, 0x32, 0xb4, 0x13, 0x1a, 0xbf, 0x23, 0xb0, 0xfe, + 0xb9, 0x4b, 0xa2, 0xaf, 0xe0, 0x7e, 0x49, 0x4a, 0x42, 0x70, 0xeb, 0xaa, + 0x08, 0x06, 0x91, 0x23, 0x8f, 0x14, 0x81, 0x0c, 0x02, 0x0d, 0x1b, 0x2b, + 0x37, 0x1c, 0x4a, 0x18, 0x75, 0xd7, 0xf7, 0x75, 0x3f, 0xa9, 0xbf, 0x6d, + 0x5a, 0x48, 0x03, 0xde, 0x77, 0x65, 0x1d, 0x0a, 0x8f, 0x34, 0x56, 0x8b, + 0x55, 0x4d, 0xa6, 0x34, 0x65, 0x27, 0x19, 0xca, 0x49, 0x9c, 0xe9, 0xfa, + 0x0d, 0x5c, 0x25, 0x4e, 0x2b, 0x77, 0x5a, 0x13, 0x24, 0x9a, 0xb7, 0xe2, + 0xb9, 0xa0, 0x90, 0x34, 0x88, 0xe8, 0xc8, 0xac, 0xa9, 0x60, 0x36, 0x58, + 0x30, 0xd6, 0x69, 0x6c, 0x93, 0x4e, 0xce, 0x5d, 0x17, 0x34, 0x04, 0x9e, + 0x71, 0x77, 0x9a, 0xec, 0x74, 0x83, 0xba, 0x14, 0x9b, 0x12, 0xf5, 0x9f, + 0x41, 0xef, 0x61, 0xcb, 0x21, 0x26, 0x28, 0x76, 0x0b, 0x8e, 0x70, 0xdb, + 0x6a, 0x19, 0x0a, 0x35, 0xf1, 0x4b, 0x07, 0xb3, 0xfb, 0x62, 0x6f, 0xb0, + 0xfb, 0xfc, 0xb3, 0xc1, 0xce, 0x60, 0x77, 0x87, 0x39, 0x0b, 0x0f, 0x25, + 0x18, 0x9c, 0xac, 0x4b, 0x4b, 0x57, 0x95, 0xf7, 0x9a, 0x7d, 0xbe, 0x3d, + 0xbe, 0xfc, 0xee, 0xec, 0xe2, 0x9b, 0xe8, 0xe4, 0xed, 0xe5, 0xf1, 0xc5, + 0xeb, 0x83, 0xc3, 0x8f, 0x85, 0x1e, 0x0e, 0x0d, 0xd6, 0x41, 0x21, 0xc2, + 0xc4, 0x2f, 0x4c, 0xd3, 0x2a, 0xe8, 0xd7, 0x2c, 0x29, 0x6f, 0x76, 0xf6, + 0x77, 0x1f, 0xc5, 0x2b, 0x6d, 0x31, 0x0c, 0xfa, 0xf7, 0x6d, 0x52, 0xbb, + 0x3c, 0xa9, 0xf5, 0xad, 0x38, 0x14, 0xb4, 0xa1, 0x04, 0x58, 0xb9, 0xe0, + 0x5c, 0x30, 0x78, 0x14, 0x25, 0x48, 0x47, 0x79, 0x6c, 0x26, 0xa9, 0x91, + 0x80, 0x26, 0x4a, 0x46, 0xad, 0xe2, 0xbb, 0x68, 0x10, 0xba, 0xb2, 0x5b, + 0x8e, 0x51, 0x5e, 0xa6, 0xd3, 0x52, 0x0d, 0x29, 0x82, 0x81, 0x38, 0x81, + 0x70, 0x67, 0x0c, 0xd9, 0x0a, 0xf3, 0xa2, 0x2e, 0x2f, 0x0a, 0x73, 0x49, + 0x61, 0xde, 0x89, 0x4b, 0x14, 0x71, 0xc0, 0x03, 0x95, 0x74, 0x1b, 0x8c, + 0xb5, 0x5a, 0xb7, 0x31, 0x8c, 0xa1, 0xad, 0x01, 0x10, 0x16, 0x16, 0xdb, + 0x8c, 0x89, 0x55, 0x8c, 0xa2, 0x87, 0x3a, 0x10, 0x9c, 0x86, 0x60, 0x34, + 0xd2, 0x15, 0x44, 0x29, 0x03, 0xbd, 0xad, 0xc2, 0x67, 0xca, 0xed, 0x84, + 0xe4, 0x09, 0x91, 0xfc, 0x0c, 0x9f, 0x9b, 0x5b, 0x2f, 0x2a, 0xb0, 0x6a, + 0x91, 0x14, 0x8a, 0x08, 0x5f, 0x17, 0x21, 0x1b, 0x21, 0x9a, 0x93, 0x3c, + 0xbe, 0xe7, 0xfa, 0x33, 0x22, 0x36, 0xf8, 0x60, 0xc6, 0xa0, 0xd8, 0x05, + 0x8b, 0x4c, 0x7e, 0xcd, 0xa3, 0xf3, 0xe3, 0x37, 0x7d, 0xab, 0x83, 0x47, + 0xbf, 0x8b, 0x19, 0xca, 0x60, 0x37, 0x25, 0xb9, 0x67, 0x91, 0xcc, 0x2d, + 0xa0, 0x06, 0x3c, 0x51, 0x23, 0x80, 0xc2, 0x09, 0xf0, 0xa1, 0x11, 0x8b, + 0x84, 0xf0, 0x5a, 0xc5, 0x2f, 0xb3, 0x4b, 0xab, 0x05, 0x01, 0x8f, 0xf7, + 0x53, 0xa3, 0x96, 0xa3, 0x4d, 0x17, 0xa9, 0xcb, 0xfd, 0x21, 0x1c, 0x15, + 0xd1, 0x02, 0x2e, 0x40, 0x20, 0xb3, 0x64, 0xeb, 0xf3, 0x6f, 0x0e, 0x87, + 0x9f, 0xec, 0xee, 0xe9, 0x70, 0xb6, 0x06, 0x1e, 0xce, 0xb2, 0x91, 0x87, + 0x0f, 0x76, 0x1d, 0x8e, 0xd1, 0xb2, 0xaa, 0x71, 0xc0, 0xb1, 0x19, 0x9b, + 0x2e, 0x33, 0x68, 0xab, 0x92, 0x1a, 0xb4, 0x21, 0xd5, 0x47, 0x4d, 0xb8, + 0x74, 0x75, 0xea, 0xd8, 0x19, 0x82, 0x6a, 0x0b, 0x5a, 0xef, 0xa0, 0x74, + 0xf1, 0x7e, 0xf1, 0xdc, 0x3e, 0x92, 0x96, 0xb5, 0x35, 0xa4, 0x8d, 0xfb, + 0x98, 0x96, 0xfa, 0x9e, 0xf3, 0x7a, 0xfb, 0x6f, 0x19, 0x35, 0x51, 0x2f, + 0x75, 0xc3, 0xe5, 0xf1, 0xdd, 0xe0, 0x00, 0x68, 0x08, 0xfb, 0xc4, 0x2a, + 0xaa, 0xcc, 0x3d, 0xa0, 0x3b, 0x3f, 0x7d, 0x46, 0x1b, 0x45, 0x27, 0x4b, + 0xa0, 0x1a, 0x98, 0x29, 0x64, 0x53, 0x56, 0x5a, 0xdc, 0x23, 0x47, 0x39, + 0x03, 0xe7, 0x2f, 0x24, 0x98, 0xf4, 0xed, 0x20, 0xfa, 0x3a, 0x99, 0x17, + 0x5a, 0xad, 0xd8, 0x92, 0xaf, 0x10, 0x1c, 0xc8, 0x45, 0x93, 0x50, 0xe2, + 0xe6, 0x34, 0x89, 0x15, 0x44, 0x90, 0x78, 0x5d, 0x21, 0xba, 0xad, 0x95, + 0x77, 0x88, 0x39, 0x44, 0x0f, 0x37, 0x91, 0x1a, 0x68, 0x51, 0xe3, 0x30, + 0x2d, 0xb4, 0x81, 0xcd, 0x2a, 0x14, 0x20, 0xa0, 0xa9, 0xd1, 0x9c, 0x1e, + 0x73, 0x78, 0x99, 0xd4, 0x9e, 0x7c, 0x03, 0xac, 0x55, 0xb6, 0x13, 0x8a, + 0xae, 0xe5, 0x99, 0xca, 0x24, 0xbf, 0x61, 0xa3, 0x47, 0x41, 0xd7, 0x4d, + 0x3c, 0x1f, 0xaf, 0x06, 0x13, 0x92, 0x62, 0xd9, 0x6c, 0x36, 0x58, 0xde, + 0x6e, 0x07, 0xc7, 0x94, 0x59, 0xfe, 0x8d, 0xc0, 0x02, 0x54, 0x4d, 0xde, + 0x56, 0x9f, 0xaf, 0x89, 0xda, 0x15, 0x57, 0xce, 0x04, 0x93, 0x84, 0x25, + 0xf8, 0xcb, 0xf1, 0x5c, 0x8b, 0x6f, 0x75, 0x1c, 0x39, 0x98, 0x4f, 0x6e, + 0x61, 0xb0, 0x48, 0x66, 0xfb, 0x2e, 0x05, 0xd9, 0xf8, 0x83, 0xa2, 0x83, + 0x3b, 0x95, 0x22, 0x30, 0xcf, 0xce, 0x93, 0xeb, 0xa9, 0x0a, 0x14, 0xa1, + 0xd2, 0xe2, 0x61, 0x5b, 0x9b, 0x69, 0x20, 0xa2, 0xea, 0xc0, 0x03, 0x81, + 0xe2, 0x4b, 0xc4, 0xa9, 0x66, 0xa8, 0x8a, 0x62, 0x8c, 0x5f, 0x4b, 0xc2, + 0xfa, 0x46, 0x14, 0x2c, 0x04, 0x88, 0xa3, 0x2c, 0x06, 0xab, 0x71, 0xc7, + 0xc2, 0x91, 0xd4, 0xf1, 0x44, 0xdf, 0x0a, 0x85, 0x00, 0xe3, 0x57, 0x43, + 0xa3, 0xe1, 0xf6, 0xb4, 0x22, 0x78, 0x72, 0x56, 0xe8, 0xeb, 0xbb, 0x27, + 0x6c, 0xeb, 0xbe, 0x3c, 0x1d, 0xf6, 0x84, 0x1e, 0xe6, 0xc9, 0x7d, 0x40, + 0x59, 0x02, 0x4b, 0xad, 0xe4, 0xc7, 0x96, 0x1f, 0x09, 0x5f, 0xb3, 0x02, + 0xbc, 0xb9, 0x8c, 0x46, 0x38, 0x83, 0x77, 0x92, 0xf9, 0x2c, 0x08, 0x5b, + 0x08, 0x8d, 0x27, 0xe6, 0xe1, 0x58, 0x35, 0x11, 0x11, 0x88, 0x1c, 0xc0, + 0x0b, 0x43, 0xe7, 0x91, 0xc0, 0xf4, 0xa4, 0x17, 0xf5, 0xf7, 0x00, 0x9b, + 0xb3, 0x5b, 0x5d, 0xc8, 0x98, 0x8b, 0x7c, 0xc4, 0x63, 0x14, 0x35, 0xda, + 0x70, 0xc5, 0xd6, 0x8d, 0x25, 0x6c, 0x2a, 0x59, 0xdf, 0xd1, 0xfb, 0xfc, + 0x63, 0x4f, 0x27, 0x75, 0xb7, 0x8b, 0xd0, 0x6d, 0x96, 0x47, 0xef, 0x92, + 0xe9, 0xaa, 0x29, 0x36, 0xec, 0x3d, 0xba, 0xb3, 0x48, 0x92, 0xb8, 0x4f, + 0x1d, 0xa4, 0xaa, 0xa0, 0x6a, 0xc3, 0x10, 0xaa, 0x40, 0x86, 0x36, 0x00, + 0x5a, 0x46, 0x35, 0x71, 0xcf, 0xa3, 0xbb, 0x3d, 0xf3, 0x34, 0xf3, 0x37, + 0xb6, 0x78, 0x62, 0xaa, 0xf7, 0x8c, 0xa4, 0x91, 0xbb, 0xc8, 0xe1, 0x6e, + 0x01, 0xe5, 0x72, 0xea, 0x13, 0xd1, 0x2d, 0x71, 0x92, 0x0a, 0xa7, 0x61, + 0x0d, 0xaa, 0x74, 0xe8, 0x43, 0xbc, 0xfd, 0x40, 0x7c, 0x25, 0x59, 0xd8, + 0x07, 0x39, 0x21, 0x04, 0x1c, 0x67, 0x9a, 0x24, 0xd8, 0x62, 0x39, 0xd3, + 0xea, 0x4c, 0x60, 0xc4, 0x3d, 0x5c, 0xb7, 0x65, 0x44, 0x9c, 0x38, 0x95, + 0x90, 0xbf, 0x29, 0x84, 0x69, 0x08, 0x58, 0x6a, 0x2c, 0xf5, 0x0b, 0xc5, + 0x16, 0x30, 0x81, 0xd3, 0x03, 0xbd, 0xdc, 0xa4, 0x62, 0xc3, 0x40, 0x84, + 0x2a, 0x16, 0x8c, 0x58, 0x45, 0x37, 0xa2, 0xd3, 0xb7, 0xe4, 0x46, 0xcb, + 0x0c, 0x21, 0xb0, 0x4e, 0x60, 0x90, 0x36, 0x86, 0x10, 0x3a, 0xa3, 0x6e, + 0xc8, 0x23, 0xfb, 0x9f, 0xf3, 0x1a, 0x14, 0x5d, 0xbf, 0x68, 0x0a, 0x12, + 0x5c, 0x5d, 0x01, 0x75, 0x8f, 0x14, 0x0a, 0x76, 0x71, 0x9e, 0x5b, 0x31, + 0xd1, 0x6e, 0xf2, 0xc0, 0x02, 0x52, 0x57, 0x7b, 0x95, 0xaf, 0x05, 0x05, + 0x00, 0x8b, 0x7b, 0x7e, 0xf2, 0x56, 0xea, 0x63, 0xba, 0x83, 0x94, 0x30, + 0x64, 0xe2, 0x86, 0x94, 0x76, 0xc5, 0x78, 0x62, 0xc5, 0x99, 0x88, 0xc4, + 0xde, 0xc4, 0xc4, 0xc6, 0x07, 0x24, 0xd5, 0xbe, 0x2e, 0x96, 0xd2, 0x7b, + 0x97, 0x2f, 0xc9, 0xa2, 0x98, 0x76, 0x6b, 0x45, 0xdf, 0xdc, 0x66, 0xd6, + 0x6e, 0x23, 0x67, 0xc8, 0x1a, 0x4f, 0xc2, 0x2a, 0xb6, 0xda, 0x4a, 0x85, + 0x49, 0xf6, 0x6a, 0x79, 0x92, 0xa1, 0x05, 0xfd, 0x93, 0x68, 0xb0, 0x4d, + 0x1d, 0x16, 0xdb, 0xf6, 0xe2, 0xe2, 0x76, 0x5c, 0xd0, 0xf5, 0xc8, 0x49, + 0xc1, 0x3f, 0x3a, 0x24, 0x67, 0x1e, 0xf1, 0xe4, 0xa7, 0xa8, 0x3f, 0x9e, + 0x62, 0x7e, 0x11, 0x2a, 0x4c, 0xfe, 0x48, 0x24, 0xc3, 0x4f, 0xfc, 0xb4, + 0xc1, 0x59, 0x72, 0xc3, 0x77, 0x6f, 0x18, 0x47, 0x1d, 0x25, 0xfc, 0x2e, + 0x2f, 0x0e, 0xde, 0x0e, 0x5f, 0x8b, 0x91, 0xf5, 0x32, 0xf3, 0xc5, 0x01, + 0xd5, 0xb2, 0xe0, 0x3c, 0x91, 0x0e, 0x69, 0xec, 0x5e, 0xc0, 0xbd, 0x2d, + 0x48, 0x5b, 0xcb, 0x06, 0xf6, 0xea, 0x20, 0xc6, 0x52, 0x76, 0x10, 0xbc, + 0x9a, 0x0e, 0xd3, 0x66, 0xb1, 0xe5, 0x2e, 0xd6, 0x22, 0xac, 0x56, 0xe2, + 0x31, 0xee, 0x0c, 0x1b, 0x55, 0x1f, 0x62, 0x42, 0x39, 0xb4, 0xc1, 0xd8, + 0xa7, 0xc2, 0xcb, 0xd7, 0xe2, 0x4a, 0x1e, 0x92, 0xea, 0xd1, 0x57, 0x58, + 0xfc, 0xa0, 0x36, 0x8b, 0x33, 0xcc, 0x09, 0x2f, 0x57, 0x34, 0x38, 0xd7, + 0x78, 0x98, 0x48, 0x68, 0x4d, 0x6f, 0xfe, 0x71, 0x77, 0xab, 0xbd, 0xf9, + 0xcb, 0x5f, 0xda, 0x7c, 0xfb, 0xd8, 0x4d, 0xd6, 0xf7, 0x79, 0x2a, 0x9b, + 0x7f, 0xdc, 0xdb, 0x7a, 0x74, 0x46, 0x61, 0xa6, 0x9d, 0xef, 0x93, 0xde, + 0xe0, 0xc1, 0x46, 0xaf, 0xac, 0x0e, 0xac, 0xde, 0xc1, 0x2e, 0xd6, 0xe3, + 0xca, 0xa3, 0xdc, 0x55, 0x50, 0x1f, 0x38, 0x16, 0xd8, 0x49, 0x7e, 0xde, + 0x85, 0xa3, 0x29, 0x0b, 0x27, 0xff, 0xf3, 0x38, 0x44, 0x07, 0x24, 0x45, + 0x3c, 0x64, 0x77, 0x9c, 0x6e, 0x5e, 0x64, 0x03, 0xf4, 0xbd, 0xf7, 0x48, + 0xdf, 0x7e, 0x76, 0x81, 0x9a, 0xcb, 0xfe, 0x50, 0x0e, 0xa8, 0x32, 0x3c, + 0x58, 0xed, 0x67, 0xc3, 0x97, 0x9c, 0x5c, 0xdf, 0xdf, 0xe5, 0xc9, 0x9b, + 0x63, 0xc6, 0x8d, 0x3d, 0x3a, 0x61, 0xfc, 0xb2, 0xa1, 0x22, 0x08, 0x9a, + 0x46, 0xeb, 0xc0, 0x55, 0x43, 0x70, 0x7b, 0x71, 0x14, 0xba, 0xb8, 0x25, + 0x77, 0xfa, 0xdd, 0x4e, 0x70, 0xd7, 0x1a, 0x58, 0x5b, 0x58, 0xfa, 0xde, + 0xc9, 0x55, 0xff, 0x4d, 0x36, 0x81, 0xd6, 0xd5, 0x17, 0x38, 0x6a, 0x7a, + 0x8b, 0x3e, 0x7c, 0x37, 0x9f, 0x55, 0x3e, 0x0e, 0x93, 0x04, 0x55, 0xa1, + 0xde, 0x58, 0x57, 0x00, 0xe0, 0xe7, 0xed, 0x7e, 0x1f, 0x25, 0x5f, 0x25, + 0x3e, 0x48, 0xbd, 0x04, 0x15, 0x8c, 0x07, 0x3b, 0xfb, 0xb4, 0x3e, 0xe9, + 0x74, 0x25, 0x1e, 0xed, 0xd8, 0xc7, 0x21, 0xf9, 0x8c, 0xc0, 0x6b, 0xce, + 0x4a, 0xf2, 0xc6, 0x22, 0x31, 0x07, 0x6d, 0x84, 0x90, 0x94, 0x90, 0xcb, + 0x93, 0x7b, 0x1f, 0x48, 0xa3, 0xc5, 0xf5, 0xb2, 0xc5, 0x0a, 0x93, 0xbc, + 0xaf, 0xf8, 0xe8, 0x5b, 0x1d, 0x75, 0x3f, 0xcb, 0x3b, 0x95, 0x92, 0x17, + 0xd2, 0x43, 0x48, 0x80, 0xfa, 0x89, 0x56, 0x88, 0x38, 0xcb, 0x03, 0x06, + 0xa6, 0xc3, 0xb6, 0xa2, 0x2f, 0x01, 0x5c, 0x65, 0x80, 0xae, 0x59, 0x1d, + 0xa7, 0xb7, 0x5e, 0x6e, 0xf0, 0xb5, 0x36, 0x60, 0xa3, 0xb9, 0x79, 0x59, + 0x88, 0xeb, 0x2c, 0xaa, 0xe5, 0xeb, 0x92, 0xc8, 0x92, 0x86, 0x25, 0x27, + 0xbc, 0xdb, 0xef, 0x02, 0x51, 0x3b, 0x9d, 0xb7, 0x4c, 0xa6, 0xff, 0xcb, + 0x67, 0xd3, 0xf0, 0xe1, 0x45, 0x9d, 0x2b, 0x06, 0x56, 0x60, 0x87, 0x48, + 0x47, 0x06, 0x20, 0x58, 0x23, 0x42, 0x5b, 0x24, 0xcf, 0x33, 0x5b, 0x33, + 0xbd, 0x44, 0x74, 0x34, 0x17, 0x62, 0xe9, 0xac, 0xad, 0x62, 0xe4, 0x62, + 0x3e, 0xba, 0x5c, 0x4c, 0xe0, 0xdd, 0x97, 0xb8, 0xc6, 0xff, 0x8c, 0xe7, + 0xcb, 0x38, 0x5f, 0x45, 0xbb, 0x7b, 0xbd, 0x68, 0x6f, 0x67, 0x77, 0xaf, + 0x65, 0x0e, 0x9d, 0xff, 0xe4, 0xe8, 0x9a, 0x3d, 0x7c, 0xdd, 0xf9, 0xd8, + 0x59, 0xf8, 0x18, 0x79, 0xdc, 0xaa, 0x9a, 0x4d, 0x4a, 0xbc, 0x87, 0x1d, + 0x7d, 0x52, 0xe1, 0x96, 0x6b, 0xda, 0x01, 0x10, 0x0d, 0x32, 0x85, 0xd8, + 0x9c, 0xac, 0xf6, 0x94, 0x2b, 0x53, 0xc2, 0x4f, 0x6c, 0x68, 0x59, 0x31, + 0x84, 0x50, 0x38, 0xc3, 0x5b, 0x9c, 0xa3, 0xb0, 0x56, 0x75, 0x8f, 0xd2, + 0xd2, 0xb6, 0x85, 0x63, 0x34, 0x78, 0x6f, 0x88, 0xde, 0x8f, 0x4e, 0x0e, + 0x2f, 0x0d, 0x31, 0xef, 0x8a, 0xaf, 0xd3, 0x7c, 0xf5, 0x71, 0x35, 0x8a, + 0x1e, 0x7d, 0x66, 0xb2, 0x7f, 0x93, 0x90, 0x44, 0x36, 0x1f, 0x2d, 0xaf, + 0xf7, 0xff, 0x1a, 0xe7, 0xd7, 0xd9, 0xfc, 0x43, 0xcf, 0x4f, 0x90, 0xa4, + 0xb4, 0x4f, 0x0c, 0x6a, 0xf7, 0xc5, 0xee, 0x13, 0x89, 0x80, 0x4f, 0xb9, + 0xa4, 0x19, 0xf8, 0x43, 0x77, 0xd6, 0x15, 0xc0, 0x06, 0x84, 0xde, 0x3b, + 0x94, 0x86, 0xf9, 0xa4, 0x2b, 0xea, 0x56, 0x1c, 0x3e, 0x3b, 0xd1, 0x67, + 0x25, 0x9b, 0xb9, 0xbb, 0x21, 0xe5, 0x0b, 0xbb, 0x9c, 0xfa, 0xb7, 0x5c, + 0x74, 0x07, 0x95, 0x13, 0xfe, 0x81, 0xb9, 0x72, 0x17, 0xae, 0x24, 0xd3, + 0xa1, 0xf0, 0x64, 0x65, 0xa7, 0xa3, 0x3c, 0x89, 0x6f, 0x7d, 0x91, 0x3b, + 0x8f, 0xe6, 0x60, 0xb6, 0xf3, 0x8b, 0xd7, 0x87, 0x82, 0x81, 0x69, 0x39, + 0x38, 0x58, 0xea, 0xc8, 0x59, 0x3a, 0xb6, 0x78, 0x94, 0x1f, 0xe8, 0x9f, + 0x83, 0xe4, 0xf7, 0x27, 0xa3, 0x8f, 0x78, 0x88, 0xce, 0x9d, 0xc0, 0x8d, + 0x1d, 0x54, 0xcb, 0x19, 0xb0, 0xcc, 0x5f, 0x32, 0xa9, 0x59, 0x35, 0xbb, + 0x4d, 0x29, 0xd0, 0x26, 0xb6, 0x6b, 0xa9, 0xa2, 0xae, 0x45, 0x77, 0xd5, + 0x58, 0x40, 0xe3, 0xe6, 0xea, 0x67, 0x47, 0x07, 0xe7, 0x81, 0xde, 0x04, + 0xbd, 0xc4, 0xdb, 0x88, 0xf8, 0x39, 0x96, 0x99, 0x51, 0x30, 0x53, 0x4c, + 0x49, 0xab, 0x9e, 0x97, 0x76, 0x4b, 0xf0, 0xc9, 0xc9, 0x5d, 0x2c, 0x91, + 0xd6, 0x99, 0x5e, 0x27, 0x30, 0x67, 0x00, 0xcf, 0x7b, 0x3a, 0x89, 0xe1, + 0x51, 0xd3, 0x4b, 0x08, 0x42, 0x28, 0xda, 0x4a, 0x35, 0xac, 0x86, 0xf6, + 0xe6, 0x21, 0xd2, 0x6c, 0x00, 0x4d, 0x7b, 0x90, 0xdf, 0xe5, 0x31, 0xce, + 0x74, 0x5d, 0xd9, 0x04, 0x84, 0x3f, 0xd3, 0xe0, 0xe3, 0xe2, 0x96, 0x58, + 0xa9, 0x78, 0x82, 0xa9, 0xf7, 0x74, 0x9c, 0x98, 0x4d, 0x75, 0x92, 0x4a, + 0x44, 0x06, 0x5b, 0x33, 0x80, 0xa5, 0x53, 0xd9, 0x30, 0xb9, 0x81, 0x58, + 0x79, 0x99, 0x16, 0x89, 0xe0, 0xde, 0x45, 0x97, 0xf7, 0x99, 0x08, 0x9d, + 0x0e, 0x70, 0x40, 0x62, 0x1a, 0x8b, 0x65, 0x2a, 0xd0, 0x19, 0xb4, 0x79, + 0xe0, 0x07, 0x41, 0x79, 0xb5, 0x8e, 0x33, 0xa4, 0x1c, 0x39, 0x07, 0xda, + 0xf0, 0xe8, 0x9b, 0x88, 0x73, 0xb4, 0xb9, 0x8f, 0x43, 0xae, 0x49, 0xc0, + 0xbe, 0xf0, 0x19, 0x14, 0x89, 0xaf, 0x96, 0x7c, 0xde, 0x0f, 0x6f, 0xe2, + 0x05, 0x8b, 0xc4, 0xbb, 0x3b, 0xac, 0x7d, 0x7f, 0x67, 0xd9, 0x5e, 0x7c, + 0x50, 0xad, 0x1c, 0x69, 0xd1, 0x09, 0x14, 0xf3, 0x09, 0x57, 0x13, 0x65, + 0x99, 0xb8, 0x6a, 0xf3, 0xa3, 0xdb, 0xb3, 0xd8, 0x9e, 0x31, 0xc3, 0x9a, + 0x16, 0x44, 0x1a, 0x79, 0x31, 0xb9, 0xdd, 0x1e, 0xd3, 0x3f, 0x4f, 0x76, + 0xb6, 0x01, 0xc5, 0x58, 0xc2, 0x44, 0xc6, 0x34, 0xb9, 0xb7, 0xf7, 0xec, + 0x59, 0x2f, 0xea, 0xb0, 0xd1, 0xca, 0x3a, 0xe0, 0x23, 0x41, 0x27, 0xab, + 0xd3, 0x56, 0x67, 0x6e, 0x3b, 0xbf, 0x1a, 0xf3, 0x7f, 0xfc, 0x9a, 0xd5, + 0x8a, 0xba, 0xd4, 0xf4, 0x0d, 0xac, 0xc3, 0x3c, 0xc4, 0x5a, 0x31, 0xb2, + 0xba, 0xa7, 0x7d, 0x30, 0xb3, 0x04, 0x7b, 0x20, 0x16, 0x49, 0xb6, 0x30, + 0x37, 0xe3, 0x4c, 0x01, 0xf2, 0xd1, 0x7d, 0xe0, 0x9c, 0x81, 0x63, 0x58, + 0xe2, 0xaa, 0x34, 0xb1, 0xbe, 0x58, 0x8e, 0xfa, 0x9a, 0x61, 0x2a, 0x7a, + 0x46, 0x4a, 0x27, 0x97, 0xfe, 0x9c, 0x9a, 0xf5, 0xb7, 0xc1, 0x91, 0xbf, + 0x8c, 0x3a, 0x4a, 0x5b, 0xfc, 0x63, 0x00, 0x2f, 0x61, 0x32, 0xe6, 0x69, + 0x64, 0xaf, 0xf4, 0x8f, 0xff, 0xf8, 0x0f, 0x6a, 0xf6, 0x3f, 0xb8, 0x95, + 0x57, 0x7f, 0x2c, 0xca, 0x9b, 0xe0, 0x99, 0x8e, 0x12, 0xfc, 0x89, 0xf7, + 0x91, 0x22, 0xee, 0x09, 0x40, 0xa5, 0x48, 0x84, 0x7a, 0x73, 0xaa, 0x1c, + 0xb9, 0x17, 0xcc, 0x2f, 0x45, 0x8a, 0x9a, 0xd8, 0xdc, 0x5c, 0xd8, 0xc1, + 0x97, 0xec, 0xbf, 0x4c, 0x38, 0xb5, 0x99, 0xa8, 0x10, 0x48, 0x74, 0x5b, + 0x26, 0x62, 0x1c, 0xbf, 0xfd, 0xf6, 0xe4, 0xe2, 0xec, 0xed, 0x9b, 0xe3, + 0xb7, 0x97, 0xd1, 0xb7, 0x07, 0x17, 0x27, 0x07, 0x5f, 0x9e, 0x6a, 0x06, + 0x35, 0x4f, 0x81, 0xa3, 0x45, 0x44, 0xf4, 0xae, 0xe1, 0x88, 0x06, 0x19, + 0x2d, 0xad, 0xe0, 0xf9, 0xb5, 0x72, 0x81, 0xef, 0x15, 0x98, 0x1a, 0xe6, + 0xd5, 0xf7, 0x28, 0x60, 0xd1, 0x63, 0x87, 0xdf, 0x7b, 0xab, 0x65, 0xc1, + 0x66, 0xcb, 0x55, 0x90, 0x93, 0xcb, 0x81, 0x2c, 0x4c, 0xa5, 0xc6, 0x9f, + 0x7c, 0xdd, 0x21, 0x85, 0xf7, 0x1f, 0x44, 0x5f, 0x49, 0x5a, 0xb7, 0x86, + 0x54, 0xb9, 0x57, 0x35, 0xc5, 0x08, 0x66, 0x1c, 0x37, 0x86, 0x83, 0xd3, + 0x53, 0xdf, 0xd5, 0xe3, 0x55, 0x18, 0x14, 0xce, 0x47, 0xb2, 0x80, 0x6e, + 0xac, 0xa2, 0xf0, 0x75, 0xe6, 0x51, 0xb6, 0xe7, 0xab, 0x10, 0x50, 0x9b, + 0x3b, 0xa3, 0xed, 0xd8, 0x14, 0x2c, 0x06, 0x76, 0x37, 0xd2, 0x01, 0x4a, + 0x8b, 0xdb, 0x5e, 0xd4, 0xfd, 0x63, 0x57, 0xb2, 0xb3, 0x12, 0xc0, 0xcd, + 0x4a, 0x8d, 0x87, 0x2d, 0x3f, 0xa8, 0xb7, 0x67, 0x7e, 0x4c, 0xea, 0x44, + 0x73, 0x03, 0x70, 0x2f, 0x7a, 0xff, 0x67, 0x61, 0xf2, 0x0c, 0x02, 0x0f, + 0xfd, 0xe3, 0x8a, 0xe8, 0xef, 0x52, 0xcc, 0x95, 0x46, 0xd9, 0x4f, 0xd2, + 0xfa, 0x2e, 0x94, 0xb6, 0x78, 0x1c, 0xa0, 0x0a, 0x8b, 0x19, 0x87, 0x95, + 0x5f, 0xc8, 0x01, 0x52, 0xff, 0x58, 0x2e, 0x87, 0x07, 0x29, 0x9b, 0xbd, + 0x61, 0xc5, 0x7a, 0x95, 0x83, 0x82, 0xaa, 0x1e, 0xb6, 0xad, 0xd6, 0x03, + 0x5c, 0x56, 0x1c, 0x58, 0x9e, 0xa7, 0x13, 0xc5, 0xa9, 0x6b, 0xa5, 0x8a, + 0x01, 0x3c, 0x1d, 0x17, 0x87, 0x00, 0xf5, 0x9e, 0x73, 0x01, 0x28, 0x57, + 0x08, 0x41, 0x82, 0x50, 0x89, 0x8b, 0xe4, 0x9c, 0xd9, 0x35, 0x57, 0x21, + 0x04, 0x81, 0x9d, 0x10, 0xd1, 0xe3, 0xeb, 0xcc, 0xc4, 0xef, 0xd8, 0xb9, + 0x5f, 0x25, 0x63, 0x4b, 0x62, 0x76, 0x4c, 0x0a, 0x73, 0x40, 0x54, 0xce, + 0x02, 0x06, 0x47, 0xad, 0xd9, 0x9b, 0x39, 0x4e, 0x09, 0xf6, 0x32, 0x8d, + 0x63, 0x28, 0x82, 0x74, 0x5f, 0x1f, 0x06, 0xcf, 0xbc, 0x44, 0x5c, 0x94, + 0x86, 0x0c, 0x05, 0xfc, 0x2d, 0x4b, 0x0f, 0x46, 0xc4, 0x1c, 0x86, 0xc5, + 0x0f, 0xa2, 0x49, 0x0d, 0x7e, 0x44, 0x93, 0x66, 0x0a, 0xa5, 0xd3, 0x33, + 0xe5, 0x4c, 0x24, 0xe3, 0x44, 0x71, 0x34, 0x4a, 0xaf, 0x23, 0xb3, 0x82, + 0x44, 0x4c, 0x25, 0x40, 0x09, 0xcb, 0x66, 0x09, 0x6f, 0x15, 0x30, 0xc0, + 0x20, 0xbb, 0xdf, 0x70, 0x85, 0x78, 0x0f, 0x5a, 0x65, 0x33, 0x29, 0x38, + 0x52, 0x3f, 0xb0, 0xa2, 0xc1, 0x92, 0xbe, 0xe4, 0x75, 0xb4, 0xb0, 0x26, + 0xc5, 0xb7, 0xd6, 0x20, 0x2f, 0x36, 0xd1, 0x02, 0x6e, 0x6f, 0x8e, 0x94, + 0x12, 0x4b, 0xcf, 0xc5, 0x3a, 0x58, 0x00, 0x2c, 0x73, 0x0b, 0x58, 0x56, + 0xb8, 0xda, 0xd4, 0xa6, 0x03, 0xa8, 0xe6, 0x56, 0xc6, 0x02, 0xf1, 0xc9, + 0x44, 0x2f, 0xf1, 0xe9, 0x95, 0x6a, 0x12, 0xb6, 0x59, 0x0a, 0xc5, 0x74, + 0x25, 0x65, 0xed, 0x69, 0x7c, 0x9b, 0x01, 0xe3, 0x99, 0x13, 0x89, 0xc8, + 0x63, 0xa2, 0x3f, 0xea, 0x5f, 0x7d, 0xf1, 0x5e, 0xc6, 0x56, 0x78, 0xab, + 0xd8, 0xf2, 0x1e, 0x6c, 0x91, 0x02, 0x98, 0x5a, 0xc7, 0x5a, 0xd0, 0x0a, + 0xe3, 0xa5, 0xfd, 0x32, 0x43, 0x54, 0x68, 0xc7, 0x8a, 0x2c, 0x73, 0x63, + 0x3a, 0x0d, 0x20, 0xaa, 0xc5, 0x1c, 0x11, 0x37, 0x84, 0x0f, 0x57, 0x9e, + 0xfe, 0x40, 0x63, 0x48, 0x04, 0xce, 0x36, 0x98, 0x89, 0x46, 0x27, 0xb3, + 0x78, 0x56, 0x33, 0x8f, 0x05, 0x1c, 0xcd, 0xbc, 0xad, 0xe1, 0xcd, 0xa4, + 0x95, 0x11, 0xd2, 0x78, 0x26, 0xc2, 0xa3, 0x27, 0xbf, 0xd9, 0x4a, 0xe2, + 0xd7, 0x36, 0x36, 0x0e, 0xdf, 0x0d, 0x2f, 0xcf, 0xde, 0x44, 0x67, 0xef, + 0x2e, 0xcf, 0xdf, 0x5d, 0xea, 0xd5, 0x35, 0x92, 0xe8, 0x5f, 0xd1, 0x11, + 0x45, 0x0a, 0xb0, 0xdd, 0x9c, 0xa9, 0x0b, 0x19, 0xc1, 0x0a, 0x19, 0xa0, + 0xe9, 0x02, 0x94, 0x1a, 0x97, 0xdd, 0x03, 0xec, 0x26, 0x41, 0xbc, 0xc5, + 0x9a, 0xdf, 0xd3, 0x9a, 0x23, 0x33, 0x13, 0xb6, 0x1d, 0x4b, 0x16, 0x82, + 0xde, 0xd3, 0x5e, 0x75, 0xa4, 0x56, 0xc7, 0x0c, 0xce, 0xde, 0x2a, 0x28, + 0x90, 0x8f, 0xc8, 0x31, 0xdb, 0x8e, 0x37, 0xfd, 0x84, 0xc1, 0x81, 0x08, + 0x8b, 0x19, 0x97, 0x66, 0xcc, 0xb4, 0xf8, 0x4c, 0x04, 0xad, 0x54, 0x53, + 0xd4, 0xc2, 0x4c, 0xb9, 0x32, 0xa3, 0x19, 0xde, 0xb8, 0xd8, 0x6a, 0x8e, + 0x47, 0x41, 0x4c, 0x99, 0x38, 0xe4, 0x39, 0x78, 0xcb, 0x0a, 0xcc, 0xdf, + 0xb3, 0x09, 0xbc, 0x71, 0xcd, 0xde, 0x47, 0xdd, 0xef, 0x92, 0xb0, 0xc1, + 0xdf, 0xff, 0x9d, 0x13, 0x00, 0xdf, 0xdb, 0x27, 0xff, 0x90, 0x2e, 0xff, + 0x32, 0xef, 0x22, 0x14, 0xab, 0xea, 0x79, 0xfd, 0xe6, 0xf8, 0xe2, 0xcb, + 0xe3, 0x8b, 0xb3, 0x21, 0xc2, 0x4f, 0xcc, 0xdc, 0xd5, 0x24, 0xf6, 0xdb, + 0x24, 0x1f, 0x25, 0x79, 0xa6, 0x85, 0x64, 0xec, 0xaf, 0x67, 0xdb, 0x5f, + 0x0d, 0x87, 0x07, 0xe7, 0x27, 0xae, 0xe6, 0x88, 0x4b, 0x45, 0x12, 0x1d, + 0x69, 0x2e, 0xc9, 0x72, 0x3c, 0x7f, 0x7b, 0x85, 0xe8, 0x62, 0x7c, 0x2b, + 0x21, 0xaa, 0x0d, 0x1f, 0xa7, 0xd9, 0x68, 0xd9, 0xb9, 0xa9, 0x19, 0x6a, + 0xdc, 0xb0, 0xa1, 0x0b, 0x49, 0xa2, 0xb6, 0x10, 0xf0, 0x6b, 0x36, 0x29, + 0xf7, 0x5c, 0x18, 0xd7, 0x6d, 0x3e, 0xea, 0x13, 0xa1, 0xdf, 0x5a, 0x7d, + 0x48, 0x09, 0xa6, 0x27, 0x36, 0x29, 0x51, 0xb6, 0xde, 0xce, 0x70, 0xcb, + 0x55, 0x61, 0xb7, 0x6f, 0xf9, 0x68, 0x70, 0x59, 0x8c, 0xe9, 0x40, 0x38, + 0xbb, 0x9c, 0x25, 0x0b, 0x9d, 0x64, 0xf6, 0xfa, 0x18, 0xd8, 0x01, 0xf5, + 0xe6, 0xea, 0x55, 0x89, 0xa9, 0x8b, 0x3e, 0x79, 0xea, 0x40, 0x9f, 0xc2, + 0x82, 0xa1, 0x57, 0x24, 0x7c, 0x2f, 0xee, 0x27, 0x7a, 0x81, 0x00, 0xe2, + 0x78, 0x2e, 0x56, 0x6e, 0xe1, 0xdf, 0x75, 0x5f, 0x07, 0x17, 0xd8, 0x42, + 0xd4, 0xbf, 0xc6, 0x34, 0x47, 0xa3, 0x69, 0x3c, 0xbf, 0xc5, 0x4d, 0x86, + 0xbb, 0x89, 0xd5, 0x4d, 0xc3, 0x32, 0xe2, 0x72, 0x64, 0x70, 0x6d, 0x29, + 0xbc, 0x00, 0x04, 0x40, 0x2b, 0x7e, 0xce, 0x96, 0x5d, 0x07, 0xd9, 0x14, + 0x38, 0x71, 0x70, 0x92, 0xfc, 0x22, 0xb0, 0xd5, 0xe8, 0xf8, 0x94, 0x2e, + 0x25, 0x97, 0xa9, 0x00, 0xf5, 0x3c, 0x99, 0x32, 0xf0, 0x8e, 0x05, 0x97, + 0x48, 0x72, 0x5e, 0x0a, 0x26, 0x26, 0x8c, 0xc3, 0xd0, 0xb7, 0xe1, 0x86, + 0x00, 0xa5, 0x20, 0x07, 0xb1, 0x70, 0x35, 0x2a, 0x94, 0x6b, 0x0b, 0x03, + 0x03, 0xb8, 0xa4, 0x2f, 0x59, 0x11, 0x16, 0x31, 0xd1, 0x98, 0xad, 0x43, + 0x1f, 0x5a, 0x12, 0xdb, 0x77, 0x32, 0x08, 0x2f, 0x92, 0x3a, 0x67, 0x55, + 0x25, 0x45, 0x62, 0xed, 0x36, 0xc9, 0xeb, 0x6d, 0x06, 0x00, 0x30, 0x40, + 0x6a, 0x40, 0xac, 0xdf, 0x0e, 0x5e, 0xc6, 0xe2, 0x5e, 0xab, 0xb1, 0xa6, + 0x36, 0xf0, 0x81, 0x55, 0x57, 0x47, 0xf8, 0x93, 0xf8, 0x9f, 0x10, 0x27, + 0xa9, 0xb7, 0x6f, 0x39, 0x01, 0xb7, 0xc9, 0x2b, 0x48, 0xa7, 0x61, 0x88, + 0xa7, 0x20, 0x20, 0xc0, 0x2c, 0x28, 0x41, 0xff, 0xd0, 0x60, 0x9c, 0x6c, + 0xdb, 0x7f, 0xcb, 0x57, 0x45, 0xd6, 0x1f, 0x2d, 0xa1, 0x93, 0x79, 0xac, + 0x2e, 0x4d, 0x04, 0xe4, 0xa2, 0xc0, 0x00, 0xe7, 0xc2, 0xf7, 0xec, 0xd6, + 0x40, 0x8a, 0xb5, 0x78, 0x3a, 0x90, 0x73, 0x57, 0x05, 0x6e, 0x71, 0x70, + 0x1d, 0x12, 0xc8, 0x8e, 0x80, 0x5e, 0x8d, 0x5a, 0xd6, 0x11, 0xea, 0x26, + 0xbb, 0x90, 0xb3, 0xb9, 0x56, 0xcd, 0x83, 0x9d, 0xbd, 0x1a, 0xb6, 0x5b, + 0x3a, 0xb4, 0xf4, 0x4b, 0x88, 0x08, 0x89, 0x62, 0x88, 0x5b, 0x3c, 0xae, + 0x45, 0xff, 0xdf, 0x95, 0x5c, 0x1f, 0x48, 0x90, 0x06, 0xe2, 0xa9, 0x14, + 0x79, 0x58, 0x7b, 0x8b, 0xc8, 0x61, 0x2a, 0x2f, 0x2f, 0x7f, 0x38, 0x3f, + 0x7e, 0x65, 0x6f, 0x3e, 0xb6, 0x67, 0x02, 0xc0, 0x85, 0xf0, 0x8b, 0x44, + 0xc1, 0x2e, 0x83, 0x1a, 0x9c, 0x44, 0x64, 0xfd, 0xd2, 0xdc, 0xc2, 0xd2, + 0x4d, 0x3f, 0xfa, 0xfe, 0xe8, 0x64, 0x78, 0x7e, 0x7a, 0x76, 0xf8, 0xea, + 0xe5, 0xf7, 0xc6, 0x8d, 0x3f, 0x67, 0xc4, 0x19, 0x91, 0xd1, 0xdc, 0x67, + 0x1e, 0x20, 0x40, 0xdf, 0x7b, 0x7b, 0xfc, 0xdd, 0x7b, 0xd2, 0x0c, 0x5e, + 0x31, 0x28, 0x78, 0xef, 0x2e, 0x9e, 0xea, 0x4b, 0xac, 0x5e, 0xb5, 0xc8, + 0x75, 0x41, 0x3a, 0x47, 0xdb, 0xc2, 0xb2, 0x3c, 0x11, 0x20, 0xb4, 0xae, + 0x20, 0x41, 0x6b, 0x44, 0x56, 0x50, 0x4f, 0x28, 0xae, 0xe4, 0x66, 0xb6, + 0x14, 0x67, 0xcc, 0xdc, 0xcd, 0xdf, 0x2d, 0x25, 0x32, 0x8f, 0xbd, 0xd1, + 0xa1, 0x93, 0x17, 0xc1, 0x8f, 0xfa, 0x8d, 0x0f, 0x0a, 0x55, 0xf8, 0xdd, + 0x9c, 0x63, 0x21, 0x1c, 0x96, 0xa1, 0x56, 0xc8, 0x84, 0xfb, 0x54, 0x01, + 0x0f, 0x15, 0xc9, 0x87, 0xe3, 0x30, 0x2d, 0x24, 0xdb, 0x55, 0x61, 0x16, + 0xf1, 0xc5, 0x8d, 0x25, 0x1e, 0x8f, 0xe9, 0x07, 0x63, 0x4c, 0x72, 0x39, + 0x97, 0x73, 0xae, 0xca, 0x3e, 0xbc, 0x64, 0x15, 0x4a, 0xab, 0x96, 0xa9, + 0xf9, 0xd9, 0x4a, 0xca, 0x21, 0xf1, 0xbf, 0x8a, 0x5d, 0x19, 0x96, 0x9a, + 0xa8, 0x9c, 0x68, 0xc7, 0xe6, 0xaa, 0x99, 0x80, 0x6c, 0x45, 0x90, 0xf4, + 0x42, 0x16, 0x42, 0x05, 0x81, 0x35, 0xbe, 0xb2, 0x03, 0x9c, 0x29, 0x69, + 0xd4, 0x2a, 0x2e, 0xa0, 0x5a, 0x0a, 0x76, 0x67, 0x9a, 0x8e, 0xbc, 0xc1, + 0xbc, 0xe6, 0x89, 0x64, 0x47, 0xb7, 0x22, 0x3e, 0x84, 0x47, 0xc8, 0x4c, + 0xe1, 0x3e, 0xbd, 0xb6, 0xc8, 0xac, 0x7c, 0xa2, 0x10, 0x3f, 0x4c, 0xd5, + 0x61, 0x12, 0xa4, 0x53, 0x52, 0xa1, 0x98, 0x98, 0x88, 0xe6, 0x3e, 0x0d, + 0x42, 0x19, 0x15, 0x44, 0x08, 0xd8, 0xa7, 0xca, 0xb2, 0x51, 0xaf, 0x5c, + 0xd2, 0x99, 0xd8, 0xc8, 0x42, 0x02, 0x0b, 0xd2, 0xb3, 0x11, 0x72, 0xa2, + 0x33, 0x6b, 0x48, 0x1f, 0x2a, 0x36, 0x5e, 0x73, 0x1e, 0x14, 0x90, 0x9a, + 0x26, 0x2c, 0x6a, 0xc1, 0xfa, 0x16, 0x76, 0x66, 0x37, 0x29, 0xaf, 0xe0, + 0x68, 0x19, 0xd6, 0xf3, 0x72, 0xa3, 0x97, 0x92, 0x16, 0x58, 0x78, 0x04, + 0xdb, 0xc5, 0x39, 0x90, 0x10, 0x4b, 0x45, 0x1a, 0x37, 0xa5, 0x47, 0x23, + 0xe7, 0x06, 0x55, 0x50, 0x18, 0xa3, 0x4b, 0x2b, 0xd5, 0xf7, 0xd8, 0x8a, + 0xba, 0xd5, 0x14, 0xf2, 0xcd, 0x13, 0x0b, 0x81, 0x11, 0x13, 0x43, 0xc1, + 0xbe, 0x86, 0xf9, 0xd8, 0x5d, 0xc6, 0x9c, 0xb9, 0xc2, 0xa1, 0x20, 0xb9, + 0x02, 0xee, 0x2c, 0xb9, 0x38, 0xba, 0x56, 0x10, 0x45, 0xfd, 0x4b, 0x76, + 0xb8, 0x19, 0x18, 0x9b, 0x8f, 0x05, 0x96, 0xe5, 0x0e, 0xc8, 0x4a, 0x4c, + 0xeb, 0x2b, 0xed, 0xd0, 0x65, 0x59, 0xdb, 0x66, 0xf5, 0x24, 0x69, 0x27, + 0x46, 0x8e, 0x88, 0xd9, 0x74, 0x83, 0x5c, 0xc3, 0x42, 0x33, 0x38, 0x9d, + 0xb3, 0x52, 0x18, 0x1e, 0x2a, 0x16, 0xf9, 0x9c, 0xa7, 0x8a, 0x53, 0x90, + 0x24, 0xcb, 0x05, 0xca, 0xef, 0x8c, 0x15, 0x81, 0x1c, 0xc1, 0x9f, 0xae, + 0x3d, 0xbb, 0x43, 0xfc, 0x5a, 0xd1, 0xa2, 0xbe, 0x79, 0x77, 0x7a, 0x79, + 0x72, 0x1e, 0x3a, 0x1e, 0xa3, 0xef, 0x4e, 0x2e, 0xbf, 0x26, 0x79, 0x9d, + 0x6b, 0x3b, 0x9f, 0xb2, 0x77, 0xe7, 0xcd, 0x9b, 0x83, 0xb7, 0x9c, 0xa1, + 0xfe, 0x16, 0x31, 0x72, 0x07, 0xd0, 0x19, 0x98, 0x1b, 0xd1, 0x0a, 0x33, + 0xe9, 0x70, 0xee, 0x72, 0xaf, 0xe9, 0x65, 0xa8, 0x9d, 0x3e, 0x30, 0x1c, + 0x3e, 0x42, 0xe1, 0x1a, 0xf1, 0x86, 0xab, 0x4e, 0xb0, 0x62, 0x9b, 0x0e, + 0x4e, 0x2d, 0xeb, 0x59, 0xbc, 0xce, 0x75, 0xe8, 0x71, 0xe4, 0xc9, 0x89, + 0x6c, 0x0e, 0x9f, 0xaa, 0x5c, 0xdd, 0xde, 0x73, 0x81, 0x0d, 0x75, 0x20, + 0xa6, 0x88, 0x59, 0x25, 0x91, 0x69, 0xae, 0x2a, 0x8d, 0x5c, 0x97, 0xd5, + 0xb8, 0x75, 0xea, 0x11, 0x43, 0x82, 0x53, 0x39, 0xf3, 0xc6, 0x40, 0x56, + 0x36, 0x59, 0x5f, 0xbe, 0x38, 0x0d, 0xef, 0xd3, 0x6a, 0xfd, 0x60, 0x0b, + 0x34, 0xbb, 0xce, 0x12, 0x7f, 0x70, 0xfb, 0x67, 0xd6, 0x8c, 0x59, 0x7e, + 0xa1, 0x81, 0xc9, 0xdd, 0xd2, 0x67, 0xb6, 0xd6, 0xa7, 0x2d, 0xd9, 0x72, + 0x35, 0x6a, 0xd4, 0x72, 0xb6, 0x2f, 0x52, 0x65, 0xa5, 0x8a, 0x37, 0x90, + 0x63, 0xcf, 0x5c, 0xcb, 0x1a, 0xd0, 0x80, 0xb8, 0x5e, 0x4d, 0x8d, 0xd1, + 0x39, 0x83, 0x59, 0xda, 0x63, 0x95, 0xcc, 0xde, 0x5a, 0x29, 0x71, 0x4b, + 0x8d, 0x42, 0x42, 0x24, 0x43, 0xb8, 0x78, 0x9f, 0x29, 0xca, 0x72, 0x65, + 0xd9, 0x20, 0x79, 0x48, 0xd8, 0xbd, 0xc9, 0xbf, 0xfe, 0x75, 0x71, 0x1d, + 0x66, 0x4d, 0x61, 0xae, 0x9a, 0x1e, 0xdc, 0x8e, 0x09, 0x2c, 0x52, 0x91, + 0x16, 0x27, 0xab, 0x8c, 0x40, 0x2b, 0x8e, 0xed, 0xae, 0xeb, 0x50, 0xbf, + 0xdf, 0x6b, 0x7e, 0xbf, 0x27, 0x16, 0x47, 0xae, 0x40, 0xef, 0xf0, 0x34, + 0x25, 0x17, 0x38, 0x94, 0xde, 0x4c, 0x26, 0x60, 0x0a, 0x93, 0x62, 0xf5, + 0x70, 0xab, 0x08, 0x4b, 0x14, 0xb3, 0x3f, 0xc7, 0x22, 0x2d, 0x73, 0xe4, + 0x38, 0xe2, 0x11, 0x58, 0x88, 0x25, 0x80, 0x14, 0xe1, 0x5a, 0x60, 0x53, + 0x7c, 0x5b, 0x51, 0x83, 0xf4, 0xfd, 0x53, 0x17, 0xd0, 0xed, 0x59, 0x1a, + 0x0a, 0x7c, 0x69, 0x46, 0x4d, 0x3f, 0x5d, 0xdc, 0x59, 0x81, 0x4b, 0xfa, + 0xf5, 0xb9, 0x2b, 0xee, 0x52, 0x54, 0xdc, 0x53, 0x15, 0xe0, 0x5a, 0xe3, + 0xfd, 0x18, 0x1c, 0x02, 0xec, 0x98, 0x31, 0x38, 0xcc, 0xd7, 0x41, 0x6d, + 0x5c, 0x49, 0x35, 0xb4, 0x37, 0x28, 0x35, 0x09, 0xdb, 0xf2, 0x14, 0xd9, + 0x95, 0x60, 0x47, 0x01, 0x6f, 0x09, 0x71, 0xe2, 0x75, 0xd7, 0x7f, 0xdc, + 0xdb, 0xd9, 0xd9, 0xdd, 0xdf, 0xfd, 0xec, 0xc5, 0xce, 0xfe, 0xee, 0xee, + 0xee, 0xde, 0xfe, 0xee, 0xfe, 0xfe, 0xde, 0xce, 0x4f, 0xdb, 0x6c, 0x3a, + 0xba, 0x4b, 0x93, 0x7b, 0x57, 0x49, 0xfe, 0x3b, 0xb9, 0xa6, 0xe1, 0x2f, + 0x58, 0x89, 0x1b, 0x90, 0xb9, 0xa4, 0x6a, 0xb8, 0x26, 0xf8, 0x38, 0x64, + 0x02, 0x09, 0xbe, 0x16, 0x40, 0xb2, 0x85, 0xcf, 0x56, 0xc4, 0x19, 0x0c, + 0x00, 0x93, 0x31, 0xaa, 0xbf, 0x2d, 0x79, 0xa6, 0x23, 0x96, 0x06, 0x20, + 0xd2, 0x14, 0x2e, 0x37, 0xec, 0x7a, 0x9a, 0x8d, 0x46, 0x08, 0x80, 0x77, + 0xe9, 0x91, 0x83, 0x88, 0x91, 0x39, 0x6f, 0x85, 0x24, 0xd4, 0x69, 0x80, + 0xf0, 0x34, 0x39, 0xe8, 0x7e, 0x75, 0x44, 0xee, 0xd2, 0x90, 0xdc, 0x71, + 0xc6, 0xa8, 0xf4, 0x13, 0x66, 0x4a, 0xb4, 0x48, 0xb9, 0x4b, 0x9b, 0x88, + 0xae, 0x92, 0xcf, 0x76, 0xf6, 0xf7, 0xb9, 0x70, 0xc4, 0xef, 0x77, 0x7b, + 0x1a, 0x59, 0x18, 0x86, 0x4b, 0xf7, 0xdc, 0xed, 0x24, 0x6d, 0xb0, 0xf6, + 0x11, 0xce, 0x73, 0xbe, 0x9c, 0x25, 0xb9, 0xea, 0x21, 0xb8, 0x0f, 0x05, + 0x40, 0x86, 0x89, 0xd1, 0x86, 0xec, 0x9e, 0x45, 0x29, 0x14, 0x98, 0xe4, + 0x25, 0xbf, 0xc1, 0x5f, 0x9e, 0x7a, 0xce, 0x71, 0x54, 0xe6, 0x52, 0x64, + 0x92, 0x1f, 0x86, 0x40, 0x0e, 0x54, 0x8c, 0xec, 0x36, 0x94, 0x55, 0x35, + 0xa7, 0xe3, 0xc7, 0x60, 0xf0, 0x7b, 0xcf, 0x76, 0x7f, 0x92, 0x40, 0x36, + 0x26, 0x70, 0xbf, 0x0a, 0x5a, 0x1a, 0x6c, 0xa2, 0xf2, 0x88, 0xa4, 0x81, + 0x29, 0x61, 0x6c, 0x26, 0x83, 0xeb, 0x81, 0x09, 0x09, 0x6a, 0x38, 0xec, + 0x85, 0xe1, 0xc4, 0x82, 0x60, 0x2d, 0x35, 0xd9, 0xa1, 0x76, 0x99, 0x6d, + 0xc8, 0x6c, 0xbb, 0x62, 0x97, 0xac, 0xd4, 0x78, 0xd9, 0xa0, 0x2b, 0xe3, + 0xe0, 0xe4, 0x94, 0xe3, 0x55, 0x4e, 0x49, 0x02, 0x1b, 0x1a, 0x2b, 0x43, + 0x48, 0x0f, 0xe2, 0x6d, 0xe6, 0x29, 0xdf, 0xa6, 0x3d, 0x07, 0x2d, 0x6f, + 0x61, 0xf1, 0x10, 0x2b, 0xd8, 0xee, 0x2e, 0x92, 0xb9, 0xe2, 0x40, 0x91, + 0x3c, 0x4c, 0xfc, 0xac, 0x10, 0x73, 0x0a, 0xe0, 0x16, 0x19, 0x87, 0x18, + 0x3e, 0x0e, 0x48, 0xbc, 0xb2, 0xf0, 0xa8, 0x66, 0x91, 0x27, 0xd3, 0xe4, + 0x4e, 0xed, 0x1e, 0x02, 0x5e, 0xf7, 0x95, 0xba, 0x17, 0xa4, 0x98, 0x5d, + 0xe9, 0xbd, 0x24, 0x15, 0x0f, 0x06, 0xf7, 0xb9, 0x2d, 0x79, 0xff, 0x3e, + 0x9d, 0x1b, 0xc5, 0x7f, 0x1d, 0xe0, 0xb2, 0x79, 0x73, 0xf8, 0xbd, 0x3e, + 0x8b, 0xa0, 0x1a, 0x87, 0xf4, 0xae, 0xd0, 0x8c, 0xdd, 0x7a, 0x54, 0xa0, + 0xa8, 0xf2, 0x56, 0x0e, 0x49, 0xcc, 0x62, 0x3d, 0xc3, 0xc4, 0x14, 0x63, + 0x1e, 0x4b, 0x2d, 0x3d, 0x36, 0xa1, 0xa0, 0xa5, 0x2b, 0x92, 0x97, 0x18, + 0xf9, 0xbc, 0x17, 0xf9, 0xc2, 0xf1, 0xd9, 0x94, 0xfe, 0x44, 0xa0, 0x03, + 0xaf, 0x3a, 0x9e, 0x65, 0x4c, 0xbf, 0x20, 0xfc, 0x88, 0xfe, 0x94, 0xb0, + 0x57, 0xfd, 0x0b, 0x4d, 0xe5, 0x4b, 0x40, 0x47, 0xf6, 0x84, 0x58, 0xd9, + 0x1f, 0x50, 0x8e, 0x07, 0x6e, 0xf4, 0xea, 0x8e, 0x93, 0xf1, 0x1f, 0x99, + 0xb7, 0xc8, 0xd8, 0x44, 0x96, 0xdb, 0xea, 0xca, 0x2e, 0x8c, 0xa4, 0x7a, + 0xd5, 0x97, 0x4b, 0xb6, 0x53, 0xbb, 0xea, 0x0c, 0x3c, 0x8a, 0x19, 0x93, + 0x56, 0x22, 0x85, 0xe2, 0x5c, 0xe3, 0x2c, 0x70, 0x2d, 0x69, 0x77, 0xa5, + 0xf5, 0xd3, 0xec, 0x9e, 0xab, 0xdc, 0x5d, 0x5d, 0x71, 0xdd, 0xf2, 0xb3, + 0xb9, 0x87, 0x88, 0x64, 0xae, 0x2a, 0x0f, 0xce, 0xac, 0xb4, 0x06, 0xcd, + 0xcd, 0x0a, 0xd8, 0x5b, 0xe0, 0xe2, 0x20, 0x3a, 0xc0, 0x2a, 0x91, 0x2c, + 0x84, 0xe6, 0xc4, 0xcd, 0x06, 0x71, 0xb0, 0x16, 0x27, 0xa7, 0x25, 0x78, + 0xf9, 0x86, 0x9c, 0xa1, 0xdc, 0x1f, 0xc7, 0x84, 0xcd, 0xb2, 0xb9, 0x85, + 0x3d, 0x2f, 0x0b, 0x01, 0x0c, 0xb3, 0x7a, 0xbd, 0x1b, 0x62, 0x33, 0x4c, + 0xa7, 0x8a, 0xd0, 0xab, 0x82, 0x33, 0xde, 0x08, 0x27, 0x33, 0xe9, 0x2f, + 0x6e, 0x16, 0xb6, 0xd3, 0xc6, 0xaf, 0x84, 0x99, 0x69, 0xa0, 0x2d, 0xae, + 0xb7, 0xf3, 0xaf, 0xcf, 0x07, 0xd1, 0x31, 0xb7, 0x24, 0x63, 0xd2, 0x7b, + 0x08, 0x1a, 0x14, 0x7d, 0x47, 0x93, 0xbd, 0x66, 0x06, 0x7e, 0x96, 0xf3, + 0x5f, 0x68, 0x4d, 0xbf, 0x14, 0xa3, 0x09, 0xbe, 0xad, 0xf6, 0x4a, 0x0d, + 0x59, 0x44, 0xdc, 0x39, 0x7e, 0xa7, 0xa3, 0x42, 0xdc, 0xd1, 0x6d, 0x93, + 0xef, 0x21, 0xcb, 0x2b, 0xf0, 0x0a, 0xf2, 0x66, 0x44, 0x4c, 0x13, 0xac, + 0x6f, 0xb1, 0xc2, 0xfe, 0x41, 0xe1, 0x06, 0x26, 0x87, 0x5e, 0x0f, 0xd2, + 0x40, 0x40, 0x5a, 0x4a, 0x7e, 0x2e, 0xb0, 0x46, 0xce, 0x55, 0x2e, 0xc0, + 0x02, 0x79, 0xa2, 0x61, 0x48, 0x99, 0x3a, 0x30, 0x44, 0xdf, 0x28, 0x92, + 0xda, 0x71, 0x0d, 0xc4, 0x2b, 0xfb, 0x82, 0x85, 0x62, 0x1e, 0x0b, 0x31, + 0xa1, 0x65, 0x3c, 0x1d, 0x6c, 0xfc, 0x2f, 0xc9, 0x11, 0xc2, 0x43, 0x02, + 0xff, 0x01, 0x00, +}; +#define BUF_SIZE 0x10000 +/* Decompress and send to stdout a gzip-compressed buffer */ +void hugehelp(void) +{ + unsigned char* buf; + int status,headerlen; + z_stream z; + + /* Make sure no gzip options are set */ + if (hugehelpgz[3] & 0xfe) + return; + + headerlen = 10; + z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen); + z.next_in = (unsigned char *)hugehelpgz + headerlen; + z.zalloc = (alloc_func)Z_NULL; + z.zfree = (free_func)Z_NULL; + z.opaque = 0; + + if (inflateInit2(&z, -MAX_WBITS) != Z_OK) + return; + + buf = malloc(BUF_SIZE); + if (buf) { + while(1) { + z.avail_out = BUF_SIZE; + z.next_out = buf; + status = inflate(&z, Z_SYNC_FLUSH); + if (status == Z_OK || status == Z_STREAM_END) { + fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout); + if (status == Z_STREAM_END) + break; + } + else + break; /* Error */ + } + free(buf); + } + inflateEnd(&z); +} +#endif /* USE_MANUAL */ +#endif /* HAVE_LIBZ */ diff --git a/src/hugehelp.h b/src/hugehelp.h new file mode 100644 index 0000000..b84be17 --- /dev/null +++ b/src/hugehelp.h @@ -0,0 +1,26 @@ +#ifndef HEADER_CURL_HUGEHELP_H +#define HEADER_CURL_HUGEHELP_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +void hugehelp(void); + +#endif /* HEADER_CURL_HUGEHELP_H */ diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..6e3ef3d --- /dev/null +++ b/src/main.c @@ -0,0 +1,5830 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +#include "setup.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdarg.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <ctype.h> +#include <errno.h> + +#if defined(MSDOS) || defined(WIN32) +# if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME) +# include <libgen.h> +# endif +#endif + +#include <curl/curl.h> + +#include "urlglob.h" +#include "writeout.h" +#include "getpass.h" +#include "homedir.h" +#include "curlutil.h" +#ifdef USE_MANUAL +#include "hugehelp.h" +#endif +#ifdef USE_ENVIRONMENT +#include "writeenv.h" +#endif +#include "rawstr.h" + +#define CURLseparator "--_curl_--" + +#ifdef NETWARE +#ifdef __NOVELL_LIBC__ +#include <screen.h> +#else +#include <nwconio.h> +#define mkdir mkdir_510 +#endif +#endif + +#include "version.h" + +#ifdef HAVE_IO_H /* typical win32 habit */ +#include <io.h> +#endif + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif + +#ifdef HAVE_UTIME_H +#include <utime.h> +#else +#ifdef HAVE_SYS_UTIME_H +#include <sys/utime.h> +#endif + +#endif /* HAVE_UTIME_H */ + +#ifdef HAVE_LIMITS_H +#include <limits.h> +#endif + +#ifdef HAVE_SYS_POLL_H +#include <sys/poll.h> +#elif defined(HAVE_POLL_H) +#include <poll.h> +#endif + +#ifdef HAVE_LOCALE_H +#include <locale.h> /* for setlocale() */ +#endif + +#define ENABLE_CURLX_PRINTF +/* make the curlx header define all printf() functions to use the curlx_* + versions instead */ +#include "curlx.h" /* header from the libcurl directory */ + +#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV) +#include <iconv.h> +/* set default codesets for iconv */ +#ifndef CURL_ICONV_CODESET_OF_NETWORK +#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" +#endif +#endif /* CURL_DOES_CONVERSIONS && HAVE_ICONV */ + +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> /* for IPPROTO_TCP */ +#endif +#ifdef HAVE_NETINET_TCP_H +#include <netinet/tcp.h> /* for TCP_KEEPIDLE, TCP_KEEPINTVL */ +#endif + +#include "os-specific.h" + +/* The last #include file should be: */ +#ifdef CURLDEBUG +#ifndef CURLTOOLDEBUG +#define MEMDEBUG_NODEFINES +#endif +/* This is low-level hard-hacking memory leak tracking and similar. Using + the library level code from this client-side is ugly, but we do this + anyway for convenience. */ +#include "memdebug.h" +#endif + +#ifdef __VMS +static int vms_show = 0; +#endif + +#if defined(NETWARE) +#define PRINT_LINES_PAUSE 23 +#endif + +#if defined(__SYMBIAN32__) +#define PRINT_LINES_PAUSE 16 +#define pressanykey() getchar() +#endif + +#define DEFAULT_MAXREDIRS 50L + +#if defined(O_BINARY) && defined(HAVE_SETMODE) + #ifdef __HIGHC__ + #define SET_BINMODE(file) _setmode(file,O_BINARY) + #else + #define SET_BINMODE(file) setmode(fileno(file),O_BINARY) + #endif +#else + #define SET_BINMODE(file) ((void)0) +#endif + +#ifndef O_BINARY +/* since O_BINARY as used in bitmasks, setting it to zero makes it usable in + source code but yet it doesn't ruin anything */ +#define O_BINARY 0 +#endif + +#if defined(MSDOS) || defined(WIN32) + +static const char *msdosify(const char *); +static char *rename_if_dos_device_name(char *); +static char *sanitize_dos_name(char *); + +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(m) (0) /* cannot tell if file is a device */ +# endif +#endif + +#ifdef WIN32 +# define _use_lfn(f) (1) /* long file names always available */ +#elif !defined(__DJGPP__) || (__DJGPP__ < 2) /* DJGPP 2.0 has _use_lfn() */ +# define _use_lfn(f) (0) /* long file names never available */ +#endif + +#endif /* MSDOS || WIN32 */ + +#ifdef MSDOS +#define USE_WATT32 +#include <dos.h> + +#ifdef DJGPP +/* we want to glob our own argv[] */ +char **__crt0_glob_function (char *arg) +{ + (void)arg; + return (char**)0; +} +#endif /* __DJGPP__ */ +#endif /* MSDOS */ + +#ifndef STDIN_FILENO +#define STDIN_FILENO fileno(stdin) +#endif + +#ifndef STDOUT_FILENO +#define STDOUT_FILENO fileno(stdout) +#endif + +#ifndef STDERR_FILENO +#define STDERR_FILENO fileno(stderr) +#endif + +#define CURL_PROGRESS_STATS 0 /* default progress display */ +#define CURL_PROGRESS_BAR 1 + +typedef enum { + HTTPREQ_UNSPEC, + HTTPREQ_GET, + HTTPREQ_HEAD, + HTTPREQ_POST, + HTTPREQ_SIMPLEPOST, + HTTPREQ_CUSTOM, + HTTPREQ_LAST +} HttpReq; + +/* + * Large file support (>2Gb) using WIN32 functions. + */ + +#ifdef USE_WIN32_LARGE_FILES +# include <io.h> +# include <sys/types.h> +# include <sys/stat.h> +# define lseek(fdes,offset,whence) _lseeki64(fdes, offset, whence) +# define fstat(fdes,stp) _fstati64(fdes, stp) +# define stat(fname,stp) _stati64(fname, stp) +# define struct_stat struct _stati64 +# define LSEEK_ERROR (__int64)-1 +#endif + +/* + * Small file support (<2Gb) using WIN32 functions. + */ + +#ifdef USE_WIN32_SMALL_FILES +# include <io.h> +# include <sys/types.h> +# include <sys/stat.h> +# define lseek(fdes,offset,whence) _lseek(fdes, (long)offset, whence) +# define fstat(fdes,stp) _fstat(fdes, stp) +# define stat(fname,stp) _stat(fname, stp) +# define struct_stat struct _stat +# define LSEEK_ERROR (long)-1 +#endif + +#ifndef struct_stat +# define struct_stat struct stat +#endif + +#ifndef LSEEK_ERROR +# define LSEEK_ERROR (off_t)-1 +#endif + +#ifdef WIN32 +# include <direct.h> +# define mkdir(x,y) (mkdir)(x) +# undef PATH_MAX +# define PATH_MAX MAX_PATH +# ifndef __POCC__ +# define F_OK 0 +# endif +#endif + +/* + * Default sizeof(off_t) in case it hasn't been defined in config file. + */ + +#ifndef SIZEOF_OFF_T +# if defined(__VMS) && !defined(__VAX) +# if defined(_LARGEFILE) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__OS400__) && defined(__ILEC400__) +# if defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__MVS__) && defined(__IBMC__) +# if defined(_LP64) || defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(__370__) && defined(__IBMC__) +# if defined(_LP64) || defined(_LARGE_FILES) +# define SIZEOF_OFF_T 8 +# endif +# elif defined(TPF) +# define SIZEOF_OFF_T 8 +# endif +# ifndef SIZEOF_OFF_T +# define SIZEOF_OFF_T 4 +# endif +#endif + +#ifdef CURL_DOES_CONVERSIONS +#ifdef HAVE_ICONV +iconv_t inbound_cd = (iconv_t)-1; +iconv_t outbound_cd = (iconv_t)-1; + +/* + * convert_to_network() is an internal function to convert + * from the host encoding to ASCII on non-ASCII platforms. + */ +static CURLcode +convert_to_network(char *buffer, size_t length) +{ + CURLcode rc; + + /* translate from the host encoding to the network encoding */ + char *input_ptr, *output_ptr; + size_t in_bytes, out_bytes; + + /* open an iconv conversion descriptor if necessary */ + if(outbound_cd == (iconv_t)-1) { + outbound_cd = iconv_open(CURL_ICONV_CODESET_OF_NETWORK, + CURL_ICONV_CODESET_OF_HOST); + if(outbound_cd == (iconv_t)-1) { + return CURLE_CONV_FAILED; + } + } + /* call iconv */ + input_ptr = output_ptr = buffer; + in_bytes = out_bytes = length; + rc = iconv(outbound_cd, &input_ptr, &in_bytes, + &output_ptr, &out_bytes); + if ((rc == -1) || (in_bytes != 0)) { + return CURLE_CONV_FAILED; + } + + return CURLE_OK; +} + +/* + * convert_from_network() is an internal function + * for performing ASCII conversions on non-ASCII platforms. + */ +static CURLcode +convert_from_network(char *buffer, size_t length) +{ + CURLcode rc; + + /* translate from the network encoding to the host encoding */ + char *input_ptr, *output_ptr; + size_t in_bytes, out_bytes; + + /* open an iconv conversion descriptor if necessary */ + if(inbound_cd == (iconv_t)-1) { + inbound_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST, + CURL_ICONV_CODESET_OF_NETWORK); + if(inbound_cd == (iconv_t)-1) { + return CURLE_CONV_FAILED; + } + } + /* call iconv */ + input_ptr = output_ptr = buffer; + in_bytes = out_bytes = length; + rc = iconv(inbound_cd, &input_ptr, &in_bytes, + &output_ptr, &out_bytes); + if ((rc == -1) || (in_bytes != 0)) { + return CURLE_CONV_FAILED; + } + + return CURLE_OK; +} +#endif /* HAVE_ICONV */ + +static +char convert_char(curl_infotype infotype, char this_char) +{ +/* determine how this specific character should be displayed */ + switch(infotype) { + case CURLINFO_DATA_IN: + case CURLINFO_DATA_OUT: + case CURLINFO_SSL_DATA_IN: + case CURLINFO_SSL_DATA_OUT: + /* data, treat as ASCII */ + if ((this_char >= 0x20) && (this_char < 0x7f)) { + /* printable ASCII hex value: convert to host encoding */ + convert_from_network(&this_char, 1); + } + else { + /* non-printable ASCII, use a replacement character */ + return UNPRINTABLE_CHAR; + } + /* fall through to default */ + default: + /* treat as host encoding */ + if (ISPRINT(this_char) + && (this_char != '\t') + && (this_char != '\r') + && (this_char != '\n')) { + /* printable characters excluding tabs and line end characters */ + return this_char; + } + break; + } + /* non-printable, use a replacement character */ + return UNPRINTABLE_CHAR; +} +#endif /* CURL_DOES_CONVERSIONS */ + +#ifdef WIN32 + +#ifdef __BORLANDC__ + /* 64-bit lseek-like function unavailable */ +# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence) +#endif + +#ifdef __POCC__ +# if (__POCC__ < 450) + /* 64-bit lseek-like function unavailable */ +# define _lseeki64(hnd,ofs,whence) _lseek(hnd,ofs,whence) +# else +# define _lseeki64(hnd,ofs,whence) _lseek64(hnd,ofs,whence) +# endif +#endif + +#ifndef HAVE_FTRUNCATE +#define HAVE_FTRUNCATE 1 +#endif + +/* + * Truncate a file handle at a 64-bit position 'where'. + */ + +static int ftruncate64 (int fd, curl_off_t where) +{ + if(_lseeki64(fd, where, SEEK_SET) < 0) + return -1; + + if(!SetEndOfFile((HANDLE)_get_osfhandle(fd))) + return -1; + + return 0; +} +#define ftruncate(fd,where) ftruncate64(fd,where) + +#endif /* WIN32 */ + +typedef enum { + TRACE_NONE, /* no trace/verbose output at all! */ + TRACE_BIN, /* tcpdump inspired look */ + TRACE_ASCII, /* like *BIN but without the hex output */ + TRACE_PLAIN /* -v/--verbose type */ +} trace; + +struct OutStruct { + char *filename; + FILE *stream; + struct Configurable *config; + curl_off_t bytes; /* amount written so far */ + curl_off_t init; /* original size (non-zero when appending) */ +}; + +struct Configurable { + CURL *easy; /* once we have one, we keep it here */ + bool remote_time; + char *random_file; + char *egd_file; + char *useragent; + char *cookie; /* single line with specified cookies */ + char *cookiejar; /* write to this file */ + char *cookiefile; /* read from this file */ + bool cookiesession; /* new session? */ + bool encoding; /* Accept-Encoding please */ + long authtype; /* auth bitmask */ + bool use_resume; + bool resume_from_current; + bool disable_epsv; + bool disable_eprt; + bool ftp_pret; + curl_off_t resume_from; + char *postfields; + curl_off_t postfieldsize; + char *referer; + long timeout; + long connecttimeout; + long maxredirs; + curl_off_t max_filesize; + char *headerfile; + char *ftpport; + char *iface; + int localport; + int localportrange; + unsigned short porttouse; + char *range; + long low_speed_limit; + long low_speed_time; + bool showerror; + char *userpwd; + char *proxyuserpwd; + char *proxy; + int proxyver; /* set to CURLPROXY_HTTP* define */ + char *noproxy; + char *mail_from; + struct curl_slist *mail_rcpt; + bool proxytunnel; + bool ftp_append; /* APPE on ftp */ + bool mute; /* shutup */ + bool use_ascii; /* select ascii or text transfer */ + bool autoreferer; /* automatically set referer */ + bool failonerror; /* fail on (HTTP) errors */ + bool include_headers; /* send headers to data output */ + bool no_body; /* don't get the body */ + bool dirlistonly; /* only get the FTP dir list */ + bool followlocation; /* follow http redirects */ + bool unrestricted_auth; /* Continue to send authentication (user+password) + when following ocations, even when hostname + changed */ + bool netrc_opt; + bool netrc; + bool noprogress; + bool isatty; /* updated internally only if the output is a tty */ + struct getout *url_list; /* point to the first node */ + struct getout *url_last; /* point to the last/current node */ + struct getout *url_get; /* point to the node to fill in URL */ + struct getout *url_out; /* point to the node to fill in outfile */ + char *cipher_list; + char *cert; + char *cert_type; + char *cacert; + char *capath; + char *crlfile; + char *key; + char *key_type; + char *key_passwd; + char *pubkey; + char *hostpubmd5; + char *engine; + bool list_engines; + bool crlf; + char *customrequest; + char *krblevel; + char *trace_dump; /* file to dump the network trace to, or NULL */ + FILE *trace_stream; + bool trace_fopened; + trace tracetype; + bool tracetime; /* include timestamp? */ + long httpversion; + int progressmode; + bool nobuffer; + bool readbusy; /* set when reading input returns EAGAIN */ + bool globoff; + bool use_httpget; + bool insecure_ok; /* set TRUE to allow insecure SSL connects */ + bool create_dirs; + bool ftp_create_dirs; + bool ftp_skip_ip; + bool proxynegotiate; + bool proxyntlm; + bool proxydigest; + bool proxybasic; + bool proxyanyauth; + char *writeout; /* %-styled format string to output */ + bool writeenv; /* write results to environment, if available */ + FILE *errors; /* if stderr redirect is requested */ + bool errors_fopened; + struct curl_slist *quote; + struct curl_slist *postquote; + struct curl_slist *prequote; + long ssl_version; + long ip_version; + curl_TimeCond timecond; + time_t condtime; + struct curl_slist *headers; + struct curl_httppost *httppost; + struct curl_httppost *last_post; + struct curl_slist *telnet_options; + HttpReq httpreq; + + /* for bandwidth limiting features: */ + curl_off_t sendpersecond; /* send to peer */ + curl_off_t recvpersecond; /* receive from peer */ + + bool ftp_ssl; + bool ftp_ssl_reqd; + bool ftp_ssl_control; + bool ftp_ssl_ccc; + int ftp_ssl_ccc_mode; + + char *socksproxy; /* set to server string */ + int socksver; /* set to CURLPROXY_SOCKS* define */ + char *socks5_gssapi_service; /* set service name for gssapi principal + * default rcmd */ + int socks5_gssapi_nec ; /* The NEC reference server does not protect + * the encryption type exchange */ + + bool tcp_nodelay; + long req_retry; /* number of retries */ + long retry_delay; /* delay between retries (in seconds) */ + long retry_maxtime; /* maximum time to keep retrying */ + + char *ftp_account; /* for ACCT */ + char *ftp_alternative_to_user; /* send command if USER/PASS fails */ + int ftp_filemethod; + long tftp_blksize; /* TFTP BLKSIZE option */ + bool ignorecl; /* --ignore-content-length */ + bool disable_sessionid; + + char *libcurl; /* output libcurl code to this file name */ + bool raw; + bool post301; + bool post302; + bool nokeepalive; /* for keepalive needs */ + long alivetime; + bool content_disposition; /* use Content-disposition filename */ + + int default_node_flags; /* default flags to seach for each 'node', which is + basically each given URL to transfer */ + struct OutStruct *outs; +}; + +#define WARN_PREFIX "Warning: " +#define WARN_TEXTWIDTH (79 - (int)strlen(WARN_PREFIX)) +/* produce this text message to the user unless mute was selected */ +static void warnf(struct Configurable *config, const char *fmt, ...) +{ + if(!config->mute) { + va_list ap; + int len; + char *ptr; + char print_buffer[256]; + + va_start(ap, fmt); + len = vsnprintf(print_buffer, sizeof(print_buffer), fmt, ap); + va_end(ap); + + ptr = print_buffer; + while(len > 0) { + fputs(WARN_PREFIX, config->errors); + + if(len > (int)WARN_TEXTWIDTH) { + int cut = WARN_TEXTWIDTH-1; + + while(!ISSPACE(ptr[cut]) && cut) { + cut--; + } + if(0 == cut) + /* not a single cutting position was found, just cut it at the + max text width then! */ + cut = WARN_TEXTWIDTH-1; + + (void)fwrite(ptr, cut + 1, 1, config->errors); + fputs("\n", config->errors); + ptr += cut+1; /* skip the space too */ + len -= cut; + } + else { + fputs(ptr, config->errors); + len = 0; + } + } + } +} + +/* + * This is the main global constructor for the app. Call this before + * _any_ libcurl usage. If this fails, *NO* libcurl functions may be + * used, or havoc may be the result. + */ +static CURLcode main_init(void) +{ +#ifdef DJGPP + /* stop stat() wasting time */ + _djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE; +#endif + + return curl_global_init(CURL_GLOBAL_DEFAULT); +} + +/* + * This is the main global destructor for the app. Call this after + * _all_ libcurl usage is done. + */ +static void main_free(void) +{ + curl_global_cleanup(); +#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV) + /* close iconv conversion descriptor */ + if(inbound_cd != (iconv_t)-1) + iconv_close(inbound_cd); + if(outbound_cd != (iconv_t)-1) + iconv_close(outbound_cd); +#endif /* CURL_DOES_CONVERSIONS && HAVE_ICONV */ +} + +static int SetHTTPrequest(struct Configurable *config, + HttpReq req, HttpReq *store) +{ + if((*store == HTTPREQ_UNSPEC) || + (*store == req)) { + *store = req; + return 0; + } + warnf(config, "You can only select one HTTP request!\n"); + return 1; +} + +static void helpf(FILE *errors, const char *fmt, ...) +{ + va_list ap; + if(fmt) { + va_start(ap, fmt); + fputs("curl: ", errors); /* prefix it */ + vfprintf(errors, fmt, ap); + va_end(ap); + } + fprintf(errors, "curl: try 'curl --help' " +#ifdef USE_MANUAL + "or 'curl --manual' " +#endif + "for more information\n"); +} + +/* + * A chain of these nodes contain URL to get and where to put the URL's + * contents. + */ +struct getout { + struct getout *next; /* next one */ + char *url; /* the URL we deal with */ + char *outfile; /* where to store the output */ + char *infile; /* file to upload, if GETOUT_UPLOAD is set */ + int flags; /* options */ +}; +#define GETOUT_OUTFILE (1<<0) /* set when outfile is deemed done */ +#define GETOUT_URL (1<<1) /* set when URL is deemed done */ +#define GETOUT_USEREMOTE (1<<2) /* use remote file name locally */ +#define GETOUT_UPLOAD (1<<3) /* if set, -T has been used */ +#define GETOUT_NOUPLOAD (1<<4) /* if set, -T "" has been used */ + +static void help(void) +{ + int i; + /* A few of these source lines are >80 columns wide, but that's only because + breaking the strings narrower makes this chunk look even worse! + + Starting with 7.18.0, this list of command line options is sorted based + on the long option name. It is not done automatically, although a command + line like the following can help out: + + curl --help | cut -c5- | grep "^-" | sort + */ + static const char * const helptext[]={ + "Usage: curl [options...] <url>", + "Options: (H) means HTTP/HTTPS only, (F) means FTP only", + " --anyauth Pick \"any\" authentication method (H)", + " -a/--append Append to target file when uploading (F/SFTP)", + " --basic Use HTTP Basic Authentication (H)", + " --cacert <file> CA certificate to verify peer against (SSL)", + " --capath <directory> CA directory to verify peer against (SSL)", + " -E/--cert <cert[:passwd]> Client certificate file and password (SSL)", + " --cert-type <type> Certificate file type (DER/PEM/ENG) (SSL)", + " --ciphers <list> SSL ciphers to use (SSL)", + " --compressed Request compressed response (using deflate or gzip)", + " -K/--config <file> Specify which config file to read", + " --connect-timeout <seconds> Maximum time allowed for connection", + " -C/--continue-at <offset> Resumed transfer offset", + " -b/--cookie <name=string/file> Cookie string or file to read cookies from (H)", + " -c/--cookie-jar <file> Write cookies to this file after operation (H)", + " --create-dirs Create necessary local directory hierarchy", + " --crlf Convert LF to CRLF in upload", + " --crlfile <file> Get a CRL list in PEM format from the given file", + " -d/--data <data> HTTP POST data (H)", + " --data-ascii <data> HTTP POST ASCII data (H)", + " --data-binary <data> HTTP POST binary data (H)", + " --data-urlencode <name=data/name@filename> HTTP POST data url encoded (H)", + " --digest Use HTTP Digest Authentication (H)", + " --disable-eprt Inhibit using EPRT or LPRT (F)", + " --disable-epsv Inhibit using EPSV (F)", + " -D/--dump-header <file> Write the headers to this file", + " --egd-file <file> EGD socket path for random data (SSL)", + " --engine <eng> Crypto engine to use (SSL). \"--engine list\" for list", +#ifdef USE_ENVIRONMENT + " --environment Write results to environment variables (RISC OS)", +#endif + " -f/--fail Fail silently (no output at all) on HTTP errors (H)", + " -F/--form <name=content> Specify HTTP multipart POST data (H)", + " --form-string <name=string> Specify HTTP multipart POST data (H)", + " --ftp-account <data> Account data to send when requested by server (F)", + " --ftp-alternative-to-user <cmd> String to replace \"USER [name]\" (F)", + " --ftp-create-dirs Create the remote dirs if not present (F)", + " --ftp-method [multicwd/nocwd/singlecwd] Control CWD usage (F)", + " --ftp-pasv Use PASV/EPSV instead of PORT (F)", + " -P/--ftp-port <address> Use PORT with address instead of PASV (F)", + " --ftp-skip-pasv-ip Skip the IP address for PASV (F)\n" + " --ftp-pret Send PRET before PASV (for drftpd) (F)", + " --ftp-ssl-ccc Send CCC after authenticating (F)", + " --ftp-ssl-ccc-mode [active/passive] Set CCC mode (F)", + " --ftp-ssl-control Require SSL/TLS for ftp login, clear for transfer (F)", + " -G/--get Send the -d data with a HTTP GET (H)", + " -g/--globoff Disable URL sequences and ranges using {} and []", + " -H/--header <line> Custom header to pass to server (H)", + " -I/--head Show document info only", + " -h/--help This help text", + " --hostpubmd5 <md5> Hex encoded MD5 string of the host public key. (SSH)", + " -0/--http1.0 Use HTTP 1.0 (H)", + " --ignore-content-length Ignore the HTTP Content-Length header", + " -i/--include Include protocol headers in the output (H/F)", + " -k/--insecure Allow connections to SSL sites without certs (H)", + " --interface <interface> Specify network interface/address to use", + " -4/--ipv4 Resolve name to IPv4 address", + " -6/--ipv6 Resolve name to IPv6 address", + " -j/--junk-session-cookies Ignore session cookies read from file (H)", + " --keepalive-time <seconds> Interval between keepalive probes", + " --key <key> Private key file name (SSL/SSH)", + " --key-type <type> Private key file type (DER/PEM/ENG) (SSL)", + " --krb <level> Enable Kerberos with specified security level (F)", + " --libcurl <file> Dump libcurl equivalent code of this command line", + " --limit-rate <rate> Limit transfer speed to this rate", + " -J/--remote-header-name Use the header-provided filename (H)", + " -l/--list-only List only names of an FTP directory (F)", + " --local-port <num>[-num] Force use of these local port numbers", + " -L/--location Follow Location: hints (H)", + " --location-trusted Follow Location: and send auth to other hosts (H)", + " -M/--manual Display the full manual", + " --mail-from <from> Mail from this address", + " --mail-rcpt <to> Mail to this receiver(s)", + " --max-filesize <bytes> Maximum file size to download (H/F)", + " --max-redirs <num> Maximum number of redirects allowed (H)", + " -m/--max-time <seconds> Maximum time allowed for the transfer", + " --negotiate Use HTTP Negotiate Authentication (H)", + " -n/--netrc Must read .netrc for user name and password", + " --netrc-optional Use either .netrc or URL; overrides -n", + " -N/--no-buffer Disable buffering of the output stream", + " --no-keepalive Disable keepalive use on the connection", + " --no-sessionid Disable SSL session-ID reusing (SSL)", + " --noproxy Comma-separated list of hosts which do not use proxy", + " --ntlm Use HTTP NTLM authentication (H)", + " -o/--output <file> Write output to <file> instead of stdout", + " --pass <pass> Pass phrase for the private key (SSL/SSH)", + " --post301 Do not switch to GET after following a 301 redirect (H)", + " --post302 Do not switch to GET after following a 302 redirect (H)", + " -#/--progress-bar Display transfer progress as a progress bar", + " -x/--proxy <host[:port]> Use HTTP proxy on given port", + " --proxy-anyauth Pick \"any\" proxy authentication method (H)", + " --proxy-basic Use Basic authentication on the proxy (H)", + " --proxy-digest Use Digest authentication on the proxy (H)", + " --proxy-negotiate Use Negotiate authentication on the proxy (H)", + " --proxy-ntlm Use NTLM authentication on the proxy (H)", + " -U/--proxy-user <user[:password]> Set proxy user and password", + " --proxy1.0 <host[:port]> Use HTTP/1.0 proxy on given port", + " -p/--proxytunnel Operate through a HTTP proxy tunnel (using CONNECT)", + " --pubkey <key> Public key file name (SSH)", + " -Q/--quote <cmd> Send command(s) to server before file transfer (F/SFTP)", + " --random-file <file> File for reading random data from (SSL)", + " -r/--range <range> Retrieve only the bytes within a range", + " --raw Pass HTTP \"raw\", without any transfer decoding (H)", + " -e/--referer Referer URL (H)", + " -O/--remote-name Write output to a file named as the remote file", + " --remote-name-all Use the remote file name for all URLs", + " -R/--remote-time Set the remote file's time on the local output", + " -X/--request <command> Specify request command to use", + " --retry <num> Retry request <num> times if transient problems occur", + " --retry-delay <seconds> When retrying, wait this many seconds between each", + " --retry-max-time <seconds> Retry only within this period", + " -S/--show-error Show error. With -s, make curl show errors when they occur", + " -s/--silent Silent mode. Don't output anything", + " --socks4 <host[:port]> SOCKS4 proxy on given host + port", + " --socks4a <host[:port]> SOCKS4a proxy on given host + port", + " --socks5 <host[:port]> SOCKS5 proxy on given host + port", + " --socks5-hostname <host[:port]> SOCKS5 proxy, pass host name to proxy", +#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) + " --socks5-gssapi-service <name> SOCKS5 proxy service name for gssapi", + " --socks5-gssapi-nec Compatibility with NEC SOCKS5 server", +#endif + " -Y/--speed-limit Stop transfer if below speed-limit for 'speed-time' secs", + " -y/--speed-time Time needed to trig speed-limit abort. Defaults to 30", + " --ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)", + " --ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)", + " -2/--sslv2 Use SSLv2 (SSL)", + " -3/--sslv3 Use SSLv3 (SSL)", + " --stderr <file> Where to redirect stderr. - means stdout", + " --tcp-nodelay Use the TCP_NODELAY option", + " -t/--telnet-option <OPT=val> Set telnet option", + " --tftp-blksize <value> Set TFTP BLKSIZE option (must be >512)", + " -z/--time-cond <time> Transfer based on a time condition", + " -1/--tlsv1 Use TLSv1 (SSL)", + " --trace <file> Write a debug trace to the given file", + " --trace-ascii <file> Like --trace but without the hex output", + " --trace-time Add time stamps to trace/verbose output", + " -T/--upload-file <file> Transfer <file> to remote site", + " --url <URL> Set URL to work with", + " -B/--use-ascii Use ASCII/text transfer", + " -u/--user <user[:password]> Set server user and password", + " -A/--user-agent <string> User-Agent to send to server (H)", + " -v/--verbose Make the operation more talkative", + " -V/--version Show version number and quit", + +#ifdef USE_WATT32 + " --wdebug Turn on Watt-32 debugging", +#endif + " -w/--write-out <format> What to output after completion", + " -q If used as the first parameter disables .curlrc", + NULL + }; + for(i=0; helptext[i]; i++) { + puts(helptext[i]); +#ifdef PRINT_LINES_PAUSE + if (i && ((i % PRINT_LINES_PAUSE) == 0)) + pressanykey(); +#endif + } +} + +struct LongShort { + const char *letter; + const char *lname; + bool extraparam; +}; + +/* global variable to hold info about libcurl */ +static curl_version_info_data *curlinfo; + +static int parseconfig(const char *filename, + struct Configurable *config); +static char *my_get_line(FILE *fp); +static int create_dir_hierarchy(const char *outfile, FILE *errors); + +static void GetStr(char **string, + const char *value) +{ + if(*string) + free(*string); + if(value) + *string = strdup(value); + else + *string = NULL; +} + +static void clean_getout(struct Configurable *config) +{ + struct getout *node=config->url_list; + struct getout *next; + + while(node) { + next = node->next; + if(node->url) + free(node->url); + if(node->outfile) + free(node->outfile); + if(node->infile) + free(node->infile); + free(node); + + node = next; /* GOTO next */ + } +} + +static struct getout *new_getout(struct Configurable *config) +{ + struct getout *node =malloc(sizeof(struct getout)); + struct getout *last= config->url_last; + if(node) { + /* clear the struct */ + memset(node, 0, sizeof(struct getout)); + + /* append this new node last in the list */ + if(last) + last->next = node; + else + config->url_list = node; /* first node */ + + /* move the last pointer */ + config->url_last = node; + + node->flags = config->default_node_flags; + } + return node; +} + +/* Structure for storing the information needed to build a multiple files + * section +*/ +struct multi_files { + struct curl_forms form; + struct multi_files *next; +}; + +/* Add a new list entry possibly with a type_name + */ +static struct multi_files * +AddMultiFiles (const char *file_name, + const char *type_name, + const char *show_filename, + struct multi_files **multi_start, + struct multi_files **multi_current) +{ + struct multi_files *multi; + struct multi_files *multi_type = NULL; + struct multi_files *multi_name = NULL; + multi = malloc(sizeof(struct multi_files)); + if (multi) { + memset(multi, 0, sizeof(struct multi_files)); + multi->form.option = CURLFORM_FILE; + multi->form.value = file_name; + } + else + return NULL; + + if (!*multi_start) + *multi_start = multi; + + if (type_name) { + multi_type = malloc(sizeof(struct multi_files)); + if (multi_type) { + memset(multi_type, 0, sizeof(struct multi_files)); + multi_type->form.option = CURLFORM_CONTENTTYPE; + multi_type->form.value = type_name; + multi->next = multi_type; + + multi = multi_type; + } + else { + free (multi); + return NULL; + } + } + if (show_filename) { + multi_name = malloc(sizeof(struct multi_files)); + if (multi_name) { + memset(multi_name, 0, sizeof(struct multi_files)); + multi_name->form.option = CURLFORM_FILENAME; + multi_name->form.value = show_filename; + multi->next = multi_name; + + multi = multi_name; + } + else { + free (multi); + return NULL; + } + } + + if (*multi_current) + (*multi_current)->next = multi; + + *multi_current = multi; + + return *multi_current; +} + +/* Free the items of the list. + */ +static void FreeMultiInfo (struct multi_files *multi_start) +{ + struct multi_files *multi; + while (multi_start) { + multi = multi_start; + multi_start = multi_start->next; + free (multi); + } +} + +/* Print list of OpenSSL engines supported. + */ +static void list_engines (const struct curl_slist *engines) +{ + puts ("Build-time engines:"); + if (!engines) { + puts (" <none>"); + return; + } + for ( ; engines; engines = engines->next) + printf (" %s\n", engines->data); +} + +/*************************************************************************** + * + * formparse() + * + * Reads a 'name=value' parameter and builds the appropriate linked list. + * + * Specify files to upload with 'name=@filename'. Supports specified + * given Content-Type of the files. Such as ';type=<content-type>'. + * + * If literal_value is set, any initial '@' or '<' in the value string + * loses its special meaning, as does any embedded ';type='. + * + * You may specify more than one file for a single name (field). Specify + * multiple files by writing it like: + * + * 'name=@filename,filename2,filename3' + * + * If you want content-types specified for each too, write them like: + * + * 'name=@filename;type=image/gif,filename2,filename3' + * + * If you want custom headers added for a single part, write them in a separate + * file and do like this: + * + * 'name=foo;headers=@headerfile' or why not + * 'name=@filemame;headers=@headerfile' + * + * To upload a file, but to fake the file name that will be included in the + * formpost, do like this: + * + * 'name=@filename;filename=/dev/null' + * + * This function uses curl_formadd to fulfill it's job. Is heavily based on + * the old curl_formparse code. + * + ***************************************************************************/ + +#define FORM_FILE_SEPARATOR ',' +#define FORM_TYPE_SEPARATOR ';' + +static int formparse(struct Configurable *config, + const char *input, + struct curl_httppost **httppost, + struct curl_httppost **last_post, + bool literal_value) +{ + /* nextarg MUST be a string in the format 'name=contents' and we'll + build a linked list with the info */ + char name[256]; + char *contents; + char major[128]; + char minor[128]; + char *contp; + const char *type = NULL; + char *sep; + char *sep2; + + if((1 == sscanf(input, "%255[^=]=", name)) && + (contp = strchr(input, '='))) { + /* the input was using the correct format */ + + /* Allocate the contents */ + contents = strdup(contp+1); + if(!contents) { + fprintf(config->errors, "out of memory\n"); + return 1; + } + contp = contents; + + if('@' == contp[0] && !literal_value) { + struct multi_files *multi_start = NULL, *multi_current = NULL; + /* we use the @-letter to indicate file name(s) */ + contp++; + + multi_start = multi_current=NULL; + + do { + /* since this was a file, it may have a content-type specifier + at the end too, or a filename. Or both. */ + char *ptr; + char *filename=NULL; + + sep=strchr(contp, FORM_TYPE_SEPARATOR); + sep2=strchr(contp, FORM_FILE_SEPARATOR); + + /* pick the closest */ + if(sep2 && (sep2 < sep)) { + sep = sep2; + + /* no type was specified! */ + } + + type = NULL; + + if(sep) { + + /* if we got here on a comma, don't do much */ + if(FORM_FILE_SEPARATOR == *sep) + ptr = NULL; + else + ptr = sep+1; + + *sep=0; /* terminate file name at separator */ + + while(ptr && (FORM_FILE_SEPARATOR!= *ptr)) { + + /* pass all white spaces */ + while(ISSPACE(*ptr)) + ptr++; + + if(curlx_strnequal("type=", ptr, 5)) { + /* set type pointer */ + type = &ptr[5]; + + /* verify that this is a fine type specifier */ + if(2 != sscanf(type, "%127[^/]/%127[^;,\n]", + major, minor)) { + warnf(config, "Illegally formatted content-type field!\n"); + free(contents); + FreeMultiInfo (multi_start); + return 2; /* illegal content-type syntax! */ + } + /* now point beyond the content-type specifier */ + sep = (char *)type + strlen(major)+strlen(minor)+1; + + if(*sep) { + *sep=0; /* zero terminate type string */ + + ptr=sep+1; + } + else + ptr = NULL; /* end */ + } + else if(curlx_strnequal("filename=", ptr, 9)) { + filename = &ptr[9]; + ptr=strchr(filename, FORM_TYPE_SEPARATOR); + if(!ptr) { + ptr=strchr(filename, FORM_FILE_SEPARATOR); + } + if(ptr) { + *ptr=0; /* zero terminate */ + ptr++; + } + } + else + /* confusion, bail out of loop */ + break; + } + /* find the following comma */ + if(ptr) + sep=strchr(ptr, FORM_FILE_SEPARATOR); + else + sep=NULL; + } + else { + sep=strchr(contp, FORM_FILE_SEPARATOR); + } + if(sep) { + /* the next file name starts here */ + *sep =0; + sep++; + } + /* if type == NULL curl_formadd takes care of the problem */ + + if (!AddMultiFiles (contp, type, filename, &multi_start, + &multi_current)) { + warnf(config, "Error building form post!\n"); + free(contents); + FreeMultiInfo (multi_start); + return 3; + } + contp = sep; /* move the contents pointer to after the separator */ + + } while(sep && *sep); /* loop if there's another file name */ + + /* now we add the multiple files section */ + if (multi_start) { + struct curl_forms *forms = NULL; + struct multi_files *ptr = multi_start; + unsigned int i, count = 0; + while (ptr) { + ptr = ptr->next; + ++count; + } + forms = malloc((count+1)*sizeof(struct curl_forms)); + if (!forms) + { + fprintf(config->errors, "Error building form post!\n"); + free(contents); + FreeMultiInfo (multi_start); + return 4; + } + for (i = 0, ptr = multi_start; i < count; ++i, ptr = ptr->next) + { + forms[i].option = ptr->form.option; + forms[i].value = ptr->form.value; + } + forms[count].option = CURLFORM_END; + FreeMultiInfo (multi_start); + if (curl_formadd(httppost, last_post, + CURLFORM_COPYNAME, name, + CURLFORM_ARRAY, forms, CURLFORM_END) != 0) { + warnf(config, "curl_formadd failed!\n"); + free(forms); + free(contents); + return 5; + } + free(forms); + } + } + else { + struct curl_forms info[4]; + int i = 0; + char *ct = literal_value? NULL: strstr(contp, ";type="); + + info[i].option = CURLFORM_COPYNAME; + info[i].value = name; + i++; + + if(ct) { + info[i].option = CURLFORM_CONTENTTYPE; + info[i].value = &ct[6]; + i++; + ct[0]=0; /* zero terminate here */ + } + + if( contp[0]=='<' && !literal_value) { + info[i].option = CURLFORM_FILECONTENT; + info[i].value = contp+1; + i++; + info[i].option = CURLFORM_END; + + if (curl_formadd(httppost, last_post, + CURLFORM_ARRAY, info, CURLFORM_END ) != 0) { + warnf(config, "curl_formadd failed, possibly the file %s is bad!\n", + contp+1); + free(contents); + return 6; + } + } + else { +#ifdef CURL_DOES_CONVERSIONS + convert_to_network(contp, strlen(contp)); +#endif + info[i].option = CURLFORM_COPYCONTENTS; + info[i].value = contp; + i++; + info[i].option = CURLFORM_END; + if (curl_formadd(httppost, last_post, + CURLFORM_ARRAY, info, CURLFORM_END) != 0) { + warnf(config, "curl_formadd failed!\n"); + free(contents); + return 7; + } + } + } + + } + else { + warnf(config, "Illegally formatted input field!\n"); + return 1; + } + free(contents); + return 0; +} + + +typedef enum { + PARAM_OK, + PARAM_OPTION_AMBIGUOUS, + PARAM_OPTION_UNKNOWN, + PARAM_REQUIRES_PARAMETER, + PARAM_BAD_USE, + PARAM_HELP_REQUESTED, + PARAM_GOT_EXTRA_PARAMETER, + PARAM_BAD_NUMERIC, + PARAM_LIBCURL_DOESNT_SUPPORT, + PARAM_NO_MEM, + PARAM_LAST +} ParameterError; + +static const char *param2text(int res) +{ + ParameterError error = (ParameterError)res; + switch(error) { + case PARAM_GOT_EXTRA_PARAMETER: + return "had unsupported trailing garbage"; + case PARAM_OPTION_UNKNOWN: + return "is unknown"; + case PARAM_OPTION_AMBIGUOUS: + return "is ambiguous"; + case PARAM_REQUIRES_PARAMETER: + return "requires parameter"; + case PARAM_BAD_USE: + return "is badly used here"; + case PARAM_BAD_NUMERIC: + return "expected a proper numerical parameter"; + case PARAM_LIBCURL_DOESNT_SUPPORT: + return "the installed libcurl version doesn't support this"; + case PARAM_NO_MEM: + return "out of memory"; + default: + return "unknown error"; + } +} + +static ParameterError file2string(char **bufp, FILE *file) +{ + char buffer[256]; + char *ptr; + char *string = NULL; + size_t stringlen = 0; + size_t buflen; + + if(file) { + while(fgets(buffer, sizeof(buffer), file)) { + if((ptr = strchr(buffer, '\r')) != NULL) + *ptr = '\0'; + if((ptr = strchr(buffer, '\n')) != NULL) + *ptr = '\0'; + buflen = strlen(buffer); + if((ptr = realloc(string, stringlen+buflen+1)) == NULL) { + if(string) + free(string); + return PARAM_NO_MEM; + } + string = ptr; + strcpy(string+stringlen, buffer); + stringlen += buflen; + } + } + *bufp = string; + return PARAM_OK; +} + +static ParameterError file2memory(char **bufp, size_t *size, FILE *file) +{ + char *newbuf; + char *buffer = NULL; + size_t alloc = 512; + size_t nused = 0; + size_t nread; + + if(file) { + do { + if(!buffer || (alloc == nused)) { + /* size_t overflow detection for huge files */ + if(alloc+1 > ((size_t)-1)/2) { + if(buffer) + free(buffer); + return PARAM_NO_MEM; + } + alloc *= 2; + /* allocate an extra char, reserved space, for null termination */ + if((newbuf = realloc(buffer, alloc+1)) == NULL) { + if(buffer) + free(buffer); + return PARAM_NO_MEM; + } + buffer = newbuf; + } + nread = fread(buffer+nused, 1, alloc-nused, file); + nused += nread; + } while(nread); + /* null terminate the buffer in case it's used as a string later */ + buffer[nused] = '\0'; + /* free trailing slack space, if possible */ + if(alloc != nused) { + if((newbuf = realloc(buffer, nused+1)) != NULL) + buffer = newbuf; + } + /* discard buffer if nothing was read */ + if(!nused) { + free(buffer); + buffer = NULL; /* no string */ + } + } + *size = nused; + *bufp = buffer; + return PARAM_OK; +} + +static void cleanarg(char *str) +{ +#ifdef HAVE_WRITABLE_ARGV + /* now that GetStr has copied the contents of nextarg, wipe the next + * argument out so that the username:password isn't displayed in the + * system process list */ + if (str) { + size_t len = strlen(str); + memset(str, ' ', len); + } +#else + (void)str; +#endif +} + +/* + * Parse the string and write the integer in the given address. Return + * non-zero on failure, zero on success. + * + * The string must start with a digit to be valid. + * + * Since this function gets called with the 'nextarg' pointer from within the + * getparameter a lot, we must check it for NULL before accessing the str + * data. + */ + +static int str2num(long *val, const char *str) +{ + int retcode = 0; + if(str && ISDIGIT(*str)) + *val = atoi(str); + else + retcode = 1; /* badness */ + return retcode; +} + +/** + * Parses the given string looking for an offset (which may be + * a larger-than-integer value). + * + * @param val the offset to populate + * @param str the buffer containing the offset + * @return zero if successful, non-zero if failure. + */ +static int str2offset(curl_off_t *val, const char *str) +{ +#if (CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG) + *val = curlx_strtoofft(str, NULL, 0); + if((*val == CURL_LLONG_MAX || *val == CURL_LLONG_MIN) && (ERRNO == ERANGE)) + return 1; +#else + *val = strtol(str, NULL, 0); + if ((*val == LONG_MIN || *val == LONG_MAX) && ERRNO == ERANGE) + return 1; +#endif + return 0; +} + +static void checkpasswd(const char *kind, /* for what purpose */ + char **userpwd) /* pointer to allocated string */ +{ + char *ptr; + if(!*userpwd) + return; + + ptr = strchr(*userpwd, ':'); + if(!ptr) { + /* no password present, prompt for one */ + char passwd[256]=""; + char prompt[256]; + size_t passwdlen; + size_t userlen = strlen(*userpwd); + char *passptr; + + /* build a nice-looking prompt */ + curlx_msnprintf(prompt, sizeof(prompt), + "Enter %s password for user '%s':", + kind, *userpwd); + + /* get password */ + getpass_r(prompt, passwd, sizeof(passwd)); + passwdlen = strlen(passwd); + + /* extend the allocated memory area to fit the password too */ + passptr = realloc(*userpwd, + passwdlen + 1 + /* an extra for the colon */ + userlen + 1); /* an extra for the zero */ + + if(passptr) { + /* append the password separated with a colon */ + passptr[userlen]=':'; + memcpy(&passptr[userlen+1], passwd, passwdlen+1); + *userpwd = passptr; + } + } +} + +static ParameterError add2list(struct curl_slist **list, + const char *ptr) +{ + struct curl_slist *newlist = curl_slist_append(*list, ptr); + if(newlist) + *list = newlist; + else + return PARAM_NO_MEM; + + return PARAM_OK; +} + +static int ftpfilemethod(struct Configurable *config, const char *str) +{ + if(curlx_raw_equal("singlecwd", str)) + return CURLFTPMETHOD_SINGLECWD; + if(curlx_raw_equal("nocwd", str)) + return CURLFTPMETHOD_NOCWD; + if(curlx_raw_equal("multicwd", str)) + return CURLFTPMETHOD_MULTICWD; + warnf(config, "unrecognized ftp file method '%s', using default\n", str); + return CURLFTPMETHOD_MULTICWD; +} + +static int ftpcccmethod(struct Configurable *config, const char *str) +{ + if(curlx_raw_equal("passive", str)) + return CURLFTPSSL_CCC_PASSIVE; + if(curlx_raw_equal("active", str)) + return CURLFTPSSL_CCC_ACTIVE; + warnf(config, "unrecognized ftp CCC method '%s', using default\n", str); + return CURLFTPSSL_CCC_PASSIVE; +} + + +static int sockoptcallback(void *clientp, curl_socket_t curlfd, + curlsocktype purpose) +{ + struct Configurable *config = (struct Configurable *)clientp; + int onoff = 1; /* this callback is only used if we ask for keepalives on the + connection */ +#if defined(TCP_KEEPIDLE) || defined(TCP_KEEPINTVL) + int keepidle = (int)config->alivetime; +#endif + + switch (purpose) { + case CURLSOCKTYPE_IPCXN: + if(setsockopt(curlfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&onoff, + sizeof(onoff)) < 0) { + /* don't abort operation, just issue a warning */ + SET_SOCKERRNO(0); + warnf(clientp, "Could not set SO_KEEPALIVE!\n"); + return 0; + } + else { + if (config->alivetime) { +#ifdef TCP_KEEPIDLE + if(setsockopt(curlfd, IPPROTO_TCP, TCP_KEEPIDLE, (void *)&keepidle, + sizeof(keepidle)) < 0) { + /* don't abort operation, just issue a warning */ + SET_SOCKERRNO(0); + warnf(clientp, "Could not set TCP_KEEPIDLE!\n"); + return 0; + } +#endif +#ifdef TCP_KEEPINTVL + if(setsockopt(curlfd, IPPROTO_TCP, TCP_KEEPINTVL, (void *)&keepidle, + sizeof(keepidle)) < 0) { + /* don't abort operation, just issue a warning */ + SET_SOCKERRNO(0); + warnf(clientp, "Could not set TCP_KEEPINTVL!\n"); + return 0; + } +#endif + } + } + break; + default: + break; + } + + return 0; +} + + +static ParameterError getparameter(char *flag, /* f or -long-flag */ + char *nextarg, /* NULL if unset */ + bool *usedarg, /* set to TRUE if the arg + has been used */ + struct Configurable *config) +{ + char letter; + char subletter=0; /* subletters can only occur on long options */ + int rc; /* generic return code variable */ + const char *parse=NULL; + unsigned int j; + time_t now; + int hit=-1; + bool longopt=FALSE; + bool singleopt=FALSE; /* when true means '-o foo' used '-ofoo' */ + ParameterError err; + bool toggle=TRUE; /* how to switch boolean options, on or off. Controlled + by using --OPTION or --no-OPTION */ + + /* single-letter, + long-name, + boolean whether it takes an additional argument + */ + static const struct LongShort aliases[]= { + /* all these ones, starting with "*" or "$" as a short-option have *no* + short option to mention. */ + {"*", "url", TRUE}, + {"*a", "random-file", TRUE}, + {"*b", "egd-file", TRUE}, + {"*c", "connect-timeout", TRUE}, + {"*d", "ciphers", TRUE}, + {"*e", "disable-epsv", FALSE}, + {"*E", "epsv", FALSE}, /* made like this to make --no-epsv and --epsv to + work although --disable-epsv is the documented + option */ +#ifdef USE_ENVIRONMENT + {"*f", "environment", FALSE}, +#endif + {"*g", "trace", TRUE}, + {"*h", "trace-ascii", TRUE}, + {"*i", "limit-rate", TRUE}, + {"*j", "compressed", FALSE}, /* might take an arg someday */ + {"*k", "digest", FALSE}, + {"*l", "negotiate", FALSE}, + {"*m", "ntlm", FALSE}, + {"*n", "basic", FALSE}, + {"*o", "anyauth", FALSE}, +#ifdef USE_WATT32 + {"*p", "wdebug", FALSE}, +#endif + {"*q", "ftp-create-dirs", FALSE}, + {"*r", "create-dirs", FALSE}, + {"*s", "max-redirs", TRUE}, + {"*t", "proxy-ntlm", FALSE}, + {"*u", "crlf", FALSE}, + {"*v", "stderr", TRUE}, + {"*w", "interface", TRUE}, + {"*x", "krb" , TRUE}, + {"*x", "krb4" , TRUE}, /* this is the previous name */ + {"*y", "max-filesize", TRUE}, + {"*z", "disable-eprt", FALSE}, + {"*Z", "eprt", FALSE}, /* made like this to make --no-eprt and --eprt to + work although --disable-eprt is the documented + option */ + {"$a", "ftp-ssl", FALSE}, /* deprecated name since 7.20.0 */ + {"$a", "ssl", FALSE}, /* new option name in 7.20.0, previously this + was ftp-ssl */ + {"$b", "ftp-pasv", FALSE}, + {"$c", "socks5", TRUE}, + {"$c", "socks", TRUE}, /* this is how the option once was documented + but we prefer the --socks5 version for + explicit version */ + {"$d", "tcp-nodelay",FALSE}, + {"$e", "proxy-digest", FALSE}, + {"$f", "proxy-basic", FALSE}, + {"$g", "retry", TRUE}, + {"$h", "retry-delay", TRUE}, + {"$i", "retry-max-time", TRUE}, + {"$k", "proxy-negotiate", FALSE}, + {"$m", "ftp-account", TRUE}, + {"$n", "proxy-anyauth", FALSE}, + {"$o", "trace-time", FALSE}, + {"$p", "ignore-content-length", FALSE}, + {"$q", "ftp-skip-pasv-ip", FALSE}, + {"$r", "ftp-method", TRUE}, + {"$s", "local-port", TRUE}, + {"$t", "socks4", TRUE}, + {"$T", "socks4a", TRUE}, + {"$u", "ftp-alternative-to-user", TRUE}, + {"$v", "ftp-ssl-reqd", FALSE}, /* deprecated name since 7.20.0 */ + {"$v", "ssl-reqd", FALSE}, /* new option name in 7.20.0, previously this + was ftp-ssl-reqd */ + {"$w", "sessionid", FALSE}, /* listed as --no-sessionid in the help */ + {"$x", "ftp-ssl-control", FALSE}, + {"$y", "ftp-ssl-ccc", FALSE}, + {"$j", "ftp-ssl-ccc-mode", TRUE}, + {"$z", "libcurl", TRUE}, + {"$#", "raw", FALSE}, + {"$0", "post301", FALSE}, + {"$1", "keepalive", FALSE}, /* listed as --no-keepalive in the help */ + {"$2", "socks5-hostname", TRUE}, + {"$3", "keepalive-time", TRUE}, + {"$4", "post302", FALSE}, + {"$5", "noproxy", TRUE}, + +#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) + {"$6", "socks5-gssapi-service", TRUE}, + {"$7", "socks5-gssapi-nec", FALSE}, +#endif + {"$8", "proxy1.0", TRUE}, + {"$9", "tftp-blksize", TRUE}, + {"$A", "mail-from", TRUE}, + {"$B", "mail-rcpt", TRUE}, + {"$C", "ftp-pret", FALSE}, + {"0", "http1.0", FALSE}, + {"1", "tlsv1", FALSE}, + {"2", "sslv2", FALSE}, + {"3", "sslv3", FALSE}, + {"4", "ipv4", FALSE}, + {"6", "ipv6", FALSE}, + {"a", "append", FALSE}, + {"A", "user-agent", TRUE}, + {"b", "cookie", TRUE}, + {"B", "use-ascii", FALSE}, + {"c", "cookie-jar", TRUE}, + {"C", "continue-at", TRUE}, + {"d", "data", TRUE}, + {"da", "data-ascii", TRUE}, + {"db", "data-binary", TRUE}, + {"de", "data-urlencode", TRUE}, + {"D", "dump-header", TRUE}, + {"e", "referer", TRUE}, + {"E", "cert", TRUE}, + {"Ea", "cacert", TRUE}, + {"Eb","cert-type", TRUE}, + {"Ec","key", TRUE}, + {"Ed","key-type", TRUE}, + {"Ee","pass", TRUE}, + {"Ef","engine", TRUE}, + {"Eg","capath ", TRUE}, + {"Eh","pubkey", TRUE}, + {"Ei", "hostpubmd5", TRUE}, + {"Ej","crlfile", TRUE}, + {"f", "fail", FALSE}, + {"F", "form", TRUE}, + {"Fs","form-string", TRUE}, + {"g", "globoff", FALSE}, + {"G", "get", FALSE}, + {"h", "help", FALSE}, + {"H", "header", TRUE}, + {"i", "include", FALSE}, + {"I", "head", FALSE}, + {"j", "junk-session-cookies", FALSE}, + {"J", "remote-header-name", FALSE}, + {"k", "insecure", FALSE}, + {"K", "config", TRUE}, + {"l", "list-only", FALSE}, + {"L", "location", FALSE}, + {"Lt", "location-trusted", FALSE}, + {"m", "max-time", TRUE}, + {"M", "manual", FALSE}, + {"n", "netrc", FALSE}, + {"no", "netrc-optional", FALSE}, + {"N", "buffer", FALSE}, /* listed as --no-buffer in the help */ + {"o", "output", TRUE}, + {"O", "remote-name", FALSE}, + {"Oa", "remote-name-all", FALSE}, + {"p", "proxytunnel", FALSE}, + {"P", "ftpport", TRUE}, /* older version */ + {"P", "ftp-port", TRUE}, + {"q", "disable", FALSE}, + {"Q", "quote", TRUE}, + {"r", "range", TRUE}, + {"R", "remote-time", FALSE}, + {"s", "silent", FALSE}, + {"S", "show-error", FALSE}, + {"t", "telnet-options", TRUE}, /* this is documented as telnet-option */ + {"T", "upload-file", TRUE}, + {"u", "user", TRUE}, + {"U", "proxy-user", TRUE}, + {"v", "verbose", FALSE}, + {"V", "version", FALSE}, + {"w", "write-out", TRUE}, + {"x", "proxy", TRUE}, + {"X", "request", TRUE}, + {"X", "http-request", TRUE}, /* OBSOLETE VERSION */ + {"Y", "speed-limit", TRUE}, + {"y", "speed-time", TRUE}, + {"z", "time-cond", TRUE}, + {"#", "progress-bar",FALSE}, + }; + + if(('-' != flag[0]) || + (('-' == flag[0]) && ('-' == flag[1]))) { + /* this should be a long name */ + char *word=('-' == flag[0])?flag+2:flag; + size_t fnam=strlen(word); + int numhits=0; + + if(!strncmp(word, "no-", 3)) { + /* disable this option but ignore the "no-" part when looking for it */ + word += 3; + toggle = FALSE; + } + + for(j=0; j< sizeof(aliases)/sizeof(aliases[0]); j++) { + if(curlx_strnequal(aliases[j].lname, word, fnam)) { + longopt = TRUE; + numhits++; + if(curlx_raw_equal(aliases[j].lname, word)) { + parse = aliases[j].letter; + hit = j; + numhits = 1; /* a single unique hit */ + break; + } + parse = aliases[j].letter; + hit = j; + } + } + if(numhits>1) { + /* this is at least the second match! */ + return PARAM_OPTION_AMBIGUOUS; + } + if(hit < 0) { + return PARAM_OPTION_UNKNOWN; + } + } + else { + flag++; /* prefixed with one dash, pass it */ + hit=-1; + parse = flag; + } + + do { + /* we can loop here if we have multiple single-letters */ + + if(!longopt) { + if(NULL != parse) { + letter = (char)*parse; + } + else { + letter = '\0'; + } + subletter='\0'; + } + else { + letter = parse[0]; + subletter = parse[1]; + } + *usedarg = FALSE; /* default is that we don't use the arg */ + + if(hit < 0) { + for(j=0; j< sizeof(aliases)/sizeof(aliases[0]); j++) { + if(letter == aliases[j].letter[0]) { + hit = j; + break; + } + } + if(hit < 0) { + return PARAM_OPTION_UNKNOWN; + } + } + + if(aliases[hit].extraparam) { + /* this option requires an extra parameter */ + if(!longopt && parse[1]) { + nextarg=(char *)&parse[1]; /* this is the actual extra parameter */ + singleopt=TRUE; /* don't loop anymore after this */ + } + else if(!nextarg) + return PARAM_REQUIRES_PARAMETER; + else + *usedarg = TRUE; /* mark it as used */ + } + + switch(letter) { + case '*': /* options without a short option */ + switch(subletter) { + case 'a': /* random-file */ + GetStr(&config->random_file, nextarg); + break; + case 'b': /* egd-file */ + GetStr(&config->egd_file, nextarg); + break; + case 'c': /* connect-timeout */ + if(str2num(&config->connecttimeout, nextarg)) + return PARAM_BAD_NUMERIC; + break; + case 'd': /* ciphers */ + GetStr(&config->cipher_list, nextarg); + break; + case 'e': /* --disable-epsv */ + config->disable_epsv = toggle; + break; + case 'E': /* --epsv */ + config->disable_epsv = (bool)(!toggle); + break; +#ifdef USE_ENVIRONMENT + case 'f': + config->writeenv = toggle; + break; +#endif + case 'g': /* --trace */ + GetStr(&config->trace_dump, nextarg); + if(config->tracetype && (config->tracetype != TRACE_BIN)) + warnf(config, "--trace overrides an earlier trace/verbose option\n"); + config->tracetype = TRACE_BIN; + break; + case 'h': /* --trace-ascii */ + GetStr(&config->trace_dump, nextarg); + if(config->tracetype && (config->tracetype != TRACE_ASCII)) + warnf(config, + "--trace-ascii overrides an earlier trace/verbose option\n"); + config->tracetype = TRACE_ASCII; + break; + case 'i': /* --limit-rate */ + { + /* We support G, M, K too */ + char *unit; + curl_off_t value = curlx_strtoofft(nextarg, &unit, 0); + + if(!*unit) + unit=(char *)"b"; + else if(strlen(unit) > 1) + unit=(char *)"w"; /* unsupported */ + + switch(*unit) { + case 'G': + case 'g': + value *= 1024*1024*1024; + break; + case 'M': + case 'm': + value *= 1024*1024; + break; + case 'K': + case 'k': + value *= 1024; + break; + case 'b': + case 'B': + /* for plain bytes, leave as-is */ + break; + default: + warnf(config, "unsupported rate unit. Use G, M, K or B!\n"); + return PARAM_BAD_USE; + } + config->recvpersecond = value; + config->sendpersecond = value; + } + break; + + case 'j': /* --compressed */ + config->encoding = toggle; + break; + + case 'k': /* --digest */ + if(toggle) + config->authtype |= CURLAUTH_DIGEST; + else + config->authtype &= ~CURLAUTH_DIGEST; + break; + + case 'l': /* --negotiate */ + if(toggle) { + if(curlinfo->features & CURL_VERSION_GSSNEGOTIATE) + config->authtype |= CURLAUTH_GSSNEGOTIATE; + else + return PARAM_LIBCURL_DOESNT_SUPPORT; + } + else + config->authtype &= ~CURLAUTH_GSSNEGOTIATE; + break; + + case 'm': /* --ntlm */ + if(toggle) { + if(curlinfo->features & CURL_VERSION_NTLM) + config->authtype |= CURLAUTH_NTLM; + else + return PARAM_LIBCURL_DOESNT_SUPPORT; + } + else + config->authtype &= ~CURLAUTH_NTLM; + break; + + case 'n': /* --basic for completeness */ + if(toggle) + config->authtype |= CURLAUTH_BASIC; + else + config->authtype &= ~CURLAUTH_BASIC; + break; + + case 'o': /* --anyauth, let libcurl pick it */ + if(toggle) + config->authtype = CURLAUTH_ANY; + /* --no-anyauth simply doesn't touch it */ + break; + +#ifdef USE_WATT32 + case 'p': /* --wdebug */ + dbug_init(); + break; +#endif + case 'q': /* --ftp-create-dirs */ + config->ftp_create_dirs = toggle; + break; + + case 'r': /* --create-dirs */ + config->create_dirs = TRUE; + break; + + case 's': /* --max-redirs */ + /* specified max no of redirects (http(s)) */ + if(str2num(&config->maxredirs, nextarg)) + return PARAM_BAD_NUMERIC; + break; + + case 't': /* --proxy-ntlm */ + if(curlinfo->features & CURL_VERSION_NTLM) + config->proxyntlm = toggle; + else + return PARAM_LIBCURL_DOESNT_SUPPORT; + break; + + case 'u': /* --crlf */ + /* LF -> CRLF conversion? */ + config->crlf = TRUE; + break; + + case 'v': /* --stderr */ + if(strcmp(nextarg, "-")) { + FILE *newfile = fopen(nextarg, "wt"); + if(!newfile) + warnf(config, "Failed to open %s!\n", nextarg); + else { + if(config->errors_fopened) + fclose(config->errors); + config->errors = newfile; + config->errors_fopened = TRUE; + } + } + else + config->errors = stdout; + break; + case 'w': /* --interface */ + /* interface */ + GetStr(&config->iface, nextarg); + break; + case 'x': /* --krb */ + /* kerberos level string */ + if(curlinfo->features & (CURL_VERSION_KERBEROS4 | + CURL_VERSION_GSSNEGOTIATE)) + GetStr(&config->krblevel, nextarg); + else + return PARAM_LIBCURL_DOESNT_SUPPORT; + break; + case 'y': /* --max-filesize */ + if(str2offset(&config->max_filesize, nextarg)) + return PARAM_BAD_NUMERIC; + break; + case 'z': /* --disable-eprt */ + config->disable_eprt = toggle; + break; + case 'Z': /* --eprt */ + config->disable_eprt = (bool)(!toggle); + break; + + default: /* the URL! */ + { + struct getout *url; + if(config->url_get || (config->url_get=config->url_list)) { + /* there's a node here, if it already is filled-in continue to find + an "empty" node */ + while(config->url_get && (config->url_get->flags&GETOUT_URL)) + config->url_get = config->url_get->next; + } + + /* now there might or might not be an available node to fill in! */ + + if(config->url_get) + /* existing node */ + url = config->url_get; + else + /* there was no free node, create one! */ + url=new_getout(config); + + if(url) { + /* fill in the URL */ + GetStr(&url->url, nextarg); + url->flags |= GETOUT_URL; + } + } + } + break; + case '$': /* more options without a short option */ + switch(subletter) { + case 'a': /* --ftp-ssl */ + config->ftp_ssl = toggle; + break; + case 'b': /* --ftp-pasv */ + if(config->ftpport) + free(config->ftpport); + config->ftpport = NULL; + break; + case 'c': /* --socks5 specifies a socks5 proxy to use, and resolves + the name locally and passes on the resolved address */ + GetStr(&config->socksproxy, nextarg); + config->socksver = CURLPROXY_SOCKS5; + break; + case 't': /* --socks4 specifies a socks4 proxy to use */ + GetStr(&config->socksproxy, nextarg); + config->socksver = CURLPROXY_SOCKS4; + break; + case 'T': /* --socks4a specifies a socks4a proxy to use */ + GetStr(&config->socksproxy, nextarg); + config->socksver = CURLPROXY_SOCKS4A; + break; + case '2': /* --socks5-hostname specifies a socks5 proxy and enables name + resolving with the proxy */ + GetStr(&config->socksproxy, nextarg); + config->socksver = CURLPROXY_SOCKS5_HOSTNAME; + break; + case 'd': /* --tcp-nodelay option */ + config->tcp_nodelay = toggle; + break; + case 'e': /* --proxy-digest */ + config->proxydigest = toggle; + break; + case 'f': /* --proxy-basic */ + config->proxybasic = toggle; + break; + case 'g': /* --retry */ + if(str2num(&config->req_retry, nextarg)) + return PARAM_BAD_NUMERIC; + break; + case 'h': /* --retry-delay */ + if(str2num(&config->retry_delay, nextarg)) + return PARAM_BAD_NUMERIC; + break; + case 'i': /* --retry-max-time */ + if(str2num(&config->retry_maxtime, nextarg)) + return PARAM_BAD_NUMERIC; + break; + + case 'k': /* --proxy-negotiate */ + if(curlinfo->features & CURL_VERSION_GSSNEGOTIATE) + config->proxynegotiate = toggle; + else + return PARAM_LIBCURL_DOESNT_SUPPORT; + break; + case 'm': /* --ftp-account */ + GetStr(&config->ftp_account, nextarg); + break; + case 'n': /* --proxy-anyauth */ + config->proxyanyauth = toggle; + break; + case 'o': /* --trace-time */ + config->tracetime = toggle; + break; + case 'p': /* --ignore-content-length */ + config->ignorecl = toggle; + break; + case 'q': /* --ftp-skip-pasv-ip */ + config->ftp_skip_ip = toggle; + break; + case 'r': /* --ftp-method (undocumented at this point) */ + config->ftp_filemethod = ftpfilemethod(config, nextarg); + break; + case 's': /* --local-port */ + rc = sscanf(nextarg, "%d - %d", + &config->localport, + &config->localportrange); + if(!rc) + return PARAM_BAD_USE; + else if(rc == 1) + config->localportrange = 1; /* default number of ports to try */ + else { + config->localportrange -= config->localport; + if(config->localportrange < 1) { + warnf(config, "bad range input\n"); + return PARAM_BAD_USE; + } + } + break; + case 'u': /* --ftp-alternative-to-user */ + GetStr(&config->ftp_alternative_to_user, nextarg); + break; + case 'v': /* --ftp-ssl-reqd */ + config->ftp_ssl_reqd = toggle; + break; + case 'w': /* --no-sessionid */ + config->disable_sessionid = (bool)(!toggle); + break; + case 'x': /* --ftp-ssl-control */ + config->ftp_ssl_control = toggle; + break; + case 'y': /* --ftp-ssl-ccc */ + config->ftp_ssl_ccc = toggle; + if(!config->ftp_ssl_ccc_mode) + config->ftp_ssl_ccc_mode = CURLFTPSSL_CCC_PASSIVE; + break; + case 'j': /* --ftp-ssl-ccc-mode */ + config->ftp_ssl_ccc = TRUE; + config->ftp_ssl_ccc_mode = ftpcccmethod(config, nextarg); + break; + case 'z': /* --libcurl */ + GetStr(&config->libcurl, nextarg); + break; + case '#': /* --raw */ + config->raw = toggle; + break; + case '0': /* --post301 */ + config->post301 = toggle; + break; + case '1': /* --no-keepalive */ + config->nokeepalive = (bool)(!toggle); + break; + case '3': /* --keepalive-time */ + if(str2num(&config->alivetime, nextarg)) + return PARAM_BAD_NUMERIC; + break; + case '4': /* --post302 */ + config->post302 = toggle; + break; + case '5': /* --noproxy */ + /* This specifies the noproxy list */ + GetStr(&config->noproxy, nextarg); + break; +#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) + case '6': /* --socks5-gssapi-service */ + GetStr(&config->socks5_gssapi_service, nextarg); + break; + case '7': /* --socks5-gssapi-nec*/ + config->socks5_gssapi_nec = TRUE; + break; +#endif + case '8': /* --proxy1.0 */ + /* http 1.0 proxy */ + GetStr(&config->proxy, nextarg); + config->proxyver = CURLPROXY_HTTP_1_0; + break; + case '9': /* --tftp-blksize */ + str2num(&config->tftp_blksize, nextarg); + break; + case 'A': /* --mail-from */ + GetStr(&config->mail_from, nextarg); + break; + case 'B': /* --mail-rcpt */ + /* append receiver to a list */ + err = add2list(&config->mail_rcpt, nextarg); + if(err) + return err; + break; + case 'C': /* --ftp-pret */ + config->ftp_pret = toggle; + break; + } + break; + case '#': /* --progress-bar */ + if(toggle) + config->progressmode = CURL_PROGRESS_BAR; + else + config->progressmode = CURL_PROGRESS_STATS; + break; + case '0': + /* HTTP version 1.0 */ + config->httpversion = CURL_HTTP_VERSION_1_0; + break; + case '1': + /* TLS version 1 */ + config->ssl_version = CURL_SSLVERSION_TLSv1; + break; + case '2': + /* SSL version 2 */ + config->ssl_version = CURL_SSLVERSION_SSLv2; + break; + case '3': + /* SSL version 3 */ + config->ssl_version = CURL_SSLVERSION_SSLv3; + break; + case '4': + /* IPv4 */ + config->ip_version = 4; + break; + case '6': + /* IPv6 */ + config->ip_version = 6; + break; + case 'a': + /* This makes the FTP sessions use APPE instead of STOR */ + config->ftp_append = toggle; + break; + case 'A': + /* This specifies the User-Agent name */ + GetStr(&config->useragent, nextarg); + break; + case 'b': /* cookie string coming up: */ + if(nextarg[0] == '@') { + nextarg++; + } + else if(strchr(nextarg, '=')) { + /* A cookie string must have a =-letter */ + GetStr(&config->cookie, nextarg); + break; + } + /* We have a cookie file to read from! */ + GetStr(&config->cookiefile, nextarg); + break; + case 'B': + /* use ASCII/text when transfering */ + config->use_ascii = toggle; + break; + case 'c': + /* get the file name to dump all cookies in */ + GetStr(&config->cookiejar, nextarg); + break; + case 'C': + /* This makes us continue an ftp transfer at given position */ + if(!curlx_strequal(nextarg, "-")) { + if(str2offset(&config->resume_from, nextarg)) + return PARAM_BAD_NUMERIC; + config->resume_from_current = FALSE; + } + else { + config->resume_from_current = TRUE; + config->resume_from = 0; + } + config->use_resume=TRUE; + break; + case 'd': + /* postfield data */ + { + char *postdata=NULL; + FILE *file; + + if(subletter == 'e') { /* --data-urlencode*/ + /* [name]=[content], we encode the content part only + * [name]@[file name] + * + * Case 2: we first load the file using that name and then encode + * the content. + */ + const char *p = strchr(nextarg, '='); + size_t size = 0; + size_t nlen; + char is_file; + if(!p) + /* there was no '=' letter, check for a '@' instead */ + p = strchr(nextarg, '@'); + if (p) { + nlen = p - nextarg; /* length of the name part */ + is_file = *p++; /* pass the separator */ + } + else { + /* neither @ nor =, so no name and it isn't a file */ + nlen = is_file = 0; + p = nextarg; + } + if('@' == is_file) { + /* a '@' letter, it means that a file name or - (stdin) follows */ + + if(curlx_strequal("-", p)) { + file = stdin; + SET_BINMODE(stdin); + } + else { + file = fopen(p, "rb"); + if(!file) + warnf(config, + "Couldn't read data from file \"%s\", this makes " + "an empty POST.\n", nextarg); + } + + err = file2memory(&postdata, &size, file); + + if(file && (file != stdin)) + fclose(file); + if(err) + return err; + } + else { + GetStr(&postdata, p); + size = strlen(postdata); + } + + if(!postdata) { + /* no data from the file, point to a zero byte string to make this + get sent as a POST anyway */ + postdata=strdup(""); + } + else { + char *enc = curl_easy_escape(config->easy, postdata, (int)size); + free(postdata); /* no matter if it worked or not */ + if(enc) { + /* now make a string with the name from above and append the + encoded string */ + size_t outlen = nlen + strlen(enc) + 2; + char *n = malloc(outlen); + if(!n) { + curl_free(enc); + return PARAM_NO_MEM; + } + if (nlen > 0) /* only append '=' if we have a name */ + snprintf(n, outlen, "%.*s=%s", nlen, nextarg, enc); + else + strcpy(n, enc); + curl_free(enc); + postdata = n; + } + else + return PARAM_NO_MEM; + } + } + else if('@' == *nextarg) { + size_t size = 0; + /* the data begins with a '@' letter, it means that a file name + or - (stdin) follows */ + nextarg++; /* pass the @ */ + + if(curlx_strequal("-", nextarg)) { + file = stdin; + if(subletter == 'b') /* forced data-binary */ + SET_BINMODE(stdin); + } + else { + file = fopen(nextarg, "rb"); + if(!file) + warnf(config, "Couldn't read data from file \"%s\", this makes " + "an empty POST.\n", nextarg); + } + + if(subletter == 'b') { + /* forced binary */ + err = file2memory(&postdata, &size, file); + config->postfieldsize = (curl_off_t)size; + } + else + err = file2string(&postdata, file); + + if(file && (file != stdin)) + fclose(file); + if(err) + return err; + + if(!postdata) { + /* no data from the file, point to a zero byte string to make this + get sent as a POST anyway */ + postdata=strdup(""); + } + } + else { + GetStr(&postdata, nextarg); + } + +#ifdef CURL_DOES_CONVERSIONS + if(subletter != 'b') { /* NOT forced binary, convert to ASCII */ + convert_to_network(postdata, strlen(postdata)); + } +#endif + + if(config->postfields) { + /* we already have a string, we append this one + with a separating &-letter */ + char *oldpost=config->postfields; + size_t newlen = strlen(oldpost) + strlen(postdata) + 2; + config->postfields=malloc(newlen); + if(!config->postfields) { + free(postdata); + return PARAM_NO_MEM; + } + /* use ASCII value 0x26 for '&' to accommodate non-ASCII platforms */ + snprintf(config->postfields, newlen, "%s\x26%s", oldpost, postdata); + free(oldpost); + free(postdata); + } + else + config->postfields=postdata; + } + /* + We can't set the request type here, as this data might be used in + a simple GET if -G is used. Already or soon. + + if(SetHTTPrequest(HTTPREQ_SIMPLEPOST, &config->httpreq)) + return PARAM_BAD_USE; + */ + break; + case 'D': + /* dump-header to given file name */ + GetStr(&config->headerfile, nextarg); + break; + case 'e': + { + char *ptr = strstr(nextarg, ";auto"); + if(ptr) { + /* Automatic referer requested, this may be combined with a + set initial one */ + config->autoreferer = TRUE; + *ptr = 0; /* zero terminate here */ + } + else + config->autoreferer = FALSE; + GetStr(&config->referer, nextarg); + } + break; + case 'E': + switch(subletter) { + case 'a': /* CA info PEM file */ + /* CA info PEM file */ + GetStr(&config->cacert, nextarg); + break; + case 'b': /* cert file type */ + GetStr(&config->cert_type, nextarg); + break; + case 'c': /* private key file */ + GetStr(&config->key, nextarg); + break; + case 'd': /* private key file type */ + GetStr(&config->key_type, nextarg); + break; + case 'e': /* private key passphrase */ + GetStr(&config->key_passwd, nextarg); + cleanarg(nextarg); + break; + case 'f': /* crypto engine */ + GetStr(&config->engine, nextarg); + if (config->engine && curlx_raw_equal(config->engine,"list")) + config->list_engines = TRUE; + break; + case 'g': /* CA info PEM file */ + /* CA cert directory */ + GetStr(&config->capath, nextarg); + break; + case 'h': /* --pubkey public key file */ + GetStr(&config->pubkey, nextarg); + break; + case 'i': /* --hostpubmd5 md5 of the host public key */ + GetStr(&config->hostpubmd5, nextarg); + if (!config->hostpubmd5 || strlen(config->hostpubmd5) != 32) + return PARAM_BAD_USE; + break; + case 'j': /* CRL info PEM file */ + /* CRL file */ + GetStr(&config->crlfile, nextarg); + break; + default: /* certificate file */ + { + char *ptr = strchr(nextarg, ':'); + /* Since we live in a world of weirdness and confusion, the win32 + dudes can use : when using drive letters and thus + c:\file:password needs to work. In order not to break + compatibility, we still use : as separator, but we try to detect + when it is used for a file name! On windows. */ +#ifdef WIN32 + if(ptr && + (ptr == &nextarg[1]) && + (nextarg[2] == '\\' || nextarg[2] == '/') && + (ISALPHA(nextarg[0])) ) + /* colon in the second column, followed by a backslash, and the + first character is an alphabetic letter: + + this is a drive letter colon */ + ptr = strchr(&nextarg[3], ':'); /* find the next one instead */ +#endif + if(ptr) { + /* we have a password too */ + *ptr=0; + ptr++; + GetStr(&config->key_passwd, ptr); + } + GetStr(&config->cert, nextarg); + cleanarg(nextarg); + } + } + break; + case 'f': + /* fail hard on errors */ + config->failonerror = toggle; + break; + case 'F': + /* "form data" simulation, this is a little advanced so lets do our best + to sort this out slowly and carefully */ + if(formparse(config, + nextarg, + &config->httppost, + &config->last_post, + (bool) (subletter=='s'))) /* 's' means literal string */ + return PARAM_BAD_USE; + if(SetHTTPrequest(config, HTTPREQ_POST, &config->httpreq)) + return PARAM_BAD_USE; + break; + + case 'g': /* g disables URLglobbing */ + config->globoff = toggle; + break; + + case 'G': /* HTTP GET */ + config->use_httpget = TRUE; + break; + + case 'h': /* h for help */ + if(toggle) { + help(); + return PARAM_HELP_REQUESTED; + } + /* we now actually support --no-help too! */ + break; + case 'H': + /* A custom header to append to a list */ + err = add2list(&config->headers, nextarg); + if(err) + return err; + break; + case 'i': + config->include_headers = toggle; /* include the headers as well in the + general output stream */ + break; + case 'j': + config->cookiesession = toggle; + break; + case 'I': + /* + * no_body will imply include_headers later on + */ + config->no_body = toggle; + if(SetHTTPrequest(config, + (config->no_body)?HTTPREQ_HEAD:HTTPREQ_GET, + &config->httpreq)) + return PARAM_BAD_USE; + break; + case 'J': /* --remote-header-name */ + if (config->include_headers) { + warnf(config, + "--include and --remote-header-name cannot be combined.\n"); + return PARAM_BAD_USE; + } + config->content_disposition = toggle; + break; + case 'k': /* allow insecure SSL connects */ + config->insecure_ok = toggle; + break; + case 'K': /* parse config file */ + if(parseconfig(nextarg, config)) + warnf(config, "error trying read config from the '%s' file\n", + nextarg); + break; + case 'l': + config->dirlistonly = toggle; /* only list the names of the FTP dir */ + break; + case 'L': + config->followlocation = toggle; /* Follow Location: HTTP headers */ + switch (subletter) { + case 't': + /* Continue to send authentication (user+password) when following + * locations, even when hostname changed */ + config->unrestricted_auth = toggle; + break; + } + break; + case 'm': + /* specified max time */ + if(str2num(&config->timeout, nextarg)) + return PARAM_BAD_NUMERIC; + break; + case 'M': /* M for manual, huge help */ + if(toggle) { /* --no-manual shows no manual... */ +#ifdef USE_MANUAL + hugehelp(); + return PARAM_HELP_REQUESTED; +#else + warnf(config, + "built-in manual was disabled at build-time!\n"); + return PARAM_OPTION_UNKNOWN; +#endif + } + break; + case 'n': + switch(subletter) { + case 'o': /* CA info PEM file */ + /* use .netrc or URL */ + config->netrc_opt = toggle; + break; + default: + /* pick info from .netrc, if this is used for http, curl will + automatically enfore user+password with the request */ + config->netrc = toggle; + break; + } + break; + case 'N': + /* disable the output I/O buffering. note that the option is called + --buffer but is mostly used in the negative form: --no-buffer */ + if(longopt) + config->nobuffer = (bool)(!toggle); + else + config->nobuffer = toggle; + break; + case 'O': /* --remote-name */ + if(subletter == 'a') { /* --remote-name-all */ + config->default_node_flags = toggle?GETOUT_USEREMOTE:0; + break; + } + /* fall-through! */ + case 'o': /* --output */ + /* output file */ + { + struct getout *url; + if(config->url_out || (config->url_out=config->url_list)) { + /* there's a node here, if it already is filled-in continue to find + an "empty" node */ + while(config->url_out && (config->url_out->flags&GETOUT_OUTFILE)) + config->url_out = config->url_out->next; + } + + /* now there might or might not be an available node to fill in! */ + + if(config->url_out) + /* existing node */ + url = config->url_out; + else + /* there was no free node, create one! */ + url=new_getout(config); + + if(url) { + /* fill in the outfile */ + if('o' == letter) { + GetStr(&url->outfile, nextarg); + url->flags &= ~GETOUT_USEREMOTE; /* switch off */ + } + else { + url->outfile=NULL; /* leave it */ + if(toggle) + url->flags |= GETOUT_USEREMOTE; /* switch on */ + else + url->flags &= ~GETOUT_USEREMOTE; /* switch off */ + } + url->flags |= GETOUT_OUTFILE; + } + } + break; + case 'P': + /* This makes the FTP sessions use PORT instead of PASV */ + /* use <eth0> or <192.168.10.10> style addresses. Anything except + this will make us try to get the "default" address. + NOTE: this is a changed behaviour since the released 4.1! + */ + GetStr(&config->ftpport, nextarg); + break; + case 'p': + /* proxy tunnel for non-http protocols */ + config->proxytunnel = toggle; + break; + + case 'q': /* if used first, already taken care of, we do it like + this so we don't cause an error! */ + break; + case 'Q': + /* QUOTE command to send to FTP server */ + switch(nextarg[0]) { + case '-': + /* prefixed with a dash makes it a POST TRANSFER one */ + nextarg++; + err = add2list(&config->postquote, nextarg); + break; + case '+': + /* prefixed with a plus makes it a just-before-transfer one */ + nextarg++; + err = add2list(&config->prequote, nextarg); + break; + default: + err = add2list(&config->quote, nextarg); + break; + } + if(err) + return err; + break; + case 'r': + /* Specifying a range WITHOUT A DASH will create an illegal HTTP range + (and won't actually be range by definition). The man page previously + claimed that to be a good way, why this code is added to work-around + it. */ + if(ISDIGIT(*nextarg) && !strchr(nextarg, '-')) { + char buffer[32]; + curl_off_t off; + warnf(config, + "A specified range MUST include at least one dash (-). " + "Appending one for you!\n"); + off = curlx_strtoofft(nextarg, NULL, 10); + snprintf(buffer, sizeof(buffer), "%" CURL_FORMAT_CURL_OFF_T "-", off); + GetStr(&config->range, buffer); + } + { + /* byte range requested */ + char* tmp_range; + tmp_range=nextarg; + while(*tmp_range != '\0') { + if(!ISDIGIT(*tmp_range)&&*tmp_range!='-'&&*tmp_range!=',') { + warnf(config,"Invalid character is found in given range. " + "A specified range MUST have only digits in " + "\'start\'-\'stop\'. The server's response to this " + "request is uncertain.\n"); + break; + } + tmp_range++; + } + /* byte range requested */ + GetStr(&config->range, nextarg); + } + break; + case 'R': + /* use remote file's time */ + config->remote_time = toggle; + break; + case 's': + /* don't show progress meter, don't show errors : */ + if(toggle) + config->mute = config->noprogress = TRUE; + else + config->mute = config->noprogress = FALSE; + config->showerror = (bool)(!toggle); /* toggle off */ + break; + case 'S': + /* show errors */ + config->showerror = toggle; /* toggle on if used with -s */ + break; + case 't': + /* Telnet options */ + err = add2list(&config->telnet_options, nextarg); + if(err) + return err; + break; + case 'T': + /* we are uploading */ + { + struct getout *url; + if(config->url_out || (config->url_out=config->url_list)) { + /* there's a node here, if it already is filled-in continue to find + an "empty" node */ + while(config->url_out && (config->url_out->flags&GETOUT_UPLOAD)) + config->url_out = config->url_out->next; + } + + /* now there might or might not be an available node to fill in! */ + + if(config->url_out) + /* existing node */ + url = config->url_out; + else + /* there was no free node, create one! */ + url=new_getout(config); + + if(url) { + url->flags |= GETOUT_UPLOAD; /* mark -T used */ + if(!*nextarg) + url->flags |= GETOUT_NOUPLOAD; + else { + /* "-" equals stdin, but keep the string around for now */ + GetStr(&url->infile, nextarg); + } + } + } + break; + case 'u': + /* user:password */ + GetStr(&config->userpwd, nextarg); + cleanarg(nextarg); + checkpasswd("host", &config->userpwd); + break; + case 'U': + /* Proxy user:password */ + GetStr(&config->proxyuserpwd, nextarg); + cleanarg(nextarg); + checkpasswd("proxy", &config->proxyuserpwd); + break; + case 'v': + if(toggle) { + /* the '%' thing here will cause the trace get sent to stderr */ + GetStr(&config->trace_dump, (char *)"%"); + if(config->tracetype && (config->tracetype != TRACE_PLAIN)) + warnf(config, + "-v/--verbose overrides an earlier trace/verbose option\n"); + config->tracetype = TRACE_PLAIN; + } + else + /* verbose is disabled here */ + config->tracetype = TRACE_NONE; + break; + case 'V': + { + const char * const *proto; + + if(!toggle) + /* --no-version yields no output! */ + break; + + printf(CURL_ID "%s\n", curl_version()); + if (curlinfo->protocols) { + printf("Protocols: "); + for (proto=curlinfo->protocols; *proto; ++proto) { + printf("%s ", *proto); + } + puts(""); /* newline */ + } + if(curlinfo->features) { + unsigned int i; + struct feat { + const char *name; + int bitmask; + }; + static const struct feat feats[] = { + {"AsynchDNS", CURL_VERSION_ASYNCHDNS}, + {"Debug", CURL_VERSION_DEBUG}, + {"TrackMemory", CURL_VERSION_CURLDEBUG}, + {"GSS-Negotiate", CURL_VERSION_GSSNEGOTIATE}, + {"IDN", CURL_VERSION_IDN}, + {"IPv6", CURL_VERSION_IPV6}, + {"Largefile", CURL_VERSION_LARGEFILE}, + {"NTLM", CURL_VERSION_NTLM}, + {"SPNEGO", CURL_VERSION_SPNEGO}, + {"SSL", CURL_VERSION_SSL}, + {"SSPI", CURL_VERSION_SSPI}, + {"krb4", CURL_VERSION_KERBEROS4}, + {"libz", CURL_VERSION_LIBZ}, + {"CharConv", CURL_VERSION_CONV} + }; + printf("Features: "); + for(i=0; i<sizeof(feats)/sizeof(feats[0]); i++) { + if(curlinfo->features & feats[i].bitmask) + printf("%s ", feats[i].name); + } + puts(""); /* newline */ + } + } + return PARAM_HELP_REQUESTED; + case 'w': + /* get the output string */ + if('@' == *nextarg) { + /* the data begins with a '@' letter, it means that a file name + or - (stdin) follows */ + FILE *file; + const char *fname; + nextarg++; /* pass the @ */ + if(curlx_strequal("-", nextarg)) { + fname = "<stdin>"; + file = stdin; + } + else { + fname = nextarg; + file = fopen(nextarg, "r"); + } + err = file2string(&config->writeout, file); + if(file && (file != stdin)) + fclose(file); + if(err) + return err; + if(!config->writeout) + warnf(config, "Failed to read %s", fname); + } + else + GetStr(&config->writeout, nextarg); + break; + case 'x': + /* proxy */ + GetStr(&config->proxy, nextarg); + config->proxyver = CURLPROXY_HTTP; + break; + case 'X': + /* set custom request */ + GetStr(&config->customrequest, nextarg); + break; + case 'y': + /* low speed time */ + if(str2num(&config->low_speed_time, nextarg)) + return PARAM_BAD_NUMERIC; + if(!config->low_speed_limit) + config->low_speed_limit = 1; + break; + case 'Y': + /* low speed limit */ + if(str2num(&config->low_speed_limit, nextarg)) + return PARAM_BAD_NUMERIC; + if(!config->low_speed_time) + config->low_speed_time=30; + break; + case 'z': /* time condition coming up */ + switch(*nextarg) { + case '+': + nextarg++; + default: + /* If-Modified-Since: (section 14.28 in RFC2068) */ + config->timecond = CURL_TIMECOND_IFMODSINCE; + break; + case '-': + /* If-Unmodified-Since: (section 14.24 in RFC2068) */ + config->timecond = CURL_TIMECOND_IFUNMODSINCE; + nextarg++; + break; + case '=': + /* Last-Modified: (section 14.29 in RFC2068) */ + config->timecond = CURL_TIMECOND_LASTMOD; + nextarg++; + break; + } + now=time(NULL); + config->condtime=curl_getdate(nextarg, &now); + if(-1 == (int)config->condtime) { + /* now let's see if it is a file name to get the time from instead! */ + struct_stat statbuf; + if(-1 == stat(nextarg, &statbuf)) { + /* failed, remove time condition */ + config->timecond = CURL_TIMECOND_NONE; + warnf(config, + "Illegal date format for -z/--timecond (and not " + "a file name). Disabling time condition. " + "See curl_getdate(3) for valid date syntax.\n"); + } + else { + /* pull the time out from the file */ + config->condtime = statbuf.st_mtime; + } + } + break; + default: /* unknown flag */ + return PARAM_OPTION_UNKNOWN; + } + hit = -1; + + } while(!longopt && !singleopt && *++parse && !*usedarg); + + return PARAM_OK; +} + +/* + * Copies the string from line to the buffer at param, unquoting + * backslash-quoted characters and NUL-terminating the output string. + * Stops at the first non-backslash-quoted double quote character or the + * end of the input string. param must be at least as long as the input + * string. Returns the pointer after the last handled input character. + */ +static const char *unslashquote(const char *line, char *param) +{ + while(*line && (*line != '\"')) { + if(*line == '\\') { + char out; + line++; + + /* default is to output the letter after the backslash */ + switch(out = *line) { + case '\0': + continue; /* this'll break out of the loop */ + case 't': + out='\t'; + break; + case 'n': + out='\n'; + break; + case 'r': + out='\r'; + break; + case 'v': + out='\v'; + break; + } + *param++=out; + line++; + } + else + *param++=*line++; + } + *param=0; /* always zero terminate */ + return line; +} + +/* return 0 on everything-is-fine, and non-zero otherwise */ +static int parseconfig(const char *filename, + struct Configurable *config) +{ + int res; + FILE *file; + char filebuffer[512]; + bool usedarg; + char *home; + int rc = 0; + + if(!filename || !*filename) { + /* NULL or no file name attempts to load .curlrc from the homedir! */ + +#define CURLRC DOT_CHAR "curlrc" + +#ifndef __AMIGA__ + filename = CURLRC; /* sensible default */ + home = homedir(); /* portable homedir finder */ + if(home) { + if(strlen(home)<(sizeof(filebuffer)-strlen(CURLRC))) { + snprintf(filebuffer, sizeof(filebuffer), + "%s%s%s", home, DIR_CHAR, CURLRC); + +#ifdef WIN32 + /* Check if the file exists - if not, try CURLRC in the same + * directory as our executable + */ + file = fopen(filebuffer, "r"); + if (file != NULL) { + fclose(file); + filename = filebuffer; + } + else { + /* Get the filename of our executable. GetModuleFileName is + * already declared via inclusions done in setup header file. + * We assume that we are using the ASCII version here. + */ + int n = GetModuleFileName(0, filebuffer, sizeof(filebuffer)); + if (n > 0 && n < (int)sizeof(filebuffer)) { + /* We got a valid filename - get the directory part */ + char *lastdirchar = strrchr(filebuffer, '\\'); + if (lastdirchar) { + size_t remaining; + *lastdirchar = 0; + /* If we have enough space, build the RC filename */ + remaining = sizeof(filebuffer) - strlen(filebuffer); + if (strlen(CURLRC) < remaining - 1) { + snprintf(lastdirchar, remaining, + "%s%s", DIR_CHAR, CURLRC); + /* Don't bother checking if it exists - we do + * that later + */ + filename = filebuffer; + } + } + } + } +#else /* WIN32 */ + filename = filebuffer; +#endif /* WIN32 */ + } + free(home); /* we've used it, now free it */ + } + +# else /* __AMIGA__ */ + /* On AmigaOS all the config files are into env: + */ + filename = "ENV:" CURLRC; + +#endif + } + + if(strcmp(filename,"-")) + file = fopen(filename, "r"); + else + file = stdin; + + if(file) { + char *line; + char *aline; + char *option; + char *param; + int lineno=0; + bool alloced_param; + +#define ISSEP(x) (((x)=='=') || ((x) == ':')) + + while (NULL != (aline = my_get_line(file))) { + lineno++; + line = aline; + alloced_param=FALSE; + + /* line with # in the first non-blank column is a comment! */ + while(*line && ISSPACE(*line)) + line++; + + switch(*line) { + case '#': + case '/': + case '\r': + case '\n': + case '*': + case '\0': + free(aline); + continue; + } + + /* the option keywords starts here */ + option = line; + while(*line && !ISSPACE(*line) && !ISSEP(*line)) + line++; + /* ... and has ended here */ + + if(*line) + *line++=0; /* zero terminate, we have a local copy of the data */ + +#ifdef DEBUG_CONFIG + fprintf(stderr, "GOT: %s\n", option); +#endif + + /* pass spaces and separator(s) */ + while(*line && (ISSPACE(*line) || ISSEP(*line))) + line++; + + /* the parameter starts here (unless quoted) */ + if(*line == '\"') { + /* quoted parameter, do the quote dance */ + line++; + param=malloc(strlen(line)+1); /* parameter */ + if (!param) { + /* out of memory */ + free(aline); + rc = 1; + break; + } + alloced_param=TRUE; + line = (char*) unslashquote(line, param); + } + else { + param=line; /* parameter starts here */ + while(*line && !ISSPACE(*line)) + line++; + *line=0; /* zero terminate */ + } + + if (param && !*param) { + /* do this so getparameter can check for required parameters. + Otherwise it always thinks there's a parameter. */ + if (alloced_param) + free(param); + param = NULL; + } + +#ifdef DEBUG_CONFIG + fprintf(stderr, "PARAM: \"%s\"\n",(param ? param : "(null)")); +#endif + res = getparameter(option, param, &usedarg, config); + + if (param && *param && !usedarg) + /* we passed in a parameter that wasn't used! */ + res = PARAM_GOT_EXTRA_PARAMETER; + + if(res != PARAM_OK) { + /* the help request isn't really an error */ + if(!strcmp(filename, "-")) { + filename=(char *)"<stdin>"; + } + if(PARAM_HELP_REQUESTED != res) { + const char *reason = param2text(res); + warnf(config, "%s:%d: warning: '%s' %s\n", + filename, lineno, option, reason); + } + } + + if(alloced_param) + { + free(param); + param = NULL; + } + + free(aline); + } + if(file != stdin) + fclose(file); + } + else + rc = 1; /* couldn't open the file */ + return rc; +} + +static void go_sleep(long ms) +{ +#ifdef HAVE_POLL_FINE + /* portable subsecond "sleep" */ + poll((void *)0, 0, (int)ms); +#else + /* systems without poll() need other solutions */ + +#ifdef WIN32 + /* Windows offers a millisecond sleep */ + Sleep(ms); +#elif defined(MSDOS) + delay(ms); +#else + /* Other systems must use select() for this */ + struct timeval timeout; + + timeout.tv_sec = ms/1000; + ms = ms%1000; + timeout.tv_usec = ms * 1000; + + select(0, NULL, NULL, NULL, &timeout); +#endif + +#endif +} + +static size_t my_fwrite(void *buffer, size_t sz, size_t nmemb, void *stream) +{ + size_t rc; + struct OutStruct *out=(struct OutStruct *)stream; + struct Configurable *config = out->config; + + /* + * Once that libcurl has called back my_fwrite() the returned value + * is checked against the amount that was intended to be written, if + * it does not match then it fails with CURLE_WRITE_ERROR. So at this + * point returning a value different from sz*nmemb indicates failure. + */ + const size_t err_rc = (sz * nmemb) ? 0 : 1; + + if(!out->stream) { + if (!out->filename) { + warnf(config, "Remote filename has no length!\n"); + return err_rc; /* Failure */ + } + + if (config->content_disposition) { + /* don't overwrite existing files */ + FILE* f = fopen(out->filename, "r"); + if (f) { + fclose(f); + warnf(config, "Refusing to overwrite %s: %s\n", out->filename, + strerror(EEXIST)); + return err_rc; /* Failure */ + } + } + + /* open file for writing */ + out->stream=fopen(out->filename, "wb"); + if(!out->stream) { + warnf(config, "Failed to create the file %s: %s\n", out->filename, + strerror(errno)); + return err_rc; /* failure */ + } + } + + rc = fwrite(buffer, sz, nmemb, out->stream); + + if((sz * nmemb) == rc) { + /* we added this amount of data to the output */ + out->bytes += (sz * nmemb); + } + + if(config->readbusy) { + config->readbusy = FALSE; + curl_easy_pause(config->easy, CURLPAUSE_CONT); + } + + if(config->nobuffer) { + /* disable output buffering */ + int res = fflush(out->stream); + if(res) { + /* return a value that isn't the same as sz * nmemb */ + return err_rc; /* failure */ + } + } + + return rc; +} + +struct InStruct { + int fd; + struct Configurable *config; +}; + +#define MAX_SEEK 2147483647 + +/* + * my_seek() is the CURLOPT_SEEKFUNCTION we use + */ +static int my_seek(void *stream, curl_off_t offset, int whence) +{ + struct InStruct *in=(struct InStruct *)stream; + +#if (CURL_SIZEOF_CURL_OFF_T > SIZEOF_OFF_T) && !defined(USE_WIN32_LARGE_FILES) + /* The offset check following here is only interesting if curl_off_t is + larger than off_t and we are not using the WIN32 large file support + macros that provide the support to do 64bit seeks correctly */ + + if(offset > MAX_SEEK) { + /* Some precaution code to work around problems with different data sizes + to allow seeking >32bit even if off_t is 32bit. Should be very rare and + is really valid on weirdo-systems. */ + curl_off_t left = offset; + + if(whence != SEEK_SET) + /* this code path doesn't support other types */ + return 1; + + if(LSEEK_ERROR == lseek(in->fd, 0, SEEK_SET)) + /* couldn't rewind to beginning */ + return 1; + + while(left) { + long step = (left>MAX_SEEK ? MAX_SEEK : (long)left); + if(LSEEK_ERROR == lseek(in->fd, step, SEEK_CUR)) + /* couldn't seek forwards the desired amount */ + return 1; + left -= step; + } + return 0; + } +#endif + if(LSEEK_ERROR == lseek(in->fd, offset, whence)) + /* couldn't rewind, the reason is in errno but errno is just not portable + enough and we don't actually care that much why we failed. We'll let + libcurl know that it may try other means if it wants to. */ + return CURL_SEEKFUNC_CANTSEEK; + + return 0; +} + +static size_t my_fread(void *buffer, size_t sz, size_t nmemb, void *userp) +{ + ssize_t rc; + struct InStruct *in=(struct InStruct *)userp; + + rc = read(in->fd, buffer, sz*nmemb); + if(rc < 0) { + if(errno == EAGAIN) { + errno = 0; + in->config->readbusy = TRUE; + return CURL_READFUNC_PAUSE; + } + /* since size_t is unsigned we can't return negative values fine */ + rc = 0; + } + in->config->readbusy = FALSE; + return (size_t)rc; +} + +struct ProgressData { + int calls; + curl_off_t prev; + int width; + FILE *out; /* where to write everything to */ + curl_off_t initial_size; +}; + +static int myprogress (void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow) +{ + /* The original progress-bar source code was written for curl by Lars Aas, + and this new edition inherits some of his concepts. */ + + char line[256]; + char outline[256]; + char format[40]; + double frac; + double percent; + int barwidth; + int num; + int i; + + struct ProgressData *bar = (struct ProgressData *)clientp; + curl_off_t total = (curl_off_t)dltotal + (curl_off_t)ultotal + + bar->initial_size; /* expected transfer size */ + curl_off_t point = (curl_off_t)dlnow + (curl_off_t)ulnow + + bar->initial_size; /* we've come this far */ + + if(point > total) + /* we have got more than the expected total! */ + total = point; + + bar->calls++; /* simply count invokes */ + + if(total < 1) { + curl_off_t prevblock = bar->prev / 1024; + curl_off_t thisblock = point / 1024; + while ( thisblock > prevblock ) { + fprintf( bar->out, "#" ); + prevblock++; + } + } + else { + frac = (double)point / (double)total; + percent = frac * 100.0f; + barwidth = bar->width - 7; + num = (int) (((double)barwidth) * frac); + for ( i = 0; i < num; i++ ) { + line[i] = '#'; + } + line[i] = '\0'; + snprintf( format, sizeof(format), "%%-%ds %%5.1f%%%%", barwidth ); + snprintf( outline, sizeof(outline), format, line, percent ); + fprintf( bar->out, "\r%s", outline ); + } + fflush(bar->out); + bar->prev = point; + + return 0; +} + +static +void progressbarinit(struct ProgressData *bar, + struct Configurable *config) +{ +#ifdef __EMX__ + /* 20000318 mgs */ + int scr_size [2]; +#endif + char *colp; + + memset(bar, 0, sizeof(struct ProgressData)); + + /* pass this through to progress function so + * it can display progress towards total file + * not just the part that's left. (21-may-03, dbyron) */ + if (config->use_resume) + bar->initial_size = config->resume_from; + +/* TODO: get terminal width through ansi escapes or something similar. + try to update width when xterm is resized... - 19990617 larsa */ +#ifndef __EMX__ + /* 20000318 mgs + * OS/2 users most likely won't have this env var set, and besides that + * we're using our own way to determine screen width */ + colp = curlx_getenv("COLUMNS"); + if (colp != NULL) { + bar->width = atoi(colp); + curl_free(colp); + } + else + bar->width = 79; +#else + /* 20000318 mgs + * We use this emx library call to get the screen width, and subtract + * one from what we got in order to avoid a problem with the cursor + * advancing to the next line if we print a string that is as long as + * the screen is wide. */ + + _scrsize(scr_size); + bar->width = scr_size[0] - 1; +#endif + + bar->out = config->errors; +} + + +static +void dump(const char *timebuf, const char *text, + FILE *stream, const unsigned char *ptr, size_t size, + trace tracetype, curl_infotype infotype) +{ + size_t i; + size_t c; + + unsigned int width=0x10; + + if(tracetype == TRACE_ASCII) + /* without the hex output, we can fit more on screen */ + width = 0x40; + + fprintf(stream, "%s%s, %zd bytes (0x%zx)\n", timebuf, text, size, size); + + for(i=0; i<size; i+= width) { + + fprintf(stream, "%04zx: ", i); + + if(tracetype == TRACE_BIN) { + /* hex not disabled, show it */ + for(c = 0; c < width; c++) + if(i+c < size) + fprintf(stream, "%02x ", ptr[i+c]); + else + fputs(" ", stream); + } + + for(c = 0; (c < width) && (i+c < size); c++) { + /* check for 0D0A; if found, skip past and start a new line of output */ + if ((tracetype == TRACE_ASCII) && + (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) { + i+=(c+2-width); + break; + } +#ifdef CURL_DOES_CONVERSIONS + /* repeat the 0D0A check above but use the host encoding for CRLF */ + if ((tracetype == TRACE_ASCII) && + (i+c+1 < size) && ptr[i+c]=='\r' && ptr[i+c+1]=='\n') { + i+=(c+2-width); + break; + } + /* convert to host encoding and print this character */ + fprintf(stream, "%c", convert_char(infotype, ptr[i+c])); +#else + (void)infotype; + fprintf(stream, "%c", + (ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:UNPRINTABLE_CHAR); +#endif /* CURL_DOES_CONVERSIONS */ + /* check again for 0D0A, to avoid an extra \n if it's at width */ + if ((tracetype == TRACE_ASCII) && + (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) { + i+=(c+3-width); + break; + } + } + fputc('\n', stream); /* newline */ + } + fflush(stream); +} + +static +int my_trace(CURL *handle, curl_infotype type, + unsigned char *data, size_t size, + void *userp) +{ + struct Configurable *config = (struct Configurable *)userp; + FILE *output=config->errors; + const char *text; + struct timeval tv; + struct tm *now; + char timebuf[20]; + time_t secs; + static time_t epoch_offset; + static int known_offset; + + (void)handle; /* prevent compiler warning */ + + if(config->tracetime) { + tv = cutil_tvnow(); + if(!known_offset) { + epoch_offset = time(NULL) - tv.tv_sec; + known_offset = 1; + } + secs = epoch_offset + tv.tv_sec; + now = localtime(&secs); /* not thread safe but we don't care */ + snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld ", + now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec); + } + else + timebuf[0]=0; + + if(!config->trace_stream) { + /* open for append */ + if(curlx_strequal("-", config->trace_dump)) + config->trace_stream = stdout; + else if(curlx_strequal("%", config->trace_dump)) + /* Ok, this is somewhat hackish but we do it undocumented for now */ + config->trace_stream = config->errors; /* aka stderr */ + else { + config->trace_stream = fopen(config->trace_dump, "w"); + config->trace_fopened = TRUE; + } + } + + if(config->trace_stream) + output = config->trace_stream; + + if(!output) { + warnf(config, "Failed to create/open output"); + return 0; + } + + if(config->tracetype == TRACE_PLAIN) { + /* + * This is the trace look that is similar to what libcurl makes on its + * own. + */ + static const char * const s_infotype[] = { + "*", "<", ">", "{", "}", "{", "}" + }; + size_t i; + size_t st=0; + static bool newl = FALSE; + static bool traced_data = FALSE; + + switch(type) { + case CURLINFO_HEADER_OUT: + for(i=0; i<size-1; i++) { + if(data[i] == '\n') { /* LF */ + if(!newl) { + fprintf(output, "%s%s ", timebuf, s_infotype[type]); + } + (void)fwrite(data+st, i-st+1, 1, output); + st = i+1; + newl = FALSE; + } + } + if(!newl) + fprintf(output, "%s%s ", timebuf, s_infotype[type]); + (void)fwrite(data+st, i-st+1, 1, output); + newl = (bool)(size && (data[size-1] != '\n')); + traced_data = FALSE; + break; + case CURLINFO_TEXT: + case CURLINFO_HEADER_IN: + if(!newl) + fprintf(output, "%s%s ", timebuf, s_infotype[type]); + (void)fwrite(data, size, 1, output); + newl = (bool)(size && (data[size-1] != '\n')); + traced_data = FALSE; + break; + case CURLINFO_DATA_OUT: + case CURLINFO_DATA_IN: + case CURLINFO_SSL_DATA_IN: + case CURLINFO_SSL_DATA_OUT: + if(!traced_data) { + /* if the data is output to a tty and we're sending this debug trace + to stderr or stdout, we don't display the alert about the data not + being shown as the data _is_ shown then just not via this + function */ + if(!config->isatty || + ((output != stderr) && (output != stdout))) { + if(!newl) + fprintf(output, "%s%s ", timebuf, s_infotype[type]); + fprintf(output, "[data not shown]\n"); + newl = FALSE; + traced_data = TRUE; + } + } + break; + default: /* nada */ + newl = FALSE; + traced_data = FALSE; + break; + } + + return 0; + } + +#ifdef CURL_DOES_CONVERSIONS + /* Special processing is needed for CURLINFO_HEADER_OUT blocks + * if they contain both headers and data (separated by CRLFCRLF). + * We dump the header text and then switch type to CURLINFO_DATA_OUT. + */ + if((type == CURLINFO_HEADER_OUT) && (size > 4)) { + size_t i; + for(i = 0; i < size - 4; i++) { + if(memcmp(&data[i], "\r\n\r\n", 4) == 0) { + /* dump everthing through the CRLFCRLF as a sent header */ + text = "=> Send header"; + dump(timebuf, text, output, data, i+4, config->tracetype, type); + data += i + 3; + size -= i + 4; + type = CURLINFO_DATA_OUT; + data += 1; + break; + } + } + } +#endif /* CURL_DOES_CONVERSIONS */ + + switch (type) { + case CURLINFO_TEXT: + fprintf(output, "%s== Info: %s", timebuf, data); + default: /* in case a new one is introduced to shock us */ + return 0; + + case CURLINFO_HEADER_OUT: + text = "=> Send header"; + break; + case CURLINFO_DATA_OUT: + text = "=> Send data"; + break; + case CURLINFO_HEADER_IN: + text = "<= Recv header"; + break; + case CURLINFO_DATA_IN: + text = "<= Recv data"; + break; + case CURLINFO_SSL_DATA_IN: + text = "<= Recv SSL data"; + break; + case CURLINFO_SSL_DATA_OUT: + text = "=> Send SSL data"; + break; + } + + dump(timebuf, text, output, data, size, config->tracetype, type); + return 0; +} + +static void free_config_fields(struct Configurable *config) +{ + if(config->random_file) + free(config->random_file); + if(config->egd_file) + free(config->egd_file); + if(config->trace_dump) + free(config->trace_dump); + if(config->cipher_list) + free(config->cipher_list); + if(config->userpwd) + free(config->userpwd); + if(config->postfields) + free(config->postfields); + if(config->proxy) + free(config->proxy); + if(config->proxyuserpwd) + free(config->proxyuserpwd); + if(config->noproxy) + free(config->noproxy); + if(config->cookie) + free(config->cookie); + if(config->cookiefile) + free(config->cookiefile); + if(config->krblevel) + free(config->krblevel); + if(config->headerfile) + free(config->headerfile); + if(config->ftpport) + free(config->ftpport); + if(config->range) + free(config->range); + if(config->customrequest) + free(config->customrequest); + if(config->writeout) + free(config->writeout); + if(config->httppost) + curl_formfree(config->httppost); + if (config->cert) + free(config->cert); + if(config->cacert) + free(config->cacert); + if (config->cert_type) + free(config->cert_type); + if(config->capath) + free(config->capath); + if(config->crlfile) + free(config->crlfile); + if(config->cookiejar) + free(config->cookiejar); + if(config->ftp_account) + free(config->ftp_account); + if(config->ftp_alternative_to_user) + free(config->ftp_alternative_to_user); + if(config->iface) + free(config->iface); + if(config->socksproxy) + free(config->socksproxy); + if(config->libcurl) + free(config->libcurl); + if (config->key_passwd) + free(config->key_passwd); + if (config->key) + free(config->key); + if (config->key_type) + free(config->key_type); + if (config->pubkey) + free(config->pubkey); + if (config->referer) + free(config->referer); + if (config->hostpubmd5) + free(config->hostpubmd5); + if(config->mail_from) + free(config->mail_from); +#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) + if(config->socks5_gssapi_service) + free(config->socks5_gssapi_service); +#endif + + curl_slist_free_all(config->quote); /* checks for config->quote == NULL */ + curl_slist_free_all(config->prequote); + curl_slist_free_all(config->postquote); + curl_slist_free_all(config->headers); + curl_slist_free_all(config->telnet_options); + curl_slist_free_all(config->mail_rcpt); + + if(config->easy) + curl_easy_cleanup(config->easy); +} + +#ifdef WIN32 + +/* Function to find CACert bundle on a Win32 platform using SearchPath. + * (SearchPath is already declared via inclusions done in setup header file) + * (Use the ASCII version instead of the unicode one!) + * The order of the directories it searches is: + * 1. application's directory + * 2. current working directory + * 3. Windows System directory (e.g. C:\windows\system32) + * 4. Windows Directory (e.g. C:\windows) + * 5. all directories along %PATH% + */ +static void FindWin32CACert(struct Configurable *config, + const char *bundle_file) +{ + /* only check for cert file if "we" support SSL */ + if(curlinfo->features & CURL_VERSION_SSL) { + DWORD buflen; + char *ptr = NULL; + char *retval = malloc(sizeof (TCHAR) * (MAX_PATH + 1)); + if (!retval) + return; + retval[0] = '\0'; + buflen = SearchPathA(NULL, bundle_file, NULL, MAX_PATH+2, retval, &ptr); + if (buflen > 0) { + GetStr(&config->cacert, retval); + } + free(retval); + } +} + +#endif + +#define RETRY_SLEEP_DEFAULT 1000 /* ms */ +#define RETRY_SLEEP_MAX 600000 /* ms == 10 minutes */ + +static bool +output_expected(const char* url, const char* uploadfile) +{ + if(!uploadfile) + return TRUE; /* download */ + if(checkprefix("http://", url) || checkprefix("https://", url)) + return TRUE; /* HTTP(S) upload */ + + return FALSE; /* non-HTTP upload, probably no output should be expected */ +} + +#define my_setopt(x,y,z) _my_setopt(x, 0, config, #y, y, z) +#define my_setopt_str(x,y,z) _my_setopt(x, 1, config, #y, y, z) + +static struct curl_slist *easycode; + +static CURLcode _my_setopt(CURL *curl, bool str, struct Configurable *config, + const char *name, CURLoption tag, ...); + +static CURLcode _my_setopt(CURL *curl, bool str, struct Configurable *config, + const char *name, CURLoption tag, ...) +{ + va_list arg; + CURLcode ret; + char *bufp; + char value[256]; + bool remark=FALSE; + + va_start(arg, tag); + + if(tag < CURLOPTTYPE_OBJECTPOINT) { + long lval = va_arg(arg, long); + snprintf(value, sizeof(value), "%ld", lval); + ret = curl_easy_setopt(curl, tag, lval); + + } + else if(tag < CURLOPTTYPE_OFF_T) { + void *pval = va_arg(arg, void *); + unsigned char *ptr = (unsigned char *)pval; + + /* function pointers are never printable */ + if (tag >= CURLOPTTYPE_FUNCTIONPOINT) { + if (pval) { + snprintf(value, sizeof(value), "%p", pval); + remark = TRUE; + } + else + strcpy(value, "NULL"); + } + + else if(pval && str) + snprintf(value, sizeof(value), "\"%s\"", (char *)ptr); + else if(pval) { + snprintf(value, sizeof(value), "%p", pval); + remark = TRUE; + } + else { + strcpy(value, "NULL"); /* value fits more than 5 bytes */ + } + ret = curl_easy_setopt(curl, tag, pval); + + } + else { + curl_off_t oval = va_arg(arg, curl_off_t); + snprintf(value, sizeof(value), "%" CURL_FORMAT_CURL_OFF_T, oval); + ret = curl_easy_setopt(curl, tag, oval); + } + + if(config->libcurl) { + /* we only use this for real if --libcurl was used */ + + bufp = curlx_maprintf("%scurl_easy_setopt(hnd, %s, %s);%s", + remark?"/* ":"", name, value, + remark?" [REMARK] */":""); + + if (!bufp || !curl_slist_append(easycode, bufp)) + ret = CURLE_OUT_OF_MEMORY; + if (bufp) + curl_free(bufp); + } + va_end(arg); + + return ret; +} + +static const char * const srchead[]={ + "/********* Sample code generated by the curl command line tool **********", + " * Lines with [REMARK] below might need to be modified to make this code ", + " * usable. Add error code checking where appropriate.", + " * Compile this with a suitable header include path. Then link with ", + " * libcurl.", + " * If you use any *_LARGE options, make sure your compiler figure", + " * out the correct size for the curl_off_t variable.", + " * Read the details for all curl_easy_setopt() options online on:", + " * http://curlm.haxx.se/libcurl/c/curl_easy_setopt.html", + " ************************************************************************/", + "[m]", + "#include <curl/curl.h>", + "", + "int main(int argc, char *argv[])", + "{", + " CURLcode ret;", + NULL +}; + +static void dumpeasycode(struct Configurable *config) +{ + struct curl_slist *ptr = easycode; + char *o = config->libcurl; + + if(o) { + FILE *out; + bool fopened = FALSE; + if(strcmp(o, "-")) { + out = fopen(o, "wt"); + fopened = TRUE; + } + else + out= stdout; + if(!out) + warnf(config, "Failed to open %s to write libcurl code!\n", o); + else { + int i; + const char *c; + + for(i=0; (c = srchead[i]); i++) { + if(!memcmp((char *)c, "[m]", 3)) { +#if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS > 32) + fprintf(out, "#define _FILE_OFFSET_BITS %d " + "/* for pre libcurl 7.19.0 curl_off_t magic */\n", + _FILE_OFFSET_BITS); +#endif + } + else + fprintf(out, "%s\n", c); + } + + while(ptr) { + fprintf(out, " %s\n", ptr->data); + ptr = ptr->next; + } + fprintf(out, + " return (int)ret;\n" + "}\n" + "/**** End of sample code ****/\n"); + if(fopened) + fclose(out); + } + } + curl_slist_free_all(easycode); +} + +static bool stdin_upload(const char *uploadfile) +{ + return (bool)(curlx_strequal(uploadfile, "-") || + curlx_strequal(uploadfile, ".")); +} + +/* Adds the file name to the URL if it doesn't already have one. + * url will be freed before return if the returned pointer is different + */ +static char *add_file_name_to_url(CURL *curl, char *url, const char *filename) +{ + /* If no file name part is given in the URL, we add this file name */ + char *ptr=strstr(url, "://"); + if(ptr) + ptr+=3; + else + ptr=url; + ptr = strrchr(ptr, '/'); + if(!ptr || !strlen(++ptr)) { + /* The URL has no file name part, add the local file name. In order + to be able to do so, we have to create a new URL in another + buffer.*/ + + /* We only want the part of the local path that is on the right + side of the rightmost slash and backslash. */ + const char *filep = strrchr(filename, '/'); + char *file2 = strrchr(filep?filep:filename, '\\'); + char *encfile; + + if(file2) + filep = file2+1; + else if(filep) + filep++; + else + filep = filename; + + /* URL encode the file name */ + encfile = curl_easy_escape(curl, filep, 0 /* use strlen */); + if(encfile) { + char *urlbuffer = malloc(strlen(url) + strlen(encfile) + 3); + if(!urlbuffer) { + free(url); + return NULL; + } + if(ptr) + /* there is a trailing slash on the URL */ + sprintf(urlbuffer, "%s%s", url, encfile); + else + /* there is no trailing slash on the URL */ + sprintf(urlbuffer, "%s/%s", url, encfile); + + curl_free(encfile); + + free(url); + url = urlbuffer; /* use our new URL instead! */ + } + } + return url; +} + +/* Extracts the name portion of the URL. + * Returns a heap-allocated string, or NULL if no name part + */ +static char *get_url_file_name(const char *url) +{ + char *fn = NULL; + + /* Find and get the remote file name */ + const char * pc =strstr(url, "://"); + if(pc) + pc+=3; + else + pc=url; + pc = strrchr(pc, '/'); + + if(pc) { + /* duplicate the string beyond the slash */ + pc++; + fn = *pc ? strdup(pc): NULL; + } + return fn; +} + +static char* +parse_filename(char *ptr, size_t len) +{ + char* copy; + char* p; + char* q; + char quote = 0; + + /* simple implementation of strndup() */ + copy = malloc(len+1); + if (!copy) + return NULL; + strncpy(copy, ptr, len); + copy[len] = 0; + + p = copy; + if (*p == '\'' || *p == '"') { + /* store the starting quote */ + quote = *p; + p++; + } + + /* if the filename contains a path, only use filename portion */ + q = strrchr(copy, '/'); + if (q) { + p=q+1; + if (!*p) { + free(copy); + return NULL; + } + } + + q = strrchr(p, quote); + if (q) + *q = 0; + + if (copy!=p) + memmove(copy, p, strlen(p)+1); + + return copy; +} + +static size_t +header_callback(void *ptr, size_t size, size_t nmemb, void *stream) +{ + struct OutStruct* outs = (struct OutStruct*)stream; + const char* str = (char*)ptr; + const size_t cb = size*nmemb; + const char* end = (char*)ptr + cb; + + if (cb > 20 && curlx_strnequal(str, "Content-disposition:", 20)) { + char *p = (char*)str + 20; + + /* look for the 'filename=' parameter + (encoded filenames (*=) are not supported) */ + for(;;) { + char *filename; + + while (*p && (p < end) && !ISALPHA(*p)) + p++; + if (p > end-9) + break; + + if (memcmp(p, "filename=", 9)) { + /* no match, find next parameter */ + while ((p < end) && (*p != ';')) + p++; + continue; + } + p+=9; + filename = parse_filename(p, cb - (p - str)); + if (filename) { + outs->filename = filename; + break; + } + } + } + + return cb; +} + +static int +operate(struct Configurable *config, int argc, argv_item_t argv[]) +{ + char errorbuffer[CURL_ERROR_SIZE]; + char useragent[256]; /* buah, we don't want a larger default user agent */ + struct ProgressData progressbar; + struct getout *urlnode; + struct getout *nextnode; + + struct OutStruct outs; + struct OutStruct heads; + struct InStruct input; + + URLGlob *urls=NULL; + URLGlob *inglob=NULL; + int urlnum; + int infilenum; + char *uploadfile=NULL; /* a single file, never a glob */ + + curl_off_t uploadfilesize; /* -1 means unknown */ + bool stillflags=TRUE; + + bool allocuseragent=FALSE; + + char *httpgetfields=NULL; + + CURL *curl; + int res = 0; + int i; + long retry_sleep_default; + long retry_sleep; + + char *env; + + memset(&heads, 0, sizeof(struct OutStruct)); + +#ifdef CURLDEBUG + /* this sends all memory debug messages to a logfile named memdump */ + env = curlx_getenv("CURL_MEMDEBUG"); + if(env) { + /* use the value as file name */ + char *s = strdup(env); + curl_free(env); + curl_memdebug(s); + free(s); + /* this weird strdup() and stuff here is to make the curl_free() get + called before the memdebug() as otherwise the memdebug tracing will + with tracing a free() without an alloc! */ + } + env = curlx_getenv("CURL_MEMLIMIT"); + if(env) { + curl_memlimit(atoi(env)); + curl_free(env); + } +#endif + + /* Initialize curl library - do not call any libcurl functions before. + Note that the CURLDEBUG magic above is an exception, but then that's not + part of the official public API. + */ + if (main_init() != CURLE_OK) { + helpf(config->errors, "error initializing curl library\n"); + return CURLE_FAILED_INIT; + } + + /* + * Get a curl handle to use for all forthcoming curl transfers. Cleanup + * when all transfers are done. + */ + curl = curl_easy_init(); + if(!curl) { + clean_getout(config); + return CURLE_FAILED_INIT; + } + config->easy = curl; + + memset(&outs,0,sizeof(outs)); + + config->outs = &outs; + + /* we get libcurl info right away */ + curlinfo = curl_version_info(CURLVERSION_NOW); + + errorbuffer[0]=0; /* prevent junk from being output */ + + /* setup proper locale from environment */ +#ifdef HAVE_SETLOCALE + setlocale(LC_ALL, ""); +#endif + + /* inits */ + config->postfieldsize = -1; + config->showerror=TRUE; + config->use_httpget=FALSE; + config->create_dirs=FALSE; + config->maxredirs = DEFAULT_MAXREDIRS; + + if(argc>1 && + (!curlx_strnequal("--", argv[1], 2) && (argv[1][0] == '-')) && + strchr(argv[1], 'q')) { + /* + * The first flag, that is not a verbose name, but a shortname + * and it includes the 'q' flag! + */ + ; + } + else { + parseconfig(NULL, config); /* ignore possible failure */ + } + + if ((argc < 2) && !config->url_list) { + helpf(config->errors, NULL); + return CURLE_FAILED_INIT; + } + + /* Parse options */ + for (i = 1; i < argc; i++) { + if(stillflags && + ('-' == argv[i][0])) { + char *nextarg; + bool passarg; + char *origopt=argv[i]; + + char *flag = argv[i]; + + if(curlx_strequal("--", argv[i])) + /* this indicates the end of the flags and thus enables the + following (URL) argument to start with -. */ + stillflags=FALSE; + else { + nextarg= (i < argc - 1)? argv[i+1]: NULL; + + res = getparameter(flag, nextarg, &passarg, config); + if(res) { + int retval = CURLE_OK; + if(res != PARAM_HELP_REQUESTED) { + const char *reason = param2text(res); + helpf(config->errors, "option %s: %s\n", origopt, reason); + retval = CURLE_FAILED_INIT; + } + clean_getout(config); + return retval; + } + + if(passarg) /* we're supposed to skip this */ + i++; + } + } + else { + bool used; + /* just add the URL please */ + res = getparameter((char *)"--url", argv[i], &used, config); + if(res) + return res; + } + } + + retry_sleep_default = config->retry_delay? + config->retry_delay*1000:RETRY_SLEEP_DEFAULT; /* ms */ + retry_sleep = retry_sleep_default; + + if((!config->url_list || !config->url_list->url) && !config->list_engines) { + clean_getout(config); + helpf(config->errors, "no URL specified!\n"); + return CURLE_FAILED_INIT; + } + if(NULL == config->useragent) { + /* set non-zero default values: */ + snprintf(useragent, sizeof(useragent), + CURL_NAME "/" CURL_VERSION " (" OS ") " "%s", curl_version()); + config->useragent= useragent; + } + else + allocuseragent = TRUE; + + /* On WIN32 we can't set the path to curl-ca-bundle.crt + * at compile time. So we look here for the file in two ways: + * 1: look at the environment variable CURL_CA_BUNDLE for a path + * 2: if #1 isn't found, use the windows API function SearchPath() + * to find it along the app's path (includes app's dir and CWD) + * + * We support the environment variable thing for non-Windows platforms + * too. Just for the sake of it. + */ + if (!config->cacert && + !config->capath && + !config->insecure_ok) { + env = curlx_getenv("CURL_CA_BUNDLE"); + if(env) + GetStr(&config->cacert, env); + else { + env = curlx_getenv("SSL_CERT_DIR"); + if(env) + GetStr(&config->capath, env); + else { + env = curlx_getenv("SSL_CERT_FILE"); + if(env) + GetStr(&config->cacert, env); + } + } + + if(env) + curl_free(env); +#ifdef WIN32 + else + FindWin32CACert(config, "curl-ca-bundle.crt"); +#endif + } + + if (config->postfields) { + if (config->use_httpget) { + /* Use the postfields data for a http get */ + httpgetfields = strdup(config->postfields); + free(config->postfields); + config->postfields = NULL; + if(SetHTTPrequest(config, + (config->no_body?HTTPREQ_HEAD:HTTPREQ_GET), + &config->httpreq)) { + free(httpgetfields); + return PARAM_BAD_USE; + } + } + else { + if(SetHTTPrequest(config, HTTPREQ_SIMPLEPOST, &config->httpreq)) + return PARAM_BAD_USE; + } + } + + /* This is the first entry added to easycode and it initializes the slist */ + easycode = curl_slist_append(easycode, "CURL *hnd = curl_easy_init();"); + if(!easycode) { + clean_getout(config); + res = CURLE_OUT_OF_MEMORY; + goto quit_curl; + } + + if (config->list_engines) { + struct curl_slist *engines = NULL; + + curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines); + list_engines(engines); + curl_slist_free_all(engines); + res = CURLE_OK; + goto quit_curl; + } + + /* After this point, we should call curl_easy_cleanup() if we decide to bail + * out from this function! */ + + urlnode = config->url_list; + + if(config->headerfile) { + /* open file for output: */ + if(strcmp(config->headerfile,"-")) { + heads.filename = config->headerfile; + } + else + heads.stream=stdout; + heads.config = config; + } + + /* loop through the list of given URLs */ + while(urlnode) { + int up; /* upload file counter within a single upload glob */ + char *dourl; + char *url; + char *infiles; /* might be a glob pattern */ + char *outfiles=NULL; + + /* get the full URL (it might be NULL) */ + dourl=urlnode->url; + + url = dourl; + + if(NULL == url) { + /* This node had no URL, skip it and continue to the next */ + if(urlnode->outfile) + free(urlnode->outfile); + + /* move on to the next URL */ + nextnode=urlnode->next; + free(urlnode); /* free the node */ + urlnode = nextnode; + continue; /* next please */ + } + + /* default output stream is stdout */ + outs.stream = stdout; + outs.config = config; + outs.bytes = 0; /* nothing written yet */ + + /* save outfile pattern before expansion */ + if (urlnode->outfile) { + outfiles = strdup(urlnode->outfile); + if (!outfiles) { + clean_getout(config); + break; + } + } + + infiles = urlnode->infile; + + if(!config->globoff && infiles) { + /* Unless explicitly shut off */ + res = glob_url(&inglob, infiles, &infilenum, + config->showerror?config->errors:NULL); + if(res != CURLE_OK) { + clean_getout(config); + if(outfiles) + free(outfiles); + break; + } + } + + /* Here's the loop for uploading multiple files within the same + single globbed string. If no upload, we enter the loop once anyway. */ + for(up = 0; + (!up && !infiles) || + (uploadfile = inglob? + glob_next_url(inglob): + (!up?strdup(infiles):NULL)); + up++) { + int separator = 0; + long retry_numretries; + uploadfilesize=-1; + + if(!config->globoff) { + /* Unless explicitly shut off, we expand '{...}' and '[...]' + expressions and return total number of URLs in pattern set */ + res = glob_url(&urls, dourl, &urlnum, + config->showerror?config->errors:NULL); + if(res != CURLE_OK) { + break; + } + } + else + urlnum = 1; /* without globbing, this is a single URL */ + + /* if multiple files extracted to stdout, insert separators! */ + separator= ((!outfiles || curlx_strequal(outfiles, "-")) && urlnum > 1); + + /* Here's looping around each globbed URL */ + for(i = 0; + (url = urls?glob_next_url(urls):(i?NULL:strdup(url))); + i++) { + /* NOTE: In the condition expression in the for() statement above, the + 'url' variable is only ever strdup()ed if (i == 0) and thus never + when this loops later on. Further down in this function we call + free(url) and then the code loops. Static code parsers may thus get + tricked into believing that we have a potential access-after-free + here. I can however not spot any such case. */ + + int infd = STDIN_FILENO; + bool infdopen; + char *outfile; + struct timeval retrystart; + outfile = outfiles?strdup(outfiles):NULL; + + if((urlnode->flags&GETOUT_USEREMOTE) || + (outfile && !curlx_strequal("-", outfile)) ) { + + /* + * We have specified a file name to store the result in, or we have + * decided we want to use the remote file name. + */ + + if(!outfile) { + /* extract the file name from the URL */ + outfile = get_url_file_name(url); + if((!outfile || !*outfile) && !config->content_disposition) { + helpf(config->errors, "Remote file name has no length!\n"); + res = CURLE_WRITE_ERROR; + free(url); + break; + } +#if defined(MSDOS) || defined(WIN32) + /* For DOS and WIN32, we do some major replacing of + bad characters in the file name before using it */ + outfile = sanitize_dos_name(outfile); + if(!outfile) { + res = CURLE_OUT_OF_MEMORY; + break; + } +#endif /* MSDOS || WIN32 */ + } + else if(urls) { + /* fill '#1' ... '#9' terms from URL pattern */ + char *storefile = outfile; + outfile = glob_match_url(storefile, urls); + free(storefile); + if(!outfile) { + /* bad globbing */ + warnf(config, "bad output glob!\n"); + free(url); + res = CURLE_FAILED_INIT; + break; + } + } + + /* Create the directory hierarchy, if not pre-existant to a multiple + file output call */ + + if(config->create_dirs && + (-1 == create_dir_hierarchy(outfile, config->errors))) { + free(url); + res = CURLE_WRITE_ERROR; + break; + } + + if(config->resume_from_current) { + /* We're told to continue from where we are now. Get the + size of the file as it is now and open it for append instead */ + + struct_stat fileinfo; + + /* VMS -- Danger, the filesize is only valid for stream files */ + if(0 == stat(outfile, &fileinfo)) + /* set offset to current file size: */ + config->resume_from = fileinfo.st_size; + else + /* let offset be 0 */ + config->resume_from = 0; + } + + outs.filename = outfile; + + if(config->resume_from) { + outs.init = config->resume_from; + /* open file for output: */ + outs.stream=(FILE *) fopen(outfile, config->resume_from?"ab":"wb"); + if (!outs.stream) { + helpf(config->errors, "Can't open '%s'!\n", outfile); + free(url); + res = CURLE_WRITE_ERROR; + break; + } + } + else { + outs.stream = NULL; /* open when needed */ + } + } + infdopen=FALSE; + if(uploadfile && !stdin_upload(uploadfile)) { + /* + * We have specified a file to upload and it isn't "-". + */ + struct_stat fileinfo; + + url = add_file_name_to_url(curl, url, uploadfile); + if(!url) { + helpf(config->errors, "out of memory\n"); + res = CURLE_OUT_OF_MEMORY; + break; + } + /* VMS Note: + * + * Reading binary from files can be a problem... Only FIXED, VAR + * etc WITHOUT implied CC will work Others need a \n appended to a + * line + * + * - Stat gives a size but this is UNRELIABLE in VMS As a f.e. a + * fixed file with implied CC needs to have a byte added for every + * record processed, this can by derived from Filesize & recordsize + * for VARiable record files the records need to be counted! for + * every record add 1 for linefeed and subtract 2 for the record + * header for VARIABLE header files only the bare record data needs + * to be considered with one appended if implied CC + */ + + infd= open(uploadfile, O_RDONLY | O_BINARY); + if ((infd == -1) || fstat(infd, &fileinfo)) { + helpf(config->errors, "Can't open '%s'!\n", uploadfile); + if(infd != -1) + close(infd); + + /* Free the list of remaining URLs and globbed upload files + * to force curl to exit immediately + */ + if(urls) { + glob_cleanup(urls); + urls = NULL; + } + if(inglob) { + glob_cleanup(inglob); + inglob = NULL; + } + + res = CURLE_READ_ERROR; + goto quit_urls; + } + infdopen=TRUE; + uploadfilesize=fileinfo.st_size; + + } + else if(uploadfile && stdin_upload(uploadfile)) { + SET_BINMODE(stdin); + infd = STDIN_FILENO; + if (curlx_strequal(uploadfile, ".")) { + if (curlx_nonblock((curl_socket_t)infd, TRUE) < 0) + warnf(config, + "fcntl failed on fd=%d: %s\n", infd, strerror(errno)); + } + } + + if(uploadfile && config->resume_from_current) + config->resume_from = -1; /* -1 will then force get-it-yourself */ + + if(output_expected(url, uploadfile) + && outs.stream && isatty(fileno(outs.stream))) + /* we send the output to a tty, therefore we switch off the progress + meter */ + config->noprogress = config->isatty = TRUE; + + if (urlnum > 1 && !(config->mute)) { + fprintf(config->errors, "\n[%d/%d]: %s --> %s\n", + i+1, urlnum, url, outfile ? outfile : "<stdout>"); + if (separator) + printf("%s%s\n", CURLseparator, url); + } + if (httpgetfields) { + char *urlbuffer; + /* Find out whether the url contains a file name */ + const char *pc =strstr(url, "://"); + char sep='?'; + if(pc) + pc+=3; + else + pc=url; + + pc = strrchr(pc, '/'); /* check for a slash */ + + if(pc) { + /* there is a slash present in the URL */ + + if(strchr(pc, '?')) + /* Ouch, there's already a question mark in the URL string, we + then append the data with an ampersand separator instead! */ + sep='&'; + } + /* + * Then append ? followed by the get fields to the url. + */ + urlbuffer = malloc(strlen(url) + strlen(httpgetfields) + 3); + if(!urlbuffer) { + helpf(config->errors, "out of memory\n"); + + /* Free the list of remaining URLs and globbed upload files + * to force curl to exit immediately + */ + if(urls) { + glob_cleanup(urls); + urls = NULL; + } + if(inglob) { + glob_cleanup(inglob); + inglob = NULL; + } + + res = CURLE_OUT_OF_MEMORY; + goto quit_urls; + } + if (pc) + sprintf(urlbuffer, "%s%c%s", url, sep, httpgetfields); + else + /* Append / before the ? to create a well-formed url + if the url contains a hostname only + */ + sprintf(urlbuffer, "%s/?%s", url, httpgetfields); + + free(url); /* free previous URL */ + url = urlbuffer; /* use our new URL instead! */ + } + + if(!config->errors) + config->errors = stderr; + + if((!outfile || !strcmp(outfile, "-")) && !config->use_ascii) { + /* We get the output to stdout and we have not got the ASCII/text + flag, then set stdout to be binary */ + SET_BINMODE(stdout); + } + + if(1 == config->tcp_nodelay) + my_setopt(curl, CURLOPT_TCP_NODELAY, 1); + + /* where to store */ + my_setopt(curl, CURLOPT_WRITEDATA, &outs); + /* what call to write */ + my_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite); + + /* for uploads */ + input.fd = infd; + input.config = config; + my_setopt(curl, CURLOPT_READDATA, &input); + /* what call to read */ + my_setopt(curl, CURLOPT_READFUNCTION, my_fread); + + /* in 7.18.0, the CURLOPT_SEEKFUNCTION/DATA pair is taking over what + CURLOPT_IOCTLFUNCTION/DATA pair previously provided for seeking */ + my_setopt(curl, CURLOPT_SEEKDATA, &input); + my_setopt(curl, CURLOPT_SEEKFUNCTION, my_seek); + + if(config->recvpersecond) + /* tell libcurl to use a smaller sized buffer as it allows us to + make better sleeps! 7.9.9 stuff! */ + my_setopt(curl, CURLOPT_BUFFERSIZE, config->recvpersecond); + + /* size of uploaded file: */ + my_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize); + my_setopt_str(curl, CURLOPT_URL, url); /* what to fetch */ + my_setopt_str(curl, CURLOPT_PROXY, config->proxy); /* proxy to use */ + if(config->proxy) + my_setopt(curl, CURLOPT_PROXYTYPE, config->proxyver); + my_setopt(curl, CURLOPT_NOPROGRESS, config->noprogress); + if(config->no_body) { + my_setopt(curl, CURLOPT_NOBODY, 1); + my_setopt(curl, CURLOPT_HEADER, 1); + } + else + my_setopt(curl, CURLOPT_HEADER, config->include_headers); + + my_setopt(curl, CURLOPT_FAILONERROR, config->failonerror); + my_setopt(curl, CURLOPT_UPLOAD, uploadfile?TRUE:FALSE); + my_setopt(curl, CURLOPT_DIRLISTONLY, config->dirlistonly); + my_setopt(curl, CURLOPT_APPEND, config->ftp_append); + + if (config->netrc_opt) + my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL); + else if (config->netrc) + my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_REQUIRED); + else + my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_IGNORED); + + my_setopt(curl, CURLOPT_FOLLOWLOCATION, config->followlocation); + my_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, config->unrestricted_auth); + my_setopt(curl, CURLOPT_TRANSFERTEXT, config->use_ascii); + my_setopt_str(curl, CURLOPT_USERPWD, config->userpwd); + my_setopt_str(curl, CURLOPT_PROXYUSERPWD, config->proxyuserpwd); + my_setopt(curl, CURLOPT_NOPROXY, config->noproxy); + my_setopt_str(curl, CURLOPT_RANGE, config->range); + my_setopt(curl, CURLOPT_ERRORBUFFER, errorbuffer); + my_setopt(curl, CURLOPT_TIMEOUT, config->timeout); + + switch(config->httpreq) { + case HTTPREQ_SIMPLEPOST: + my_setopt_str(curl, CURLOPT_POSTFIELDS, config->postfields); + my_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, config->postfieldsize); + break; + case HTTPREQ_POST: + my_setopt(curl, CURLOPT_HTTPPOST, config->httppost); + break; + default: + break; + } + my_setopt_str(curl, CURLOPT_REFERER, config->referer); + my_setopt(curl, CURLOPT_AUTOREFERER, config->autoreferer); + my_setopt_str(curl, CURLOPT_USERAGENT, config->useragent); + my_setopt_str(curl, CURLOPT_FTPPORT, config->ftpport); + my_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, + config->low_speed_limit); + my_setopt(curl, CURLOPT_LOW_SPEED_TIME, config->low_speed_time); + my_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, + config->sendpersecond); + my_setopt(curl, CURLOPT_MAX_RECV_SPEED_LARGE, + config->recvpersecond); + my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, + config->use_resume?config->resume_from:0); + my_setopt_str(curl, CURLOPT_COOKIE, config->cookie); + my_setopt(curl, CURLOPT_HTTPHEADER, config->headers); + my_setopt(curl, CURLOPT_SSLCERT, config->cert); + my_setopt_str(curl, CURLOPT_SSLCERTTYPE, config->cert_type); + my_setopt(curl, CURLOPT_SSLKEY, config->key); + my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type); + my_setopt_str(curl, CURLOPT_KEYPASSWD, config->key_passwd); + + /* SSH private key uses the same command-line option as SSL private + key */ + my_setopt_str(curl, CURLOPT_SSH_PRIVATE_KEYFILE, config->key); + my_setopt_str(curl, CURLOPT_SSH_PUBLIC_KEYFILE, config->pubkey); + + /* SSH host key md5 checking allows us to fail if we are + * not talking to who we think we should + */ + my_setopt_str(curl, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, + config->hostpubmd5); + + /* default to strict verifyhost */ + my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2); + if(config->cacert || config->capath) { + if (config->cacert) + my_setopt_str(curl, CURLOPT_CAINFO, config->cacert); + + if (config->capath) + my_setopt_str(curl, CURLOPT_CAPATH, config->capath); + my_setopt(curl, CURLOPT_SSL_VERIFYPEER, TRUE); + } + if (config->crlfile) + my_setopt_str(curl, CURLOPT_CRLFILE, config->crlfile); + if(config->insecure_ok) { + /* new stuff needed for libcurl 7.10 */ + my_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); + my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1); + } + else { + char *home = homedir(); + char *file = aprintf("%s/%sssh/known_hosts", home, DOT_CHAR); + if(home) + free(home); + + if(file) { + my_setopt_str(curl, CURLOPT_SSH_KNOWNHOSTS, file); + curl_free(file); + } + else { + /* Free the list of remaining URLs and globbed upload files + * to force curl to exit immediately + */ + if(urls) { + glob_cleanup(urls); + urls = NULL; + } + if(inglob) { + glob_cleanup(inglob); + inglob = NULL; + } + + res = CURLE_OUT_OF_MEMORY; + goto quit_urls; + } + } + + if(config->no_body || config->remote_time) { + /* no body or use remote time */ + my_setopt(curl, CURLOPT_FILETIME, TRUE); + } + + my_setopt(curl, CURLOPT_MAXREDIRS, config->maxredirs); + my_setopt(curl, CURLOPT_CRLF, config->crlf); + my_setopt(curl, CURLOPT_QUOTE, config->quote); + my_setopt(curl, CURLOPT_POSTQUOTE, config->postquote); + my_setopt(curl, CURLOPT_PREQUOTE, config->prequote); + my_setopt(curl, CURLOPT_HEADERDATA, + config->headerfile?&heads:NULL); + my_setopt_str(curl, CURLOPT_COOKIEFILE, config->cookiefile); + /* cookie jar was added in 7.9 */ + if(config->cookiejar) + my_setopt_str(curl, CURLOPT_COOKIEJAR, config->cookiejar); + /* cookie session added in 7.9.7 */ + my_setopt(curl, CURLOPT_COOKIESESSION, config->cookiesession); + + my_setopt(curl, CURLOPT_SSLVERSION, config->ssl_version); + my_setopt(curl, CURLOPT_TIMECONDITION, config->timecond); + my_setopt(curl, CURLOPT_TIMEVALUE, config->condtime); + my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest); + my_setopt(curl, CURLOPT_STDERR, config->errors); + + /* three new ones in libcurl 7.3: */ + my_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, config->proxytunnel); + my_setopt_str(curl, CURLOPT_INTERFACE, config->iface); + my_setopt_str(curl, CURLOPT_KRBLEVEL, config->krblevel); + + progressbarinit(&progressbar, config); + if((config->progressmode == CURL_PROGRESS_BAR) && + !config->noprogress && !config->mute) { + /* we want the alternative style, then we have to implement it + ourselves! */ + my_setopt(curl, CURLOPT_PROGRESSFUNCTION, myprogress); + my_setopt(curl, CURLOPT_PROGRESSDATA, &progressbar); + } + + /* new in libcurl 7.6.2: */ + my_setopt(curl, CURLOPT_TELNETOPTIONS, config->telnet_options); + + /* new in libcurl 7.7: */ + my_setopt_str(curl, CURLOPT_RANDOM_FILE, config->random_file); + my_setopt(curl, CURLOPT_EGDSOCKET, config->egd_file); + my_setopt(curl, CURLOPT_CONNECTTIMEOUT, config->connecttimeout); + + if(config->cipher_list) + my_setopt_str(curl, CURLOPT_SSL_CIPHER_LIST, config->cipher_list); + + if(config->httpversion) + my_setopt(curl, CURLOPT_HTTP_VERSION, config->httpversion); + + /* new in libcurl 7.9.2: */ + if(config->disable_epsv) + /* disable it */ + my_setopt(curl, CURLOPT_FTP_USE_EPSV, FALSE); + + /* new in libcurl 7.10.5 */ + if(config->disable_eprt) + /* disable it */ + my_setopt(curl, CURLOPT_FTP_USE_EPRT, FALSE); + + /* new in libcurl 7.10.6 (default is Basic) */ + if(config->authtype) + my_setopt(curl, CURLOPT_HTTPAUTH, config->authtype); + + if(config->tracetype != TRACE_NONE) { + my_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace); + my_setopt(curl, CURLOPT_DEBUGDATA, config); + my_setopt(curl, CURLOPT_VERBOSE, TRUE); + } + + res = CURLE_OK; + + /* new in curl ?? */ + if (config->engine) { + res = my_setopt_str(curl, CURLOPT_SSLENGINE, config->engine); + my_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1); + } + + if (res != CURLE_OK) + goto show_error; + + /* new in curl 7.10 */ + my_setopt_str(curl, CURLOPT_ENCODING, + (config->encoding) ? "" : NULL); + + /* new in curl 7.10.7, extended in 7.19.4 but this only sets 0 or 1 */ + my_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, + config->ftp_create_dirs); + if(config->proxyanyauth) + my_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_ANY); + else if(config->proxynegotiate) + my_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_GSSNEGOTIATE); + else if(config->proxyntlm) + my_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_NTLM); + else if(config->proxydigest) + my_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_DIGEST); + else if(config->proxybasic) + my_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); + + /* new in curl 7.10.8 */ + if(config->max_filesize) + my_setopt(curl, CURLOPT_MAXFILESIZE_LARGE, + config->max_filesize); + + if(4 == config->ip_version) + my_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + else if(6 == config->ip_version) + my_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6); + else + my_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_WHATEVER); + + /* new in curl 7.15.5 */ + if(config->ftp_ssl_reqd) + my_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); + + /* new in curl 7.11.0 */ + else if(config->ftp_ssl) + my_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_TRY); + + /* new in curl 7.16.0 */ + else if(config->ftp_ssl_control) + my_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_CONTROL); + + /* new in curl 7.16.1 */ + if(config->ftp_ssl_ccc) + my_setopt(curl, CURLOPT_FTP_SSL_CCC, config->ftp_ssl_ccc_mode); + + /* new in curl 7.11.1, modified in 7.15.2 */ + if(config->socksproxy) { + my_setopt_str(curl, CURLOPT_PROXY, config->socksproxy); + my_setopt(curl, CURLOPT_PROXYTYPE, config->socksver); + } + +#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) + /* new in curl 7.19.4 */ + if(config->socks5_gssapi_service) + my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_SERVICE, + config->socks5_gssapi_service); + + /* new in curl 7.19.4 */ + if(config->socks5_gssapi_nec) + my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_NEC, + config->socks5_gssapi_nec); +#endif + /* curl 7.13.0 */ + my_setopt_str(curl, CURLOPT_FTP_ACCOUNT, config->ftp_account); + + my_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, config->ignorecl); + + /* curl 7.14.2 */ + my_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, config->ftp_skip_ip); + + /* curl 7.15.1 */ + my_setopt(curl, CURLOPT_FTP_FILEMETHOD, config->ftp_filemethod); + + /* curl 7.15.2 */ + if(config->localport) { + my_setopt(curl, CURLOPT_LOCALPORT, config->localport); + my_setopt_str(curl, CURLOPT_LOCALPORTRANGE, + config->localportrange); + } + + /* curl 7.15.5 */ + my_setopt_str(curl, CURLOPT_FTP_ALTERNATIVE_TO_USER, + config->ftp_alternative_to_user); + + /* curl 7.16.0 */ + my_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, + !config->disable_sessionid); + + /* curl 7.16.2 */ + if(config->raw) { + my_setopt(curl, CURLOPT_HTTP_CONTENT_DECODING, FALSE); + my_setopt(curl, CURLOPT_HTTP_TRANSFER_DECODING, FALSE); + } + + /* curl 7.17.1 */ + if (!config->nokeepalive) { + my_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockoptcallback); + my_setopt(curl, CURLOPT_SOCKOPTDATA, config); + } + + /* curl 7.19.1 (the 301 version existed in 7.18.2) */ + my_setopt(curl, CURLOPT_POSTREDIR, config->post301 | + (config->post302 ? CURL_REDIR_POST_302 : FALSE)); + + /* curl 7.20.0 */ + if(config->tftp_blksize) + my_setopt(curl, CURLOPT_TFTP_BLKSIZE, config->tftp_blksize); + + if(config->mail_from) + my_setopt_str(curl, CURLOPT_MAIL_FROM, config->mail_from); + + if(config->mail_rcpt) + my_setopt(curl, CURLOPT_MAIL_RCPT, config->mail_rcpt); + + /* curl 7.20.x */ + if(config->ftp_pret) + my_setopt(curl, CURLOPT_FTP_USE_PRET, TRUE); + + if ((urlnode->flags & GETOUT_USEREMOTE) + && config->content_disposition) { + my_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback); + my_setopt(curl, CURLOPT_HEADERDATA, &outs); + } + + retry_numretries = config->req_retry; + + retrystart = cutil_tvnow(); + + for(;;) { + res = curl_easy_perform(curl); + if (!curl_slist_append(easycode, "ret = curl_easy_perform(hnd);")) { + res = CURLE_OUT_OF_MEMORY; + break; + } + + if (config->content_disposition && outs.stream && !config->mute) + printf("curl: Saved to filename '%s'\n", outs.filename); + + /* if retry-max-time is non-zero, make sure we haven't exceeded the + time */ + if(retry_numretries && + (!config->retry_maxtime || + (cutil_tvdiff(cutil_tvnow(), retrystart)< + config->retry_maxtime*1000)) ) { + enum { + RETRY_NO, + RETRY_TIMEOUT, + RETRY_HTTP, + RETRY_FTP, + RETRY_LAST /* not used */ + } retry = RETRY_NO; + long response; + if(CURLE_OPERATION_TIMEDOUT == res) + /* retry timeout always */ + retry = RETRY_TIMEOUT; + else if(CURLE_OK == res) { + /* Check for HTTP transient errors */ + char *this_url=NULL; + curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &this_url); + if(this_url && + curlx_strnequal(this_url, "http", 4)) { + /* This was HTTP(S) */ + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); + + switch(response) { + case 500: /* Internal Server Error */ + case 502: /* Bad Gateway */ + case 503: /* Service Unavailable */ + case 504: /* Gateway Timeout */ + retry = RETRY_HTTP; + /* + * At this point, we have already written data to the output + * file (or terminal). If we write to a file, we must rewind + * or close/re-open the file so that the next attempt starts + * over from the beginning. + * + * TODO: similar action for the upload case. We might need + * to start over reading from a previous point if we have + * uploaded something when this was returned. + */ + break; + } + } + } /* if CURLE_OK */ + else if(res) { + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); + + if(response/100 == 4) + /* + * This is typically when the FTP server only allows a certain + * amount of users and we are not one of them. All 4xx codes + * are transient. + */ + retry = RETRY_FTP; + } + + if(retry) { + static const char * const m[]={ + NULL, "timeout", "HTTP error", "FTP error" + }; + warnf(config, "Transient problem: %s " + "Will retry in %ld seconds. " + "%ld retries left.\n", + m[retry], retry_sleep/1000, retry_numretries); + + go_sleep(retry_sleep); + retry_numretries--; + if(!config->retry_delay) { + retry_sleep *= 2; + if(retry_sleep > RETRY_SLEEP_MAX) + retry_sleep = RETRY_SLEEP_MAX; + } + if(outs.bytes && outs.filename) { + /* We have written data to a output file, we truncate file + */ + if(!config->mute) + fprintf(config->errors, "Throwing away %" + CURL_FORMAT_CURL_OFF_T " bytes\n", + outs.bytes); + fflush(outs.stream); + /* truncate file at the position where we started appending */ +#ifdef HAVE_FTRUNCATE + if(ftruncate( fileno(outs.stream), outs.init)) { + /* when truncate fails, we can't just append as then we'll + create something strange, bail out */ + if(!config->mute) + fprintf(config->errors, + "failed to truncate, exiting\n"); + break; + } + /* now seek to the end of the file, the position where we + just truncated the file in a large file-safe way */ + fseek(outs.stream, 0, SEEK_END); +#else + /* ftruncate is not available, so just reposition the file + to the location we would have truncated it. This won't + work properly with large files on 32-bit systems, but + most of those will have ftruncate. */ + fseek(outs.stream, (long)outs.init, SEEK_SET); +#endif + outs.bytes = 0; /* clear for next round */ + } + continue; + } + } /* if retry_numretries */ + + /* In all ordinary cases, just break out of loop here */ + retry_sleep = retry_sleep_default; + break; + + } + + if((config->progressmode == CURL_PROGRESS_BAR) && + progressbar.calls) + /* if the custom progress bar has been displayed, we output a + newline here */ + fputs("\n", progressbar.out); + + if(config->writeout) + ourWriteOut(curl, config->writeout); +#ifdef USE_ENVIRONMENT + if (config->writeenv) + ourWriteEnv(curl); +#endif + +show_error: + +#ifdef __VMS + if(is_vms_shell()) { + /* VMS DCL shell behavior */ + if(!config->showerror) { + vms_show = VMSSTS_HIDE; + } + } + else +#endif + { + if((res!=CURLE_OK) && config->showerror) { + fprintf(config->errors, "curl: (%d) %s\n", res, + errorbuffer[0]? errorbuffer: + curl_easy_strerror((CURLcode)res)); + if(CURLE_SSL_CACERT == res) { +#define CURL_CA_CERT_ERRORMSG1 \ +"More details here: http://curl.haxx.se/docs/sslcerts.html\n\n" \ +"curl performs SSL certificate verification by default, using a \"bundle\"\n" \ +" of Certificate Authority (CA) public keys (CA certs). If the default\n" \ +" bundle file isn't adequate, you can specify an alternate file\n" \ +" using the --cacert option.\n" + +#define CURL_CA_CERT_ERRORMSG2 \ +"If this HTTPS server uses a certificate signed by a CA represented in\n" \ +" the bundle, the certificate verification probably failed due to a\n" \ +" problem with the certificate (it might be expired, or the name might\n" \ +" not match the domain name in the URL).\n" \ +"If you'd like to turn off curl's verification of the certificate, use\n" \ +" the -k (or --insecure) option.\n" + + fprintf(config->errors, "%s%s", + CURL_CA_CERT_ERRORMSG1, + CURL_CA_CERT_ERRORMSG2 ); + } + } + } + + if (outfile && !curlx_strequal(outfile, "-") && outs.stream) { + int rc = fclose(outs.stream); + if(!res && rc) { + /* something went wrong in the writing process */ + res = CURLE_WRITE_ERROR; + fprintf(config->errors, "(%d) Failed writing body\n", res); + } + } + +#ifdef HAVE_UTIME + /* Important that we set the time _after_ the file has been + closed, as is done above here */ + if(config->remote_time && outs.filename) { + /* ask libcurl if we got a time. Pretty please */ + long filetime; + curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime); + if(filetime >= 0) { + struct utimbuf times; + times.actime = (time_t)filetime; + times.modtime = (time_t)filetime; + utime(outs.filename, ×); /* set the time we got */ + } + } +#endif +#ifdef __AMIGA__ + /* Set the url as comment for the file. (up to 80 chars are allowed) + */ + if( strlen(url) > 78 ) + url[79] = '\0'; + + SetComment( outs.filename, url); +#endif + +quit_urls: + if(url) + free(url); + + if(outfile) + free(outfile); + + if(infdopen) + close(infd); + + } /* loop to the next URL */ + + if(urls) { + /* cleanup memory used for URL globbing patterns */ + glob_cleanup(urls); + urls = NULL; + } + + if(uploadfile) + free(uploadfile); + + } /* loop to the next globbed upload file */ + + if(inglob) { + glob_cleanup(inglob); + inglob = NULL; + } + + if(outfiles) + free(outfiles); + + /* empty this urlnode struct */ + if(urlnode->url) + free(urlnode->url); + if(urlnode->outfile) + free(urlnode->outfile); + if(urlnode->infile) + free(urlnode->infile); + + /* move on to the next URL */ + nextnode=urlnode->next; + free(urlnode); /* free the node */ + urlnode = nextnode; + + } /* while-loop through all URLs */ + +quit_curl: + if (httpgetfields) + free(httpgetfields); + + if (config->engine) + free(config->engine); + + /* cleanup the curl handle! */ + curl_easy_cleanup(curl); + config->easy = NULL; /* cleanup now */ + if (easycode) + curl_slist_append(easycode, "curl_easy_cleanup(hnd);"); + + if(heads.stream && (heads.stream != stdout)) + fclose(heads.stream); + + if(allocuseragent) + free(config->useragent); + + if(config->trace_fopened && config->trace_stream) + fclose(config->trace_stream); + + /* Dump the libcurl code if previously enabled. + NOTE: that this function relies on config->errors amongst other things + so not everything can be closed and cleaned before this is called */ + dumpeasycode(config); + + if(config->errors_fopened) + fclose(config->errors); + + main_free(); /* cleanup */ + + return res; +} + +/* Ensure that file descriptors 0, 1 and 2 (stdin, stdout, stderr) are + open before starting to run. Otherwise, the first three network + sockets opened by curl could be used for input sources, downloaded data + or error logs as they will effectively be stdin, stdout and/or stderr. +*/ +static void checkfds(void) +{ +#ifdef HAVE_PIPE + int fd[2] = { STDIN_FILENO, STDIN_FILENO }; + while( fd[0] == STDIN_FILENO || + fd[0] == STDOUT_FILENO || + fd[0] == STDERR_FILENO || + fd[1] == STDIN_FILENO || + fd[1] == STDOUT_FILENO || + fd[1] == STDERR_FILENO ) + if (pipe(fd) < 0) + return; /* Out of handles. This isn't really a big problem now, but + will be when we try to create a socket later. */ + close(fd[0]); + close(fd[1]); +#endif +} + + + +int main(int argc, char *argv[]) +{ + int res; + struct Configurable config; + + memset(&config, 0, sizeof(struct Configurable)); + + config.errors = stderr; /* default errors to stderr */ + + checkfds(); + + res = operate(&config, argc, argv); +#ifdef __SYMBIAN32__ + if (config.showerror) + pressanykey(); +#endif + free_config_fields(&config); + +#ifdef __NOVELL_LIBC__ + if (getenv("_IN_NETWARE_BASH_") == NULL) + pressanykey(); +#endif +#ifdef __VMS + vms_special_exit(res, vms_show); +#else + return res; +#endif +} + +/* + * Reads a line from the given file, ensuring is NUL terminated. + * The pointer must be freed by the caller. + * NULL is returned on an out of memory condition. + */ +static char *my_get_line(FILE *fp) +{ + char buf[4096]; + char *nl = NULL; + char *retval = NULL; + + do { + if (NULL == fgets(buf, sizeof(buf), fp)) + break; + if (NULL == retval) { + retval = strdup(buf); + if(!retval) + return NULL; + } + else { + char *ptr; + ptr = realloc(retval, strlen(retval) + strlen(buf) + 1); + if (NULL == ptr) { + free(retval); + return NULL; + } + retval = ptr; + strcat(retval, buf); + } + } + while (NULL == (nl = strchr(retval, '\n'))); + + if (NULL != nl) + *nl = '\0'; + + return retval; +} + +static void show_dir_errno(FILE *errors, const char *name) +{ + switch (ERRNO) { +#ifdef EACCES + case EACCES: + fprintf(errors,"You don't have permission to create %s.\n", name); + break; +#endif +#ifdef ENAMETOOLONG + case ENAMETOOLONG: + fprintf(errors,"The directory name %s is too long.\n", name); + break; +#endif +#ifdef EROFS + case EROFS: + fprintf(errors,"%s resides on a read-only file system.\n", name); + break; +#endif +#ifdef ENOSPC + case ENOSPC: + fprintf(errors,"No space left on the file system that will " + "contain the directory %s.\n", name); + break; +#endif +#ifdef EDQUOT + case EDQUOT: + fprintf(errors,"Cannot create directory %s because you " + "exceeded your quota.\n", name); + break; +#endif + default : + fprintf(errors,"Error creating directory %s.\n", name); + break; + } +} + +/* Create the needed directory hierarchy recursively in order to save + multi-GETs in file output, ie: + curl "http://my.site/dir[1-5]/file[1-5].txt" -o "dir#1/file#2.txt" + should create all the dir* automagically +*/ +static int create_dir_hierarchy(const char *outfile, FILE *errors) +{ + char *tempdir; + char *tempdir2; + char *outdup; + char *dirbuildup; + int result=0; + + outdup = strdup(outfile); + if(!outdup) + return -1; + + dirbuildup = malloc(sizeof(char) * strlen(outfile)); + if(!dirbuildup) { + free(outdup); + return -1; + } + dirbuildup[0] = '\0'; + + tempdir = strtok(outdup, DIR_CHAR); + + while (tempdir != NULL) { + tempdir2 = strtok(NULL, DIR_CHAR); + /* since strtok returns a token for the last word even + if not ending with DIR_CHAR, we need to prune it */ + if (tempdir2 != NULL) { + size_t dlen = strlen(dirbuildup); + if (dlen) + sprintf(&dirbuildup[dlen], "%s%s", DIR_CHAR, tempdir); + else { + if (0 != strncmp(outdup, DIR_CHAR, 1)) + strcpy(dirbuildup, tempdir); + else + sprintf(dirbuildup, "%s%s", DIR_CHAR, tempdir); + } + if (access(dirbuildup, F_OK) == -1) { + result = mkdir(dirbuildup,(mode_t)0000750); + if (-1 == result) { + show_dir_errno(errors, dirbuildup); + break; /* get out of loop */ + } + } + } + tempdir = tempdir2; + } + free(dirbuildup); + free(outdup); + + return result; /* 0 is fine, -1 is badness */ +} + +#if defined(MSDOS) || defined(WIN32) + +#ifndef HAVE_BASENAME +/* basename() returns a pointer to the last component of a pathname. + * Ripped from lib/formdata.c. + */ +static char *Curl_basename(char *path) +{ + /* Ignore all the details above for now and make a quick and simple + implementaion here */ + char *s1; + char *s2; + + s1=strrchr(path, '/'); + s2=strrchr(path, '\\'); + + if(s1 && s2) { + path = (s1 > s2? s1 : s2)+1; + } + else if(s1) + path = s1 + 1; + else if(s2) + path = s2 + 1; + + return path; +} +#define basename(x) Curl_basename((x)) +#endif /* HAVE_BASENAME */ + +/* The following functions are taken with modification from the DJGPP + * port of tar 1.12. They use algorithms originally from DJTAR. */ + +static const char * +msdosify (const char *file_name) +{ + static char dos_name[PATH_MAX]; + static const char illegal_chars_dos[] = ".+, ;=[]" /* illegal in DOS */ + "|<>\\\":?*"; /* illegal in DOS & W95 */ + static const char *illegal_chars_w95 = &illegal_chars_dos[8]; + int idx, dot_idx; + const char *s = file_name; + char *d = dos_name; + const char * const dlimit = dos_name + sizeof(dos_name) - 1; + const char *illegal_aliens = illegal_chars_dos; + size_t len = sizeof (illegal_chars_dos) - 1; + + /* Support for Windows 9X VFAT systems, when available. */ + if (_use_lfn (file_name)) { + illegal_aliens = illegal_chars_w95; + len -= (illegal_chars_w95 - illegal_chars_dos); + } + + /* Get past the drive letter, if any. */ + if (s[0] >= 'A' && s[0] <= 'z' && s[1] == ':') { + *d++ = *s++; + *d++ = *s++; + } + + for (idx = 0, dot_idx = -1; *s && d < dlimit; s++, d++) { + if (memchr (illegal_aliens, *s, len)) { + /* Dots are special: DOS doesn't allow them as the leading character, + and a file name cannot have more than a single dot. We leave the + first non-leading dot alone, unless it comes too close to the + beginning of the name: we want sh.lex.c to become sh_lex.c, not + sh.lex-c. */ + if (*s == '.') { + if (idx == 0 && (s[1] == '/' || (s[1] == '.' && s[2] == '/'))) { + /* Copy "./" and "../" verbatim. */ + *d++ = *s++; + if (*s == '.') + *d++ = *s++; + *d = *s; + } + else if (idx == 0) + *d = '_'; + else if (dot_idx >= 0) { + if (dot_idx < 5) { /* 5 is a heuristic ad-hoc'ery */ + d[dot_idx - idx] = '_'; /* replace previous dot */ + *d = '.'; + } + else + *d = '-'; + } + else + *d = '.'; + + if (*s == '.') + dot_idx = idx; + } + else if (*s == '+' && s[1] == '+') { + if (idx - 2 == dot_idx) { /* .c++, .h++ etc. */ + *d++ = 'x'; + *d = 'x'; + } + else { + /* libg++ etc. */ + memcpy (d, "plus", 4); + d += 3; + } + s++; + idx++; + } + else + *d = '_'; + } + else + *d = *s; + if (*s == '/') { + idx = 0; + dot_idx = -1; + } + else + idx++; + } + + *d = '\0'; + return dos_name; +} + +static char * +rename_if_dos_device_name (char *file_name) +{ + /* We could have a file whose name is a device on MS-DOS. Trying to + * retrieve such a file would fail at best and wedge us at worst. We need + * to rename such files. */ + char *base; + struct_stat st_buf; + char fname[PATH_MAX]; + + strncpy(fname, file_name, PATH_MAX-1); + fname[PATH_MAX-1] = 0; + base = basename(fname); + if (((stat(base, &st_buf)) == 0) && (S_ISCHR(st_buf.st_mode))) { + size_t blen = strlen (base); + + if (strlen(fname) >= PATH_MAX-1) { + /* Make room for the '_' */ + blen--; + base[blen] = 0; + } + /* Prepend a '_'. */ + memmove (base + 1, base, blen + 1); + base[0] = '_'; + strcpy (file_name, fname); + } + return file_name; +} + +/* Replace bad characters in the file name before using it. + * fn will always be freed before return + * The returned pointer must be freed by the caller if not NULL + */ +static char *sanitize_dos_name(char *fn) +{ + char tmpfn[PATH_MAX]; + fn[PATH_MAX-1]=0; /* ensure fn is not too long by possibly truncating it */ + strcpy(tmpfn, msdosify(fn)); + free(fn); + return strdup(rename_if_dos_device_name(tmpfn)); +} +#endif /* MSDOS || WIN32 */ diff --git a/src/os-specific.c b/src/os-specific.c new file mode 100644 index 0000000..ac07c4c --- /dev/null +++ b/src/os-specific.c @@ -0,0 +1,221 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +#include "setup.h" + +#include <curl/curl.h> + +#define ENABLE_CURLX_PRINTF +#include "curlx.h" + +#include "os-specific.h" + +#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG) +# include "memdebug.h" +#endif + +#ifdef __VMS + +#include "curlmsg_vms.h" + +void decc$__posix_exit(int __status); +void decc$exit(int __status); + +static int vms_shell = -1; + +/* VMS has a DCL shell and and also has Unix shells ported to it. + * When curl is running under a Unix shell, we want it to be as much + * like Unix as possible. + */ +int is_vms_shell(void) +{ + char *shell; + + /* Have we checked the shell yet? */ + if(vms_shell >= 0) + return vms_shell; + + shell = getenv("SHELL"); + + /* No shell, means DCL */ + if(shell == NULL) { + vms_shell = 1; + return 1; + } + + /* Have to make sure some one did not set shell to DCL */ + if(strcmp(shell, "DCL") == 0) { + vms_shell = 1; + return 1; + } + + vms_shell = 0; + return 0; +} + +/* + * VMS has two exit() routines. When running under a Unix style shell, then + * Unix style and the __posix_exit() routine is used. + * + * When running under the DCL shell, then the VMS encoded codes and decc$exit() + * is used. + * + * We can not use exit() or return a code from main() because the actual + * routine called depends on both the compiler version, compile options, and + * feature macro settings, and one of the exit routines is hidden at compile + * time. + * + * Since we want Curl to work properly under the VMS DCL shell and Unix + * shells under VMS, this routine should compile correctly regardless of + * the settings. + */ + +void vms_special_exit(int code, int vms_show) +{ + int vms_code; + + /* The Posix exit mode is only available after VMS 7.0 */ +#if __CRTL_VER >= 70000000 + if(is_vms_shell() == 0) { + decc$__posix_exit(code); + } +#endif + + if(code > CURL_LAST) { /* If CURL_LAST exceeded then */ + vms_code = CURL_LAST; /* curlmsg.h is out of sync. */ + } + else { + vms_code = vms_cond[code] | vms_show; + } + decc$exit(vms_code); +} + +#if defined(__DECC) && !defined(__VAX) && \ + defined(__CRTL_VER) && (__CRTL_VER >= 70301000) + +/* + * 2004-09-19 SMS. + * + * decc_init() + * + * On non-VAX systems, use LIB$INITIALIZE to set a collection of C + * RTL features without using the DECC$* logical name method, nor + * requiring the user to define the corresponding logical names. + */ + +#include <unixlib.h> + +/* Structure to hold a DECC$* feature name and its desired value. */ +typedef struct { + char *name; + int value; +} decc_feat_t; + +/* Array of DECC$* feature names and their desired values. */ +static decc_feat_t decc_feat_array[] = { + /* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */ + { "DECC$ARGV_PARSE_STYLE", 1 }, + /* Preserve case for file names on ODS5 disks. */ + { "DECC$EFS_CASE_PRESERVE", 1 }, + /* Enable multiple dots (and most characters) in ODS5 file names, + while preserving VMS-ness of ";version". */ + { "DECC$EFS_CHARSET", 1 }, + /* List terminator. */ + { (char *)NULL, 0 } +}; + +/* Flag to sense if decc_init() was called. */ +static int decc_init_done = -1; + +/* LIB$INITIALIZE initialization function. */ +static void decc_init(void) +{ + int feat_index; + int feat_value; + int feat_value_max; + int feat_value_min; + int i; + int sts; + + /* Set the global flag to indicate that LIB$INITIALIZE worked. */ + decc_init_done = 1; + + /* Loop through all items in the decc_feat_array[]. */ + for(i = 0; decc_feat_array[i].name != NULL; i++) { + + /* Get the feature index. */ + feat_index = decc$feature_get_index( decc_feat_array[i].name); + + if(feat_index >= 0) { + /* Valid item. Collect its properties. */ + feat_value = decc$feature_get_value( feat_index, 1); + feat_value_min = decc$feature_get_value( feat_index, 2); + feat_value_max = decc$feature_get_value( feat_index, 3); + + if((decc_feat_array[i].value >= feat_value_min) && + (decc_feat_array[i].value <= feat_value_max)) { + /* Valid value. Set it if necessary. */ + if(feat_value != decc_feat_array[i].value) { + sts = decc$feature_set_value( feat_index, 1, + decc_feat_array[i].value); + } + } + else { + /* Invalid DECC feature value. */ + printf(" INVALID DECC FEATURE VALUE, %d: %d <= %s <= %d.\n", + feat_value, + feat_value_min, decc_feat_array[i].name, feat_value_max); + } + } + else { + /* Invalid DECC feature name. */ + printf(" UNKNOWN DECC FEATURE: %s.\n", decc_feat_array[i].name); + } + + } +} + +/* Get "decc_init()" into a valid, loaded LIB$INITIALIZE PSECT. */ + +#pragma nostandard + +/* Establish the LIB$INITIALIZE PSECTs, with proper alignment and + other attributes. Note that "nopic" is significant only on VAX. */ +#pragma extern_model save +#pragma extern_model strict_refdef "LIB$INITIALIZ" 2, nopic, nowrt +const int spare[8] = {0}; +#pragma extern_model strict_refdef "LIB$INITIALIZE" 2, nopic, nowrt +void (*const x_decc_init)() = decc_init; +#pragma extern_model restore + +/* Fake reference to ensure loading the LIB$INITIALIZE PSECT. */ +#pragma extern_model save +int LIB$INITIALIZE(void); +#pragma extern_model strict_refdef +int dmy_lib$initialize = (int) LIB$INITIALIZE; +#pragma extern_model restore + +#pragma standard + +#endif /* __DECC && !__VAX && __CRTL_VER && __CRTL_VER >= 70301000 */ + +#endif /* __VMS */ + diff --git a/src/os-specific.h b/src/os-specific.h new file mode 100644 index 0000000..93cac74 --- /dev/null +++ b/src/os-specific.h @@ -0,0 +1,38 @@ +#ifndef HEADER_CURL_OS_SPECIFIC_H +#define HEADER_CURL_OS_SPECIFIC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#ifdef __VMS + +int is_vms_shell(void); +void vms_special_exit(int code, int vms_show); + +#undef exit +#define exit(__code) vms_special_exit((__code), (0)) + +#define VMS_STS(c,f,e,s) (((c&0xF)<<28)|((f&0xFFF)<<16)|((e&0x1FFF)<3)|(s&7)) +#define VMSSTS_HIDE VMS_STS(1,0,0,0) + +#endif /* __VMS */ + +#endif /* HEADER_CURL_OS_SPECIFIC_H */ diff --git a/src/setup.h b/src/setup.h new file mode 100644 index 0000000..69da710 --- /dev/null +++ b/src/setup.h @@ -0,0 +1,218 @@ +#ifndef HEADER_CURL_SRC_SETUP_H +#define HEADER_CURL_SRC_SETUP_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#define CURL_NO_OLDIES + +/* + * Define WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) && !defined(__SYMBIAN32__) +#define WIN32 +#endif + +/* + * Include configuration script results or hand-crafted + * configuration file for platforms which lack config tool. + */ + +#ifdef HAVE_CONFIG_H +#include "curl_config.h" +#else + +#ifdef WIN32 +#include "config-win32.h" +#endif + +#if defined(macintosh) && defined(__MRC__) +# include "config-mac.h" +#endif + +#ifdef __riscos__ +#include "config-riscos.h" +#endif + +#ifdef __AMIGA__ +#include "config-amigaos.h" +#endif + +#ifdef __SYMBIAN32__ +#include "config-symbian.h" +#endif + +#ifdef TPF +#include "config-tpf.h" +#endif + +#endif /* HAVE_CONFIG_H */ + +/* + * AIX 4.3 and newer needs _THREAD_SAFE defined to build + * proper reentrant code. Others may also need it. + */ + +#ifdef NEED_THREAD_SAFE +# ifndef _THREAD_SAFE +# define _THREAD_SAFE +# endif +#endif + +/* + * Tru64 needs _REENTRANT set for a few function prototypes and + * things to appear in the system header files. Unixware needs it + * to build proper reentrant code. Others may also need it. + */ + +#ifdef NEED_REENTRANT +# ifndef _REENTRANT +# define _REENTRANT +# endif +#endif + +/* + * Include header files for windows builds before redefining anything. + * Use this preproessor block only to include or exclude windows.h, + * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs + * to any other further and independent block. Under Cygwin things work + * just as under linux (e.g. <sys/socket.h>) and the winsock headers should + * never be included when __CYGWIN__ is defined. configure script takes + * care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H, + * neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined. + */ + +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include <windows.h> +# ifdef HAVE_WINSOCK2_H +# include <winsock2.h> +# ifdef HAVE_WS2TCPIP_H +# include <ws2tcpip.h> +# endif +# else +# ifdef HAVE_WINSOCK_H +# include <winsock.h> +# endif +# endif +#endif + +/* + * Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else + * define USE_WINSOCK to 1 if we have and use WINSOCK API, else + * undefine USE_WINSOCK. + */ + +#undef USE_WINSOCK + +#ifdef HAVE_WINSOCK2_H +# define USE_WINSOCK 2 +#else +# ifdef HAVE_WINSOCK_H +# define USE_WINSOCK 1 +# endif +#endif + +#ifdef TPF +# include <sys/socket.h> + /* change which select is used for the curl command line tool */ +# define select(a,b,c,d,e) tpf_select_bsd(a,b,c,d,e) + /* and turn off the progress meter */ +# define CONF_DEFAULT (0|CONF_NOPROGRESS) +#endif + +#include <stdio.h> + +#ifdef __TANDEM +#include <floss.h> +#endif + + +#ifndef OS +#define OS "unknown" +#endif + +#if !defined(fileno) && !defined(WIN32) /* sunos 4 have this as a macro! */ +int fileno( FILE *stream); +#endif + +#ifdef WIN32 +#define DIR_CHAR "\\" +#define DOT_CHAR "_" +#else +#ifdef __EMX__ +/* 20000318 mgs + * OS/2 supports leading dots in filenames if the volume is formatted + * with JFS or HPFS. */ +#define DIR_CHAR "\\" +#define DOT_CHAR "." +#else + +#ifdef DJGPP +#include <tcp.h> +#ifdef word +#undef word +#endif +#define DIR_CHAR "/" +#define DOT_CHAR "_" +#else + +#define DIR_CHAR "/" +#define DOT_CHAR "." + +#endif /* !DJGPP */ +#endif /* !__EMX__ */ +#endif /* !WIN32 */ + +#ifdef __riscos__ +#define USE_ENVIRONMENT +#endif + +#ifdef __BEOS__ +#define typedef_bool +#endif + +#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) +#include <sys/timeval.h> +#endif + +#ifndef UNPRINTABLE_CHAR +/* define what to use for unprintable characters */ +#define UNPRINTABLE_CHAR '.' +#endif + +#ifndef HAVE_STRDUP +#include "strdup.h" +#define strdup(ptr) curlx_strdup(ptr) +#endif + +/* + * Include macros and defines that should only be processed once. + */ + +#ifndef __SETUP_ONCE_H +#include "setup_once.h" +#endif + +#endif /* HEADER_CURL_SRC_SETUP_H */ diff --git a/src/urlglob.c b/src/urlglob.c new file mode 100644 index 0000000..5f8fb28 --- /dev/null +++ b/src/urlglob.c @@ -0,0 +1,567 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +/* client-local setup.h */ +#include "setup.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <curl/curl.h> + +#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */ +#include <curl/mprintf.h> + +#include "urlglob.h" +#include "os-specific.h" + +#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG) +#include "memdebug.h" +#endif + +typedef enum { + GLOB_OK, + GLOB_ERROR +} GlobCode; + +/* + * glob_word() + * + * Input a full globbed string, set the forth argument to the amount of + * strings we get out of this. Return GlobCode. + */ +static GlobCode glob_word(URLGlob *, /* object anchor */ + char *, /* globbed string */ + size_t, /* position */ + int *); /* returned number of strings */ + +static GlobCode glob_set(URLGlob *glob, char *pattern, + size_t pos, int *amount) +{ + /* processes a set expression with the point behind the opening '{' + ','-separated elements are collected until the next closing '}' + */ + bool done = FALSE; + char* buf = glob->glob_buffer; + URLPattern *pat; + + pat = (URLPattern*)&glob->pattern[glob->size / 2]; + /* patterns 0,1,2,... correspond to size=1,3,5,... */ + pat->type = UPTSet; + pat->content.Set.size = 0; + pat->content.Set.ptr_s = 0; + /* FIXME: Here's a nasty zero size malloc */ + pat->content.Set.elements = (char**)malloc(0); + ++glob->size; + + while (!done) { + bool skip; + + switch (*pattern) { + case '\0': /* URL ended while set was still open */ + snprintf(glob->errormsg, sizeof(glob->errormsg), + "unmatched brace at pos %zu\n", pos); + return GLOB_ERROR; + + case '{': + case '[': /* no nested expressions at this time */ + snprintf(glob->errormsg, sizeof(glob->errormsg), + "nested braces not supported at pos %zu\n", pos); + return GLOB_ERROR; + + case ',': + case '}': /* set element completed */ + *buf = '\0'; + pat->content.Set.elements = + realloc(pat->content.Set.elements, + (pat->content.Set.size + 1) * sizeof(char*)); + if (!pat->content.Set.elements) { + snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); + return GLOB_ERROR; + } + pat->content.Set.elements[pat->content.Set.size] = + strdup(glob->glob_buffer); + ++pat->content.Set.size; + + if (*pattern == '}') { + /* entire set pattern completed */ + int wordamount; + + /* always check for a literal (may be "") between patterns */ + if(GLOB_ERROR == glob_word(glob, ++pattern, ++pos, &wordamount)) + wordamount=1; + *amount = pat->content.Set.size * wordamount; + + done = TRUE; + continue; + } + + buf = glob->glob_buffer; + ++pattern; + ++pos; + break; + + case ']': /* illegal closing bracket */ + snprintf(glob->errormsg, sizeof(glob->errormsg), + "illegal pattern at pos %zu\n", pos); + return GLOB_ERROR; + + case '\\': /* escaped character, skip '\' */ + switch(pattern[1]) { + case '[': + case ']': + case '{': + case '}': + case ',': + skip = TRUE; + break; + default: + skip = FALSE; + break; + } + if(skip) { + if (*(buf+1) == '\0') { /* but no escaping of '\0'! */ + snprintf(glob->errormsg, sizeof(glob->errormsg), + "illegal pattern at pos %zu\n", pos); + return GLOB_ERROR; + } + ++pattern; + ++pos; + } + /* intentional fallthrough */ + default: + *buf++ = *pattern++; /* copy character to set element */ + ++pos; + } + } + return GLOB_OK; +} + +static GlobCode glob_range(URLGlob *glob, char *pattern, + size_t pos, int *amount) +{ + /* processes a range expression with the point behind the opening '[' + - char range: e.g. "a-z]", "B-Q]" + - num range: e.g. "0-9]", "17-2000]" + - num range with leading zeros: e.g. "001-999]" + expression is checked for well-formedness and collected until the next ']' + */ + URLPattern *pat; + char *c; + int wordamount=1; + char sep; + char sep2; + int step; + int rc; + + pat = (URLPattern*)&glob->pattern[glob->size / 2]; + /* patterns 0,1,2,... correspond to size=1,3,5,... */ + ++glob->size; + + if (ISALPHA(*pattern)) { /* character range detected */ + char min_c; + char max_c; + + pat->type = UPTCharRange; + rc = sscanf(pattern, "%c-%c%c%d%c", &min_c, &max_c, &sep, &step, &sep2); + if ((rc < 3) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a'))) { + /* the pattern is not well-formed */ + snprintf(glob->errormsg, sizeof(glob->errormsg), + "error: bad range specification after pos %zu\n", pos); + return GLOB_ERROR; + } + + /* check the (first) separating character */ + if((sep != ']') && (sep != ':')) { + snprintf(glob->errormsg, sizeof(glob->errormsg), + "error: unsupported character (%c) after range at pos %zu\n", + sep, pos); + return GLOB_ERROR; + } + + /* if there was a ":[num]" thing, use that as step or else use 1 */ + pat->content.CharRange.step = + ((sep == ':') && (rc == 5) && (sep2 == ']'))?step:1; + + pat->content.CharRange.ptr_c = pat->content.CharRange.min_c = min_c; + pat->content.CharRange.max_c = max_c; + } + else if (ISDIGIT(*pattern)) { /* numeric range detected */ + int min_n; + int max_n; + + pat->type = UPTNumRange; + pat->content.NumRange.padlength = 0; + + rc = sscanf(pattern, "%d-%d%c%d%c", &min_n, &max_n, &sep, &step, &sep2); + + if ((rc < 2) || (min_n > max_n)) { + /* the pattern is not well-formed */ + snprintf(glob->errormsg, sizeof(glob->errormsg), + "error: bad range specification after pos %zu\n", pos); + return GLOB_ERROR; + } + pat->content.NumRange.ptr_n = pat->content.NumRange.min_n = min_n; + pat->content.NumRange.max_n = max_n; + + /* if there was a ":[num]" thing, use that as step or else use 1 */ + pat->content.NumRange.step = + ((sep == ':') && (rc == 5) && (sep2 == ']'))?step:1; + + if (*pattern == '0') { /* leading zero specified */ + c = pattern; + while (ISDIGIT(*c)) { + c++; + ++pat->content.NumRange.padlength; /* padding length is set for all + instances of this pattern */ + } + } + + } + else { + snprintf(glob->errormsg, sizeof(glob->errormsg), + "illegal character in range specification at pos %zu\n", pos); + return GLOB_ERROR; + } + + c = (char*)strchr(pattern, ']'); /* continue after next ']' */ + if(c) + c++; + else { + snprintf(glob->errormsg, sizeof(glob->errormsg), "missing ']'"); + return GLOB_ERROR; /* missing ']' */ + } + + /* always check for a literal (may be "") between patterns */ + + if(GLOB_ERROR == glob_word(glob, c, pos + (c - pattern), &wordamount)) + wordamount = 1; + + if(pat->type == UPTCharRange) + *amount = (pat->content.CharRange.max_c - + pat->content.CharRange.min_c + 1) * + wordamount; + else + *amount = (pat->content.NumRange.max_n - + pat->content.NumRange.min_n + 1) * wordamount; + + return GLOB_OK; +} + +static GlobCode glob_word(URLGlob *glob, char *pattern, + size_t pos, int *amount) +{ + /* processes a literal string component of a URL + special characters '{' and '[' branch to set/range processing functions + */ + char* buf = glob->glob_buffer; + size_t litindex; + GlobCode res = GLOB_OK; + + *amount = 1; /* default is one single string */ + + while (*pattern != '\0' && *pattern != '{' && *pattern != '[') { + if (*pattern == '}' || *pattern == ']') + return GLOB_ERROR; + + /* only allow \ to escape known "special letters" */ + if (*pattern == '\\' && + (*(pattern+1) == '{' || *(pattern+1) == '[' || + *(pattern+1) == '}' || *(pattern+1) == ']') ) { + + /* escape character, skip '\' */ + ++pattern; + ++pos; + if (*pattern == '\0') /* but no escaping of '\0'! */ + return GLOB_ERROR; + } + *buf++ = *pattern++; /* copy character to literal */ + ++pos; + } + *buf = '\0'; + litindex = glob->size / 2; + /* literals 0,1,2,... correspond to size=0,2,4,... */ + glob->literal[litindex] = strdup(glob->glob_buffer); + if(!glob->literal[litindex]) + return GLOB_ERROR; + ++glob->size; + + switch (*pattern) { + case '\0': + break; /* singular URL processed */ + + case '{': + /* process set pattern */ + res = glob_set(glob, ++pattern, ++pos, amount); + break; + + case '[': + /* process range pattern */ + res= glob_range(glob, ++pattern, ++pos, amount); + break; + } + + if(GLOB_OK != res) + /* free that strdup'ed string again */ + free(glob->literal[litindex]); + + return res; /* something got wrong */ +} + +int glob_url(URLGlob** glob, char* url, int *urlnum, FILE *error) +{ + /* + * We can deal with any-size, just make a buffer with the same length + * as the specified URL! + */ + URLGlob *glob_expand; + int amount; + char *glob_buffer = malloc(strlen(url)+1); + + *glob = NULL; + if(NULL == glob_buffer) + return CURLE_OUT_OF_MEMORY; + + glob_expand = calloc(1, sizeof(URLGlob)); + if(NULL == glob_expand) { + free(glob_buffer); + return CURLE_OUT_OF_MEMORY; + } + glob_expand->size = 0; + glob_expand->urllen = strlen(url); + glob_expand->glob_buffer = glob_buffer; + glob_expand->beenhere=0; + if(GLOB_OK == glob_word(glob_expand, url, 1, &amount)) + *urlnum = amount; + else { + if(error && glob_expand->errormsg[0]) { + /* send error description to the error-stream */ + fprintf(error, "curl: (%d) [globbing] %s\n", + CURLE_URL_MALFORMAT, glob_expand->errormsg); + } + /* it failed, we cleanup */ + free(glob_buffer); + free(glob_expand); + glob_expand = NULL; + *urlnum = 1; + return CURLE_URL_MALFORMAT; + } + + *glob = glob_expand; + return CURLE_OK; +} + +void glob_cleanup(URLGlob* glob) +{ + size_t i; + int elem; + + for (i = glob->size - 1; i < glob->size; --i) { + if (!(i & 1)) { /* even indexes contain literals */ + free(glob->literal[i/2]); + } + else { /* odd indexes contain sets or ranges */ + if (glob->pattern[i/2].type == UPTSet) { + for (elem = glob->pattern[i/2].content.Set.size - 1; + elem >= 0; + --elem) { + free(glob->pattern[i/2].content.Set.elements[elem]); + } + free(glob->pattern[i/2].content.Set.elements); + } + } + } + free(glob->glob_buffer); + free(glob); +} + +char *glob_next_url(URLGlob *glob) +{ + char *buf = glob->glob_buffer; + URLPattern *pat; + char *lit; + size_t i; + size_t j; + size_t buflen = glob->urllen+1; + size_t len; + + if (!glob->beenhere) + glob->beenhere = 1; + else { + bool carry = TRUE; + + /* implement a counter over the index ranges of all patterns, + starting with the rightmost pattern */ + for (i = glob->size / 2 - 1; carry && i < glob->size; --i) { + carry = FALSE; + pat = &glob->pattern[i]; + switch (pat->type) { + case UPTSet: + if (++pat->content.Set.ptr_s == pat->content.Set.size) { + pat->content.Set.ptr_s = 0; + carry = TRUE; + } + break; + case UPTCharRange: + pat->content.CharRange.ptr_c = (char)(pat->content.CharRange.step + + (int)((unsigned char)pat->content.CharRange.ptr_c)); + if (pat->content.CharRange.ptr_c > pat->content.CharRange.max_c) { + pat->content.CharRange.ptr_c = pat->content.CharRange.min_c; + carry = TRUE; + } + break; + case UPTNumRange: + pat->content.NumRange.ptr_n += pat->content.NumRange.step; + if (pat->content.NumRange.ptr_n > pat->content.NumRange.max_n) { + pat->content.NumRange.ptr_n = pat->content.NumRange.min_n; + carry = TRUE; + } + break; + default: + printf("internal error: invalid pattern type (%d)\n", (int)pat->type); + exit (CURLE_FAILED_INIT); + } + } + if (carry) /* first pattern ptr has run into overflow, done! */ + return NULL; + } + + for (j = 0; j < glob->size; ++j) { + if (!(j&1)) { /* every other term (j even) is a literal */ + lit = glob->literal[j/2]; + len = snprintf(buf, buflen, "%s", lit); + buf += len; + buflen -= len; + } + else { /* the rest (i odd) are patterns */ + pat = &glob->pattern[j/2]; + switch(pat->type) { + case UPTSet: + len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]); + snprintf(buf, buflen, "%s", + pat->content.Set.elements[pat->content.Set.ptr_s]); + buf += len; + buflen -= len; + break; + case UPTCharRange: + *buf++ = pat->content.CharRange.ptr_c; + break; + case UPTNumRange: + len = snprintf(buf, buflen, "%0*d", + pat->content.NumRange.padlength, + pat->content.NumRange.ptr_n); + buf += len; + buflen -= len; + break; + default: + printf("internal error: invalid pattern type (%d)\n", (int)pat->type); + exit (CURLE_FAILED_INIT); + } + } + } + *buf = '\0'; + return strdup(glob->glob_buffer); +} + +char *glob_match_url(char *filename, URLGlob *glob) +{ + char *target; + size_t allocsize; + size_t stringlen=0; + char numbuf[18]; + char *appendthis = NULL; + size_t appendlen = 0; + + /* We cannot use the glob_buffer for storage here since the filename may + * be longer than the URL we use. We allocate a good start size, then + * we need to realloc in case of need. + */ + allocsize=strlen(filename)+1; /* make it at least one byte to store the + trailing zero */ + target = malloc(allocsize); + if(NULL == target) + return NULL; /* major failure */ + + while (*filename) { + if (*filename == '#' && ISDIGIT(filename[1])) { + unsigned long i; + char *ptr = filename; + unsigned long num = strtoul(&filename[1], &filename, 10); + i = num-1; + + if (num && (i <= glob->size / 2)) { + URLPattern pat = glob->pattern[i]; + switch (pat.type) { + case UPTSet: + appendthis = pat.content.Set.elements[pat.content.Set.ptr_s]; + appendlen = strlen(pat.content.Set.elements[pat.content.Set.ptr_s]); + break; + case UPTCharRange: + numbuf[0]=pat.content.CharRange.ptr_c; + numbuf[1]=0; + appendthis=numbuf; + appendlen=1; + break; + case UPTNumRange: + snprintf(numbuf, sizeof(numbuf), "%0*d", + pat.content.NumRange.padlength, + pat.content.NumRange.ptr_n); + appendthis = numbuf; + appendlen = strlen(numbuf); + break; + default: + printf("internal error: invalid pattern type (%d)\n", + (int)pat.type); + free(target); + return NULL; + } + } + else { + /* #[num] out of range, use the #[num] in the output */ + filename = ptr; + appendthis=filename++; + appendlen=1; + } + } + else { + appendthis=filename++; + appendlen=1; + } + if(appendlen + stringlen >= allocsize) { + char *newstr; + /* we append a single byte to allow for the trailing byte to be appended + at the end of this function outside the while() loop */ + allocsize = (appendlen + stringlen)*2; + newstr=realloc(target, allocsize + 1); + if(NULL ==newstr) { + free(target); + return NULL; + } + target=newstr; + } + memcpy(&target[stringlen], appendthis, appendlen); + stringlen += appendlen; + } + target[stringlen]= '\0'; + return target; +} diff --git a/src/urlglob.h b/src/urlglob.h new file mode 100644 index 0000000..a5b789e --- /dev/null +++ b/src/urlglob.h @@ -0,0 +1,67 @@ +#ifndef __URLGLOB_H +#define __URLGLOB_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +typedef enum { + UPTSet=1, + UPTCharRange, + UPTNumRange +} URLPatternType; + +typedef struct { + URLPatternType type; + union { + struct { + char **elements; + short size; + short ptr_s; + } Set; + struct { + char min_c, max_c; + char ptr_c; + int step; + } CharRange; + struct { + int min_n, max_n; + short padlength; + int ptr_n; + int step; + } NumRange ; + } content; +} URLPattern; + +typedef struct { + char* literal[10]; + URLPattern pattern[9]; + size_t size; + size_t urllen; + char *glob_buffer; + char beenhere; + char errormsg[80]; /* error message buffer */ +} URLGlob; + +int glob_url(URLGlob**, char*, int *, FILE *); +char* glob_next_url(URLGlob*); +char* glob_match_url(char*, URLGlob *); +void glob_cleanup(URLGlob* glob); + +#endif diff --git a/src/version.h b/src/version.h new file mode 100644 index 0000000..8c091b2 --- /dev/null +++ b/src/version.h @@ -0,0 +1,35 @@ +#ifndef HEADER_CURL_VERSION_H +#define HEADER_CURL_VERSION_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include <curl/curlver.h> + +#define CURL_NAME "curl" +#define CURL_COPYRIGHT LIBCURL_COPYRIGHT +#define CURL_VERSION "7.20.1" +#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR +#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR +#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH +#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") " + +#endif /* HEADER_CURL_VERSION_H */ diff --git a/src/writeenv.c b/src/writeenv.c new file mode 100644 index 0000000..18e1a06 --- /dev/null +++ b/src/writeenv.c @@ -0,0 +1,120 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include "setup.h" + +#ifdef USE_ENVIRONMENT + +#include <curl/curl.h> +#include "writeenv.h" + +#ifdef __riscos__ +#include <kernel.h> +#endif + +#define _MPRINTF_REPLACE /* use our functions only */ +#include <curl/mprintf.h> + +#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG) +#include "memdebug.h" +#endif + +static const struct +{ + const char * name; + CURLINFO id; + enum { + writeenv_NONE, + writeenv_DOUBLE, + writeenv_LONG, + writeenv_STRING + } type; +} variables[14] = +{ + {"curl_url_effective", CURLINFO_EFFECTIVE_URL, writeenv_STRING}, + {"curl_http_code", CURLINFO_RESPONSE_CODE, writeenv_LONG}, + {"curl_time_total", CURLINFO_TOTAL_TIME, writeenv_DOUBLE}, + {"curl_time_namelookup", CURLINFO_NAMELOOKUP_TIME, writeenv_DOUBLE}, + {"curl_time_connect", CURLINFO_CONNECT_TIME, writeenv_DOUBLE}, + {"curl_time_pretransfer", CURLINFO_PRETRANSFER_TIME, writeenv_DOUBLE}, + {"curl_time_starttransfer", CURLINFO_STARTTRANSFER_TIME, writeenv_DOUBLE}, + {"curl_size_header", CURLINFO_HEADER_SIZE, writeenv_LONG}, + {"curl_size_request", CURLINFO_REQUEST_SIZE, writeenv_LONG}, + {"curl_size_download", CURLINFO_SIZE_DOWNLOAD, writeenv_DOUBLE}, + {"curl_size_upload", CURLINFO_SIZE_UPLOAD, writeenv_DOUBLE}, + {"curl_speed_download", CURLINFO_SPEED_DOWNLOAD, writeenv_DOUBLE}, + {"curl_speed_upload", CURLINFO_SPEED_UPLOAD, writeenv_DOUBLE}, + {NULL, 0, writeenv_NONE} + }; + +static void internalSetEnv(const char * name, char * value) +{ + /* Add your OS-specific code here. */ +#ifdef __riscos__ + _kernel_setenv(name, value); +#elif defined (CURLDEBUG) + curl_memlog("ENV %s = %s\n", name, value); +#endif + return; +} + +void ourWriteEnv(CURL *curl) +{ + unsigned int i; + char *string, numtext[10]; + long longinfo; + double doubleinfo; + + for (i=0; variables[i].name; i++) { + switch (variables[i].type) { + case writeenv_STRING: + if (curl_easy_getinfo(curl, variables[i].id, &string) == CURLE_OK) + internalSetEnv(variables[i].name, string); + else + internalSetEnv(variables[i].name, NULL); + break; + + case writeenv_LONG: + if (curl_easy_getinfo(curl, variables[i].id, &longinfo) == CURLE_OK) { + curl_msprintf(numtext, "%5ld", longinfo); + internalSetEnv(variables[i].name, numtext); + } + else + internalSetEnv(variables[i].name, NULL); + break; + case writeenv_DOUBLE: + if (curl_easy_getinfo(curl, variables[i].id, &doubleinfo) == CURLE_OK) { + curl_msprintf(numtext, "%6.2f", doubleinfo); + internalSetEnv(variables[i].name, numtext); + } + else + internalSetEnv(variables[i].name, NULL); + break; + default: + break; + } + } + + return; +} + +#endif diff --git a/src/writeenv.h b/src/writeenv.h new file mode 100644 index 0000000..8d92f6c --- /dev/null +++ b/src/writeenv.h @@ -0,0 +1,27 @@ +#ifndef HEADER_CURL_WRITEENV_H +#define HEADER_CURL_WRITEENV_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +void ourWriteEnv(CURL *curl); + +#endif /* HEADER_CURL_WRITEENV_H */ diff --git a/src/writeout.c b/src/writeout.c new file mode 100644 index 0000000..b8801a4 --- /dev/null +++ b/src/writeout.c @@ -0,0 +1,295 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include "setup.h" + +#include <stdio.h> +#include <string.h> + +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_SELECT_H +#include <sys/select.h> +#endif + +#include <curl/curl.h> + +#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */ +#include <curl/mprintf.h> + +#include "writeout.h" + +typedef enum { + VAR_NONE, /* must be the first */ + VAR_TOTAL_TIME, + VAR_NAMELOOKUP_TIME, + VAR_CONNECT_TIME, + VAR_APPCONNECT_TIME, + VAR_PRETRANSFER_TIME, + VAR_STARTTRANSFER_TIME, + VAR_SIZE_DOWNLOAD, + VAR_SIZE_UPLOAD, + VAR_SPEED_DOWNLOAD, + VAR_SPEED_UPLOAD, + VAR_HTTP_CODE, + VAR_HTTP_CODE_PROXY, + VAR_HEADER_SIZE, + VAR_REQUEST_SIZE, + VAR_EFFECTIVE_URL, + VAR_CONTENT_TYPE, + VAR_NUM_CONNECTS, + VAR_REDIRECT_TIME, + VAR_REDIRECT_COUNT, + VAR_FTP_ENTRY_PATH, + VAR_REDIRECT_URL, + VAR_SSL_VERIFY_RESULT, + VAR_NUM_OF_VARS /* must be the last */ +} replaceid; + +struct variable { + const char *name; + replaceid id; +}; + + +static const struct variable replacements[]={ + {"url_effective", VAR_EFFECTIVE_URL}, + {"http_code", VAR_HTTP_CODE}, + {"response_code", VAR_HTTP_CODE}, + {"http_connect", VAR_HTTP_CODE_PROXY}, + {"time_total", VAR_TOTAL_TIME}, + {"time_namelookup", VAR_NAMELOOKUP_TIME}, + {"time_connect", VAR_CONNECT_TIME}, + {"time_appconnect", VAR_APPCONNECT_TIME}, + {"time_pretransfer", VAR_PRETRANSFER_TIME}, + {"time_starttransfer", VAR_STARTTRANSFER_TIME}, + {"size_header", VAR_HEADER_SIZE}, + {"size_request", VAR_REQUEST_SIZE}, + {"size_download", VAR_SIZE_DOWNLOAD}, + {"size_upload", VAR_SIZE_UPLOAD}, + {"speed_download", VAR_SPEED_DOWNLOAD}, + {"speed_upload", VAR_SPEED_UPLOAD}, + {"content_type", VAR_CONTENT_TYPE}, + {"num_connects", VAR_NUM_CONNECTS}, + {"time_redirect", VAR_REDIRECT_TIME}, + {"num_redirects", VAR_REDIRECT_COUNT}, + {"ftp_entry_path", VAR_FTP_ENTRY_PATH}, + {"redirect_url", VAR_REDIRECT_URL}, + {"ssl_verify_result", VAR_SSL_VERIFY_RESULT}, + {NULL, VAR_NONE} +}; + +void ourWriteOut(CURL *curl, const char *writeinfo) +{ + FILE *stream = stdout; + const char *ptr=writeinfo; + char *stringp; + long longinfo; + double doubleinfo; + + while(ptr && *ptr) { + if('%' == *ptr) { + if('%' == ptr[1]) { + /* an escaped %-letter */ + fputc('%', stream); + ptr+=2; + } + else { + /* this is meant as a variable to output */ + char *end; + char keepit; + int i; + if(('{' == ptr[1]) && ((end = strchr(ptr, '}')) != NULL)) { + bool match = FALSE; + ptr+=2; /* pass the % and the { */ + keepit=*end; + *end=0; /* zero terminate */ + for(i=0; replacements[i].name; i++) { + if(curl_strequal(ptr, replacements[i].name)) { + match = TRUE; + switch(replacements[i].id) { + case VAR_EFFECTIVE_URL: + if((CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &stringp)) + && stringp) + fputs(stringp, stream); + break; + case VAR_HTTP_CODE: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &longinfo)) + fprintf(stream, "%03ld", longinfo); + break; + case VAR_HTTP_CODE_PROXY: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, + &longinfo)) + fprintf(stream, "%03ld", longinfo); + break; + case VAR_HEADER_SIZE: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &longinfo)) + fprintf(stream, "%ld", longinfo); + break; + case VAR_REQUEST_SIZE: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &longinfo)) + fprintf(stream, "%ld", longinfo); + break; + case VAR_NUM_CONNECTS: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &longinfo)) + fprintf(stream, "%ld", longinfo); + break; + case VAR_REDIRECT_COUNT: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &longinfo)) + fprintf(stream, "%ld", longinfo); + break; + case VAR_REDIRECT_TIME: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME, &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_TOTAL_TIME: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_NAMELOOKUP_TIME: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, + &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_CONNECT_TIME: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_APPCONNECT_TIME: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, + &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_PRETRANSFER_TIME: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, + &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_STARTTRANSFER_TIME: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, + &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_SIZE_UPLOAD: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &doubleinfo)) + fprintf(stream, "%.0f", doubleinfo); + break; + case VAR_SIZE_DOWNLOAD: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &doubleinfo)) + fprintf(stream, "%.0f", doubleinfo); + break; + case VAR_SPEED_DOWNLOAD: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_SPEED_UPLOAD: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &doubleinfo)) + fprintf(stream, "%.3f", doubleinfo); + break; + case VAR_CONTENT_TYPE: + if((CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &stringp)) + && stringp) + fputs(stringp, stream); + break; + case VAR_FTP_ENTRY_PATH: + if((CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &stringp)) + && stringp) + fputs(stringp, stream); + break; + case VAR_REDIRECT_URL: + if((CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &stringp)) + && stringp) + fputs(stringp, stream); + break; + case VAR_SSL_VERIFY_RESULT: + if(CURLE_OK == + curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT, &longinfo)) + fprintf(stream, "%ld", longinfo); + break; + default: + break; + } + break; + } + } + if(FALSE == match) { + fprintf(stderr, "curl: unknown --write-out variable: '%s'\n", ptr); + } + ptr=end+1; /* pass the end */ + *end = keepit; + } + else { + /* illegal syntax, then just output the characters that are used */ + fputc('%', stream); + fputc(ptr[1], stream); + ptr+=2; + } + } + } + else if('\\' == *ptr) { + switch(ptr[1]) { + case 'r': + fputc('\r', stream); + break; + case 'n': + fputc('\n', stream); + break; + case 't': + fputc('\t', stream); + break; + default: + /* unknown, just output this */ + fputc(*ptr, stream); + fputc(ptr[1], stream); + break; + } + ptr+=2; + } + else { + fputc(*ptr, stream); + ptr++; + } + } + +} diff --git a/src/writeout.h b/src/writeout.h new file mode 100644 index 0000000..1b22102 --- /dev/null +++ b/src/writeout.h @@ -0,0 +1,27 @@ +#ifndef HEADER_CURL_WRITEOUT_H +#define HEADER_CURL_WRITEOUT_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at http://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +void ourWriteOut(CURL *curl, const char *out); + +#endif /* HEADER_CURL_WRITEOUT_H */ |