diff --git a/Makefile.inc1 b/Makefile.inc1 index 398f7188705e..22084c70bd31 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -1499,11 +1499,11 @@ sign-packages: _pkgbootstrap .PHONY # Run test suite on installed world. # checkworld: .PHONY - @if [ ! -x ${LOCALBASE}/bin/kyua ]; then \ + @if [ ! -x "${LOCALBASE}/bin/kyua" ]; then \ echo "You need kyua (devel/kyua) to run the test suite." | /usr/bin/fmt; \ exit 1; \ fi - ${_+_}${LOCALBASE}/bin/kyua test -k ${TESTSBASE}/Kyuafile + ${_+_}PATH="$$PATH:${LOCALBASE}/bin" kyua test -k ${TESTSBASE}/Kyuafile # # @@ -1512,7 +1512,7 @@ checkworld: .PHONY # Build the API documentation with doxygen # doxygen: .PHONY - @if [ ! -x ${LOCALBASE}/bin/doxygen ]; then \ + @if [ ! -x "${LOCALBASE}/bin/doxygen" ]; then \ echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \ exit 1; \ fi @@ -1625,6 +1625,7 @@ _nmtree= lib/libnetbsd \ ${_bt}-usr.sbin/nmtree: ${_bt}-lib/libnetbsd .endif +# r246097: log addition login.conf.db, passwd, pwd.db, and spwd.db with cat -l .if ${BOOTSTRAPPING} < 1000027 _cat= bin/cat .endif @@ -2518,16 +2519,35 @@ CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} \ INSTALL="sh ${.CURDIR}/tools/install.sh" CDENV= ${CDBENV} \ TOOLS_PREFIX=${XDTP} -CD2CFLAGS=-isystem ${XDDESTDIR}/usr/include -L${XDDESTDIR}/usr/lib \ - --sysroot=${XDDESTDIR}/ -B${XDDESTDIR}/usr/libexec \ - -B${XDDESTDIR}/usr/bin -B${XDDESTDIR}/usr/lib -CD2ENV=${CDENV} CC="${CC} ${CD2CFLAGS}" CXX="${CXX} ${CD2CFLAGS}" \ + +.if ${WANT_COMPILER_TYPE} == gcc || \ + (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) +# GCC requires -isystem and -L when using a cross-compiler. --sysroot +# won't set header path and -L is used to ensure the base library path +# is added before the port PREFIX library path. +CD2CFLAGS+= -isystem ${XDDESTDIR}/usr/include -L${XDDESTDIR}/usr/lib +# GCC requires -B to find /usr/lib/crti.o when using a cross-compiler +# combined with --sysroot. +CD2CFLAGS+= -B${XDDESTDIR}/usr/lib +# Force using libc++ for external GCC. +# XXX: This should be checking MK_GNUCXX == no +.if ${X_COMPILER_VERSION} >= 40800 +CD2CXXFLAGS+= -isystem ${XDDESTDIR}/usr/include/c++/v1 -std=c++11 \ + -nostdinc++ +.endif +.endif +CD2CFLAGS+= --sysroot=${XDDESTDIR}/ +CD2ENV=${CDENV} CC="${CC} ${CD2CFLAGS}" CXX="${CXX} ${CD2CXXFLAGS} ${CD2CFLAGS}" \ CPP="${CPP} ${CD2CFLAGS}" \ MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} CDTMP= ${MAKEOBJDIRPREFIX}/${XDDIR}/${.CURDIR}/tmp CDMAKE=${CDENV} PATH=${CDTMP}/usr/bin:${PATH} ${MAKE} ${NOFUN} CD2MAKE=${CD2ENV} PATH=${CDTMP}/usr/bin:${XDDESTDIR}/usr/bin:${PATH} ${MAKE} ${NOFUN} +.if ${MK_META_MODE} != "no" +# Don't rebuild build-tools targets during normal build. +CD2MAKE+= BUILD_TOOLS_META=.NOMETA_CMP +.endif XDDESTDIR=${DESTDIR}/${XDTP} .if !defined(OSREL) OSREL!= uname -r | sed -e 's/[-(].*//' @@ -2547,7 +2567,8 @@ _xb-worldtmp: .PHONY _xb-bootstrap-tools: .PHONY .for _tool in \ ${_clang_tblgen} \ - ${_gperf} + ${_gperf} \ + ${_yacc} ${_+_}@${ECHODIR} "===> ${_tool} (obj,all,install)"; \ cd ${.CURDIR}/${_tool}; \ ${CDMAKE} DIRPRFX=${_tool}/ obj; \ diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index 8b02da9a87e5..569aec6514cd 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -151,6 +151,12 @@ OLD_FILES+=usr/lib/clang/3.9.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_ OLD_DIRS+=usr/lib/clang/3.9.1/lib/freebsd OLD_DIRS+=usr/lib/clang/3.9.1/lib OLD_DIRS+=usr/lib/clang/3.9.1 +# 20170219: OpenPAM RADULA upgrade removed the libpam tests +OLD_FILES+=usr/tests/lib/libpam/Kyuafile +OLD_FILES+=usr/tests/lib/libpam/t_openpam_ctype +OLD_FILES+=usr/tests/lib/libpam/t_openpam_readlinev +OLD_FILES+=usr/tests/lib/libpam/t_openpam_readword +OLD_DIRS+=usr/test/lib/libpam # 20170206: remove bdes(1) OLD_FILES+=usr/bin/bdes OLD_FILES+=usr/lib/debug/usr/bin/bdes.debug diff --git a/UPDATING b/UPDATING index 825f17398cfa..76befc2844f7 100644 --- a/UPDATING +++ b/UPDATING @@ -56,6 +56,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW: Please see the 20141231 entry below for information about prerequisites and upgrading, if you are not already using clang 3.5.0 or higher. +20170221: + The code that provides support for ZFS .zfs/ directory functionality + has been reimplemented. It's not possible now to create a snapshot + by mkdir under .zfs/snapshot/. That should be the only user visible + change. + 20170216: EISA bus support has been removed. The WITH_EISA option is no longer valid. diff --git a/contrib/blacklist/bin/blacklistd.c b/contrib/blacklist/bin/blacklistd.c index a497f9d74543..256ae68b61b0 100644 --- a/contrib/blacklist/bin/blacklistd.c +++ b/contrib/blacklist/bin/blacklistd.c @@ -207,7 +207,7 @@ process(bl_t bl) if (debug) { char b1[128], b2[128]; - (*lfun)(LOG_DEBUG, "%s: db state info for %s: count=%d/%d " + (*lfun)(LOG_DEBUG, "%s: initial db state for %s: count=%d/%d " "last=%s now=%s", __func__, rbuf, dbi.count, c.c_nfail, fmttime(b1, sizeof(b1), dbi.last), fmttime(b2, sizeof(b2), ts.tv_sec)); @@ -246,15 +246,24 @@ process(bl_t bl) case BL_DELETE: if (dbi.last == 0) goto out; + dbi.count = 0; dbi.last = 0; break; default: (*lfun)(LOG_ERR, "unknown message %d", bi->bi_type); } - if (state_put(state, &c, &dbi) == -1) - goto out; + state_put(state, &c, &dbi); + out: close(bi->bi_fd); + + if (debug) { + char b1[128], b2[128]; + (*lfun)(LOG_DEBUG, "%s: final db state for %s: count=%d/%d " + "last=%s now=%s", __func__, rbuf, dbi.count, c.c_nfail, + fmttime(b1, sizeof(b1), dbi.last), + fmttime(b2, sizeof(b2), ts.tv_sec)); + } } static void @@ -393,7 +402,7 @@ rules_restore(void) int main(int argc, char *argv[]) { - int c, tout, flags, flush, restore; + int c, tout, flags, flush, restore, ret; const char *spath, *blsock; setprogname(argv[0]); @@ -512,7 +521,10 @@ main(int argc, char *argv[]) readconf = 0; conf_parse(configfile); } - switch (poll(pfd, (nfds_t)nfd, tout)) { + ret = poll(pfd, (nfds_t)nfd, tout); + if (debug) + (*lfun)(LOG_DEBUG, "received %d from poll()", ret); + switch (ret) { case -1: if (errno == EINTR) continue; diff --git a/contrib/blacklist/libexec/blacklistd-helper b/contrib/blacklist/libexec/blacklistd-helper index b5932f68f881..37f94a65b816 100644 --- a/contrib/blacklist/libexec/blacklistd-helper +++ b/contrib/blacklist/libexec/blacklistd-helper @@ -63,8 +63,11 @@ add) tname="port$6" /sbin/ipfw table $tname create type addr 2>/dev/null /sbin/ipfw -q table $tname add "$addr/$mask" - /sbin/ipfw -q add $rule drop $3 from "table("$tname")" to \ - any dst-port $6 && echo OK + # if rule number $rule does not already exist, create it + /sbin/ipfw show $rule >/dev/null 2>&1 || \ + /sbin/ipfw add $rule drop $3 from \ + table"("$tname")" to any dst-port $6 >/dev/null && \ + echo OK ;; npf) /sbin/npfctl rule "$2" add block in final $proto from \ diff --git a/contrib/libucl/ChangeLog.md b/contrib/libucl/ChangeLog.md index e432f84e91d4..e4c1263bccb7 100644 --- a/contrib/libucl/ChangeLog.md +++ b/contrib/libucl/ChangeLog.md @@ -35,7 +35,7 @@ ### Libucl 0.7.3 -- Fixed a bug with macroes that come after an empty object +- Fixed a bug with macros that come after an empty object - Fixed a bug in include processing when an incorrect variable has been destroyed (use-after-free) ### Libucl 0.8.0 diff --git a/contrib/libucl/README.md b/contrib/libucl/README.md index 453a7ad66cd7..44983c57d643 100644 --- a/contrib/libucl/README.md +++ b/contrib/libucl/README.md @@ -1,6 +1,8 @@ # LIBUCL -[![Build Status](https://travis-ci.org/vstakhov/libucl.svg?branch=master)](https://travis-ci.org/vstakhov/libucl)[![Coverity](https://scan.coverity.com/projects/4138/badge.svg)](https://scan.coverity.com/projects/4138)[![Coverage Status](https://coveralls.io/repos/github/vstakhov/libucl/badge.svg?branch=master)](https://coveralls.io/github/vstakhov/libucl?branch=master) +[![Build Status](https://travis-ci.org/vstakhov/libucl.svg?branch=master)](https://travis-ci.org/vstakhov/libucl) +[![Coverity](https://scan.coverity.com/projects/4138/badge.svg)](https://scan.coverity.com/projects/4138) +[![Coverage Status](https://coveralls.io/repos/github/vstakhov/libucl/badge.svg?branch=master)](https://coveralls.io/github/vstakhov/libucl?branch=master) **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* @@ -217,8 +219,8 @@ Multiline comments may be nested: UCL supports external macros both multiline and single line ones: ```nginx -.macro "sometext"; -.macro { +.macro_name "sometext"; +.macro_name { Some long text .... }; @@ -229,12 +231,12 @@ arguments themselves are the UCL object that is parsed and passed to a macro as options: ```nginx -.macro(param=value) "something"; -.macro(param={key=value}) "something"; -.macro(.include "params.conf") "something"; -.macro(#this is multiline macro +.macro_name(param=value) "something"; +.macro_name(param={key=value}) "something"; +.macro_name(.include "params.conf") "something"; +.macro_name(#this is multiline macro param = [value1, value2]) "something"; -.macro(key="()") "something"; +.macro_name(key="()") "something"; ``` UCL also provide a convenient `include` macro to load content from another files diff --git a/contrib/libucl/configure.ac b/contrib/libucl/configure.ac index 722def8c85b4..6457268854ac 100644 --- a/contrib/libucl/configure.ac +++ b/contrib/libucl/configure.ac @@ -39,6 +39,7 @@ AC_CHECK_HEADERS_ONCE([stdarg.h]) AC_CHECK_HEADERS_ONCE([stdbool.h]) AC_CHECK_HEADERS_ONCE([stdint.h]) AC_CHECK_HEADERS_ONCE([string.h]) +AC_CHECK_HEADERS_ONCE([strings.h]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_HEADERS_ONCE([ctype.h]) AC_CHECK_HEADERS_ONCE([errno.h]) diff --git a/contrib/libucl/include/ucl.h b/contrib/libucl/include/ucl.h index 304d3291c2e1..fccf6fcb2237 100644 --- a/contrib/libucl/include/ucl.h +++ b/contrib/libucl/include/ucl.h @@ -154,7 +154,8 @@ typedef enum ucl_parser_flags { UCL_PARSER_NO_TIME = (1 << 2), /**< Do not parse time and treat time values as strings */ UCL_PARSER_NO_IMPLICIT_ARRAYS = (1 << 3), /** Create explicit arrays instead of implicit ones */ UCL_PARSER_SAVE_COMMENTS = (1 << 4), /** Save comments in the parser context */ - UCL_PARSER_DISABLE_MACRO = (1 << 5) /** Treat macros as comments */ + UCL_PARSER_DISABLE_MACRO = (1 << 5), /** Treat macros as comments */ + UCL_PARSER_NO_FILEVARS = (1 << 6) /** Do not set file vars */ } ucl_parser_flags_t; /** @@ -205,7 +206,8 @@ enum ucl_duplicate_strategy { enum ucl_parse_type { UCL_PARSE_UCL = 0, /**< Default ucl format */ UCL_PARSE_MSGPACK, /**< Message pack input format */ - UCL_PARSE_CSEXP /**< Canonical S-expressions */ + UCL_PARSE_CSEXP, /**< Canonical S-expressions */ + UCL_PARSE_AUTO /**< Try to detect parse type */ }; /** @@ -227,7 +229,7 @@ typedef struct ucl_object_s { const char *key; /**< Key of an object */ struct ucl_object_s *next; /**< Array handle */ struct ucl_object_s *prev; /**< Array handle */ - uint32_t keylen; /**< Lenght of a key */ + uint32_t keylen; /**< Length of a key */ uint32_t len; /**< Size of an object */ uint32_t ref; /**< Reference count */ uint16_t flags; /**< Object flags */ @@ -831,10 +833,29 @@ UCL_EXTERN ucl_object_iter_t ucl_object_iterate_reset (ucl_object_iter_t it, * Get the next object from the `obj`. This fucntion iterates over arrays, objects * and implicit arrays * @param iter safe iterator + * @param expand_values expand explicit arrays and objects * @return the next object in sequence */ UCL_EXTERN const ucl_object_t* ucl_object_iterate_safe (ucl_object_iter_t iter, bool expand_values); +/** + * Iteration type enumerator + */ +enum ucl_iterate_type { + UCL_ITERATE_EXPLICIT = 1 << 0, /**< Iterate just explicit arrays and objects */ + UCL_ITERATE_IMPLICIT = 1 << 1, /**< Iterate just implicit arrays */ + UCL_ITERATE_BOTH = (1 << 0) | (1 << 1), /**< Iterate both explicit and implicit arrays*/ +}; + +/** + * Get the next object from the `obj`. This fucntion iterates over arrays, objects + * and implicit arrays if needed + * @param iter safe iterator + * @param + * @return the next object in sequence + */ +UCL_EXTERN const ucl_object_t* ucl_object_iterate_full (ucl_object_iter_t iter, + enum ucl_iterate_type type); /** * Free memory associated with the safe iterator @@ -1016,6 +1037,7 @@ UCL_EXTERN bool ucl_parser_add_string_priority (struct ucl_parser *parser, * Load and add data from a file * @param parser parser structure * @param filename the name of file + * @param err if *err is NULL it is set to parser error * @return true if chunk has been added and false in case of error */ UCL_EXTERN bool ucl_parser_add_file (struct ucl_parser *parser, @@ -1025,6 +1047,7 @@ UCL_EXTERN bool ucl_parser_add_file (struct ucl_parser *parser, * Load and add data from a file * @param parser parser structure * @param filename the name of file + * @param err if *err is NULL it is set to parser error * @param priority the desired priority of a chunk (only 4 least significant bits * are considered for this parameter) * @return true if chunk has been added and false in case of error @@ -1068,6 +1091,21 @@ UCL_EXTERN bool ucl_parser_add_fd (struct ucl_parser *parser, UCL_EXTERN bool ucl_parser_add_fd_priority (struct ucl_parser *parser, int fd, unsigned priority); +/** + * Load and add data from a file descriptor + * @param parser parser structure + * @param filename the name of file + * @param err if *err is NULL it is set to parser error + * @param priority the desired priority of a chunk (only 4 least significant bits + * are considered for this parameter) + * @param strat Merge strategy to use while parsing this file + * @param parse_type Parser type to use while parsing this file + * @return true if chunk has been added and false in case of error + */ +UCL_EXTERN bool ucl_parser_add_fd_full (struct ucl_parser *parser, int fd, + unsigned priority, enum ucl_duplicate_strategy strat, + enum ucl_parse_type parse_type); + /** * Provide a UCL_ARRAY of paths to search for include files. The object is * copied so caller must unref the object. diff --git a/contrib/libucl/lua/lua_ucl.c b/contrib/libucl/lua/lua_ucl.c index bf80810d3e07..62b0652f564a 100644 --- a/contrib/libucl/lua/lua_ucl.c +++ b/contrib/libucl/lua/lua_ucl.c @@ -29,7 +29,6 @@ #include "ucl_internal.h" #include "lua_ucl.h" #include -#include /*** * @module ucl @@ -187,6 +186,8 @@ ucl_object_lua_push_array (lua_State *L, const ucl_object_t *obj) lua_rawseti (L, -2, i); i ++; } + + ucl_object_iterate_free (it); } else { /* Optimize allocation by preallocation of table */ @@ -482,7 +483,7 @@ static int lua_ucl_parser_init (lua_State *L) { struct ucl_parser *parser, **pparser; - int flags = 0; + int flags = UCL_PARSER_NO_FILEVARS; if (lua_gettop (L) >= 1) { flags = lua_tonumber (L, 1); @@ -524,6 +525,27 @@ lua_ucl_push_opaque (lua_State *L, ucl_object_t *obj) lua_setmetatable (L, -2); } +static inline enum ucl_parse_type +lua_ucl_str_to_parse_type (const char *str) +{ + enum ucl_parse_type type = UCL_PARSE_UCL; + + if (str != NULL) { + if (strcasecmp (str, "msgpack") == 0) { + type = UCL_PARSE_MSGPACK; + } + else if (strcasecmp (str, "sexp") == 0 || + strcasecmp (str, "csexp") == 0) { + type = UCL_PARSE_CSEXP; + } + else if (strcasecmp (str, "auto") == 0) { + type = UCL_PARSE_AUTO; + } + } + + return type; +} + /*** * @method parser:parse_file(name) * Parse UCL object from file. @@ -579,13 +601,19 @@ lua_ucl_parser_parse_string (lua_State *L) struct ucl_parser *parser; const char *string; size_t llen; + enum ucl_parse_type type = UCL_PARSE_UCL; int ret = 2; parser = lua_ucl_parser_get (L, 1); string = luaL_checklstring (L, 2, &llen); + if (lua_type (L, 3) == LUA_TSTRING) { + type = lua_ucl_str_to_parse_type (lua_tostring (L, 3)); + } + if (parser != NULL && string != NULL) { - if (ucl_parser_add_chunk (parser, (const unsigned char *)string, llen)) { + if (ucl_parser_add_chunk_full (parser, (const unsigned char *)string, + llen, 0, UCL_DUPLICATE_APPEND, type)) { lua_pushboolean (L, true); ret = 1; } @@ -761,6 +789,28 @@ lua_ucl_object_unwrap (lua_State *L) return 1; } +static inline enum ucl_emitter +lua_ucl_str_to_emit_type (const char *strtype) +{ + enum ucl_emitter format = UCL_EMIT_JSON_COMPACT; + + if (strcasecmp (strtype, "json") == 0) { + format = UCL_EMIT_JSON; + } + else if (strcasecmp (strtype, "json-compact") == 0) { + format = UCL_EMIT_JSON_COMPACT; + } + else if (strcasecmp (strtype, "yaml") == 0) { + format = UCL_EMIT_YAML; + } + else if (strcasecmp (strtype, "config") == 0 || + strcasecmp (strtype, "ucl") == 0) { + format = UCL_EMIT_CONFIG; + } + + return format; +} + /*** * @method object:tostring(type) * Unwraps opaque ucl object to string (json by default). Optionally you can @@ -787,19 +837,7 @@ lua_ucl_object_tostring (lua_State *L) if (lua_type (L, 2) == LUA_TSTRING) { const char *strtype = lua_tostring (L, 2); - if (strcasecmp (strtype, "json") == 0) { - format = UCL_EMIT_JSON; - } - else if (strcasecmp (strtype, "json-compact") == 0) { - format = UCL_EMIT_JSON_COMPACT; - } - else if (strcasecmp (strtype, "yaml") == 0) { - format = UCL_EMIT_YAML; - } - else if (strcasecmp (strtype, "config") == 0 || - strcasecmp (strtype, "ucl") == 0) { - format = UCL_EMIT_CONFIG; - } + format = lua_ucl_str_to_emit_type (strtype); } } @@ -1088,6 +1126,9 @@ lua_ucl_to_format (lua_State *L) strcasecmp (strtype, "ucl") == 0) { format = UCL_EMIT_CONFIG; } + else if (strcasecmp (strtype, "msgpack") == 0) { + format = UCL_EMIT_MSGPACK; + } } } diff --git a/contrib/libucl/src/ucl_emitter_utils.c b/contrib/libucl/src/ucl_emitter_utils.c index 95ac9a5d5776..3559eb63df92 100644 --- a/contrib/libucl/src/ucl_emitter_utils.c +++ b/contrib/libucl/src/ucl_emitter_utils.c @@ -102,7 +102,7 @@ ucl_elt_string_write_json (const char *str, size_t size, func->ucl_emitter_append_character ('"', 1, func->ud); while (size) { - if (ucl_test_character (*p, UCL_CHARACTER_JSON_UNSAFE)) { + if (ucl_test_character (*p, UCL_CHARACTER_JSON_UNSAFE|UCL_CHARACTER_DENIED)) { if (len > 0) { func->ucl_emitter_append_len (c, len, func->ud); } @@ -128,6 +128,10 @@ ucl_elt_string_write_json (const char *str, size_t size, case '"': func->ucl_emitter_append_len ("\\\"", 2, func->ud); break; + default: + /* Emit unicode unknown character */ + func->ucl_emitter_append_len ("\\uFFFD", 5, func->ud); + break; } len = 0; c = ++p; @@ -138,9 +142,11 @@ ucl_elt_string_write_json (const char *str, size_t size, } size --; } + if (len > 0) { func->ucl_emitter_append_len (c, len, func->ud); } + func->ucl_emitter_append_character ('"', 1, func->ud); } diff --git a/contrib/libucl/src/ucl_internal.h b/contrib/libucl/src/ucl_internal.h index 37871eb666df..9ae5250cc92e 100644 --- a/contrib/libucl/src/ucl_internal.h +++ b/contrib/libucl/src/ucl_internal.h @@ -87,6 +87,9 @@ #ifdef HAVE_STRING_H #include #endif +#ifdef HAVE_STRINGS_H +#include +#endif #include "utlist.h" #include "utstring.h" @@ -127,19 +130,19 @@ enum ucl_parser_state { }; enum ucl_character_type { - UCL_CHARACTER_DENIED = 0, - UCL_CHARACTER_KEY = 1, - UCL_CHARACTER_KEY_START = 1 << 1, - UCL_CHARACTER_WHITESPACE = 1 << 2, - UCL_CHARACTER_WHITESPACE_UNSAFE = 1 << 3, - UCL_CHARACTER_VALUE_END = 1 << 4, - UCL_CHARACTER_VALUE_STR = 1 << 5, - UCL_CHARACTER_VALUE_DIGIT = 1 << 6, - UCL_CHARACTER_VALUE_DIGIT_START = 1 << 7, - UCL_CHARACTER_ESCAPE = 1 << 8, - UCL_CHARACTER_KEY_SEP = 1 << 9, - UCL_CHARACTER_JSON_UNSAFE = 1 << 10, - UCL_CHARACTER_UCL_UNSAFE = 1 << 11 + UCL_CHARACTER_DENIED = (1 << 0), + UCL_CHARACTER_KEY = (1 << 1), + UCL_CHARACTER_KEY_START = (1 << 2), + UCL_CHARACTER_WHITESPACE = (1 << 3), + UCL_CHARACTER_WHITESPACE_UNSAFE = (1 << 4), + UCL_CHARACTER_VALUE_END = (1 << 5), + UCL_CHARACTER_VALUE_STR = (1 << 6), + UCL_CHARACTER_VALUE_DIGIT = (1 << 7), + UCL_CHARACTER_VALUE_DIGIT_START = (1 << 8), + UCL_CHARACTER_ESCAPE = (1 << 9), + UCL_CHARACTER_KEY_SEP = (1 << 10), + UCL_CHARACTER_JSON_UNSAFE = (1 << 11), + UCL_CHARACTER_UCL_UNSAFE = (1 << 12) }; struct ucl_macro { @@ -568,4 +571,6 @@ bool ucl_parser_process_object_element (struct ucl_parser *parser, */ bool ucl_parse_msgpack (struct ucl_parser *parser); +bool ucl_parse_csexp (struct ucl_parser *parser); + #endif /* UCL_INTERNAL_H_ */ diff --git a/contrib/libucl/src/ucl_parser.c b/contrib/libucl/src/ucl_parser.c index 0f029ea6210f..9f44de10a6fc 100644 --- a/contrib/libucl/src/ucl_parser.c +++ b/contrib/libucl/src/ucl_parser.c @@ -2469,8 +2469,10 @@ ucl_parser_new (int flags) parser->comments = ucl_object_typed_new (UCL_OBJECT); } - /* Initial assumption about filevars */ - ucl_parser_set_filevars (parser, NULL, false); + if (!(flags & UCL_PARSER_NO_FILEVARS)) { + /* Initial assumption about filevars */ + ucl_parser_set_filevars (parser, NULL, false); + } return parser; } @@ -2617,6 +2619,19 @@ ucl_parser_add_chunk_full (struct ucl_parser *parser, const unsigned char *data, return false; } + if (parse_type == UCL_PARSE_AUTO && len > 0) { + /* We need to detect parse type by the first symbol */ + if ((*data & 0x80) == 0x80 && (*data >= 0xdc && *data <= 0xdf)) { + parse_type = UCL_PARSE_MSGPACK; + } + else if (*data == '(') { + parse_type = UCL_PARSE_CSEXP; + } + else { + parse_type = UCL_PARSE_UCL; + } + } + chunk->begin = data; chunk->remain = len; chunk->pos = chunk->begin; @@ -2643,6 +2658,8 @@ ucl_parser_add_chunk_full (struct ucl_parser *parser, const unsigned char *data, return ucl_state_machine (parser); case UCL_PARSE_MSGPACK: return ucl_parse_msgpack (parser); + case UCL_PARSE_CSEXP: + return ucl_parse_csexp (parser); } } else { diff --git a/contrib/libucl/src/ucl_util.c b/contrib/libucl/src/ucl_util.c index ccc437384ae2..299e0bca2357 100644 --- a/contrib/libucl/src/ucl_util.c +++ b/contrib/libucl/src/ucl_util.c @@ -26,11 +26,17 @@ #include "ucl_internal.h" #include "ucl_chartable.h" #include "kvec.h" +#include #include #include /* for snprintf */ #ifndef _WIN32 #include +#include +#else +#ifndef NBBY +#define NBBY 8 +#endif #endif #ifdef HAVE_LIBGEN_H @@ -81,11 +87,6 @@ typedef kvec_t(ucl_object_t *) ucl_array_t; #define MAP_FAILED ((void *) -1) #endif -#ifdef _WIN32 -#include -#define NBBY CHAR_BIT -#endif - static void *ucl_mmap(char *addr, size_t length, int prot, int access, int fd, off_t offset) { void *map = NULL; @@ -1854,9 +1855,11 @@ ucl_parser_add_file (struct ucl_parser *parser, const char *filename) UCL_PARSE_UCL); } + bool -ucl_parser_add_fd_priority (struct ucl_parser *parser, int fd, - unsigned priority) +ucl_parser_add_fd_full (struct ucl_parser *parser, int fd, + unsigned priority, enum ucl_duplicate_strategy strat, + enum ucl_parse_type parse_type) { unsigned char *buf; size_t len; @@ -1882,7 +1885,8 @@ ucl_parser_add_fd_priority (struct ucl_parser *parser, int fd, } parser->cur_file = NULL; len = st.st_size; - ret = ucl_parser_add_chunk_priority (parser, buf, len, priority); + ret = ucl_parser_add_chunk_full (parser, buf, len, priority, strat, + parse_type); if (len > 0) { ucl_munmap (buf, len); @@ -1891,6 +1895,18 @@ ucl_parser_add_fd_priority (struct ucl_parser *parser, int fd, return ret; } +bool +ucl_parser_add_fd_priority (struct ucl_parser *parser, int fd, + unsigned priority) +{ + if (parser == NULL) { + return false; + } + + return ucl_parser_add_fd_full(parser, fd, parser->default_priority, + UCL_DUPLICATE_APPEND, UCL_PARSE_UCL); +} + bool ucl_parser_add_fd (struct ucl_parser *parser, int fd) { @@ -2488,6 +2504,10 @@ ucl_object_iterate_reset (ucl_object_iter_t it, const ucl_object_t *obj) UCL_SAFE_ITER_CHECK (rit); + if (rit->expl_it != NULL) { + UCL_FREE (sizeof (*rit->expl_it), rit->expl_it); + } + rit->impl_it = obj; rit->expl_it = NULL; @@ -2496,6 +2516,13 @@ ucl_object_iterate_reset (ucl_object_iter_t it, const ucl_object_t *obj) const ucl_object_t* ucl_object_iterate_safe (ucl_object_iter_t it, bool expand_values) +{ + return ucl_object_iterate_full (it, expand_values ? UCL_ITERATE_BOTH : + UCL_ITERATE_IMPLICIT); +} + +const ucl_object_t* +ucl_object_iterate_full (ucl_object_iter_t it, enum ucl_iterate_type type) { struct ucl_object_safe_iter *rit = UCL_SAFE_ITER (it); const ucl_object_t *ret = NULL; @@ -2509,21 +2536,23 @@ ucl_object_iterate_safe (ucl_object_iter_t it, bool expand_values) if (rit->impl_it->type == UCL_OBJECT || rit->impl_it->type == UCL_ARRAY) { ret = ucl_object_iterate (rit->impl_it, &rit->expl_it, true); - if (ret == NULL) { + if (ret == NULL && (type & UCL_ITERATE_IMPLICIT)) { /* Need to switch to another implicit object in chain */ rit->impl_it = rit->impl_it->next; rit->expl_it = NULL; - return ucl_object_iterate_safe (it, expand_values); + + return ucl_object_iterate_safe (it, type); } } else { /* Just iterate over the implicit array */ ret = rit->impl_it; rit->impl_it = rit->impl_it->next; - if (expand_values) { + + if (type & UCL_ITERATE_EXPLICIT) { /* We flatten objects if need to expand values */ if (ret->type == UCL_OBJECT || ret->type == UCL_ARRAY) { - return ucl_object_iterate_safe (it, expand_values); + return ucl_object_iterate_safe (it, type); } } } @@ -2538,6 +2567,10 @@ ucl_object_iterate_free (ucl_object_iter_t it) UCL_SAFE_ITER_CHECK (rit); + if (rit->expl_it != NULL) { + UCL_FREE (sizeof (*rit->expl_it), rit->expl_it); + } + UCL_FREE (sizeof (*rit), it); } diff --git a/contrib/mdocml/INSTALL b/contrib/mdocml/INSTALL index 115d16006432..3f0d3bbc54ac 100644 --- a/contrib/mdocml/INSTALL +++ b/contrib/mdocml/INSTALL @@ -1,4 +1,4 @@ -$Id: INSTALL,v 1.17 2016/07/19 22:40:33 schwarze Exp $ +$Id: INSTALL,v 1.18 2017/02/08 12:24:10 schwarze Exp $ About mdocml, the portable mandoc distribution ---------------------------------------------- @@ -16,7 +16,7 @@ tech@ mailing list, too. Enjoy using the mandoc toolset! -Ingo Schwarze, Karlsruhe, July 2016 +Ingo Schwarze, Karlsruhe, February 2017 Installation @@ -31,15 +31,21 @@ Regarding how packages and ports are maintained for your operating system, please consult your operating system documentation. To install mandoc manually, the following steps are needed: -1. If you want to build the CGI program, man.cgi(8), too, run the -command "echo BUILD_CGI=1 > configure.local". Then run "cp -cgi.h.examples cgi.h" and edit cgi.h as desired. +1. If you want to build the CGI program, man.cgi(8), too, +run the command "echo BUILD_CGI=1 >> configure.local". +Then run "cp cgi.h.example cgi.h" and edit cgi.h as desired. -2. Define MANPATH_DEFAULT in configure.local +2. If you also want to build the new catman(8) utility, run the +command "echo BUILD_CATMAN=1 >> configure.local". Note that it +is unlikely to be a drop-in replacement providing the same +functionality as your system's "catman", if your operating +system contains one. + +3. Define MANPATH_DEFAULT in configure.local if /usr/share/man:/usr/X11R6/man:/usr/local/man is not appropriate for your operating system. -3. Run "./configure". +4. Run "./configure". This script attempts autoconfiguration of mandoc for your system. Read both its standard output and the file "Makefile.local" it generates. If anything looks wrong or different from what you @@ -49,27 +55,31 @@ result seems right to you. On Solaris 10 and earlier, you may have to run "ksh ./configure" because the native /bin/sh lacks some POSIX features. -4. Run "make". +5. Run "make". Any POSIX-compatible make, in particular both BSD make and GNU make, should work. If the build fails, look at "configure.local.example" and go back to step 2. -5. Run "make -n install" and check whether everything will be +6. Run "make -n install" and check whether everything will be installed to the intended places. Otherwise, put some *DIR or *NM* -variables into "configure.local" and go back to step 3. +variables into "configure.local" and go back to step 4. -6. Run "sudo make install". If you intend to build a binary +7. Optionally run the regression suite. +Basically, that amounts to "cd regress && ./regress.pl". +But you should probably look at "./mandoc -l regress/regress.pl.1" +first. + +8. Run "sudo make install". If you intend to build a binary package using some kind of fake root mechanism, you may need a command like "make DESTDIR=... install". Read the *-install targets in the "Makefile" to understand how DESTDIR is used. -7. Run the command "sudo -makewhatis" to build mandoc.db(5) databases in all the directory -trees configured in step 6. Whenever installing new manual pages, -re-run makewhatis(8) to update the databases, or apropos(1) will -not find the new pages. +9. Run the command "sudo makewhatis" to build mandoc.db(5) databases +in all the directory trees configured in step 6. Whenever installing +new manual pages, re-run makewhatis(8) to update the databases, or +apropos(1) will not find the new pages. -8. To set up a man.cgi(8) server, read its manual page. +10. To set up a man.cgi(8) server, read its manual page. Note that some man(7) pages may contain low-level roff(7) markup that mandoc does not yet understand. On some BSD systems using @@ -87,9 +97,10 @@ The following libraries are required: 2. The fts(3) directory traversion functions. If your system does not have them, the bundled compatibility version -will be used, so you need not worry in that case. But be careful: the -glibc version of fts(3) is known to be broken on 32bit platforms, -see . +will be used, so you need not worry in that case. But be careful: old +glibc versions of fts(3) were known to be broken on 32bit platforms, +see . +That was presumably fixed in glibc-2.23. If you run into that problem, set "HAVE_FTS=0" in configure.local. 3. Marc Espie's ohash(3) library. diff --git a/contrib/mdocml/LICENSE b/contrib/mdocml/LICENSE index 1dec04b9f4a6..b9efcbba8db3 100644 --- a/contrib/mdocml/LICENSE +++ b/contrib/mdocml/LICENSE @@ -1,4 +1,4 @@ -$Id: LICENSE,v 1.13 2016/10/18 14:15:33 schwarze Exp $ +$Id: LICENSE,v 1.14 2017/02/08 12:24:10 schwarze Exp $ With the exceptions noted below, all code and documentation contained in the mdocml toolkit is protected by the Copyright @@ -10,6 +10,7 @@ Copyright (c) 2009, 2010, 2011, 2012 Joerg Sonnenberger Copyright (c) 2013 Franco Fichtner Copyright (c) 2014 Baptiste Daroussin Copyright (c) 2016 Ed Maste +Copyright (c) 2017 Michael Stapelberg Copyright (c) 1999, 2004 Marc Espie Copyright (c) 1998, 2004, 2010 Todd C. Miller Copyright (c) 2008 Otto Moerbeek diff --git a/contrib/mdocml/Makefile b/contrib/mdocml/Makefile index 5c2657c39a95..c11fe465940f 100644 --- a/contrib/mdocml/Makefile +++ b/contrib/mdocml/Makefile @@ -1,7 +1,7 @@ -# $Id: Makefile,v 1.493 2016/11/19 15:24:51 schwarze Exp $ +# $Id: Makefile,v 1.504 2017/02/18 15:29:39 schwarze Exp $ # # Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons -# Copyright (c) 2011, 2013-2016 Ingo Schwarze +# Copyright (c) 2011, 2013-2017 Ingo Schwarze # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -15,11 +15,12 @@ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -VERSION = 1.14.0 +VERSION = 1.14.1 # === LIST OF FILES ==================================================== TESTSRCS = test-be32toh.c \ + test-cmsg.c \ test-dirent-namlen.c \ test-EFTYPE.c \ test-err.c \ @@ -30,10 +31,12 @@ TESTSRCS = test-be32toh.c \ test-mkdtemp.c \ test-nanosleep.c \ test-ntohl.c \ + test-O_DIRECTORY.c \ test-ohash.c \ test-PATH_MAX.c \ test-pledge.c \ test-progname.c \ + test-recvmsg.c \ test-reallocarray.c \ test-rewb-bsd.c \ test-rewb-sysv.c \ @@ -49,6 +52,7 @@ TESTSRCS = test-be32toh.c \ test-wchar.c SRCS = att.c \ + catman.c \ cgi.c \ chars.c \ compat_err.c \ @@ -89,6 +93,7 @@ SRCS = att.c \ mandoc.c \ mandoc_aux.c \ mandoc_ohash.c \ + mandocd.c \ mandocdb.c \ manpage.c \ manpath.c \ @@ -128,6 +133,7 @@ DISTFILES = INSTALL \ NEWS \ TODO \ apropos.1 \ + catman.8 \ cgi.h.example \ compat_fts.h \ compat_ohash.h \ @@ -156,6 +162,7 @@ DISTFILES = INSTALL \ man.cgi.8 \ man.conf.5 \ man.h \ + man.options.1 \ manconf.h \ mandoc.1 \ mandoc.3 \ @@ -169,6 +176,7 @@ DISTFILES = INSTALL \ mandoc_html.3 \ mandoc_malloc.3 \ mandoc_ohash.h \ + mandocd.8 \ mansearch.3 \ mansearch.h \ mchars_alloc.3 \ @@ -280,6 +288,12 @@ CGI_OBJS = $(MANDOC_HTML_OBJS) \ cgi.o \ out.o +MANDOCD_OBJS = $(MANDOC_HTML_OBJS) \ + $(MANDOC_TERM_OBJS) \ + mandocd.o \ + out.o \ + tag.o + MANPAGE_OBJS = $(DBM_OBJS) \ manpage.o \ manpath.o @@ -298,6 +312,7 @@ WWW_MANS = apropos.1.html \ man.1.html \ mandoc.1.html \ soelim.1.html \ + man.cgi.3.html \ mandoc.3.html \ mandoc_escape.3.html \ mandoc_headers.3.html \ @@ -311,11 +326,12 @@ WWW_MANS = apropos.1.html \ eqn.7.html \ man.7.html \ mandoc_char.7.html \ + mandocd.8.html \ mdoc.7.html \ roff.7.html \ tbl.7.html \ + catman.8.html \ makewhatis.8.html \ - man.cgi.3.html \ man.cgi.8.html \ man.h.html \ manconf.h.html \ @@ -334,11 +350,7 @@ include Makefile.local # === DEPENDENCY HANDLING ============================================== -all: base-build $(BUILD_TARGETS) Makefile.local - -base-build: mandoc demandoc soelim - -cgi-build: man.cgi +all: mandoc demandoc soelim $(BUILD_TARGETS) Makefile.local install: base-install $(INSTALL_TARGETS) @@ -360,13 +372,14 @@ clean: rm -f libmandoc.a $(LIBMANDOC_OBJS) $(COMPAT_OBJS) rm -f mandoc $(MAIN_OBJS) rm -f man.cgi $(CGI_OBJS) + rm -f mandocd catman $(MANDOCD_OBJS) rm -f manpage $(MANPAGE_OBJS) rm -f demandoc $(DEMANDOC_OBJS) rm -f soelim $(SOELIM_OBJS) rm -f $(WWW_MANS) $(WWW_OBJS) rm -rf *.dSYM -base-install: base-build +base-install: mandoc demandoc soelim mkdir -p $(DESTDIR)$(BINDIR) mkdir -p $(DESTDIR)$(SBINDIR) mkdir -p $(DESTDIR)$(MANDIR)/man1 @@ -375,29 +388,29 @@ base-install: base-build mkdir -p $(DESTDIR)$(MANDIR)/man8 $(INSTALL_PROGRAM) mandoc demandoc $(DESTDIR)$(BINDIR) $(INSTALL_PROGRAM) soelim $(DESTDIR)$(BINDIR)/$(BINM_SOELIM) - ln -f $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_MAN) - ln -f $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_APROPOS) - ln -f $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_WHATIS) - ln -f $(DESTDIR)$(BINDIR)/mandoc \ + $(LN) $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_MAN) + $(LN) $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_APROPOS) + $(LN) $(DESTDIR)$(BINDIR)/mandoc $(DESTDIR)$(BINDIR)/$(BINM_WHATIS) + $(LN) $(DESTDIR)$(BINDIR)/mandoc \ $(DESTDIR)$(SBINDIR)/$(BINM_MAKEWHATIS) $(INSTALL_MAN) mandoc.1 demandoc.1 $(DESTDIR)$(MANDIR)/man1 $(INSTALL_MAN) soelim.1 $(DESTDIR)$(MANDIR)/man1/$(BINM_SOELIM).1 $(INSTALL_MAN) man.1 $(DESTDIR)$(MANDIR)/man1/$(BINM_MAN).1 $(INSTALL_MAN) apropos.1 $(DESTDIR)$(MANDIR)/man1/$(BINM_APROPOS).1 - ln -f $(DESTDIR)$(MANDIR)/man1/$(BINM_APROPOS).1 \ + $(LN) $(DESTDIR)$(MANDIR)/man1/$(BINM_APROPOS).1 \ $(DESTDIR)$(MANDIR)/man1/$(BINM_WHATIS).1 - $(INSTALL_MAN) man.conf.5 $(DESTDIR)$(MANDIR)/man5/${MANM_MANCONF}.5 + $(INSTALL_MAN) man.conf.5 $(DESTDIR)$(MANDIR)/man5/$(MANM_MANCONF).5 $(INSTALL_MAN) mandoc.db.5 $(DESTDIR)$(MANDIR)/man5 - $(INSTALL_MAN) man.7 $(DESTDIR)$(MANDIR)/man7/${MANM_MAN}.7 - $(INSTALL_MAN) mdoc.7 $(DESTDIR)$(MANDIR)/man7/${MANM_MDOC}.7 - $(INSTALL_MAN) roff.7 $(DESTDIR)$(MANDIR)/man7/${MANM_ROFF}.7 - $(INSTALL_MAN) eqn.7 $(DESTDIR)$(MANDIR)/man7/${MANM_EQN}.7 - $(INSTALL_MAN) tbl.7 $(DESTDIR)$(MANDIR)/man7/${MANM_TBL}.7 + $(INSTALL_MAN) man.7 $(DESTDIR)$(MANDIR)/man7/$(MANM_MAN).7 + $(INSTALL_MAN) mdoc.7 $(DESTDIR)$(MANDIR)/man7/$(MANM_MDOC).7 + $(INSTALL_MAN) roff.7 $(DESTDIR)$(MANDIR)/man7/$(MANM_ROFF).7 + $(INSTALL_MAN) eqn.7 $(DESTDIR)$(MANDIR)/man7/$(MANM_EQN).7 + $(INSTALL_MAN) tbl.7 $(DESTDIR)$(MANDIR)/man7/$(MANM_TBL).7 $(INSTALL_MAN) mandoc_char.7 $(DESTDIR)$(MANDIR)/man7 $(INSTALL_MAN) makewhatis.8 \ $(DESTDIR)$(MANDIR)/man8/$(BINM_MAKEWHATIS).8 -lib-install: base-build +lib-install: libmandoc.a mkdir -p $(DESTDIR)$(LIBDIR) mkdir -p $(DESTDIR)$(INCLUDEDIR) mkdir -p $(DESTDIR)$(MANDIR)/man3 @@ -407,13 +420,70 @@ lib-install: base-build $(INSTALL_MAN) mandoc.3 mandoc_escape.3 mandoc_malloc.3 \ mansearch.3 mchars_alloc.3 tbl.3 $(DESTDIR)$(MANDIR)/man3 -cgi-install: cgi-build +cgi-install: man.cgi mkdir -p $(DESTDIR)$(CGIBINDIR) mkdir -p $(DESTDIR)$(HTDOCDIR) $(INSTALL_PROGRAM) man.cgi $(DESTDIR)$(CGIBINDIR) $(INSTALL_DATA) mandoc.css $(DESTDIR)$(HTDOCDIR) -Makefile.local config.h: configure ${TESTSRCS} +catman-install: mandocd catman + mkdir -p $(DESTDIR)$(SBINDIR) + mkdir -p $(DESTDIR)$(MANDIR)/man8 + $(INSTALL_PROGRAM) mandocd $(DESTDIR)$(SBINDIR) + $(INSTALL_PROGRAM) catman $(DESTDIR)$(SBINDIR)/$(BINM_CATMAN) + $(INSTALL_MAN) mandocd.8 $(DESTDIR)$(MANDIR)/man8 + $(INSTALL_MAN) catman.8 $(DESTDIR)$(MANDIR)/man8/$(BINM_CATMAN).8 + +uninstall: + rm -f $(DESTDIR)$(BINDIR)/mandoc + rm -f $(DESTDIR)$(BINDIR)/demandoc + rm -f $(DESTDIR)$(BINDIR)/$(BINM_SOELIM) + rm -f $(DESTDIR)$(BINDIR)/$(BINM_MAN) + rm -f $(DESTDIR)$(BINDIR)/$(BINM_APROPOS) + rm -f $(DESTDIR)$(BINDIR)/$(BINM_WHATIS) + rm -f $(DESTDIR)$(SBINDIR)/$(BINM_MAKEWHATIS) + rm -f $(DESTDIR)$(MANDIR)/man1/mandoc.1 + rm -f $(DESTDIR)$(MANDIR)/man1/demandoc.1 + rm -f $(DESTDIR)$(MANDIR)/man1/$(BINM_SOELIM).1 + rm -f $(DESTDIR)$(MANDIR)/man1/$(BINM_MAN).1 + rm -f $(DESTDIR)$(MANDIR)/man1/$(BINM_APROPOS).1 + rm -f $(DESTDIR)$(MANDIR)/man1/$(BINM_WHATIS).1 + rm -f $(DESTDIR)$(MANDIR)/man5/$(MANM_MANCONF).5 + rm -f $(DESTDIR)$(MANDIR)/man5/mandoc.db.5 + rm -f $(DESTDIR)$(MANDIR)/man7/$(MANM_MAN).7 + rm -f $(DESTDIR)$(MANDIR)/man7/$(MANM_MDOC).7 + rm -f $(DESTDIR)$(MANDIR)/man7/$(MANM_ROFF).7 + rm -f $(DESTDIR)$(MANDIR)/man7/$(MANM_EQN).7 + rm -f $(DESTDIR)$(MANDIR)/man7/$(MANM_TBL).7 + rm -f $(DESTDIR)$(MANDIR)/man7/mandoc_char.7 + rm -f $(DESTDIR)$(MANDIR)/man8/$(BINM_MAKEWHATIS).8 + rm -f $(DESTDIR)$(CGIBINDIR)/man.cgi + rm -f $(DESTDIR)$(HTDOCDIR)/mandoc.css + rm -f $(DESTDIR)$(SBINDIR)/mandocd + rm -f $(DESTDIR)$(SBINDIR)/$(BINM_CATMAN) + rm -f $(DESTDIR)$(MANDIR)/man8/mandocd.8 + rm -f $(DESTDIR)$(MANDIR)/man8/$(BINM_CATMAN).8 + rm -f $(DESTDIR)$(LIBDIR)/libmandoc.a + rm -f $(DESTDIR)$(MANDIR)/man3/mandoc.3 + rm -f $(DESTDIR)$(MANDIR)/man3/mandoc_escape.3 + rm -f $(DESTDIR)$(MANDIR)/man3/mandoc_malloc.3 + rm -f $(DESTDIR)$(MANDIR)/man3/mansearch.3 + rm -f $(DESTDIR)$(MANDIR)/man3/mchars_alloc.3 + rm -f $(DESTDIR)$(MANDIR)/man3/tbl.3 + rm -f $(DESTDIR)$(INCLUDEDIR)/man.h + rm -f $(DESTDIR)$(INCLUDEDIR)/mandoc.h + rm -f $(DESTDIR)$(INCLUDEDIR)/mandoc_aux.h + rm -f $(DESTDIR)$(INCLUDEDIR)/mdoc.h + rm -f $(DESTDIR)$(INCLUDEDIR)/roff.h + rmdir $(DESTDIR)$(INCLUDEDIR) + +regress: all + cd regress && ./regress.pl + +regress-clean: + cd regress && ./regress.pl . clean + +Makefile.local config.h: configure $(TESTSRCS) @echo "$@ is out of date; please run ./configure" @exit 1 @@ -429,6 +499,12 @@ manpage: $(MANPAGE_OBJS) libmandoc.a man.cgi: $(CGI_OBJS) libmandoc.a $(CC) $(STATIC) -o $@ $(LDFLAGS) $(CGI_OBJS) libmandoc.a $(LDADD) +mandocd: $(MANDOCD_OBJS) libmandoc.a + $(CC) -o $@ $(LDFLAGS) $(MANDOCD_OBJS) libmandoc.a $(LDADD) + +catman: catman.o libmandoc.a + $(CC) -o $@ $(LDFLAGS) catman.o libmandoc.a $(LDADD) + demandoc: $(DEMANDOC_OBJS) libmandoc.a $(CC) -o $@ $(LDFLAGS) $(DEMANDOC_OBJS) libmandoc.a $(LDADD) @@ -453,14 +529,40 @@ depend: config.h Makefile.depend > Makefile.tmp mv Makefile.tmp Makefile.depend +regress-distclean: + @find regress \ + -name '.#*' -o \ + -name '*.orig' -o \ + -name '*.rej' -o \ + -name '*.core' \ + -exec rm -i {} \; + +regress-distcheck: + @find regress ! -type d ! -type f + @find regress -type f \ + ! -path '*/CVS/*' \ + ! -name Makefile \ + ! -name Makefile.inc \ + ! -name '*.in' \ + ! -name '*.out_ascii' \ + ! -name '*.out_utf8' \ + ! -name '*.out_html' \ + ! -name '*.out_lint' \ + ! -path regress/regress.pl \ + ! -path regress/regress.pl.1 + dist: mdocml.sha256 mdocml.sha256: mdocml.tar.gz sha256 mdocml.tar.gz > $@ mdocml.tar.gz: $(DISTFILES) + ls regress/*/*/*.mandoc_* && exit 1 || true mkdir -p .dist/mdocml-$(VERSION)/ $(INSTALL) -m 0644 $(DISTFILES) .dist/mdocml-$(VERSION) + cp -pR regress .dist/mdocml-$(VERSION) + find .dist/mdocml-$(VERSION)/regress \ + -type d -name CVS -print0 | xargs -0 rm -rf chmod 755 .dist/mdocml-$(VERSION)/configure ( cd .dist/ && tar zcf ../$@ mdocml-$(VERSION) ) rm -rf .dist/ diff --git a/contrib/mdocml/Makefile.depend b/contrib/mdocml/Makefile.depend index af1255defdf5..56bd4f986483 100644 --- a/contrib/mdocml/Makefile.depend +++ b/contrib/mdocml/Makefile.depend @@ -1,4 +1,5 @@ att.o: att.c config.h roff.h mdoc.h libmdoc.h +catman.o: catman.c config.h compat_fts.h cgi.o: cgi.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h man.h main.h manconf.h mansearch.h cgi.h chars.o: chars.c config.h mandoc.h mandoc_aux.h mandoc_ohash.h compat_ohash.h libmandoc.h compat_err.o: compat_err.c config.h @@ -39,6 +40,7 @@ man_validate.o: man_validate.c config.h mandoc_aux.h mandoc.h roff.h man.h libma mandoc.o: mandoc.c config.h mandoc.h mandoc_aux.h libmandoc.h mandoc_aux.o: mandoc_aux.c config.h mandoc.h mandoc_aux.h mandoc_ohash.o: mandoc_ohash.c mandoc_aux.h mandoc_ohash.h compat_ohash.h +mandocd.o: mandocd.c config.h mandoc.h roff.h mdoc.h man.h main.h manconf.h mandocdb.o: mandocdb.c config.h compat_fts.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h roff.h mdoc.h man.h manconf.h mansearch.h dba_array.h dba.h manpage.o: manpage.c config.h manconf.h mansearch.h manpath.o: manpath.c config.h mandoc_aux.h manconf.h diff --git a/contrib/mdocml/NEWS b/contrib/mdocml/NEWS index 7f5625a7a157..2cea54fe6820 100644 --- a/contrib/mdocml/NEWS +++ b/contrib/mdocml/NEWS @@ -1,7 +1,131 @@ -$Id: NEWS,v 1.12 2016/07/14 11:09:06 schwarze Exp $ +$Id: NEWS,v 1.20 2017/02/16 14:38:12 schwarze Exp $ This file lists the most important changes in the mdocml.bsd.lv distribution. +Changes in version 1.14.1, released on February XXX, 2017 + + --- MAJOR NEW FEATURES --- + * apropos(1): Reimplement complete semantic search functionality + without the dependency on SQLite3, using only POSIX APIs. + This comes with a completely new mandoc.db(5) file format. + * man(1): Support more than one tag entry for the same search term, + plus some minor improvements to the less(1) :t support. + * -Thtml: Use real macro names for CSS classes. + Systematic cleanup of and many improvements to mandoc.css. + * -Thtml: Produce human readable HTML code by using indentation + and better line breaks. Improve various HTML elements, + and trim several useless ones. + * New catman(8) utility, still somewhat experimental. + * Now includes a portable version of the OpenBSD mandoc regression + suite, see regress/regress.pl.1 for details. + --- REMOVED FUNCTIONALITY --- + * Operating systems that don't provide mmap(3) are no longer supported. + * Drop support for manpath(1). Even if your system has manpath(1), + it is simpler to use MANPATH_DEFAULT in configure.local for + operating system defaults, man.conf(5) for machine-specific + modifications, and ${MANPATH}, -m, and -M for user preferences + than to bother with the complexity of manpath(1). + * makewhatis(8) -p: No longer warn about missing MLINKS since these + are no longer needed for anything. + --- MINOR NEW FEATURES --- + * mdoc(7): Warn about invalid punctuation and content below NAME. + * mdoc(7): Warn about .Xr lacking the second argument (section). + * mdoc(7): Warn about violations of the rule "new sentence, new line". + * roff(7): Warn about trailing whitespace at the end of comments. + * mdoc(7): Improve rendering of double quotes. + * mdoc(7): Always do text production in the validator, never in the + formatters. Cleaner, simpler, shorter, helps NetBSD apropos(1) + and also makes -Ttree output more useful. + * -Ttree: Show metadata and some additional node flags. + New -Onoval output option to show the unvalidated tree. + --- RELIABILITY BUGFIXES --- + * man(1): Make "man -l" work with standard input from a pipe or file, + as long as standard output is a terminal. + * man(7): Fix out of bounds read access if a text node immediately + preceded the first .SH header. + * mdoc(7): Fix out of bounds read access for .Bl without a type + but with a width. + * mdoc(7): Fix out of bounds read access for .Bl -column starting + with a tab character instead of a child .It macro. + * mdoc(7): Fix syntax tree corruption leading to segfaults caused + by stray block end macros in nested blocks of mismatching type. + * man(1): Fix NULL dereference when the first of multiple pages + shown was preformatted. + * mdoc(7): Fix syntax tree corruption leading to NULL dereference + caused by partial implicit macros inside .Bl -column table cells. + * mdoc(7): Fix syntax tree corruption leading to NULL dereference + for macro sequences like .Bl .Bl .It Bo .El .It. + * mdoc(7): Fix syntax tree corruption leading to NULL dereference + caused by .Ta following a nested .Bl -column breaking another block. + * mdoc(7): Fix syntax tree corruption sometimes leading to NULL + dereference caused by indirectly broken .Nd or .Nm blocks. + * mdoc(7) -Thtml: Fix a NULL dereference for .Bl -column with 0 columns. + * mdoc(7): Fix NULL dereference in some specific cases of a + block-end macro calling another block-end macro. + * mdoc(7): Fix NULL dereference if the only child of the head + of the first .Sh was an empty in-line macro. + * eqn(7): Fix NULL dereference in the terminal formatter + for empty matrices and empty square roots. + * mdoc(7): Fix an assertion failure for a .Bd without a type that + breaks another block. + * mdoc(7): Fix an assertion failure that happened for some .Bl -column + lists containing a column width of "-4n", "-3n", or "-2n". + * mdoc(7): Fix an assertion failure caused by .Bl -column without .It + but containing eqn(7) or tbl(7) code. + * roff(7): Fix an assertion failure caused by \z\[u00FF] with -Tps/-Tpdf. + * roff(7): Fix an assertion failures caused by whitespace inside \o'' + (overstrike) sequences. + * -Thtml: Fix an assertion failure caused by -Oman or -Oincludes of + excessive length. + --- PORTABILITY IMPROVEMENTS --- + * man(1): Do not mix stdio narrow and wide stream orientation + on stdout, which could cause output corruption on glibc. + * mandoc(1): Autodetect a suitable locale for -Tutf8 mode. + * ./configure: Autodetect whether PATH_MAX and O_DIRECTORY are defined. + * ./configure: Autodetect if nanosleep(3) needs -lrt. + * ./configure: Provide an ${LN} configuration variable. + * ./configure: Put compiler arguments that may contain -l at the end. + --- MINOR BUGFIXES --- + * mdoc(7): Fix SYNOPSIS output if the first child of .Nm is a macro. + * mdoc(7) -Thtml: Improve formatting of .Bl -tag with short tags. + * man(7) -Thtml: Preserve whitespace in .nf (nofill) mode. + * mandoc(1): Error out on invalid output options on the command line. + --- STRUCTURAL CHANGES, no functional change --- + * Redesign part of the mandoc_html(3) interfaces, making them much + easier to use and reducing the amount of code by a few hundred lines. + --- THANKS TO --- + * Michael Stapelberg (Debian) for designing the new mandocd(8) + and parts of the new catman(8), and for a number of patches + and bug reports. + * Baptiste Daroussin (FreeBSD) for profiling the new makewhatis(8) + implementation and suggesting an algorithmic improvement which + more than doubled performance, and for a few bug reports. + * Ed Maste (FreeBSD) for an important patch improving reproducibility + of builds in makewhatis(8), and for a few bug reports. + * Theo Buehler (OpenBSD) for more than ten important bug reports, + most of them found by systematic afl(1) fuzzing. + * Benny Lofgren, David Dahlberg, and in particular Vadim Zhukov + for crucial help in getting .Bl -tag CSS formatting fixed. + * Svyatoslav Mishyn (Crux Linux) for an initial version of the + patch to autodetect a suitable locale for -Tutf8 mode. + * Jason McIntyre (OpenBSD) for multiple useful discussions + and a number of bug reports. + * Alexander Bluhm, Andrew Fresh, Antoine Jacoutot, Antony Bentley, + Christian Weisgerber, Jonathan Gray, Marc Espie, Martijn van Duren, + Stuart Henderson, Ted Unangst, Theo de Raadt (OpenBSD), Abhinav + Upadhyay, Christos Zoulas, Kamil Rytarowski, Sevan Janiyan, + Thomas Klausner (NetBSD), Aaron M. Ucko, Bdale Garbee, Reiner + Herrmann, Shane Kerr (Debian), Leah Neukirchen (Void Linux), + Daniel Sabogal (Alpine Linux), Yuri Pankov (illumos), + Carsten Kunze (Heirloom roff), Kristaps Dzonsons (bsd.lv), + Anton Lindqvist, Jan Stary, Jeremy A. Mates, Mark Patruck, + Pavan Maddamsetti, Sean Levy , and + Tiago Silva for bug reports. + * Brent Cook, Marc Espie, Philip Guenther, Todd Miller (OpenBSD) + and Markus Waldeck for useful discussions. + * And as usual, OpenCSW for providing me with a Solaris 9/10/11 + testing environment. + Changes in version 1.13.4, released on July 14, 2016 --- MAJOR NEW FEATURES --- @@ -109,7 +233,7 @@ Changes in version 1.13.4, released on July 14, 2016 again resulting in more than half a dozen important bug reports. * Svyatoslav Mishyn (Crux Linux) for some patches, several bug reports, and extensive release testing. - * Christian Neukirchen (void Linux) for a number of compatibility + * Leah Neukirchen (Void Linux) for a number of compatibility patches and suggestions and several bug reports. * Christos Zoulas (NetBSD) for a bug fix patch and some useful suggestions for cleanup. diff --git a/contrib/mdocml/TODO b/contrib/mdocml/TODO index 181c43100ab2..13a57f2b600f 100644 --- a/contrib/mdocml/TODO +++ b/contrib/mdocml/TODO @@ -1,6 +1,6 @@ ************************************************************************ * Official mandoc TODO. -* $Id: TODO,v 1.223 2017/01/17 15:32:43 schwarze Exp $ +* $Id: TODO,v 1.234 2017/02/18 11:53:33 schwarze Exp $ ************************************************************************ Many issues are annotated for difficulty as follows: @@ -193,10 +193,6 @@ are mere guesses, and some may be wrong. uqs@ Thu, 2 Jun 2011 11:33:35 +0200 loc * exist ** algo *** size * imp ** ---- missing man features ----------------------------------------------- - -- -T[x]html doesn't stipulate non-collapsing spaces in literal mode - --- missing tbl features ----------------------------------------------- - horizontal lines in the layout still consume data cells @@ -223,13 +219,16 @@ are mere guesses, and some may be wrong. - support mdoc(7) and man(7) macros inside tbl(7) code; probably requires the parser reorg and letting tbl(7) use roff_node such that macro sets can mix; - informed by bapt@ that FreeBSD needs this. + informed by bapt@ that FreeBSD needs this: 3 Jan 2015 23:32:23 +0100 loc *** exist ** algo *** size ** imp *** - look at the POSIX manuals in the books/man-pages-posix port, they use some unsupported tbl(7) features. loc * exist ** algo ** size ** imp *** +- look what Joerg Schilling manual pages use + Thu, 19 Mar 2015 18:31:48 +0100 + - use Unicode U+2500 to U+256C for table borders in tbl(7) -Tutf-8 output suggested by bentley@ Tue, 14 Oct 2014 04:10:55 -0600 @@ -263,15 +262,6 @@ are mere guesses, and some may be wrong. even for apropos title line output; req by bapt@ loc * exist * algo * size * imp *** -- makewhatis(8) for preformatted pages: - parse the section number from the header line - and compare to the section number from the directory name - loc * exist * algo * size * imp ** - -- Does makewhatis(8) detect missing NAME sections, missing names, - and missing descriptions in all the file formats? - loc * exist * algo * size * imp *** - - clean up escape sequence handling, creating three classes: (1) fully implemented, or parsed and ignored without loss of content (2) unimplemented, potentially causing loss of content @@ -300,6 +290,8 @@ are mere guesses, and some may be wrong. - look at AT&T DWB http://www2.research.att.com/sw/download Carsten Kunze has patches Mon, 4 Aug 2014 17:01:28 +0200 + ported version: https://github.com/n-t-roff/DWB3.3 + Carsten Kunze Wed, 22 Apr 2015 11:21:43 +0200 - look at pages generated from reStructeredText, e.g. devel/mercurial hg(1) These are a weird mixture of man(7) and custom autogenerated low-level @@ -334,6 +326,9 @@ are mere guesses, and some may be wrong. https://github.com/schmonz/ikiwiki/compare/mandoc Amitai Schlair Mon, 19 May 2014 14:05:53 -0400 +- check features of the Slackware man.conf(5) format + Carsten Kunze Wed, 11 Mar 2015 17:57:24 +0100 + ************************************************************************ * formatting issues: ugly output ************************************************************************ @@ -394,7 +389,7 @@ are mere guesses, and some may be wrong. reveals lots of bugs both in groff and mandoc... reported by bentley@ Wed, 22 May 2013 23:49:30 -0600 ---- PDF issues --------------------------------------------------------- +--- PostScript and PDF issues ------------------------------------------ - PDF output doesn't use a monospaced font for .Bd -literal Example: "mandoc -Tpdf afterboot.8 > output.pdf && pdfviewer output.pdf". @@ -404,21 +399,11 @@ are mere guesses, and some may be wrong. instructions from juanfra@ Wed, 11 Jun 2014 02:21:01 +0200 add a new <> block to the PDF files with /BaseFont /Courier and change the /Name from /F0 to the new font (/F5 (?)). + re-reported by tb@ Mon, 16 Mar 2015 16:47:21 +0100 loc * exist ** algo ** size * imp ** --- HTML issues -------------------------------------------------------- --
formatting is ugly - hints are easy to find on the web, e.g. - http://stackoverflow.com/questions/1713048/ - see also matthew@ Fri, 18 Jul 2014 19:25:12 -0700 - loc * exist * algo ** size * imp *** - -- In -man -Thtml, .nf does not preserve indentation. - It should either convert blanks to   - or use
 rather than 
(like .Bd -literal does). - Reported by afresh1@ 12 Apr 2016 14:35:45 -0700 - - .Bf at the beginning of a paragraph inserts a bogus 1ex horizontal space, see for example random(3). Introduced in http://mdocml.bsd.lv/cgi-bin/cvsweb/mdoc_html.c.diff?r1=1.91&r2=1.92 @@ -427,6 +412,9 @@ are mere guesses, and some may be wrong. - jsg on icb, Nov 3, 2014: try to guess Xr in man(7) for hyperlinking + and render them with + https://github.com/Debian/debiman/issues/15 + loc * exist * algo ** size ** imp ** - The tables used to render the three-part page headers actually force the width of the to the max-width given for . @@ -435,9 +423,6 @@ are mere guesses, and some may be wrong. http://undeadly.org/cgi?action=article&sid=20140925064244&pid=1 loc * exist * algo ** size * imp *** -- consider whether can be used for Ar Dv Er Ev Fa Va. - from bentley@ Wed, 13 Aug 2014 09:17:55 -0600 - - generate tags in HTML idea from florian@ Tue, 7 Apr 2015 00:26:28 +0000 may be possible to implement with .Lk img://something.png alt_text @@ -454,6 +439,9 @@ are mere guesses, and some may be wrong. Steffen Nurpmeso Sat, 08 Nov 2014 13:34:59 +0100 loc * exist ** algo ** size * imp ** +- .Lk formatting for long links with line breaks + Franco Fichtner 8 Oct 2013 00:33:42 +0200 + - In .Bl -enum -width 0n, groff continues one the same line after the number, mandoc breaks the line. mail to kristaps@ Mon, 20 Jul 2009 02:21:39 +0200 @@ -498,6 +486,7 @@ are mere guesses, and some may be wrong. The same applies to .Bl -column column widths; reported again by Nicolas Joly Thu, 1 Mar 2012 13:41:26 +0100 via wiz@ 5 Mar reported again by Franco Fichtner Fri, 27 Sep 2013 21:02:28 +0200 + reported again by Bruce Evans Fri, 17 Feb 2017 21:22:44 +0100 via bapt@ loc *** exist *** algo *** size ** imp *** An easy partial fix would be to just skip the first word if it starts with a dot, including any following white space, when measuring. @@ -508,12 +497,6 @@ are mere guesses, and some may be wrong. we want three blank lines, not two as in mandoc. loc ** exist ** algo ** size * imp ** -- Header lines of excessive length: - Port OpenBSD man_term.c rev. 1.25 to mdoc_term.c - and document it in mdoc(7) and man(7) COMPATIBILITY - found while talking to Chris Bennett - loc * exist * algo * size * imp * - - Sequences of multiple man(7) paragraphs (.PP, .IP) interspersed with .ps and .nf/.fi produce execessive blank lines, see libJudy and graphics/dcmtk. The parser reorg may help with this. @@ -535,21 +518,10 @@ are mere guesses, and some may be wrong. to access the manpath and mandoc.db(3) after parsing. asked for by jmc@ Fri, 4 Dec 2015 22:39:40 +0000 -- Report errors in -O suboption parsing. - loc * exist * algo * size * imp ** - - warn when .Sh or .Ss contain other macros Steffen Nurpmeso, savannah.gnu.org/bugs/index.php?45034 loc * exist * algo * size * imp ** -- check that MANDOCERR_BADTAB is thrown in the right cases, - i.e. when finding a literal tab character in fill mode, - and possibly change the wording of the warning message - to refer to fill mode, not literal mode - See the mail from Werner LEMBERG on the groff list, - Fri, 14 Feb 2014 18:54:42 +0100 (CET) - loc * exist ** algo ** size * imp ** - - warn about attempts to call non-callable macros Steffen Nurpmeso Tue, 11 Nov 2014 22:55:16 +0100 Note that formatting is inconsistent in groff. @@ -558,9 +530,6 @@ are mere guesses, and some may be wrong. all over mdoc_macro.c and all subtly different. loc ** exist ** algo ** size ** imp ** -- warn about "new sentence, new line" - loc ** exist ** algo *** size * imp ** - - mandoc_special does not really check the escape sequence, but just the overall format loc ** exist ** algo *** size ** imp ** @@ -580,13 +549,6 @@ are mere guesses, and some may be wrong. * documentation issues ************************************************************************ -- mention hyphenation rules: - breaking at letter-letter in text mode (not macro args) - proper hyphenation is unimplemented - -- talk about spacing around delimiters - to jmc@, kristaps@ Sat, 23 Apr 2011 17:41:27 +0200 - - mark macros as: page structure domain, manual domain, general text domain is this useful? @@ -606,14 +568,8 @@ Several areas can be cleaned up to make mandoc even faster. These are - improve hashing mechanism for macros (quite important: performance) -- improve hashing mechanism for characters (not as important) - - the PDF file is HUGE: this can be reduced by using relative offsets -- instead of re-initialising the roff predefined-strings set before each - parse, create a read-only version the first time and copy it - loc * exist ** algo ** size * imp ** - ************************************************************************ * structural issues ************************************************************************ @@ -648,9 +604,6 @@ Several areas can be cleaned up to make mandoc even faster. These are output through libz. - Sandbox (see OpenSSH). - Enable caching support via HTTP 304 and If-Modified-Since. - - Allow for cgi.h to be overridden by CGI environment variables. - Otherwise, binary distributions will inherit the compile-time - behaviour, which is not optimal. - Have Mac OSX systems automatically disable -static compilation of the CGI: -static isn't supported. diff --git a/contrib/mdocml/apropos.1 b/contrib/mdocml/apropos.1 index 10ba3c6a454d..8f51030ec0c8 100644 --- a/contrib/mdocml/apropos.1 +++ b/contrib/mdocml/apropos.1 @@ -1,4 +1,4 @@ -.\" $Id: apropos.1,v 1.39 2015/04/03 08:46:17 schwarze Exp $ +.\" $Id: apropos.1,v 1.40 2017/01/31 19:44:04 schwarze Exp $ .\" .\" Copyright (c) 2011, 2012 Kristaps Dzonsons .\" Copyright (c) 2011, 2012, 2014 Ingo Schwarze @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: April 3 2015 $ +.Dd $Mdocdate: January 31 2017 $ .Dt APROPOS 1 .Os .Sh NAME @@ -468,6 +468,10 @@ and in .Ox 5.6 for .Nm whatis . +The options +.Fl acfhIKklOTWw +appeared in +.Ox 5.7 . .Sh AUTHORS .An -nosplit .An Bill Joy diff --git a/contrib/mdocml/catman.8 b/contrib/mdocml/catman.8 new file mode 100644 index 000000000000..1de1096a3e4a --- /dev/null +++ b/contrib/mdocml/catman.8 @@ -0,0 +1,186 @@ +.\" $Id: catman.8,v 1.7 2017/02/06 19:04:21 schwarze Exp $ +.\" +.\" Copyright (c) 2017 Ingo Schwarze +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.\" +.Dd $Mdocdate: February 6 2017 $ +.Dt CATMAN 8 +.Os +.Sh NAME +.Nm catman +.Nd format all manual pages below a directory +.Sh SYNOPSIS +.Nm catman +.Op Fl I Cm os Ns = Ns Ar name +.Op Fl T Ar output +.Ar srcdir dstdir +.Sh DESCRIPTION +The +.Nm +utility assumes that all files below +.Ar srcdir +are manual pages in +.Xr mdoc 7 +and +.Xr man 7 +format and formats all of them, storing the formatted versions in +the same relative paths below +.Ar dstdir . +Subdirectories of +.Ar dstdir +are created as needed. +Existing files are not explicitly deleted, but possibly overwritten. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl I Cm os Ns = Ns Ar name +Override the default operating system +.Ar name +for the +.Xr mdoc 7 +.Ic Os +and for the +.Xr man 7 +.Ic TH +macro. +.It Fl T Ar output +Output format. +The +.Ar output +argument can be +.Cm ascii , +.Cm utf8 , +or +.Cm html ; +see +.Xr mandoc 1 . +In +.Cm html +output mode, the +.Cm fragment +output option is implied. +Other output options are not supported. +.El +.Sh IMPLEMENTATION NOTES +Since this version avoids +.Xr fork 2 +and +.Xr exec 3 +overhead and uses the much faster +.Sy mandoc +parsers and formatters rather than +.Sy groff , +it may be about one order of magnitude faster than other +.Nm +implementations. +.Sh EXIT STATUS +.Ex -std +.Pp +Possible errors include: +.Bl -bullet +.It +missing, invalid, or excessive command line arguments +.It +failure to change the current working directory to +.Ar srcdir +.It +failure to open +.Ar dstdir +.It +communication failure with +.Xr mandocd 8 +.It +resource exhaustion, for example file descriptor, process table, +or memory exhaustion +.El +.Pp +Except for memory exhaustion and similar system-level failures, +failures while trying to open, read, parse, or format individual +manual pages, to save individual formatted files to the file system, +or even to create directories do not cause +.Nm +to return an error exit status. +In such cases, +.Nm +will simply continue with the next file or subdirectory. +.Sh SEE ALSO +.Xr mandoc 1 , +.Xr mandocd 8 +.Sh HISTORY +A +.Nm +utility first appeared in +.Fx 1.0 . +Other, incompatible implementations appeared in +.Nx 1.0 +and in +.Sy man-db No 2.2 . +.Pp +This version appeared in version 1.14.1 of the +.Sy mandoc +toolkit. +.Sh AUTHORS +.An -nosplit +The first +.Nm +implementation was a short shell script by +.An Christoph Robitschko +in July 1993. +.Pp +The +.Nx +implementations were written by +.An J. T. Conklin Aq Mt jtc@netbsd.org +in 1993, +.An Christian E. Hopps Aq Mt chopps@netbsd.org +in 1994, +and +.An Dante Profeta Aq Mt dante@netbsd.org +in 1999; the +.Sy man-db +implementation by +.An Graeme W. Wilford +in 1994; and the +.Fx +implementations by +.An Wolfram Schneider Aq Mt wosch@freebsd.org +in 1995 and +.An John Rochester Aq Mt john@jrochester.org +in 2002. +.Pp +The concept of the present version was designed and implemented by +.An Michael Stapelberg Aq Mt stapelberg@debian.org +in 2017. +Option and argument handling and directory iteration was added by +.An Ingo Schwarze Aq Mt schwarze@openbsd.org . +.Sh CAVEATS +All versions of +.Nm +are incompatible with each other because each caters to the needs +of a specific operating system, for example regarding directory +structures and file naming conventions. +.Pp +This version is more flexible than the others in so far as it does +not assume any particular directory structure or naming convention. +That flexibility comes at the price of not being able to change the +names and relative paths of the source files when reusing them to +store the formatted files, of not supporting any configuration file +formats or environment variables, and of being unable to scan for +and remove junk files in +.Ar dstdir . +.Pp +Currently, +.Nm +always reformats each page, even if the formatted version is newer +than the source version. diff --git a/contrib/mdocml/catman.c b/contrib/mdocml/catman.c new file mode 100644 index 000000000000..7d62c0e74add --- /dev/null +++ b/contrib/mdocml/catman.c @@ -0,0 +1,260 @@ +/* $Id: catman.c,v 1.21 2017/02/18 12:24:24 schwarze Exp $ */ +/* + * Copyright (c) 2017 Michael Stapelberg + * Copyright (c) 2017 Ingo Schwarze + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include "config.h" + +#if HAVE_CMSG_XPG42 +#define _XPG4_2 +#endif + +#include +#include +#include + +#if HAVE_ERR +#include +#endif +#include +#include +#if HAVE_FTS +#include +#else +#include "compat_fts.h" +#endif +#include +#include +#include +#include +#include + +int process_manpage(int, int, const char *); +int process_tree(int, int); +void run_mandocd(int, const char *, const char *) + __attribute__((__noreturn__)); +ssize_t sock_fd_write(int, int, int, int); +void usage(void) __attribute__((__noreturn__)); + + +void +run_mandocd(int sockfd, const char *outtype, const char* defos) +{ + char sockfdstr[10]; + + if (snprintf(sockfdstr, sizeof(sockfdstr), "%d", sockfd) == -1) + err(1, "snprintf"); + if (defos == NULL) + execlp("mandocd", "mandocd", "-T", outtype, + sockfdstr, (char *)NULL); + else + execlp("mandocd", "mandocd", "-T", outtype, + "-I", defos, sockfdstr, (char *)NULL); + err(1, "exec"); +} + +ssize_t +sock_fd_write(int fd, int fd0, int fd1, int fd2) +{ + const struct timespec timeout = { 0, 10000000 }; /* 0.01 s */ + struct msghdr msg; + struct iovec iov; + union { + struct cmsghdr cmsghdr; + char control[CMSG_SPACE(3 * sizeof(int))]; + } cmsgu; + struct cmsghdr *cmsg; + int *walk; + ssize_t sz; + unsigned char dummy[1] = {'\0'}; + + iov.iov_base = dummy; + iov.iov_len = sizeof(dummy); + + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + + msg.msg_control = cmsgu.control; + msg.msg_controllen = sizeof(cmsgu.control); + + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_len = CMSG_LEN(3 * sizeof(int)); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + + walk = (int *)CMSG_DATA(cmsg); + *(walk++) = fd0; + *(walk++) = fd1; + *(walk++) = fd2; + + /* + * It appears that on some systems, sendmsg(3) + * may return EAGAIN even in blocking mode. + * Seen for example on Oracle Solaris 11.2. + * The sleeping time was chosen by experimentation, + * to neither cause more than a handful of retries + * in normal operation nor unnecessary delays. + */ + for (;;) { + if ((sz = sendmsg(fd, &msg, 0)) != -1 || + errno != EAGAIN) + break; + nanosleep(&timeout, NULL); + } + return sz; +} + +int +process_manpage(int srv_fd, int dstdir_fd, const char *path) +{ + int in_fd, out_fd; + int irc; + + if ((in_fd = open(path, O_RDONLY)) == -1) { + warn("open(%s)", path); + return 0; + } + + if ((out_fd = openat(dstdir_fd, path, + O_WRONLY | O_NOFOLLOW | O_CREAT | O_TRUNC, + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) == -1) { + warn("openat(%s)", path); + close(in_fd); + return 0; + } + + irc = sock_fd_write(srv_fd, in_fd, out_fd, STDERR_FILENO); + + close(in_fd); + close(out_fd); + + if (irc < 0) { + warn("sendmsg"); + return -1; + } + return 0; +} + +int +process_tree(int srv_fd, int dstdir_fd) +{ + FTS *ftsp; + FTSENT *entry; + const char *argv[2]; + const char *path; + + argv[0] = "."; + argv[1] = (char *)NULL; + + if ((ftsp = fts_open((char * const *)argv, + FTS_PHYSICAL | FTS_NOCHDIR, NULL)) == NULL) { + warn("fts_open"); + return -1; + } + + while ((entry = fts_read(ftsp)) != NULL) { + path = entry->fts_path + 2; + switch (entry->fts_info) { + case FTS_F: + if (process_manpage(srv_fd, dstdir_fd, path) == -1) { + fts_close(ftsp); + return -1; + } + break; + case FTS_D: + if (*path != '\0' && + mkdirat(dstdir_fd, path, S_IRWXU | S_IRGRP | + S_IXGRP | S_IROTH | S_IXOTH) == -1 && + errno != EEXIST) { + warn("mkdirat(%s)", path); + (void)fts_set(ftsp, entry, FTS_SKIP); + } + break; + case FTS_DP: + break; + default: + warnx("%s: not a regular file", path); + break; + } + } + + fts_close(ftsp); + return 0; +} + +int +main(int argc, char **argv) +{ + const char *defos, *outtype; + int srv_fds[2]; + int dstdir_fd; + int opt; + pid_t pid; + + defos = NULL; + outtype = "ascii"; + while ((opt = getopt(argc, argv, "I:T:")) != -1) { + switch (opt) { + case 'I': + defos = optarg; + break; + case 'T': + outtype = optarg; + break; + default: + usage(); + } + } + + if (argc > 0) { + argc -= optind; + argv += optind; + } + if (argc != 2) + usage(); + + if (socketpair(AF_LOCAL, SOCK_STREAM, AF_UNSPEC, srv_fds) == -1) + err(1, "socketpair"); + + pid = fork(); + switch (pid) { + case -1: + err(1, "fork"); + case 0: + close(srv_fds[0]); + run_mandocd(srv_fds[1], outtype, defos); + default: + break; + } + close(srv_fds[1]); + + if ((dstdir_fd = open(argv[1], O_RDONLY | O_DIRECTORY)) == -1) + err(1, "open(%s)", argv[1]); + + if (chdir(argv[0]) == -1) + err(1, "chdir(%s)", argv[0]); + + return process_tree(srv_fds[0], dstdir_fd) == -1 ? 1 : 0; +} + +void +usage(void) +{ + fprintf(stderr, "usage: %s [-I os=name] [-T output] " + "srcdir dstdir\n", BINM_CATMAN); + exit(1); +} diff --git a/contrib/mdocml/cgi.c b/contrib/mdocml/cgi.c index 06beca3fce5a..3303d00100b9 100644 --- a/contrib/mdocml/cgi.c +++ b/contrib/mdocml/cgi.c @@ -1,4 +1,4 @@ -/* $Id: cgi.c,v 1.144 2017/01/21 01:20:31 schwarze Exp $ */ +/* $Id: cgi.c,v 1.147 2017/02/08 13:34:27 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze @@ -21,7 +21,9 @@ #include #include +#if HAVE_ERR #include +#endif #include #include #include @@ -113,7 +115,7 @@ static const char *const sec_names[] = { static const int sec_MAX = sizeof(sec_names) / sizeof(char *); static const char *const arch_names[] = { - "amd64", "alpha", "armv7", + "amd64", "alpha", "armv7", "arm64", "hppa", "i386", "landisk", "loongson", "luna88k", "macppc", "mips64", "octeon", "sgi", "socppc", "sparc64", @@ -799,6 +801,7 @@ resp_format(const struct req *req, const char *file) memset(&conf, 0, sizeof(conf)); conf.fragment = 1; + conf.style = mandoc_strdup(CSS_DIR "/mandoc.css"); usepath = strcmp(req->q.manpath, req->p[0]); mandoc_asprintf(&conf.man, "/%s%s%%N.%%S", usepath ? req->q.manpath : "", usepath ? "/" : ""); @@ -826,6 +829,7 @@ resp_format(const struct req *req, const char *file) mparse_free(mp); mchars_free(); free(conf.man); + free(conf.style); } static void diff --git a/contrib/mdocml/chars.c b/contrib/mdocml/chars.c index c2cfaf818444..f1f5d5d78ca8 100644 --- a/contrib/mdocml/chars.c +++ b/contrib/mdocml/chars.c @@ -1,4 +1,4 @@ -/* $Id: chars.c,v 1.68 2015/10/13 22:59:54 schwarze Exp $ */ +/* $Id: chars.c,v 1.69 2017/02/17 18:28:06 schwarze Exp $ */ /* * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2011, 2014, 2015 Ingo Schwarze @@ -101,8 +101,8 @@ static struct ln lines[] = { { "bq", ",", 0x201a }, { "lq", "\"", 0x201c }, { "rq", "\"", 0x201d }, - { "Lq", "``", 0x201c }, - { "Rq", "''", 0x201d }, + { "Lq", "\"", 0x201c }, + { "Rq", "\"", 0x201d }, { "oq", "`", 0x2018 }, { "cq", "\'", 0x2019 }, { "aq", "\'", 0x0027 }, diff --git a/contrib/mdocml/compat_fts.c b/contrib/mdocml/compat_fts.c index c2cc9570c545..3859111a52f8 100644 --- a/contrib/mdocml/compat_fts.c +++ b/contrib/mdocml/compat_fts.c @@ -6,7 +6,7 @@ int dummy; #else -/* $Id: compat_fts.c,v 1.12 2016/10/18 23:58:12 schwarze Exp $ */ +/* $Id: compat_fts.c,v 1.14 2017/02/18 12:24:24 schwarze Exp $ */ /* $OpenBSD: fts.c,v 1.56 2016/09/21 04:38:56 guenther Exp $ */ /*- @@ -63,15 +63,9 @@ static FTSENT *fts_sort(FTS *, FTSENT *, int); static unsigned short fts_stat(FTS *, FTSENT *); #define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2]))) -#ifndef O_DIRECTORY -#define O_DIRECTORY 0 -#endif #ifndef O_CLOEXEC #define O_CLOEXEC 0 #endif -#ifndef PATH_MAX -#define PATH_MAX 4096 -#endif #define CLR(opt) (sp->fts_options &= ~(opt)) #define ISSET(opt) (sp->fts_options & (opt)) @@ -84,7 +78,7 @@ fts_open(char * const *argv, int options, FTS *sp; FTSENT *p, *root; int nitems; - FTSENT *parent, *tmp; + FTSENT *parent, *prev; /* Options check. */ if (options & ~FTS_OPTIONMASK) { @@ -117,7 +111,7 @@ fts_open(char * const *argv, int options, parent->fts_level = FTS_ROOTPARENTLEVEL; /* Allocate/initialize root(s). */ - for (root = NULL, nitems = 0; *argv; ++argv, ++nitems) { + for (root = prev = NULL, nitems = 0; *argv; ++argv, ++nitems) { if ((p = fts_alloc(sp, *argv, strlen(*argv))) == NULL) goto mem3; p->fts_level = FTS_ROOTLEVEL; @@ -139,11 +133,10 @@ fts_open(char * const *argv, int options, } else { p->fts_link = NULL; if (root == NULL) - tmp = root = p; - else { - tmp->fts_link = p; - tmp = p; - } + root = p; + else + prev->fts_link = p; + prev = p; } } if (compar && nitems > 1) diff --git a/contrib/mdocml/configure b/contrib/mdocml/configure index 1b8101582822..588cab12bac2 100755 --- a/contrib/mdocml/configure +++ b/contrib/mdocml/configure @@ -1,8 +1,8 @@ #!/bin/sh # -# $Id: configure,v 1.55 2017/01/12 15:45:05 schwarze Exp $ +# $Id: configure,v 1.61 2017/02/18 12:24:24 schwarze Exp $ # -# Copyright (c) 2014, 2015, 2016 Ingo Schwarze +# Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -33,6 +33,8 @@ echo "config.log: writing..." # Initialize all variables here, # such that nothing can leak in from the environment. +SOURCEDIR=`dirname "$0"` + MANPATH_DEFAULT="/usr/share/man:/usr/X11R6/man:/usr/local/man" OSNAME= UTF8_LOCALE= @@ -44,11 +46,15 @@ LDADD= LDFLAGS= LD_NANOSLEEP= LD_OHASH= +LD_RECVMSG= STATIC="-static" BUILD_CGI=0 +BUILD_CATMAN=0 INSTALL_LIBMANDOC=0 +HAVE_CMSG= +HAVE_CMSG_XPG42=0 HAVE_DIRENT_NAMLEN= HAVE_EFTYPE= HAVE_ENDIAN= @@ -61,11 +67,13 @@ HAVE_ISBLANK= HAVE_MKDTEMP= HAVE_NANOSLEEP= HAVE_NTOHL= +HAVE_O_DIRECTORY= HAVE_OHASH= HAVE_PATH_MAX= HAVE_PLEDGE= HAVE_PROGNAME= HAVE_REALLOCARRAY= +HAVE_RECVMSG= HAVE_REWB_BSD= HAVE_REWB_SYSV= HAVE_SANDBOX_INIT= @@ -93,6 +101,7 @@ HTDOCDIR= CGIBINDIR= BINM_APROPOS="apropos" +BINM_CATMAN="catman" BINM_MAKEWHATIS="makewhatis" BINM_MAN="man" BINM_SOELIM="soelim" @@ -109,6 +118,7 @@ INSTALL_PROGRAM= INSTALL_LIB= INSTALL_MAN= INSTALL_DATA= +LN="ln -f" # --- manual settings from configure.local ----------------------------- @@ -148,7 +158,8 @@ ${1}${3}: testing... ${COMP} -o test-${1} test-${1}.c ${3} __HEREDOC__ - if ${COMP} -o "test-${1}" "test-${1}.c" ${3} 1>&3 2>&3; then + if ${COMP} -o "test-${1}" "${SOURCEDIR}/test-${1}.c" ${3} 1>&3 2>&3 + then echo "${1}${3}: ${CC} succeeded" 1>&3 else echo "${1}${3}: ${CC} failed with $?" 1>&3 @@ -211,6 +222,7 @@ runtest getsubopt GETSUBOPT || true runtest isblank ISBLANK || true runtest mkdtemp MKDTEMP || true runtest ntohl NTOHL || true +runtest O_DIRECTORY O_DIRECTORY || true runtest PATH_MAX PATH_MAX || true runtest pledge PLEDGE || true runtest sandbox_init SANDBOX_INIT || true @@ -266,6 +278,36 @@ if [ "${HAVE_NANOSLEEP}" -eq 0 ]; then exit 1 fi +if [ ${BUILD_CATMAN} -gt 0 ]; then + # --- recvmsg --- + if [ -n "${LD_RECVMSG}" ]; then + runtest recvmsg RECVMSG "${LD_RECVMSG}" || true + elif singletest recvmsg RECVMSG; then + : + elif runtest recvmsg RECVMSG "-lsocket"; then + LD_RECVMSG="-lsocket" + fi + if [ "${HAVE_RECVMSG}" -eq 0 ]; then + echo "FATAL: recvmsg: no" 1>&2 + echo "FATAL: recvmsg: no" 1>&3 + echo "Without recvmsg(2), you cannot BUILD_CATMAN." 1>&2 + exit 1 + fi + + # --- cmsg --- + if singletest cmsg CMSG; then + : + elif runtest cmsg CMSG "-D_XPG4_2"; then + HAVE_CMSG_XPG42=1 + fi + if [ "${HAVE_CMSG}" -eq 0 ]; then + echo "FATAL: cmsg: no" 1>&2 + echo "FATAL: cmsg: no" 1>&3 + echo "Without CMSG_FIRSTHDR(3), you cannot BUILD_CATMAN." 1>&2 + exit 1 + fi +fi + # --- ohash --- if ismanual ohash OHASH "${HAVE_OHASH}"; then : @@ -281,7 +323,7 @@ if [ "${HAVE_OHASH}" -eq 0 ]; then fi # --- LDADD --- -LDADD="${LDADD} ${LD_NANOSLEEP} ${LD_OHASH} -lz" +LDADD="${LDADD} ${LD_NANOSLEEP} ${LD_RECVMSG} ${LD_OHASH} -lz" echo "LDADD=\"${LDADD}\"" 1>&2 echo "LDADD=\"${LDADD}\"" 1>&3 echo 1>&3 @@ -318,6 +360,7 @@ echo "#define MANPATH_DEFAULT \"${MANPATH_DEFAULT}\"" [ -n "${UTF8_LOCALE}" ] && echo "#define UTF8_LOCALE \"${UTF8_LOCALE}\"" [ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\"" [ ${HAVE_EFTYPE} -eq 0 ] && echo "#define EFTYPE EINVAL" +[ ${HAVE_O_DIRECTORY} -eq 0 ] && echo "#define O_DIRECTORY 0" [ ${HAVE_PATH_MAX} -eq 0 ] && echo "#define PATH_MAX 4096" if [ ${HAVE_ENDIAN} -eq 0 -a ${HAVE_SYS_ENDIAN} -eq 0 ]; then echo "#define be32toh ntohl" @@ -325,6 +368,7 @@ if [ ${HAVE_ENDIAN} -eq 0 -a ${HAVE_SYS_ENDIAN} -eq 0 ]; then fi cat << __HEREDOC__ +#define HAVE_CMSG_XPG42 ${HAVE_CMSG_XPG42} #define HAVE_DIRENT_NAMLEN ${HAVE_DIRENT_NAMLEN} #define HAVE_ENDIAN ${HAVE_ENDIAN} #define HAVE_ERR ${HAVE_ERR} @@ -354,6 +398,7 @@ cat << __HEREDOC__ #define HAVE_OHASH ${HAVE_OHASH} #define BINM_APROPOS "${BINM_APROPOS}" +#define BINM_CATMAN "${BINM_CATMAN}" #define BINM_MAKEWHATIS "${BINM_MAKEWHATIS}" #define BINM_MAN "${BINM_MAN}" #define BINM_SOELIM "${BINM_SOELIM}" @@ -428,10 +473,14 @@ exec > Makefile.local [ -z "${INSTALL_DATA}" ] && INSTALL_DATA="${INSTALL} -m 0444" BUILD_TARGETS= -[ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="cgi-build" +[ ${BUILD_CGI} -gt 0 ] && BUILD_TARGETS="man.cgi" +[ ${BUILD_CATMAN} -gt 0 ] && \ + BUILD_TARGETS="${BUILD_TARGETS} mandocd catman" INSTALL_TARGETS= [ ${INSTALL_LIBMANDOC} -gt 0 ] && INSTALL_TARGETS="lib-install" [ ${BUILD_CGI} -gt 0 ] && INSTALL_TARGETS="${INSTALL_TARGETS} cgi-install" +[ ${BUILD_CATMAN} -gt 0 ] && \ + INSTALL_TARGETS="${INSTALL_TARGETS} catman-install" cat << __HEREDOC__ BUILD_TARGETS = ${BUILD_TARGETS} @@ -451,6 +500,7 @@ WWWPREFIX = ${WWWPREFIX} HTDOCDIR = ${HTDOCDIR} CGIBINDIR = ${CGIBINDIR} BINM_APROPOS = ${BINM_APROPOS} +BINM_CATMAN = ${BINM_CATMAN} BINM_MAKEWHATIS = ${BINM_MAKEWHATIS} BINM_MAN = ${BINM_MAN} BINM_SOELIM = ${BINM_SOELIM} @@ -466,6 +516,7 @@ INSTALL_PROGRAM = ${INSTALL_PROGRAM} INSTALL_LIB = ${INSTALL_LIB} INSTALL_MAN = ${INSTALL_MAN} INSTALL_DATA = ${INSTALL_DATA} +LN = ${LN} __HEREDOC__ echo "Makefile.local: written" 1>&2 diff --git a/contrib/mdocml/configure.local.example b/contrib/mdocml/configure.local.example index d5799a5a9e5c..365c700cafa2 100644 --- a/contrib/mdocml/configure.local.example +++ b/contrib/mdocml/configure.local.example @@ -1,6 +1,6 @@ -# $Id: configure.local.example,v 1.22 2016/11/19 15:24:51 schwarze Exp $ +# $Id: configure.local.example,v 1.29 2017/02/18 12:24:24 schwarze Exp $ # -# Copyright (c) 2014, 2015, 2016 Ingo Schwarze +# Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -119,6 +119,15 @@ BINM_WHATIS=mwhatis # default is "whatis" BINM_MAKEWHATIS=mandocdb # default is "makewhatis" BINM_SOELIM=msoelim # default is "soelim" +# Some distributions do not want hardlinks +# between installed binary programs. +# Set the following variable to use symbolic links instead. +# It is also used for links between manual pages. +# It is only used by the install* targets. +# When using this, DESTDIR must be empty or an absolute path. + +LN="ln -sf" # default is "ln -f" + # Before falling back to the bundled version of the ohash(3) hashing # library, autoconfiguration tries the following linker flag to # link against your system version. If you do have ohash(3) on @@ -140,6 +149,12 @@ CFLAGS="${CFLAGS} -I/usr/local/include" LD_NANOSLEEP="-lrt" +# Some platforms may need an additional linker flag for recvmsg(2). +# If none is needed or it is -lsocket, it is autodetected. +# Otherwise, set the following variable. + +LD_RECVMSG="-lsocket" + # Some platforms might need additional linker flags to link against # libmandoc that are not autodetected, though no such cases are # currently known. @@ -212,6 +227,20 @@ WWWPREFIX="/var/www" HTDOCDIR="${WWWPREFIX}/htdocs" CGIBINDIR="${WWWPREFIX}/cgi-bin" +# --- user settings related to catman ---------------------------------- + +# By default, building mandocd(8) and catman(8) is disabled. +# To enable it, use the following line. +# It does not work on SunOS 5.10 because there is no mkdirat(2) +# nor on SunOS 5.9 which also lacks CMSG_LEN(3) and CMSG_SPACE(3). + +BUILD_CATMAN=1 + +# Install catman(8) with a different name. +# See BINM_MAN above for details of how this works. + +BINM_CATMAN=mcatman # default is "catman" + # --- settings that rarely need to be touched -------------------------- # Do not set these variables unless you really need to. @@ -250,6 +279,7 @@ HAVE_GETSUBOPT=0 HAVE_ISBLANK=0 HAVE_MKDTEMP=0 HAVE_NTOHL=0 +HAVE_O_DIRECTORY=0 HAVE_OHASH=0 HAVE_PATH_MAX=0 HAVE_PLEDGE=0 diff --git a/contrib/mdocml/dba.c b/contrib/mdocml/dba.c index bb1539b741e9..ee43933de3bf 100644 --- a/contrib/mdocml/dba.c +++ b/contrib/mdocml/dba.c @@ -1,4 +1,4 @@ -/* $Id: dba.c,v 1.9 2017/01/15 15:28:55 schwarze Exp $ */ +/* $Id: dba.c,v 1.10 2017/02/17 14:43:54 schwarze Exp $ */ /* * Copyright (c) 2016, 2017 Ingo Schwarze * @@ -315,8 +315,8 @@ compare_names(const void *vp1, const void *vp2) const char *cp1, *cp2; int diff; - cp1 = *(char **)vp1; - cp2 = *(char **)vp2; + cp1 = *(const char * const *)vp1; + cp2 = *(const char * const *)vp2; return (diff = *cp2 - *cp1) ? diff : strcasecmp(cp1 + 1, cp2 + 1); } @@ -326,8 +326,8 @@ compare_strings(const void *vp1, const void *vp2) { const char *cp1, *cp2; - cp1 = *(char **)vp1; - cp2 = *(char **)vp2; + cp1 = *(const char * const *)vp1; + cp2 = *(const char * const *)vp2; return strcmp(cp1, cp2); } @@ -502,7 +502,7 @@ compare_entries(const void *vp1, const void *vp2) { const struct macro_entry *ep1, *ep2; - ep1 = *(struct macro_entry **)vp1; - ep2 = *(struct macro_entry **)vp2; + ep1 = *(const struct macro_entry * const *)vp1; + ep2 = *(const struct macro_entry * const *)vp2; return strcmp(ep1->value, ep2->value); } diff --git a/contrib/mdocml/dbm_map.c b/contrib/mdocml/dbm_map.c index d158302bad66..87c085d22ec1 100644 --- a/contrib/mdocml/dbm_map.c +++ b/contrib/mdocml/dbm_map.c @@ -1,4 +1,4 @@ -/* $Id: dbm_map.c,v 1.7 2016/10/22 10:09:27 schwarze Exp $ */ +/* $Id: dbm_map.c,v 1.8 2017/02/17 14:43:54 schwarze Exp $ */ /* * Copyright (c) 2016 Ingo Schwarze * @@ -175,7 +175,7 @@ dbm_getint(int32_t offset) int32_t dbm_addr(const void *p) { - return htobe32((char *)p - dbm_base); + return htobe32((const char *)p - dbm_base); } int diff --git a/contrib/mdocml/eqn_term.c b/contrib/mdocml/eqn_term.c index 5f2818b4052b..435801527450 100644 --- a/contrib/mdocml/eqn_term.c +++ b/contrib/mdocml/eqn_term.c @@ -1,7 +1,7 @@ -/* $Id: eqn_term.c,v 1.8 2015/01/01 15:36:08 schwarze Exp $ */ +/* $Id: eqn_term.c,v 1.9 2017/02/12 14:19:01 schwarze Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons - * Copyright (c) 2014, 2015 Ingo Schwarze + * Copyright (c) 2014, 2015, 2017 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -68,8 +68,10 @@ eqn_box(struct termp *p, const struct eqn_box *bp) if (bp->pos == EQNPOS_SQRT) { term_word(p, "sqrt"); - p->flags |= TERMP_NOSPACE; - eqn_box(p, bp->first); + if (bp->first != NULL) { + p->flags |= TERMP_NOSPACE; + eqn_box(p, bp->first); + } } else if (bp->type == EQN_SUBEXPR) { child = bp->first; eqn_box(p, child); @@ -93,7 +95,8 @@ eqn_box(struct termp *p, const struct eqn_box *bp) } } else { child = bp->first; - if (bp->type == EQN_MATRIX && child->type == EQN_LIST) + if (bp->type == EQN_MATRIX && + child != NULL && child->type == EQN_LIST) child = child->first; while (child != NULL) { eqn_box(p, diff --git a/contrib/mdocml/gmdiff b/contrib/mdocml/gmdiff index 8d24fa76cad9..278ce7491f87 100644 --- a/contrib/mdocml/gmdiff +++ b/contrib/mdocml/gmdiff @@ -19,7 +19,7 @@ if [ `id -u` -eq 0 ]; then fi if [ $# -eq 0 ]; then - echo "usage: $0 -h manual_source_file ..." + echo "usage: $0 [-h] manual_source_file ..." exit 1 fi @@ -33,7 +33,7 @@ else EQN="eqn -Tascii" ROFF="groff -ww -Tascii -P -c" fi -MOPT="-Werror $MOPT" +MOPT="-Werror -Tascii $MOPT" while [ -n "$1" ]; do file=$1 diff --git a/contrib/mdocml/html.c b/contrib/mdocml/html.c index 24fd6f471f6e..40f2cc076bf9 100644 --- a/contrib/mdocml/html.c +++ b/contrib/mdocml/html.c @@ -1,4 +1,4 @@ -/* $Id: html.c,v 1.200 2017/01/21 02:29:57 schwarze Exp $ */ +/* $Id: html.c,v 1.207 2017/02/05 20:22:04 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2011-2015, 2017 Ingo Schwarze @@ -65,7 +65,7 @@ static const struct htmldata htmltags[TAG_MAX] = { {"br", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL}, {"a", 0}, {"table", HTML_NLALL | HTML_INDENT}, - {"tbody", HTML_NLALL | HTML_INDENT}, + {"colgroup", HTML_NLALL | HTML_INDENT}, {"col", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL}, {"tr", HTML_NLALL | HTML_INDENT}, {"td", HTML_NLAROUND}, @@ -76,6 +76,8 @@ static const struct htmldata htmltags[TAG_MAX] = { {"dt", HTML_NLAROUND}, {"dd", HTML_NLAROUND | HTML_INDENT}, {"pre", HTML_NLALL | HTML_NOINDENT}, + {"var", 0}, + {"cite", 0}, {"b", 0}, {"i", 0}, {"code", 0}, @@ -114,7 +116,6 @@ static const char *const roffscales[SCALE_MAX] = { static void a2width(const char *, struct roffsu *); static void print_byte(struct html *, char); -static void print_endline(struct html *); static void print_endword(struct html *); static void print_indent(struct html *); static void print_word(struct html *, const char *); @@ -133,7 +134,7 @@ html_alloc(const struct manoutput *outopts) h = mandoc_calloc(1, sizeof(struct html)); - h->tags.head = NULL; + h->tag = NULL; h->style = outopts->style; h->base_man = outopts->man; h->base_includes = outopts->includes; @@ -151,8 +152,8 @@ html_free(void *p) h = (struct html *)p; - while ((tag = h->tags.head) != NULL) { - h->tags.head = tag->next; + while ((tag = h->tag) != NULL) { + h->tag = tag->next; free(tag); } @@ -450,19 +451,19 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...) char numbuf[16]; struct tag *t; const char *attr; - char *s; + char *arg1, *arg2; double v; int i, have_style, tflags; tflags = htmltags[tag].flags; - /* Push this tags onto the stack of open scopes. */ + /* Push this tag onto the stack of open scopes. */ if ((tflags & HTML_NOSTACK) == 0) { t = mandoc_malloc(sizeof(struct tag)); t->tag = tag; - t->next = h->tags.head; - h->tags.head = t; + t->next = h->tag; + h->tag = t; } else t = NULL; @@ -495,12 +496,14 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...) have_style = 0; while (*fmt != '\0') { if (*fmt == 's') { - print_word(h, " style=\""); have_style = 1; fmt++; break; } - s = va_arg(ap, char *); + + /* Parse a non-style attribute and its arguments. */ + + arg1 = va_arg(ap, char *); switch (*fmt++) { case 'c': attr = "class"; @@ -512,23 +515,31 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...) attr = "id"; break; case '?': - attr = s; - s = va_arg(ap, char *); + attr = arg1; + arg1 = va_arg(ap, char *); break; default: abort(); } + arg2 = NULL; + if (*fmt == 'M') + arg2 = va_arg(ap, char *); + if (arg1 == NULL) + continue; + + /* Print the non-style attributes. */ + print_byte(h, ' '); print_word(h, attr); print_byte(h, '='); print_byte(h, '"'); switch (*fmt) { case 'M': - print_href(h, s, va_arg(ap, char *), 1); + print_href(h, arg1, arg2, 1); fmt++; break; case 'I': - print_href(h, s, NULL, 0); + print_href(h, arg1, NULL, 0); fmt++; break; case 'R': @@ -536,7 +547,7 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...) fmt++; /* FALLTHROUGH */ default: - print_encode(h, s, NULL, 1); + print_encode(h, arg1, NULL, 1); break; } print_byte(h, '"'); @@ -544,30 +555,37 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...) /* Print out styles. */ - s = NULL; - su = &mysu; while (*fmt != '\0') { + arg1 = NULL; + su = NULL; /* First letter: input argument type. */ switch (*fmt++) { case 'h': i = va_arg(ap, int); + su = &mysu; SCALE_HS_INIT(su, i); break; case 's': - s = va_arg(ap, char *); + arg1 = va_arg(ap, char *); break; case 'u': su = va_arg(ap, struct roffsu *); break; case 'v': i = va_arg(ap, int); + su = &mysu; SCALE_VS_INIT(su, i); break; case 'w': - s = va_arg(ap, char *); - a2width(s, su); + case 'W': + if ((arg2 = va_arg(ap, char *)) == NULL) + break; + su = &mysu; + a2width(arg2, su); + if (fmt[-1] == 'W') + su->scale *= -1.0; break; default: abort(); @@ -598,33 +616,37 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...) attr = "min-width"; break; case '?': - print_word(h, s); - print_byte(h, ':'); - print_byte(h, ' '); - print_word(h, va_arg(ap, char *)); - print_byte(h, ';'); - if (*fmt != '\0') - print_byte(h, ' '); - continue; + attr = arg1; + arg1 = va_arg(ap, char *); + break; default: abort(); } - v = su->scale; - if (su->unit == SCALE_MM && (v /= 100.0) == 0.0) - v = 1.0; - else if (su->unit == SCALE_BU) - v /= 24.0; + if (su == NULL && arg1 == NULL) + continue; + + if (have_style == 1) + print_word(h, " style=\""); + else + print_byte(h, ' '); print_word(h, attr); print_byte(h, ':'); print_byte(h, ' '); - (void)snprintf(numbuf, sizeof(numbuf), "%.2f", v); - print_word(h, numbuf); - print_word(h, roffscales[su->unit]); + if (su != NULL) { + v = su->scale; + if (su->unit == SCALE_MM && (v /= 100.0) == 0.0) + v = 1.0; + else if (su->unit == SCALE_BU) + v /= 24.0; + (void)snprintf(numbuf, sizeof(numbuf), "%.2f", v); + print_word(h, numbuf); + print_word(h, roffscales[su->unit]); + } else + print_word(h, arg1); print_byte(h, ';'); - if (*fmt != '\0') - print_byte(h, ' '); + have_style = 2; } - if (have_style) + if (have_style == 2) print_byte(h, '"'); va_end(ap); @@ -679,7 +701,7 @@ print_ctag(struct html *h, struct tag *tag) if (tflags & HTML_NLAFTER) print_endline(h); - h->tags.head = tag->next; + h->tag = tag->next; free(tag); } @@ -740,7 +762,7 @@ print_tagq(struct html *h, const struct tag *until) { struct tag *tag; - while ((tag = h->tags.head) != NULL) { + while ((tag = h->tag) != NULL) { print_ctag(h, tag); if (until && tag == until) return; @@ -752,7 +774,7 @@ print_stagq(struct html *h, const struct tag *suntil) { struct tag *tag; - while ((tag = h->tags.head) != NULL) { + while ((tag = h->tag) != NULL) { if (suntil && tag == suntil) return; print_ctag(h, tag); @@ -809,7 +831,7 @@ print_byte(struct html *h, char c) * If something was printed on the current output line, end it. * Not to be called right after print_indent(). */ -static void +void print_endline(struct html *h) { if (h->col == 0) diff --git a/contrib/mdocml/html.h b/contrib/mdocml/html.h index 19532c49d93e..5be2f82db64f 100644 --- a/contrib/mdocml/html.h +++ b/contrib/mdocml/html.h @@ -1,4 +1,4 @@ -/* $Id: html.h,v 1.78 2017/01/19 16:59:30 schwarze Exp $ */ +/* $Id: html.h,v 1.83 2017/02/05 20:22:04 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2017 Ingo Schwarze @@ -30,7 +30,7 @@ enum htmltag { TAG_BR, TAG_A, TAG_TABLE, - TAG_TBODY, + TAG_COLGROUP, TAG_COL, TAG_TR, TAG_TD, @@ -41,6 +41,8 @@ enum htmltag { TAG_DT, TAG_DD, TAG_PRE, + TAG_VAR, + TAG_CITE, TAG_B, TAG_I, TAG_CODE, @@ -78,10 +80,6 @@ struct tag { enum htmltag tag; }; -struct tagq { - struct tag *head; -}; - struct html { int flags; #define HTML_NOSPACE (1 << 0) /* suppress next space */ @@ -100,7 +98,7 @@ struct html { size_t col; /* current output byte position */ size_t bufcol; /* current buf byte position */ char buf[80]; /* output buffer */ - struct tagq tags; /* stack of open tags */ + struct tag *tag; /* last open tag */ struct rofftbl tbl; /* current table */ struct tag *tblt; /* current open table scope */ char *base_man; /* base for manpage href */ @@ -127,5 +125,6 @@ void print_tblclose(struct html *); void print_tbl(struct html *, const struct tbl_span *); void print_eqn(struct html *, const struct eqn *); void print_paragraph(struct html *); +void print_endline(struct html *); int html_strlen(const char *); diff --git a/contrib/mdocml/libmandoc.h b/contrib/mdocml/libmandoc.h index 96e726cbce74..04b3a44565f3 100644 --- a/contrib/mdocml/libmandoc.h +++ b/contrib/mdocml/libmandoc.h @@ -1,4 +1,4 @@ -/* $Id: libmandoc.h,v 1.64 2016/07/19 13:36:13 schwarze Exp $ */ +/* $Id: libmandoc.h,v 1.66 2017/02/18 13:43:52 schwarze Exp $ */ /* * Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons * Copyright (c) 2013, 2014, 2015 Ingo Schwarze @@ -43,7 +43,7 @@ void mandoc_msg(enum mandocerr, struct mparse *, int, int, const char *); void mandoc_vmsg(enum mandocerr, struct mparse *, int, int, const char *, ...) - __attribute__((__format__ (printf, 5, 6))); + __attribute__((__format__ (__printf__, 5, 6))); char *mandoc_getarg(struct mparse *, char **, int, int *); char *mandoc_normdate(struct mparse *, char *, int, int); int mandoc_eos(const char *, size_t); @@ -59,7 +59,7 @@ int man_parseln(struct roff_man *, int, char *, int); void man_endparse(struct roff_man *); int preconv_cue(const struct buf *, size_t); -int preconv_encode(struct buf *, size_t *, +int preconv_encode(const struct buf *, size_t *, struct buf *, size_t *, int *); void roff_free(struct roff *); diff --git a/contrib/mdocml/libmdoc.h b/contrib/mdocml/libmdoc.h index 5a6cc3ed9ba8..ac1521410b55 100644 --- a/contrib/mdocml/libmdoc.h +++ b/contrib/mdocml/libmdoc.h @@ -1,4 +1,4 @@ -/* $Id: libmdoc.h,v 1.108 2015/11/07 14:01:16 schwarze Exp $ */ +/* $Id: libmdoc.h,v 1.109 2017/02/16 03:00:23 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2013, 2014, 2015 Ingo Schwarze @@ -70,7 +70,7 @@ struct roff_node *mdoc_block_alloc(struct roff_man *, int, int, int, struct mdoc_arg *); void mdoc_tail_alloc(struct roff_man *, int, int, int); struct roff_node *mdoc_endbody_alloc(struct roff_man *, int, int, int, - struct roff_node *, enum mdoc_endbody); + struct roff_node *); void mdoc_node_relink(struct roff_man *, struct roff_node *); void mdoc_node_validate(struct roff_man *); void mdoc_state(struct roff_man *, struct roff_node *); diff --git a/contrib/mdocml/main.c b/contrib/mdocml/main.c index b64b3be11501..02abaaf79100 100644 --- a/contrib/mdocml/main.c +++ b/contrib/mdocml/main.c @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.279 2017/01/09 17:49:57 schwarze Exp $ */ +/* $Id: main.c,v 1.283 2017/02/17 14:31:52 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze @@ -100,7 +100,7 @@ static void parse(struct curparse *, int, const char *); static void passthrough(const char *, int, int); static pid_t spawn_pager(struct tag_files *); static int toptions(struct curparse *, char *); -static void usage(enum argmode) __attribute__((noreturn)); +static void usage(enum argmode) __attribute__((__noreturn__)); static int woptions(struct curparse *, char *); static const int sec_prios[] = {1, 4, 5, 8, 6, 3, 7, 2, 9}; @@ -113,16 +113,14 @@ int main(int argc, char *argv[]) { struct manconf conf; - struct curparse curp; struct mansearch search; + struct curparse curp; struct tag_files *tag_files; - const char *progname; - char *auxpaths; - char *defos; - unsigned char *uc; struct manpage *res, *resp; - char *conf_file, *defpaths; - const char *sec; + const char *progname, *sec, *thisarg; + char *conf_file, *defpaths, *auxpaths; + char *defos, *oarg; + unsigned char *uc; size_t i, sz; int prio, best_prio; enum outmode outmode; @@ -168,6 +166,7 @@ main(int argc, char *argv[]) memset(&search, 0, sizeof(struct mansearch)); search.outkey = "Nd"; + oarg = NULL; if (strcmp(progname, BINM_MAN) == 0) search.argmode = ARG_NAME; @@ -246,10 +245,7 @@ main(int argc, char *argv[]) auxpaths = optarg; break; case 'O': - search.outkey = optarg; - while (optarg != NULL) - manconf_output(&conf.output, - strsep(&optarg, ",")); + oarg = optarg; break; case 'S': search.arch = optarg; @@ -294,6 +290,21 @@ main(int argc, char *argv[]) } } + if (oarg != NULL) { + if (outmode == OUTMODE_LST) + search.outkey = oarg; + else { + while (oarg != NULL) { + thisarg = oarg; + if (manconf_output(&conf.output, + strsep(&oarg, ","), 0) == 0) + continue; + warnx("-O %s: Bad argument", thisarg); + return (int)MANDOCLEVEL_BADARG; + } + } + } + if (outmode == OUTMODE_FLN || outmode == OUTMODE_LST || !isatty(STDOUT_FILENO)) @@ -736,7 +747,8 @@ parse(struct curparse *curp, int fd, const char *file) if (man == NULL) return; if (man->macroset == MACROSET_MDOC) { - mdoc_validate(man); + if (curp->outtype != OUTT_TREE || !curp->outopts->noval) + mdoc_validate(man); switch (curp->outtype) { case OUTT_HTML: html_mdoc(curp->outdata, man); @@ -759,7 +771,8 @@ parse(struct curparse *curp, int fd, const char *file) } } if (man->macroset == MACROSET_MAN) { - man_validate(man); + if (curp->outtype != OUTT_TREE || !curp->outopts->noval) + man_validate(man); switch (curp->outtype) { case OUTT_HTML: html_man(curp->outdata, man); diff --git a/contrib/mdocml/man.1 b/contrib/mdocml/man.1 index 191bc9594cc1..67b53d70ed43 100644 --- a/contrib/mdocml/man.1 +++ b/contrib/mdocml/man.1 @@ -1,4 +1,4 @@ -.\" $Id: man.1,v 1.20 2017/01/06 01:34:57 schwarze Exp $ +.\" $Id: man.1,v 1.21 2017/01/31 19:44:04 schwarze Exp $ .\" .\" Copyright (c) 1989, 1990, 1993 .\" The Regents of the University of California. All rights reserved. @@ -31,7 +31,7 @@ .\" .\" @(#)man.1 8.2 (Berkeley) 1/2/94 .\" -.Dd $Mdocdate: January 6 2017 $ +.Dd $Mdocdate: January 31 2017 $ .Dt MAN 1 .Os .Sh NAME @@ -427,9 +427,23 @@ in .Fl C in .Nx 1.0 ; -and .Fl s and .Fl S in -.Ox 2.3 . +.Ox 2.3 ; +and +.Fl I , +.Fl K , +.Fl l , +.Fl O , +and +.Fl W +in +.Ox 5.7 . +The +.Fl T +option first appeared in +.At III +and was also added in +.Ox 5.7 . diff --git a/contrib/mdocml/man.options.1 b/contrib/mdocml/man.options.1 new file mode 100644 index 000000000000..9ad608f5e551 --- /dev/null +++ b/contrib/mdocml/man.options.1 @@ -0,0 +1,1326 @@ +.\" $Id: man.options.1,v 1.6 2017/02/02 20:10:51 schwarze Exp $ +.\" +.\" Copyright (c) 2017 Ingo Schwarze +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.\" +.Dd $Mdocdate: February 2 2017 $ +.Dt MAN.OPTIONS 1 +.Os +.Sh NAME +.Nm man.options +.Nd assignment of option letters in manual page utilities +.\" +.\" Sources that occur repeatedly. +.\" Only use if the precise implementation time is unknown. +.\" +.de PWB +.No PWB/UNIX 1.0 Pq July 1, 1977 \\$1 +.. +.de At7 +.At v7 Pq January 1979 \\$1 +.. +.de At3 +.At III Pq June 1980 \\$1 +.. +.de Bx4 +.Bx 4 Pq November 16, 1980 \\$1 +.. +.de At5 +.At V Pq January 1983 \\$1 +.. +.de Bx43 +.Bx 4.3 Pq June 1986 \\$1 +.. +.\" option was present in groff-1.01 as contained in 4.3BSD-Net/2 +.\" and no mention of it could be found in the ChangeLog, +.\" so it's probably older than groff-0.4, where the log started +.de g04 +.No probably before groff-0.4 Pq before July 14, 1990 \\$1 +.. +.de Eaton +.No Eaton Pq before July 7, 1993; 1990/91? \\$1 +.. +.\" man-1.5e was released on July 11, 1998. +.de man15e +.No man-1.5e Pq not before 1993, not after 1998 \\$1 +.. +.\" man-1.5g was released on April 7, 1999. +.de man15g +.No man-1.5g Pq not before 1993, not after 1999 \\$1 +.. +.\" code first seen in the initial import of man-db into CVS , +.\" which was more or less debian man-db-2.3.17 +.\" Colin Watson's first release was 2.3.18 on May 14, 2001 +.\" no clue about it found in ChangeLog-2013, +.\" so it was probably already present before man-db-2.2a4 +.de dbI +.No man-db probably before 2.2a4 Pq before Nov 8, 1994 \\$1 +.. +.\" +.\" -------------------------------------------------------------------- +.\" +.Sh DESCRIPTION +This manual page lists option letters used in many different versions +of the +.Nm man , +.Nm apropos , +.Nm whatis , +.Nm mandoc , +.Nm makewhatis , +.Nm mandb , +.Nm makemandb , +.Nm catman , +and +.Nm manpath +utilities. +Option letters used by +.Nm groff , +.Nm nroff , +.Nm troff , +and +.Nm roff +are also included because beginning with +.At v7 , +many versions of +.Xr man 1 +pass on unrecognized options to these programs. +.Pp +For each option letter, information is first grouped into paragraphs, +each paragraph describing similar functionality and starting with +one line briefly summarizing that functionality. +.Pp +For each program using the letter for that functionality, one line +is provided, giving the name of the program, a colon, the system +where this letter first appeared for this functionality in this +program, optionally a comma and a list of other system versions +introducing the same, a semicolon, and a list of current systems +supporting it. +If a system appears before the semicolon, it is not repeated +afterwards. +.Pp +Entries are sorted by historical precedence, except that obsolete +options are moved to the end. +Dates are commit dates where known, and release dates otherwise. +.Bl -tag -width 3n +.It Fl a +display all matching manual pages +.br +.Nm man : +.Bx 4.3 Tahoe Pq June 1988 , +.Eaton ; +.Ox , Fx , Nx , No man-db , man-1.6 , illumos , Solaris 9-11 +.br +.Nm apropos , whatis , mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +only display items that match all keywords +.br +.Nm apropos : +.No man-db Pq Aug 29, 2007 +.Pp +use all directories and files for +.Xr mandoc.db 5 +.br +.Nm makewhatis : +.Ox 5.6 Pq April 18, 2014 +.Pp +.Bq superseded by Fl T Cm ascii +ASCII output mode +.br +.Nm troff : +.At7 +.br +.Nm groff : +.g04 +.It Fl B +use specified browser +.br +.Nm man : +.No man-1.6 Pq June 24, 2005 +.It Fl b +print a backtrace with each warning or error message +.br +.Nm groff : +.g04 +.Pp +.Bq obsolete hardware +report whether the phototypesetter is busy +.br +.Nm troff : +.At7 +.It Fl C +alternate configuration file +.br +.Nm apropos , whatis : +.Bx 4.4 Lite1 Pq April 22, 1994 , +.No man-db Pq Feb 22, 2003 ; +.Ox , Nx +.br +.Nm man : +.Nx 1.0 Pq Oct 26, 1994 , +.man15e ; +.Ox +.br +.Nm mandb , catman , manpath : +.No man-db Pq Feb 22, 2003 +.br +.Nm makemandb : +.Nx Pq Feb 7, 2012 +.br +.Nm makewhatis : +.Ox 5.6 Pq April 18, 2014 +.br +.Nm mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +.Bq obsolete +enable compatibility mode +.br +.Nm groff : +.No before groff-0.5 Pq before August 3, 1990 +.It Fl c +do not use a pager +.br +.Nm man : +.Bx 4.3 Reno Pq June 1990 ; +.Ox , Nx +.br +.Nm apropos , whatis , mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +process given catpath +.br +.Nm makewhatis : +.Pq not before 1992, not after 1995 +.Pp +recreate databases from scratch +.br +.Nm mandb : +.dbI +.Pp +produce a catpath as opposed to a manpath +.br +.Nm manpath : +.dbI +.Pp +internal option for use by +.Xr catman 1 +.br +.Nm man : +.dbI +.Pp +reformat source page even if cat page exists +.br +.Nm man : +.man15e +.Pp +disable terminal color output in +.Xr grotty 1 +.br +.Nm groff : +.No groff-1.18.0 Pq Oct 4, 2001 +.Pp +recreate nroff versions from SGML sources +.br +.Nm catman : +.No Solaris 9-11 +.Pp +.Bq obsolete +postprocess with +.Xr col 1 +.br +.Nm man : +.At3 , +.At5 +.It Fl D +reset whatever was set with +.Ev MANOPT +.br +.Nm man : +.dbI +.Pp +print debugging info in addition to manual page +.br +.Nm man : +.man15e +.Pp +set default input encoding for +.Xr preconv 1 +.br +.Nm groff : +.No groff-1.20 Pq August 20, 2008 +.Pp +display all files added to +.Xr mandoc.db 5 +.br +.Nm makewhatis : +.Ox 5.6 Pq April 18, 2014 +.It Fl d +define a user-defined string +.br +.Nm groff : +.g04 +.Pp +print debugging information +.br +.Nm man : +.Eaton ; +.Fx , No man-db , man-1.6 , illumos , Solaris 9-11 +.br +.Nm manpath : +.Eaton ; +.Fx , No man-db +.br +.Nm apropos , whatis : +.dbI ; +.Fx +.br +.Nm mandb , catman : +.dbI +.Pp +remove and re-add a file to +.Xr mandoc.db 5 +.br +.Nm makewhatis : +.Ox 2.7 Pq Feb 3, 2000 +.Pp +.Bq superseded by Fl l +interpret arguments as file names +.br +.Nm man : +.At3 , +.At5 +.It Fl E +inhibit all error messages +.br +.Nm groff : +.g04 +.Pp +select output encoding +.br +.Nm man : +.No man-db Pq Dec 23, 2001 +.It Fl e +preprocess with +.Xr eqn 7 +.br +.Nm man : +.At7 +.br +.Nm groff : +.g04 +.Pp +adjust text to left and right margins +.br +.Nm nroff : +.At7 +.Pp +use exact matching +.br +.Nm apropos , whatis : +.dbI +.Pp +restrict search by section extension +.br +.Nm man : +.No man-db-2.3.5 Pq April 21, 1995 +.It Fl F +use alternate font directory +.br +.Nm troff : +.Bx 4.2 Pq September 1983 +.br +.Nm groff : +.g04 +.Pp +preformat only, do not display +.br +.Nm man : +.No man-1.5g Pq April 7, 1999 +.Pp +force searching dirs, do not use index (default) +.br +.Nm man : +.No illumos , Solaris 9-11 +.It Fl f +.Xr whatis 1 +mode +.br +.Nm man : +.Bx4 , +.Eaton ; +.Ox , Fx , No man-db , man-1.6 +.br +.Nm apropos , whatis : +.No man-db Pq Dec 2, 2010 , +.Ox 5.7 Pq August 27, 2014 +.br +.Nm mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +set the default font family +.br +.Nm groff : +.g04 +.Pp +force formatting even if cat page is newer +.br +.Nm catman : +.Fx Pq March 15, 1995 +.Pp +update only the entries for the given file +.br +.Nm mandb : +.No man-db Pq Feb 21, 2003 +.Pp +force rebuilding the database from scratch +.br +.Nm makemandb : +.Nx Pq Feb 7, 2012 +.Pp +locate manual page related to given file name +.br +.Nm man : +.No illumos , Solaris 9-11 +.Pp +.Bq obsolete hardware +do not feed out paper nor stop phototypesetter +.br +.Nm troff : +.At7 +.It Fl G +preprocess with +.Xr grap 1 +.br +.Nm groff : +.No groff-1.16 Pq May 1, 2000 +.It Fl g +produce a global manpath +.br +.Nm manpath : +.No man-db-2.2a7 Pq Nov 16, 1994 +.Pp +preprocess with +.Xr grn 1 +.br +.Nm groff : +.No groff-1.16 Pq Feb 20, 2000 +.Pp +.Bq obsolete hardware +output to a GCOS phototypesetter +.br +.Nm troff : +.At7 +.Pp +.Bq obsolete hardware +output to a DASI 300 terminal in 12-pitch mode +.br +.Nm man : +.PWB +.It Fl H +read hyphenation patterns from the given file +.br +.Nm groff : +.g04 +.Pp +produce HTML output +.br +.Nm man : +.No man-db-1.3.12 to 1.3.17 Pq not before 1996, not after 2001 +.Pp +use program to render HTML files as text +.br +.Nm man : +.No man-1.6 Pq June 24, 2005 +.It Fl h +print a help message and exit +.br +.Nm groff : +.g04 +.br +.Nm man : +.Eaton ; +.Fx , No man-db , man-1.6 +.br +.Nm manpath : +.Eaton ; +.Fx , No man-db +.br +.Nm apropos , whatis , mandb , catman : +.dbI +.Pp +display the SYNOPSIS lines only +.br +.Nm man : +.Bx 4.3 Net/2 Pq August 20, 1991 ; +.Ox , Nx +.br +.Nm apropos , whatis , mandoc : +.Ox 5.7 Pq Sep 3, 2014 +.Pp +turn on HTML formatting +.br +.Nm apropos : +.Nx Pq Apr 2, 2013 +.Pp +.Bq obsolete +replace spaces by tabs in the output +.br +.Nm roff , nroff : +.At7 +.It Fl I +input file search path for +.Xr soelim 1 +.br +.Nm groff : +.No groff-1.12 Pq Sep 11, 1999 +.Pp +respect case when matching manual page names +.br +.Nm man , catman : +.No man-db Pq Apr 21, 2002 +.Pp +input options, in particular default operating system name +.br +.Nm mandoc : +.Ox 5.2 Pq May 24, 2012 +.br +.Nm man , apropos , whatis : +.Ox 5.7 Pq August 27, 2014 +.It Fl i +read standard input after the input files are exhausted +.br +.Nm nroff , troff : +.At7 +.br +.Nm groff : +.g04 +.Pp +ignore case when matching manual page names +.br +.Nm man , catman : +.No man-db Pq Apr 21, 2002 +.Pp +turn on terminal escape code formatting +.br +.Nm apropos : +.Nx Pq March 29, 2013 +.It Fl J +preprocess with +.Xr gideal 1 +.br +.Nm groff : +.No groff-1.22.3 Pq June 17, 2014 +.It Fl j +preprocess with +.Xr chem 1 +.br +.Nm groff : +.No groff-1.22 Pq Jan 22, 2011 +.It Fl K +source code full text search +.br +.Nm man : +.man15e , +.No man-db Pq June 28, 2009 ; +.No Solaris 11 +.Pp +input encoding +.br +.Nm groff : +.No groff-1.20 Pq Dec 31, 2005 +.br +.Nm man , apropos , whatis , mandoc : +.Ox 5.7 Pq Oct 30, 2014 +.It Fl k +.Xr apropos 1 +mode +.br +.Nm man : +.Bx4 , +.Eaton ; +.No POSIX , Ox , Fx , Nx , No man-db , man-1.6 , illumos , Solaris 9-11 +.br +.Nm apropos , whatis , mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +ignore formatting errors +.br +.Nm catman : +.Nx Pq April 26, 1994 +.Pp +preprocess with +.Xr preconv 1 +.br +.Nm groff : +.No groff-1.20 Pq Dec 31, 2005 +.Pp +.Bq obsolete hardware +display on a Tektronix 4014 terminal +.br +.Nm man : +.At7 +.It Fl L +pass argument to the spooler +.br +.Nm groff : +.No groff-0.6 Pq Sep 14, 1990 +.Pp +use alternate +.Xr locale 1 +.br +.Nm man , apropos , whatis : +.No before man-db-2.2a13 Pq before Dec 15, 1994 +.Pp +print list of locales +.br +.Nm manpath : +.Fx Pq Nov 23, 1999 +.Pp +use +.Xr locale 1 +specified in the environment +.br +.Nm catman : +.Fx Pq May 18, 2002 +.It Fl l +spool the output +.br +.Nm groff : +.g04 +.Pp +interpret arguments as file names +.br +.Nm man : +.No before man-2.2a7 Pq before Nov 16, 1994 , +.Ox 5.7 Pq Aug 30, 2014 +.br +.Nm apropos , whatis , mandoc : +.Ox 5.7 Pq Aug 30, 2014 +.Pp +do not trim output to the terminal width +.br +.Nm apropos , whatis : +.No man-db Pq Aug 19, 2007 +.Pp +only parse NAME sections +.br +.Nm makemandb : +.Nx Pq Feb 7, 2012 +.Pp +legacy mode: search Nm,Nd, no context or formatting +.br +.Nm apropos : +.Nx Pq March 29, 2013 +.Pp +list all manual pages matching name within the search path +.br +.Nm man : +.No illumos , Solaris 9-11 +.It Fl M +override manual page search path +.br +.Nm man : +.Bx43 , +.Eaton ; +.Ox , Fx , Nx , No man-db , man-1.6 , illumos , Solaris 9-11 +.br +.Nm apropos , whatis : +.Bx43 , +.No before man-db-2.2a14 Pq before Dec 16, 1994 ; +.Ox , No illumos +.br +.Nm catman : +.dbI ; +.Nx Pq July 27, 1993 , +.No Solaris 9-11 +.br +.Nm mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +prepend to macro file search path +.br +.Nm groff : +.g04 +.Pp +do not show the context of the match +.br +.Nm apropos : +.Nx Pq May 22, 2016 +.It Fl m +specify input macro language +.br +.Nm nroff , troff : +.At7 +.br +.Nm groff : +.g04 +.br +.Nm mandoc : +.Ox 4.8 Pq April 6, 2009 +.Pp +augment manual page search path +.br +.Nm man , apropos , whatis : +.Bx 4.3 Reno Pq June 1990 ; +.Ox , Nx +.br +.Nm catman : +.Nx Pq Apr 4, 1999 +.br +.Nm mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +override operating system +.br +.Nm man : +.Eaton ; +.No man-db , man-1.6 +.br +.Nm apropos , whatis , manpath : +.dbI +.Pp +override architecture +.br +.Nm man : +.Fx Pq Jan 11, 2002 +.Pp +show the context of the match +.br +.Nm apropos : +.Nx Pq May 22, 2016 +.It Fl N +do not allow newlines between +.Xr eqn 7 +delimiters +.br +.Nm groff : +.No groff-1.01 Pq Feb 21, 1991 +.It Fl n +specify a page number for the first page +.br +.Nm troff : +.At7 +.br +.Nm groff : +.g04 +.Pp +.Xr nroff 1 +output mode +.br +.Nm man : +.At7 +.Pp +do not create the +.Xr whatis 1 +database +.br +.Nm catman : +.Nx Pq July 27, 1993 +.Pp +print commands instead of executing them +.br +.Nm catman : +.Fx Pq May 18, 2002 , +.No Solaris 9-11 +.Pp +limit the number of results +.br +.Nm apropos : +.Nx Pq Feb 7, 2012 +.Pp +dry run simulating +.Xr mandoc.db 5 +creation +.br +.Nm makewhatis : +.Ox 5.6 Pq April 18, 2014 +.It Fl O +output options +.br +.Nm mandoc : +.Ox 4.8 Pq Oct 27, 2009 +.br +.Nm man , apropos , whatis : +.Ox 5.7 Pq August 27, 2014 +.It Fl o +select pages by numbers +.br +.Nm nroff , troff : +.At7 +.br +.Nm groff : +.g04 +.Pp +force use of non-localized manual pages +.br +.Nm man : +.Fx Pq June 7, 1999 +.Pp +optimize index for speed and disk space +.br +.Nm makemandb : +.Nx Pq Feb 7, 2012 +.It Fl P +pass argument to postprocessor +.br +.Nm groff : +.No groff-0.6 Pq Sep 14, 1990 +.Pp +use specified pager +.br +.Nm man : +.Eaton ; +.Fx , No man-db , man-1.6 +.Pp +turn on pager formatting +.br +.Nm apropos : +.Nx Pq Apr 2, 2013 +.It Fl p +preprocess with +.Xr pic 1 +.br +.Nm groff : +.g04 +.Pp +use the given list of preprocessors +.br +.Nm man : +.Eaton ; +.Fx , No man-db , man-1.6 +.Pp +dry run, display commands instead of executing them +.br +.Nm catman : +.Nx Pq July 27, 1993 , +.Fx Pq March 15, 1995 to May 18, 2002 , +.No Solaris 9-11 +.Pp +print warnings when building +.Xr mandoc.db 5 +.br +.Nm makewhatis : +.Ox 2.7 Pq April 23, 2000 +.Pp +do not look for deleted manual pages +.br +.Nm mandb : +.No man-db Pq June 28, 2001 +.Pp +print the search path for manual pages +.br +.Nm man : +.Nx Pq June 14 , 2011 +.Pp +turn on pager formatting and pipe through pager +.br +.Nm apropos : +.Nx Pq Feb 7, 2012 +.Pp +.Bq obsolete hardware +set phototypesetter point size +.br +.Nm troff : +.At7 +.It Fl Q +print only fatal error messages +.br +.Nm makemandb : +.Nx Pq Aug 29, 2012 +.Pp +quick mode of +.Xr mandoc.db 5 +creation +.br +.Nm makewhatis : +.Ox 5.6 Pq April 18, 2014 +.It Fl q +invoke the simultaneous input-output mode of the .rd request +.br +.Nm nroff , troff : +.At7 +.Pp +issue no warnings +.br +.Nm manpath : +.Eaton ; +.Fx , No man-db +.br +.Nm mandb : +.dbI +.Pp +print only warnings and errors, no status updates +.br +.Nm makemandb : +.Nx Pq Aug 29, 2012 +.It Fl R +postprocess with +.Xr refer 1 +.br +.Nm groff : +.No groff-1.02 Pq June 2, 1991 +.Pp +recode to the specified encoding +.br +.Nm man : +.No man-db Pq Dec 31, 2007 +.It Fl r +set number register +.br +.Nm nroff , troff : +.At7 +.br +.Nm groff : +.g04 +.Pp +scan for and remove junk files +.br +.Nm catman : +.Fx Pq March 31, 1995 +.Pp +set +.Xr less 1 +prompt +.br +.Nm man : +.No man-db-2.3.5 Pq April 21, 1995 +.Pp +use regular expression matching +.br +.Nm apropos , whatis : +.No man-db-2.3.5 Pq April 21, 1995 +.Pp +turn off formatting +.br +.Nm apropos : +.Nx Pq Feb 10, 2013 +.Pp +check for formatting errors, do not display +.br +.Nm man : +.No illumos , Solaris 9-11 +.It Fl S +manual section search list +.br +.Nm man : +.Eaton ; +.Fx , No man-db , man-1.6 +.Pp +safer mode +.br +.Nm groff : +.No groff-1.10 Pq May 17, 1994 +.Pp +restrict architecture +.br +.Nm man : +.Ox 2.3 Pq March 9, 1998 , +.Nx Pq May 27, 2000 +.br +.Nm apropos : +.Ox 4.5 Pq Dec 24, 2008 , +.Nx Pq May 8, 2009 +.br +.Nm whatis : +.Ox 5.6 Pq April 18, 2014 +.br +.Nm mandoc : +.Ox 5.7 Pq August 27, 2014 +.It Fl s +preprocess with +.Xr soelim 1 +.br +.Nm groff : +.g04 +.Pp +silent mode, do not echo commands +.br +.Nm catman : +.Nx Pq April 26, 1994 +.Pp +restrict section +.br +.Nm makewhatis : +.man15g +.br +.Nm man : +.Ox 2.3 Pq March 9, 1998 , +.Nx Pq June 12, 2000 ; +.No illumos , Solaris 9-11 +.br +.Nm apropos : +.No man-db Pq Nov 16, 2003 , +.Ox 4.5 Pq Dec 24, 2008 , +.Nx Pq May 8, 2009 ; +.No illumos +.br +.Nm whatis : +.No man-db Pq Nov 16, 2003 , +.Ox 5.6 Pq April 18, 2014 ; +.No illumos +.br +.Nm mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +do not look for stray cats +.br +.Nm mandb : +.dbI +.Pp +.Bq SysV compat, recommends Fl S +manual section search list +.br +.Nm man : +.No man-db Pq Jan 1, 2008 +.Pp +.Bq superseded by Fl h +display the SYNOPSIS lines only +.br +.Nm man : +.PWB +.Pp +.Bq obsolete hardware +pause before each page for paper manipulation +.br +.Nm roff : +.At7 +.Pp +.Bq obsolete hardware +.Xr troff 1 +output mode, small format +.br +.Nm man : +.At3 , +.At5 +.It Fl T +select terminal output format +.br +.Nm nroff : +.At7 +.br +.Nm man : +.At3 , +.At5 , +.dbI , +.Ox 5.7 Pq August 27, 2014 +.br +.Nm groff : +.g04 +.br +.Nm mandoc : +.Ox 4.8 Pq April 6, 2009 +.br +.Nm apropos , whatis : +.Ox 5.7 Pq August 27, 2014 +.Pp +use UTF-8 for +.Xr mandoc.db 5 +.br +.Nm makewhatis : +.Ox 5.6 Pq April 18, 2014 +.Pp +.Bq superseded by Fl m +use other macro package +.br +.Nm man , catman : +.No Solaris 9-11 +.It Fl t +.Xr troff 1 +output mode +.br +.Nm man : +.PWB , +.At7 , +.Bx 2 Pq May 10, 1979 , +.At3 , +.At5 , +.Eaton ; +.Fx , No man-db , man-1.6 , illumos , Solaris 9-11 +.br +.Nm catman : +.No Solaris 9-11 +.Pp +preprocess with +.Xr tbl 7 +.br +.Nm groff : +.g04 +.Pp +check manual pages in the hierarchy +.br +.Nm mandb : +.No man-db-1.3.12 to 1.3.17 Pq not before 1996, not after 2001 +.Pp +check files for problems related to +.Xr mandoc.db 5 +.br +.Nm makewhatis : +.Ox 2.7 Pq April 23, 2000 +.It Fl U +unsafe mode +.br +.Nm groff : +.No groff-1.12 Pq Dec 13, 1999 +.It Fl u +update database +.br +.Nm makewhatis : +.Pq not before 1992, not after 1995 +.Pp +create user databases only +.br +.Nm mandb : +.dbI +.Pp +update database cache (requires suid) +.br +.Nm man : +.No before man-db-2.2a10 Pq before Dec 6, 1994 +.Pp +remove files from +.Xr mandoc.db 5 +.br +.Nm makewhatis : +.Ox 3.4 Pq July 9, 2003 +.It Fl V +print the pipeline on stdout instead of executing it +.br +.Nm groff : +.No groff-0.6 Pq Sep 2, 1990 +.Pp +print version information +.br +.Nm man , apropos , whatis , mandb , catman , manpath : +.dbI +.It Fl v +print version number +.br +.Nm groff : +.g04 +.Pp +verbose mode +.br +.Nm catman : +.Fx Pq March 15, 1995 +.br +.Nm makewhatis : +.man15g +.br +.Nm apropos , whatis : +.No man-db Pq Dec 29, 2002 +.Pp +print the name of every parsed file +.br +.Nm makemandb : +.Nx Pq Feb 7, 2012 +.Pp +.Bq obsolete hardware +produce output on the Versatec printer +.br +.Nm man : +.PWB +.It Fl W +disable the named warning +.br +.Nm groff : +.No groff-0.5 Pq August 14, 1990 +.Pp +list pathnames without additional information +.br +.Nm man : +.man15e +.Pp +list pathnames of cat files +.br +.Nm man : +.No man-db Pq Aug 13, 2002 +.Pp +minimum message level to display +.br +.Nm mandoc : +.Ox 4.8 Pq April 6, 2009 +.br +.Nm man , apropos , whatis : +.Ox 5.7 Pq August 27, 2014 +.It Fl w +list pathnames +.br +.Nm man : +.At7 , +.At3 , +.At5 , +.Eaton ; +.Ox , Fx , Nx , No man-db , man-1.6 +.br +.Nm apropos , whatis , mandoc : +.Ox 5.7 Pq August 27, 2014 +.Pp +enable the named warning +.br +.Nm groff : +.No groff-0.5 Pq August 14, 1990 +.Pp +only create the +.Xr whatis 1 +database +.br +.Nm catman : +.Nx Pq July 27, 1993 , +.No Solaris 9-11 +.Pp +use wildcard matching +.br +.Nm apropos , whatis : +.No man-db-2.3.5 Pq April 21, 1995 +.Pp +use manpath obtained from man --path +.br +.Nm makewhatis : +.man15g +.Pp +update the +.Xr whatis 1 +database +.br +.Nm man : +.No illumos +.Pp +.Bq obsolete hardware +wait until the phototypesetter is available +.br +.Nm troff : +.At7 +.It Fl X +display with +.Xr gxditview 1 +.br +.Nm groff : +.No groff-1.06 Pq Sep 1, 1992 +.br +.Nm man : +.dbI +.It Fl y +use the non-compacted version of the macros +.br +.Nm man : +.At3 , +.At5 +.It Fl Z +do not run preprocessors +.br +.Nm groff : +.g04 +.br +.Nm man : +.No man-db-2.2a5 Pq Nov 10, 1994 +.It Fl z +suppress formatted output from +.Xr troff 1 , +print only error messages +.br +.Nm groff : +.g04 +.It Fl 7 +ASCII output mode +.br +.Nm man : +.No man-db-2.3.5 Pq April 21, 1995 +.It Fl \&? +print a help message and exit +.br +.Nm groff : +.g04 +.br +.Nm man , manpath : +.Eaton ; +.Fx , No man-db +.br +.Nm apropos , whatis , mandb , catman : +.dbI +.El +.Pp +Multi-letter options: +.Bl -tag -width Ds +.It Fl hp +.Bq obsolete hardware +output to a Hewlett Packard terminal +.br +.Nm man : +.PWB +.It Fl 12 +.Bq obsolete hardware +use 12-pitch for certain terminals +.br +.Nm man : +.At3 , +.At5 +.It Fl 450 +.Bq obsolete hardware +output to a DASI 450 terminal +.br +.Nm man : +.PWB +.El +.Pp +In +.At v3 , +.Xr man 1 +had no options. +.br +The syntax was: +.Sy man Ar name Op Ar section +.Pp +In +.At v4 , +.br +the syntax changed to: +.Sy man Oo Ar section Oc Op Ar name ... +.Sh AUTHORS +This information was assembled by +.An Ingo Schwarze Aq Mt schwarze@openbsd.org +using +.Bl -bullet -compact +.It +the Unix Archive of the Unix Heritage Society +.It +the CSRG Archive CD-ROMs +.It +the FreeBSD SVN repository +.It +the OpenBSD CVS repository +.It +the NetBSD CVS repository +.It +the GNU roff (groff) git repository +.It +the 4.3BSD-Net/2 groff CHANGES file (Oct 1990 to March 1991) +.It +the 4.3BSD-Net/2 groff ChangeLog file (July 1990 to March 1991) +.It +the man-db CVS and git repositories (since April 2001) +.It +the man-db NEWS file (April 1995 to Dec 2016) +.It +the man-db ChangeLog-2013 file (Nov 1994 to Dec 2013) +.It +release tarballs man-1.5g (July 1998) to man-1.5p (Jan 2005), +man-1.6 (June 2005), and man-1.6a to man-1.6g (Dec 2010) +.It +a makewhatis release tarball without version number from 1995 +.It +the illumos manual pages on the WWW +.It +and Solaris 11, SunOS 5.10, and SunOS 5.9 machines at opencsw.org. +.El diff --git a/contrib/mdocml/man_html.c b/contrib/mdocml/man_html.c index 641e0e336eaf..9151e4c7505e 100644 --- a/contrib/mdocml/man_html.c +++ b/contrib/mdocml/man_html.c @@ -1,4 +1,4 @@ -/* $Id: man_html.c,v 1.129 2017/01/21 01:20:32 schwarze Exp $ */ +/* $Id: man_html.c,v 1.133 2017/02/05 18:15:39 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze @@ -32,21 +32,14 @@ #include "html.h" #include "main.h" -/* TODO: preserve ident widths. */ /* FIXME: have PD set the default vspace width. */ #define INDENT 5 #define MAN_ARGS const struct roff_meta *man, \ const struct roff_node *n, \ - struct mhtml *mh, \ struct html *h -struct mhtml { - int fl; -#define MANH_LITERAL (1 << 0) /* literal context */ -}; - struct htmlman { int (*pre)(MAN_ARGS); int (*post)(MAN_ARGS); @@ -57,6 +50,7 @@ static void print_bvspace(struct html *, static void print_man_head(MAN_ARGS); static void print_man_nodelist(MAN_ARGS); static void print_man_node(MAN_ARGS); +static int fillmode(struct html *, int); static int a2width(const struct roff_node *, struct roffsu *); static int man_B_pre(MAN_ARGS); @@ -74,7 +68,6 @@ static int man_alt_pre(MAN_ARGS); static int man_br_pre(MAN_ARGS); static int man_ign_pre(MAN_ARGS); static int man_in_pre(MAN_ARGS); -static int man_literal_pre(MAN_ARGS); static void man_root_post(MAN_ARGS); static void man_root_pre(MAN_ARGS); @@ -101,8 +94,8 @@ static const struct htmlman mans[MAN_MAX] = { { man_alt_pre, NULL }, /* IR */ { man_alt_pre, NULL }, /* RI */ { man_br_pre, NULL }, /* sp */ - { man_literal_pre, NULL }, /* nf */ - { man_literal_pre, NULL }, /* fi */ + { NULL, NULL }, /* nf */ + { NULL, NULL }, /* fi */ { NULL, NULL }, /* RE */ { man_RS_pre, NULL }, /* RS */ { man_ign_pre, NULL }, /* DT */ @@ -112,8 +105,8 @@ static const struct htmlman mans[MAN_MAX] = { { man_in_pre, NULL }, /* in */ { man_ign_pre, NULL }, /* ft */ { man_OP_pre, NULL }, /* OP */ - { man_literal_pre, NULL }, /* EX */ - { man_literal_pre, NULL }, /* EE */ + { NULL, NULL }, /* EX */ + { NULL, NULL }, /* EE */ { man_UR_pre, NULL }, /* UR */ { NULL, NULL }, /* UE */ { man_ign_pre, NULL }, /* ll */ @@ -146,27 +139,25 @@ print_bvspace(struct html *h, const struct roff_node *n) void html_man(void *arg, const struct roff_man *man) { - struct mhtml mh; struct html *h; struct tag *t; - memset(&mh, 0, sizeof(mh)); h = (struct html *)arg; if ((h->oflags & HTML_FRAGMENT) == 0) { print_gen_decls(h); print_otag(h, TAG_HTML, ""); t = print_otag(h, TAG_HEAD, ""); - print_man_head(&man->meta, man->first, &mh, h); + print_man_head(&man->meta, man->first, h); print_tagq(h, t); print_otag(h, TAG_BODY, ""); } - man_root_pre(&man->meta, man->first, &mh, h); + man_root_pre(&man->meta, man->first, h); t = print_otag(h, TAG_DIV, "c", "manual-text"); - print_man_nodelist(&man->meta, man->first->child, &mh, h); + print_man_nodelist(&man->meta, man->first->child, h); print_tagq(h, t); - man_root_post(&man->meta, man->first, &mh, h); + man_root_post(&man->meta, man->first, h); print_tagq(h, NULL); } @@ -187,7 +178,7 @@ print_man_nodelist(MAN_ARGS) { while (n != NULL) { - print_man_node(man, n, mh, h); + print_man_node(man, n, h); n = n->next; } } @@ -195,25 +186,95 @@ print_man_nodelist(MAN_ARGS) static void print_man_node(MAN_ARGS) { - int child; - struct tag *t; + static int want_fillmode = MAN_fi; + static int save_fillmode; - child = 1; - t = h->tags.head; + struct tag *t; + int child; + + /* + * Handle fill mode switch requests up front, + * they would just cause trouble in the subsequent code. + */ + + switch (n->tok) { + case MAN_nf: + case MAN_EX: + want_fillmode = MAN_nf; + return; + case MAN_fi: + case MAN_EE: + want_fillmode = MAN_fi; + if (fillmode(h, 0) == MAN_fi) + print_otag(h, TAG_BR, ""); + return; + default: + break; + } + + /* Set up fill mode for the upcoming node. */ switch (n->type) { - case ROFFT_TEXT: - if ('\0' == *n->string) { - print_paragraph(h); - return; + case ROFFT_BLOCK: + save_fillmode = 0; + /* Some block macros suspend or cancel .nf. */ + switch (n->tok) { + case MAN_TP: /* Tagged paragraphs */ + case MAN_IP: /* temporarily disable .nf */ + case MAN_HP: /* for the head. */ + save_fillmode = want_fillmode; + /* FALLTHROUGH */ + case MAN_SH: /* Section headers */ + case MAN_SS: /* permanently cancel .nf. */ + want_fillmode = MAN_fi; + /* FALLTHROUGH */ + case MAN_PP: /* These have no head. */ + case MAN_LP: /* They will simply */ + case MAN_P: /* reopen .nf in the body. */ + case MAN_RS: + case MAN_UR: + fillmode(h, MAN_fi); + break; + default: + break; } - if (n->flags & NODE_LINE && (*n->string == ' ' || - (n->prev != NULL && mh->fl & MANH_LITERAL && - ! (h->flags & HTML_NONEWLINE)))) + break; + case ROFFT_TBL: + fillmode(h, MAN_fi); + break; + case ROFFT_ELEM: + /* + * Some in-line macros produce tags and/or text + * in the handler, so they require fill mode to be + * configured up front just like for text nodes. + * For the others, keep the traditional approach + * of doing the same, for now. + */ + fillmode(h, want_fillmode); + break; + case ROFFT_TEXT: + if (fillmode(h, want_fillmode) == MAN_fi && + want_fillmode == MAN_fi && + n->flags & NODE_LINE && *n->string == ' ') print_otag(h, TAG_BR, ""); - print_text(h, n->string); + if (*n->string != '\0') + break; + print_paragraph(h); return; + default: + break; + } + + /* Produce output for this node. */ + + child = 1; + switch (n->type) { + case ROFFT_TEXT: + t = h->tag; + print_text(h, n->string); + break; case ROFFT_EQN: + t = h->tag; print_eqn(h, n->eqn); break; case ROFFT_TBL: @@ -239,29 +300,55 @@ print_man_node(MAN_ARGS) * the "meta" table state. This will be reopened on the * next table element. */ - if (h->tblt) { + if (h->tblt) print_tblclose(h); - t = h->tags.head; - } + + t = h->tag; if (mans[n->tok].pre) - child = (*mans[n->tok].pre)(man, n, mh, h); + child = (*mans[n->tok].pre)(man, n, h); + + /* Some block macros resume .nf in the body. */ + if (save_fillmode && n->type == ROFFT_BODY) + want_fillmode = save_fillmode; + break; } if (child && n->child) - print_man_nodelist(man, n->child, mh, h); + print_man_nodelist(man, n->child, h); /* This will automatically close out any font scope. */ print_stagq(h, t); - switch (n->type) { - case ROFFT_EQN: - break; - default: - if (mans[n->tok].post) - (*mans[n->tok].post)(man, n, mh, h); - break; + if (fillmode(h, 0) == MAN_nf && + n->next != NULL && n->next->flags & NODE_LINE) + print_endline(h); +} + +/* + * MAN_nf switches to no-fill mode, MAN_fi to fill mode. + * Other arguments do not switch. + * The old mode is returned. + */ +static int +fillmode(struct html *h, int want) +{ + struct tag *pre; + int had; + + for (pre = h->tag; pre != NULL; pre = pre->next) + if (pre->tag == TAG_PRE) + break; + + had = pre == NULL ? MAN_fi : MAN_nf; + + if (want && want != had) { + if (want == MAN_nf) + print_otag(h, TAG_PRE, ""); + else + print_tagq(h, pre); } + return had; } static int @@ -287,7 +374,6 @@ man_root_pre(MAN_ARGS) mandoc_asprintf(&title, "%s(%s)", man->title, man->msec); t = print_otag(h, TAG_TABLE, "c", "head"); - print_otag(h, TAG_TBODY, ""); tt = print_otag(h, TAG_TR, ""); print_otag(h, TAG_TD, "c", "head-ltitle"); @@ -349,13 +435,8 @@ man_br_pre(MAN_ARGS) static int man_SH_pre(MAN_ARGS) { - if (n->type == ROFFT_BLOCK) { - mh->fl &= ~MANH_LITERAL; - return 1; - } else if (n->type == ROFFT_BODY) - return 1; - - print_otag(h, TAG_H1, "c", "Sh"); + if (n->type == ROFFT_HEAD) + print_otag(h, TAG_H1, "c", "Sh"); return 1; } @@ -363,17 +444,11 @@ static int man_alt_pre(MAN_ARGS) { const struct roff_node *nn; - int i, savelit; + int i; enum htmltag fp; struct tag *t; - if ((savelit = mh->fl & MANH_LITERAL)) - print_otag(h, TAG_BR, ""); - - mh->fl &= ~MANH_LITERAL; - for (i = 0, nn = n->child; nn; nn = nn->next, i++) { - t = NULL; switch (n->tok) { case MAN_BI: fp = i % 2 ? TAG_I : TAG_B; @@ -400,18 +475,14 @@ man_alt_pre(MAN_ARGS) if (i) h->flags |= HTML_NOSPACE; - if (TAG_MAX != fp) + if (fp != TAG_MAX) t = print_otag(h, fp, ""); - print_man_node(man, nn, mh, h); + print_text(h, nn->string); - if (t) + if (fp != TAG_MAX) print_tagq(h, t); } - - if (savelit) - mh->fl |= MANH_LITERAL; - return 0; } @@ -427,13 +498,8 @@ man_SM_pre(MAN_ARGS) static int man_SS_pre(MAN_ARGS) { - if (n->type == ROFFT_BLOCK) { - mh->fl &= ~MANH_LITERAL; - return 1; - } else if (n->type == ROFFT_BODY) - return 1; - - print_otag(h, TAG_H2, "c", "Ss"); + if (n->type == ROFFT_HEAD) + print_otag(h, TAG_H2, "c", "Ss"); return 1; } @@ -469,7 +535,7 @@ man_IP_pre(MAN_ARGS) /* For IP, only print the first header element. */ if (MAN_IP == n->tok && n->child) - print_man_node(man, n->child, mh, h); + print_man_node(man, n->child, h); /* For TP, only print next-line header elements. */ @@ -478,7 +544,7 @@ man_IP_pre(MAN_ARGS) while (NULL != nn && 0 == (NODE_LINE & nn->flags)) nn = nn->next; while (NULL != nn) { - print_man_node(man, nn, mh, h); + print_man_node(man, nn, h); nn = nn->next; } } @@ -551,19 +617,6 @@ man_I_pre(MAN_ARGS) return 1; } -static int -man_literal_pre(MAN_ARGS) -{ - - if (MAN_fi == n->tok || MAN_EE == n->tok) { - print_otag(h, TAG_BR, ""); - mh->fl &= ~MANH_LITERAL; - } else - mh->fl |= MANH_LITERAL; - - return 0; -} - static int man_in_pre(MAN_ARGS) { @@ -610,7 +663,7 @@ man_UR_pre(MAN_ARGS) if (n->next->child != NULL) n = n->next; - print_man_nodelist(man, n->child, mh, h); + print_man_nodelist(man, n->child, h); return 0; } diff --git a/contrib/mdocml/man_term.c b/contrib/mdocml/man_term.c index 672ab4163228..b2732d455891 100644 --- a/contrib/mdocml/man_term.c +++ b/contrib/mdocml/man_term.c @@ -1,7 +1,7 @@ -/* $Id: man_term.c,v 1.188 2017/01/10 13:47:00 schwarze Exp $ */ +/* $Id: man_term.c,v 1.191 2017/02/15 14:10:08 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons - * Copyright (c) 2010-2015 Ingo Schwarze + * Copyright (c) 2010-2015, 2017 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -143,6 +143,7 @@ terminal_man(void *arg, const struct roff_man *man) struct termp *p; struct roff_node *n; struct mtermp mt; + size_t save_defindent; p = (struct termp *)arg; p->overstep = 0; @@ -170,6 +171,7 @@ terminal_man(void *arg, const struct roff_man *man) n = n->next; } } else { + save_defindent = p->defindent; if (p->defindent == 0) p->defindent = 7; term_begin(p, print_man_head, print_man_foot, &man->meta); @@ -177,6 +179,7 @@ terminal_man(void *arg, const struct roff_man *man) if (n != NULL) print_man_nodelist(p, &mt, n, &man->meta); term_end(p); + p->defindent = save_defindent; } } @@ -819,7 +822,8 @@ pre_SH(DECL_ARGS) do { n = n->prev; - } while (n != NULL && termacts[n->tok].flags & MAN_NOTEXT); + } while (n != NULL && n->tok != TOKEN_NONE && + termacts[n->tok].flags & MAN_NOTEXT); if (n == NULL || (n->tok == MAN_SH && n->body->child == NULL)) break; diff --git a/contrib/mdocml/manconf.h b/contrib/mdocml/manconf.h index 782269e7b33d..f5c678e8903f 100644 --- a/contrib/mdocml/manconf.h +++ b/contrib/mdocml/manconf.h @@ -35,6 +35,7 @@ struct manoutput { int fragment; int mdoc; int synopsisonly; + int noval; }; struct manconf { @@ -44,5 +45,5 @@ struct manconf { void manconf_parse(struct manconf *, const char *, char *, char *); -void manconf_output(struct manoutput *, const char *); +int manconf_output(struct manoutput *, const char *, int); void manconf_free(struct manconf *); diff --git a/contrib/mdocml/mandoc.1 b/contrib/mdocml/mandoc.1 index 946955a64c54..45615d5d02ba 100644 --- a/contrib/mdocml/mandoc.1 +++ b/contrib/mdocml/mandoc.1 @@ -1,4 +1,4 @@ -.\" $Id: mandoc.1,v 1.171 2017/01/21 02:32:39 schwarze Exp $ +.\" $Id: mandoc.1,v 1.174 2017/02/10 15:45:28 schwarze Exp $ .\" .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons .\" Copyright (c) 2012, 2014-2017 Ingo Schwarze @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: January 21 2017 $ +.Dd $Mdocdate: February 10 2017 $ .Dt MANDOC 1 .Os .Sh NAME @@ -538,6 +538,8 @@ A closing parenthesis if the node is a closing delimiter. .It A full stop if the node ends a sentence. .It +BROKEN if the node is a block broken by another block. +.It NOSRC if the node is not in the input file, but automatically generated from macros. .It @@ -545,6 +547,17 @@ NOPRT if the node is not supposed to generate output for any output format. .El .El +.Pp +The following +.Fl O +argument is accepted: +.Bl -tag -width Ds +.It Cm noval +Skip validation and show the unvalidated syntax tree. +This can help to find out whether a given behaviour is caused by +the parser or by the validator. +Meta data is not available in this case. +.El .Sh ENVIRONMENT .Bl -tag -width MANPAGER .It Ev MANPAGER @@ -1357,6 +1370,10 @@ it is hard to predict which tab stop position the tab will advance to. Whitespace at the end of input lines is almost never semantically significant \(em but in the odd case where it might be, it is extremely confusing when reviewing and maintaining documents. +.It Sy "new sentence, new line" +.Pq mdoc +A new sentence starts in the middle of a text line. +Start it on a new input line to help formatters produce correct spacing. .It Sy "bad comment style" .Pq roff Comment lines start with a dot, a backslash, and a double-quote character. @@ -1832,6 +1849,19 @@ as if they were a text line. .Xr mdoc 7 , .Xr roff 7 , .Xr tbl 7 +.Sh HISTORY +The +.Nm +utility first appeared in +.Ox 4.8 . +The option +.Fl I +appeared in +.Ox 5.2 , +and +.Fl aCcfhKklMSsw +in +.Ox 5.7 . .Sh AUTHORS .An -nosplit The diff --git a/contrib/mdocml/mandoc.css b/contrib/mdocml/mandoc.css index 162b730749ed..bc4d98281a8d 100644 --- a/contrib/mdocml/mandoc.css +++ b/contrib/mdocml/mandoc.css @@ -1,4 +1,4 @@ -/* $Id: mandoc.css,v 1.13 2017/01/21 02:29:57 schwarze Exp $ */ +/* $Id: mandoc.css,v 1.17 2017/02/05 21:00:43 schwarze Exp $ */ /* * Standard style sheet for mandoc(1) -Thtml and man.cgi(8). */ @@ -91,15 +91,25 @@ dd.It-inset { } dl.Bl-ohang { } dt.It-ohang { } dd.It-ohang { margin-left: 0ex; } -dl.Bl-tag { } -dt.It-tag { } -dd.It-tag { } +dl.Bl-tag { margin-left: 8ex; } +dt.It-tag { float: left; + clear: both; + margin-top: 0ex; + margin-left: -8ex; + padding-right: 2ex; + vertical-align: top; } +dd.It-tag { width: 100%; + margin-top: 0ex; + margin-left: 0ex; + vertical-align: top; + overflow: auto; } table.Bl-column { } tr.It-column { } td.It-column { margin-top: 1em; } -span.Rs { } +cite.Rs { font-style: normal; + font-weight: normal; } span.RsA { } i.RsB { font-weight: normal; } span.RsC { } @@ -124,7 +134,8 @@ table.Nm { } b.Nm { font-style: normal; } b.Fl { font-style: normal; } b.Cm { font-style: normal; } -i.Ar { font-weight: normal; } +var.Ar { font-style: italic; + font-weight: normal; } span.Op { } b.Ic { font-style: normal; } code.Ev { font-style: normal; @@ -138,11 +149,15 @@ span.Lb { } b.In { font-style: normal; } a.In { } b.Fd { font-style: normal; } -i.Ft { font-weight: normal; } +var.Ft { font-style: italic; + font-weight: normal; } b.Fn { font-style: normal; } -i.Fa { font-weight: normal; } -i.Vt { font-weight: normal; } -i.Va { font-weight: normal; } +var.Fa { font-style: italic; + font-weight: normal; } +var.Vt { font-style: italic; + font-weight: normal; } +var.Va { font-style: italic; + font-weight: normal; } code.Dv { font-style: normal; font-weight: normal; font-family: monospace; } @@ -158,6 +173,7 @@ a.Mt { } b.Cd { font-style: normal; } i.Ad { font-weight: normal; } b.Ms { font-style: normal; } +span.St { } a.Ux { } /* Physical markup. */ diff --git a/contrib/mdocml/mandoc.h b/contrib/mdocml/mandoc.h index 2ea64ea0aea0..a80d6ae7b82d 100644 --- a/contrib/mdocml/mandoc.h +++ b/contrib/mdocml/mandoc.h @@ -1,4 +1,4 @@ -/* $Id: mandoc.h,v 1.213 2017/01/09 01:37:03 schwarze Exp $ */ +/* $Id: mandoc.h,v 1.214 2017/01/28 23:30:08 schwarze Exp $ */ /* * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze @@ -134,6 +134,7 @@ enum mandocerr { MANDOCERR_FI_BLANK, /* blank line in fill mode, using .sp */ MANDOCERR_FI_TAB, /* tab in filled text */ MANDOCERR_SPACE_EOL, /* whitespace at end of input line */ + MANDOCERR_EOS, /* new sentence, new line */ MANDOCERR_COMMENT_BAD, /* bad comment style */ MANDOCERR_ESC_BAD, /* invalid escape sequence: esc */ MANDOCERR_STR_UNDEF, /* undefined string, using "": name */ diff --git a/contrib/mdocml/mandoc_aux.h b/contrib/mdocml/mandoc_aux.h index 603cc5a7257c..a2425066c14e 100644 --- a/contrib/mdocml/mandoc_aux.h +++ b/contrib/mdocml/mandoc_aux.h @@ -1,4 +1,4 @@ -/* $Id: mandoc_aux.h,v 1.5 2016/07/19 13:36:13 schwarze Exp $ */ +/* $Id: mandoc_aux.h,v 1.6 2017/02/17 14:31:52 schwarze Exp $ */ /* * Copyright (c) 2009, 2011 Kristaps Dzonsons * Copyright (c) 2014 Ingo Schwarze @@ -17,7 +17,7 @@ */ int mandoc_asprintf(char **, const char *, ...) - __attribute__((__format__ (printf, 2, 3))); + __attribute__((__format__ (__printf__, 2, 3))); void *mandoc_calloc(size_t, size_t); void *mandoc_malloc(size_t); void *mandoc_realloc(void *, size_t); diff --git a/contrib/mdocml/mandoc_char.7 b/contrib/mdocml/mandoc_char.7 index d272080fc1d9..4212ec58bd77 100644 --- a/contrib/mdocml/mandoc_char.7 +++ b/contrib/mdocml/mandoc_char.7 @@ -1,4 +1,4 @@ -.\" $Id: mandoc_char.7,v 1.63 2015/09/02 15:38:35 schwarze Exp $ +.\" $Id: mandoc_char.7,v 1.64 2017/02/05 21:41:21 schwarze Exp $ .\" .\" Copyright (c) 2003 Jason McIntyre .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: September 2 2015 $ +.Dd $Mdocdate: February 5 2017 $ .Dt MANDOC_CHAR 7 .Os .Sh NAME @@ -62,6 +62,30 @@ blue-eyed lorry-driver .Ed .Pp +If a word on a text input line contains a hyphen, a formatter may decide +to insert an output line break after the hyphen if that helps filling +the current output line, but the whole word would overflow the line. +If it is important that the word is not broken across lines in this +way, a zero-width space +.Pq Sq \e& +can be inserted before or after the hyphen. +While +.Xr mandoc 1 +never breaks the output line after hyphens adjacent to a zero-width +space, after any of the other dash- or hyphen-like characters +represented by escape sequences, or after hyphens inside words in +macro arguments, other software may not respect these rules and may +break the line even in such cases. +.Pp +Some +.Xr roff 7 +implementations contains dictionaries allowing to break the line +at syllable boundaries even inside words that contain no hyphens. +Such automatic hyphenation is not supported by +.Xr mandoc 1 , +which only breaks the line at whitespace, and inside words only +after existing hyphens. +.Pp The mathematical minus sign is used for negative numbers or subtraction. It should be written as .Sq \e(mi : diff --git a/contrib/mdocml/mandoc_html.3 b/contrib/mdocml/mandoc_html.3 index 80b1fe69f7cf..3b48eb00426e 100644 --- a/contrib/mdocml/mandoc_html.3 +++ b/contrib/mdocml/mandoc_html.3 @@ -1,4 +1,4 @@ -.\" $Id: mandoc_html.3,v 1.3 2017/01/17 15:32:44 schwarze Exp $ +.\" $Id: mandoc_html.3,v 1.5 2017/01/28 22:36:38 schwarze Exp $ .\" .\" Copyright (c) 2014, 2017 Ingo Schwarze .\" @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: January 17 2017 $ +.Dd $Mdocdate: January 28 2017 $ .Dt MANDOC_HTML 3 .Os .Sh NAME @@ -137,6 +137,9 @@ Most attributes require one .Va char * argument which becomes the value of the attribute. The arguments have to be given in the same order as the attribute letters. +If an argument is +.Dv NULL , +the respective attribute is not written. .Bl -tag -width 1n -offset indent .It Cm c Print a @@ -175,13 +178,15 @@ Print an arbitrary attribute. This format letter requires two .Vt char * arguments, the attribute name and the value. +The name must not be +.Dv NULL . .It Cm s Print a .Cm style attribute. If present, it must be the last format letter. In contrast to the other format letters, this one does not yet -print the value and does not require an argument. +print the value and does not take an argument. Instead, the rest of the format string consists of pairs of argument type letters and style name letters. .El @@ -212,6 +217,13 @@ Requires one argument, interpreted as an .Xr mdoc 7 Ns -style width specifier. +If the argument is +.Dv NULL , +nothing is printed for this pair. +.It Cm W +Similar to +.Cm w , +but makes the width negative by multiplying it with \(mi1. .El .Pp Style name letters decide what to do with the preceding argument: @@ -251,6 +263,8 @@ requires two .Vt char * arguments. The first is the style name, the second its value. +The style name must not be +.Dv NULL . .El .Pp .Fn print_otag @@ -336,5 +350,6 @@ implementation of common mandoc utility functions .An -nosplit The mandoc HTML formatter was written by .An Kristaps Dzonsons Aq Mt kristaps@bsd.lv . -This manual was written by -.An Ingo Schwarze Aq Mt schwarze@openbsd.org . +It is maintained by +.An Ingo Schwarze Aq Mt schwarze@openbsd.org , +who also wrote this manual. diff --git a/contrib/mdocml/mandocd.8 b/contrib/mdocml/mandocd.8 new file mode 100644 index 000000000000..678c7dc34ce3 --- /dev/null +++ b/contrib/mdocml/mandocd.8 @@ -0,0 +1,198 @@ +.\" $Id: mandocd.8,v 1.1 2017/02/06 19:04:21 schwarze Exp $ +.\" +.\" Copyright (c) 2017 Ingo Schwarze +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.\" +.Dd $Mdocdate: February 6 2017 $ +.Dt MANDOCD 8 +.Os +.Sh NAME +.Nm mandocd +.Nd server process to format manual pages in batch mode +.Sh SYNOPSIS +.Nm mandocd +.Op Fl I Cm os Ns = Ns Ar name +.Op Fl T Ar output +.Ar socket_fd +.Sh DESCRIPTION +The +.Nm +utility formats many manual pages without requiring +.Xr fork 2 +and +.Xr exec 3 +overhead in between. +It does not require listing all the manuals to be formatted on the +command line, and it supports writing each formatted manual to its +own file descriptor. +.Pp +This server requires that a connected UNIX domain +.Xr socket 2 +is already present at +.Xr exec 3 +time. +Consequently, it cannot be started from the +.Xr sh 1 +command line because the shell cannot supply such a socket. +Typically, the socket is created by the parent process using +.Xr socketpair 2 +before calling +.Xr fork 2 +and +.Xr exec 3 +on +.Nm . +The parent process will pass the file descriptor number as an argument to +.Xr exec 3 , +formatted as a decimal ASCII-encoded integer. +See +.Xr catman 8 +for a typical implementation of a parent process. +.Pp +.Nm +loops reading one-byte messages with +.Xr recvmsg 2 +from the file descriptor number +.Ar socket_fd . +It ignores the byte read and only uses the out-of-band auxiliary +.Vt struct cmsghdr +control data, typically supplied by the calling process using +.Xr CMSG_FIRSTHDR 3 . +The parent process is expected to pass three file descriptors +with each dummy byte. +The first one is used for +.Xr mdoc 7 +or +.Xr man 7 +input, the second one for formatted output, and the third one +for error output. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl I Cm os Ns = Ns Ar name +Override the default operating system +.Ar name +for the +.Xr mdoc 7 +.Ic Os +and for the +.Xr man 7 +.Ic TH +macro. +.It Fl T Ar output +Output format. +The +.Ar output +argument can be +.Cm ascii , +.Cm utf8 , +or +.Cm html ; +see +.Xr mandoc 1 . +In +.Cm html +output mode, the +.Cm fragment +output option is implied. +Other output options are not supported. +.El +.Pp +After exhausting one input file descriptor, all three file descriptors +are closed before reading the next dummy byte and control message. +.Pp +When a zero-byte message is read, when the +.Ar socket_fd +is closed by the parent process, +or when an error occurs, +.Nm +exits. +.Sh EXIT STATUS +.Ex -std +.Pp +A zero-byte message or a closed +.Ar socket_fd +is considered success. +Possible errors include: +.Bl -bullet +.It +missing, invalid, or excessive +.Xr exec 3 +arguments +.It +.Xr recvmsg 2 +failure, for example due to +.Er EMSGSIZE +.It +missing or unexpected control data, in particular a +.Fa cmsg_level +in the +.Vt struct cmsghdr +that differs from +.Dv SOL_SOCKET , +a +.Fa cmsg_type +that differs from +.Dv SCM_RIGHTS , +or a +.Fa cmsg_len +that is not three times the size of an +.Vt int +.It +invalid file descriptors passed in the +.Xr CMSG_DATA 3 +.It +resource exhaustion, in particular +.Xr dup 2 +or +.Xr malloc 3 +failure +.El +.Pp +Except for memory exhaustion and similar system-level failures, +parsing and formatting errors do not cause +.Nm +to return an error exit status. +Even after severe parsing errors, +.Nm +will simply accept and process the next input file descriptor. +.Sh SEE ALSO +.Xr mandoc 1 , +.Xr mandoc 3 , +.Xr catman 8 +.Sh HISTORY +The +.Nm +utility appeared in version 1.14.1 or the +.Sy mandoc +toolkit. +.Sh AUTHORS +.An -nosplit +The concept was designed and implemented by +.An Michael Stapelberg Aq Mt stapelberg@debian.org . +The +.Xr mandoc 3 +glue needed to make it a stand-alone process was added by +.An Ingo Schwarze Aq Mt schwarze@openbsd.org . +.Sh CAVEATS +If the parsed manual pages contain +.Xr roff 7 +.Pf . Ic so +requests, +.Nm +needs to be started with the current working directory set to the +root of the manual page tree. +Avoid starting it in directories that contain secret files in any +subdirectories, in particular in the user starting it has read +access to these secret files. diff --git a/contrib/mdocml/mandocd.c b/contrib/mdocml/mandocd.c new file mode 100644 index 000000000000..2f6046b730a0 --- /dev/null +++ b/contrib/mdocml/mandocd.c @@ -0,0 +1,285 @@ +/* $Id: mandocd.c,v 1.5 2017/02/17 14:31:52 schwarze Exp $ */ +/* + * Copyright (c) 2017 Michael Stapelberg + * Copyright (c) 2017 Ingo Schwarze + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include "config.h" + +#if HAVE_CMSG_XPG42 +#define _XPG4_2 +#endif + +#include +#include + +#if HAVE_ERR +#include +#endif +#include +#include +#include +#include +#include +#include + +#include "mandoc.h" +#include "roff.h" +#include "mdoc.h" +#include "man.h" +#include "main.h" +#include "manconf.h" + +enum outt { + OUTT_ASCII = 0, + OUTT_UTF8, + OUTT_HTML +}; + +static void process(struct mparse *, enum outt, void *); +static int read_fds(int, int *); +static void usage(void) __attribute__((__noreturn__)); + + +#define NUM_FDS 3 +static int +read_fds(int clientfd, int *fds) +{ + struct msghdr msg; + struct iovec iov[1]; + unsigned char dummy[1]; + struct cmsghdr *cmsg; + int *walk; + int cnt; + + /* Union used for alignment. */ + union { + uint8_t controlbuf[CMSG_SPACE(NUM_FDS * sizeof(int))]; + struct cmsghdr align; + } u; + + memset(&msg, '\0', sizeof(msg)); + msg.msg_control = u.controlbuf; + msg.msg_controllen = sizeof(u.controlbuf); + + /* + * Read a dummy byte - sendmsg cannot send an empty message, + * even if we are only interested in the OOB data. + */ + + iov[0].iov_base = dummy; + iov[0].iov_len = sizeof(dummy); + msg.msg_iov = iov; + msg.msg_iovlen = 1; + + switch (recvmsg(clientfd, &msg, 0)) { + case -1: + warn("recvmsg"); + return -1; + case 0: + return 0; + default: + break; + } + + if ((cmsg = CMSG_FIRSTHDR(&msg)) == NULL) { + warnx("CMSG_FIRSTHDR: missing control message"); + return -1; + } + + if (cmsg->cmsg_level != SOL_SOCKET || + cmsg->cmsg_type != SCM_RIGHTS || + cmsg->cmsg_len != CMSG_LEN(NUM_FDS * sizeof(int))) { + warnx("CMSG_FIRSTHDR: invalid control message"); + return -1; + } + + walk = (int *)CMSG_DATA(cmsg); + for (cnt = 0; cnt < NUM_FDS; cnt++) + fds[cnt] = *walk++; + + return 1; +} + +int +main(int argc, char *argv[]) +{ + struct manoutput options; + struct mparse *parser; + void *formatter; + const char *defos; + const char *errstr; + int clientfd; + int old_stdin; + int old_stdout; + int old_stderr; + int fds[3]; + int state, opt; + enum outt outtype; + + defos = NULL; + outtype = OUTT_ASCII; + while ((opt = getopt(argc, argv, "I:T:")) != -1) { + switch (opt) { + case 'I': + if (strncmp(optarg, "os=", 3) == 0) + defos = optarg + 3; + else { + warnx("-I %s: Bad argument", optarg); + usage(); + } + break; + case 'T': + if (strcmp(optarg, "ascii") == 0) + outtype = OUTT_ASCII; + else if (strcmp(optarg, "utf8") == 0) + outtype = OUTT_UTF8; + else if (strcmp(optarg, "html") == 0) + outtype = OUTT_HTML; + else { + warnx("-T %s: Bad argument", optarg); + usage(); + } + break; + default: + usage(); + } + } + + if (argc > 0) { + argc -= optind; + argv += optind; + } + if (argc != 1) + usage(); + + errstr = NULL; + clientfd = strtonum(argv[0], 3, INT_MAX, &errstr); + if (errstr) + errx(1, "file descriptor %s %s", argv[1], errstr); + + mchars_alloc(); + parser = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1, + MANDOCLEVEL_BADARG, NULL, defos); + + memset(&options, 0, sizeof(options)); + switch (outtype) { + case OUTT_ASCII: + formatter = ascii_alloc(&options); + break; + case OUTT_UTF8: + formatter = utf8_alloc(&options); + break; + case OUTT_HTML: + options.fragment = 1; + formatter = html_alloc(&options); + break; + } + + state = 1; /* work to do */ + fflush(stdout); + fflush(stderr); + if ((old_stdin = dup(STDIN_FILENO)) == -1 || + (old_stdout = dup(STDOUT_FILENO)) == -1 || + (old_stderr = dup(STDERR_FILENO)) == -1) { + warn("dup"); + state = -1; /* error */ + } + + while (state == 1 && (state = read_fds(clientfd, fds)) == 1) { + if (dup2(fds[0], STDIN_FILENO) == -1 || + dup2(fds[1], STDOUT_FILENO) == -1 || + dup2(fds[2], STDERR_FILENO) == -1) { + warn("dup2"); + state = -1; + break; + } + + close(fds[0]); + close(fds[1]); + close(fds[2]); + + process(parser, outtype, formatter); + mparse_reset(parser); + + fflush(stdout); + fflush(stderr); + /* Close file descriptors by restoring the old ones. */ + if (dup2(old_stderr, STDERR_FILENO) == -1 || + dup2(old_stdout, STDOUT_FILENO) == -1 || + dup2(old_stdin, STDIN_FILENO) == -1) { + warn("dup2"); + state = -1; + break; + } + } + + close(clientfd); + switch (outtype) { + case OUTT_ASCII: + case OUTT_UTF8: + ascii_free(formatter); + break; + case OUTT_HTML: + html_free(formatter); + break; + } + mparse_free(parser); + mchars_free(); + return state == -1 ? 1 : 0; +} + +static void +process(struct mparse *parser, enum outt outtype, void *formatter) +{ + struct roff_man *man; + + mparse_readfd(parser, STDIN_FILENO, ""); + mparse_result(parser, &man, NULL); + + if (man == NULL) + return; + + if (man->macroset == MACROSET_MDOC) { + mdoc_validate(man); + switch (outtype) { + case OUTT_ASCII: + case OUTT_UTF8: + terminal_mdoc(formatter, man); + break; + case OUTT_HTML: + html_mdoc(formatter, man); + break; + } + } + if (man->macroset == MACROSET_MAN) { + man_validate(man); + switch (outtype) { + case OUTT_ASCII: + case OUTT_UTF8: + terminal_man(formatter, man); + break; + case OUTT_HTML: + html_man(formatter, man); + break; + } + } +} + +void +usage(void) +{ + fprintf(stderr, "usage: mandocd [-I os=name] [-T output] socket_fd\n"); + exit(1); +} diff --git a/contrib/mdocml/mandocdb.c b/contrib/mdocml/mandocdb.c index 133e73670c10..3b26ca964964 100644 --- a/contrib/mdocml/mandocdb.c +++ b/contrib/mdocml/mandocdb.c @@ -1,4 +1,4 @@ -/* $Id: mandocdb.c,v 1.237 2017/01/11 17:39:53 schwarze Exp $ */ +/* $Id: mandocdb.c,v 1.244 2017/02/17 14:45:55 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2011-2017 Ingo Schwarze @@ -162,7 +162,7 @@ static void putmdockey(const struct mpage *, const struct roff_node *, uint64_t, int); static int render_string(char **, size_t *); static void say(const char *, const char *, ...) - __attribute__((__format__ (printf, 2, 3))); + __attribute__((__format__ (__printf__, 2, 3))); static int set_basedir(const char *, int); static int treescan(void); static size_t utf8(unsigned int, char [7]); @@ -589,7 +589,7 @@ treescan(void) const char *argv[2]; argv[0] = "."; - argv[1] = (char *)NULL; + argv[1] = NULL; f = fts_open((char * const *)argv, FTS_PHYSICAL | FTS_NOCHDIR, fts_compare); @@ -871,6 +871,20 @@ filescan(const char *file) return; } + /* + * In test mode or when the original name is absolute + * but outside our tree, guess the base directory. + */ + + if (op == OP_TEST || (start == buf && *start == '/')) { + if (strncmp(buf, "man/", 4) == 0) + start = buf + 4; + else if ((start = strstr(buf, "/man/")) != NULL) + start += 5; + else + start = buf; + } + /* * First try to guess our directory structure. * If we find a separator, try to look for man* or cat*. @@ -1139,6 +1153,7 @@ mpages_merge(struct dba *dba, struct mparse *mp) if (mlink->dform != FORM_CAT || mlink->fform != FORM_CAT) { mparse_readfd(mp, fd, mlink->file); close(fd); + fd = -1; mparse_result(mp, &man, &sodest); } @@ -1195,34 +1210,43 @@ mpages_merge(struct dba *dba, struct mparse *mp) mpage->title = mandoc_strdup(man->meta.title); } else if (man != NULL && man->macroset == MACROSET_MAN) { man_validate(man); - mpage->form = FORM_SRC; - mpage->sec = mandoc_strdup(man->meta.msec); - mpage->arch = mandoc_strdup(mlink->arch); - mpage->title = mandoc_strdup(man->meta.title); - } else { + if (*man->meta.msec != '\0' || + *man->meta.msec != '\0') { + mpage->form = FORM_SRC; + mpage->sec = mandoc_strdup(man->meta.msec); + mpage->arch = mandoc_strdup(mlink->arch); + mpage->title = mandoc_strdup(man->meta.title); + } else + man = NULL; + } + + assert(mpage->desc == NULL); + if (man == NULL) { mpage->form = FORM_CAT; mpage->sec = mandoc_strdup(mlink->dsec); mpage->arch = mandoc_strdup(mlink->arch); mpage->title = mandoc_strdup(mlink->name); + parse_cat(mpage, fd); + } else if (man->macroset == MACROSET_MDOC) + parse_mdoc(mpage, &man->meta, man->first); + else + parse_man(mpage, &man->meta, man->first); + if (mpage->desc == NULL) { + mpage->desc = mandoc_strdup(mlink->name); + if (warnings) + say(mlink->file, "No one-line description, " + "using filename \"%s\"", mlink->name); } - assert(mpage->desc == NULL); - if (man != NULL && man->macroset == MACROSET_MDOC) - parse_mdoc(mpage, &man->meta, man->first); - else if (man != NULL) - parse_man(mpage, &man->meta, man->first); - else - parse_cat(mpage, fd); - if (mpage->desc == NULL) - mpage->desc = mandoc_strdup(mpage->mlinks->name); - - if (warnings && !use_all) - for (mlink = mpage->mlinks; mlink; - mlink = mlink->next) + for (mlink = mpage->mlinks; + mlink != NULL; + mlink = mlink->next) { + putkey(mpage, mlink->name, NAME_FILE); + if (warnings && !use_all) mlink_check(mpage, mlink); + } dbadd(dba, mpage); - mlink = mpage->mlinks; nextpage: ohash_delete(&strings); @@ -1234,29 +1258,48 @@ static void parse_cat(struct mpage *mpage, int fd) { FILE *stream; - char *line, *p, *title; + struct mlink *mlink; + char *line, *p, *title, *sec; size_t linesz, plen, titlesz; ssize_t len; int offs; - stream = (-1 == fd) ? - fopen(mpage->mlinks->file, "r") : - fdopen(fd, "r"); - if (NULL == stream) { - if (-1 != fd) + mlink = mpage->mlinks; + stream = fd == -1 ? fopen(mlink->file, "r") : fdopen(fd, "r"); + if (stream == NULL) { + if (fd != -1) close(fd); if (warnings) - say(mpage->mlinks->file, "&fopen"); + say(mlink->file, "&fopen"); return; } line = NULL; linesz = 0; + /* Parse the section number from the header line. */ + + while (getline(&line, &linesz, stream) != -1) { + if (*line == '\n') + continue; + if ((sec = strchr(line, '(')) == NULL) + break; + if ((p = strchr(++sec, ')')) == NULL) + break; + free(mpage->sec); + mpage->sec = mandoc_strndup(sec, p - sec); + if (warnings && *mlink->dsec != '\0' && + strcasecmp(mpage->sec, mlink->dsec)) + say(mlink->file, + "Section \"%s\" manual in %s directory", + mpage->sec, mlink->dsec); + break; + } + /* Skip to first blank line. */ - while (getline(&line, &linesz, stream) != -1) - if (*line == '\n') + while (line == NULL || *line != '\n') + if (getline(&line, &linesz, stream) == -1) break; /* @@ -1302,8 +1345,7 @@ parse_cat(struct mpage *mpage, int fd) if (NULL == title || '\0' == *title) { if (warnings) - say(mpage->mlinks->file, - "Cannot find NAME section"); + say(mlink->file, "Cannot find NAME section"); fclose(stream); free(title); return; @@ -1322,8 +1364,8 @@ parse_cat(struct mpage *mpage, int fd) /* Skip to next word. */ ; } else { if (warnings) - say(mpage->mlinks->file, - "No dash in title line"); + say(mlink->file, "No dash in title line, " + "reusing \"%s\" as one-line description", title); p = title; } diff --git a/contrib/mdocml/manpath.c b/contrib/mdocml/manpath.c index 008c59392379..f43ace60694e 100644 --- a/contrib/mdocml/manpath.c +++ b/contrib/mdocml/manpath.c @@ -1,6 +1,6 @@ -/* $Id: manpath.c,v 1.31 2016/07/19 22:40:33 schwarze Exp $ */ +/* $Id: manpath.c,v 1.33 2017/02/10 15:45:28 schwarze Exp $ */ /* - * Copyright (c) 2011, 2014, 2015 Ingo Schwarze + * Copyright (c) 2011, 2014, 2015, 2017 Ingo Schwarze * Copyright (c) 2011 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any @@ -207,7 +207,7 @@ manconf_file(struct manconf *conf, const char *file) *manpath_default = '\0'; break; case 1: /* output */ - manconf_output(&conf->output, cp); + manconf_output(&conf->output, cp, 1); break; default: break; @@ -221,15 +221,17 @@ manconf_file(struct manconf *conf, const char *file) manpath_parseline(&conf->manpath, manpath_default, 0); } -void -manconf_output(struct manoutput *conf, const char *cp) +int +manconf_output(struct manoutput *conf, const char *cp, int fromfile) { const char *const toks[] = { "includes", "man", "paper", "style", - "indent", "width", "fragment", "mdoc" + "indent", "width", "fragment", "mdoc", "noval" }; - size_t len, tok; + const char *errstr; + char *oldval; + size_t len, tok; for (tok = 0; tok < sizeof(toks)/sizeof(toks[0]); tok++) { len = strlen(toks[tok]); @@ -244,41 +246,81 @@ manconf_output(struct manoutput *conf, const char *cp) } } - if (tok < 6 && *cp == '\0') - return; + if (tok < 6 && *cp == '\0') { + warnx("-O %s=?: Missing argument value", toks[tok]); + return -1; + } + if ((tok == 6 || tok == 7) && *cp != '\0') { + warnx("-O %s: Does not take a value: %s", toks[tok], cp); + return -1; + } switch (tok) { case 0: - if (conf->includes == NULL) - conf->includes = mandoc_strdup(cp); - break; + if (conf->includes != NULL) { + oldval = mandoc_strdup(conf->includes); + break; + } + conf->includes = mandoc_strdup(cp); + return 0; case 1: - if (conf->man == NULL) - conf->man = mandoc_strdup(cp); - break; + if (conf->man != NULL) { + oldval = mandoc_strdup(conf->man); + break; + } + conf->man = mandoc_strdup(cp); + return 0; case 2: - if (conf->paper == NULL) - conf->paper = mandoc_strdup(cp); - break; + if (conf->paper != NULL) { + oldval = mandoc_strdup(conf->paper); + break; + } + conf->paper = mandoc_strdup(cp); + return 0; case 3: - if (conf->style == NULL) - conf->style = mandoc_strdup(cp); - break; + if (conf->style != NULL) { + oldval = mandoc_strdup(conf->style); + break; + } + conf->style = mandoc_strdup(cp); + return 0; case 4: - if (conf->indent == 0) - conf->indent = strtonum(cp, 0, 1000, NULL); - break; + if (conf->indent) { + mandoc_asprintf(&oldval, "%zu", conf->indent); + break; + } + conf->indent = strtonum(cp, 0, 1000, &errstr); + if (errstr == NULL) + return 0; + warnx("-O indent=%s is %s", cp, errstr); + return -1; case 5: - if (conf->width == 0) - conf->width = strtonum(cp, 58, 1000, NULL); - break; + if (conf->width) { + mandoc_asprintf(&oldval, "%zu", conf->width); + break; + } + conf->width = strtonum(cp, 58, 1000, &errstr); + if (errstr == NULL) + return 0; + warnx("-O width=%s is %s", cp, errstr); + return -1; case 6: conf->fragment = 1; - break; + return 0; case 7: conf->mdoc = 1; - break; + return 0; + case 8: + conf->noval = 1; + return 0; default: - break; + if (fromfile) + warnx("-O %s: Bad argument", cp); + return -1; } + if (fromfile == 0) + warnx("-O %s=%s: Option already set to %s", + toks[tok], cp, oldval); + free(oldval); + return -1; } diff --git a/contrib/mdocml/mdoc.7 b/contrib/mdocml/mdoc.7 index e28db482db0f..6d95887736a1 100644 --- a/contrib/mdocml/mdoc.7 +++ b/contrib/mdocml/mdoc.7 @@ -1,4 +1,4 @@ -.\" $Id: mdoc.7,v 1.260 2017/01/09 14:10:53 schwarze Exp $ +.\" $Id: mdoc.7,v 1.262 2017/02/16 14:38:12 schwarze Exp $ .\" .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons .\" Copyright (c) 2010, 2011, 2013-2017 Ingo Schwarze @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: January 9 2017 $ +.Dd $Mdocdate: February 16 2017 $ .Dt MDOC 7 .Os .Sh NAME @@ -974,10 +974,8 @@ argument. A columnated list. The .Fl width -argument has no effect; instead, each argument specifies the width -of one column, using either the scaling width syntax described in -.Xr roff 7 -or the string length of the argument. +argument has no effect; instead, the string length of each argument +specifies the width of one column. If the first line of the body of a .Fl column list is not an @@ -3064,6 +3062,8 @@ For many macros, when the leading arguments are opening delimiters, these delimiters are put before the macro scope, and when the trailing arguments are closing delimiters, these delimiters are put after the macro scope. +Spacing is suppressed after opening delimiters +and before closing delimiters. For example, .Pp .D1 Pf \. \&Aq "( [ word ] ) ." @@ -3120,7 +3120,7 @@ renders as: .D1 Fl a ( b | c \*(Ba d ) e .Pp This applies to both opening and closing delimiters, -and also to the middle delimiter: +and also to the middle delimiter, which does not suppress spacing: .Pp .Bl -tag -width Ds -offset indent -compact .It \&| diff --git a/contrib/mdocml/mdoc.c b/contrib/mdocml/mdoc.c index 009496184ab4..5be1e7810d55 100644 --- a/contrib/mdocml/mdoc.c +++ b/contrib/mdocml/mdoc.c @@ -1,7 +1,7 @@ -/* $Id: mdoc.c,v 1.258 2017/01/10 13:47:00 schwarze Exp $ */ +/* $Id: mdoc.c,v 1.260 2017/02/16 03:00:23 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons - * Copyright (c) 2010, 2012-2016 Ingo Schwarze + * Copyright (c) 2010, 2012-2017 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -136,7 +136,7 @@ mdoc_tail_alloc(struct roff_man *mdoc, int line, int pos, int tok) struct roff_node * mdoc_endbody_alloc(struct roff_man *mdoc, int line, int pos, int tok, - struct roff_node *body, enum mdoc_endbody end) + struct roff_node *body) { struct roff_node *p; @@ -145,7 +145,7 @@ mdoc_endbody_alloc(struct roff_man *mdoc, int line, int pos, int tok, p = roff_node_alloc(mdoc, line, pos, ROFFT_BODY, tok); p->body = body; p->norm = body->norm; - p->end = end; + p->end = ENDBODY_SPACE; roff_node_append(mdoc, p); mdoc->next = ROFF_NEXT_SIBLING; return p; @@ -312,6 +312,22 @@ mdoc_ptext(struct roff_man *mdoc, int line, char *buf, int offs) if (mandoc_eos(buf+offs, (size_t)(end-buf-offs))) mdoc->last->flags |= NODE_EOS; + + for (c = buf + offs; c != NULL; c = strchr(c + 1, '.')) { + if (c - buf < offs + 2) + continue; + if (end - c < 4) + break; + if (isalpha((unsigned char)c[-2]) && + isalpha((unsigned char)c[-1]) && + c[1] == ' ' && + isupper((unsigned char)(c[2] == ' ' ? c[3] : c[2])) && + (c[-2] != 'n' || c[-1] != 'c') && + (c[-2] != 'v' || c[-1] != 's')) + mandoc_msg(MANDOCERR_EOS, mdoc->parse, + line, (int)(c - buf), NULL); + } + return 1; } diff --git a/contrib/mdocml/mdoc_html.c b/contrib/mdocml/mdoc_html.c index 3f757d20eb3d..e82451416699 100644 --- a/contrib/mdocml/mdoc_html.c +++ b/contrib/mdocml/mdoc_html.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.260 2017/01/21 02:09:51 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.271 2017/02/16 03:00:23 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze @@ -110,6 +110,7 @@ static int mdoc_skip_pre(MDOC_ARGS); static int mdoc_sm_pre(MDOC_ARGS); static int mdoc_sp_pre(MDOC_ARGS); static int mdoc_ss_pre(MDOC_ARGS); +static int mdoc_st_pre(MDOC_ARGS); static int mdoc_sx_pre(MDOC_ARGS); static int mdoc_sy_pre(MDOC_ARGS); static int mdoc_va_pre(MDOC_ARGS); @@ -155,7 +156,7 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = { {mdoc_ft_pre, NULL}, /* Ot */ {mdoc_pa_pre, NULL}, /* Pa */ {mdoc_ex_pre, NULL}, /* Rv */ - {NULL, NULL}, /* St */ + {mdoc_st_pre, NULL}, /* St */ {mdoc_va_pre, NULL}, /* Va */ {mdoc_vt_pre, NULL}, /* Vt */ {mdoc_xr_pre, NULL}, /* Xr */ @@ -173,7 +174,7 @@ static const struct htmlmdoc mdocs[MDOC_MAX] = { {NULL, NULL}, /* Ac */ {mdoc_quote_pre, mdoc_quote_post}, /* Ao */ {mdoc_quote_pre, mdoc_quote_post}, /* Aq */ - {NULL, NULL}, /* At */ + {mdoc_xx_pre, NULL}, /* At */ {NULL, NULL}, /* Bc */ {mdoc_bf_pre, NULL}, /* Bf */ {mdoc_quote_pre, mdoc_quote_post}, /* Bo */ @@ -349,7 +350,7 @@ print_mdoc_node(MDOC_ARGS) return; child = 1; - t = h->tags.head; + t = h->tag; n->flags &= ~NODE_ENDED; switch (n->type) { @@ -389,7 +390,7 @@ print_mdoc_node(MDOC_ARGS) */ if (h->tblt != NULL) { print_tblclose(h); - t = h->tags.head; + t = h->tag; } assert(h->tblt == NULL); if (mdocs[n->tok].pre && (n->end == ENDBODY_NOT || n->child)) @@ -416,8 +417,6 @@ print_mdoc_node(MDOC_ARGS) (*mdocs[n->tok].post)(meta, n, h); if (n->end != ENDBODY_NOT) n->body->flags |= NODE_ENDED; - if (n->end == ENDBODY_NOSPACE) - h->flags |= HTML_NOSPACE; break; } } @@ -428,7 +427,6 @@ mdoc_root_post(MDOC_ARGS) struct tag *t, *tt; t = print_otag(h, TAG_TABLE, "c", "foot"); - print_otag(h, TAG_TBODY, ""); tt = print_otag(h, TAG_TR, ""); print_otag(h, TAG_TD, "c", "foot-date"); @@ -459,7 +457,6 @@ mdoc_root_pre(MDOC_ARGS) meta->title, meta->msec); t = print_otag(h, TAG_TABLE, "c", "head"); - print_otag(h, TAG_TBODY, ""); tt = print_otag(h, TAG_TR, ""); print_otag(h, TAG_TD, "c", "head-ltitle"); @@ -507,22 +504,18 @@ mdoc_sh_pre(MDOC_ARGS) char *id; switch (n->type) { - case ROFFT_BLOCK: - return 1; + case ROFFT_HEAD: + id = make_id(n); + print_otag(h, TAG_H1, "ci", "Sh", id); + free(id); + break; case ROFFT_BODY: if (n->sec == SEC_AUTHORS) h->flags &= ~(HTML_SPLIT|HTML_NOSPLIT); - return 1; + break; default: break; } - - if ((id = make_id(n)) != NULL) { - print_otag(h, TAG_H1, "ci", "Sh", id); - free(id); - } else - print_otag(h, TAG_H1, "c", "Sh"); - return 1; } @@ -534,12 +527,9 @@ mdoc_ss_pre(MDOC_ARGS) if (n->type != ROFFT_HEAD) return 1; - if ((id = make_id(n)) != NULL) { - print_otag(h, TAG_H2, "ci", "Ss", id); - free(id); - } else - print_otag(h, TAG_H2, "c", "Ss"); - + id = make_id(n); + print_otag(h, TAG_H2, "ci", "Ss", id); + free(id); return 1; } @@ -581,6 +571,7 @@ mdoc_nd_pre(MDOC_ARGS) static int mdoc_nm_pre(MDOC_ARGS) { + struct tag *t; int len; switch (n->type) { @@ -589,8 +580,6 @@ mdoc_nm_pre(MDOC_ARGS) /* FALLTHROUGH */ case ROFFT_ELEM: print_otag(h, TAG_B, "c", "Nm"); - if (n->child == NULL && meta->name != NULL) - print_text(h, meta->name); return 1; case ROFFT_BODY: print_otag(h, TAG_TD, ""); @@ -609,9 +598,10 @@ mdoc_nm_pre(MDOC_ARGS) if (len == 0 && meta->name != NULL) len = html_strlen(meta->name); + t = print_otag(h, TAG_COLGROUP, ""); print_otag(h, TAG_COL, "shw", len); print_otag(h, TAG_COL, ""); - print_otag(h, TAG_TBODY, ""); + print_tagq(h, t); print_otag(h, TAG_TR, ""); return 1; } @@ -656,7 +646,7 @@ mdoc_ns_pre(MDOC_ARGS) static int mdoc_ar_pre(MDOC_ARGS) { - print_otag(h, TAG_I, "c", "Ar"); + print_otag(h, TAG_VAR, "c", "Ar"); return 1; } @@ -671,6 +661,7 @@ static int mdoc_it_pre(MDOC_ARGS) { const struct roff_node *bl; + struct tag *t; const char *cattr; enum mdoc_list type; @@ -738,7 +729,6 @@ mdoc_it_pre(MDOC_ARGS) case LIST_hang: case LIST_inset: case LIST_ohang: - case LIST_tag: switch (n->type) { case ROFFT_HEAD: if (bl->norm->Bl.comp) @@ -749,11 +739,37 @@ mdoc_it_pre(MDOC_ARGS) print_otag(h, TAG_B, "c", cattr); break; case ROFFT_BODY: - if (bl->norm->Bl.width == NULL) + print_otag(h, TAG_DD, "cswl", cattr, + bl->norm->Bl.width); + break; + default: + break; + } + break; + case LIST_tag: + switch (n->type) { + case ROFFT_HEAD: + if (h->style != NULL && !bl->norm->Bl.comp && + (n->parent->prev == NULL || + n->parent->prev->body->child != NULL)) { + t = print_otag(h, TAG_DT, "csWl", + cattr, bl->norm->Bl.width); + print_text(h, "\\ "); + print_tagq(h, t); + t = print_otag(h, TAG_DD, "c", cattr); + print_text(h, "\\ "); + print_tagq(h, t); + } + print_otag(h, TAG_DT, "csWl", cattr, + bl->norm->Bl.width); + break; + case ROFFT_BODY: + if (n->child == NULL) { + print_otag(h, TAG_DD, "css?", cattr, + "width", "auto"); + print_text(h, "\\ "); + } else print_otag(h, TAG_DD, "c", cattr); - else - print_otag(h, TAG_DD, "cswl", cattr, - bl->norm->Bl.width); break; default: break; @@ -782,18 +798,20 @@ mdoc_it_pre(MDOC_ARGS) static int mdoc_bl_pre(MDOC_ARGS) { + struct tag *t; + struct mdoc_bl *bl; const char *cattr; - int i; + size_t i; enum htmltag elemtype; - if (n->type == ROFFT_BODY) { - if (LIST_column == n->norm->Bl.type) - print_otag(h, TAG_TBODY, ""); - return 1; - } + bl = &n->norm->Bl; - if (n->type == ROFFT_HEAD) { - if (LIST_column != n->norm->Bl.type) + switch (n->type) { + case ROFFT_BODY: + return 1; + + case ROFFT_HEAD: + if (bl->type != LIST_column || bl->ncols == 0) return 0; /* @@ -803,14 +821,18 @@ mdoc_bl_pre(MDOC_ARGS) * screen and we want to preserve that behaviour. */ - for (i = 0; i < (int)n->norm->Bl.ncols - 1; i++) - print_otag(h, TAG_COL, "sww", n->norm->Bl.cols[i]); - print_otag(h, TAG_COL, "swW", n->norm->Bl.cols[i]); - + t = print_otag(h, TAG_COLGROUP, ""); + for (i = 0; i < bl->ncols - 1; i++) + print_otag(h, TAG_COL, "sww", bl->cols[i]); + print_otag(h, TAG_COL, "swW", bl->cols[i]); + print_tagq(h, t); return 0; + + default: + break; } - switch (n->norm->Bl.type) { + switch (bl->type) { case LIST_bullet: elemtype = TAG_UL; cattr = "Bl-bullet"; @@ -845,9 +867,11 @@ mdoc_bl_pre(MDOC_ARGS) cattr = "Bl-ohang"; break; case LIST_tag: - elemtype = TAG_DL; cattr = "Bl-tag"; - break; + if (bl->offs) + print_otag(h, TAG_DIV, "cswl", cattr, bl->offs); + print_otag(h, TAG_DL, "cswl", cattr, bl->width); + return 1; case LIST_column: elemtype = TAG_TABLE; cattr = "Bl-column"; @@ -855,12 +879,7 @@ mdoc_bl_pre(MDOC_ARGS) default: abort(); } - - if (n->norm->Bl.offs) - print_otag(h, elemtype, "cswl", cattr, n->norm->Bl.offs); - else - print_otag(h, elemtype, "c", cattr); - + print_otag(h, elemtype, "cswl", cattr, bl->offs); return 1; } @@ -872,6 +891,13 @@ mdoc_ex_pre(MDOC_ARGS) return 1; } +static int +mdoc_st_pre(MDOC_ARGS) +{ + print_otag(h, TAG_SPAN, "c", "St"); + return 1; +} + static int mdoc_em_pre(MDOC_ARGS) { @@ -898,12 +924,9 @@ mdoc_sx_pre(MDOC_ARGS) { char *id; - if ((id = make_id(n)) != NULL) { - print_otag(h, TAG_A, "chR", "Sx", id); - free(id); - } else - print_otag(h, TAG_A, "c", "Sx"); - + id = make_id(n); + print_otag(h, TAG_A, "chR", "Sx", id); + free(id); return 1; } @@ -1069,12 +1092,12 @@ mdoc_fa_pre(MDOC_ARGS) struct tag *t; if (n->parent->tok != MDOC_Fo) { - print_otag(h, TAG_I, "c", "Fa"); + print_otag(h, TAG_VAR, "c", "Fa"); return 1; } for (nn = n->child; nn; nn = nn->next) { - t = print_otag(h, TAG_I, "c", "Fa"); + t = print_otag(h, TAG_VAR, "c", "Fa"); print_text(h, nn->string); print_tagq(h, t); if (nn->next) { @@ -1153,7 +1176,7 @@ mdoc_vt_pre(MDOC_ARGS) } else if (n->type == ROFFT_HEAD) return 0; - print_otag(h, TAG_I, "c", "Vt"); + print_otag(h, TAG_VAR, "c", "Vt"); return 1; } @@ -1161,7 +1184,7 @@ static int mdoc_ft_pre(MDOC_ARGS) { synopsis_pre(h, n); - print_otag(h, TAG_I, "c", "Ft"); + print_otag(h, TAG_VAR, "c", "Ft"); return 1; } @@ -1182,7 +1205,7 @@ mdoc_fn_pre(MDOC_ARGS) ep = strchr(sp, ' '); if (NULL != ep) { - t = print_otag(h, TAG_I, "c", "Ft"); + t = print_otag(h, TAG_VAR, "c", "Ft"); while (ep) { sz = MIN((int)(ep - sp), BUFSIZ - 1); @@ -1208,10 +1231,10 @@ mdoc_fn_pre(MDOC_ARGS) for (n = n->child->next; n; n = n->next) { if (NODE_SYNPRETTY & n->flags) - t = print_otag(h, TAG_I, "css?", "Fa", + t = print_otag(h, TAG_VAR, "css?", "Fa", "white-space", "nowrap"); else - t = print_otag(h, TAG_I, "c", "Fa"); + t = print_otag(h, TAG_VAR, "c", "Fa"); print_text(h, n->string); print_tagq(h, t); if (n->next) { @@ -1419,7 +1442,7 @@ mdoc_ic_pre(MDOC_ARGS) static int mdoc_va_pre(MDOC_ARGS) { - print_otag(h, TAG_I, "c", "Va"); + print_otag(h, TAG_VAR, "c", "Va"); return 1; } @@ -1450,7 +1473,7 @@ mdoc_bf_pre(MDOC_ARGS) else if (FONT_Li == n->norm->Bf.font) cattr = "Li"; else - cattr = "none"; + cattr = "No"; /* * We want this to be inline-formatted, but needs to be div to @@ -1493,7 +1516,7 @@ mdoc_rs_pre(MDOC_ARGS) if (n->prev && SEC_SEE_ALSO == n->sec) print_paragraph(h); - print_otag(h, TAG_SPAN, "c", "Rs"); + print_otag(h, TAG_CITE, "c", "Rs"); return 1; } diff --git a/contrib/mdocml/mdoc_macro.c b/contrib/mdocml/mdoc_macro.c index d4edcea14162..5ab9c412587b 100644 --- a/contrib/mdocml/mdoc_macro.c +++ b/contrib/mdocml/mdoc_macro.c @@ -1,7 +1,7 @@ -/* $Id: mdoc_macro.c,v 1.210 2017/01/10 13:47:00 schwarze Exp $ */ +/* $Id: mdoc_macro.c,v 1.217 2017/02/16 09:47:31 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons - * Copyright (c) 2010, 2012-2016 Ingo Schwarze + * Copyright (c) 2010, 2012-2017 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -50,6 +50,8 @@ static int find_pending(struct roff_man *, int, int, int, struct roff_node *); static int lookup(struct roff_man *, int, int, int, const char *); static int macro_or_word(MACRO_PROT_ARGS, int); +static void break_intermediate(struct roff_node *, + struct roff_node *); static int parse_rest(struct roff_man *, int, int, int *, char *); static int rew_alt(int); static void rew_elem(struct roff_man *, int); @@ -376,6 +378,20 @@ rew_elem(struct roff_man *mdoc, int tok) rew_last(mdoc, n); } +static void +break_intermediate(struct roff_node *n, struct roff_node *breaker) +{ + if (n != breaker && + n->type != ROFFT_BLOCK && n->type != ROFFT_HEAD && + (n->type != ROFFT_BODY || n->end != ENDBODY_NOT)) + n = n->parent; + while (n != breaker) { + if ( ! (n->flags & NODE_VALID)) + n->flags |= NODE_BROKEN; + n = n->parent; + } +} + /* * If there is an open sub-block of the target requiring * explicit close-out, postpone closing out the target until @@ -388,26 +404,26 @@ find_pending(struct roff_man *mdoc, int tok, int line, int ppos, struct roff_node *n; int irc; + if (target->flags & NODE_VALID) + return 0; + irc = 0; for (n = mdoc->last; n != NULL && n != target; n = n->parent) { - if (n->flags & NODE_ENDED) { - if ( ! (n->flags & NODE_VALID)) - n->flags |= NODE_BROKEN; + if (n->flags & NODE_ENDED) continue; - } if (n->type == ROFFT_BLOCK && mdoc_macros[n->tok].flags & MDOC_EXPLICIT) { irc = 1; - n->flags = NODE_BROKEN; + break_intermediate(mdoc->last, target); if (target->type == ROFFT_HEAD) - target->flags = NODE_ENDED; + target->flags |= NODE_ENDED; else if ( ! (target->flags & NODE_ENDED)) { mandoc_vmsg(MANDOCERR_BLK_NEST, mdoc->parse, line, ppos, "%s breaks %s", mdoc_macronames[tok], mdoc_macronames[n->tok]); mdoc_endbody_alloc(mdoc, line, ppos, - tok, target, ENDBODY_NOSPACE); + tok, target); } } } @@ -568,30 +584,34 @@ blk_exp_close(MACRO_PROT_ARGS) endbody = itblk = later = NULL; for (n = mdoc->last; n; n = n->parent) { - if (n->flags & NODE_ENDED) { - if ( ! (n->flags & NODE_VALID)) - n->flags |= NODE_BROKEN; + if (n->flags & NODE_ENDED) continue; - } /* - * Mismatching end macros can never break anything, - * SYNOPSIS name blocks can never be broken, + * Mismatching end macros can never break anything * and we only care about the breaking of BLOCKs. */ - if (body == NULL || - n->tok == MDOC_Nm || - n->type != ROFFT_BLOCK) + if (body == NULL || n->type != ROFFT_BLOCK) continue; + /* + * SYNOPSIS name blocks can not be broken themselves, + * but they do get broken together with a broken child. + */ + + if (n->tok == MDOC_Nm) { + if (later != NULL) + n->flags |= NODE_BROKEN | NODE_ENDED; + continue; + } + if (n->tok == MDOC_It) { itblk = n; continue; } if (atok == n->tok) { - assert(body); /* * Found the start of our own block. @@ -617,7 +637,7 @@ blk_exp_close(MACRO_PROT_ARGS) mdoc_macronames[later->tok]); endbody = mdoc_endbody_alloc(mdoc, line, ppos, - atok, body, ENDBODY_SPACE); + atok, body); if (tok == MDOC_El) itblk->flags |= NODE_ENDED | NODE_BROKEN; @@ -633,15 +653,22 @@ blk_exp_close(MACRO_PROT_ARGS) break; } - /* Explicit blocks close out description lines. */ + /* + * Explicit blocks close out description lines, but + * even those can get broken together with a child. + */ if (n->tok == MDOC_Nd) { - rew_last(mdoc, n); + if (later != NULL) + n->flags |= NODE_BROKEN | NODE_ENDED; + else + rew_last(mdoc, n); continue; } /* Breaking an open sub block. */ + break_intermediate(mdoc->last, body); n->flags |= NODE_BROKEN; if (later == NULL) later = n; @@ -706,15 +733,14 @@ blk_exp_close(MACRO_PROT_ARGS) } if (n != NULL) { + pending = 0; if (ntok != TOKEN_NONE && n->flags & NODE_BROKEN) { target = n; do target = target->parent; while ( ! (target->flags & NODE_ENDED)); - pending = find_pending(mdoc, ntok, line, ppos, - target); - } else - pending = 0; + pending = find_pending(mdoc, ntok, line, ppos, target); + } if ( ! pending) rew_pending(mdoc, n); } @@ -987,7 +1013,7 @@ blk_full(MACRO_PROT_ARGS) /* Close out prior implicit scopes. */ - rew_last(mdoc, n); + rew_pending(mdoc, n); } /* Skip items outside lists. */ diff --git a/contrib/mdocml/mdoc_man.c b/contrib/mdocml/mdoc_man.c index 2c19e15fb8ba..88d39370e8c2 100644 --- a/contrib/mdocml/mdoc_man.c +++ b/contrib/mdocml/mdoc_man.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_man.c,v 1.101 2017/01/11 17:39:53 schwarze Exp $ */ +/* $Id: mdoc_man.c,v 1.104 2017/02/17 19:15:41 schwarze Exp $ */ /* * Copyright (c) 2011-2017 Ingo Schwarze * @@ -639,9 +639,6 @@ print_node(DECL_ARGS) if (ENDBODY_NOT != n->end) n->body->flags |= NODE_ENDED; - - if (ENDBODY_NOSPACE == n->end) - outflags &= ~(MMAN_spc | MMAN_nl); } static int @@ -720,8 +717,7 @@ pre__t(DECL_ARGS) if (n->parent && MDOC_Rs == n->parent->tok && n->parent->norm->Rs.quote_T) { - print_word(""); - putchar('\"'); + print_word("\\(lq"); outflags &= ~MMAN_spc; } else font_push('I'); @@ -735,8 +731,7 @@ post__t(DECL_ARGS) if (n->parent && MDOC_Rs == n->parent->tok && n->parent->norm->Rs.quote_T) { outflags &= ~MMAN_spc; - print_word(""); - putchar('\"'); + print_word("\\(rq"); } else font_pop(); post_percent(meta, n); @@ -1518,7 +1513,7 @@ pre_nm(DECL_ARGS) } if (n->type != ROFFT_ELEM && n->type != ROFFT_HEAD) return 1; - name = n->child ? n->child->string : meta->name; + name = n->child == NULL ? NULL : n->child->string; if (NULL == name) return 0; if (n->type == ROFFT_HEAD) { @@ -1529,8 +1524,6 @@ pre_nm(DECL_ARGS) outflags |= MMAN_nl; } font_push('B'); - if (NULL == n->child) - print_word(meta->name); return 1; } @@ -1544,7 +1537,7 @@ post_nm(DECL_ARGS) break; case ROFFT_HEAD: case ROFFT_ELEM: - if (n->child != NULL || meta->name != NULL) + if (n->child != NULL && n->child->string != NULL) font_pop(); break; default: diff --git a/contrib/mdocml/mdoc_term.c b/contrib/mdocml/mdoc_term.c index dad54c8c44f9..e9ea455a48e8 100644 --- a/contrib/mdocml/mdoc_term.c +++ b/contrib/mdocml/mdoc_term.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.341 2017/01/11 17:39:53 schwarze Exp $ */ +/* $Id: mdoc_term.c,v 1.346 2017/02/17 19:15:41 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2012-2017 Ingo Schwarze @@ -258,6 +258,7 @@ terminal_mdoc(void *arg, const struct roff_man *mdoc) { struct roff_node *n; struct termp *p; + size_t save_defindent; p = (struct termp *)arg; p->overstep = 0; @@ -278,6 +279,7 @@ terminal_mdoc(void *arg, const struct roff_man *mdoc) n = n->next; } } else { + save_defindent = p->defindent; if (p->defindent == 0) p->defindent = 5; term_begin(p, print_mdoc_head, print_mdoc_foot, @@ -290,6 +292,7 @@ terminal_mdoc(void *arg, const struct roff_man *mdoc) print_mdoc_nodelist(p, NULL, &mdoc->meta, n); } term_end(p); + p->defindent = save_defindent; } } @@ -392,14 +395,6 @@ print_mdoc_node(DECL_ARGS) */ if (ENDBODY_NOT != n->end) n->body->flags |= NODE_ENDED; - - /* - * End of line terminating an implicit block - * while an explicit block is still open. - * Continue the explicit block without spacing. - */ - if (ENDBODY_NOSPACE == n->end) - p->flags |= TERMP_NOSPACE; break; } @@ -611,6 +606,7 @@ termp_ll_pre(DECL_ARGS) static int termp_it_pre(DECL_ARGS) { + struct roffsu su; char buf[24]; const struct roff_node *bl, *nn; size_t ncols, dcol; @@ -688,9 +684,12 @@ termp_it_pre(DECL_ARGS) for (i = 0, nn = n->prev; nn->prev && i < (int)ncols; - nn = nn->prev, i++) - offset += dcol + a2width(p, - bl->norm->Bl.cols[i]); + nn = nn->prev, i++) { + SCALE_HS_INIT(&su, + term_strlen(p, bl->norm->Bl.cols[i])); + su.scale /= term_strlen(p, "0"); + offset += term_hspan(p, &su) / 24 + dcol; + } /* * When exceeding the declared number of columns, leave @@ -705,7 +704,9 @@ termp_it_pre(DECL_ARGS) * Use the declared column widths, extended as explained * in the preceding paragraph. */ - width = a2width(p, bl->norm->Bl.cols[i]) + dcol; + SCALE_HS_INIT(&su, term_strlen(p, bl->norm->Bl.cols[i])); + su.scale /= term_strlen(p, "0"); + width = term_hspan(p, &su) / 24 + dcol; break; default: if (NULL == bl->norm->Bl.width) @@ -993,7 +994,7 @@ termp_nm_pre(DECL_ARGS) return 1; } - if (NULL == n->child && NULL == meta->name) + if (n->child == NULL) return 0; if (n->type == ROFFT_HEAD) @@ -1017,8 +1018,6 @@ termp_nm_pre(DECL_ARGS) } term_fontpush(p, TERMFONT_BOLD); - if (NULL == n->child) - term_word(p, meta->name); return 1; } @@ -1715,6 +1714,8 @@ termp_quote_pre(DECL_ARGS) case MDOC_Bq: term_word(p, "["); break; + case MDOC__T: + /* FALLTHROUGH */ case MDOC_Do: case MDOC_Dq: term_word(p, "\\(Lq"); @@ -1729,7 +1730,6 @@ termp_quote_pre(DECL_ARGS) case MDOC_Pq: term_word(p, "("); break; - case MDOC__T: case MDOC_Qo: case MDOC_Qq: term_word(p, "\""); @@ -1772,6 +1772,8 @@ termp_quote_post(DECL_ARGS) case MDOC_Bq: term_word(p, "]"); break; + case MDOC__T: + /* FALLTHROUGH */ case MDOC_Do: case MDOC_Dq: term_word(p, "\\(Rq"); @@ -1788,7 +1790,6 @@ termp_quote_post(DECL_ARGS) case MDOC_Pq: term_word(p, ")"); break; - case MDOC__T: case MDOC_Qo: case MDOC_Qq: term_word(p, "\""); diff --git a/contrib/mdocml/mdoc_validate.c b/contrib/mdocml/mdoc_validate.c index 043145ae1ccc..e58e7a4721a9 100644 --- a/contrib/mdocml/mdoc_validate.c +++ b/contrib/mdocml/mdoc_validate.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_validate.c,v 1.317 2017/01/11 17:39:53 schwarze Exp $ */ +/* $Id: mdoc_validate.c,v 1.318 2017/02/06 03:44:58 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze @@ -1013,6 +1013,16 @@ post_nm(POST_ARGS) (mdoc->lastsec == SEC_NAME && n->child == NULL)) mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse, n->line, n->pos, "Nm"); + + if ((n->type != ROFFT_ELEM && n->type != ROFFT_HEAD) || + (n->child != NULL && n->child->type == ROFFT_TEXT) || + mdoc->meta.name == NULL) + return; + + mdoc->next = ROFF_NEXT_CHILD; + roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name); + mdoc->last->flags |= NODE_NOSRC; + mdoc->last = n; } static void diff --git a/contrib/mdocml/preconv.c b/contrib/mdocml/preconv.c index 1fc137a9640d..08f8df86a61b 100644 --- a/contrib/mdocml/preconv.c +++ b/contrib/mdocml/preconv.c @@ -1,4 +1,4 @@ -/* $Id: preconv.c,v 1.15 2015/10/06 18:32:19 schwarze Exp $ */ +/* $Id: preconv.c,v 1.16 2017/02/18 13:43:52 schwarze Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * Copyright (c) 2014 Ingo Schwarze @@ -26,14 +26,14 @@ #include "libmandoc.h" int -preconv_encode(struct buf *ib, size_t *ii, struct buf *ob, size_t *oi, +preconv_encode(const struct buf *ib, size_t *ii, struct buf *ob, size_t *oi, int *filenc) { - unsigned char *cu; - int nby; - unsigned int accum; + const unsigned char *cu; + int nby; + unsigned int accum; - cu = (unsigned char *)ib->buf + *ii; + cu = (const unsigned char *)ib->buf + *ii; assert(*cu & 0x80); if ( ! (*filenc & MPARSE_UTF8)) @@ -90,7 +90,7 @@ preconv_encode(struct buf *ib, size_t *ii, struct buf *ob, size_t *oi, assert(accum < 0xd800 || accum > 0xdfff); *oi += snprintf(ob->buf + *oi, 11, "\\[u%.4X]", accum); - *ii = (char *)cu - ib->buf; + *ii = (const char *)cu - ib->buf; *filenc &= ~MPARSE_LATIN1; return 1; diff --git a/contrib/mdocml/read.c b/contrib/mdocml/read.c index d20a6098e9e4..3e5d41161a0c 100644 --- a/contrib/mdocml/read.c +++ b/contrib/mdocml/read.c @@ -1,4 +1,4 @@ -/* $Id: read.c,v 1.157 2017/01/09 01:37:03 schwarze Exp $ */ +/* $Id: read.c,v 1.161 2017/02/18 17:29:28 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -48,8 +47,8 @@ #define REPARSE_LIMIT 1000 struct mparse { - struct roff_man *man; /* man parser */ struct roff *roff; /* roff parser (!NULL) */ + struct roff_man *man; /* man parser */ char *sodest; /* filename pointed to by .so */ const char *file; /* filename of current input file */ struct buf *primary; /* buffer currently being parsed */ @@ -177,6 +176,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = { "blank line in fill mode, using .sp", "tab in filled text", "whitespace at end of input line", + "new sentence, new line", "bad comment style", "invalid escape sequence", "undefined string, using \"\"", @@ -602,12 +602,11 @@ static int read_whole_file(struct mparse *curp, const char *file, int fd, struct buf *fb, int *with_mmap) { + struct stat st; gzFile gz; size_t off; ssize_t ssz; - struct stat st; - if (fstat(fd, &st) == -1) err((int)MANDOCLEVEL_SYSERR, "%s", file); @@ -829,13 +828,15 @@ mparse_reset(struct mparse *curp) { roff_reset(curp->roff); roff_man_reset(curp->man); + + free(curp->sodest); + curp->sodest = NULL; + if (curp->secondary) curp->secondary->sz = 0; curp->file_status = MANDOCLEVEL_OK; - - free(curp->sodest); - curp->sodest = NULL; + curp->gzip = 0; } void @@ -843,8 +844,7 @@ mparse_free(struct mparse *curp) { roff_man_free(curp->man); - if (curp->roff) - roff_free(curp->roff); + roff_free(curp->roff); if (curp->secondary) free(curp->secondary->buf); diff --git a/contrib/mdocml/roff.c b/contrib/mdocml/roff.c index 966ed9d53dd9..ad55d320e4d5 100644 --- a/contrib/mdocml/roff.c +++ b/contrib/mdocml/roff.c @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.288 2017/01/12 18:02:20 schwarze Exp $ */ +/* $Id: roff.c,v 1.289 2017/02/17 03:03:03 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons * Copyright (c) 2010-2015, 2017 Ingo Schwarze @@ -1226,15 +1226,22 @@ deroff(char **dest, const struct roff_node *n) /* Skip leading whitespace. */ for (cp = n->string; *cp != '\0'; cp++) { - if (cp[0] == '\\' && strchr(" %&0^|~", cp[1]) != NULL) + if (cp[0] == '\\' && cp[1] != '\0' && + strchr(" %&0^|~", cp[1]) != NULL) cp++; else if ( ! isspace((unsigned char)*cp)) break; } + /* Skip trailing backslash. */ + + sz = strlen(cp); + if (cp[sz - 1] == '\\') + sz--; + /* Skip trailing whitespace. */ - for (sz = strlen(cp); sz; sz--) + for (; sz; sz--) if ( ! isspace((unsigned char)cp[sz-1])) break; @@ -3358,7 +3365,8 @@ roff_strdup(const struct roff *r, const char *p) ssz = 0; while ('\0' != *p) { - if ('\\' != *p && r->xtab && r->xtab[(int)*p].p) { + assert((unsigned int)*p < 128); + if ('\\' != *p && r->xtab && r->xtab[(unsigned int)*p].p) { sz = r->xtab[(int)*p].sz; res = mandoc_realloc(res, ssz + sz + 1); memcpy(res + ssz, r->xtab[(int)*p].p, sz); diff --git a/contrib/mdocml/roff.h b/contrib/mdocml/roff.h index 3039d4e9f536..b87cf132b726 100644 --- a/contrib/mdocml/roff.h +++ b/contrib/mdocml/roff.h @@ -1,4 +1,4 @@ -/* $Id: roff.h,v 1.39 2017/01/10 13:47:00 schwarze Exp $ */ +/* $Id: roff.h,v 1.40 2017/02/16 03:00:23 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze @@ -75,8 +75,7 @@ enum roff_next { */ enum mdoc_endbody { ENDBODY_NOT = 0, - ENDBODY_SPACE, /* Is broken: append a space. */ - ENDBODY_NOSPACE /* Is broken: don't append a space. */ + ENDBODY_SPACE /* Is broken: append a space. */ }; struct roff_node { diff --git a/contrib/mdocml/tag.c b/contrib/mdocml/tag.c index 0fbd2e105978..21ac6b32e4d3 100644 --- a/contrib/mdocml/tag.c +++ b/contrib/mdocml/tag.c @@ -1,4 +1,4 @@ -/* $Id: tag.c,v 1.17 2017/01/09 17:49:58 schwarze Exp $ */ +/* $Id: tag.c,v 1.18 2017/02/17 14:31:52 schwarze Exp $ */ /* * Copyright (c) 2015, 2016 Ingo Schwarze * @@ -38,7 +38,7 @@ struct tag_entry { char s[]; }; -static void tag_signal(int) __attribute__((noreturn)); +static void tag_signal(int) __attribute__((__noreturn__)); static struct ohash tag_data; static struct tag_files tag_files; diff --git a/contrib/mdocml/tbl_html.c b/contrib/mdocml/tbl_html.c index 962d900e3682..4dff29370a51 100644 --- a/contrib/mdocml/tbl_html.c +++ b/contrib/mdocml/tbl_html.c @@ -1,4 +1,4 @@ -/* $Id: tbl_html.c,v 1.19 2017/01/17 01:47:51 schwarze Exp $ */ +/* $Id: tbl_html.c,v 1.20 2017/02/05 18:15:39 schwarze Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2017 Ingo Schwarze @@ -50,6 +50,7 @@ html_tbl_strlen(const char *p, void *arg) static void html_tblopen(struct html *h, const struct tbl_span *sp) { + struct tag *t; int ic; if (h->tbl.cols == NULL) { @@ -61,10 +62,10 @@ html_tblopen(struct html *h, const struct tbl_span *sp) assert(NULL == h->tblt); h->tblt = print_otag(h, TAG_TABLE, "c", "tbl"); + t = print_otag(h, TAG_COLGROUP, ""); for (ic = 0; ic < sp->opts->cols; ic++) print_otag(h, TAG_COL, "shw", h->tbl.cols[ic].width); - - print_otag(h, TAG_TBODY, ""); + print_tagq(h, t); } void diff --git a/contrib/mdocml/term_ps.c b/contrib/mdocml/term_ps.c index 286a89f91a61..696ff2243592 100644 --- a/contrib/mdocml/term_ps.c +++ b/contrib/mdocml/term_ps.c @@ -1,4 +1,4 @@ -/* $Id: term_ps.c,v 1.82 2016/08/10 11:03:43 schwarze Exp $ */ +/* $Id: term_ps.c,v 1.83 2017/02/17 14:31:52 schwarze Exp $ */ /* * Copyright (c) 2010, 2011 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2016 Ingo Schwarze @@ -104,7 +104,7 @@ static void ps_pclose(struct termp *); static void ps_plast(struct termp *); static void ps_pletter(struct termp *, int); static void ps_printf(struct termp *, const char *, ...) - __attribute__((__format__ (printf, 2, 3))); + __attribute__((__format__ (__printf__, 2, 3))); static void ps_putchar(struct termp *, char); static void ps_setfont(struct termp *, enum termfont); static void ps_setwidth(struct termp *, int, int); diff --git a/contrib/mdocml/test-O_DIRECTORY.c b/contrib/mdocml/test-O_DIRECTORY.c new file mode 100644 index 000000000000..e44d51ca4ff7 --- /dev/null +++ b/contrib/mdocml/test-O_DIRECTORY.c @@ -0,0 +1,7 @@ +#include + +int +main(void) +{ + return open(".", O_RDONLY | O_DIRECTORY) == -1; +} diff --git a/contrib/mdocml/test-cmsg.c b/contrib/mdocml/test-cmsg.c new file mode 100644 index 000000000000..b5441f9c82fe --- /dev/null +++ b/contrib/mdocml/test-cmsg.c @@ -0,0 +1,13 @@ +#include +#include + +int +main(void) +{ + struct msghdr msg; + + msg.msg_control = NULL; + msg.msg_controllen = 0; + + return CMSG_FIRSTHDR(&msg) != NULL; +} diff --git a/contrib/mdocml/test-recvmsg.c b/contrib/mdocml/test-recvmsg.c new file mode 100644 index 000000000000..d026c70fb8c7 --- /dev/null +++ b/contrib/mdocml/test-recvmsg.c @@ -0,0 +1,8 @@ +#include +#include + +int +main(void) +{ + return recvmsg(-1, NULL, 0) != -1; +} diff --git a/contrib/mdocml/tree.c b/contrib/mdocml/tree.c index 9e68b69e5fb0..dd36ff594e53 100644 --- a/contrib/mdocml/tree.c +++ b/contrib/mdocml/tree.c @@ -1,4 +1,4 @@ -/* $Id: tree.c,v 1.72 2017/01/12 17:29:33 schwarze Exp $ */ +/* $Id: tree.c,v 1.73 2017/02/10 15:45:28 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze @@ -192,6 +192,8 @@ print_mdoc(const struct roff_node *n, int indent) putchar(')'); if (NODE_EOS & n->flags) putchar('.'); + if (NODE_BROKEN & n->flags) + printf(" BROKEN"); if (NODE_NOSRC & n->flags) printf(" NOSRC"); if (NODE_NOPRT & n->flags) diff --git a/contrib/openpam/CREDITS b/contrib/openpam/CREDITS index c14f7ea3ff9e..c294fb7cf8fc 100644 --- a/contrib/openpam/CREDITS +++ b/contrib/openpam/CREDITS @@ -43,6 +43,7 @@ ideas: Mikhail Teterin Mikko Työläjärvi Nick Hibma + Patrick Bihan-Faou Robert Watson Ruslan Ermilov Sebastian Krahmer diff --git a/contrib/openpam/HISTORY b/contrib/openpam/HISTORY index 31a2c7125454..12efa5564bd4 100644 --- a/contrib/openpam/HISTORY +++ b/contrib/openpam/HISTORY @@ -1,3 +1,22 @@ +OpenPAM Radula 2017-02-19 + + - BUGFIX: Fix an inverted test which prevented pam_get_authtok(3) and + pam_get_user(3) from using application-provided custom prompts. + + - BUGFIX: Plug a memory leak in pam_set_item(3). + + - BUGFIX: Plug a potential memory leak in openpam_readlinev(3). + + - BUGFIX: In openpam_readword(3), support line continuations within + whitespace. + + - ENHANCE: Add a feature flag to control fallback to "other" policy. + + - ENHANCE: Add a pam_return(8) module which returns an arbitrary + code specified in the module options. + + - ENHANCE: More and better unit tests. +============================================================================ OpenPAM Ourouparia 2014-09-12 - ENHANCE: When executing a chain, require at least one service diff --git a/contrib/openpam/LICENSE b/contrib/openpam/LICENSE index 18ff4890812d..d8957b3cedcb 100644 --- a/contrib/openpam/LICENSE +++ b/contrib/openpam/LICENSE @@ -1,6 +1,6 @@ Copyright (c) 2002-2003 Networks Associates Technology, Inc. -Copyright (c) 2004-2012 Dag-Erling Smørgrav +Copyright (c) 2004-2017 Dag-Erling Smørgrav All rights reserved. This software was developed for the FreeBSD Project by ThinkSec AS and diff --git a/contrib/openpam/Makefile.am b/contrib/openpam/Makefile.am index 7640742ff194..a716d6cf024c 100644 --- a/contrib/openpam/Makefile.am +++ b/contrib/openpam/Makefile.am @@ -1,8 +1,8 @@ -# $Id: Makefile.am 816 2014-09-12 07:50:22Z des $ +# $Id: Makefile.am 917 2017-02-18 14:45:27Z des $ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = lib bin modules include +SUBDIRS = misc include lib bin modules if WITH_DOC SUBDIRS += doc diff --git a/contrib/openpam/Makefile.in b/contrib/openpam/Makefile.in index 963e9d4a6e2a..b70b7895112e 100644 --- a/contrib/openpam/Makefile.in +++ b/contrib/openpam/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,9 +14,19 @@ @SET_MAKE@ -# $Id: Makefile.am 816 2014-09-12 07:50:22Z des $ +# $Id: Makefile.am 917 2017-02-18 14:45:27Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,20 +91,20 @@ build_triplet = @build@ host_triplet = @host@ @WITH_DOC_TRUE@am__append_1 = doc subdir = . -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/config.h.in $(srcdir)/pamgdb.in $(srcdir)/mkpkgng.in \ - INSTALL README TODO compile config.guess config.sub install-sh \ - missing ltmain.sh ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = pamgdb mkpkgng +CONFIG_CLEAN_FILES = mkpkgng CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -152,7 +162,10 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags CSCOPE = cscope -DIST_SUBDIRS = lib bin modules include doc t +DIST_SUBDIRS = misc include lib bin modules doc t +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/mkpkgng.in INSTALL README TODO compile config.guess \ + config.sub depcomp install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -208,6 +221,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -238,6 +252,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -261,6 +276,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -315,7 +331,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = lib bin modules include $(am__append_1) t +SUBDIRS = misc include lib bin modules $(am__append_1) t EXTRA_DIST = \ CREDITS \ HISTORY \ @@ -345,7 +361,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -379,8 +394,6 @@ $(srcdir)/config.h.in: $(am__configure_deps) distclean-hdr: -rm -f config.h stamp-h1 -pamgdb: $(top_builddir)/config.status $(srcdir)/pamgdb.in - cd $(top_builddir) && $(SHELL) ./config.status $@ mkpkgng: $(top_builddir)/config.status $(srcdir)/mkpkgng.in cd $(top_builddir) && $(SHELL) ./config.status $@ @@ -580,15 +593,15 @@ dist-xz: distdir $(am__post_remove_distdir) dist-tarZ: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) @@ -624,16 +637,17 @@ distcheck: dist esac chmod -R a-w $(distdir) chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ @@ -810,6 +824,8 @@ uninstall-am: mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/README b/contrib/openpam/README index b0eb1a441740..7ea31b03d04a 100644 --- a/contrib/openpam/README +++ b/contrib/openpam/README @@ -7,19 +7,4 @@ implementations disagree, OpenPAM tries to remain compatible with Solaris, at the expense of XSSO conformance and Linux-PAM compatibility. -These are some of OpenPAM's features: - - - Implements the complete PAM API as described in the original PAM - paper and in OSF-RFC 86.0; this corresponds to the full XSSO API - except for mappings and secondary authentication. Also - implements some extensions found in Solaris 9. - - - Extends the API with several useful and time-saving functions. - - - Performs strict checking of return values from service modules. - - - Reads configuration from /etc/pam.d/, /etc/pam.conf, - /usr/local/etc/pam.d/ and /usr/local/etc/pam.conf, in that order; - this will be made configurable in a future release. - Please direct bug reports and inquiries to . diff --git a/contrib/openpam/RELNOTES b/contrib/openpam/RELNOTES index fbd48d81bb7f..87511047f0de 100644 --- a/contrib/openpam/RELNOTES +++ b/contrib/openpam/RELNOTES @@ -1,22 +1,21 @@ - Release notes for OpenPAM Ourouparia - ==================================== + Release notes for OpenPAM Radula + ================================ -This release corresponds to the code used in FreeBSD HEAD as of the -release date, and is also expected to work on almost any POSIX-like -platform that has GNU autotools, GNU make and the GNU compiler suite -installed. +OpenPAM is developed primarily on FreeBSD, but is expected to work on +almost any POSIX-like platform that has GNU autotools, GNU make and +the GNU compiler suite installed. -The distribution consists of the following components: +The OpenPAM distribution consists of the following components: - The PAM library itself, with complete API documentation. - Sample modules (pam_permit, pam_deny and pam_unix) and a sample - application (su) which demonstrate how to use PAM. + application (su) which demonstrate how to use the PAM library. - A test application (pamtest) which can be used to test policies and modules. - - Unit tests for limited portions of the libraries. + - Unit tests for limited portions of the library. Please direct bug reports and inquiries to . diff --git a/contrib/openpam/TODO b/contrib/openpam/TODO index 3790d6fd08e4..7433cd78852d 100644 --- a/contrib/openpam/TODO +++ b/contrib/openpam/TODO @@ -1,15 +1,9 @@ -Before the next release: +- Fix try_first_pass / use_first_pass (pam_get_authtok() code & + documentation are slightly incorrect, OpenPAM's pam_unix(8) is + incorrect, all FreeBSD modules are broken) - - Rewrite openpam_ttyconv(3). - - mostly done, needs review. +- Add loop detection to openpam_load_chain(). - - Fix try_first_pass / use_first_pass (pam_get_authtok() code & - documentation are slightly incorrect, OpenPAM's pam_unix(8) is - incorrect, all FreeBSD modules are broken) +- Complete unit tests for openpam_dispatch(). - - Add loop detection to openpam_load_chain(). - - - Look into the possibility of implementing a version of (or a - wrapper for) openpam_log() which respects the PAM_SILENT flag and - the no_warn module option. This would eliminate the need for - FreeBSD's _pam_verbose_error(). +- Stop using PAM_SYMBOL_ERR incorrectly. diff --git a/contrib/openpam/aclocal.m4 b/contrib/openpam/aclocal.m4 index 9fad4b40f5d5..e41b4761640e 100644 --- a/contrib/openpam/aclocal.m4 +++ b/contrib/openpam/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.14 -*- Autoconf -*- +# generated automatically by aclocal 1.15 -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,8594 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 57 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl -dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2011 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_REPLACE_SHELLFNS - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Go], [_LT_LANG(GO)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -m4_ifndef([AC_PROG_GO], [ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_GO. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -m4_defun([AC_PROG_GO], -[AC_LANG_PUSH(Go)dnl -AC_ARG_VAR([GOC], [Go compiler command])dnl -AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl -_AC_ARG_VAR_LDFLAGS()dnl -AC_CHECK_TOOL(GOC, gccgo) -if test -z "$GOC"; then - if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) - fi -fi -if test -z "$GOC"; then - AC_CHECK_PROG(GOC, gccgo, gccgo, false) -fi -])#m4_defun -])#m4_ifndef - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([AC_PROG_GO], - [LT_LANG(GO)], - [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES([TAG]) -# --------------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], - [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) -# ---------------------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case "$ECHO" in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([${with_sysroot}]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[23]].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method = "file_magic"]) -_LT_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT@&t@_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -_LT_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ F* | *Sun*Fortran*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Intel*\ [[CF]]*Compiler*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - *Portland\ Group*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -AC_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF -package foo -func foo() { -} -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_GO_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Go compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GO_CONFIG], -[AC_REQUIRE([LT_PROG_GO])dnl -AC_LANG_SAVE - -# Source file extension for Go test sources. -ac_ext=go - -# Object file extension for compiled Go test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="package main; func main() { }" - -# Code to be used in simple link tests -lt_simple_link_test_code='package main; func main() { }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GOC-"gccgo"} -CFLAGS=$GOFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# Go did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GO_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_GO -# ---------- -AC_DEFUN([LT_PROG_GO], -[AC_CHECK_TOOL(GOC, gccgo,) -]) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - -# _LT_DECL_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine which file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS - -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 7 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) - -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) - -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# @configure_input@ - -# serial 3337 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) - -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 5 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) - -# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -8619,10 +32,10 @@ m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.14' +[am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.14], [], +m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -8638,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.14])dnl +[AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -8690,15 +103,14 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -8729,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -8920,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -8996,7 +408,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9086,8 +498,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl @@ -9160,7 +572,11 @@ to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi -fi]) +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further @@ -9189,7 +605,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9200,7 +616,7 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -9210,7 +626,7 @@ if test x"${install_sh}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9231,7 +647,7 @@ AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9281,7 +697,7 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9322,7 +738,7 @@ fi # Obsolete and "removed" macros, that must however still report explicit # error messages when used, to smooth transition. # -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9349,7 +765,7 @@ AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9378,7 +794,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9425,7 +841,7 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9444,7 +860,7 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9525,7 +941,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9585,7 +1001,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9613,7 +1029,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9632,7 +1048,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -9763,3 +1179,8 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) diff --git a/contrib/openpam/autogen.sh b/contrib/openpam/autogen.sh index ce42fd5eb330..469ee1159b37 100755 --- a/contrib/openpam/autogen.sh +++ b/contrib/openpam/autogen.sh @@ -1,10 +1,10 @@ #!/bin/sh # -# $Id: autogen.sh 815 2014-09-12 07:47:27Z des $ +# $Id: autogen.sh 814 2014-09-12 07:46:46Z des $ # -aclocal -I m4 libtoolize --copy --force +aclocal -I m4 autoheader automake --add-missing --copy --foreign autoconf diff --git a/contrib/openpam/bin/Makefile.am b/contrib/openpam/bin/Makefile.am index 489ea82ab1c3..4e24efb26fdc 100644 --- a/contrib/openpam/bin/Makefile.am +++ b/contrib/openpam/bin/Makefile.am @@ -1,4 +1,4 @@ -# $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ SUBDIRS = openpam_dump_policy diff --git a/contrib/openpam/bin/Makefile.in b/contrib/openpam/bin/Makefile.in index 452bc64f8f27..d381ec35cb16 100644 --- a/contrib/openpam/bin/Makefile.in +++ b/contrib/openpam/bin/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,9 +14,19 @@ @SET_MAKE@ -# $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,11 +92,14 @@ host_triplet = @host@ @WITH_PAMTEST_TRUE@am__append_1 = pamtest @WITH_SU_TRUE@am__append_2 = su subdir = bin -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -146,6 +159,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = openpam_dump_policy pamtest su +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -185,6 +199,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -215,6 +230,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -238,6 +254,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -307,7 +324,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bin/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -602,6 +618,8 @@ uninstall-am: mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/bin/openpam_dump_policy/Makefile.am b/contrib/openpam/bin/openpam_dump_policy/Makefile.am index 59ae86f39fc9..23f61df0c771 100644 --- a/contrib/openpam/bin/openpam_dump_policy/Makefile.am +++ b/contrib/openpam/bin/openpam_dump_policy/Makefile.am @@ -1,7 +1,11 @@ -# $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam noinst_PROGRAMS = openpam_dump_policy openpam_dump_policy_SOURCES = openpam_dump_policy.c +if WITH_SYSTEM_LIBPAM +openpam_dump_policy_LDADD = $(SYSTEM_LIBPAM) +else openpam_dump_policy_LDADD = $(top_builddir)/lib/libpam/libpam.la +endif diff --git a/contrib/openpam/bin/openpam_dump_policy/Makefile.in b/contrib/openpam/bin/openpam_dump_policy/Makefile.in index f40bd169b95a..24296379d57f 100644 --- a/contrib/openpam/bin/openpam_dump_policy/Makefile.in +++ b/contrib/openpam/bin/openpam_dump_policy/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,20 @@ @SET_MAKE@ -# $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,12 +92,14 @@ build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = openpam_dump_policy$(EXEEXT) subdir = bin/openpam_dump_policy -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -95,8 +107,10 @@ CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_openpam_dump_policy_OBJECTS = openpam_dump_policy.$(OBJEXT) openpam_dump_policy_OBJECTS = $(am_openpam_dump_policy_OBJECTS) -openpam_dump_policy_DEPENDENCIES = \ - $(top_builddir)/lib/libpam/libpam.la +am__DEPENDENCIES_1 = +@WITH_SYSTEM_LIBPAM_FALSE@openpam_dump_policy_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@openpam_dump_policy_DEPENDENCIES = \ +@WITH_SYSTEM_LIBPAM_TRUE@ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent @@ -161,6 +175,7 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -175,6 +190,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -205,6 +221,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -228,6 +245,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -283,7 +301,8 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam openpam_dump_policy_SOURCES = openpam_dump_policy.c -openpam_dump_policy_LDADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_FALSE@openpam_dump_policy_LDADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@openpam_dump_policy_LDADD = $(SYSTEM_LIBPAM) all: all-am .SUFFIXES: @@ -300,7 +319,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/openpam_dump_policy/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bin/openpam_dump_policy/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -570,6 +588,8 @@ uninstall-am: mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/bin/openpam_dump_policy/openpam_dump_policy.c b/contrib/openpam/bin/openpam_dump_policy/openpam_dump_policy.c index 74129f33b139..8047005d1862 100644 --- a/contrib/openpam/bin/openpam_dump_policy/openpam_dump_policy.c +++ b/contrib/openpam/bin/openpam_dump_policy/openpam_dump_policy.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2011 Dag-Erling Smørgrav + * Copyright (c) 2011-2014 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_dump_policy.c 798 2014-06-10 21:28:14Z des $ + * $Id: openpam_dump_policy.c 890 2016-01-11 16:22:09Z des $ */ #ifdef HAVE_CONFIG_H diff --git a/contrib/openpam/bin/pamtest/Makefile.am b/contrib/openpam/bin/pamtest/Makefile.am index c0e4ea9eb817..7d2c7357544f 100644 --- a/contrib/openpam/bin/pamtest/Makefile.am +++ b/contrib/openpam/bin/pamtest/Makefile.am @@ -1,9 +1,13 @@ -# $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ AM_CPPFLAGS = -I$(top_srcdir)/include bin_PROGRAMS = pamtest pamtest_SOURCES = pamtest.c +if WITH_SYSTEM_LIBPAM +pamtest_LDADD = $(SYSTEM_LIBPAM) +else pamtest_LDADD = $(top_builddir)/lib/libpam/libpam.la +endif dist_man1_MANS = pamtest.1 diff --git a/contrib/openpam/bin/pamtest/Makefile.in b/contrib/openpam/bin/pamtest/Makefile.in index d628e7ead855..f5080e6dd518 100644 --- a/contrib/openpam/bin/pamtest/Makefile.in +++ b/contrib/openpam/bin/pamtest/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,20 @@ @SET_MAKE@ -# $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,12 +92,14 @@ build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = pamtest$(EXEEXT) subdir = bin/pamtest -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(dist_man1_MANS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -96,7 +108,9 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_pamtest_OBJECTS = pamtest.$(OBJEXT) pamtest_OBJECTS = $(am_pamtest_OBJECTS) -pamtest_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +am__DEPENDENCIES_1 = +@WITH_SYSTEM_LIBPAM_FALSE@pamtest_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@pamtest_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent @@ -191,6 +205,8 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(dist_man1_MANS) $(srcdir)/Makefile.in \ + $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -205,6 +221,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -235,6 +252,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -258,6 +276,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -313,7 +332,8 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I$(top_srcdir)/include pamtest_SOURCES = pamtest.c -pamtest_LDADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_FALSE@pamtest_LDADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@pamtest_LDADD = $(SYSTEM_LIBPAM) dist_man1_MANS = pamtest.1 all: all-am @@ -331,7 +351,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/pamtest/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bin/pamtest/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -687,6 +706,8 @@ uninstall-man: uninstall-man1 pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/bin/pamtest/pamtest.1 b/contrib/openpam/bin/pamtest/pamtest.1 index 7fcaf66987d9..3eee8bfd1dd1 100644 --- a/contrib/openpam/bin/pamtest/pamtest.1 +++ b/contrib/openpam/bin/pamtest/pamtest.1 @@ -26,9 +26,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id: pamtest.1 816 2014-09-12 07:50:22Z des $ +.\" $Id: pamtest.1 924 2017-02-19 20:52:28Z des $ .\" -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAMTEST 1 .Os .Sh NAME @@ -168,7 +168,7 @@ pamtest -v system auth account change setcred open close unsetcred The .Nm utility and this manual page were written by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . .Sh BUGS The .Nm diff --git a/contrib/openpam/bin/su/Makefile.am b/contrib/openpam/bin/su/Makefile.am index 52b6cb821bb8..0f95c001f8ad 100644 --- a/contrib/openpam/bin/su/Makefile.am +++ b/contrib/openpam/bin/su/Makefile.am @@ -1,9 +1,13 @@ -# $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ AM_CPPFLAGS = -I$(top_srcdir)/include bin_PROGRAMS = su su_SOURCES = su.c +if WITH_SYSTEM_LIBPAM +su_LDADD = $(SYSTEM_LIBPAM) +else su_LDADD = $(top_builddir)/lib/libpam/libpam.la +endif dist_man1_MANS = su.1 diff --git a/contrib/openpam/bin/su/Makefile.in b/contrib/openpam/bin/su/Makefile.in index 12a5234cf798..6cb42e98874d 100644 --- a/contrib/openpam/bin/su/Makefile.in +++ b/contrib/openpam/bin/su/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,20 @@ @SET_MAKE@ -# $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,12 +92,14 @@ build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = su$(EXEEXT) subdir = bin/su -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(dist_man1_MANS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -96,7 +108,9 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_su_OBJECTS = su.$(OBJEXT) su_OBJECTS = $(am_su_OBJECTS) -su_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +am__DEPENDENCIES_1 = +@WITH_SYSTEM_LIBPAM_FALSE@su_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@su_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent @@ -191,6 +205,8 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(dist_man1_MANS) $(srcdir)/Makefile.in \ + $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -205,6 +221,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -235,6 +252,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -258,6 +276,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -313,7 +332,8 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I$(top_srcdir)/include su_SOURCES = su.c -su_LDADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_FALSE@su_LDADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@su_LDADD = $(SYSTEM_LIBPAM) dist_man1_MANS = su.1 all: all-am @@ -331,7 +351,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bin/su/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bin/su/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -687,6 +706,8 @@ uninstall-man: uninstall-man1 pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/bin/su/su.1 b/contrib/openpam/bin/su/su.1 index 41f270f4c8d6..996fcba2766e 100644 --- a/contrib/openpam/bin/su/su.1 +++ b/contrib/openpam/bin/su/su.1 @@ -26,9 +26,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id: su.1 816 2014-09-12 07:50:22Z des $ +.\" $Id: su.1 924 2017-02-19 20:52:28Z des $ .\" -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt SU 1 .Os .Sh NAME @@ -62,4 +62,4 @@ and should not be used in production systems. The .Nm utility and this manual page were written by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/compile b/contrib/openpam/compile index 531136b068ef..a85b723c7e67 100755 --- a/contrib/openpam/compile +++ b/contrib/openpam/compile @@ -3,7 +3,7 @@ scriptversion=2012-10-14.11; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify diff --git a/contrib/openpam/config.guess b/contrib/openpam/config.guess index 5a328aabca55..0bb53aebf96d 100644 --- a/contrib/openpam/config.guess +++ b/contrib/openpam/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2013-05-16' +timestamp='2015-03-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -24,12 +24,12 @@ timestamp='2013-05-16' # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -149,7 +149,7 @@ Linux|GNU|GNU/*) LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac @@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) + arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -213,7 +227,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -579,8 +593,9 @@ EOF else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -821,7 +836,7 @@ EOF *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; - i*:MSYS*:*) + *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) @@ -927,6 +942,9 @@ EOF crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -964,10 +982,10 @@ EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} exit ;; - or32:Linux:*:*) + or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) @@ -990,6 +1008,12 @@ EOF ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; @@ -1249,16 +1273,26 @@ EOF if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; @@ -1350,154 +1384,6 @@ EOF exit ;; esac -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - cat >&2 < header file. */ #undef HAVE_MEMORY_H @@ -78,8 +81,7 @@ /* OpenPAM library major number */ #undef LIB_MAJ -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ +/* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Turn debugging macros on */ diff --git a/contrib/openpam/config.sub b/contrib/openpam/config.sub index 68e658274f03..a5eae2584943 100644 --- a/contrib/openpam/config.sub +++ b/contrib/openpam/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2013-04-24' +timestamp='2015-03-08' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ timestamp='2013-04-24' # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -68,7 +68,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os @@ -257,14 +257,15 @@ case $basic_machine in | avr | avr32 \ | be32 | be64 \ | bfin \ - | c4x | clipper \ + | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ @@ -282,8 +283,10 @@ case $basic_machine in | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ @@ -295,11 +298,11 @@ case $basic_machine in | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ @@ -310,6 +313,7 @@ case $basic_machine in | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -324,7 +328,10 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -372,15 +379,16 @@ case $basic_machine in | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ @@ -400,8 +408,10 @@ case $basic_machine in | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ @@ -413,6 +423,7 @@ case $basic_machine in | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ @@ -430,6 +441,7 @@ case $basic_machine in | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -500,6 +512,9 @@ case $basic_machine in basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -761,6 +776,9 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -788,7 +806,7 @@ case $basic_machine in os=-mingw64 ;; mingw32) - basic_machine=i386-pc + basic_machine=i686-pc os=-mingw32 ;; mingw32ce) @@ -816,6 +834,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -824,7 +846,7 @@ case $basic_machine in basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) - basic_machine=i386-pc + basic_machine=i686-pc os=-msys ;; mvs) @@ -1348,7 +1370,7 @@ case $os in | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1361,14 +1383,14 @@ case $os in | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1540,6 +1562,9 @@ case $basic_machine in c4x-* | tic4x-*) os=-coff ;; + c8051-*) + os=-elf + ;; hexagon-*) os=-elf ;; @@ -1583,9 +1608,6 @@ case $basic_machine in mips*-*) os=-elf ;; - or1k-*) - os=-elf - ;; or32-*) os=-coff ;; diff --git a/contrib/openpam/configure b/contrib/openpam/configure index 07e2a917e20f..703ae7649da2 100755 --- a/contrib/openpam/configure +++ b/contrib/openpam/configure @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac Id: configure.ac 816 2014-09-12 07:50:22Z des . +# From configure.ac Id: configure.ac 924 2017-02-19 20:52:28Z des . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for OpenPAM 20140912. +# Generated by GNU Autoconf 2.69 for OpenPAM 20170219. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='OpenPAM' PACKAGE_TARNAME='openpam' -PACKAGE_VERSION='20140912' -PACKAGE_STRING='OpenPAM 20140912' +PACKAGE_VERSION='20170219' +PACKAGE_STRING='OpenPAM 20170219' PACKAGE_BUGREPORT='des@des.no' PACKAGE_URL='http://www.openpam.org/' @@ -636,9 +636,15 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +WITH_TEST_FALSE +WITH_TEST_TRUE +CRYB_TEST_LIBS +SYSTEM_LIBPAM CRYPTO_LIBS CRYPT_LIBS DL_LIBS +WITH_SYSTEM_LIBPAM_FALSE +WITH_SYSTEM_LIBPAM_TRUE WITH_SU_FALSE WITH_SU_TRUE WITH_PAMTEST_FALSE @@ -651,6 +657,7 @@ CUSTOM_MODULES_DIR_FALSE CUSTOM_MODULES_DIR_TRUE OPENPAM_MODULES_DIR LIB_MAJ +LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO @@ -772,6 +779,7 @@ enable_static enable_shared with_pic enable_fast_install +with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock @@ -782,6 +790,7 @@ with_doc with_pam_unix with_pamtest with_su +with_system_libpam enable_developer_warnings enable_debugging_symbols enable_werror @@ -794,7 +803,8 @@ CFLAGS LDFLAGS LIBS CPPFLAGS -CPP' +CPP +LT_SYS_LIBRARY_PATH' # Initialize some variables set by options. @@ -1335,7 +1345,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures OpenPAM 20140912 to adapt to many kinds of systems. +\`configure' configures OpenPAM 20170219 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1405,7 +1415,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of OpenPAM 20140912:";; + short | recursive ) echo "Configuration of OpenPAM 20170219:";; esac cat <<\_ACEOF @@ -1438,14 +1448,18 @@ Optional Packages: --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). --with-modules-dir=DIR OpenPAM modules directory --without-doc do not build documentation - --with-pam-unix compile sample pam_unix(8) module - --with-pamtest compile test application - --with-su compile sample su(1) implementation + --with-pam-unix build sample pam_unix(8) module + --with-pamtest build test application + --with-su build sample su(1) implementation + --with-system-libpam use system libpam Some influential environment variables: CC C compiler command @@ -1456,6 +1470,8 @@ Some influential environment variables: CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1524,7 +1540,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -OpenPAM configure 20140912 +OpenPAM configure 20170219 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1893,7 +1909,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by OpenPAM $as_me 20140912, which was +It was created by OpenPAM $as_me 20170219, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2243,7 +2259,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -am__api_version='1.14' +am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do @@ -2444,8 +2460,8 @@ test "$program_suffix" != NONE && ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in @@ -2464,7 +2480,7 @@ else $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -2758,7 +2774,7 @@ fi # Define the identity of the package. PACKAGE='openpam' - VERSION='20140912' + VERSION='20170219' cat >>confdefs.h <<_ACEOF @@ -2792,8 +2808,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # mkdir_p='$(MKDIR_P)' -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' @@ -2850,6 +2866,7 @@ END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi + ac_config_headers="$ac_config_headers config.h" @@ -4823,8 +4840,8 @@ esac -macro_version='2.4.2' -macro_revision='1.3337' +macro_version='2.4.6' +macro_revision='2.4.6' @@ -4838,7 +4855,7 @@ macro_revision='1.3337' -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || @@ -4958,7 +4975,7 @@ func_echo_all () $ECHO "" } -case "$ECHO" in +case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 @@ -5151,19 +5168,19 @@ test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld -if test "$GCC" = yes; then +if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw + # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; @@ -5177,7 +5194,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; } while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done - test -z "$LD" && LD="$ac_prog" + test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. @@ -5188,7 +5205,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; } with_gnu_ld=unknown ;; esac -elif test "$with_gnu_ld" = yes; then +elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else @@ -5199,32 +5216,32 @@ if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" + lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } @@ -5267,33 +5284,38 @@ if ${lt_cv_path_NM+:} false; then : else if test -n "$NM"; then # Let the user override the test. - lt_cv_path_NM="$NM" + lt_cv_path_NM=$NM else - lt_nm_to_check="${ac_tool_prefix}nm" + lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" - break + break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" - break + break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but @@ -5304,15 +5326,15 @@ else esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : @@ -5418,9 +5440,9 @@ esac fi fi - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) - DUMPBIN="$DUMPBIN -symbols" + DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: @@ -5428,8 +5450,8 @@ fi esac fi - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi test -z "$NM" && NM=nm @@ -5480,7 +5502,7 @@ if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 - teststring="ABCD" + teststring=ABCD case $build_os in msdosdjgpp*) @@ -5520,7 +5542,7 @@ else lt_cv_sys_max_cmd_len=8192; ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -5570,22 +5592,23 @@ else ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do + for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough + test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring @@ -5603,7 +5626,7 @@ else fi -if test -n $lt_cv_sys_max_cmd_len ; then +if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else @@ -5621,30 +5644,6 @@ max_cmd_len=$lt_cv_sys_max_cmd_len : ${MV="mv -f"} : ${RM="rm -f"} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else @@ -5767,13 +5766,13 @@ esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then + if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi @@ -5901,13 +5900,13 @@ lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. +# 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) @@ -5934,8 +5933,7 @@ mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else @@ -5971,10 +5969,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -6013,7 +6007,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; @@ -6035,8 +6029,8 @@ newos6*) lt_cv_deplibs_check_method=pass_all ;; -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' @@ -6089,6 +6083,9 @@ sysv4 | sysv4.3*) tpf*) lt_cv_deplibs_check_method=pass_all ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; esac fi @@ -6246,8 +6243,8 @@ else case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib @@ -6259,7 +6256,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac @@ -6413,7 +6410,7 @@ if ac_fn_c_try_compile "$LINENO"; then : ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } - if test "$ac_status" -eq 0; then + if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 @@ -6421,7 +6418,7 @@ if ac_fn_c_try_compile "$LINENO"; then : ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } - if test "$ac_status" -ne 0; then + if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi @@ -6434,7 +6431,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } -if test "x$lt_cv_ar_at_file" = xno; then +if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file @@ -6651,7 +6648,7 @@ old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in - openbsd*) + bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) @@ -6741,7 +6738,7 @@ cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; @@ -6774,14 +6771,44 @@ case `$NM -V 2>&1` in symcode='[ABCDGIRSTW]' ;; esac +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -6799,21 +6826,24 @@ for ac_symprfx in "" "_"; do # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" @@ -6861,11 +6891,11 @@ _LT_EOF if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST -#elif defined(__osf__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else @@ -6891,7 +6921,7 @@ lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; @@ -6911,13 +6941,13 @@ _LT_EOF mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" + LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then + test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS @@ -6938,7 +6968,7 @@ _LT_EOF rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then + if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= @@ -6980,6 +7010,16 @@ fi + + + + + + + + + + @@ -7003,9 +7043,9 @@ fi lt_sysroot= -case ${with_sysroot} in #( +case $with_sysroot in #( yes) - if test "$GCC" = yes; then + if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( @@ -7015,8 +7055,8 @@ case ${with_sysroot} in #( no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac @@ -7028,18 +7068,99 @@ $as_echo "${lt_sysroot:-no}" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes +test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 @@ -7048,24 +7169,25 @@ ia64-*-hpux*) test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) - HPUX_IA64_MODE="32" + HPUX_IA64_MODE=32 ;; *ELF-64*) - HPUX_IA64_MODE="64" + HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" @@ -7094,9 +7216,50 @@ ia64-*-hpux*) rm -rf conftest* ;; -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 @@ -7110,9 +7273,19 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) - LD="${LD-ld} -m elf_i386" + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac ;; - ppc64-*linux*|powerpc64-*linux*) + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) @@ -7131,7 +7304,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; - ppc*-*linux*|powerpc*-*linux*) + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) @@ -7149,7 +7325,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" + SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } @@ -7189,13 +7365,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then + if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" + CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 @@ -7207,7 +7384,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } case $lt_cv_prog_gnu_ld in yes*) case $host in - i?86-*-solaris*) + i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) @@ -7216,7 +7393,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" + LD=${LD-ld}_sol2 fi ;; *) @@ -7232,7 +7409,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } ;; esac -need_locks="$enable_libtool_lock" +need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. @@ -7343,7 +7520,7 @@ else fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then +if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -7846,7 +8023,7 @@ if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then + if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the @@ -7864,7 +8041,7 @@ else cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 @@ -7903,7 +8080,7 @@ else fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 @@ -7932,7 +8109,7 @@ _LT_EOF _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 @@ -7945,32 +8122,32 @@ fi $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then + if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= @@ -7978,6 +8155,41 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default @@ -8005,14 +8217,14 @@ if test "${enable_static+set}" = set; then : *) enable_static=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -8042,14 +8254,14 @@ if test "${enable_shared+set}" = set; then : *) enable_shared=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -8074,14 +8286,14 @@ if test "${with_pic+set}" = set; then : *) pic_mode=default # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -8089,8 +8301,6 @@ else fi -test -z "$pic_mode" && pic_mode=default - @@ -8106,14 +8316,14 @@ if test "${enable_fast_install+set}" = set; then : *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac else @@ -8127,11 +8337,63 @@ fi + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + # This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" +LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' @@ -8180,7 +8442,7 @@ test -z "$LN_S" && LN_S="ln -s" -if test -n "${ZSH_VERSION+set}" ; then +if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi @@ -8219,7 +8481,7 @@ aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then + if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -8230,14 +8492,14 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except MSVC, +# All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a -with_gnu_ld="$lt_cv_prog_gnu_ld" +with_gnu_ld=$lt_cv_prog_gnu_ld -old_CC="$CC" -old_CFLAGS="$CFLAGS" +old_CC=$CC +old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc @@ -8246,15 +8508,8 @@ test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +func_cc_basename $compiler +cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it @@ -8269,22 +8524,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then : else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : @@ -8307,13 +8562,13 @@ _LT_EOF break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } @@ -8335,22 +8590,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then : else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : @@ -8373,13 +8628,13 @@ _LT_EOF break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } @@ -8400,7 +8655,7 @@ esac # Use C for the default configuration in the libtool script -lt_save_CC="$CC" +lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -8454,11 +8709,15 @@ _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; @@ -8474,7 +8733,7 @@ else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins @@ -8504,7 +8763,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : @@ -8522,17 +8781,18 @@ lt_prog_compiler_pic= lt_prog_compiler_static= - if test "$GCC" = yes; then + if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi + lt_prog_compiler_pic='-fPIC' ;; amigaos*) @@ -8543,8 +8803,8 @@ lt_prog_compiler_static= ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac @@ -8560,6 +8820,11 @@ lt_prog_compiler_static= # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac ;; darwin* | rhapsody*) @@ -8630,7 +8895,7 @@ lt_prog_compiler_static= case $host_os in aix*) lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else @@ -8638,10 +8903,29 @@ lt_prog_compiler_static= fi ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac ;; hpux9* | hpux10* | hpux11*) @@ -8657,7 +8941,7 @@ lt_prog_compiler_static= ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' + lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) @@ -8666,9 +8950,9 @@ lt_prog_compiler_static= lt_prog_compiler_static='-non_shared' ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. + # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' @@ -8693,6 +8977,12 @@ lt_prog_compiler_static= lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -8790,7 +9080,7 @@ lt_prog_compiler_static= ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi @@ -8819,7 +9109,7 @@ lt_prog_compiler_static= fi case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: + # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; @@ -8851,7 +9141,7 @@ else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins @@ -8881,7 +9171,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then +if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; @@ -8913,7 +9203,7 @@ if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then @@ -8932,13 +9222,13 @@ else fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } -if test x"$lt_cv_prog_compiler_static_works" = xyes; then +if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= @@ -9058,8 +9348,8 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; } -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } @@ -9071,9 +9361,9 @@ $as_echo_n "checking if we can lock with hard links... " >&6; } ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -9116,9 +9406,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if @@ -9133,7 +9423,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. - if test "$GCC" != yes; then + if test yes != "$GCC"; then with_gnu_ld=no fi ;; @@ -9141,7 +9431,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; - openbsd*) + openbsd* | bitrig*) with_gnu_ld=no ;; esac @@ -9151,7 +9441,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility @@ -9173,24 +9463,24 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie esac fi - if test "$lt_use_gnu_ld_interface" = yes; then + if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' + wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no - case `$LD -v 2>&1` in + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -9203,7 +9493,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then + if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 @@ -9222,7 +9512,7 @@ _LT_EOF case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) @@ -9238,7 +9528,7 @@ _LT_EOF allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi @@ -9248,7 +9538,7 @@ _LT_EOF # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' + export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes @@ -9256,61 +9546,89 @@ _LT_EOF exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no - if test "$host_os" = linux-dietlibc; then + if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no + && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; @@ -9321,42 +9639,47 @@ _LT_EOF lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac @@ -9370,8 +9693,8 @@ _LT_EOF archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; @@ -9389,8 +9712,8 @@ _LT_EOF _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi @@ -9402,7 +9725,7 @@ _LT_EOF ld_shlibs=no cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify @@ -9417,9 +9740,9 @@ _LT_EOF # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi @@ -9436,15 +9759,15 @@ _LT_EOF *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac - if test "$ld_shlibs" = no; then + if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= @@ -9460,7 +9783,7 @@ _LT_EOF # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported @@ -9468,34 +9791,57 @@ _LT_EOF ;; aix[4-9]*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' - no_entry_flag="" + no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi ;; esac @@ -9514,13 +9860,21 @@ _LT_EOF hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes - file_list_spec='${wl}-f,' + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac - if test "$GCC" = yes; then + if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -9539,35 +9893,42 @@ _LT_EOF ;; esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' else # not using gcc - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + shared_flag='$wl-bM:SRE' fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' fi fi - export_dynamic_flag_spec='${wl}-bexpall' + export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then + if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : @@ -9602,7 +9963,7 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" + lt_cv_aix_libpath_=/usr/lib:/lib fi fi @@ -9610,17 +9971,17 @@ fi aix_libpath=$lt_cv_aix_libpath_ fi - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then + if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : @@ -9655,7 +10016,7 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" + lt_cv_aix_libpath_=/usr/lib:/lib fi fi @@ -9663,21 +10024,33 @@ fi aix_libpath=$lt_cv_aix_libpath_ fi - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; @@ -9686,7 +10059,7 @@ fi case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) @@ -9716,16 +10089,17 @@ fi # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes @@ -9734,18 +10108,18 @@ fi # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' ;; *) # Assume MSVC wrapper @@ -9754,7 +10128,7 @@ fi # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. @@ -9773,24 +10147,24 @@ fi hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" + allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; + ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac - if test "$_lt_dar_can_shared" = "yes"; then + if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no @@ -9832,33 +10206,33 @@ fi ;; hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' + export_dynamic_flag_spec='$wl-E' ;; hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' + export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes @@ -9866,25 +10240,25 @@ fi ;; hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then + if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) @@ -9896,7 +10270,7 @@ if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then @@ -9915,14 +10289,14 @@ else fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi @@ -9930,8 +10304,8 @@ fi ;; esac fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in @@ -9942,7 +10316,7 @@ fi *) hardcode_direct=yes hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' + export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. @@ -9953,8 +10327,8 @@ fi ;; irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. @@ -9964,8 +10338,8 @@ $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " > if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } @@ -9977,24 +10351,34 @@ else fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out @@ -10009,7 +10393,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; @@ -10017,27 +10401,19 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } *nto* | *qnx*) ;; - openbsd*) + openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no @@ -10048,33 +10424,53 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes ;; osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' @@ -10085,24 +10481,24 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } solaris*) no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi @@ -10112,11 +10508,11 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', + # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi @@ -10126,10 +10522,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } ;; sunos4*) - if test "x$host_vendor" = xsequent; then + if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi @@ -10178,43 +10574,43 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' + no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' + export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; @@ -10229,10 +10625,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } ;; esac - if test x$host_vendor = xsni; then + if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' + export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi @@ -10240,7 +10636,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no +test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10266,7 +10662,7 @@ x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes - if test "$enable_shared" = yes && test "$GCC" = yes; then + if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. @@ -10481,14 +10877,14 @@ esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in @@ -10504,28 +10900,35 @@ if test "$GCC" = yes; then ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; + lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } @@ -10539,7 +10942,7 @@ BEGIN {RS=" "; FS="/|\n";} { # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else @@ -10548,7 +10951,7 @@ fi library_names_spec= libname_spec='lib$name' soname_spec= -shrext_cmds=".so" +shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= @@ -10565,14 +10968,16 @@ hardcode_into_libs=no # flags to be left without arguments need_version=unknown + + case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' + soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) @@ -10580,41 +10985,91 @@ aix[4-9]*) need_lib_prefix=no need_version=no hardcode_into_libs=yes - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac shlibpath_var=LIBPATH fi ;; @@ -10624,18 +11079,18 @@ amigaos*) powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) - library_names_spec='${libname}${shared_ext}' + library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; @@ -10643,8 +11098,8 @@ beos*) bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" @@ -10656,7 +11111,7 @@ bsdi[45]*) cygwin* | mingw* | pw32* | cegcc*) version_type=windows - shrext_cmds=".dll" + shrext_cmds=.dll need_version=no need_lib_prefix=no @@ -10665,8 +11120,8 @@ cygwin* | mingw* | pw32* | cegcc*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ @@ -10682,17 +11137,17 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' @@ -10701,8 +11156,8 @@ cygwin* | mingw* | pw32* | cegcc*) *,cl*) # Native MSVC libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' case $build_os in mingw*) @@ -10729,7 +11184,7 @@ cygwin* | mingw* | pw32* | cegcc*) sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) - sys_lib_search_path_spec="$LIB" + sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` @@ -10742,8 +11197,8 @@ cygwin* | mingw* | pw32* | cegcc*) esac # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' @@ -10756,7 +11211,7 @@ cygwin* | mingw* | pw32* | cegcc*) *) # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac @@ -10769,8 +11224,8 @@ darwin* | rhapsody*) version_type=darwin need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' @@ -10783,8 +11238,8 @@ dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; @@ -10802,12 +11257,13 @@ freebsd* | dragonfly*) version_type=freebsd-$objformat case $version_type in freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac @@ -10832,26 +11288,15 @@ freebsd* | dragonfly*) esac ;; -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes + shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; @@ -10869,14 +11314,15 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -10884,8 +11330,8 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; @@ -10894,8 +11340,8 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... @@ -10908,8 +11354,8 @@ interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -10920,7 +11366,7 @@ irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) - if test "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix @@ -10928,8 +11374,8 @@ irix5* | irix6* | nonstopux*) esac need_lib_prefix=no need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= @@ -10948,8 +11394,8 @@ irix5* | irix6* | nonstopux*) esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; @@ -10958,13 +11404,33 @@ linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + # This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -11008,7 +11474,12 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" @@ -11028,12 +11499,12 @@ netbsd*) need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH @@ -11043,7 +11514,7 @@ netbsd*) newsos6) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; @@ -11052,58 +11523,68 @@ newsos6) version_type=qnx need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; -openbsd*) +openbsd* | bitrig*) version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" + sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi + shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' - shrext_cmds=".dll" + version_type=windows + shrext_cmds=.dll + need_version=no need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) @@ -11114,8 +11595,8 @@ solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes @@ -11125,11 +11606,11 @@ solaris*) sunos4*) version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes @@ -11137,8 +11618,8 @@ sunos4*) sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) @@ -11159,24 +11640,24 @@ sysv4 | sysv4.3*) ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf + version_type=sco need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' @@ -11194,7 +11675,7 @@ tpf*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes @@ -11202,8 +11683,8 @@ tpf*) uts4*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; @@ -11213,20 +11694,35 @@ uts4*) esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no +test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then +if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + @@ -11323,15 +11819,15 @@ $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then + test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && + if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else @@ -11346,12 +11842,12 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi @@ -11361,7 +11857,7 @@ fi - if test "x$enable_dlopen" != xyes; then + if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown @@ -11371,23 +11867,23 @@ else case $host_os in beos*) - lt_cv_dlopen="load_add_on" + lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) - lt_cv_dlopen="dlopen" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) - # if libdl is installed we need to link against it + # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : @@ -11425,10 +11921,10 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else - lt_cv_dlopen="dyld" + lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes @@ -11436,10 +11932,18 @@ fi ;; + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" + lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } @@ -11478,11 +11982,11 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" + lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } @@ -11521,7 +12025,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } @@ -11560,7 +12064,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } @@ -11599,7 +12103,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -11620,21 +12124,21 @@ fi ;; esac - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else + if test no = "$lt_cv_dlopen"; then enable_dlopen=no + else + enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - save_LIBS="$LIBS" + save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 @@ -11642,7 +12146,7 @@ $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : + if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -11689,9 +12193,9 @@ else # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -11721,7 +12225,7 @@ _LT_EOF (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -11741,14 +12245,14 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } - if test "x$lt_cv_dlopen_self" = xyes; then + if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : + if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -11795,9 +12299,9 @@ else # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -11827,7 +12331,7 @@ _LT_EOF (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -11848,9 +12352,9 @@ fi $as_echo "$lt_cv_dlopen_self_static" >&6; } fi - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS ;; esac @@ -11894,7 +12398,7 @@ else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) - if test -n "$STRIP" ; then + if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -11922,7 +12426,7 @@ fi - # Report which library types will actually be built + # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 @@ -11930,13 +12434,13 @@ $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no + test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) - test "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' @@ -11944,8 +12448,12 @@ $as_echo_n "checking whether to build shared libraries... " >&6; } ;; aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac fi ;; esac @@ -11955,7 +12463,7 @@ $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } @@ -11969,7 +12477,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -CC="$lt_save_CC" +CC=$lt_save_CC @@ -12118,6 +12626,23 @@ else fi + +# Check whether --with-system-libpam was given. +if test "${with_system_libpam+set}" = set; then : + withval=$with_system_libpam; +else + with_system_libpam=no +fi + + if test x"$with_system_libpam" = x"yes"; then + WITH_SYSTEM_LIBPAM_TRUE= + WITH_SYSTEM_LIBPAM_FALSE='#' +else + WITH_SYSTEM_LIBPAM_TRUE='#' + WITH_SYSTEM_LIBPAM_FALSE= +fi + + for ac_header in crypt.h do : ac_fn_c_check_header_mongrel "$LINENO" "crypt.h" "ac_cv_header_crypt_h" "$ac_includes_default" @@ -12343,9 +12868,137 @@ CRYPTO_LIBS="${LIBS}" LIBS="${saved_LIBS}" +saved_LIBS="${LIBS}" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pam_start in -lpam" >&5 +$as_echo_n "checking for pam_start in -lpam... " >&6; } +if ${ac_cv_lib_pam_pam_start+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpam $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pam_start (); +int +main () +{ +return pam_start (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pam_pam_start=yes +else + ac_cv_lib_pam_pam_start=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pam_pam_start" >&5 +$as_echo "$ac_cv_lib_pam_pam_start" >&6; } +if test "x$ac_cv_lib_pam_pam_start" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPAM 1 +_ACEOF + + LIBS="-lpam $LIBS" + +fi + +SYSTEM_LIBPAM="${LIBS}" +LIBS="${saved_LIBS}" + + +save_LIBS="${LIBS}" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cryb_test_version" >&5 +$as_echo_n "checking for library containing cryb_test_version... " >&6; } +if ${ac_cv_search_cryb_test_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cryb_test_version (); +int +main () +{ +return cryb_test_version (); + ; + return 0; +} +_ACEOF +for ac_lib in '' cryb-test; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_cryb_test_version=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_cryb_test_version+:} false; then : + break +fi +done +if ${ac_cv_search_cryb_test_version+:} false; then : + +else + ac_cv_search_cryb_test_version=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_cryb_test_version" >&5 +$as_echo "$ac_cv_search_cryb_test_version" >&6; } +ac_res=$ac_cv_search_cryb_test_version +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + CRYB_TEST_LIBS="${LIBS}" + +else + + CRYB_TEST_LIBS="" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cryb-test library not available, unit tests disabled" >&5 +$as_echo "$as_me: WARNING: cryb-test library not available, unit tests disabled" >&2;} + +fi + +LIBS="${save_LIBS}" + + if test x"$CRYB_TEST_LIBS" != x"" ; then + WITH_TEST_TRUE= + WITH_TEST_FALSE='#' +else + WITH_TEST_TRUE='#' + WITH_TEST_FALSE= +fi + + # Check whether --enable-developer-warnings was given. if test "${enable_developer_warnings+set}" = set; then : - enableval=$enable_developer_warnings; CFLAGS="${CFLAGS} -Wall -Wextra" + enableval=$enable_developer_warnings; CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual" fi # Check whether --enable-debugging-symbols was given. @@ -12359,12 +13012,14 @@ if test "${enable_werror+set}" = set; then : fi -ac_config_files="$ac_config_files Makefile bin/Makefile bin/openpam_dump_policy/Makefile bin/pamtest/Makefile bin/su/Makefile doc/Makefile doc/man/Makefile include/Makefile include/security/Makefile lib/Makefile lib/libpam/Makefile modules/Makefile modules/pam_deny/Makefile modules/pam_permit/Makefile modules/pam_unix/Makefile t/Makefile" - -ac_config_files="$ac_config_files pamgdb" +ac_config_files="$ac_config_files Makefile bin/Makefile bin/openpam_dump_policy/Makefile bin/pamtest/Makefile bin/su/Makefile doc/Makefile doc/man/Makefile include/Makefile include/security/Makefile lib/Makefile lib/libpam/Makefile misc/Makefile modules/Makefile modules/pam_deny/Makefile modules/pam_permit/Makefile modules/pam_return/Makefile modules/pam_unix/Makefile t/Makefile" ac_config_files="$ac_config_files mkpkgng" +ac_config_files="$ac_config_files misc/coverage.sh" + +ac_config_files="$ac_config_files misc/coverity.sh" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -12517,6 +13172,14 @@ if test -z "${WITH_SU_TRUE}" && test -z "${WITH_SU_FALSE}"; then as_fn_error $? "conditional \"WITH_SU\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${WITH_SYSTEM_LIBPAM_TRUE}" && test -z "${WITH_SYSTEM_LIBPAM_FALSE}"; then + as_fn_error $? "conditional \"WITH_SYSTEM_LIBPAM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_TEST_TRUE}" && test -z "${WITH_TEST_FALSE}"; then + as_fn_error $? "conditional \"WITH_TEST\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -12914,7 +13577,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by OpenPAM $as_me 20140912, which was +This file was extended by OpenPAM $as_me 20170219, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -12981,7 +13644,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -OpenPAM config.status 20140912 +OpenPAM config.status 20170219 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -13116,6 +13779,7 @@ enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' @@ -13165,10 +13829,13 @@ compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' @@ -13233,7 +13900,8 @@ finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' @@ -13284,9 +13952,12 @@ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ nm_file_list_spec \ +lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ @@ -13321,7 +13992,7 @@ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -13348,10 +14019,11 @@ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -13360,19 +14032,16 @@ sys_lib_dlsearch_path_spec; do done ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' -# See if we are running on zsh, and set the options which allow our +# See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then +if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' @@ -13401,13 +14070,16 @@ do "include/security/Makefile") CONFIG_FILES="$CONFIG_FILES include/security/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "lib/libpam/Makefile") CONFIG_FILES="$CONFIG_FILES lib/libpam/Makefile" ;; + "misc/Makefile") CONFIG_FILES="$CONFIG_FILES misc/Makefile" ;; "modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;; "modules/pam_deny/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_deny/Makefile" ;; "modules/pam_permit/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_permit/Makefile" ;; + "modules/pam_return/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_return/Makefile" ;; "modules/pam_unix/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_unix/Makefile" ;; "t/Makefile") CONFIG_FILES="$CONFIG_FILES t/Makefile" ;; - "pamgdb") CONFIG_FILES="$CONFIG_FILES pamgdb" ;; "mkpkgng") CONFIG_FILES="$CONFIG_FILES mkpkgng" ;; + "misc/coverage.sh") CONFIG_FILES="$CONFIG_FILES misc/coverage.sh" ;; + "misc/coverity.sh") CONFIG_FILES="$CONFIG_FILES misc/coverity.sh" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -14098,55 +14770,53 @@ $as_echo X"$file" | ;; "libtool":C) - # See if we are running on zsh, and set the options which allow our + # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then + if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi - cfgfile="${ofile}T" + cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. # -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . # The names of the tagged configurations supported by this script. -available_tags="" +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG @@ -14166,6 +14836,9 @@ pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + # Shell to use when invoking shell scripts. SHELL=$lt_SHELL @@ -14283,18 +14956,27 @@ global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec -# The root where to search for dependent libraries,and in which our libraries should be installed. +# The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + # The name of the directory that contains temporary libtool files. objdir=$objdir @@ -14385,8 +15067,11 @@ hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen @@ -14479,13 +15164,13 @@ hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute @@ -14535,6 +15220,65 @@ hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + _LT_EOF case $host_os in @@ -14543,7 +15287,7 @@ _LT_EOF # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then +if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -14552,7 +15296,7 @@ _LT_EOF esac -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if @@ -14562,172 +15306,14 @@ ltmain="$ac_aux_dir/ltmain.sh" sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; - "pamgdb":F) chmod +x pamgdb ;; "mkpkgng":F) chmod +x mkpkgng ;; + "misc/coverage.sh":F) chmod +x misc/coverage.sh ;; + "misc/coverity.sh":F) chmod +x misc/coverity.sh ;; esac done # for ac_tag diff --git a/contrib/openpam/configure.ac b/contrib/openpam/configure.ac index bf7f905cdcd8..88feebc5394f 100644 --- a/contrib/openpam/configure.ac +++ b/contrib/openpam/configure.ac @@ -1,8 +1,8 @@ -dnl $Id: configure.ac 816 2014-09-12 07:50:22Z des $ +dnl $Id: configure.ac 924 2017-02-19 20:52:28Z des $ AC_PREREQ([2.62]) -AC_REVISION([$Id: configure.ac 816 2014-09-12 07:50:22Z des $]) -AC_INIT([OpenPAM], [20140912], [des@des.no], [openpam], [http://www.openpam.org/]) +AC_REVISION([$Id: configure.ac 924 2017-02-19 20:52:28Z des $]) +AC_INIT([OpenPAM], [20170219], [des@des.no], [openpam], [http://www.openpam.org/]) AC_CONFIG_SRCDIR([lib/libpam/pam_start.c]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([foreign]) @@ -62,23 +62,29 @@ AC_ARG_WITH([doc], AM_CONDITIONAL([WITH_DOC], [test x"$with_doc" = x"yes"]) AC_ARG_WITH([pam-unix], - AC_HELP_STRING([--with-pam-unix], [compile sample pam_unix(8) module]), + AC_HELP_STRING([--with-pam-unix], [build sample pam_unix(8) module]), [], [with_pam_unix=no]) AM_CONDITIONAL([WITH_PAM_UNIX], [test x"$with_pam_unix" = x"yes"]) AC_ARG_WITH(pamtest, - AC_HELP_STRING([--with-pamtest], [compile test application]), + AC_HELP_STRING([--with-pamtest], [build test application]), [], [with_pamtest=no]) AM_CONDITIONAL([WITH_PAMTEST], [test x"$with_pamtest" = x"yes"]) AC_ARG_WITH(su, - AC_HELP_STRING([--with-su], [compile sample su(1) implementation]), + AC_HELP_STRING([--with-su], [build sample su(1) implementation]), [], [with_su=no]) AM_CONDITIONAL([WITH_SU], [test x"$with_su" = x"yes"]) +AC_ARG_WITH(system-libpam, + AC_HELP_STRING([--with-system-libpam], [use system libpam]), + [], + [with_system_libpam=no]) +AM_CONDITIONAL([WITH_SYSTEM_LIBPAM], [test x"$with_system_libpam" = x"yes"]) + AC_CHECK_HEADERS([crypt.h]) AC_CHECK_FUNCS([asprintf vasprintf]) @@ -108,6 +114,25 @@ CRYPTO_LIBS="${LIBS}" LIBS="${saved_LIBS}" AC_SUBST(CRYPTO_LIBS) +saved_LIBS="${LIBS}" +LIBS="" +AC_CHECK_LIB([pam], [pam_start]) +SYSTEM_LIBPAM="${LIBS}" +LIBS="${saved_LIBS}" +AC_SUBST(SYSTEM_LIBPAM) + +save_LIBS="${LIBS}" +LIBS="" +AC_SEARCH_LIBS([cryb_test_version], [cryb-test], [ + CRYB_TEST_LIBS="${LIBS}" +], [ + CRYB_TEST_LIBS="" + AC_MSG_WARN([cryb-test library not available, unit tests disabled]) +]) +LIBS="${save_LIBS}" +AC_SUBST(CRYB_TEST_LIBS) +AM_CONDITIONAL([WITH_TEST], [ test x"$CRYB_TEST_LIBS" != x"" ]) + AC_ARG_ENABLE([developer-warnings], AS_HELP_STRING([--enable-developer-warnings], [enable strict warnings (default is NO)]), [CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual"]) @@ -130,12 +155,15 @@ AC_CONFIG_FILES([ include/security/Makefile lib/Makefile lib/libpam/Makefile + misc/Makefile modules/Makefile modules/pam_deny/Makefile modules/pam_permit/Makefile + modules/pam_return/Makefile modules/pam_unix/Makefile t/Makefile ]) -AC_CONFIG_FILES([pamgdb],[chmod +x pamgdb]) AC_CONFIG_FILES([mkpkgng],[chmod +x mkpkgng]) +AC_CONFIG_FILES([misc/coverage.sh],[chmod +x misc/coverage.sh]) +AC_CONFIG_FILES([misc/coverity.sh],[chmod +x misc/coverity.sh]) AC_OUTPUT diff --git a/contrib/openpam/depcomp b/contrib/openpam/depcomp index 4ebd5b3a2f2d..fc98710e2a1d 100755 --- a/contrib/openpam/depcomp +++ b/contrib/openpam/depcomp @@ -3,7 +3,7 @@ scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/contrib/openpam/doc/Makefile.in b/contrib/openpam/doc/Makefile.in index 26ac55c8651e..21da50599f8e 100644 --- a/contrib/openpam/doc/Makefile.in +++ b/contrib/openpam/doc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ # $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,11 +90,14 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -144,6 +157,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -183,6 +197,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -213,6 +228,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -236,6 +252,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -305,7 +322,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -600,6 +616,8 @@ uninstall-am: mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/doc/man/Makefile.am b/contrib/openpam/doc/man/Makefile.am index 920c709dcf21..b1a8133f0c35 100644 --- a/contrib/openpam/doc/man/Makefile.am +++ b/contrib/openpam/doc/man/Makefile.am @@ -1,9 +1,9 @@ -# $Id: Makefile.am 720 2013-08-19 16:02:10Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ NULL = # Standard PAM API -PMAN = \ +PAM_MAN = \ pam_acct_mgmt.3 \ pam_authenticate.3 \ pam_chauthtok.3 \ @@ -24,7 +24,7 @@ PMAN = \ $(NULL) # Standard module API -MMAN = \ +MOD_MAN = \ pam_sm_acct_mgmt.3 \ pam_sm_authenticate.3 \ pam_sm_chauthtok.3 \ @@ -34,7 +34,7 @@ MMAN = \ $(NULL) # OpenPAM extensions -OMAN = \ +OPENPAM_MAN = \ openpam_borrow_cred.3 \ openpam_free_data.3 \ openpam_free_envlist.3 \ @@ -63,8 +63,13 @@ OMAN = \ EXTRA_DIST = openpam.man pam.man -ALLCMAN = $(PMAN) $(MMAN) $(OMAN) -GENMAN = $(ALLCMAN) openpam.3 pam.3 +if !WITH_SYSTEM_LIBPAM +PAMCMAN = $(PAM_MAN) $(MOD_MAN) $(OPENPAM_MAN) +PAMXMAN = openpam.3 pam.3 +endif + +ALLCMAN = $(PAMCMAN) +GENMAN = $(ALLCMAN) $(PAMXMAN) dist_man3_MANS = $(GENMAN) pam_conv.3 @@ -74,9 +79,9 @@ CLEANFILES = $(GENMAN) GENDOC = $(top_srcdir)/misc/gendoc.pl -LIBSRCDIR = $(top_srcdir)/lib/libpam +LIBPAMSRCDIR = $(top_srcdir)/lib/libpam -VPATH = $(LIBSRCDIR) $(srcdir) +VPATH = $(LIBPAMSRCDIR) $(srcdir) SUFFIXES = .3 diff --git a/contrib/openpam/doc/man/Makefile.in b/contrib/openpam/doc/man/Makefile.in index 84236b7ea755..797058bad7aa 100644 --- a/contrib/openpam/doc/man/Makefile.in +++ b/contrib/openpam/doc/man/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,8 +14,18 @@ @SET_MAKE@ -# $Id: Makefile.am 720 2013-08-19 16:02:10Z des $ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,12 +89,14 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/man -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(dist_man3_MANS) $(dist_man5_MANS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -141,8 +153,10 @@ man5dir = $(mandir)/man5 NROFF = nroff MANS = $(dist_man3_MANS) $(dist_man5_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(dist_man3_MANS) $(dist_man5_MANS) \ + $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -VPATH = $(LIBSRCDIR) $(srcdir) +VPATH = $(LIBPAMSRCDIR) $(srcdir) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ @@ -156,6 +170,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -186,6 +201,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -209,6 +225,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -265,7 +282,7 @@ top_srcdir = @top_srcdir@ NULL = # Standard PAM API -PMAN = \ +PAM_MAN = \ pam_acct_mgmt.3 \ pam_authenticate.3 \ pam_chauthtok.3 \ @@ -287,7 +304,7 @@ PMAN = \ # Standard module API -MMAN = \ +MOD_MAN = \ pam_sm_acct_mgmt.3 \ pam_sm_authenticate.3 \ pam_sm_chauthtok.3 \ @@ -298,7 +315,7 @@ MMAN = \ # OpenPAM extensions -OMAN = \ +OPENPAM_MAN = \ openpam_borrow_cred.3 \ openpam_free_data.3 \ openpam_free_envlist.3 \ @@ -326,13 +343,15 @@ OMAN = \ $(NULL) EXTRA_DIST = openpam.man pam.man -ALLCMAN = $(PMAN) $(MMAN) $(OMAN) -GENMAN = $(ALLCMAN) openpam.3 pam.3 +@WITH_SYSTEM_LIBPAM_FALSE@PAMCMAN = $(PAM_MAN) $(MOD_MAN) $(OPENPAM_MAN) +@WITH_SYSTEM_LIBPAM_FALSE@PAMXMAN = openpam.3 pam.3 +ALLCMAN = $(PAMCMAN) +GENMAN = $(ALLCMAN) $(PAMXMAN) dist_man3_MANS = $(GENMAN) pam_conv.3 dist_man5_MANS = pam.conf.5 CLEANFILES = $(GENMAN) GENDOC = $(top_srcdir)/misc/gendoc.pl -LIBSRCDIR = $(top_srcdir)/lib/libpam +LIBPAMSRCDIR = $(top_srcdir)/lib/libpam SUFFIXES = .3 all: all-am @@ -350,7 +369,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/man/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -614,6 +632,8 @@ uninstall-man: uninstall-man3 uninstall-man5 mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-man uninstall-man3 uninstall-man5 +.PRECIOUS: Makefile + .c.3: $(GENDOC) perl -w $(GENDOC) $< || rm $@ diff --git a/contrib/openpam/doc/man/openpam.3 b/contrib/openpam/doc/man/openpam.3 index 35f135dd11c6..78ec8db0aafe 100644 --- a/contrib/openpam/doc/man/openpam.3 +++ b/contrib/openpam/doc/man/openpam.3 @@ -1,13 +1,85 @@ .\" Generated by gendoc.pl -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM 3 .Os .Sh NAME +.Nm openpam_borrow_cred , +.Nm openpam_free_data , +.Nm openpam_free_envlist , +.Nm openpam_get_feature , +.Nm openpam_get_option , +.Nm openpam_log , +.Nm openpam_nullconv , +.Nm openpam_readline , +.Nm openpam_readlinev , +.Nm openpam_readword , +.Nm openpam_restore_cred , +.Nm openpam_set_feature , +.Nm openpam_set_option , +.Nm openpam_straddch , +.Nm openpam_subst , +.Nm openpam_ttyconv , +.Nm pam_error , +.Nm pam_get_authtok , +.Nm pam_info , +.Nm pam_prompt , +.Nm pam_setenv , +.Nm pam_verror , +.Nm pam_vinfo , +.Nm pam_vprompt .Nd Pluggable Authentication Modules Library .Sh LIBRARY .Lb libpam .Sh SYNOPSIS .In security/openpam.h +.Ft "int" +.Fn openpam_borrow_cred "pam_handle_t *pamh" "const struct passwd *pwd" +.Ft "void" +.Fn openpam_free_data "pam_handle_t *pamh" "void *data" "int status" +.Ft "void" +.Fn openpam_free_envlist "char **envlist" +.Ft "int" +.Fn openpam_get_feature "int feature" "int *onoff" +.Ft "const char *" +.Fn openpam_get_option "pam_handle_t *pamh" "const char *option" +.Ft "void" +.Fn openpam_log "int level" "const char *fmt" "..." +.Ft "int" +.Fn openpam_nullconv "int n" "const struct pam_message **msg" "struct pam_response **resp" "void *data" +.Ft "char *" +.Fn openpam_readline "FILE *f" "int *lineno" "size_t *lenp" +.Ft "char **" +.Fn openpam_readlinev "FILE *f" "int *lineno" "int *lenp" +.Ft "char *" +.Fn openpam_readword "FILE *f" "int *lineno" "size_t *lenp" +.Ft "int" +.Fn openpam_restore_cred "pam_handle_t *pamh" +.Ft "int" +.Fn openpam_set_feature "int feature" "int onoff" +.Ft "int" +.Fn openpam_set_option "pam_handle_t *pamh" "const char *option" "const char *value" +.Ft "int" +.Fn openpam_straddch "char **str" "size_t *size" "size_t *len" "int ch" +.Ft "int" +.Fn openpam_subst "const pam_handle_t *pamh" "char *buf" "size_t *bufsize" "const char *template" +.Ft "int" +.Fn openpam_ttyconv "int n" "const struct pam_message **msg" "struct pam_response **resp" "void *data" +.Ft "int" +.Fn pam_error "const pam_handle_t *pamh" "const char *fmt" "..." +.Ft "int" +.Fn pam_get_authtok "pam_handle_t *pamh" "int item" "const char **authtok" "const char *prompt" +.Ft "int" +.Fn pam_info "const pam_handle_t *pamh" "const char *fmt" "..." +.Ft "int" +.Fn pam_prompt "const pam_handle_t *pamh" "int style" "char **resp" "const char *fmt" "..." +.Ft "int" +.Fn pam_setenv "pam_handle_t *pamh" "const char *name" "const char *value" "int overwrite" +.Ft "int" +.Fn pam_verror "const pam_handle_t *pamh" "const char *fmt" "va_list ap" +.Ft "int" +.Fn pam_vinfo "const pam_handle_t *pamh" "const char *fmt" "va_list ap" +.Ft "int" +.Fn pam_vprompt "const pam_handle_t *pamh" "int style" "char **resp" "const char *fmt" "va_list ap" .\" .\" $Id: openpam.man 648 2013-03-05 17:54:27Z des $ .\" @@ -22,6 +94,30 @@ are either simple convenience functions, or functions intimately tied to OpenPAM implementation details, and therefore not well suited to standardization. .Sh SEE ALSO +.Xr openpam_borrow_cred 3 , +.Xr openpam_free_data 3 , +.Xr openpam_free_envlist 3 , +.Xr openpam_get_feature 3 , +.Xr openpam_get_option 3 , +.Xr openpam_log 3 , +.Xr openpam_nullconv 3 , +.Xr openpam_readline 3 , +.Xr openpam_readlinev 3 , +.Xr openpam_readword 3 , +.Xr openpam_restore_cred 3 , +.Xr openpam_set_feature 3 , +.Xr openpam_set_option 3 , +.Xr openpam_straddch 3 , +.Xr openpam_subst 3 , +.Xr openpam_ttyconv 3 , +.Xr pam_error 3 , +.Xr pam_get_authtok 3 , +.Xr pam_info 3 , +.Xr pam_prompt 3 , +.Xr pam_setenv 3 , +.Xr pam_verror 3 , +.Xr pam_vinfo 3 , +.Xr pam_vprompt 3 .Sh STANDARDS .Rs .%T "X/Open Single Sign-On Service (XSSO) - Pluggable Authentication Modules" @@ -37,4 +133,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_borrow_cred.3 b/contrib/openpam/doc/man/openpam_borrow_cred.3 index 523ee634ce32..bf25a475fbd6 100644 --- a/contrib/openpam/doc/man/openpam_borrow_cred.3 +++ b/contrib/openpam/doc/man/openpam_borrow_cred.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_borrow_cred.c by gendoc.pl .\" $Id: openpam_borrow_cred.c 649 2013-03-05 17:58:33Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_BORROW_CRED 3 .Os .Sh NAME .Nm openpam_borrow_cred .Nd temporarily borrow user credentials -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -62,4 +60,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_free_data.3 b/contrib/openpam/doc/man/openpam_free_data.3 index 1010f023d245..ca2fe51dfd92 100644 --- a/contrib/openpam/doc/man/openpam_free_data.3 +++ b/contrib/openpam/doc/man/openpam_free_data.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_free_data.c by gendoc.pl .\" $Id: openpam_free_data.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_FREE_DATA 3 .Os .Sh NAME .Nm openpam_free_data .Nd generic cleanup function -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -45,4 +43,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_free_envlist.3 b/contrib/openpam/doc/man/openpam_free_envlist.3 index 2bddfb1b9896..f8ed6f08e2c3 100644 --- a/contrib/openpam/doc/man/openpam_free_envlist.3 +++ b/contrib/openpam/doc/man/openpam_free_envlist.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_free_envlist.c by gendoc.pl .\" $Id: openpam_free_envlist.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_FREE_ENVLIST 3 .Os .Sh NAME .Nm openpam_free_envlist .Nd free an environment list -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -35,4 +33,4 @@ The .Fn openpam_free_envlist function and this manual page were developed by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_get_feature.3 b/contrib/openpam/doc/man/openpam_get_feature.3 index b001ce027874..45b6bcc91d69 100644 --- a/contrib/openpam/doc/man/openpam_get_feature.3 +++ b/contrib/openpam/doc/man/openpam_get_feature.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_get_feature.c by gendoc.pl .\" $Id: openpam_get_feature.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_GET_FEATURE 3 .Os .Sh NAME .Nm openpam_get_feature .Nd query the state of an optional feature -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -68,4 +66,4 @@ The .Fn openpam_get_feature function and this manual page were developed by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_get_option.3 b/contrib/openpam/doc/man/openpam_get_option.3 index 7ff839b0bd15..fcfd9b83dd00 100644 --- a/contrib/openpam/doc/man/openpam_get_option.3 +++ b/contrib/openpam/doc/man/openpam_get_option.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_get_option.c by gendoc.pl .\" $Id: openpam_get_option.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_GET_OPTION 3 .Os .Sh NAME .Nm openpam_get_option .Nd returns the value of a module option -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -48,4 +46,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_log.3 b/contrib/openpam/doc/man/openpam_log.3 index 18691fec8149..0930abb17ccb 100644 --- a/contrib/openpam/doc/man/openpam_log.3 +++ b/contrib/openpam/doc/man/openpam_log.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_log.c by gendoc.pl .\" $Id: openpam_log.c 686 2013-07-11 16:36:02Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_LOG 3 .Os .Sh NAME .Nm openpam_log .Nd log a message through syslog -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -90,4 +88,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_nullconv.3 b/contrib/openpam/doc/man/openpam_nullconv.3 index 1f657f5ea8ba..0ce1e44edead 100644 --- a/contrib/openpam/doc/man/openpam_nullconv.3 +++ b/contrib/openpam/doc/man/openpam_nullconv.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_nullconv.c by gendoc.pl .\" $Id: openpam_nullconv.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_NULLCONV 3 .Os .Sh NAME .Nm openpam_nullconv .Nd null conversation function -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -69,4 +67,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_readline.3 b/contrib/openpam/doc/man/openpam_readline.3 index c0ad9b82d847..db888ad97cfb 100644 --- a/contrib/openpam/doc/man/openpam_readline.3 +++ b/contrib/openpam/doc/man/openpam_readline.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_readline.c by gendoc.pl .\" $Id: openpam_readline.c 703 2013-08-16 11:57:54Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_READLINE 3 .Os .Sh NAME .Nm openpam_readline .Nd read a line from a file -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In stdio.h @@ -88,4 +86,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_readlinev.3 b/contrib/openpam/doc/man/openpam_readlinev.3 index 7801843a7920..9fb28e18cdee 100644 --- a/contrib/openpam/doc/man/openpam_readlinev.3 +++ b/contrib/openpam/doc/man/openpam_readlinev.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_readlinev.c by gendoc.pl -.\" $Id: openpam_readlinev.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: openpam_readlinev.c 890 2016-01-11 16:22:09Z des $ +.Dd February 19, 2017 .Dt OPENPAM_READLINEV 3 .Os .Sh NAME .Nm openpam_readlinev .Nd read a line from a file and split it into words -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In stdio.h @@ -122,4 +120,4 @@ The .Fn openpam_readlinev function and this manual page were developed by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_readword.3 b/contrib/openpam/doc/man/openpam_readword.3 index 39b4726b79ab..8bb0f492d799 100644 --- a/contrib/openpam/doc/man/openpam_readword.3 +++ b/contrib/openpam/doc/man/openpam_readword.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_readword.c by gendoc.pl -.\" $Id: openpam_readword.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: openpam_readword.c 916 2017-02-07 12:25:58Z des $ +.Dd February 19, 2017 .Dt OPENPAM_READWORD 3 .Os .Sh NAME .Nm openpam_readword .Nd read a word from a file, respecting shell quoting rules -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In stdio.h @@ -115,4 +113,4 @@ The .Fn openpam_readword function and this manual page were developed by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_restore_cred.3 b/contrib/openpam/doc/man/openpam_restore_cred.3 index 900bca6b71bd..3b1c27e361a5 100644 --- a/contrib/openpam/doc/man/openpam_restore_cred.3 +++ b/contrib/openpam/doc/man/openpam_restore_cred.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_restore_cred.c by gendoc.pl .\" $Id: openpam_restore_cred.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_RESTORE_CRED 3 .Os .Sh NAME .Nm openpam_restore_cred .Nd restore credentials -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -54,4 +52,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_set_feature.3 b/contrib/openpam/doc/man/openpam_set_feature.3 index 475a89bcde54..bc5865096975 100644 --- a/contrib/openpam/doc/man/openpam_set_feature.3 +++ b/contrib/openpam/doc/man/openpam_set_feature.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_set_feature.c by gendoc.pl .\" $Id: openpam_set_feature.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_SET_FEATURE 3 .Os .Sh NAME .Nm openpam_set_feature .Nd enable or disable an optional feature -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -50,4 +48,4 @@ The .Fn openpam_set_feature function and this manual page were developed by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_set_option.3 b/contrib/openpam/doc/man/openpam_set_option.3 index 6ed8b1b0aa74..8cb0a7c65f83 100644 --- a/contrib/openpam/doc/man/openpam_set_option.3 +++ b/contrib/openpam/doc/man/openpam_set_option.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_set_option.c by gendoc.pl .\" $Id: openpam_set_option.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_SET_OPTION 3 .Os .Sh NAME .Nm openpam_set_option .Nd sets the value of a module option -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -51,4 +49,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_straddch.3 b/contrib/openpam/doc/man/openpam_straddch.3 index 3263ee11ca45..127858f637a6 100644 --- a/contrib/openpam/doc/man/openpam_straddch.3 +++ b/contrib/openpam/doc/man/openpam_straddch.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_straddch.c by gendoc.pl .\" $Id: openpam_straddch.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_STRADDCH 3 .Os .Sh NAME .Nm openpam_straddch .Nd add a character to a string, expanding the buffer if needed -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -102,4 +100,4 @@ The .Fn openpam_straddch function and this manual page were developed by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_subst.3 b/contrib/openpam/doc/man/openpam_subst.3 index bc9c3a2953a4..5c0c111e32ff 100644 --- a/contrib/openpam/doc/man/openpam_subst.3 +++ b/contrib/openpam/doc/man/openpam_subst.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_subst.c by gendoc.pl .\" $Id: openpam_subst.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt OPENPAM_SUBST 3 .Os .Sh NAME .Nm openpam_subst .Nd substitute PAM item values in a string -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -83,8 +81,6 @@ The .Fn openpam_subst function returns one of the following values: .Bl -tag -width 18n -.It Bq Er PAM_SYSTEM_ERR -System error. .It Bq Er PAM_TRY_AGAIN Try again. .El @@ -103,4 +99,4 @@ The .Fn openpam_subst function and this manual page were developed by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/openpam_ttyconv.3 b/contrib/openpam/doc/man/openpam_ttyconv.3 index e7bd8b186ce5..6aeb9f3b3eeb 100644 --- a/contrib/openpam/doc/man/openpam_ttyconv.3 +++ b/contrib/openpam/doc/man/openpam_ttyconv.3 @@ -1,13 +1,11 @@ .\" Generated from openpam_ttyconv.c by gendoc.pl -.\" $Id: openpam_ttyconv.c 807 2014-09-09 09:41:32Z des $ -.Dd September 12, 2014 +.\" $Id: openpam_ttyconv.c 890 2016-01-11 16:22:09Z des $ +.Dd February 19, 2017 .Dt OPENPAM_TTYCONV 3 .Os .Sh NAME .Nm openpam_ttyconv .Nd simple tty-based conversation function -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -64,4 +62,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam.3 b/contrib/openpam/doc/man/pam.3 index 20ff3950a464..5b46b6d3a8d0 100644 --- a/contrib/openpam/doc/man/pam.3 +++ b/contrib/openpam/doc/man/pam.3 @@ -1,13 +1,64 @@ .\" Generated by gendoc.pl -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM 3 .Os .Sh NAME +.Nm pam_acct_mgmt , +.Nm pam_authenticate , +.Nm pam_chauthtok , +.Nm pam_close_session , +.Nm pam_end , +.Nm pam_get_data , +.Nm pam_get_item , +.Nm pam_get_user , +.Nm pam_getenv , +.Nm pam_getenvlist , +.Nm pam_open_session , +.Nm pam_putenv , +.Nm pam_set_data , +.Nm pam_set_item , +.Nm pam_setcred , +.Nm pam_start , +.Nm pam_strerror .Nd Pluggable Authentication Modules Library .Sh LIBRARY .Lb libpam .Sh SYNOPSIS .In security/pam_appl.h +.Ft "int" +.Fn pam_acct_mgmt "pam_handle_t *pamh" "int flags" +.Ft "int" +.Fn pam_authenticate "pam_handle_t *pamh" "int flags" +.Ft "int" +.Fn pam_chauthtok "pam_handle_t *pamh" "int flags" +.Ft "int" +.Fn pam_close_session "pam_handle_t *pamh" "int flags" +.Ft "int" +.Fn pam_end "pam_handle_t *pamh" "int status" +.Ft "int" +.Fn pam_get_data "const pam_handle_t *pamh" "const char *module_data_name" "const void **data" +.Ft "int" +.Fn pam_get_item "const pam_handle_t *pamh" "int item_type" "const void **item" +.Ft "int" +.Fn pam_get_user "pam_handle_t *pamh" "const char **user" "const char *prompt" +.Ft "const char *" +.Fn pam_getenv "pam_handle_t *pamh" "const char *name" +.Ft "char **" +.Fn pam_getenvlist "pam_handle_t *pamh" +.Ft "int" +.Fn pam_open_session "pam_handle_t *pamh" "int flags" +.Ft "int" +.Fn pam_putenv "pam_handle_t *pamh" "const char *namevalue" +.Ft "int" +.Fn pam_set_data "pam_handle_t *pamh" "const char *module_data_name" "void *data" "void (*cleanup)(pam_handle_t *pamh, void *data, int pam_end_status)" +.Ft "int" +.Fn pam_set_item "pam_handle_t *pamh" "int item_type" "const void *item" +.Ft "int" +.Fn pam_setcred "pam_handle_t *pamh" "int flags" +.Ft "int" +.Fn pam_start "const char *service" "const char *user" "const struct pam_conv *pam_conv" "pam_handle_t **pamh" +.Ft "const char *" +.Fn pam_strerror "const pam_handle_t *pamh" "int error_number" .\" .\" $Id: pam.man 648 2013-03-05 17:54:27Z des $ .\" @@ -174,7 +225,24 @@ Unknown user. .El .Sh SEE ALSO .Xr openpam 3 , -.Xr pam_conv 3 +.Xr pam_acct_mgmt 3 , +.Xr pam_authenticate 3 , +.Xr pam_chauthtok 3 , +.Xr pam_close_session 3 , +.Xr pam_conv 3 , +.Xr pam_end 3 , +.Xr pam_get_data 3 , +.Xr pam_getenv 3 , +.Xr pam_getenvlist 3 , +.Xr pam_get_item 3 , +.Xr pam_get_user 3 , +.Xr pam_open_session 3 , +.Xr pam_putenv 3 , +.Xr pam_setcred 3 , +.Xr pam_set_data 3 , +.Xr pam_set_item 3 , +.Xr pam_start 3 , +.Xr pam_strerror 3 .Sh STANDARDS .Rs .%T "X/Open Single Sign-On Service (XSSO) - Pluggable Authentication Modules" @@ -190,4 +258,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam.conf.5 b/contrib/openpam/doc/man/pam.conf.5 index 112762c2ada3..64adb9d238a2 100644 --- a/contrib/openpam/doc/man/pam.conf.5 +++ b/contrib/openpam/doc/man/pam.conf.5 @@ -26,9 +26,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id: pam.conf.5 816 2014-09-12 07:50:22Z des $ +.\" $Id: pam.conf.5 924 2017-02-19 20:52:28Z des $ .\" -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM.CONF 5 .Os .Sh NAME @@ -212,4 +212,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_acct_mgmt.3 b/contrib/openpam/doc/man/pam_acct_mgmt.3 index f5bea769644d..b6d2d4f0fa5a 100644 --- a/contrib/openpam/doc/man/pam_acct_mgmt.3 +++ b/contrib/openpam/doc/man/pam_acct_mgmt.3 @@ -1,13 +1,11 @@ .\" Generated from pam_acct_mgmt.c by gendoc.pl .\" $Id: pam_acct_mgmt.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_ACCT_MGMT 3 .Os .Sh NAME .Nm pam_acct_mgmt .Nd perform PAM account validation procedures -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -81,4 +79,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_authenticate.3 b/contrib/openpam/doc/man/pam_authenticate.3 index 4ba1d2b0d76c..46a9994c6800 100644 --- a/contrib/openpam/doc/man/pam_authenticate.3 +++ b/contrib/openpam/doc/man/pam_authenticate.3 @@ -1,13 +1,11 @@ .\" Generated from pam_authenticate.c by gendoc.pl .\" $Id: pam_authenticate.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_AUTHENTICATE 3 .Os .Sh NAME .Nm pam_authenticate .Nd perform authentication within the PAM framework -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -95,4 +93,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_chauthtok.3 b/contrib/openpam/doc/man/pam_chauthtok.3 index 3ecf82276f1e..63a53e618e8f 100644 --- a/contrib/openpam/doc/man/pam_chauthtok.3 +++ b/contrib/openpam/doc/man/pam_chauthtok.3 @@ -1,13 +1,11 @@ .\" Generated from pam_chauthtok.c by gendoc.pl .\" $Id: pam_chauthtok.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_CHAUTHTOK 3 .Os .Sh NAME .Nm pam_chauthtok .Nd perform password related functions within the PAM framework -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -87,4 +85,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_close_session.3 b/contrib/openpam/doc/man/pam_close_session.3 index 32ba20085872..3d9ed399fad1 100644 --- a/contrib/openpam/doc/man/pam_close_session.3 +++ b/contrib/openpam/doc/man/pam_close_session.3 @@ -1,13 +1,11 @@ .\" Generated from pam_close_session.c by gendoc.pl .\" $Id: pam_close_session.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_CLOSE_SESSION 3 .Os .Sh NAME .Nm pam_close_session .Nd close an existing user session -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -77,4 +75,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_conv.3 b/contrib/openpam/doc/man/pam_conv.3 index 225df9670e71..dcf34a25bffd 100644 --- a/contrib/openpam/doc/man/pam_conv.3 +++ b/contrib/openpam/doc/man/pam_conv.3 @@ -1,6 +1,6 @@ .\"- .\" Copyright (c) 2002-2003 Networks Associates Technology, Inc. -.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav +.\" Copyright (c) 2004-2014 Dag-Erling Smørgrav .\" All rights reserved. .\" .\" This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,9 +32,9 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id: pam_conv.3 816 2014-09-12 07:50:22Z des $ +.\" $Id: pam_conv.3 924 2017-02-19 20:52:28Z des $ .\" -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_CONV 3 .Os .Sh NAME @@ -183,4 +183,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_end.3 b/contrib/openpam/doc/man/pam_end.3 index 2bb581e0a399..80ff655d3ad8 100644 --- a/contrib/openpam/doc/man/pam_end.3 +++ b/contrib/openpam/doc/man/pam_end.3 @@ -1,13 +1,11 @@ .\" Generated from pam_end.c by gendoc.pl -.\" $Id: pam_end.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_end.c 913 2017-01-21 15:11:12Z des $ +.Dd February 19, 2017 .Dt PAM_END 3 .Os .Sh NAME .Nm pam_end .Nd terminate the PAM transaction -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -27,11 +25,7 @@ last API call before the call to .Sh RETURN VALUES The .Fn pam_end -function returns one of the following values: -.Bl -tag -width 18n -.It Bq Er PAM_SYSTEM_ERR -System error. -.El +function returns 0 on success and -1 on failure. .Sh SEE ALSO .Xr pam 3 , .Xr pam_strerror 3 @@ -53,4 +47,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_error.3 b/contrib/openpam/doc/man/pam_error.3 index 73ba5f64b776..de63c1ec02c8 100644 --- a/contrib/openpam/doc/man/pam_error.3 +++ b/contrib/openpam/doc/man/pam_error.3 @@ -1,13 +1,11 @@ .\" Generated from pam_error.c by gendoc.pl .\" $Id: pam_error.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_ERROR 3 .Os .Sh NAME .Nm pam_error .Nd display an error message -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -54,4 +52,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_get_authtok.3 b/contrib/openpam/doc/man/pam_get_authtok.3 index 27bfb36d39bd..dab3de823305 100644 --- a/contrib/openpam/doc/man/pam_get_authtok.3 +++ b/contrib/openpam/doc/man/pam_get_authtok.3 @@ -1,13 +1,11 @@ .\" Generated from pam_get_authtok.c by gendoc.pl -.\" $Id: pam_get_authtok.c 807 2014-09-09 09:41:32Z des $ -.Dd September 12, 2014 +.\" $Id: pam_get_authtok.c 913 2017-01-21 15:11:12Z des $ +.Dd February 19, 2017 .Dt PAM_GET_AUTHTOK 3 .Os .Sh NAME .Nm pam_get_authtok .Nd retrieve authentication token -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -157,4 +155,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_get_data.3 b/contrib/openpam/doc/man/pam_get_data.3 index f470d91eafb4..35b3cd17cc13 100644 --- a/contrib/openpam/doc/man/pam_get_data.3 +++ b/contrib/openpam/doc/man/pam_get_data.3 @@ -1,13 +1,11 @@ .\" Generated from pam_get_data.c by gendoc.pl -.\" $Id: pam_get_data.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_get_data.c 913 2017-01-21 15:11:12Z des $ +.Dd February 19, 2017 .Dt PAM_GET_DATA 3 .Os .Sh NAME .Nm pam_get_data .Nd get module information -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -43,8 +41,6 @@ function returns one of the following values: .Bl -tag -width 18n .It Bq Er PAM_NO_MODULE_DATA Module data not found. -.It Bq Er PAM_SYSTEM_ERR -System error. .El .Sh SEE ALSO .Xr pam 3 , @@ -68,4 +64,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_get_item.3 b/contrib/openpam/doc/man/pam_get_item.3 index 2e24405040d4..c53e9228346b 100644 --- a/contrib/openpam/doc/man/pam_get_item.3 +++ b/contrib/openpam/doc/man/pam_get_item.3 @@ -1,13 +1,11 @@ .\" Generated from pam_get_item.c by gendoc.pl -.\" $Id: pam_get_item.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_get_item.c 913 2017-01-21 15:11:12Z des $ +.Dd February 19, 2017 .Dt PAM_GET_ITEM 3 .Os .Sh NAME .Nm pam_get_item .Nd get PAM information -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -78,8 +76,6 @@ function returns one of the following values: .Bl -tag -width 18n .It Bq Er PAM_SYMBOL_ERR Invalid symbol. -.It Bq Er PAM_SYSTEM_ERR -System error. .El .Sh SEE ALSO .Xr pam 3 , @@ -104,4 +100,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_get_user.3 b/contrib/openpam/doc/man/pam_get_user.3 index fad7e5d80542..96c1af61dfd7 100644 --- a/contrib/openpam/doc/man/pam_get_user.3 +++ b/contrib/openpam/doc/man/pam_get_user.3 @@ -1,13 +1,11 @@ .\" Generated from pam_get_user.c by gendoc.pl -.\" $Id: pam_get_user.c 670 2013-03-17 19:26:07Z des $ -.Dd September 12, 2014 +.\" $Id: pam_get_user.c 913 2017-01-21 15:11:12Z des $ +.Dd February 19, 2017 .Dt PAM_GET_USER 3 .Os .Sh NAME .Nm pam_get_user .Nd retrieve user name -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -103,4 +101,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_getenv.3 b/contrib/openpam/doc/man/pam_getenv.3 index 5302975e9a34..d2dd7829bb26 100644 --- a/contrib/openpam/doc/man/pam_getenv.3 +++ b/contrib/openpam/doc/man/pam_getenv.3 @@ -1,13 +1,11 @@ .\" Generated from pam_getenv.c by gendoc.pl -.\" $Id: pam_getenv.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_getenv.c 914 2017-01-21 15:15:29Z des $ +.Dd February 19, 2017 .Dt PAM_GETENV 3 .Os .Sh NAME .Nm pam_getenv .Nd retrieve the value of a PAM environment variable -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -52,4 +50,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_getenvlist.3 b/contrib/openpam/doc/man/pam_getenvlist.3 index b94087609c06..9fa65e746983 100644 --- a/contrib/openpam/doc/man/pam_getenvlist.3 +++ b/contrib/openpam/doc/man/pam_getenvlist.3 @@ -1,13 +1,11 @@ .\" Generated from pam_getenvlist.c by gendoc.pl -.\" $Id: pam_getenvlist.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_getenvlist.c 913 2017-01-21 15:11:12Z des $ +.Dd February 19, 2017 .Dt PAM_GETENVLIST 3 .Os .Sh NAME .Nm pam_getenvlist .Nd returns a list of all the PAM environment variables -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -73,4 +71,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_info.3 b/contrib/openpam/doc/man/pam_info.3 index 018c98e9c9ee..5fe84b25d74a 100644 --- a/contrib/openpam/doc/man/pam_info.3 +++ b/contrib/openpam/doc/man/pam_info.3 @@ -1,13 +1,11 @@ .\" Generated from pam_info.c by gendoc.pl .\" $Id: pam_info.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_INFO 3 .Os .Sh NAME .Nm pam_info .Nd display an information message -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -54,4 +52,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_open_session.3 b/contrib/openpam/doc/man/pam_open_session.3 index 1e80873ad2f5..052a17fe0f0a 100644 --- a/contrib/openpam/doc/man/pam_open_session.3 +++ b/contrib/openpam/doc/man/pam_open_session.3 @@ -1,13 +1,11 @@ .\" Generated from pam_open_session.c by gendoc.pl .\" $Id: pam_open_session.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_OPEN_SESSION 3 .Os .Sh NAME .Nm pam_open_session .Nd open a user session -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -78,4 +76,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_prompt.3 b/contrib/openpam/doc/man/pam_prompt.3 index 8fcf93dd261c..d98696687f9c 100644 --- a/contrib/openpam/doc/man/pam_prompt.3 +++ b/contrib/openpam/doc/man/pam_prompt.3 @@ -1,13 +1,11 @@ .\" Generated from pam_prompt.c by gendoc.pl .\" $Id: pam_prompt.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_PROMPT 3 .Os .Sh NAME .Nm pam_prompt .Nd call the conversation function -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -66,4 +64,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_putenv.3 b/contrib/openpam/doc/man/pam_putenv.3 index 0043a7b42e0b..e177c584e28f 100644 --- a/contrib/openpam/doc/man/pam_putenv.3 +++ b/contrib/openpam/doc/man/pam_putenv.3 @@ -1,13 +1,11 @@ .\" Generated from pam_putenv.c by gendoc.pl -.\" $Id: pam_putenv.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_putenv.c 914 2017-01-21 15:15:29Z des $ +.Dd February 19, 2017 .Dt PAM_PUTENV 3 .Os .Sh NAME .Nm pam_putenv .Nd set the value of an environment variable -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -57,4 +55,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_set_data.3 b/contrib/openpam/doc/man/pam_set_data.3 index 85f77f29e3bb..8232740f3a7d 100644 --- a/contrib/openpam/doc/man/pam_set_data.3 +++ b/contrib/openpam/doc/man/pam_set_data.3 @@ -1,13 +1,11 @@ .\" Generated from pam_set_data.c by gendoc.pl -.\" $Id: pam_set_data.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_set_data.c 913 2017-01-21 15:11:12Z des $ +.Dd February 19, 2017 .Dt PAM_SET_DATA 3 .Os .Sh NAME .Nm pam_set_data .Nd set module information -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -67,4 +65,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_set_item.3 b/contrib/openpam/doc/man/pam_set_item.3 index 855ce542c850..2165f5721538 100644 --- a/contrib/openpam/doc/man/pam_set_item.3 +++ b/contrib/openpam/doc/man/pam_set_item.3 @@ -1,13 +1,11 @@ .\" Generated from pam_set_item.c by gendoc.pl -.\" $Id: pam_set_item.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_set_item.c 918 2017-02-19 17:46:22Z des $ +.Dd February 19, 2017 .Dt PAM_SET_ITEM 3 .Os .Sh NAME .Nm pam_set_item .Nd set authentication information -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -61,4 +59,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_setcred.3 b/contrib/openpam/doc/man/pam_setcred.3 index 4b4833c8ccc8..830043b024e8 100644 --- a/contrib/openpam/doc/man/pam_setcred.3 +++ b/contrib/openpam/doc/man/pam_setcred.3 @@ -1,13 +1,11 @@ .\" Generated from pam_setcred.c by gendoc.pl .\" $Id: pam_setcred.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_SETCRED 3 .Os .Sh NAME .Nm pam_setcred .Nd modify / delete user credentials for an authentication service -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -90,4 +88,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_setenv.3 b/contrib/openpam/doc/man/pam_setenv.3 index 40f7fde67f01..09e9ec5532ac 100644 --- a/contrib/openpam/doc/man/pam_setenv.3 +++ b/contrib/openpam/doc/man/pam_setenv.3 @@ -1,13 +1,11 @@ .\" Generated from pam_setenv.c by gendoc.pl -.\" $Id: pam_setenv.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.\" $Id: pam_setenv.c 914 2017-01-21 15:15:29Z des $ +.Dd February 19, 2017 .Dt PAM_SETENV 3 .Os .Sh NAME .Nm pam_setenv .Nd mirrors setenv(3) -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -56,4 +54,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_sm_acct_mgmt.3 b/contrib/openpam/doc/man/pam_sm_acct_mgmt.3 index cbf0e81404e8..e28174f75395 100644 --- a/contrib/openpam/doc/man/pam_sm_acct_mgmt.3 +++ b/contrib/openpam/doc/man/pam_sm_acct_mgmt.3 @@ -1,13 +1,11 @@ .\" Generated from pam_sm_acct_mgmt.c by gendoc.pl .\" $Id: pam_sm_acct_mgmt.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_SM_ACCT_MGMT 3 .Os .Sh NAME .Nm pam_sm_acct_mgmt .Nd service module implementation for pam_acct_mgmt -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -71,4 +69,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_sm_authenticate.3 b/contrib/openpam/doc/man/pam_sm_authenticate.3 index ed4db85d45ca..3d7d0ce3014a 100644 --- a/contrib/openpam/doc/man/pam_sm_authenticate.3 +++ b/contrib/openpam/doc/man/pam_sm_authenticate.3 @@ -1,13 +1,11 @@ .\" Generated from pam_sm_authenticate.c by gendoc.pl .\" $Id: pam_sm_authenticate.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_SM_AUTHENTICATE 3 .Os .Sh NAME .Nm pam_sm_authenticate .Nd service module implementation for pam_authenticate -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -73,4 +71,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_sm_chauthtok.3 b/contrib/openpam/doc/man/pam_sm_chauthtok.3 index a574ce3bf750..3905973fa7c8 100644 --- a/contrib/openpam/doc/man/pam_sm_chauthtok.3 +++ b/contrib/openpam/doc/man/pam_sm_chauthtok.3 @@ -1,13 +1,11 @@ .\" Generated from pam_sm_chauthtok.c by gendoc.pl .\" $Id: pam_sm_chauthtok.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_SM_CHAUTHTOK 3 .Os .Sh NAME .Nm pam_sm_chauthtok .Nd service module implementation for pam_chauthtok -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -83,4 +81,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_sm_close_session.3 b/contrib/openpam/doc/man/pam_sm_close_session.3 index ff39eb3f44b9..d07ebf9aee6e 100644 --- a/contrib/openpam/doc/man/pam_sm_close_session.3 +++ b/contrib/openpam/doc/man/pam_sm_close_session.3 @@ -1,13 +1,11 @@ .\" Generated from pam_sm_close_session.c by gendoc.pl .\" $Id: pam_sm_close_session.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_SM_CLOSE_SESSION 3 .Os .Sh NAME .Nm pam_sm_close_session .Nd service module implementation for pam_close_session -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -65,4 +63,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_sm_open_session.3 b/contrib/openpam/doc/man/pam_sm_open_session.3 index ffe6c2c44e7e..d4bb88ba7d1c 100644 --- a/contrib/openpam/doc/man/pam_sm_open_session.3 +++ b/contrib/openpam/doc/man/pam_sm_open_session.3 @@ -1,13 +1,11 @@ .\" Generated from pam_sm_open_session.c by gendoc.pl .\" $Id: pam_sm_open_session.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_SM_OPEN_SESSION 3 .Os .Sh NAME .Nm pam_sm_open_session .Nd service module implementation for pam_open_session -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -65,4 +63,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_sm_setcred.3 b/contrib/openpam/doc/man/pam_sm_setcred.3 index 0d532b9c1bf8..0b0140fcabc7 100644 --- a/contrib/openpam/doc/man/pam_sm_setcred.3 +++ b/contrib/openpam/doc/man/pam_sm_setcred.3 @@ -1,13 +1,11 @@ .\" Generated from pam_sm_setcred.c by gendoc.pl .\" $Id: pam_sm_setcred.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_SM_SETCRED 3 .Os .Sh NAME .Nm pam_sm_setcred .Nd service module implementation for pam_setcred -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -71,4 +69,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_start.3 b/contrib/openpam/doc/man/pam_start.3 index 3d1cee15bf9e..72702cb7d827 100644 --- a/contrib/openpam/doc/man/pam_start.3 +++ b/contrib/openpam/doc/man/pam_start.3 @@ -1,13 +1,11 @@ .\" Generated from pam_start.c by gendoc.pl .\" $Id: pam_start.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_START 3 .Os .Sh NAME .Nm pam_start .Nd initiate a PAM transaction -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -76,4 +74,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_strerror.3 b/contrib/openpam/doc/man/pam_strerror.3 index 8ac60be520c9..a6901fb8dfb9 100644 --- a/contrib/openpam/doc/man/pam_strerror.3 +++ b/contrib/openpam/doc/man/pam_strerror.3 @@ -1,13 +1,11 @@ .\" Generated from pam_strerror.c by gendoc.pl .\" $Id: pam_strerror.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_STRERROR 3 .Os .Sh NAME .Nm pam_strerror .Nd get PAM standard error message string -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -55,4 +53,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_verror.3 b/contrib/openpam/doc/man/pam_verror.3 index 23c856a12205..a4aff7e39674 100644 --- a/contrib/openpam/doc/man/pam_verror.3 +++ b/contrib/openpam/doc/man/pam_verror.3 @@ -1,13 +1,11 @@ .\" Generated from pam_verror.c by gendoc.pl .\" $Id: pam_verror.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_VERROR 3 .Os .Sh NAME .Nm pam_verror .Nd display an error message -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -58,4 +56,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_vinfo.3 b/contrib/openpam/doc/man/pam_vinfo.3 index 879963650950..b9f9d3f29e9b 100644 --- a/contrib/openpam/doc/man/pam_vinfo.3 +++ b/contrib/openpam/doc/man/pam_vinfo.3 @@ -1,13 +1,11 @@ .\" Generated from pam_vinfo.c by gendoc.pl .\" $Id: pam_vinfo.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_VINFO 3 .Os .Sh NAME .Nm pam_vinfo .Nd display an information message -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -58,4 +56,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/doc/man/pam_vprompt.3 b/contrib/openpam/doc/man/pam_vprompt.3 index fb4a8ac345d6..bd081fc776b3 100644 --- a/contrib/openpam/doc/man/pam_vprompt.3 +++ b/contrib/openpam/doc/man/pam_vprompt.3 @@ -1,13 +1,11 @@ .\" Generated from pam_vprompt.c by gendoc.pl .\" $Id: pam_vprompt.c 648 2013-03-05 17:54:27Z des $ -.Dd September 12, 2014 +.Dd February 19, 2017 .Dt PAM_VPROMPT 3 .Os .Sh NAME .Nm pam_vprompt .Nd call the conversation function -.Sh LIBRARY -.Lb libpam .Sh SYNOPSIS .In sys/types.h .In security/pam_appl.h @@ -95,4 +93,4 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\(/orgrav Aq des@des.no . +.An Dag-Erling Sm\(/orgrav Aq Mt des@des.no . diff --git a/contrib/openpam/include/Makefile.in b/contrib/openpam/include/Makefile.in index b8354681a94e..a2464ca91140 100644 --- a/contrib/openpam/include/Makefile.in +++ b/contrib/openpam/include/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ # $Id: Makefile.am 648 2013-03-05 17:54:27Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,11 +90,14 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -144,6 +157,7 @@ am__define_uniq_tagged_files = \ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -183,6 +197,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -213,6 +228,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -236,6 +252,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -305,7 +322,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -600,6 +616,8 @@ uninstall-am: mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/include/security/Makefile.am b/contrib/openpam/include/security/Makefile.am index 74d63736ad6e..c3d10f32a08d 100644 --- a/contrib/openpam/include/security/Makefile.am +++ b/contrib/openpam/include/security/Makefile.am @@ -1,4 +1,4 @@ -# $Id: Makefile.am 714 2013-08-19 15:30:21Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ securitydir = $(includedir)/security diff --git a/contrib/openpam/include/security/Makefile.in b/contrib/openpam/include/security/Makefile.in index b36341bc7fc3..93cd98873048 100644 --- a/contrib/openpam/include/security/Makefile.in +++ b/contrib/openpam/include/security/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,20 @@ @SET_MAKE@ -# $Id: Makefile.am 714 2013-08-19 15:30:21Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,12 +91,15 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/security -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(security_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(security_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -158,6 +171,7 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -172,6 +186,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -202,6 +217,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -225,6 +241,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -303,7 +320,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/security/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/security/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -550,6 +566,8 @@ uninstall-am: uninstall-securityHEADERS mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-securityHEADERS +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/include/security/openpam.h b/contrib/openpam/include/security/openpam.h index 0956997d9a0d..77f0bb8eb719 100644 --- a/contrib/openpam/include/security/openpam.h +++ b/contrib/openpam/include/security/openpam.h @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2011 Dag-Erling Smørgrav + * Copyright (c) 2004-2015 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam.h 648 2013-03-05 17:54:27Z des $ + * $Id: openpam.h 890 2016-01-11 16:22:09Z des $ */ #ifndef SECURITY_OPENPAM_H_INCLUDED @@ -186,6 +186,7 @@ enum { OPENPAM_VERIFY_POLICY_FILE, OPENPAM_RESTRICT_MODULE_NAME, OPENPAM_VERIFY_MODULE_FILE, + OPENPAM_FALLBACK_TO_OTHER, OPENPAM_NUM_FEATURES }; diff --git a/contrib/openpam/include/security/openpam_version.h b/contrib/openpam/include/security/openpam_version.h index c5bf71dd6d97..f10b6a945dea 100644 --- a/contrib/openpam/include/security/openpam_version.h +++ b/contrib/openpam/include/security/openpam_version.h @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2011 Dag-Erling Smørgrav + * Copyright (c) 2004-2014 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,14 +32,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_version.h 812 2014-09-12 07:24:23Z des $ + * $Id: openpam_version.h 923 2017-02-19 19:31:16Z des $ */ #ifndef SECURITY_OPENPAM_VERSION_H_INCLUDED #define SECURITY_OPENPAM_VERSION_H_INCLUDED #define OPENPAM -#define OPENPAM_VERSION 20140912 -#define OPENPAM_RELEASE "Ourouparia" +#define OPENPAM_VERSION 20170219 +#define OPENPAM_RELEASE "Radula" #endif /* !SECURITY_OPENPAM_VERSION_H_INCLUDED */ diff --git a/contrib/openpam/include/security/pam_appl.h b/contrib/openpam/include/security/pam_appl.h index 755409a77eb4..8edf897dfe7e 100644 --- a/contrib/openpam/include/security/pam_appl.h +++ b/contrib/openpam/include/security/pam_appl.h @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_appl.h 648 2013-03-05 17:54:27Z des $ + * $Id: pam_appl.h 913 2017-01-21 15:11:12Z des $ */ #ifndef SECURITY_PAM_APPL_H_INCLUDED @@ -72,7 +72,8 @@ pam_close_session(pam_handle_t *_pamh, int pam_end(pam_handle_t *_pamh, - int _status); + int _status) + OPENPAM_NONNULL((1)); int pam_get_data(const pam_handle_t *_pamh, diff --git a/contrib/openpam/install-sh b/contrib/openpam/install-sh index 377bb8687ffe..0b0fdcbba69a 100755 --- a/contrib/openpam/install-sh +++ b/contrib/openpam/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-11-20.07; # UTC +scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC # This script is compatible with the BSD install script, but was written # from scratch. +tab=' ' nl=' ' -IFS=" "" $nl" +IFS=" $tab$nl" -# set DOITPROG to echo to test this script +# Set DOITPROG to "echo" to test this script. -# Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi +doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. @@ -68,17 +64,6 @@ mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - posix_mkdir= # Desired mode of installed file. @@ -97,7 +82,7 @@ dir_arg= dst_arg= copy_on_change=false -no_target_directory= +is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE @@ -137,46 +122,57 @@ while test $# -ne 0; do -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift;; + shift;; -s) stripcmd=$stripprog;; - -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; - -T) no_target_directory=true;; + -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; - --) shift - break;; + --) shift + break;; - -*) echo "$0: invalid option: $1" >&2 - exit 1;; + -*) echo "$0: invalid option: $1" >&2 + exit 1;; *) break;; esac shift done +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. @@ -207,6 +203,15 @@ if test $# -eq 0; then exit 0 fi +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 @@ -223,16 +228,16 @@ if test -z "$dir_arg"; then *[0-7]) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw='% 200' + u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw=,u+rw + u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac @@ -269,41 +274,15 @@ do # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - + dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi @@ -314,74 +293,74 @@ do if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; esac if $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else @@ -391,53 +370,51 @@ do # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - eval "$initialize_posix_glob" - oIFS=$IFS IFS=/ - $posix_glob set -f + set -f set fnord $dstdir shift - $posix_glob set +f + set +f IFS=$oIFS prefixes= for d do - test X"$d" = X && continue + test X"$d" = X && continue - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ done if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true fi fi fi @@ -472,15 +449,12 @@ do # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - + set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then @@ -493,24 +467,24 @@ do # to itself, or perhaps because mv is so ancient that it does not # support -f. { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 diff --git a/contrib/openpam/lib/Makefile.am b/contrib/openpam/lib/Makefile.am index 9f2d21d7a44f..002d7bbddb1e 100644 --- a/contrib/openpam/lib/Makefile.am +++ b/contrib/openpam/lib/Makefile.am @@ -1,3 +1,7 @@ -# $Id: Makefile.am 714 2013-08-19 15:30:21Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ -SUBDIRS = libpam +SUBDIRS = + +if !WITH_SYSTEM_LIBPAM +SUBDIRS += libpam +endif diff --git a/contrib/openpam/lib/Makefile.in b/contrib/openpam/lib/Makefile.in index 198e909926da..74bf0a7d932d 100644 --- a/contrib/openpam/lib/Makefile.in +++ b/contrib/openpam/lib/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,9 +14,19 @@ @SET_MAKE@ -# $Id: Makefile.am 714 2013-08-19 15:30:21Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,12 +89,16 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +@WITH_SYSTEM_LIBPAM_FALSE@am__append_1 = libpam subdir = lib -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -143,7 +157,8 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) +DIST_SUBDIRS = libpam +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -183,6 +198,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -213,6 +229,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -236,6 +253,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -289,7 +307,7 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = libpam +SUBDIRS = $(am__append_1) all: all-recursive .SUFFIXES: @@ -305,7 +323,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lib/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -600,6 +617,8 @@ uninstall-am: mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/lib/libpam/Makefile.am b/contrib/openpam/lib/libpam/Makefile.am index a7781d656786..faf0dd553f21 100644 --- a/contrib/openpam/lib/libpam/Makefile.am +++ b/contrib/openpam/lib/libpam/Makefile.am @@ -1,4 +1,4 @@ -# $Id: Makefile.am 807 2014-09-09 09:41:32Z des $ +# $Id: Makefile.am 833 2014-10-28 09:03:41Z des $ NULL = @@ -79,8 +79,8 @@ libpam_la_SOURCES = \ pam_vprompt.c \ $(NULL) -libpam_la_LDFLAGS = -no-undefined -version-info @LIB_MAJ@ -libpam_la_LIBADD = @DL_LIBS@ +libpam_la_LDFLAGS = -no-undefined -version-info $(LIB_MAJ) +libpam_la_LIBADD = $(DL_LIBS) EXTRA_DIST = \ pam_authenticate_secondary.c \ diff --git a/contrib/openpam/lib/libpam/Makefile.in b/contrib/openpam/lib/libpam/Makefile.in index f2971163e0ed..7e73926685d4 100644 --- a/contrib/openpam/lib/libpam/Makefile.in +++ b/contrib/openpam/lib/libpam/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,11 +14,21 @@ @SET_MAKE@ -# $Id: Makefile.am 807 2014-09-09 09:41:32Z des $ +# $Id: Makefile.am 833 2014-10-28 09:03:41Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,12 +92,15 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib/libpam -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -121,7 +134,8 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) -libpam_la_DEPENDENCIES = +am__DEPENDENCIES_1 = +libpam_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__objects_1 = am_libpam_la_OBJECTS = openpam_asprintf.lo openpam_borrow_cred.lo \ openpam_check_owner_perms.lo openpam_configure.lo \ @@ -211,6 +225,7 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -225,6 +240,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -255,6 +271,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -278,6 +295,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -407,8 +425,8 @@ libpam_la_SOURCES = \ pam_vprompt.c \ $(NULL) -libpam_la_LDFLAGS = -no-undefined -version-info @LIB_MAJ@ -libpam_la_LIBADD = @DL_LIBS@ +libpam_la_LDFLAGS = -no-undefined -version-info $(LIB_MAJ) +libpam_la_LIBADD = $(DL_LIBS) EXTRA_DIST = \ pam_authenticate_secondary.c \ pam_get_mapped_authtok.c \ @@ -444,7 +462,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/libpam/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign lib/libpam/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -796,6 +813,8 @@ uninstall-am: uninstall-libLTLIBRARIES mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/lib/libpam/openpam_configure.c b/contrib/openpam/lib/libpam/openpam_configure.c index 5a4ca620222f..e06eba2859dc 100644 --- a/contrib/openpam/lib/libpam/openpam_configure.c +++ b/contrib/openpam/lib/libpam/openpam_configure.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2001-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2014 Dag-Erling Smørgrav + * Copyright (c) 2004-2015 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_configure.c 796 2014-06-03 21:30:08Z des $ + * $Id: openpam_configure.c 890 2016-01-11 16:22:09Z des $ */ #ifdef HAVE_CONFIG_H @@ -410,6 +410,10 @@ openpam_load_chain(pam_handle_t *pamh, for (path = openpam_policy_path; *path != NULL; ++path) { /* construct filename */ len = strlcpy(filename, *path, sizeof filename); + if (len >= sizeof filename) { + errno = ENAMETOOLONG; + RETURNN(-1); + } if (filename[len - 1] == '/') { len = strlcat(filename, service, sizeof filename); if (len >= sizeof filename) { @@ -463,8 +467,10 @@ openpam_configure(pam_handle_t *pamh, for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt) { if (pamh->chains[fclt] != NULL) continue; - if (openpam_load_chain(pamh, PAM_OTHER, fclt) < 0) - goto load_err; + if (OPENPAM_FEATURE(FALLBACK_TO_OTHER)) { + if (openpam_load_chain(pamh, PAM_OTHER, fclt) < 0) + goto load_err; + } } RETURNC(PAM_SUCCESS); load_err: diff --git a/contrib/openpam/lib/libpam/openpam_ctype.h b/contrib/openpam/lib/libpam/openpam_ctype.h index d99d34b4dacf..671c2f5cf8c9 100644 --- a/contrib/openpam/lib/libpam/openpam_ctype.h +++ b/contrib/openpam/lib/libpam/openpam_ctype.h @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Dag-Erling Smørgrav + * Copyright (c) 2012-2014 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_ctype.h 763 2014-02-26 16:29:16Z des $ + * $Id: openpam_ctype.h 890 2016-01-11 16:22:09Z des $ */ #ifndef OPENPAM_CTYPE_H_INCLUDED diff --git a/contrib/openpam/lib/libpam/openpam_dispatch.c b/contrib/openpam/lib/libpam/openpam_dispatch.c index 0cff63184850..391ce8050d8f 100644 --- a/contrib/openpam/lib/libpam/openpam_dispatch.c +++ b/contrib/openpam/lib/libpam/openpam_dispatch.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2011 Dag-Erling Smørgrav + * Copyright (c) 2004-2015 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_dispatch.c 807 2014-09-09 09:41:32Z des $ + * $Id: openpam_dispatch.c 913 2017-01-21 15:11:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -41,6 +41,8 @@ #include +#include + #include #include "openpam_impl.h" @@ -67,8 +69,6 @@ openpam_dispatch(pam_handle_t *pamh, int debug; ENTER(); - if (pamh == NULL) - RETURNC(PAM_SYSTEM_ERR); /* prevent recursion */ if (pamh->current != NULL) { @@ -128,7 +128,7 @@ openpam_dispatch(pam_handle_t *pamh, if (r == PAM_IGNORE) continue; - if (r == PAM_SUCCESS) { + if (r == PAM_SUCCESS) { ++nsuccess; /* * For pam_setcred() and pam_chauthtok() with the diff --git a/contrib/openpam/lib/libpam/openpam_dlfunc.h b/contrib/openpam/lib/libpam/openpam_dlfunc.h index a92ab9cd368d..6f8724a65d4f 100644 --- a/contrib/openpam/lib/libpam/openpam_dlfunc.h +++ b/contrib/openpam/lib/libpam/openpam_dlfunc.h @@ -10,6 +10,9 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -23,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_dlfunc.h 660 2013-03-11 15:08:52Z des $ + * $Id: openpam_dlfunc.h 872 2015-12-01 19:25:07Z des $ */ #ifndef OPENPAM_DLFCN_H_INCLUDED diff --git a/contrib/openpam/lib/libpam/openpam_features.c b/contrib/openpam/lib/libpam/openpam_features.c index 8ca8828058be..387d27bcd384 100644 --- a/contrib/openpam/lib/libpam/openpam_features.c +++ b/contrib/openpam/lib/libpam/openpam_features.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Dag-Erling Smørgrav + * Copyright (c) 2012-2015 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_features.c 648 2013-03-05 17:54:27Z des $ + * $Id: openpam_features.c 890 2016-01-11 16:22:09Z des $ */ #ifdef HAVE_CONFIG_H @@ -65,4 +65,9 @@ struct openpam_feature openpam_features[OPENPAM_NUM_FEATURES] = { "Verify ownership and permissions of module files", 1 ), + STRUCT_OPENPAM_FEATURE( + FALLBACK_TO_OTHER, + "Fall back to \"other\" policy for empty chains", + 1 + ), }; diff --git a/contrib/openpam/lib/libpam/openpam_findenv.c b/contrib/openpam/lib/libpam/openpam_findenv.c index 3512c3f3c96d..3ad2c845794a 100644 --- a/contrib/openpam/lib/libpam/openpam_findenv.c +++ b/contrib/openpam/lib/libpam/openpam_findenv.c @@ -32,13 +32,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_findenv.c 648 2013-03-05 17:54:27Z des $ + * $Id: openpam_findenv.c 914 2017-01-21 15:15:29Z des $ */ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include #include #include @@ -59,12 +60,11 @@ openpam_findenv(pam_handle_t *pamh, int i; ENTER(); - if (pamh == NULL) - RETURNN(-1); for (i = 0; i < pamh->env_count; ++i) if (strncmp(pamh->env[i], name, len) == 0 && pamh->env[i][len] == '=') RETURNN(i); + errno = ENOENT; RETURNN(-1); } diff --git a/contrib/openpam/lib/libpam/openpam_impl.h b/contrib/openpam/lib/libpam/openpam_impl.h index c533acb77572..589a3b325539 100644 --- a/contrib/openpam/lib/libpam/openpam_impl.h +++ b/contrib/openpam/lib/libpam/openpam_impl.h @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_impl.h 648 2013-03-05 17:54:27Z des $ + * $Id: openpam_impl.h 915 2017-02-07 12:03:19Z des $ */ #ifndef OPENPAM_IMPL_H_INCLUDED @@ -130,19 +130,28 @@ struct pam_handle { /* * Internal functions */ -int openpam_configure(pam_handle_t *, const char *); -int openpam_dispatch(pam_handle_t *, int, int); -int openpam_findenv(pam_handle_t *, const char *, size_t); -pam_module_t *openpam_load_module(const char *); -void openpam_clear_chains(pam_chain_t **); +int openpam_configure(pam_handle_t *, const char *) + OPENPAM_NONNULL((1)); +int openpam_dispatch(pam_handle_t *, int, int) + OPENPAM_NONNULL((1)); +int openpam_findenv(pam_handle_t *, const char *, size_t) + OPENPAM_NONNULL((1,2)); +pam_module_t *openpam_load_module(const char *) + OPENPAM_NONNULL((1)); +void openpam_clear_chains(pam_chain_t **) + OPENPAM_NONNULL((1)); -int openpam_check_desc_owner_perms(const char *, int); -int openpam_check_path_owner_perms(const char *); +int openpam_check_desc_owner_perms(const char *, int) + OPENPAM_NONNULL((1)); +int openpam_check_path_owner_perms(const char *) + OPENPAM_NONNULL((1)); #ifdef OPENPAM_STATIC_MODULES -pam_module_t *openpam_static(const char *); +pam_module_t *openpam_static(const char *) + OPENPAM_NONNULL((1)); #endif -pam_module_t *openpam_dynamic(const char *); +pam_module_t *openpam_dynamic(const char *) + OPENPAM_NONNULL((1)); #define FREE(p) \ do { \ @@ -152,11 +161,11 @@ pam_module_t *openpam_dynamic(const char *); #define FREEV(c, v) \ do { \ - while (c) { \ - --(c); \ - FREE((v)[(c)]); \ + if ((v) != NULL) { \ + while ((c)-- > 0) \ + FREE((v)[(c)]); \ + FREE(v); \ } \ - FREE(v); \ } while (0) #include "openpam_constants.h" diff --git a/contrib/openpam/lib/libpam/openpam_load.c b/contrib/openpam/lib/libpam/openpam_load.c index a926dbd1288e..614c6fb40938 100644 --- a/contrib/openpam/lib/libpam/openpam_load.c +++ b/contrib/openpam/lib/libpam/openpam_load.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2011 Dag-Erling Smørgrav + * Copyright (c) 2004-2013 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_load.c 664 2013-03-17 10:56:15Z des $ + * $Id: openpam_load.c 890 2016-01-11 16:22:09Z des $ */ #ifdef HAVE_CONFIG_H @@ -84,6 +84,7 @@ openpam_load_module(const char *modulename) static void openpam_release_module(pam_module_t *module) { + if (module == NULL) return; if (module->dlh == NULL) @@ -104,6 +105,7 @@ openpam_release_module(pam_module_t *module) static void openpam_destroy_chain(pam_chain_t *chain) { + if (chain == NULL) return; openpam_destroy_chain(chain->next); diff --git a/contrib/openpam/lib/libpam/openpam_readlinev.c b/contrib/openpam/lib/libpam/openpam_readlinev.c index 5edc368fd356..d73fc5580e8f 100644 --- a/contrib/openpam/lib/libpam/openpam_readlinev.c +++ b/contrib/openpam/lib/libpam/openpam_readlinev.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Dag-Erling Smørgrav + * Copyright (c) 2012-2016 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_readlinev.c 648 2013-03-05 17:54:27Z des $ + * $Id: openpam_readlinev.c 890 2016-01-11 16:22:09Z des $ */ #ifdef HAVE_CONFIG_H @@ -79,6 +79,7 @@ openpam_readlinev(FILE *f, int *lineno, int *lenp) /* insert our word */ wordv[wordvlen++] = word; wordv[wordvlen] = NULL; + word = NULL; } if (errno != 0) { /* I/O error or out of memory */ @@ -86,6 +87,7 @@ openpam_readlinev(FILE *f, int *lineno, int *lenp) while (wordvlen--) free(wordv[wordvlen]); free(wordv); + free(word); errno = serrno; return (NULL); } diff --git a/contrib/openpam/lib/libpam/openpam_readword.c b/contrib/openpam/lib/libpam/openpam_readword.c index b52e7dfa41c0..a73b900cbacd 100644 --- a/contrib/openpam/lib/libpam/openpam_readword.c +++ b/contrib/openpam/lib/libpam/openpam_readword.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Dag-Erling Smørgrav + * Copyright (c) 2012-2014 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_readword.c 648 2013-03-05 17:54:27Z des $ + * $Id: openpam_readword.c 916 2017-02-07 12:25:58Z des $ */ #ifdef HAVE_CONFIG_H @@ -134,7 +134,7 @@ openpam_readword(FILE *f, int *lineno, size_t *lenp) } if (ch == EOF && (escape || quote)) { /* Missing escaped character or closing quote. */ - openpam_log(PAM_LOG_ERROR, "unexpected end of file"); + openpam_log(PAM_LOG_DEBUG, "unexpected end of file"); free(word); errno = EINVAL; return (NULL); diff --git a/contrib/openpam/lib/libpam/openpam_strlset.c b/contrib/openpam/lib/libpam/openpam_strlset.c index 2f4c4fa7e188..febdb5c4ebc8 100644 --- a/contrib/openpam/lib/libpam/openpam_strlset.c +++ b/contrib/openpam/lib/libpam/openpam_strlset.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2011-2012 Dag-Erling Smørgrav + * Copyright (c) 2014 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_strlset.c 807 2014-09-09 09:41:32Z des $ + * $Id: openpam_strlset.c 890 2016-01-11 16:22:09Z des $ */ #ifdef HAVE_CONFIG_H diff --git a/contrib/openpam/lib/libpam/openpam_strlset.h b/contrib/openpam/lib/libpam/openpam_strlset.h index 4bb0bb6404d0..282a26bdbde2 100644 --- a/contrib/openpam/lib/libpam/openpam_strlset.h +++ b/contrib/openpam/lib/libpam/openpam_strlset.h @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2011 Dag-Erling Smørgrav + * Copyright (c) 2014 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_strlset.h 807 2014-09-09 09:41:32Z des $ + * $Id: openpam_strlset.h 890 2016-01-11 16:22:09Z des $ */ #ifndef OPENPAM_STRLSET_H_INCLUDED diff --git a/contrib/openpam/lib/libpam/openpam_ttyconv.c b/contrib/openpam/lib/libpam/openpam_ttyconv.c index d21320ca7228..7591eed682bc 100644 --- a/contrib/openpam/lib/libpam/openpam_ttyconv.c +++ b/contrib/openpam/lib/libpam/openpam_ttyconv.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2011 Dag-Erling Smørgrav + * Copyright (c) 2004-2014 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: openpam_ttyconv.c 807 2014-09-09 09:41:32Z des $ + * $Id: openpam_ttyconv.c 890 2016-01-11 16:22:09Z des $ */ #ifdef HAVE_CONFIG_H diff --git a/contrib/openpam/lib/libpam/pam_end.c b/contrib/openpam/lib/libpam/pam_end.c index f7ece50e535f..c855b59c4885 100644 --- a/contrib/openpam/lib/libpam/pam_end.c +++ b/contrib/openpam/lib/libpam/pam_end.c @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_end.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_end.c 913 2017-01-21 15:11:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -60,8 +60,6 @@ pam_end(pam_handle_t *pamh, int i; ENTER(); - if (pamh == NULL) - RETURNC(PAM_SYSTEM_ERR); /* clear module data */ while ((dp = pamh->module_data) != NULL) { @@ -91,12 +89,6 @@ pam_end(pam_handle_t *pamh, RETURNC(PAM_SUCCESS); } -/* - * Error codes: - * - * PAM_SYSTEM_ERR - */ - /** * The =pam_end function terminates a PAM transaction and destroys the * corresponding PAM context, releasing all resources allocated to it. diff --git a/contrib/openpam/lib/libpam/pam_get_authtok.c b/contrib/openpam/lib/libpam/pam_get_authtok.c index 36382f5d8690..83c6b7053fac 100644 --- a/contrib/openpam/lib/libpam/pam_get_authtok.c +++ b/contrib/openpam/lib/libpam/pam_get_authtok.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2011 Dag-Erling Smørgrav + * Copyright (c) 2004-2017 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_get_authtok.c 807 2014-09-09 09:41:32Z des $ + * $Id: pam_get_authtok.c 913 2017-01-21 15:11:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -76,8 +76,6 @@ pam_get_authtok(pam_handle_t *pamh, int pitem, r, style, twice; ENTER(); - if (pamh == NULL || authtok == NULL) - RETURNC(PAM_SYSTEM_ERR); *authtok = NULL; twice = 0; switch (item) { @@ -122,9 +120,11 @@ pam_get_authtok(pam_handle_t *pamh, if ((promptp = openpam_get_option(pamh, prompt_option)) != NULL) prompt = promptp; /* no prompt provided, see if there is one tucked away somewhere */ - if (prompt == NULL) - if (pam_get_item(pamh, pitem, &promptp) && promptp != NULL) + if (prompt == NULL) { + r = pam_get_item(pamh, pitem, &promptp); + if (r == PAM_SUCCESS && promptp != NULL) prompt = promptp; + } /* fall back to hardcoded default */ if (prompt == NULL) prompt = default_prompt; diff --git a/contrib/openpam/lib/libpam/pam_get_data.c b/contrib/openpam/lib/libpam/pam_get_data.c index de31d7013f4c..a2f5072cb374 100644 --- a/contrib/openpam/lib/libpam/pam_get_data.c +++ b/contrib/openpam/lib/libpam/pam_get_data.c @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_get_data.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_get_data.c 913 2017-01-21 15:11:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -60,8 +60,6 @@ pam_get_data(const pam_handle_t *pamh, pam_data_t *dp; ENTERS(module_data_name); - if (pamh == NULL) - RETURNC(PAM_SYSTEM_ERR); for (dp = pamh->module_data; dp != NULL; dp = dp->next) { if (strcmp(dp->name, module_data_name) == 0) { *data = (void *)dp->data; @@ -74,7 +72,6 @@ pam_get_data(const pam_handle_t *pamh, /* * Error codes: * - * PAM_SYSTEM_ERR * PAM_NO_MODULE_DATA */ diff --git a/contrib/openpam/lib/libpam/pam_get_item.c b/contrib/openpam/lib/libpam/pam_get_item.c index 9dc3dc33b202..e28012ea2672 100644 --- a/contrib/openpam/lib/libpam/pam_get_item.c +++ b/contrib/openpam/lib/libpam/pam_get_item.c @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_get_item.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_get_item.c 913 2017-01-21 15:11:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -59,8 +59,6 @@ pam_get_item(const pam_handle_t *pamh, { ENTERI(item_type); - if (pamh == NULL) - RETURNC(PAM_SYSTEM_ERR); switch (item_type) { case PAM_SERVICE: case PAM_USER: @@ -86,7 +84,6 @@ pam_get_item(const pam_handle_t *pamh, * Error codes: * * PAM_SYMBOL_ERR - * PAM_SYSTEM_ERR */ /** diff --git a/contrib/openpam/lib/libpam/pam_get_user.c b/contrib/openpam/lib/libpam/pam_get_user.c index 2e22e0ec0364..f3fc4b60b8f2 100644 --- a/contrib/openpam/lib/libpam/pam_get_user.c +++ b/contrib/openpam/lib/libpam/pam_get_user.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2011 Dag-Erling Smørgrav + * Copyright (c) 2004-2017 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_get_user.c 670 2013-03-17 19:26:07Z des $ + * $Id: pam_get_user.c 913 2017-01-21 15:11:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -69,8 +69,6 @@ pam_get_user(pam_handle_t *pamh, int r; ENTER(); - if (pamh == NULL || user == NULL) - RETURNC(PAM_SYSTEM_ERR); r = pam_get_item(pamh, PAM_USER, (const void **)user); if (r == PAM_SUCCESS && *user != NULL) RETURNC(PAM_SUCCESS); @@ -78,10 +76,11 @@ pam_get_user(pam_handle_t *pamh, if ((promptp = openpam_get_option(pamh, "user_prompt")) != NULL) prompt = promptp; /* no prompt provided, see if there is one tucked away somewhere */ - if (prompt == NULL) - if (pam_get_item(pamh, PAM_USER_PROMPT, &promptp) && - promptp != NULL) + if (prompt == NULL) { + r = pam_get_item(pamh, PAM_USER_PROMPT, &promptp); + if (r == PAM_SUCCESS && promptp != NULL) prompt = promptp; + } /* fall back to hardcoded default */ if (prompt == NULL) prompt = user_prompt; diff --git a/contrib/openpam/lib/libpam/pam_getenv.c b/contrib/openpam/lib/libpam/pam_getenv.c index 666903549454..1e034468fbc2 100644 --- a/contrib/openpam/lib/libpam/pam_getenv.c +++ b/contrib/openpam/lib/libpam/pam_getenv.c @@ -32,13 +32,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_getenv.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_getenv.c 914 2017-01-21 15:15:29Z des $ */ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include #include #include @@ -61,18 +62,14 @@ pam_getenv(pam_handle_t *pamh, int i; ENTERS(name); - if (pamh == NULL) - RETURNS(NULL); - if (name == NULL || strchr(name, '=') != NULL) + if (strchr(name, '=') != NULL) { + errno = EINVAL; RETURNS(NULL); + } if ((i = openpam_findenv(pamh, name, strlen(name))) < 0) RETURNS(NULL); - for (str = pamh->env[i]; *str != '\0'; ++str) { - if (*str == '=') { - ++str; - break; - } - } + if ((str = strchr(pamh->env[i], '=')) == NULL) + RETURNS(""); RETURNS(str); } diff --git a/contrib/openpam/lib/libpam/pam_getenvlist.c b/contrib/openpam/lib/libpam/pam_getenvlist.c index 9dcded0e79b9..4139c2fb4d31 100644 --- a/contrib/openpam/lib/libpam/pam_getenvlist.c +++ b/contrib/openpam/lib/libpam/pam_getenvlist.c @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_getenvlist.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_getenvlist.c 913 2017-01-21 15:11:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -60,8 +60,6 @@ pam_getenvlist(pam_handle_t *pamh) int i; ENTER(); - if (pamh == NULL) - RETURNP(NULL); envlist = malloc(sizeof(char *) * (pamh->env_count + 1)); if (envlist == NULL) { openpam_log(PAM_LOG_ERROR, "%s", diff --git a/contrib/openpam/lib/libpam/pam_putenv.c b/contrib/openpam/lib/libpam/pam_putenv.c index 0d4d71036cf5..605277fda6f4 100644 --- a/contrib/openpam/lib/libpam/pam_putenv.c +++ b/contrib/openpam/lib/libpam/pam_putenv.c @@ -32,13 +32,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_putenv.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_putenv.c 914 2017-01-21 15:15:29Z des $ */ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include #include #include @@ -58,15 +59,16 @@ pam_putenv(pam_handle_t *pamh, const char *namevalue) { char **env, *p; + size_t env_size; int i; ENTER(); - if (pamh == NULL) - RETURNC(PAM_SYSTEM_ERR); /* sanity checks */ - if (namevalue == NULL || (p = strchr(namevalue, '=')) == NULL) + if ((p = strchr(namevalue, '=')) == NULL) { + errno = EINVAL; RETURNC(PAM_SYSTEM_ERR); + } /* see if the variable is already in the environment */ if ((i = openpam_findenv(pamh, namevalue, p - namevalue)) >= 0) { @@ -79,12 +81,12 @@ pam_putenv(pam_handle_t *pamh, /* grow the environment list if necessary */ if (pamh->env_count == pamh->env_size) { - env = realloc(pamh->env, - sizeof(char *) * (pamh->env_size * 2 + 1)); + env_size = pamh->env_size * 2 + 1; + env = realloc(pamh->env, sizeof(char *) * env_size); if (env == NULL) RETURNC(PAM_BUF_ERR); pamh->env = env; - pamh->env_size = pamh->env_size * 2 + 1; + pamh->env_size = env_size; } /* add the variable at the end */ diff --git a/contrib/openpam/lib/libpam/pam_set_data.c b/contrib/openpam/lib/libpam/pam_set_data.c index 344f4ef30fae..6a26b6fb02e0 100644 --- a/contrib/openpam/lib/libpam/pam_set_data.c +++ b/contrib/openpam/lib/libpam/pam_set_data.c @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_set_data.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_set_data.c 913 2017-01-21 15:11:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -64,8 +64,6 @@ pam_set_data(pam_handle_t *pamh, pam_data_t *dp; ENTERS(module_data_name); - if (pamh == NULL) - RETURNC(PAM_SYSTEM_ERR); for (dp = pamh->module_data; dp != NULL; dp = dp->next) { if (strcmp(dp->name, module_data_name) == 0) { if (dp->cleanup) diff --git a/contrib/openpam/lib/libpam/pam_set_item.c b/contrib/openpam/lib/libpam/pam_set_item.c index 10c855aa9e10..0e8f76f7fa6b 100644 --- a/contrib/openpam/lib/libpam/pam_set_item.c +++ b/contrib/openpam/lib/libpam/pam_set_item.c @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_set_item.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_set_item.c 918 2017-02-19 17:46:22Z des $ */ #ifdef HAVE_CONFIG_H @@ -60,18 +60,16 @@ pam_set_item(pam_handle_t *pamh, int item_type, const void *item) { - void **slot, *tmp; + void **slot; size_t nsize, osize; ENTERI(item_type); - if (pamh == NULL) - RETURNC(PAM_SYSTEM_ERR); slot = &pamh->item[item_type]; osize = nsize = 0; switch (item_type) { case PAM_SERVICE: /* set once only, by pam_start() */ - if (*slot != NULL) + if (*slot != NULL && item != NULL) RETURNC(PAM_SYSTEM_ERR); /* fall through */ case PAM_USER: @@ -103,13 +101,12 @@ pam_set_item(pam_handle_t *pamh, FREE(*slot); } if (item != NULL) { - if ((tmp = malloc(nsize)) == NULL) + if ((*slot = malloc(nsize)) == NULL) RETURNC(PAM_BUF_ERR); - memcpy(tmp, item, nsize); + memcpy(*slot, item, nsize); } else { - tmp = NULL; + *slot = NULL; } - *slot = tmp; RETURNC(PAM_SUCCESS); } diff --git a/contrib/openpam/lib/libpam/pam_setenv.c b/contrib/openpam/lib/libpam/pam_setenv.c index 070a185e6019..3c2209c1c0dd 100644 --- a/contrib/openpam/lib/libpam/pam_setenv.c +++ b/contrib/openpam/lib/libpam/pam_setenv.c @@ -32,13 +32,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_setenv.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_setenv.c 914 2017-01-21 15:15:29Z des $ */ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include #include #include #include @@ -65,12 +66,12 @@ pam_setenv(pam_handle_t *pamh, int r; ENTER(); - if (pamh == NULL) - RETURNC(PAM_SYSTEM_ERR); /* sanity checks */ - if (name == NULL || value == NULL || strchr(name, '=') != NULL) + if (*name == '\0' || strchr(name, '=') != NULL) { + errno = EINVAL; RETURNC(PAM_SYSTEM_ERR); + } /* is it already there? */ if (!overwrite && openpam_findenv(pamh, name, strlen(name)) >= 0) diff --git a/contrib/openpam/ltmain.sh b/contrib/openpam/ltmain.sh index dc8e388a6340..0f0a2da3f9dd 100755 --- a/contrib/openpam/ltmain.sh +++ b/contrib/openpam/ltmain.sh @@ -1,9 +1,12 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 -# libtool (GNU libtool) 2.4.2 +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -23,166 +26,670 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --no-warn don't display warning messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . -# GNU libtool home page: . -# General help using GNU software: . PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.2 -TIMESTAMP="" -package_revision=1.3337 +VERSION=2.4.6 +package_revision=2.4.6 -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL -$lt_unset CDPATH +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. -progpath="$0" +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac +## ----------------- ## +## Standard options. ## +## ----------------- ## -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. +opt_dry_run=false +opt_quiet=false +opt_verbose=false -exit_status=$EXIT_SUCCESS +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue -dirname="s,/[^/]*$,," -basename="s,^.*/,," +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all -# func_dirname file append nondir_replacement + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. -func_dirname () +eval 'func_dirname () { - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation + $debug_cmd + + '"$_d"' +}' -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation - - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result @@ -190,263 +697,327 @@ func_basename () # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () { - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation +} -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () { - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation + $debug_cmd + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' # func_normal_abspath PATH +# ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. -# value returned in "$func_normal_abspath_result" func_normal_abspath () { - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. ;; *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac - done - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () { - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" -} + $debug_cmd -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} + $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to @@ -454,450 +1025,1113 @@ func_verbose () : } -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () { - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} + $debug_cmd -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. - # bash bug again: : } -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. func_quote_for_eval () { - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac + $debug_cmd - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done } -# func_quote_for_expand arg +# func_quote_for_expand ARG +# ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { + $debug_cmd + case $1 in *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) - my_arg="$1" ;; + _G_arg=$1 ;; esac - case $my_arg in + case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" + _G_arg=\"$_G_arg\" ;; esac - func_quote_for_expand_result="$my_arg" + func_quote_for_expand_result=$_G_arg } -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { - my_cmd="$1" - my_fail_exp="${2-:}" + $debug_cmd - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } + _G_cmd=$1 + _G_fail_exp=${2-':'} - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" fi - fi + } } -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { - my_cmd="$1" - my_fail_exp="${2-:}" + $debug_cmd - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" fi - fi + } } + # func_tr_sh +# ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac } -# func_version -# Echo version message to standard output and exit. -func_version () +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () { - $opt_debug + $debug_cmd - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? + $opt_verbose && func_echo "$*" + + : } -# func_usage -# Echo short help message to standard output and exit. -func_usage () + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () { - $opt_debug + $debug_cmd - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. func_help () { - $opt_debug + $debug_cmd - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi + func_usage_message + $ECHO "$long_help_message" + exit 0 } -# func_missing_arg argname + +# func_missing_arg ARGNAME +# ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { - $opt_debug + $debug_cmd - func_error "missing argument for $1." + func_error "Missing argument for '$1'." exit_cmd=exit } -# func_split_short_opt shortopt +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () { - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + $debug_cmd - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () { - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' + $debug_cmd - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation - -exit_cmd=: + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () { - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation + $debug_cmd -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () { - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} -# func_arith arithmetic-term... -func_arith () +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () { - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation + $debug_cmd + + $warning_func ${1+"$@"} +} -# func_len string -# STRING may not start with a hyphen. -func_len () +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () { - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname (GNU libtool) 2.4.6 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation - - -# func_fatal_configuration arg... +# func_fatal_configuration ARG... +# ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." } # func_config +# ----------- # Display the configuration for all the tags in this script. func_config () { @@ -915,17 +2149,19 @@ func_config () exit $? } + # func_features +# ------------- # Display the features supported by this script. func_features () { echo "host: $host" - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" @@ -934,314 +2170,350 @@ func_features () exit $? } -# func_enable_tag tagname + +# func_enable_tag TAGNAME +# ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { - # Global variable: - tagname="$1" + # Global variable: + tagname=$1 - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac } + # func_check_version_match +# ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF - else - cat >&2 <<_LT_EOF + else + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF - fi - else - cat >&2 <<_LT_EOF + fi + else + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF - fi + fi - exit $EXIT_MISMATCH - fi + exit $EXIT_MISMATCH + fi } -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac - - - -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false - - -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () { - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; + $debug_mode - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; + nonopt= + preserve_args= - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; esac - done - # Validate options: - - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } - - - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result } +func_add_hook func_options_prep libtool_options_prep +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + ## ----------- ## ## Main. ## ## ----------- ## +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + # func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. +# True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. +# True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. +# fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no @@ -1249,13 +2521,13 @@ func_lalib_unsafe_p () for lalib_p_l in 1 2 3 4 do read lalib_p_line - case "$lalib_p_line" in + case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi - test "$lalib_p" = yes + test yes = "$lalib_p" } # func_ltwrapper_script_p file @@ -1264,7 +2536,8 @@ func_lalib_unsafe_p () # determined imposters. func_ltwrapper_script_p () { - func_lalib_p "$1" + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file @@ -1289,7 +2562,7 @@ func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file @@ -1308,11 +2581,13 @@ func_ltwrapper_p () # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { - $opt_debug + $debug_cmd + save_ifs=$IFS; IFS='~' for cmd in $1; do - IFS=$save_ifs + IFS=$sp$nl eval cmd=\"$cmd\" + IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs @@ -1324,10 +2599,11 @@ func_execute_cmds () # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. +# 'FILE.' does not work on cygwin managed mounts. func_source () { - $opt_debug + $debug_cmd + case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; @@ -1354,10 +2630,10 @@ func_resolve_sysroot () # store the result into func_replace_sysroot_result. func_replace_sysroot () { - case "$lt_sysroot:$1" in + case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" + func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. @@ -1374,21 +2650,7 @@ func_replace_sysroot () # arg is usually of the form 'gcc ...' func_infer_tag () { - $opt_debug - - # FreeBSD-specific: where we install compilers with non-standard names - tag_compilers_CC="*cc cc* *gcc gcc* clang*" - tag_compilers_CXX="*c++ c++* *g++ g++* clang++*" - base_compiler=`set -- "$@"; echo $1` - - # If $tagname isn't set, then try to infer if the default "CC" tag applies - if test -z "$tagname"; then - for zp in $tag_compilers_CC; do - case $base_compiler in - $zp) tagname="CC"; break;; - esac - done - fi + $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= @@ -1408,7 +2670,7 @@ func_infer_tag () for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. @@ -1426,29 +2688,14 @@ func_infer_tag () break ;; esac - - # FreeBSD-specific: try compilers based on inferred tag - if test -z "$tagname"; then - eval "tag_compilers=\$tag_compilers_${z}" - if test -n "$tag_compilers"; then - for zp in $tag_compilers; do - case $base_compiler in - $zp) tagname=$z; break;; - esac - done - if test -n "$tagname"; then - break - fi - fi - fi - fi + fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" + func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi @@ -1464,15 +2711,15 @@ func_infer_tag () # but don't create it if we're doing a dry run. func_write_libtool_object () { - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' else write_lobj=none fi - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' else write_oldobj=none fi @@ -1480,7 +2727,7 @@ func_write_libtool_object () $opt_dry_run || { cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` + $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi @@ -1544,18 +2792,19 @@ func_convert_core_file_wine_to_w32 () # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { - $opt_debug + $debug_cmd + # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" + func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi @@ -1584,7 +2833,8 @@ func_convert_core_path_wine_to_w32 () # environment variable; do not put it in $PATH. func_cygpath () { - $opt_debug + $debug_cmd + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then @@ -1593,7 +2843,7 @@ func_cygpath () fi else func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath @@ -1604,10 +2854,11 @@ func_cygpath () # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { - $opt_debug + $debug_cmd + # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 @@ -1618,13 +2869,14 @@ func_convert_core_msys_to_w32 () # func_to_host_file_result to ARG1). func_convert_file_check () { - $opt_debug - if test -z "$2" && test -n "$1" ; then + $debug_cmd + + if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" - func_error " \`$1'" + func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: - func_to_host_file_result="$1" + func_to_host_file_result=$1 fi } # end func_convert_file_check @@ -1636,10 +2888,11 @@ func_convert_file_check () # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { - $opt_debug + $debug_cmd + if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" - func_error " \`$3'" + func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. @@ -1648,7 +2901,7 @@ func_convert_path_check () func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else - func_to_host_path_result="$3" + func_to_host_path_result=$3 fi fi } @@ -1660,9 +2913,10 @@ func_convert_path_check () # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { - $opt_debug + $debug_cmd + case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" + $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in @@ -1676,7 +2930,7 @@ func_convert_path_front_back_pathsep () ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## -# invoked via `$to_host_file_cmd ARG' +# invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. @@ -1687,7 +2941,8 @@ func_convert_path_front_back_pathsep () # in func_to_host_file_result. func_to_host_file () { - $opt_debug + $debug_cmd + $to_host_file_cmd "$1" } # end func_to_host_file @@ -1699,7 +2954,8 @@ func_to_host_file () # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { - $opt_debug + $debug_cmd + case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 @@ -1717,7 +2973,7 @@ func_to_tool_file () # Copy ARG to func_to_host_file_result. func_convert_file_noop () { - func_to_host_file_result="$1" + func_to_host_file_result=$1 } # end func_convert_file_noop @@ -1728,11 +2984,12 @@ func_convert_file_noop () # func_to_host_file_result. func_convert_file_msys_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1744,8 +3001,9 @@ func_convert_file_msys_to_w32 () # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. @@ -1761,11 +3019,12 @@ func_convert_file_cygwin_to_w32 () # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1777,12 +3036,13 @@ func_convert_file_nix_to_w32 () # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" + func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1795,13 +3055,14 @@ func_convert_file_msys_to_cygwin () # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" + func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1811,7 +3072,7 @@ func_convert_file_nix_to_cygwin () ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# -# invoked via `$to_host_path_cmd ARG' +# invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. @@ -1835,10 +3096,11 @@ func_convert_file_nix_to_cygwin () to_host_path_cmd= func_init_to_host_path_cmd () { - $opt_debug + $debug_cmd + if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" + to_host_path_cmd=func_convert_path_$func_stripname_result fi } @@ -1848,7 +3110,8 @@ func_init_to_host_path_cmd () # in func_to_host_path_result. func_to_host_path () { - $opt_debug + $debug_cmd + func_init_to_host_path_cmd $to_host_path_cmd "$1" } @@ -1859,7 +3122,7 @@ func_to_host_path () # Copy ARG to func_to_host_path_result. func_convert_path_noop () { - func_to_host_path_result="$1" + func_to_host_path_result=$1 } # end func_convert_path_noop @@ -1870,8 +3133,9 @@ func_convert_path_noop () # func_to_host_path_result. func_convert_path_msys_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; @@ -1879,7 +3143,7 @@ func_convert_path_msys_to_w32 () func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" @@ -1893,8 +3157,9 @@ func_convert_path_msys_to_w32 () # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" @@ -1913,14 +3178,15 @@ func_convert_path_cygwin_to_w32 () # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" @@ -1934,15 +3200,16 @@ func_convert_path_nix_to_w32 () # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" + func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" @@ -1957,8 +3224,9 @@ func_convert_path_msys_to_cygwin () # func_to_host_file_result. func_convert_path_nix_to_cygwin () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them @@ -1967,7 +3235,7 @@ func_convert_path_nix_to_cygwin () func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" + func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" @@ -1976,13 +3244,31 @@ func_convert_path_nix_to_cygwin () # end func_convert_path_nix_to_cygwin +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + # func_mode_compile arg... func_mode_compile () { - $opt_debug + $debug_cmd + # Get the compilation command and the source file. base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" + srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal @@ -1995,12 +3281,12 @@ func_mode_compile () case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile - lastarg="$arg" + lastarg=$arg arg_mode=normal ;; target ) - libobj="$arg" + libobj=$arg arg_mode=normal continue ;; @@ -2010,7 +3296,7 @@ func_mode_compile () case $arg in -o) test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" + func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; @@ -2039,12 +3325,12 @@ func_mode_compile () func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for arg in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_append_quoted lastarg "$arg" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result @@ -2057,8 +3343,8 @@ func_mode_compile () # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # - lastarg="$srcfile" - srcfile="$arg" + lastarg=$srcfile + srcfile=$arg ;; esac # case $arg ;; @@ -2073,13 +3359,13 @@ func_mode_compile () func_fatal_error "you must specify an argument for -Xcompile" ;; target) - func_fatal_error "you must specify a target with \`-o'" + func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" - libobj="$func_basename_result" + libobj=$func_basename_result } ;; esac @@ -2099,7 +3385,7 @@ func_mode_compile () case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) - func_fatal_error "cannot determine name of library object from \`$libobj'" + func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac @@ -2108,8 +3394,8 @@ func_mode_compile () for arg in $later; do case $arg in -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; @@ -2135,17 +3421,17 @@ func_mode_compile () func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." + && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" @@ -2157,16 +3443,16 @@ func_mode_compile () pic_mode=default ;; esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock else output_obj= need_locks=no @@ -2175,12 +3461,12 @@ func_mode_compile () # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then + if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done - elif test "$need_locks" = warn; then + elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: @@ -2188,7 +3474,7 @@ func_mode_compile () This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2210,11 +3496,11 @@ compiler." qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile - if test "$pic_mode" != no; then + if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code @@ -2231,7 +3517,7 @@ compiler." func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - if test "$need_locks" = warn && + if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: @@ -2242,7 +3528,7 @@ $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2258,20 +3544,20 @@ compiler." fi # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then + if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi - if test "$compiler_c_o" = yes; then + if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi @@ -2280,7 +3566,7 @@ compiler." func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - if test "$need_locks" = warn && + if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: @@ -2291,7 +3577,7 @@ $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2311,7 +3597,7 @@ compiler." func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked - if test "$need_locks" != no; then + if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi @@ -2321,7 +3607,7 @@ compiler." } $opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () @@ -2341,7 +3627,7 @@ func_mode_help () Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated @@ -2360,16 +3646,16 @@ This mode accepts the following additional options: -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler -COMPILE-COMMAND is a command to be used in creating a \`standard' object file +COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." ;; execute) @@ -2382,7 +3668,7 @@ This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path -This mode sets the library path environment variable according to \`-dlopen' +This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated @@ -2401,7 +3687,7 @@ Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." +the '--dry-run' option if you just want to see what would be executed." ;; install) @@ -2411,7 +3697,7 @@ the \`--dry-run' option if you just want to see what would be executed." Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. +either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: @@ -2437,7 +3723,7 @@ The following components of LINK-COMMAND are treated specially: -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE @@ -2451,7 +3737,8 @@ The following components of LINK-COMMAND are treated specially: -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information @@ -2471,20 +3758,20 @@ The following components of LINK-COMMAND are treated specially: -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) -All other options (arguments beginning with \`-') are ignored. +All other options (arguments beginning with '-') are ignored. -Every other argument is treated as a filename. Files ending in \`.la' are +Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; @@ -2495,7 +3782,7 @@ is created, otherwise an executable program is created." Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. @@ -2503,17 +3790,17 @@ Otherwise, only FILE itself is deleted using RM." ;; *) - func_fatal_help "invalid operation mode \`$opt_mode'" + func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo - $ECHO "Try \`$progname --help' for more information about other modes." + $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then - if test "$opt_help" = :; then + if test : = "$opt_help"; then func_mode_help else { @@ -2521,7 +3808,7 @@ if $opt_help; then for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do @@ -2529,7 +3816,7 @@ if $opt_help; then func_mode_help done } | - sed '1d + $SED '1d /^When reporting/,/^Report/{ H d @@ -2546,16 +3833,17 @@ fi # func_mode_execute arg... func_mode_execute () { - $opt_debug + $debug_cmd + # The first argument is the command name. - cmd="$nonopt" + cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ - || func_fatal_help "\`$file' is not a file" + || func_fatal_help "'$file' is not a file" dir= case $file in @@ -2565,7 +3853,7 @@ func_mode_execute () # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" + || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= @@ -2576,18 +3864,18 @@ func_mode_execute () if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" + func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." - dir="$func_dirname_result" + dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; @@ -2595,18 +3883,18 @@ func_mode_execute () *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." - dir="$func_dirname_result" + dir=$func_dirname_result ;; *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" + test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then @@ -2618,7 +3906,7 @@ func_mode_execute () # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. - libtool_execute_magic="$magic" + libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= @@ -2631,12 +3919,12 @@ func_mode_execute () if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. - file="$progdir/$program" + file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. - file="$progdir/$program" + file=$progdir/$program fi ;; esac @@ -2644,7 +3932,15 @@ func_mode_execute () func_append_quoted args "$file" done - if test "X$opt_dry_run" = Xfalse; then + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" @@ -2661,25 +3957,18 @@ func_mode_execute () done # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS + exec_cmd=\$cmd$args fi } -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { - $opt_debug + $debug_cmd + libs= libdirs= admincmds= @@ -2693,11 +3982,11 @@ func_mode_finish () if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else - func_warning "\`$opt' is not a valid libtool archive" + func_warning "'$opt' is not a valid libtool archive" fi else - func_fatal_error "invalid argument \`$opt'" + func_fatal_error "invalid argument '$opt'" fi done @@ -2712,12 +4001,12 @@ func_mode_finish () # Remove sysroot references if $opt_dry_run; then for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done @@ -2742,7 +4031,7 @@ func_mode_finish () fi # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS + $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" @@ -2753,27 +4042,27 @@ func_mode_finish () echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" - $ECHO " - use the \`$flag' linker flag" + $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo @@ -2792,18 +4081,20 @@ func_mode_finish () exit $EXIT_SUCCESS } -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { - $opt_debug + $debug_cmd + # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then + case $nonopt in *shtool*) :;; *) false;; esac + then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " @@ -2830,7 +4121,7 @@ func_mode_install () opts= prev= install_type= - isdir=no + isdir=false stripme= no_mode=: for arg @@ -2843,7 +4134,7 @@ func_mode_install () fi case $arg in - -d) isdir=yes ;; + -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg @@ -2861,7 +4152,7 @@ func_mode_install () *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi @@ -2886,7 +4177,7 @@ func_mode_install () func_fatal_help "you must specify an install program" test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" + func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else @@ -2908,19 +4199,19 @@ func_mode_install () dest=$func_stripname_result # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" + destdir=$func_dirname_result + destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" + func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; @@ -2929,7 +4220,7 @@ func_mode_install () case $file in *.lo) ;; *) - func_fatal_help "\`$destdir' must be an absolute directory name" + func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done @@ -2938,7 +4229,7 @@ func_mode_install () # This variable tells wrapper scripts just to set variables rather # than running their programs. - libtool_install_magic="$magic" + libtool_install_magic=$magic staticlibs= future_libdirs= @@ -2958,7 +4249,7 @@ func_mode_install () # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" + || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= @@ -2980,7 +4271,7 @@ func_mode_install () fi func_dirname "$file" "/" "" - dir="$func_dirname_result" + dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then @@ -2994,7 +4285,7 @@ func_mode_install () # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. @@ -3003,29 +4294,36 @@ func_mode_install () relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi - func_warning "relinking \`$file'" + func_warning "relinking '$file'" func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then - realname="$1" + realname=$1 shift - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T + srcname=$realname + test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' - tstripme="$stripme" + tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) - tstripme="" + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= ;; esac ;; @@ -3036,7 +4334,7 @@ func_mode_install () if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on + # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname @@ -3047,14 +4345,14 @@ func_mode_install () fi # Do each command in the postinstall commands. - lib="$destdir/$realname" + lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i + name=$func_basename_result + instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. @@ -3066,11 +4364,11 @@ func_mode_install () # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then - destfile="$destdir/$destname" + destfile=$destdir/$destname else func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" + destfile=$func_basename_result + destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. @@ -3080,11 +4378,11 @@ func_mode_install () staticdest=$func_lo2o_result ;; *.$objext) - staticdest="$destfile" + staticdest=$destfile destfile= ;; *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" + func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac @@ -3093,7 +4391,7 @@ func_mode_install () func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result @@ -3105,23 +4403,23 @@ func_mode_install () *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then - destfile="$destdir/$destname" + destfile=$destdir/$destname else func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" + destfile=$func_basename_result + destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install - stripped_ext="" + stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result - stripped_ext=".exe" + stripped_ext=.exe fi ;; esac @@ -3149,19 +4447,19 @@ func_mode_install () # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" + func_fatal_error "invalid libtool wrapper script '$wrapper'" - finalize=yes + finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false fi done @@ -3169,29 +4467,29 @@ func_mode_install () func_source "$wrapper" outputname= - if test "$fast_install" = no && test -n "$relink_command"; then + if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { - if test "$finalize" = yes; then + if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" + file=$func_basename_result + outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - $opt_silent || { + $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else - func_error "error: relink \`$file' with the above command before installing it" + func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi - file="$outputname" + file=$outputname else - func_warning "cannot relink \`$file'" + func_warning "cannot relink '$file'" fi } else @@ -3228,10 +4526,10 @@ func_mode_install () for file in $staticlibs; do func_basename "$file" - name="$func_basename_result" + name=$func_basename_result # Set up the ranlib parameters. - oldlib="$destdir/$name" + oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result @@ -3246,18 +4544,18 @@ func_mode_install () done test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" + func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } -test "$opt_mode" = install && func_mode_install ${1+"$@"} +test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p @@ -3265,16 +4563,17 @@ test "$opt_mode" = install && func_mode_install ${1+"$@"} # a dlpreopen symbol table. func_generate_dlsyms () { - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" + my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi @@ -3285,7 +4584,7 @@ func_generate_dlsyms () "") ;; *.c) # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" + nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" @@ -3293,34 +4592,36 @@ func_generate_dlsyms () func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST -#elif defined(__osf__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + /* External symbol declarations for the compiler. */\ " - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" @@ -3328,7 +4629,7 @@ extern \"C\" { progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done @@ -3348,10 +4649,10 @@ extern \"C\" { # Prepare the list of exported symbols if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" + export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' @@ -3361,7 +4662,7 @@ extern \"C\" { } else $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in @@ -3375,22 +4676,22 @@ extern \"C\" { fi for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" + func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" - name="$func_basename_result" + name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" + dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then + if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" + dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" @@ -3398,7 +4699,7 @@ extern \"C\" { fi fi $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then + if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" @@ -3454,6 +4755,11 @@ extern \"C\" { echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ @@ -3462,11 +4768,30 @@ typedef struct { void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi case $need_lib_prefix in no) @@ -3508,9 +4833,7 @@ static const void *lt_preloaded_setup() { *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi + $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; @@ -3527,10 +4850,10 @@ static const void *lt_preloaded_setup() { func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" + symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then @@ -3547,11 +4870,8 @@ static const void *lt_preloaded_setup() { ;; esac ;; - *-*-freebsd*) - # FreeBSD doesn't need this... - ;; *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" + func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else @@ -3565,6 +4885,32 @@ static const void *lt_preloaded_setup() { fi } +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + # func_win32_libid arg # return the library type of file 'arg' # @@ -3574,8 +4920,9 @@ static const void *lt_preloaded_setup() { # Despite the name, also deal with 64 bit binaries. func_win32_libid () { - $opt_debug - win32_libid_type="unknown" + $debug_cmd + + win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import @@ -3585,16 +4932,29 @@ func_win32_libid () # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' 1,100{ / I /{ - s,.*,import, + s|.*|import| p q } }'` + ;; + esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; @@ -3626,7 +4986,8 @@ func_win32_libid () # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { - $opt_debug + $debug_cmd + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } @@ -3643,7 +5004,8 @@ func_cygming_dll_for_implib () # specified import library. func_cygming_dll_for_implib_fallback_core () { - $opt_debug + $debug_cmd + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ @@ -3679,8 +5041,8 @@ func_cygming_dll_for_implib_fallback_core () /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually @@ -3691,30 +5053,6 @@ func_cygming_dll_for_implib_fallback_core () $SED -e '/^\./d;/^.\./d;q' } -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified @@ -3728,16 +5066,17 @@ func_cygming_ms_implib_p () # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then + elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown - sharedlib_from_linklib_result="" + sharedlib_from_linklib_result= fi } @@ -3745,10 +5084,11 @@ func_cygming_dll_for_implib_fallback () # func_extract_an_archive dir oldlib func_extract_an_archive () { - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" @@ -3757,7 +5097,7 @@ func_extract_an_archive () fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then + if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then @@ -3771,22 +5111,23 @@ func_extract_an_archive () # func_extract_archives gentop oldlib ... func_extract_archives () { - $opt_debug - my_gentop="$1"; shift + $debug_cmd + + my_gentop=$1; shift my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" - my_xlib="$func_basename_result" + my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in @@ -3798,7 +5139,7 @@ func_extract_archives () esac done extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" @@ -3811,22 +5152,23 @@ func_extract_archives () cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do @@ -3848,7 +5190,7 @@ func_extract_archives () my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done - func_extract_archives_result="$my_oldobjs" + func_extract_archives_result=$my_oldobjs } @@ -3863,7 +5205,7 @@ func_extract_archives () # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is +# will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () @@ -3874,7 +5216,7 @@ func_emit_wrapper () #! $SHELL # $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. @@ -3931,9 +5273,9 @@ _LTECHO_EOF' # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on +# /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match +# (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and @@ -3966,7 +5308,7 @@ func_parse_lt_options () # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } @@ -3977,7 +5319,7 @@ func_lt_dump_args () lt_dump_args_N=1; for lt_arg do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } @@ -3991,7 +5333,7 @@ func_exec_program_core () *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} @@ -4001,7 +5343,7 @@ func_exec_program_core () *) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} @@ -4076,13 +5418,13 @@ func_exec_program () test -n \"\$absdir\" && thisdir=\"\$absdir\" " - if test "$fast_install" = yes; then + if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" @@ -4099,7 +5441,7 @@ func_exec_program () if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else - $ECHO \"\$relink_command_output\" >&2 + \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi @@ -4134,7 +5476,7 @@ func_exec_program () fi # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" @@ -4154,7 +5496,7 @@ func_exec_program () fi else # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 @@ -4173,7 +5515,7 @@ func_emit_cwrapperexe_src () cat < #include +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + /* declarations of non-ANSI functions */ -#if defined(__MINGW32__) +#if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif -#elif defined(__CYGWIN__) +#elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif -/* #elif defined (other platforms) ... */ +/* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) +#if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) +#elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv -#elif defined(__CYGWIN__) +#elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ +/* #elif defined other platforms ... */ #endif -#if defined(PATH_MAX) +#if defined PATH_MAX # define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) +#elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 @@ -4267,8 +5607,8 @@ int setenv (const char *, const char *, int); # define PATH_SEPARATOR ':' #endif -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 @@ -4301,10 +5641,10 @@ int setenv (const char *, const char *, int); #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ + if (stale) { free (stale); stale = 0; } \ } while (0) -#if defined(LT_DEBUGWRAPPER) +#if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; @@ -4333,11 +5673,16 @@ void lt_dump_script (FILE *f); EOF cat < 0) && IS_PATH_SEPARATOR (new_value[len-1])) + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { - new_value[len-1] = '\0'; + new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); @@ -5115,27 +6460,47 @@ EOF # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { - $opt_debug + $debug_cmd + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + # func_mode_link arg... func_mode_link () { - $opt_debug + $debug_cmd + case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra + # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not + # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. @@ -5179,10 +6544,11 @@ func_mode_link () module=no no_install=no objs= + os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no - preload=no + preload=false prev= prevarg= release= @@ -5194,7 +6560,7 @@ func_mode_link () vinfo= vinfo_number=no weak_libs= - single_module="${wl}-single_module" + single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. @@ -5202,15 +6568,15 @@ func_mode_link () do case $arg in -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then @@ -5243,7 +6609,7 @@ func_mode_link () # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do - arg="$1" + arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result @@ -5260,21 +6626,21 @@ func_mode_link () case $prev in bindir) - bindir="$arg" + bindir=$arg prev= continue ;; dlfiles|dlprefiles) - if test "$preload" = no; then + $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" - preload=yes - fi + preload=: + } case $arg in *.la | *.lo) ;; # We handle these cases below. force) - if test "$dlself" = no; then + if test no = "$dlself"; then dlself=needless export_dynamic=yes fi @@ -5282,9 +6648,9 @@ func_mode_link () continue ;; self) - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless @@ -5294,7 +6660,7 @@ func_mode_link () continue ;; *) - if test "$prev" = dlfiles; then + if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" @@ -5305,14 +6671,14 @@ func_mode_link () esac ;; expsyms) - export_symbols="$arg" + export_symbols=$arg test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" + || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) - export_symbols_regex="$arg" + export_symbols_regex=$arg prev= continue ;; @@ -5330,7 +6696,13 @@ func_mode_link () continue ;; inst_prefix) - inst_prefix_dir="$arg" + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. prev= continue ;; @@ -5354,21 +6726,21 @@ func_mode_link () if test -z "$pic_object" || test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result - if test "$pic_object" != none; then + if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" + pic_object=$xdir$pic_object - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue @@ -5379,7 +6751,7 @@ func_mode_link () fi # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= @@ -5387,23 +6759,23 @@ func_mode_link () # A PIC object. func_append libobjs " $pic_object" - arg="$pic_object" + arg=$pic_object fi # Non-PIC object. - if test "$non_pic_object" != none; then + if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" + non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else @@ -5411,7 +6783,7 @@ func_mode_link () if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result @@ -5419,24 +6791,29 @@ func_mode_link () func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else - func_fatal_error "\`$arg' is not a valid libtool object" + func_fatal_error "'$arg' is not a valid libtool object" fi fi done else - func_fatal_error "link input file \`$arg' does not exist" + func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; precious_regex) - precious_files_regex="$arg" + precious_files_regex=$arg prev= continue ;; release) - release="-$arg" + release=-$arg prev= continue ;; @@ -5448,7 +6825,7 @@ func_mode_link () func_fatal_error "only absolute run-paths are allowed" ;; esac - if test "$prev" = rpath; then + if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; @@ -5463,7 +6840,7 @@ func_mode_link () continue ;; shrext) - shrext_cmds="$arg" + shrext_cmds=$arg prev= continue ;; @@ -5503,7 +6880,7 @@ func_mode_link () esac fi # test -n "$prev" - prevarg="$arg" + prevarg=$arg case $arg in -all-static) @@ -5517,7 +6894,7 @@ func_mode_link () -allow-undefined) # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" + func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) @@ -5549,7 +6926,7 @@ func_mode_link () if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi - if test "X$arg" = "X-export-symbols"; then + if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex @@ -5583,9 +6960,9 @@ func_mode_link () func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" + func_fatal_error "require no space between '-L' and '$1'" else - func_fatal_error "need path for \`-L' option" + func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" @@ -5596,8 +6973,8 @@ func_mode_link () *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir ;; esac case "$deplibs " in @@ -5628,12 +7005,11 @@ func_mode_link () esac ;; esac - deplibs="$deplibs $arg" continue ;; -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) @@ -5641,11 +7017,11 @@ func_mode_link () ;; *-*-os2*) # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework @@ -5654,16 +7030,16 @@ func_mode_link () ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; esac - elif test "X$arg" = "X-lc_r"; then + elif test X-lc_r = "X$arg"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -5673,6 +7049,11 @@ func_mode_link () continue ;; + -mllvm) + prev=mllvm + continue + ;; + -module) module=yes continue @@ -5702,7 +7083,7 @@ func_mode_link () ;; -multi_module) - single_module="${wl}-multi_module" + single_module=$wl-multi_module continue ;; @@ -5716,8 +7097,8 @@ func_mode_link () *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; @@ -5735,6 +7116,11 @@ func_mode_link () continue ;; + -os2dllname) + prev=os2dllname + continue + ;; + -o) prev=output ;; -precious-files-regex) @@ -5822,14 +7208,14 @@ func_mode_link () func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for flag in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; @@ -5838,15 +7224,15 @@ func_mode_link () func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for flag in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; @@ -5869,7 +7255,7 @@ func_mode_link () # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: @@ -5881,25 +7267,46 @@ func_mode_link () # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; *.$objext) @@ -5920,21 +7327,21 @@ func_mode_link () if test -z "$pic_object" || test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result - if test "$pic_object" != none; then + test none = "$pic_object" || { # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" + pic_object=$xdir$pic_object - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue @@ -5945,7 +7352,7 @@ func_mode_link () fi # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= @@ -5953,23 +7360,23 @@ func_mode_link () # A PIC object. func_append libobjs " $pic_object" - arg="$pic_object" - fi + arg=$pic_object + } # Non-PIC object. - if test "$non_pic_object" != none; then + if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" + non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else @@ -5977,7 +7384,7 @@ func_mode_link () if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result @@ -5985,7 +7392,7 @@ func_mode_link () func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else - func_fatal_error "\`$arg' is not a valid libtool object" + func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; @@ -6001,11 +7408,11 @@ func_mode_link () # A libtool-controlled library. func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then + if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= - elif test "$prev" = dlprefiles; then + elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= @@ -6020,7 +7427,7 @@ func_mode_link () # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; esac # arg @@ -6032,9 +7439,9 @@ func_mode_link () done # argument parsing loop test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" + func_fatal_help "the '$prevarg' option requires an argument" - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" @@ -6043,20 +7450,23 @@ func_mode_link () oldlibs= # calculate the name of the file, without its directory func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" + outputname=$func_basename_result + libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" + output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. @@ -6079,7 +7489,7 @@ func_mode_link () # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6087,7 +7497,7 @@ func_mode_link () func_append libs " $deplib" done - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps @@ -6119,7 +7529,7 @@ func_mode_link () case $file in *.la) ;; *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done @@ -6127,7 +7537,7 @@ func_mode_link () prog) compile_deplibs= finalize_deplibs= - alldeplibs=no + alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" @@ -6139,29 +7549,29 @@ func_mode_link () for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then + if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done - deplibs="$tmp_deplibs" + deplibs=$tmp_deplibs fi - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs deplibs= fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then + if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs @@ -6182,59 +7592,42 @@ func_mode_link () esac done done - libs="$dlprefiles" + libs=$dlprefiles fi - if test "$pass" = dlopen; then + if test dlopen = "$pass"; then # Collect dlpreopened libraries - save_deplibs="$deplibs" + save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= - found=no + found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi fi - - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - ;; - *) - ;; - esac # linkmode - continue ;; -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" @@ -6242,31 +7635,22 @@ func_mode_link () for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" + lib=$searchdir/lib$name$search_ext if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes + if test .la = "$search_ext"; then + found=: else - found=no + found=false fi break 2 fi done done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library + if $found; then + # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then @@ -6274,19 +7658,19 @@ func_mode_link () old_library= func_source "$lib" for l in $old_library $library_names; do - ll="$l" + ll=$l done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no + if test "X$ll" = "X$old_library"; then # only static version available + found=false func_dirname "$lib" "" "." - ladir="$func_dirname_result" + ladir=$func_dirname_result lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi @@ -6295,15 +7679,25 @@ func_mode_link () *) ;; esac fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue fi ;; # -l *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then + if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; @@ -6316,18 +7710,18 @@ func_mode_link () case $linkmode in lib) deplibs="$deplib $deplibs" - test "$pass" = conv && continue + test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi - if test "$pass" = scan; then + if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" @@ -6338,13 +7732,13 @@ func_mode_link () func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) - func_warning "\`-L' is ignored for archives/objects" + func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) - if test "$pass" = link; then + if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result @@ -6362,7 +7756,7 @@ func_mode_link () lib=$func_resolve_sysroot_result ;; *.$libext) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi @@ -6373,21 +7767,26 @@ func_mode_link () case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) - valid_a_lib=no + valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes + valid_a_lib=: fi ;; pass_all) - valid_a_lib=yes + valid_a_lib=: ;; esac - if test "$valid_a_lib" != yes; then + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" @@ -6395,18 +7794,13 @@ func_mode_link () echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) - if test "$pass" != link; then + if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" @@ -6417,10 +7811,10 @@ func_mode_link () esac # linkmode ;; # *.$libext *.lo | *.$objext) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" @@ -6433,22 +7827,20 @@ func_mode_link () continue ;; %DEPLIBS%) - alldeplibs=yes + alldeplibs=: continue ;; esac # case $deplib - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" + || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." - ladir="$func_dirname_result" + ladir=$func_dirname_result dlname= dlopen= @@ -6478,30 +7870,30 @@ func_mode_link () done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi - if test "$pass" = conv; then + if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" + func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6515,26 +7907,26 @@ func_mode_link () # Get the name of the library we link against. linklib= if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do - linklib="$l" + linklib=$l done fi if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" + func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't @@ -6548,40 +7940,40 @@ func_mode_link () # We need an absolute path. case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" + abs_ladir=$ladir fi ;; esac func_basename "$lib" - laname="$func_basename_result" + laname=$func_basename_result # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then + if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" + dir=$ladir + absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi @@ -6590,11 +7982,11 @@ func_mode_link () name=$func_stripname_result # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi - case "$host" in + case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both @@ -6638,9 +8030,9 @@ func_mode_link () if test -z "$libdir"; then # Link the convenience library - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then + elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else @@ -6650,14 +8042,14 @@ func_mode_link () fi - if test "$linkmode" = prog && test "$pass" != link; then + if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: fi tmp_libs= @@ -6669,14 +8061,14 @@ func_mode_link () ;; esac # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then + if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6686,15 +8078,15 @@ func_mode_link () continue fi # $linkmode = prog... - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in + case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac @@ -6723,9 +8115,9 @@ func_mode_link () esac fi # $linkmode,$pass = prog,link... - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue @@ -6734,19 +8126,19 @@ func_mode_link () link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then + if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then + { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in - *cygwin* | *mingw* | *cegcc*) + *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) - if test "$installed" = no; then + if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi @@ -6756,24 +8148,24 @@ func_mode_link () # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" + dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" + dlopenmodule=$dlpremoduletest break fi done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. @@ -6801,43 +8193,43 @@ func_mode_link () # figure out the soname set dummy $library_names shift - realname="$1" + realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then - soname="$dlname" + soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in - *cygwin* | mingw* | *cegcc*) + *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result - versuffix="-$major" + versuffix=-$major ;; esac eval soname=\"$soname_spec\" else - soname="$realname" + soname=$realname fi # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" + soroot=$soname func_basename "$soroot" - soname="$func_basename_result" + soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else - func_verbose "extracting exported symbol list from \`$soname'" + func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" + func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library @@ -6845,58 +8237,58 @@ func_mode_link () linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" - if test "$linkmode" = prog || test "$opt_mode" != relink; then + if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" + if test no = "$hardcode_direct"; then + add=$dir/$linklib case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; + *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not + # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then + $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then + if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else - add="$dir/$old_library" + add=$dir/$old_library fi elif test -n "$old_library"; then - add="$dir/$old_library" + add=$dir/$old_library fi fi esac - elif test "$hardcode_minus_L" = no; then + elif test no = "$hardcode_minus_L"; then case $host in - *-*-sunos*) add_shlibpath="$dir" ;; + *-*-sunos*) add_shlibpath=$dir ;; esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name else lib_linked=no fi ;; relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$absdir" + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in @@ -6905,10 +8297,10 @@ func_mode_link () ;; esac fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name else lib_linked=no fi @@ -6916,7 +8308,7 @@ func_mode_link () *) lib_linked=no ;; esac - if test "$lib_linked" != yes; then + if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi @@ -6926,15 +8318,15 @@ func_mode_link () *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; @@ -6943,33 +8335,33 @@ func_mode_link () fi fi - if test "$linkmode" = prog || test "$opt_mode" = relink; then + if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then + add=-l$name + elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib else - add="$libdir/$linklib" + add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" + add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in @@ -6978,10 +8370,10 @@ func_mode_link () ;; esac fi - add="-l$name" + add=-l$name fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else @@ -6989,43 +8381,43 @@ func_mode_link () test -n "$add" && deplibs="$add $deplibs" fi fi - elif test "$linkmode" = prog; then + elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi - elif test "$build_libtool_libs" = yes; then + elif test yes = "$build_libtool_libs"; then # Not a shared library - if test "$deplibs_check_method" != pass_all; then + if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then + if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." + echo "*** 'nm' from GNU binutils and a full rebuild may help." fi - if test "$build_old_libs" = no; then + if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else @@ -7038,11 +8430,11 @@ func_mode_link () fi fi # link shared/static library? - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do @@ -7056,12 +8448,12 @@ func_mode_link () *) func_append temp_deplibs " $libdir";; esac done - dependency_libs="$temp_deplibs" + dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do @@ -7071,7 +8463,7 @@ func_mode_link () func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; @@ -7080,12 +8472,12 @@ func_mode_link () func_append tmp_libs " $func_resolve_sysroot_result" done - if test "$link_all_deplibs" != no; then + if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in - -L*) path="$deplib" ;; + -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result @@ -7093,12 +8485,12 @@ func_mode_link () dir=$func_dirname_result # We need an absolute path. case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir fi ;; esac @@ -7106,35 +8498,35 @@ func_mode_link () case $host in *-*-darwin*) depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do depdepl=$tmp done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) - path="-L$absdir/$objdir" + path=-L$absdir/$objdir ;; esac else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" + func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" + func_warning "'$deplib' seems to be moved" - path="-L$absdir" + path=-L$absdir fi ;; esac @@ -7146,23 +8538,23 @@ func_mode_link () fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then + if test link = "$pass"; then + if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then + if test dlopen != "$pass"; then + test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do @@ -7172,12 +8564,12 @@ func_mode_link () esac done newlib_search_path= - fi + } - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else + if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" + else + vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order @@ -7235,62 +8627,93 @@ func_mode_link () eval $var=\"$tmp_libs\" done # for var fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= - for i in $dependency_libs ; do + for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) - i="" + i= ;; esac - if test -n "$i" ; then + if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" + if test prog = "$linkmode"; then + dlfiles=$newdlfiles fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles fi case $linkmode in oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; + func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" + func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" + func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" + func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ - func_warning "\`-release' is ignored for archives" + func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" + func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no - oldlibs="$output" + oldlibs=$output func_append objs "$old_deplibs" ;; lib) - # Make sure we only generate libraries of the form `libNAME.la'. + # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" @@ -7299,10 +8722,10 @@ func_mode_link () eval libname=\"$libname_spec\" ;; *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" - if test "$need_lib_prefix" != no; then + if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result @@ -7316,8 +8739,8 @@ func_mode_link () esac if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" @@ -7326,21 +8749,21 @@ func_mode_link () fi fi - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" - install_libdir="$1" + install_libdir=$1 oldlibs= if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so + # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" @@ -7349,20 +8772,20 @@ func_mode_link () fi test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" + func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. - save_ifs="$IFS"; IFS=':' + save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift - IFS="$save_ifs" + IFS=$save_ifs test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" + func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts @@ -7370,42 +8793,42 @@ func_mode_link () case $vinfo_number in yes) - number_major="$1" - number_minor="$2" - number_revision="$3" + number_major=$1 + number_minor=$2 + number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix - # which has an extra 1 added just for fun + # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor - darwin|linux|osf|windows|none) + darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result - age="$number_minor" - revision="$number_revision" + age=$number_minor + revision=$number_revision ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result - age="$number_minor" - revision="$number_minor" + age=$number_minor + revision=$number_minor lt_irix_increment=no ;; esac ;; no) - current="$1" - revision="$2" - age="$3" + current=$1 + revision=$2 + age=$3 ;; esac @@ -7413,30 +8836,30 @@ func_mode_link () case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. @@ -7451,26 +8874,36 @@ func_mode_link () # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result - versuffix="$major.$age.$revision" + versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac ;; freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; + major=.$current + versuffix=.$current.$revision ;; freebsd-elf) - major=".$current" - versuffix=".$current" + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision ;; irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then + if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 @@ -7481,69 +8914,74 @@ func_mode_link () nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac - verstring="$verstring_prefix$major.$revision" + verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision - while test "$loop" -ne 0; do + while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" + verstring=$verstring_prefix$major.$iface:$verstring done - # Before this point, $major must not contain `.'. + # Before this point, $major must not contain '.'. major=.$major - versuffix="$major.$revision" + versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result - versuffix="$major.$age.$revision" + versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age - while test "$loop" -ne 0; do + while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result - verstring="$verstring:${iface}.0" + verstring=$verstring:$iface.0 done # Make executables depend on our current version. - func_append verstring ":${current}.0" + func_append verstring ":$current.0" ;; qnx) - major=".$current" - versuffix=".$current" + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current ;; sunos) - major=".$current" - versuffix=".$current.$revision" + major=.$current + versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. + # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result - versuffix="-$major" + versuffix=-$major ;; *) - func_fatal_configuration "unknown library version type \`$version_type'" + func_fatal_configuration "unknown library version type '$version_type'" ;; esac @@ -7557,42 +8995,45 @@ func_mode_link () verstring= ;; *) - verstring="0.0" + verstring=0.0 ;; esac - if test "$need_version" = no; then + if test no = "$need_version"; then versuffix= else - versuffix=".0.0" + versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then + if test yes,no = "$avoid_version,$need_version"; then major= versuffix= - verstring="" + verstring= fi # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi fi else # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" + allow_undefined_flag=$no_undefined_flag fi fi - func_generate_dlsyms "$libname" "$libname" "yes" + func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= + test " " = "$libobjs" && libobjs= - if test "$opt_mode" != relink; then + if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= @@ -7601,8 +9042,8 @@ func_mode_link () case $p in *.$objext | *.gcno) ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue @@ -7618,11 +9059,11 @@ func_mode_link () fi # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. @@ -7643,13 +9084,13 @@ func_mode_link () *) func_append finalize_rpath " $libdir" ;; esac done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" + old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in @@ -7659,7 +9100,7 @@ func_mode_link () done # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" + old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in @@ -7668,7 +9109,7 @@ func_mode_link () esac done - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) @@ -7692,7 +9133,7 @@ func_mode_link () ;; *) # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then + if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; @@ -7708,9 +9149,9 @@ func_mode_link () # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? - release="" - versuffix="" - major="" + release= + versuffix= + major= newdeplibs= droppeddeps=no case $deplibs_check_method in @@ -7739,20 +9180,20 @@ EOF -l*) func_stripname -l '' "$i" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" - i="" + i= ;; esac fi - if test -n "$i" ; then + if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes @@ -7782,20 +9223,20 @@ EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" - i="" + i= ;; esac fi - if test -n "$i" ; then + if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes @@ -7832,24 +9273,24 @@ EOF -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= ;; esac fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi - test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` + test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - if test "$want_nocaseglob" = yes; then + if test yes = "$want_nocaseglob"; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob @@ -7867,25 +9308,25 @@ EOF # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? - potlib="$potent_lib" + potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= break 2 fi done done fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." @@ -7893,7 +9334,7 @@ EOF echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then + if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" @@ -7916,30 +9357,30 @@ EOF -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= ;; esac fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test + potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= break 2 fi done done fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." @@ -7947,7 +9388,7 @@ EOF echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then + if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" @@ -7963,18 +9404,18 @@ EOF done # Gone through all deplibs. ;; none | unknown | *) - newdeplibs="" + newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo - if test "X$deplibs_check_method" = "Xnone"; then + if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." @@ -7998,8 +9439,8 @@ EOF ;; esac - if test "$droppeddeps" = yes; then - if test "$module" = yes; then + if test yes = "$droppeddeps"; then + if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" @@ -8008,12 +9449,12 @@ EOF if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." + echo "*** 'nm' from GNU binutils and a full rebuild may help." fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else @@ -8024,14 +9465,14 @@ EOF echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." - if test "$allow_undefined" = no; then + if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else @@ -8077,7 +9518,7 @@ EOF *) func_append new_libs " $deplib" ;; esac done - deplibs="$new_libs" + deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= @@ -8085,25 +9526,25 @@ EOF dlname= # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Remove ${wl} instances when linking with ld. + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac - if test "$hardcode_into_libs" = yes; then + if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8128,7 +9569,7 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then @@ -8142,8 +9583,8 @@ EOF test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi @@ -8153,19 +9594,19 @@ EOF eval library_names=\"$library_names_spec\" set dummy $library_names shift - realname="$1" + realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else - soname="$realname" + soname=$realname fi if test -z "$dlname"; then dlname=$soname fi - lib="$output_objdir/$realname" + lib=$output_objdir/$realname linknames= for link do @@ -8179,7 +9620,7 @@ EOF delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi @@ -8188,31 +9629,31 @@ EOF cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. - orig_export_symbols="$export_symbols" + orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes - fi + } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do - IFS="$save_ifs" + IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in @@ -8226,7 +9667,7 @@ EOF try_normal_branch=no ;; esac - if test "$try_normal_branch" = yes \ + if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then @@ -8237,7 +9678,7 @@ EOF output_la=$func_basename_result save_libobjs=$libobjs save_output=$output - output=${output_objdir}/${output_la}.nm + output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" @@ -8260,8 +9701,8 @@ EOF break fi done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi @@ -8269,16 +9710,16 @@ EOF fi if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine + # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. @@ -8297,11 +9738,11 @@ EOF ;; esac done - deplibs="$tmp_deplibs" + deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && + test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. @@ -8312,7 +9753,7 @@ EOF eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience @@ -8321,18 +9762,18 @@ EOF fi fi - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then + if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds @@ -8350,7 +9791,7 @@ EOF fi fi - if test "X$skipped_export" != "X:" && + if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then @@ -8383,8 +9824,8 @@ EOF last_robj= k=1 - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs @@ -8396,14 +9837,14 @@ EOF func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= - if test "$compiler_needs_object" = yes; then + if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi @@ -8418,7 +9859,7 @@ EOF else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext + output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result @@ -8430,13 +9871,13 @@ EOF func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result - if test "X$objlist" = X || + if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. - if test "$k" -eq 1 ; then + if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" @@ -8446,10 +9887,10 @@ EOF reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi - last_robj=$output_objdir/$output_la-${k}.$objext + last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext + output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result @@ -8461,9 +9902,9 @@ EOF # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" @@ -8471,9 +9912,9 @@ EOF output= fi - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. @@ -8482,16 +9923,16 @@ EOF if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi - fi + } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { + IFS=$save_ifs + $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } @@ -8499,7 +9940,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -8508,7 +9949,7 @@ EOF exit $lt_exit } done - IFS="$save_ifs" + IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' @@ -8516,18 +9957,18 @@ EOF fi fi - if ${skipped_export-false}; then + ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine + # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. @@ -8536,7 +9977,7 @@ EOF export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi - fi + } libobjs=$output # Restore the value of output. @@ -8550,7 +9991,7 @@ EOF # value of $libobjs for piecewise linking. # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then + if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else @@ -8572,7 +10013,7 @@ EOF # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles @@ -8580,11 +10021,12 @@ EOF test "X$libobjs" = "X " && libobjs= fi - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd in $cmds; do - IFS="$save_ifs" + IFS=$sp$nl eval cmd=\"$cmd\" - $opt_silent || { + IFS=$save_ifs + $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } @@ -8592,7 +10034,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -8601,10 +10043,10 @@ EOF exit $lt_exit } done - IFS="$save_ifs" + IFS=$save_ifs # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then @@ -8624,39 +10066,39 @@ EOF done # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then + if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. - dlname="$soname" + dlname=$soname fi fi ;; obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; + func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" + func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" + func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" + func_warning "'-version-info' is ignored for objects" test -n "$release" && \ - func_warning "\`-release' is ignored for objects" + func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" + func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" @@ -8664,7 +10106,7 @@ EOF ;; *) libobj= - obj="$output" + obj=$output ;; esac @@ -8677,17 +10119,19 @@ EOF # the extraction. reload_conv_objs= gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else - gentop="$output_objdir/${obj}x" + gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience @@ -8696,12 +10140,12 @@ EOF fi # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - output="$obj" + output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. @@ -8713,7 +10157,7 @@ EOF exit $EXIT_SUCCESS fi - if test "$build_libtool_libs" != yes; then + test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi @@ -8723,12 +10167,12 @@ EOF # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS - fi + } - if test -n "$pic_flag" || test "$pic_mode" != default; then + if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" - output="$libobj" + output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi @@ -8745,16 +10189,14 @@ EOF output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" + func_warning "'-version-info' is ignored for programs" test -n "$release" && \ - func_warning "\`-release' is ignored for programs" + func_warning "'-release' is ignored for programs" - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) @@ -8768,11 +10210,11 @@ EOF *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then + if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) - func_append compile_command " ${wl}-bind_at_load" - func_append finalize_command " ${wl}-bind_at_load" + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" ;; esac fi @@ -8808,7 +10250,7 @@ EOF *) func_append new_libs " $deplib" ;; esac done - compile_deplibs="$new_libs" + compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" @@ -8832,7 +10274,7 @@ EOF if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8855,7 +10297,7 @@ EOF fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; @@ -8872,10 +10314,10 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi - compile_rpath="$rpath" + compile_rpath=$rpath rpath= hardcode_libdirs= @@ -8883,7 +10325,7 @@ EOF if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8908,45 +10350,43 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi - finalize_rpath="$rpath" + finalize_rpath=$rpath - if test -n "$libobjs" && test "$build_old_libs" = yes; then + if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi - wrappers_required=yes + wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no + wrappers_required=false ;; *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi + test yes = "$build_libtool_libs" || wrappers_required=false ;; *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false fi ;; esac - if test "$wrappers_required" = no; then + $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" + link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 @@ -8959,12 +10399,12 @@ EOF fi # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status - fi + } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" @@ -8994,9 +10434,9 @@ EOF fi fi - if test "$no_install" = yes; then + if test yes = "$no_install"; then # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" + link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. @@ -9013,27 +10453,28 @@ EOF exit $EXIT_SUCCESS fi - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` @@ -9090,8 +10531,8 @@ EOF func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 @@ -9112,7 +10553,7 @@ EOF trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then + if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result @@ -9135,25 +10576,27 @@ EOF # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience build_libtool_libs=no - else + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs @@ -9161,13 +10604,13 @@ EOF fi # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles @@ -9188,7 +10631,7 @@ EOF : else echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs @@ -9197,7 +10640,7 @@ EOF for obj in $save_oldobjs do func_basename "$obj" - objbase="$func_basename_result" + objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) @@ -9266,18 +10709,18 @@ EOF else # the above command should be used before it gets too long oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then + if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist - if test "X$oldobjs" = "X" ; then + if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" @@ -9294,7 +10737,7 @@ EOF case $output in *.la) old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" + test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior @@ -9309,31 +10752,31 @@ EOF fi done # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then + if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do - if test "$installed" = yes; then + if test yes = "$installed"; then if test -z "$install_libdir"; then break fi - output="$output_objdir/$outputname"i + output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" - name="$func_basename_result" + name=$func_basename_result func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" + func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) @@ -9349,23 +10792,23 @@ EOF *) func_append newdependency_libs " $deplib" ;; esac done - dependency_libs="$newdependency_libs" + dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" + func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done - dlfiles="$newdlfiles" + dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in @@ -9375,34 +10818,34 @@ EOF # didn't already link the preopened objects directly into # the library: func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" + func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done - dlprefiles="$newdlprefiles" + dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done - dlfiles="$newdlfiles" + dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done - dlprefiles="$newdlprefiles" + dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin @@ -9418,10 +10861,9 @@ EOF case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then + if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname + tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname @@ -9430,7 +10872,7 @@ EOF esac $ECHO > $output "\ # $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. @@ -9444,7 +10886,7 @@ library_names='$library_names' # The name of the static archive. old_library='$old_library' -# Linker flags that can not go in dependency_libs. +# Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. @@ -9470,7 +10912,7 @@ dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then + if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi @@ -9485,27 +10927,29 @@ relink_command=\"$relink_command\"" exit $EXIT_SUCCESS } -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi # func_mode_uninstall arg... func_mode_uninstall () { - $opt_debug - RM="$nonopt" + $debug_cmd + + RM=$nonopt files= - rmforce= + rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. - libtool_install_magic="$magic" + libtool_install_magic=$magic for arg do case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; + -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac @@ -9518,18 +10962,18 @@ func_mode_uninstall () for file in $files; do func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir else - odir="$dir/$objdir" + odir=$dir/$objdir fi func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then + if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; @@ -9544,11 +10988,11 @@ func_mode_uninstall () elif test -d "$file"; then exit_status=1 continue - elif test "$rmforce" = yes; then + elif $rmforce; then continue fi - rmfiles="$file" + rmfiles=$file case $name in *.la) @@ -9562,7 +11006,7 @@ func_mode_uninstall () done test -n "$old_library" && func_append rmfiles " $odir/$old_library" - case "$opt_mode" in + case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; @@ -9573,12 +11017,12 @@ func_mode_uninstall () uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; @@ -9594,21 +11038,19 @@ func_mode_uninstall () func_source $dir/$name # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then + if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then + if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) - if test "$opt_mode" = clean ; then + if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) @@ -9635,12 +11077,12 @@ func_mode_uninstall () # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" fi fi fi @@ -9649,7 +11091,7 @@ func_mode_uninstall () func_show_eval "$RM $rmfiles" 'exit_status=1' done - # Try to remove the ${objdir}s in the directories where we deleted files + # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" @@ -9659,16 +11101,17 @@ func_mode_uninstall () exit $exit_status } -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi test -z "$opt_mode" && { - help="$generic_help" + help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" + func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" @@ -9679,7 +11122,7 @@ exit $exit_status # The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting +# where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support @@ -9702,5 +11145,3 @@ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # mode:shell-script # sh-indentation:2 # End: -# vi:sw=2 - diff --git a/contrib/openpam/m4/libtool.m4 b/contrib/openpam/m4/libtool.m4 new file mode 100644 index 000000000000..a3bc337b79ad --- /dev/null +++ b/contrib/openpam/m4/libtool.m4 @@ -0,0 +1,8369 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/contrib/openpam/m4/ltoptions.m4 b/contrib/openpam/m4/ltoptions.m4 new file mode 100644 index 000000000000..94b082976667 --- /dev/null +++ b/contrib/openpam/m4/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/contrib/openpam/m4/ltsugar.m4 b/contrib/openpam/m4/ltsugar.m4 new file mode 100644 index 000000000000..48bc9344a4d6 --- /dev/null +++ b/contrib/openpam/m4/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/contrib/openpam/m4/ltversion.m4 b/contrib/openpam/m4/ltversion.m4 new file mode 100644 index 000000000000..fa04b52a3bf8 --- /dev/null +++ b/contrib/openpam/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/contrib/openpam/m4/lt~obsolete.m4 b/contrib/openpam/m4/lt~obsolete.m4 new file mode 100644 index 000000000000..c6b26f88f6c3 --- /dev/null +++ b/contrib/openpam/m4/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/contrib/openpam/misc/Makefile.am b/contrib/openpam/misc/Makefile.am new file mode 100644 index 000000000000..692e9fbcc882 --- /dev/null +++ b/contrib/openpam/misc/Makefile.am @@ -0,0 +1 @@ +noinst_SCRIPTS = coverage.sh coverity.sh diff --git a/contrib/openpam/misc/Makefile.in b/contrib/openpam/misc/Makefile.in new file mode 100644 index 000000000000..bd6879ac6ba9 --- /dev/null +++ b/contrib/openpam/misc/Makefile.in @@ -0,0 +1,449 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = misc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = coverage.sh coverity.sh +CONFIG_CLEAN_VPATH_FILES = +SCRIPTS = $(noinst_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/coverage.sh.in \ + $(srcdir)/coverity.sh.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ +CRYPTO_LIBS = @CRYPTO_LIBS@ +CRYPT_LIBS = @CRYPT_LIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DL_LIBS = @DL_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIB_MAJ = @LIB_MAJ@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENPAM_MODULES_DIR = @OPENPAM_MODULES_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_SCRIPTS = coverage.sh coverity.sh +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign misc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign misc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +coverage.sh: $(top_builddir)/config.status $(srcdir)/coverage.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +coverity.sh: $(top_builddir)/config.status $(srcdir)/coverity.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# 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/contrib/openpam/misc/coverage.sh.in b/contrib/openpam/misc/coverage.sh.in new file mode 100644 index 000000000000..83c378a75a8d --- /dev/null +++ b/contrib/openpam/misc/coverage.sh.in @@ -0,0 +1,33 @@ +#!/bin/sh + +usage() { + echo "usage: ${0##*/} [-jN]" >&2 + exit 1 +} + +while getopts "j:" opt ; do + case $opt in + j) + j="-j$OPTARG" + ;; + *) + usage + ;; + esac +done + +if ! which -s cov01 covhtml ; then + echo "coverage tools not found" >&2 + exit 1 +fi +srcdir="@abs_top_srcdir@" +htmldir="${srcdir}/covhtml" +export COVFILE="${srcdir}/test.cov" +gmake -C "${srcdir}" clean +find "${srcdir}" -type f -name "${COVFILE##*/}" -delete +rm -rf "${htmldir}" +cov01 -1 +gmake -C "${srcdir}" $j check || exit 1 +covhtml -d "${srcdir}" -f "${COVFILE}" "${htmldir}" +cov01 -0 +gmake -C "${srcdir}" clean diff --git a/contrib/openpam/misc/coverity.sh.in b/contrib/openpam/misc/coverity.sh.in new file mode 100644 index 000000000000..519925ebdbb1 --- /dev/null +++ b/contrib/openpam/misc/coverity.sh.in @@ -0,0 +1,37 @@ +#!/bin/sh + +usage() { + echo "usage: ${0##*/} [-jN]" >&2 + exit 1 +} + +while getopts "j:" opt ; do + case $opt in + j) + j="-j$OPTARG" + ;; + *) + usage + ;; + esac +done + +if which -s cov01 ; then + cov01="$(which cov01)" +fi +covint="cov-int" +covlog="${covint}/build-log.txt" +srcdir="@abs_top_srcdir@" +cd "${srcdir}" || exit 1 +rm -rf "${covint}" +gmake clean || exit 1 +"${cov01:-:}" -q -u +"${cov01:-:}" -q -0 +cov-build --dir "${covint}" gmake "$@" +"${cov01:-:}" -q -o +gmake clean +if tail -1 "${covlog}" | grep -q "completed successfully" ; then + tar caf "@PACKAGE@-@PACKAGE_VERSION@-cov-int.txz" "${covint}" +else + tail "${covlog}" +fi diff --git a/contrib/openpam/misc/gendoc.pl b/contrib/openpam/misc/gendoc.pl index c09f9076c156..3202dc6f5529 100644 --- a/contrib/openpam/misc/gendoc.pl +++ b/contrib/openpam/misc/gendoc.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w #- # Copyright (c) 2002-2003 Networks Associates Technology, Inc. -# Copyright (c) 2004-2011 Dag-Erling Smørgrav +# Copyright (c) 2004-2014 Dag-Erling Smørgrav # All rights reserved. # # This software was developed for the FreeBSD Project by ThinkSec AS and @@ -33,7 +33,7 @@ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # -# $Id: gendoc.pl 736 2013-09-07 12:52:42Z des $ +# $Id: gendoc.pl 910 2017-01-21 12:22:08Z des $ # use strict; @@ -55,11 +55,11 @@ DARPA/SPAWAR contract N66001-01-C-8035 as part of the DARPA CHATS research program. .Pp The OpenPAM library is maintained by -.An Dag-Erling Sm\\(/orgrav Aq des\@des.no .", +.An Dag-Erling Sm\\(/orgrav Aq Mt des\@des.no .", UIO => "developed for the University of Oslo by -.An Dag-Erling Sm\\(/orgrav Aq des\@des.no .", +.An Dag-Erling Sm\\(/orgrav Aq Mt des\@des.no .", DES => "developed by -.An Dag-Erling Sm\\(/orgrav Aq des\@des.no .", +.An Dag-Erling Sm\\(/orgrav Aq Mt des\@des.no .", ); %PAMERR = ( @@ -292,7 +292,7 @@ sub parse_source($) { } s/\s*=($func)\b\s*/\n.Fn $1\n/gs; s/\s*=($argnames)\b\s*/\n.Fa $1\n/gs; - s/\s*=(struct \w+(?: \*)?)\b\s*/\n.Vt $1\n/gs; + s/\s*=((?:enum|struct|union) \w+(?: \*)?)\b\s*/\n.Vt $1\n/gs; s/\s*:([a-z][0-9a-z_]+)\b\s*/\n.Va $1\n/gs; s/\s*;([a-z][0-9a-z_]+)\b\s*/\n.Dv $1\n/gs; s/\s*=!([a-z][0-9a-z_]+)\b\s*/\n.Xr $1 3\n/gs; @@ -446,16 +446,22 @@ sub gendoc($) { .Sh NAME .Nm $$func{name} .Nd $$func{descr} -.Sh LIBRARY +"; + if ($func =~ m/^(?:open)?pam_/) { + $mdoc .= ".Sh LIBRARY .Lb libpam -.Sh SYNOPSIS +"; + } + $mdoc .= ".Sh SYNOPSIS .In sys/types.h "; if ($$func{args} =~ m/\bFILE \*\b/) { $mdoc .= ".In stdio.h\n"; } - $mdoc .= ".In security/pam_appl.h + if ($$func{name} =~ m/^(?:open)?pam/) { + $mdoc .= ".In security/pam_appl.h "; + } if ($$func{name} =~ m/_sm_/) { $mdoc .= ".In security/pam_modules.h\n"; } @@ -551,7 +557,7 @@ sub readproto($) { open(FILE, "<", "$fn") or die("$fn: open(): $!\n"); while () { - if (m/^\.Nm ((?:open)?pam_.*?)\s*$/) { + if (m/^\.Nm ((?:(?:open)?pam)_.*?)\s*$/) { $func{Nm} = $func{Nm} || $1; } elsif (m/^\.Ft (\S.*?)\s*$/) { $func{Ft} = $func{Ft} || $1; @@ -638,17 +644,9 @@ The following return codes are defined by .%T \"X/Open Single Sign-On Service (XSSO) - Pluggable Authentication Modules\" .%D \"June 1997\" .Re -.Sh AUTHORS -The OpenPAM library and this manual page were developed for the -.Fx -Project by ThinkSec AS and Network Associates Laboratories, the -Security Research Division of Network Associates, Inc.\\& under -DARPA/SPAWAR contract N66001-01-C-8035 -.Pq Dq CBOSS , -as part of the DARPA CHATS research program. -.Pp -The OpenPAM library is maintained by -.An Dag-Erling Sm\\(/orgrav Aq des\@des.no . +"; + print FILE ".Sh AUTHORS +The OpenPAM library and this manual page were $AUTHORS{THINKSEC} "; close(FILE); } diff --git a/contrib/openpam/missing b/contrib/openpam/missing index cdea514931f5..f62bbae306c7 100644 --- a/contrib/openpam/missing +++ b/contrib/openpam/missing @@ -1,9 +1,9 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU programs. -scriptversion=2012-06-26.16; # UTC +scriptversion=2013-10-28.13; # UTC -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -160,7 +160,7 @@ give_advice () ;; autom4te*) echo "You might have modified some maintainer files that require" - echo "the 'automa4te' program to be rebuilt." + echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) diff --git a/contrib/openpam/mkpkgng.in b/contrib/openpam/mkpkgng.in index 5c14c1848909..3c57b7dc184f 100644 --- a/contrib/openpam/mkpkgng.in +++ b/contrib/openpam/mkpkgng.in @@ -1,6 +1,6 @@ #!/bin/sh #- -# Copyright (c) 2013 Dag-Erling Smørgrav +# Copyright (c) 2013-2014 Dag-Erling Smørgrav # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -27,7 +27,7 @@ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # -# $Id: mkpkgng.in 816 2014-09-12 07:50:22Z des $ +# $Id: mkpkgng.in 890 2016-01-11 16:22:09Z des $ # # Print an informational message @@ -61,8 +61,6 @@ yesno() { # Locate source and build directory # srcdir="@abs_top_srcdir@" -[ -f "$srcdir/include/security/openpam.h" ] || \ - error "Unable to locate source directory." builddir="@abs_top_builddir@" cd "$srcdir" @@ -83,7 +81,8 @@ if ! expr "$version" : "[0-9]{1,}$" >/dev/null ; then svnversion="$(svnversion 2>&1)" svnversion=$(expr "$svnversion" : '\([0-9][0-9]*\)[A-Z]\{0,1\}$') if [ -n "$svnversion" ] ; then - version="$version-r${svnversion}" + package="$package-$version" + version="r$svnversion" fi fi @@ -114,6 +113,21 @@ set -e info "Installing into the temporary directory." $make install DESTDIR="$tmproot" +# +# Compress man pages +# +find $tmproot -type d -name 'man[0-9]' | +while read mandir ; do + find $mandir -type f -name '*.[0-9]' | + while read manpage ; do + gzip "$manpage" + done + find $mandir -type l -name '*.[0-9]' | + while read manlink ; do + ln -s "$(readlink $manlink).gz" "$manlink.gz" + done +done + # # Generate stub manifest # @@ -128,30 +142,27 @@ arch: $pkgabi www: @PACKAGE_URL@ maintainer: @PACKAGE_BUGREPORT@ prefix: @prefix@ -desc: - OpenPAM is an open source PAM library that focuses on simplicity, - correctness, and cleanliness. - - OpenPAM aims to gather the best features of Solaris PAM, XSSO and - Linux-PAM, plus some innovations of its own. In areas where these - implementations disagree, OpenPAM tries to remain compatible with - Solaris, at the expense of XSSO conformance and Linux-PAM - compatibility. -categories: local, security +categories: [ local, security ] EOF +cp "$srcdir/README" "$tmproot/+DESC" # # Generate file list # info "Generating the file list." ( - echo "files:" - find -s "$tmproot" -type f | while read file ; do - [ "$file" = "$manifest" ] && continue + echo "files: {" + find -s "$tmproot@prefix@" -type f -or -type l | while read file ; do + case $file in + *.la) + continue + ;; + esac mode=$(stat -f%p "$file" | cut -c 3-) file="${file#$tmproot}" echo " $file: { uname: root, gname: wheel, perm: $mode }" done + echo "}" )>>"$manifest" # diff --git a/contrib/openpam/modules/Makefile.am b/contrib/openpam/modules/Makefile.am index d534b9f6cd96..2ce129e5175c 100644 --- a/contrib/openpam/modules/Makefile.am +++ b/contrib/openpam/modules/Makefile.am @@ -1,6 +1,6 @@ -# $Id: Makefile.am 714 2013-08-19 15:30:21Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ -SUBDIRS = pam_deny pam_permit +SUBDIRS = pam_deny pam_permit pam_return if WITH_PAM_UNIX SUBDIRS += pam_unix diff --git a/contrib/openpam/modules/Makefile.in b/contrib/openpam/modules/Makefile.in index 412068ab0afd..172cda967b8f 100644 --- a/contrib/openpam/modules/Makefile.in +++ b/contrib/openpam/modules/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,9 +14,19 @@ @SET_MAKE@ -# $Id: Makefile.am 714 2013-08-19 15:30:21Z des $ +# $Id: Makefile.am 907 2017-01-18 09:39:01Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,11 +91,14 @@ build_triplet = @build@ host_triplet = @host@ @WITH_PAM_UNIX_TRUE@am__append_1 = pam_unix subdir = modules -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -144,7 +157,8 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = pam_deny pam_permit pam_unix +DIST_SUBDIRS = pam_deny pam_permit pam_return pam_unix +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -184,6 +198,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -214,6 +229,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -237,6 +253,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -290,7 +307,7 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = pam_deny pam_permit $(am__append_1) +SUBDIRS = pam_deny pam_permit pam_return $(am__append_1) all: all-recursive .SUFFIXES: @@ -306,7 +323,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -601,6 +617,8 @@ uninstall-am: mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/modules/pam_deny/Makefile.am b/contrib/openpam/modules/pam_deny/Makefile.am index c04a38547ec0..d48418cf258c 100644 --- a/contrib/openpam/modules/pam_deny/Makefile.am +++ b/contrib/openpam/modules/pam_deny/Makefile.am @@ -1,7 +1,7 @@ -# $Id: Makefile.am 690 2013-08-15 13:22:51Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ if CUSTOM_MODULES_DIR -moduledir = @OPENPAM_MODULES_DIR@ +moduledir = $(OPENPAM_MODULES_DIR) else moduledir = $(libdir) endif @@ -10,6 +10,10 @@ AM_CPPFLAGS = -I$(top_srcdir)/include module_LTLIBRARIES = pam_deny.la pam_deny_la_SOURCES = pam_deny.c -pam_deny_la_LDFLAGS = -no-undefined -module -version-info @LIB_MAJ@ \ +pam_deny_la_LDFLAGS = -no-undefined -module -version-info $(LIB_MAJ) \ -export-symbols-regex '^pam_sm_' +if WITH_SYSTEM_LIBPAM +pam_deny_la_LIBADD = $(SYSTEM_LIBPAM) +else pam_deny_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la +endif diff --git a/contrib/openpam/modules/pam_deny/Makefile.in b/contrib/openpam/modules/pam_deny/Makefile.in index f38452ac0a99..17437e8e3ad1 100644 --- a/contrib/openpam/modules/pam_deny/Makefile.in +++ b/contrib/openpam/modules/pam_deny/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,20 @@ @SET_MAKE@ -# $Id: Makefile.am 690 2013-08-15 13:22:51Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,12 +91,14 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/pam_deny -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -120,7 +132,10 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(moduledir)" LTLIBRARIES = $(module_LTLIBRARIES) -pam_deny_la_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +am__DEPENDENCIES_1 = +@WITH_SYSTEM_LIBPAM_FALSE@pam_deny_la_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@pam_deny_la_DEPENDENCIES = \ +@WITH_SYSTEM_LIBPAM_TRUE@ $(am__DEPENDENCIES_1) am_pam_deny_la_OBJECTS = pam_deny.lo pam_deny_la_OBJECTS = $(am_pam_deny_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -190,6 +205,7 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -204,6 +220,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -234,6 +251,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -257,6 +275,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -311,14 +330,15 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @CUSTOM_MODULES_DIR_FALSE@moduledir = $(libdir) -@CUSTOM_MODULES_DIR_TRUE@moduledir = @OPENPAM_MODULES_DIR@ +@CUSTOM_MODULES_DIR_TRUE@moduledir = $(OPENPAM_MODULES_DIR) AM_CPPFLAGS = -I$(top_srcdir)/include module_LTLIBRARIES = pam_deny.la pam_deny_la_SOURCES = pam_deny.c -pam_deny_la_LDFLAGS = -no-undefined -module -version-info @LIB_MAJ@ \ +pam_deny_la_LDFLAGS = -no-undefined -module -version-info $(LIB_MAJ) \ -export-symbols-regex '^pam_sm_' -pam_deny_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_FALSE@pam_deny_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@pam_deny_la_LIBADD = $(SYSTEM_LIBPAM) all: all-am .SUFFIXES: @@ -335,7 +355,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/pam_deny/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/pam_deny/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -634,6 +653,8 @@ uninstall-am: uninstall-moduleLTLIBRARIES pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-moduleLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/modules/pam_permit/Makefile.am b/contrib/openpam/modules/pam_permit/Makefile.am index 6b0757d12a24..b058c1e1aa02 100644 --- a/contrib/openpam/modules/pam_permit/Makefile.am +++ b/contrib/openpam/modules/pam_permit/Makefile.am @@ -1,7 +1,7 @@ -# $Id: Makefile.am 690 2013-08-15 13:22:51Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ if CUSTOM_MODULES_DIR -moduledir = @OPENPAM_MODULES_DIR@ +moduledir = $(OPENPAM_MODULES_DIR) else moduledir = $(libdir) endif @@ -10,6 +10,10 @@ AM_CPPFLAGS = -I$(top_srcdir)/include module_LTLIBRARIES = pam_permit.la pam_permit_la_SOURCES = pam_permit.c -pam_permit_la_LDFLAGS = -no-undefined -module -version-info @LIB_MAJ@ \ +pam_permit_la_LDFLAGS = -no-undefined -module -version-info $(LIB_MAJ) \ -export-symbols-regex '^pam_sm_' +if WITH_SYSTEM_LIBPAM +pam_permit_la_LIBADD = $(SYSTEM_LIBPAM) +else pam_permit_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la +endif diff --git a/contrib/openpam/modules/pam_permit/Makefile.in b/contrib/openpam/modules/pam_permit/Makefile.in index 9949ebdf6ed0..ab3587037924 100644 --- a/contrib/openpam/modules/pam_permit/Makefile.in +++ b/contrib/openpam/modules/pam_permit/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,20 @@ @SET_MAKE@ -# $Id: Makefile.am 690 2013-08-15 13:22:51Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,12 +91,14 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/pam_permit -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -120,7 +132,10 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(moduledir)" LTLIBRARIES = $(module_LTLIBRARIES) -pam_permit_la_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +am__DEPENDENCIES_1 = +@WITH_SYSTEM_LIBPAM_FALSE@pam_permit_la_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@pam_permit_la_DEPENDENCIES = \ +@WITH_SYSTEM_LIBPAM_TRUE@ $(am__DEPENDENCIES_1) am_pam_permit_la_OBJECTS = pam_permit.lo pam_permit_la_OBJECTS = $(am_pam_permit_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -190,6 +205,7 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -204,6 +220,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -234,6 +251,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -257,6 +275,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -311,14 +330,15 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @CUSTOM_MODULES_DIR_FALSE@moduledir = $(libdir) -@CUSTOM_MODULES_DIR_TRUE@moduledir = @OPENPAM_MODULES_DIR@ +@CUSTOM_MODULES_DIR_TRUE@moduledir = $(OPENPAM_MODULES_DIR) AM_CPPFLAGS = -I$(top_srcdir)/include module_LTLIBRARIES = pam_permit.la pam_permit_la_SOURCES = pam_permit.c -pam_permit_la_LDFLAGS = -no-undefined -module -version-info @LIB_MAJ@ \ +pam_permit_la_LDFLAGS = -no-undefined -module -version-info $(LIB_MAJ) \ -export-symbols-regex '^pam_sm_' -pam_permit_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_FALSE@pam_permit_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@pam_permit_la_LIBADD = $(SYSTEM_LIBPAM) all: all-am .SUFFIXES: @@ -335,7 +355,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/pam_permit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/pam_permit/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -634,6 +653,8 @@ uninstall-am: uninstall-moduleLTLIBRARIES pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-moduleLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/modules/pam_return/Makefile.am b/contrib/openpam/modules/pam_return/Makefile.am new file mode 100644 index 000000000000..33e67262596a --- /dev/null +++ b/contrib/openpam/modules/pam_return/Makefile.am @@ -0,0 +1,19 @@ +# $Id: Makefile.am 873 2015-12-01 19:38:01Z des $ + +if CUSTOM_MODULES_DIR +moduledir = $(OPENPAM_MODULES_DIR) +else +moduledir = $(libdir) +endif +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam + +module_LTLIBRARIES = pam_return.la + +pam_return_la_SOURCES = pam_return.c +pam_return_la_LDFLAGS = -no-undefined -module -version-info $(LIB_MAJ) \ + -export-symbols-regex '^pam_sm_' +if WITH_SYSTEM_LIBPAM +pam_return_la_LIBADD = $(SYSTEM_LIBPAM) +else +pam_return_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la +endif diff --git a/contrib/openpam/modules/pam_return/Makefile.in b/contrib/openpam/modules/pam_return/Makefile.in new file mode 100644 index 000000000000..cbb884be8565 --- /dev/null +++ b/contrib/openpam/modules/pam_return/Makefile.in @@ -0,0 +1,661 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# $Id: Makefile.am 873 2015-12-01 19:38:01Z des $ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = modules/pam_return +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(moduledir)" +LTLIBRARIES = $(module_LTLIBRARIES) +am__DEPENDENCIES_1 = +@WITH_SYSTEM_LIBPAM_FALSE@pam_return_la_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@pam_return_la_DEPENDENCIES = \ +@WITH_SYSTEM_LIBPAM_TRUE@ $(am__DEPENDENCIES_1) +am_pam_return_la_OBJECTS = pam_return.lo +pam_return_la_OBJECTS = $(am_pam_return_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +pam_return_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(pam_return_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(pam_return_la_SOURCES) +DIST_SOURCES = $(pam_return_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ +CRYPTO_LIBS = @CRYPTO_LIBS@ +CRYPT_LIBS = @CRYPT_LIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DL_LIBS = @DL_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIB_MAJ = @LIB_MAJ@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENPAM_MODULES_DIR = @OPENPAM_MODULES_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@CUSTOM_MODULES_DIR_FALSE@moduledir = $(libdir) +@CUSTOM_MODULES_DIR_TRUE@moduledir = $(OPENPAM_MODULES_DIR) +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam +module_LTLIBRARIES = pam_return.la +pam_return_la_SOURCES = pam_return.c +pam_return_la_LDFLAGS = -no-undefined -module -version-info $(LIB_MAJ) \ + -export-symbols-regex '^pam_sm_' + +@WITH_SYSTEM_LIBPAM_FALSE@pam_return_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la +@WITH_SYSTEM_LIBPAM_TRUE@pam_return_la_LIBADD = $(SYSTEM_LIBPAM) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/pam_return/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign modules/pam_return/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-moduleLTLIBRARIES: $(module_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(module_LTLIBRARIES)'; test -n "$(moduledir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(moduledir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(moduledir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(moduledir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(moduledir)"; \ + } + +uninstall-moduleLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(module_LTLIBRARIES)'; test -n "$(moduledir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$f"; \ + done + +clean-moduleLTLIBRARIES: + -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES) + @list='$(module_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +pam_return.la: $(pam_return_la_OBJECTS) $(pam_return_la_DEPENDENCIES) $(EXTRA_pam_return_la_DEPENDENCIES) + $(AM_V_CCLD)$(pam_return_la_LINK) -rpath $(moduledir) $(pam_return_la_OBJECTS) $(pam_return_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_return.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(moduledir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-moduleLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-moduleLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-moduleLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-moduleLTLIBRARIES \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-moduleLTLIBRARIES + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/openpam/modules/pam_return/pam_return.c b/contrib/openpam/modules/pam_return/pam_return.c new file mode 100644 index 000000000000..9455e338cc8e --- /dev/null +++ b/contrib/openpam/modules/pam_return/pam_return.c @@ -0,0 +1,127 @@ +/*- + * Copyright (c) 2015 Dag-Erling Smørgrav + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: pam_return.c 873 2015-12-01 19:38:01Z des $ + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include +#include +#include + +#include +#include + +#include "openpam_impl.h" + +static int +pam_return(pam_handle_t *pamh, int flags, + int argc, const char *argv[]) +{ + const char *errname; + char *e; + long errcode; + + (void)flags; + (void)argc; + (void)argv; + if ((errname = openpam_get_option(pamh, "error")) == NULL || + errname[0] == '\0') { + openpam_log(PAM_LOG_ERROR, "missing error parameter"); + return (PAM_SYSTEM_ERR); + } + /* is it a number? */ + errcode = strtol(errname, &e, 10); + if (e != NULL && *e == '\0') { + /* yep, check range */ + if (errcode >= INT_MIN && errcode <= INT_MAX) + return (errcode); + } else { + /* nope, look it up */ + for (errcode = 0; errcode < PAM_NUM_ERRORS; ++errcode) + if (strcmp(errname, pam_err_name[errcode]) == 0) + return (errcode); + } + openpam_log(PAM_LOG_ERROR, "invalid error code '%s'", errname); + return (PAM_SYSTEM_ERR); +} + +PAM_EXTERN int +pam_sm_authenticate(pam_handle_t *pamh, int flags, + int argc, const char *argv[]) +{ + + return (pam_return(pamh, flags, argc, argv)); +} + +PAM_EXTERN int +pam_sm_setcred(pam_handle_t *pamh, int flags, + int argc, const char *argv[]) +{ + + return (pam_return(pamh, flags, argc, argv)); +} + +PAM_EXTERN int +pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, + int argc, const char *argv[]) +{ + + return (pam_return(pamh, flags, argc, argv)); +} + +PAM_EXTERN int +pam_sm_open_session(pam_handle_t *pamh, int flags, + int argc, const char *argv[]) +{ + + return (pam_return(pamh, flags, argc, argv)); +} + +PAM_EXTERN int +pam_sm_close_session(pam_handle_t *pamh, int flags, + int argc, const char *argv[]) +{ + + return (pam_return(pamh, flags, argc, argv)); +} + +PAM_EXTERN int +pam_sm_chauthtok(pam_handle_t *pamh, int flags, + int argc, const char *argv[]) +{ + + return (pam_return(pamh, flags, argc, argv)); +} + +PAM_MODULE_ENTRY("pam_return"); diff --git a/contrib/openpam/modules/pam_unix/Makefile.am b/contrib/openpam/modules/pam_unix/Makefile.am index 0189768daf63..a1c97c737cec 100644 --- a/contrib/openpam/modules/pam_unix/Makefile.am +++ b/contrib/openpam/modules/pam_unix/Makefile.am @@ -1,7 +1,7 @@ -# $Id: Makefile.am 690 2013-08-15 13:22:51Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ if CUSTOM_MODULES_DIR -moduledir = @OPENPAM_MODULES_DIR@ +moduledir = $(OPENPAM_MODULES_DIR) else moduledir = $(libdir) endif @@ -10,6 +10,10 @@ AM_CPPFLAGS = -I$(top_srcdir)/include module_LTLIBRARIES = pam_unix.la pam_unix_la_SOURCES = pam_unix.c -pam_unix_la_LDFLAGS = -no-undefined -module -version-info @LIB_MAJ@ \ +pam_unix_la_LDFLAGS = -no-undefined -module -version-info $(LIB_MAJ) \ -export-symbols-regex '^pam_sm_' -pam_unix_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la @CRYPT_LIBS@ +if WITH_SYSTEM_LIBPAM +pam_unix_la_LIBADD = $(SYSTEM_LIBPAM) +else +pam_unix_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la $(CRYPT_LIBS) +endif diff --git a/contrib/openpam/modules/pam_unix/Makefile.in b/contrib/openpam/modules/pam_unix/Makefile.in index b5d116a07d3f..1a2507d9bd80 100644 --- a/contrib/openpam/modules/pam_unix/Makefile.in +++ b/contrib/openpam/modules/pam_unix/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,20 @@ @SET_MAKE@ -# $Id: Makefile.am 690 2013-08-15 13:22:51Z des $ +# $Id: Makefile.am 834 2014-10-28 10:25:58Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,12 +91,14 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/pam_unix -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -120,7 +132,11 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(moduledir)" LTLIBRARIES = $(module_LTLIBRARIES) -pam_unix_la_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la +am__DEPENDENCIES_1 = +@WITH_SYSTEM_LIBPAM_FALSE@pam_unix_la_DEPENDENCIES = $(top_builddir)/lib/libpam/libpam.la \ +@WITH_SYSTEM_LIBPAM_FALSE@ $(am__DEPENDENCIES_1) +@WITH_SYSTEM_LIBPAM_TRUE@pam_unix_la_DEPENDENCIES = \ +@WITH_SYSTEM_LIBPAM_TRUE@ $(am__DEPENDENCIES_1) am_pam_unix_la_OBJECTS = pam_unix.lo pam_unix_la_OBJECTS = $(am_pam_unix_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -190,6 +206,7 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -204,6 +221,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -234,6 +252,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -257,6 +276,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -311,14 +331,15 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @CUSTOM_MODULES_DIR_FALSE@moduledir = $(libdir) -@CUSTOM_MODULES_DIR_TRUE@moduledir = @OPENPAM_MODULES_DIR@ +@CUSTOM_MODULES_DIR_TRUE@moduledir = $(OPENPAM_MODULES_DIR) AM_CPPFLAGS = -I$(top_srcdir)/include module_LTLIBRARIES = pam_unix.la pam_unix_la_SOURCES = pam_unix.c -pam_unix_la_LDFLAGS = -no-undefined -module -version-info @LIB_MAJ@ \ +pam_unix_la_LDFLAGS = -no-undefined -module -version-info $(LIB_MAJ) \ -export-symbols-regex '^pam_sm_' -pam_unix_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la @CRYPT_LIBS@ +@WITH_SYSTEM_LIBPAM_FALSE@pam_unix_la_LIBADD = $(top_builddir)/lib/libpam/libpam.la $(CRYPT_LIBS) +@WITH_SYSTEM_LIBPAM_TRUE@pam_unix_la_LIBADD = $(SYSTEM_LIBPAM) all: all-am .SUFFIXES: @@ -335,7 +356,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/pam_unix/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/pam_unix/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -634,6 +654,8 @@ uninstall-am: uninstall-moduleLTLIBRARIES pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-moduleLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/modules/pam_unix/pam_unix.c b/contrib/openpam/modules/pam_unix/pam_unix.c index f76651d084d8..06d020bc3a22 100644 --- a/contrib/openpam/modules/pam_unix/pam_unix.c +++ b/contrib/openpam/modules/pam_unix/pam_unix.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2011 Dag-Erling Smørgrav + * Copyright (c) 2004-2015 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pam_unix.c 648 2013-03-05 17:54:27Z des $ + * $Id: pam_unix.c 890 2016-01-11 16:22:09Z des $ */ #ifdef HAVE_CONFIG_H diff --git a/contrib/openpam/pamgdb.in b/contrib/openpam/pamgdb.in deleted file mode 100644 index 7667e0b45173..000000000000 --- a/contrib/openpam/pamgdb.in +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -# -# $Id: pamgdb.in 816 2014-09-12 07:50:22Z des $ -# - -srcdir="@abs_top_srcdir@" -builddir="@abs_top_builddir@" - -# Make sure we get the right version of libpam -pam_libdir="${builddir}/lib/.libs" -LD_LIBRARY_PATH="${pam_libdir}:${LD_LIBRARY_PATH}" -LD_LIBRARY_PATH="${LD_LIBRARY_PATH%:}" -export LD_LIBRARY_PATH - -# DWIM, assuming that the first positional argument is the name of the -# program to debug rather than a gdb option. -prog="$1" -if expr "${prog}" : ".*/.*" >/dev/null ; then - # The first argument is an absolute or relative path. There - # is a good chance that it points to the wrapper script - # generated by libtool rather than the actual binary. - altprog="${prog%/*}/.libs/${prog##*/}" - if [ -x "${altprog}" ] ; then - shift - set "${altprog}" "$@" - fi -elif expr "${prog}" : "[a-z.-][a-z.-]*" >/dev/null ; then - # The first argument is just the name of the program. Look for - # it in the build directory. - for libdir in $(find "${builddir}" -type d -name .libs -print) ; do - altprog="${libdir}/${prog}" - if [ -x "${altprog}" ] ; then - shift - set "${altprog}" "$@" - break - fi - done -fi - -# Let's go! -exec gdb "$@" diff --git a/contrib/openpam/t/Makefile.am b/contrib/openpam/t/Makefile.am index bf3801b5417b..9c538a4dd959 100644 --- a/contrib/openpam/t/Makefile.am +++ b/contrib/openpam/t/Makefile.am @@ -1,19 +1,32 @@ -# $Id: Makefile.am 763 2014-02-26 16:29:16Z des $ +# $Id: Makefile.am 922 2017-02-19 19:28:30Z des $ + +if WITH_TEST AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam -noinst_HEADERS = t.h +AM_TESTS_ENVIRONMENT = \ + PAM_RETURN_SO=$(abs_top_builddir)/modules/pam_return/.libs/pam_return.so + +noinst_HEADERS = t_pam_conv.h # tests TESTS = TESTS += t_openpam_ctype +TESTS += t_openpam_dispatch TESTS += t_openpam_readword TESTS += t_openpam_readlinev check_PROGRAMS = $(TESTS) # libt - common support code check_LIBRARIES = libt.a -libt_a_SOURCES = t_main.c t_file.c +libt_a_SOURCES = t_pam_conv.c -# link with libpam and libt -LDADD = libt.a $(top_builddir)/lib/libpam/libpam.la +# link with libpam and test framework +LDADD = $(CRYB_TEST_LIBS) libt.a +if WITH_SYSTEM_LIBPAM +LDADD += $(SYSTEM_LIBPAM) +else +LDADD += $(top_builddir)/lib/libpam/libpam.la +endif + +endif diff --git a/contrib/openpam/t/Makefile.in b/contrib/openpam/t/Makefile.in index 756951eced11..119d686e9c00 100644 --- a/contrib/openpam/t/Makefile.in +++ b/contrib/openpam/t/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,20 @@ @SET_MAKE@ -# $Id: Makefile.am 763 2014-02-26 16:29:16Z des $ +# $Id: Makefile.am 922 2017-02-19 19:28:30Z des $ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,17 +90,23 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -TESTS = t_openpam_ctype$(EXEEXT) t_openpam_readword$(EXEEXT) \ - t_openpam_readlinev$(EXEEXT) -check_PROGRAMS = $(am__EXEEXT_1) +@WITH_TEST_TRUE@TESTS = t_openpam_ctype$(EXEEXT) \ +@WITH_TEST_TRUE@ t_openpam_dispatch$(EXEEXT) \ +@WITH_TEST_TRUE@ t_openpam_readword$(EXEEXT) \ +@WITH_TEST_TRUE@ t_openpam_readlinev$(EXEEXT) +@WITH_TEST_TRUE@check_PROGRAMS = $(am__EXEEXT_1) +@WITH_SYSTEM_LIBPAM_TRUE@@WITH_TEST_TRUE@am__append_1 = $(SYSTEM_LIBPAM) +@WITH_SYSTEM_LIBPAM_FALSE@@WITH_TEST_TRUE@am__append_2 = $(top_builddir)/lib/libpam/libpam.la subdir = t -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) \ - $(top_srcdir)/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__noinst_HEADERS_DIST) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -102,29 +118,42 @@ am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libt_a_AR = $(AR) $(ARFLAGS) libt_a_LIBADD = -am_libt_a_OBJECTS = t_main.$(OBJEXT) t_file.$(OBJEXT) +am__libt_a_SOURCES_DIST = t_pam_conv.c +@WITH_TEST_TRUE@am_libt_a_OBJECTS = t_pam_conv.$(OBJEXT) libt_a_OBJECTS = $(am_libt_a_OBJECTS) -am__EXEEXT_1 = t_openpam_ctype$(EXEEXT) t_openpam_readword$(EXEEXT) \ - t_openpam_readlinev$(EXEEXT) +@WITH_TEST_TRUE@am__EXEEXT_1 = t_openpam_ctype$(EXEEXT) \ +@WITH_TEST_TRUE@ t_openpam_dispatch$(EXEEXT) \ +@WITH_TEST_TRUE@ t_openpam_readword$(EXEEXT) \ +@WITH_TEST_TRUE@ t_openpam_readlinev$(EXEEXT) t_openpam_ctype_SOURCES = t_openpam_ctype.c t_openpam_ctype_OBJECTS = t_openpam_ctype.$(OBJEXT) t_openpam_ctype_LDADD = $(LDADD) -t_openpam_ctype_DEPENDENCIES = libt.a \ - $(top_builddir)/lib/libpam/libpam.la +am__DEPENDENCIES_1 = +@WITH_SYSTEM_LIBPAM_TRUE@@WITH_TEST_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +@WITH_TEST_TRUE@t_openpam_ctype_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +@WITH_TEST_TRUE@ libt.a $(am__DEPENDENCIES_2) $(am__append_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = +t_openpam_dispatch_SOURCES = t_openpam_dispatch.c +t_openpam_dispatch_OBJECTS = t_openpam_dispatch.$(OBJEXT) +t_openpam_dispatch_LDADD = $(LDADD) +@WITH_TEST_TRUE@t_openpam_dispatch_DEPENDENCIES = \ +@WITH_TEST_TRUE@ $(am__DEPENDENCIES_1) libt.a \ +@WITH_TEST_TRUE@ $(am__DEPENDENCIES_2) $(am__append_2) t_openpam_readlinev_SOURCES = t_openpam_readlinev.c t_openpam_readlinev_OBJECTS = t_openpam_readlinev.$(OBJEXT) t_openpam_readlinev_LDADD = $(LDADD) -t_openpam_readlinev_DEPENDENCIES = libt.a \ - $(top_builddir)/lib/libpam/libpam.la +@WITH_TEST_TRUE@t_openpam_readlinev_DEPENDENCIES = \ +@WITH_TEST_TRUE@ $(am__DEPENDENCIES_1) libt.a \ +@WITH_TEST_TRUE@ $(am__DEPENDENCIES_2) $(am__append_2) t_openpam_readword_SOURCES = t_openpam_readword.c t_openpam_readword_OBJECTS = t_openpam_readword.$(OBJEXT) t_openpam_readword_LDADD = $(LDADD) -t_openpam_readword_DEPENDENCIES = libt.a \ - $(top_builddir)/lib/libpam/libpam.la +@WITH_TEST_TRUE@t_openpam_readword_DEPENDENCIES = \ +@WITH_TEST_TRUE@ $(am__DEPENDENCIES_1) libt.a \ +@WITH_TEST_TRUE@ $(am__DEPENDENCIES_2) $(am__append_2) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -159,15 +188,17 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(libt_a_SOURCES) t_openpam_ctype.c t_openpam_readlinev.c \ - t_openpam_readword.c -DIST_SOURCES = $(libt_a_SOURCES) t_openpam_ctype.c \ +SOURCES = $(libt_a_SOURCES) t_openpam_ctype.c t_openpam_dispatch.c \ t_openpam_readlinev.c t_openpam_readword.c +DIST_SOURCES = $(am__libt_a_SOURCES_DIST) t_openpam_ctype.c \ + t_openpam_dispatch.c t_openpam_readlinev.c \ + t_openpam_readword.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac +am__noinst_HEADERS_DIST = t_pam_conv.h HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, @@ -392,6 +423,8 @@ TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -406,6 +439,7 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CRYB_TEST_LIBS = @CRYB_TEST_LIBS@ CRYPTO_LIBS = @CRYPTO_LIBS@ CRYPT_LIBS = @CRYPT_LIBS@ CYGPATH_W = @CYGPATH_W@ @@ -436,6 +470,7 @@ LIB_MAJ = @LIB_MAJ@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -459,6 +494,7 @@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ +SYSTEM_LIBPAM = @SYSTEM_LIBPAM@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -512,15 +548,19 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam -noinst_HEADERS = t.h +@WITH_TEST_TRUE@AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam +@WITH_TEST_TRUE@AM_TESTS_ENVIRONMENT = \ +@WITH_TEST_TRUE@ PAM_RETURN_SO=$(abs_top_builddir)/modules/pam_return/.libs/pam_return.so + +@WITH_TEST_TRUE@noinst_HEADERS = t_pam_conv.h # libt - common support code -check_LIBRARIES = libt.a -libt_a_SOURCES = t_main.c t_file.c +@WITH_TEST_TRUE@check_LIBRARIES = libt.a +@WITH_TEST_TRUE@libt_a_SOURCES = t_pam_conv.c -# link with libpam and libt -LDADD = libt.a $(top_builddir)/lib/libpam/libpam.la +# link with libpam and test framework +@WITH_TEST_TRUE@LDADD = $(CRYB_TEST_LIBS) libt.a $(am__append_1) \ +@WITH_TEST_TRUE@ $(am__append_2) all: all-am .SUFFIXES: @@ -537,7 +577,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign t/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign t/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -577,6 +616,10 @@ t_openpam_ctype$(EXEEXT): $(t_openpam_ctype_OBJECTS) $(t_openpam_ctype_DEPENDENC @rm -f t_openpam_ctype$(EXEEXT) $(AM_V_CCLD)$(LINK) $(t_openpam_ctype_OBJECTS) $(t_openpam_ctype_LDADD) $(LIBS) +t_openpam_dispatch$(EXEEXT): $(t_openpam_dispatch_OBJECTS) $(t_openpam_dispatch_DEPENDENCIES) $(EXTRA_t_openpam_dispatch_DEPENDENCIES) + @rm -f t_openpam_dispatch$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(t_openpam_dispatch_OBJECTS) $(t_openpam_dispatch_LDADD) $(LIBS) + t_openpam_readlinev$(EXEEXT): $(t_openpam_readlinev_OBJECTS) $(t_openpam_readlinev_DEPENDENCIES) $(EXTRA_t_openpam_readlinev_DEPENDENCIES) @rm -f t_openpam_readlinev$(EXEEXT) $(AM_V_CCLD)$(LINK) $(t_openpam_readlinev_OBJECTS) $(t_openpam_readlinev_LDADD) $(LIBS) @@ -591,11 +634,11 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_file.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_openpam_ctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_openpam_dispatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_openpam_readlinev.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_openpam_readword.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_pam_conv.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -706,7 +749,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS) if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ - else \ + elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ @@ -824,6 +867,13 @@ t_openpam_ctype.log: t_openpam_ctype$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +t_openpam_dispatch.log: t_openpam_dispatch$(EXEEXT) + @p='t_openpam_dispatch$(EXEEXT)'; \ + b='t_openpam_dispatch'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) t_openpam_readword.log: t_openpam_readword$(EXEEXT) @p='t_openpam_readword$(EXEEXT)'; \ b='t_openpam_readword'; \ @@ -1010,6 +1060,8 @@ uninstall-am: pdf pdf-am ps ps-am recheck tags tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/openpam/t/t_file.c b/contrib/openpam/t/t_file.c deleted file mode 100644 index 8de4f9786c0d..000000000000 --- a/contrib/openpam/t/t_file.c +++ /dev/null @@ -1,160 +0,0 @@ -/*- - * Copyright (c) 2012 Dag-Erling Smørgrav - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: t_file.c 648 2013-03-05 17:54:27Z des $ - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "openpam_asprintf.h" - -#include "t.h" - -static struct t_file *tflist; - -/* - * Open a temp file. - */ -struct t_file * -t_fopen(const char *filename) -{ - struct t_file *tf; - int fd; - - if ((tf = calloc(sizeof *tf, 1)) == NULL) - err(1, "%s(): calloc()", __func__); - if (filename) { - if ((tf->name = strdup(filename)) == NULL) - err(1, "%s(): strdup()", __func__); - } else { - asprintf(&tf->name, "%s.%lu.%p.tmp", - t_progname, (unsigned long)getpid(), (void *)tf); - if (tf->name == NULL) - err(1, "%s(): asprintf()", __func__); - } - if ((fd = open(tf->name, O_RDWR|O_CREAT|O_TRUNC, 0600)) < 0) - err(1, "%s(): %s", __func__, tf->name); - if ((tf->file = fdopen(fd, "r+")) == NULL) - err(1, "%s(): fdopen()", __func__); - if ((tf->next = tflist) != NULL) - tf->next->prev = tf; - tflist = tf; - return (tf); -} - -/* - * Write text to the temp file. - */ -int -t_fprintf(struct t_file *tf, const char *fmt, ...) -{ - va_list ap; - int len; - - va_start(ap, fmt); - len = vfprintf(tf->file, fmt, ap); - va_end(ap); - if (ferror(tf->file)) - err(1, "%s(): vfprintf()", __func__); - return (len); -} - -/* - * Rewind the temp file. - */ -void -t_frewind(struct t_file *tf) -{ - - errno = 0; - rewind(tf->file); - if (errno != 0) - err(1, "%s(): rewind()", __func__); -} - -/* - * Return non-zero if an error occurred. - */ -int -t_ferror(struct t_file *tf) -{ - - return (ferror(tf->file)); -} - -/* - * Return non-zero if the end of the file was reached. - */ -int -t_feof(struct t_file *tf) -{ - - return (feof(tf->file)); -} - -/* - * Close a temp file. - */ -void -t_fclose(struct t_file *tf) -{ - - if (tf == tflist) - tflist = tf->next; - if (tf->prev) - tf->prev->next = tf->next; - if (tf->next) - tf->next->prev = tf->prev; - fclose(tf->file); - if (unlink(tf->name) < 0) - warn("%s(): unlink()", __func__); - free(tf->name); - free(tf); -} - -/* - * atexit() function to close all remaining files. - */ -void -t_fcloseall(void) -{ - - while (tflist) - t_fclose(tflist); -} diff --git a/contrib/openpam/t/t_main.c b/contrib/openpam/t/t_main.c deleted file mode 100644 index a0bbdda5713c..000000000000 --- a/contrib/openpam/t/t_main.c +++ /dev/null @@ -1,127 +0,0 @@ -/*- - * Copyright (c) 2012 Dag-Erling Smørgrav - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: t_main.c 651 2013-03-05 18:11:59Z des $ - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "t.h" - -const char *t_progname; - -static int verbose; - -void -t_verbose(const char *fmt, ...) -{ - va_list ap; - - if (verbose) { - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); - } -} - -static void -usage(void) -{ - - fprintf(stderr, "usage: %s [-v]\n", t_progname); - exit(1); -} - -int -main(int argc, char *argv[]) -{ - const struct t_test **t_plan; - const char *desc; - int n, pass, fail; - int opt; - -#ifdef HAVE_SETLOGMASK - /* suppress openpam_log() */ - setlogmask(LOG_UPTO(0)); -#endif - - /* clean up temp files in case of premature exit */ - atexit(t_fcloseall); - - if ((t_progname = strrchr(argv[0], '/')) != NULL) - t_progname++; /* one past the slash */ - else - t_progname = argv[0]; - - while ((opt = getopt(argc, argv, "v")) != -1) - switch (opt) { - case 'v': - verbose = 1; - break; - default: - usage(); - } - - argc -= optind; - argv += optind; - - /* prepare the test plan */ - if ((t_plan = t_prepare(argc, argv)) == NULL) - errx(1, "no plan\n"); - - /* count the tests */ - for (n = 0; t_plan[n] != NULL; ++n) - /* nothing */; - printf("1..%d\n", n); - - /* run the tests */ - for (n = pass = fail = 0; t_plan[n] != NULL; ++n) { - desc = t_plan[n]->desc ? t_plan[n]->desc : "no description"; - if ((*t_plan[n]->func)(t_plan[n]->arg)) { - printf("ok %d - %s\n", n + 1, desc); - ++pass; - } else { - printf("not ok %d - %s\n", n + 1, desc); - ++fail; - } - } - - /* clean up and exit */ - t_cleanup(); - exit(fail > 0 ? 1 : 0); -} diff --git a/contrib/openpam/t/t_openpam_ctype.c b/contrib/openpam/t/t_openpam_ctype.c index e97a4469aeb4..3fd617d4c7af 100644 --- a/contrib/openpam/t/t_openpam_ctype.c +++ b/contrib/openpam/t/t_openpam_ctype.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2014 Dag-Erling Smørgrav + * Copyright (c) 2014-2015 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,19 +26,20 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: t_openpam_ctype.c 922 2017-02-19 19:28:30Z des $ */ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include #include #include -#include "openpam_ctype.h" +#include -#include "t.h" +#include "openpam_ctype.h" #define OC_DIGIT "0123456789" #define OC_XDIGIT OC_DIGIT "ABCDEFabcdef" @@ -61,11 +62,14 @@ static const char oc_p[] = OC_P; static const char oc_pfcs[] = OC_PFCS; #define T_OC(set) \ - T_FUNC(t_oc_##set, "is_" #set) \ + static int \ + t_oc_##set(char **desc, void *arg) \ { \ char crib[256]; \ unsigned int i, ret; \ \ + (void)desc; \ + (void)arg; \ memset(crib, 0, sizeof crib); \ for (i = 0; oc_##set[i]; ++i) \ crib[(int)oc_##set[i]] = 1; \ @@ -78,6 +82,7 @@ static const char oc_pfcs[] = OC_PFCS; } \ return (ret == 0); \ } +#define T_OC_ADD(set) t_add_test(&t_oc_##set, NULL, "is_"#set) T_OC(digit) T_OC(xdigit) @@ -94,29 +99,27 @@ T_OC(pfcs) * Boilerplate */ -static const struct t_test *t_plan[] = { - T(t_oc_digit), - T(t_oc_xdigit), - T(t_oc_upper), - T(t_oc_lower), - T(t_oc_letter), - T(t_oc_lws), - T(t_oc_ws), - T(t_oc_p), - T(t_oc_pfcs), - NULL -}; - -const struct t_test ** +static int t_prepare(int argc, char *argv[]) { (void)argc; (void)argv; - return (t_plan); + T_OC_ADD(digit); + T_OC_ADD(xdigit); + T_OC_ADD(upper); + T_OC_ADD(lower); + T_OC_ADD(letter); + T_OC_ADD(lws); + T_OC_ADD(ws); + T_OC_ADD(p); + T_OC_ADD(pfcs); + return (0); } -void -t_cleanup(void) +int +main(int argc, char *argv[]) { + + t_main(t_prepare, NULL, argc, argv); } diff --git a/contrib/openpam/t/t_openpam_dispatch.c b/contrib/openpam/t/t_openpam_dispatch.c new file mode 100644 index 000000000000..f198a994e63e --- /dev/null +++ b/contrib/openpam/t/t_openpam_dispatch.c @@ -0,0 +1,220 @@ +/*- + * Copyright (c) 2015 Dag-Erling Smørgrav + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: t_openpam_dispatch.c 922 2017-02-19 19:28:30Z des $ + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include "openpam_impl.h" +#include "t_pam_conv.h" + +#define T_FUNC(n, d) \ + static const char *t_ ## n ## _desc = d; \ + static int t_ ## n ## _func(OPENPAM_UNUSED(char **desc), \ + OPENPAM_UNUSED(void *arg)) + +#define T(n) \ + t_add_test(&t_ ## n ## _func, NULL, t_ ## n ## _desc) + +const char *pam_return_so; + +T_FUNC(empty_policy, "empty policy") +{ + struct t_pam_conv_script script; + struct pam_conv pamc; + struct t_file *tf; + pam_handle_t *pamh; + int pam_err, ret; + + memset(&script, 0, sizeof script); + pamc.conv = &t_pam_conv; + pamc.appdata_ptr = &script; + tf = t_fopen(NULL); + t_fprintf(tf, "# empty policy\n"); + pam_err = pam_start(tf->name, "test", &pamc, &pamh); + if (pam_err != PAM_SUCCESS) { + t_verbose("pam_start() returned %d\n", pam_err); + return (0); + } + /* + * Note: openpam_dispatch() currently returns PAM_SYSTEM_ERR when + * the chain is empty, it should possibly return PAM_SERVICE_ERR + * instead. + */ + pam_err = pam_authenticate(pamh, 0); + t_verbose("pam_authenticate() returned %d\n", pam_err); + ret = (pam_err == PAM_SYSTEM_ERR); + pam_err = pam_setcred(pamh, 0); + t_verbose("pam_setcred() returned %d\n", pam_err); + ret &= (pam_err == PAM_SYSTEM_ERR); + pam_err = pam_acct_mgmt(pamh, 0); + t_verbose("pam_acct_mgmt() returned %d\n", pam_err); + ret &= (pam_err == PAM_SYSTEM_ERR); + pam_err = pam_chauthtok(pamh, 0); + t_verbose("pam_chauthtok() returned %d\n", pam_err); + ret &= (pam_err == PAM_SYSTEM_ERR); + pam_err = pam_open_session(pamh, 0); + t_verbose("pam_open_session() returned %d\n", pam_err); + ret &= (pam_err == PAM_SYSTEM_ERR); + pam_err = pam_close_session(pamh, 0); + t_verbose("pam_close_session() returned %d\n", pam_err); + ret &= (pam_err == PAM_SYSTEM_ERR); + pam_end(pamh, pam_err); + t_fclose(tf); + return (ret); +} + +static struct t_pam_return_case { + int facility; + int primitive; + int flags; + struct { + int ctlflag; + int modret; + } mod[2]; + int result; +} t_pam_return_cases[] = { + { + PAM_AUTH, PAM_SM_AUTHENTICATE, 0, + { + { PAM_REQUIRED, PAM_SUCCESS }, + { PAM_REQUIRED, PAM_SUCCESS }, + }, + PAM_SUCCESS, + }, +}; + +T_FUNC(mod_return, "module return value") +{ + struct t_pam_return_case *tc; + struct t_pam_conv_script script; + struct pam_conv pamc; + struct t_file *tf; + pam_handle_t *pamh; + unsigned int i, j, n; + int pam_err; + + memset(&script, 0, sizeof script); + pamc.conv = &t_pam_conv; + pamc.appdata_ptr = &script; + n = sizeof t_pam_return_cases / sizeof t_pam_return_cases[0]; + for (i = 0; i < n; ++i) { + tc = &t_pam_return_cases[i]; + tf = t_fopen(NULL); + for (j = 0; j < 2; ++j) { + t_fprintf(tf, "%s %s %s error=%s\n", + pam_facility_name[tc->facility], + pam_control_flag_name[tc->mod[j].ctlflag], + pam_return_so, + pam_err_name[tc->mod[j].modret]); + } + pam_err = pam_start(tf->name, "test", &pamc, &pamh); + if (pam_err != PAM_SUCCESS) { + t_verbose("pam_start() returned %d\n", pam_err); + t_fclose(tf); + continue; + } + switch (tc->primitive) { + case PAM_SM_AUTHENTICATE: + pam_err = pam_authenticate(pamh, tc->flags); + break; + case PAM_SM_SETCRED: + pam_err = pam_setcred(pamh, tc->flags); + break; + case PAM_SM_ACCT_MGMT: + pam_err = pam_acct_mgmt(pamh, tc->flags); + break; + case PAM_SM_OPEN_SESSION: + pam_err = pam_open_session(pamh, tc->flags); + break; + case PAM_SM_CLOSE_SESSION: + pam_err = pam_close_session(pamh, tc->flags); + break; + case PAM_SM_CHAUTHTOK: + pam_err = pam_chauthtok(pamh, tc->flags); + break; + } + t_verbose("%s returned %d\n", + pam_func_name[tc->primitive], pam_err); + pam_end(pamh, pam_err); + t_verbose("here\n"); + t_fclose(tf); + } + return (1); +} + + +/*************************************************************************** + * Boilerplate + */ + +static int +t_prepare(int argc, char *argv[]) +{ + + (void)argc; + (void)argv; + + if ((pam_return_so = getenv("PAM_RETURN_SO")) == NULL) { + t_verbose("define PAM_RETURN_SO before running these tests\n"); + return (0); + } + + openpam_set_feature(OPENPAM_RESTRICT_MODULE_NAME, 0); + openpam_set_feature(OPENPAM_VERIFY_MODULE_FILE, 0); + openpam_set_feature(OPENPAM_RESTRICT_SERVICE_NAME, 0); + openpam_set_feature(OPENPAM_VERIFY_POLICY_FILE, 0); + openpam_set_feature(OPENPAM_FALLBACK_TO_OTHER, 0); + + T(empty_policy); + T(mod_return); + + return (0); +} + +int +main(int argc, char *argv[]) +{ + + t_main(t_prepare, NULL, argc, argv); +} diff --git a/contrib/openpam/t/t_openpam_readlinev.c b/contrib/openpam/t/t_openpam_readlinev.c index 9820f6e18e75..abc29e26cd55 100644 --- a/contrib/openpam/t/t_openpam_readlinev.c +++ b/contrib/openpam/t/t_openpam_readlinev.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Dag-Erling Smørgrav + * Copyright (c) 2012-2015 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: t_openpam_readlinev.c 648 2013-03-05 17:54:27Z des $ + * $Id: t_openpam_readlinev.c 922 2017-02-19 19:28:30Z des $ */ #ifdef HAVE_CONFIG_H @@ -34,15 +34,25 @@ #endif #include +#include #include #include #include +#include + #include #include #include "openpam_impl.h" -#include "t.h" + +#define T_FUNC(n, d) \ + static const char *t_ ## n ## _desc = d; \ + static int t_ ## n ## _func(OPENPAM_UNUSED(char **desc), \ + OPENPAM_UNUSED(void *arg)) + +#define T(n) \ + t_add_test(&t_ ## n ## _func, NULL, t_ ## n ## _desc) /* * Read a line from the temp file and verify that the result matches our @@ -55,7 +65,9 @@ orlv_expect(struct t_file *tf, const char **expectedv, int lines, int eof) { int expectedc, gotc, i, lineno = 0; char **gotv; + int ret; + ret = 1; expectedc = 0; if (expectedv != NULL) while (expectedv[expectedc] != NULL) @@ -65,44 +77,38 @@ orlv_expect(struct t_file *tf, const char **expectedv, int lines, int eof) err(1, "%s(): %s", __func__, tf->name); if (expectedv != NULL && gotv == NULL) { t_verbose("expected %d words, got nothing\n", expectedc); - return (0); - } - if (expectedv == NULL && gotv != NULL) { + ret = 0; + } else if (expectedv == NULL && gotv != NULL) { t_verbose("expected nothing, got %d words\n", gotc); - FREEV(gotc, gotv); - return (0); - } - if (expectedv != NULL && gotv != NULL) { + ret = 0; + } else if (expectedv != NULL && gotv != NULL) { if (expectedc != gotc) { t_verbose("expected %d words, got %d\n", expectedc, gotc); - FREEV(gotc, gotv); - return (0); + ret = 0; } for (i = 0; i < gotc; ++i) { if (strcmp(expectedv[i], gotv[i]) != 0) { t_verbose("word %d: expected <<%s>>, " "got <<%s>>\n", i, expectedv[i], gotv[i]); - FREEV(gotc, gotv); - return (0); + ret = 0; } } - FREEV(gotc, gotv); } + FREEV(gotc, gotv); if (lineno != lines) { t_verbose("expected to advance %d lines, advanced %d lines\n", lines, lineno); - return (0); + ret = 0; } if (eof && !t_feof(tf)) { t_verbose("expected EOF, but didn't get it\n"); - return (0); - } - if (!eof && t_feof(tf)) { + ret = 0; + } else if (!eof && t_feof(tf)) { t_verbose("didn't expect EOF, but got it anyway\n"); - return (0); + ret = 0; } - return (1); + return (ret); } @@ -125,6 +131,23 @@ static const char *hello_world[] = { NULL }; +static const char *numbers[] = { + "zero", "one", "two", "three", "four", "five", "six", "seven", + "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", + "fifteen", "sixteen", "seventeen", "nineteen", "twenty", + "twenty-one", "twenty-two", "twenty-three", "twenty-four", + "twenty-five", "twenty-six", "twenty-seven", "twenty-eight", + "twenty-nine", "thirty", "thirty-one", "thirty-two", "thirty-three", + "thirty-four", "thirty-five", "thirty-six", "thirty-seven", + "thirty-eight", "thirty-nine", "fourty", "fourty-one", "fourty-two", + "fourty-three", "fourty-four", "fourty-five", "fourty-six", + "fourty-seven", "fourty-eight", "fourty-nine", "fifty", "fifty-one", + "fifty-two", "fifty-three", "fifty-four", "fifty-five", "fifty-six", + "fifty-seven", "fifty-eight", "fifty-nine", "sixty", "sixty-one", + "sixty-two", "sixty-three", + NULL +}; + /*************************************************************************** * Lines without words @@ -206,6 +229,20 @@ T_FUNC(whitespace_before_comment, "whitespace before comment") return (ret); } +T_FUNC(line_continuation_within_whitespace, "line continuation within whitespace") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, "%s \\\n %s\n", hello_world[0], hello_world[1]); + t_frewind(tf); + ret = orlv_expect(tf, hello_world, 2 /*lines*/, 0 /*eof*/) && + orlv_expect(tf, NULL, 0 /*lines*/, 1 /*eof*/); + t_fclose(tf); + return (ret); +} + /*************************************************************************** * Simple words @@ -237,6 +274,22 @@ T_FUNC(two_words, "two words") return (ret); } +T_FUNC(many_words, "many words") +{ + struct t_file *tf; + const char **word; + int ret; + + tf = t_fopen(NULL); + for (word = numbers; *word; ++word) + t_fprintf(tf, " %s", *word); + t_fprintf(tf, "\n"); + t_frewind(tf); + ret = orlv_expect(tf, numbers, 1 /*lines*/, 0 /*eof*/); + t_fclose(tf); + return (ret); +} + T_FUNC(unterminated_line, "unterminated line") { struct t_file *tf; @@ -255,31 +308,32 @@ T_FUNC(unterminated_line, "unterminated line") * Boilerplate */ -static const struct t_test *t_plan[] = { - T(empty_input), - T(empty_line), - T(unterminated_empty_line), - T(whitespace), - T(comment), - T(whitespace_before_comment), - - T(one_word), - T(two_words), - T(unterminated_line), - - NULL -}; - -const struct t_test ** +static int t_prepare(int argc, char *argv[]) { (void)argc; (void)argv; - return (t_plan); + + T(empty_input); + T(empty_line); + T(unterminated_empty_line); + T(whitespace); + T(comment); + T(whitespace_before_comment); + T(line_continuation_within_whitespace); + + T(one_word); + T(two_words); + T(many_words); + T(unterminated_line); + + return (0); } -void -t_cleanup(void) +int +main(int argc, char *argv[]) { + + t_main(t_prepare, NULL, argc, argv); } diff --git a/contrib/openpam/t/t_openpam_readword.c b/contrib/openpam/t/t_openpam_readword.c index 804c745b1996..767696e52a55 100644 --- a/contrib/openpam/t/t_openpam_readword.c +++ b/contrib/openpam/t/t_openpam_readword.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Dag-Erling Smørgrav + * Copyright (c) 2012-2015 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: t_openpam_readword.c 648 2013-03-05 17:54:27Z des $ + * $Id: t_openpam_readword.c 922 2017-02-19 19:28:30Z des $ */ #ifdef HAVE_CONFIG_H @@ -39,10 +39,18 @@ #include #include +#include + #include #include -#include "t.h" +#define T_FUNC(n, d) \ + static const char *t_ ## n ## _desc = d; \ + static int t_ ## n ## _func(OPENPAM_UNUSED(char **desc), \ + OPENPAM_UNUSED(void *arg)) + +#define T(n) \ + t_add_test(&t_ ## n ## _func, NULL, t_ ## n ## _desc) /* * Read a word from the temp file and verify that the result matches our @@ -56,49 +64,49 @@ orw_expect(struct t_file *tf, const char *expected, int lines, int eof, int eol) int ch, lineno = 0; char *got; size_t len; + int ret; got = openpam_readword(tf->file, &lineno, &len); + ret = 1; if (t_ferror(tf)) err(1, "%s(): %s", __func__, tf->name); if (expected != NULL && got == NULL) { t_verbose("expected <<%s>>, got nothing\n", expected); - return (0); - } - if (expected == NULL && got != NULL) { + ret = 0; + } else if (expected == NULL && got != NULL) { t_verbose("expected nothing, got <<%s>>\n", got); - return (0); - } - if (expected != NULL && got != NULL && strcmp(expected, got) != 0) { + ret = 0; + } else if (expected != NULL && got != NULL && strcmp(expected, got) != 0) { t_verbose("expected <<%s>>, got <<%s>>\n", expected, got); - return (0); + ret = 0; } + free(got); if (lineno != lines) { t_verbose("expected to advance %d lines, advanced %d lines\n", lines, lineno); - return (0); + ret = 0; } if (eof && !t_feof(tf)) { t_verbose("expected EOF, but didn't get it\n"); - return (0); + ret = 0; } if (!eof && t_feof(tf)) { t_verbose("didn't expect EOF, but got it anyway\n"); - return (0); + ret = 0; } ch = fgetc(tf->file); if (t_ferror(tf)) err(1, "%s(): %s", __func__, tf->name); if (eol && ch != '\n') { t_verbose("expected EOL, but didn't get it\n"); - return (0); - } - if (!eol && ch == '\n') { + ret = 0; + } else if (!eol && ch == '\n') { t_verbose("didn't expect EOL, but got it anyway\n"); - return (0); + ret = 0; } if (ch != EOF) ungetc(ch, tf->file); - return (1); + return (ret); } @@ -195,6 +203,45 @@ T_FUNC(whitespace_before_comment, "whitespace before comment") return (ret); } +T_FUNC(single_quoted_comment, "single-quoted comment") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, " '# comment'\n"); + t_frewind(tf); + ret = orw_expect(tf, "# comment", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/); + t_fclose(tf); + return (ret); +} + +T_FUNC(double_quoted_comment, "double-quoted comment") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, " \"# comment\"\n"); + t_frewind(tf); + ret = orw_expect(tf, "# comment", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/); + t_fclose(tf); + return (ret); +} + +T_FUNC(comment_at_eof, "comment at end of file") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, "# comment"); + t_frewind(tf); + ret = orw_expect(tf, NULL, 0 /*lines*/, 1 /*eof*/, 0 /*eol*/); + t_fclose(tf); + return (ret); +} + /*************************************************************************** * Simple cases - no quotes or escapes @@ -414,6 +461,33 @@ T_FUNC(escaped_letter, "escaped letter") return (ret); } +T_FUNC(escaped_comment, "escaped comment") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, " \\# comment\n"); + t_frewind(tf); + ret = orw_expect(tf, "#", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) && + orw_expect(tf, "comment", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/); + t_fclose(tf); + return (ret); +} + +T_FUNC(escape_at_eof, "escape at end of file") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, "z\\"); + t_frewind(tf); + ret = orw_expect(tf, NULL, 0 /*lines*/, 1 /*eof*/, 0 /*eol*/); + t_fclose(tf); + return (ret); +} + /*************************************************************************** * Quotes @@ -818,80 +892,150 @@ T_FUNC(escaped_double_quote_within_double_quotes, return (ret); } + +/*************************************************************************** + * Line continuation + */ + +T_FUNC(line_continuation_within_whitespace, "line continuation within whitespace") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, "hello \\\n world\n"); + t_frewind(tf); + ret = orw_expect(tf, "hello", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) && + orw_expect(tf, "world", 1 /*lines*/, 0 /*eof*/, 1 /*eol*/); + t_fclose(tf); + return (ret); +} + +T_FUNC(line_continuation_before_whitespace, "line continuation before whitespace") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, "hello\\\n world\n"); + t_frewind(tf); + ret = orw_expect(tf, "hello", 1 /*lines*/, 0 /*eof*/, 0 /*eol*/) && + orw_expect(tf, "world", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/); + t_fclose(tf); + return (ret); +} + +T_FUNC(line_continuation_after_whitespace, "line continuation after whitespace") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, "hello \\\nworld\n"); + t_frewind(tf); + ret = orw_expect(tf, "hello", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) && + orw_expect(tf, "world", 1 /*lines*/, 0 /*eof*/, 1 /*eol*/); + t_fclose(tf); + return (ret); +} + +T_FUNC(line_continuation_within_word, "line continuation within word") +{ + struct t_file *tf; + int ret; + + tf = t_fopen(NULL); + t_fprintf(tf, "hello\\\nworld\n"); + t_frewind(tf); + ret = orw_expect(tf, "helloworld", 1 /*lines*/, 0 /*eof*/, 1 /*eol*/); + t_fclose(tf); + return (ret); +} + /*************************************************************************** * Boilerplate */ -static const struct t_test *t_plan[] = { - T(empty_input), - T(empty_line), - T(single_whitespace), - T(multiple_whitespace), - T(comment), - T(whitespace_before_comment), - - T(single_word), - T(single_whitespace_before_word), - T(double_whitespace_before_word), - T(single_whitespace_after_word), - T(double_whitespace_after_word), - T(comment_after_word), - T(word_containing_hash), - T(two_words), - - T(naked_escape), - T(escaped_escape), - T(escaped_whitespace), - T(escaped_newline_before_word), - T(escaped_newline_within_word), - T(escaped_newline_after_word), - T(escaped_letter), - - T(naked_single_quote), - T(naked_double_quote), - T(empty_single_quotes), - T(empty_double_quotes), - T(single_quotes_within_double_quotes), - T(double_quotes_within_single_quotes), - T(single_quoted_whitespace), - T(double_quoted_whitespace), - T(single_quoted_words), - T(double_quoted_words), - - T(single_quote_before_word), - T(double_quote_before_word), - T(single_quote_within_word), - T(double_quote_within_word), - T(single_quote_after_word), - T(double_quote_after_word), - - T(escaped_single_quote), - T(escaped_double_quote), - T(escaped_whitespace_within_single_quotes), - T(escaped_whitespace_within_double_quotes), - T(escaped_letter_within_single_quotes), - T(escaped_letter_within_double_quotes), - T(escaped_escape_within_single_quotes), - T(escaped_escape_within_double_quotes), - T(escaped_single_quote_within_single_quotes), - T(escaped_double_quote_within_single_quotes), - T(escaped_single_quote_within_double_quotes), - T(escaped_double_quote_within_double_quotes), - - NULL -}; - -const struct t_test ** +static int t_prepare(int argc, char *argv[]) { (void)argc; (void)argv; - return (t_plan); + + T(empty_input); + T(empty_line); + T(unterminated_line); + T(single_whitespace); + T(multiple_whitespace); + T(comment); + T(whitespace_before_comment); + T(single_quoted_comment); + T(double_quoted_comment); + T(comment_at_eof); + + T(single_word); + T(single_whitespace_before_word); + T(double_whitespace_before_word); + T(single_whitespace_after_word); + T(double_whitespace_after_word); + T(comment_after_word); + T(word_containing_hash); + T(two_words); + + T(naked_escape); + T(escaped_escape); + T(escaped_whitespace); + T(escaped_newline_before_word); + T(escaped_newline_within_word); + T(escaped_newline_after_word); + T(escaped_letter); + T(escaped_comment); + T(escape_at_eof); + + T(naked_single_quote); + T(naked_double_quote); + T(empty_single_quotes); + T(empty_double_quotes); + T(single_quotes_within_double_quotes); + T(double_quotes_within_single_quotes); + T(single_quoted_whitespace); + T(double_quoted_whitespace); + T(single_quoted_words); + T(double_quoted_words); + + T(single_quote_before_word); + T(double_quote_before_word); + T(single_quote_within_word); + T(double_quote_within_word); + T(single_quote_after_word); + T(double_quote_after_word); + + T(escaped_single_quote); + T(escaped_double_quote); + T(escaped_whitespace_within_single_quotes); + T(escaped_whitespace_within_double_quotes); + T(escaped_letter_within_single_quotes); + T(escaped_letter_within_double_quotes); + T(escaped_escape_within_single_quotes); + T(escaped_escape_within_double_quotes); + T(escaped_single_quote_within_single_quotes); + T(escaped_double_quote_within_single_quotes); + T(escaped_single_quote_within_double_quotes); + T(escaped_double_quote_within_double_quotes); + + T(line_continuation_within_whitespace); + T(line_continuation_before_whitespace); + T(line_continuation_after_whitespace); + T(line_continuation_within_word); + + return (0); } -void -t_cleanup(void) +int +main(int argc, char *argv[]) { + + t_main(t_prepare, NULL, argc, argv); } diff --git a/contrib/openpam/t/t_pam_conv.c b/contrib/openpam/t/t_pam_conv.c new file mode 100644 index 000000000000..58e5c086c1b5 --- /dev/null +++ b/contrib/openpam/t/t_pam_conv.c @@ -0,0 +1,134 @@ +/*- + * Copyright (c) 2015 Dag-Erling Smørgrav + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: t_pam_conv.c 922 2017-02-19 19:28:30Z des $ + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include "openpam_impl.h" +#include "openpam_asprintf.h" + +#include "t_pam_conv.h" + +/* + * Conversation function + * + * The appdata argument points to a struct t_pam_conv_script which + * contains both the expected messages and the desired responses. If + * script.responses is NULL, t_pam_conv() will return PAM_CONV_ERR. If an + * error occurs (incorrect number of messages, messages don't match script + * etc.), script.comment will be set to point to a malloc()ed string + * describing the error. Otherwise, t_pam_conv() will return to its + * caller a malloc()ed copy of script.responses. + */ +int +t_pam_conv(int nm, const struct pam_message **msgs, + struct pam_response **respsp, void *ad) +{ + struct t_pam_conv_script *s = ad; + struct pam_response *resps; + int i; + + /* check message count */ + if (nm != s->nmsg) { + asprintf(&s->comment, "expected %d messages, got %d", + s->nmsg, nm); + return (PAM_CONV_ERR); + } + if (nm <= 0 || nm > PAM_MAX_NUM_MSG) { + /* since the previous test passed, this is intentional! */ + s->comment = NULL; + return (PAM_CONV_ERR); + } + + /* check each message and provide the sed answer */ + if ((resps = calloc(nm, sizeof *resps)) == NULL) + goto enomem; + for (i = 0; i < nm; ++i) { + if (msgs[i]->msg_style != s->msgs[i].msg_style) { + asprintf(&s->comment, + "message %d expected style %d got %d", i, + s->msgs[i].msg_style, msgs[i]->msg_style); + goto fail; + } + if (strcmp(msgs[i]->msg, s->msgs[i].msg) != 0) { + asprintf(&s->comment, + "message %d expected \"%s\" got \"%s\"", i, + s->msgs[i].msg, msgs[i]->msg); + goto fail; + } + switch (msgs[i]->msg_style) { + case PAM_PROMPT_ECHO_OFF: + t_verbose("[PAM_PROMPT_ECHO_OFF] %s\n", msgs[i]->msg); + break; + case PAM_PROMPT_ECHO_ON: + t_verbose("[PAM_PROMPT_ECHO_ON] %s\n", msgs[i]->msg); + break; + case PAM_ERROR_MSG: + t_verbose("[PAM_ERROR_MSG] %s\n", msgs[i]->msg); + break; + case PAM_TEXT_INFO: + t_verbose("[PAM_TEXT_INFO] %s\n", msgs[i]->msg); + break; + default: + asprintf(&s->comment, "invalid message style %d", + msgs[i]->msg_style); + goto fail; + } + /* copy the response, if there is one */ + if (s->resps[i].resp != NULL && + (resps[i].resp = strdup(s->resps[i].resp)) == NULL) + goto enomem; + resps[i].resp_retcode = s->resps[i].resp_retcode; + } + s->comment = NULL; + *respsp = resps; + return (PAM_SUCCESS); +enomem: + asprintf(&s->comment, "%s", strerror(ENOMEM)); +fail: + for (i = 0; i < nm; ++i) + free(resps[i].resp); + free(resps); + return (PAM_CONV_ERR); +} diff --git a/contrib/openpam/t/t.h b/contrib/openpam/t/t_pam_conv.h similarity index 55% rename from contrib/openpam/t/t.h rename to contrib/openpam/t/t_pam_conv.h index 1e156bd03e76..ab0749744594 100644 --- a/contrib/openpam/t/t.h +++ b/contrib/openpam/t/t_pam_conv.h @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Dag-Erling Smørgrav + * Copyright (c) 2015 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,58 +26,20 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: t.h 657 2013-03-06 22:59:05Z des $ + * $Id: t_pam_conv.h 863 2015-07-30 23:44:31Z des $ */ -#ifndef T_H_INCLUDED -#define T_H_INCLUDED +#ifndef T_PAM_CONV_H_INCLUDED +#define T_PAM_CONV_H_INCLUDED -#include - -struct t_test { - int (*func)(void *); - const char *desc; - void *arg; +struct t_pam_conv_script { + int nmsg; + struct pam_message *msgs; + struct pam_response *resps; + char *comment; }; -#define T_FUNC(n, d) \ - static int t_ ## n ## _func(void *); \ - static const struct t_test t_ ## n = \ - { t_ ## n ## _func, d, NULL }; \ - static int t_ ## n ## _func(OPENPAM_UNUSED(void *arg)) - -#define T_FUNC_ARG(n, d, a) \ - static int t_ ## n ## _func(void *); \ - static const struct t_test t_ ## n = \ - { t_ ## n ## _func, d, a }; \ - static int t_ ## n ## _func(void *arg) - -#define T(n) \ - &t_ ## n - -extern const char *t_progname; - -const struct t_test **t_prepare(int, char **); -void t_cleanup(void); - -void t_verbose(const char *, ...) - OPENPAM_FORMAT((__printf__, 1, 2)); - -/* - * Convenience functions for temp files - */ -struct t_file { - char *name; - FILE *file; - struct t_file *prev, *next; -}; - -struct t_file *t_fopen(const char *); -int t_fprintf(struct t_file *, const char *, ...); -int t_ferror(struct t_file *); -int t_feof(struct t_file *); -void t_frewind(struct t_file *); -void t_fclose(struct t_file *); -void t_fcloseall(void); +int t_pam_conv(int, const struct pam_message **, struct pam_response **, + void *); #endif diff --git a/contrib/openpam/test-driver b/contrib/openpam/test-driver index 32bf39e83779..8e575b017d93 100755 --- a/contrib/openpam/test-driver +++ b/contrib/openpam/test-driver @@ -1,9 +1,9 @@ #! /bin/sh # test-driver - basic testsuite driver script. -scriptversion=2012-06-27.10; # UTC +scriptversion=2013-07-13.22; # UTC -# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# Copyright (C) 2011-2014 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -44,13 +44,12 @@ print_usage () Usage: test-driver --test-name=NAME --log-file=PATH --trs-file=PATH [--expect-failure={yes|no}] [--color-tests={yes|no}] - [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT + [--enable-hard-errors={yes|no}] [--] + TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] The '--test-name', '--log-file' and '--trs-file' options are mandatory. END } -# TODO: better error handling in option parsing (in particular, ensure -# TODO: $log_file, $trs_file and $test_name are defined). test_name= # Used for reporting. log_file= # Where to save the output of the test script. trs_file= # Where to save the metadata of the test run. @@ -69,10 +68,23 @@ while test $# -gt 0; do --enable-hard-errors) enable_hard_errors=$2; shift;; --) shift; break;; -*) usage_error "invalid option: '$1'";; + *) break;; esac shift done +missing_opts= +test x"$test_name" = x && missing_opts="$missing_opts --test-name" +test x"$log_file" = x && missing_opts="$missing_opts --log-file" +test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" +if test x"$missing_opts" != x; then + usage_error "the following mandatory options are missing:$missing_opts" +fi + +if test $# -eq 0; then + usage_error "missing argument" +fi + if test $color_tests = yes; then # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. red='' # Red. @@ -94,11 +106,14 @@ trap "st=143; $do_exit" 15 # Test script is run here. "$@" >$log_file 2>&1 estatus=$? + if test $enable_hard_errors = no && test $estatus -eq 99; then - estatus=1 + tweaked_estatus=1 +else + tweaked_estatus=$estatus fi -case $estatus:$expect_failure in +case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; @@ -107,6 +122,12 @@ case $estatus:$expect_failure in *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac +# Report the test outcome and exit status in the logs, so that one can +# know whether the test passed or failed simply by looking at the '.log' +# file, without the need of also peaking into the corresponding '.trs' +# file (automake bug#11814). +echo "$res $test_name (exit status: $estatus)" >>$log_file + # Report outcome to console. echo "${col}${res}${std}: $test_name" diff --git a/contrib/traceroute/traceroute.c b/contrib/traceroute/traceroute.c index 28ba67b51f2d..8420269d5a1c 100644 --- a/contrib/traceroute/traceroute.c +++ b/contrib/traceroute/traceroute.c @@ -203,6 +203,7 @@ static const char rcsid[] = */ #include +#include #include #include #ifdef HAVE_SYS_SELECT_H @@ -226,6 +227,11 @@ static const char rcsid[] = #include +#ifdef HAVE_LIBCASPER +#include +#include +#endif + #ifdef IPSEC #include #include /* XXX */ @@ -362,6 +368,10 @@ extern int optind; extern int opterr; extern char *optarg; +#ifdef HAVE_LIBCASPER +static cap_channel_t *capdns; +#endif + /* Forwards */ double deltaT(struct timeval *, struct timeval *); void freehostinfo(struct hostinfo *); @@ -510,6 +520,13 @@ main(int argc, char **argv) int requestPort = -1; int sump = 0; int sockerrno; +#ifdef HAVE_LIBCASPER + const char *types[] = { "NAME", "ADDR" }; + int families[1]; + cap_channel_t *casper; +#endif + cap_rights_t rights; + bool cansandbox; /* Insure the socket fds won't be 0, 1 or 2 */ if (open(devnull, O_RDONLY) < 0 || @@ -538,6 +555,20 @@ main(int argc, char **argv) exit(1); } +#ifdef HAVE_LIBCASPER + casper = cap_init(); + if (casper == NULL) + errx(1, "unable to create casper process"); + capdns = cap_service_open(casper, "system.dns"); + if (capdns == NULL) + errx(1, "unable to open system.dns service"); + if (cap_dns_type_limit(capdns, types, 2) < 0) + errx(1, "unable to limit access to system.dns service"); + families[0] = AF_INET; + if (cap_dns_family_limit(capdns, families, 1) < 0) + errx(1, "unable to limit access to system.dns service"); +#endif /* HAVE_LIBCASPER */ + #ifdef IPCTL_DEFTTL { int mib[4] = { CTL_NET, PF_INET, IPPROTO_IP, IPCTL_DEFTTL }; @@ -548,10 +579,14 @@ main(int argc, char **argv) exit(1); } } -#else +#else /* !IPCTL_DEFTTL */ max_ttl = 30; #endif +#ifdef HAVE_LIBCASPER + cap_close(casper); +#endif + if (argv[0] == NULL) prog = "traceroute"; else if ((cp = strrchr(argv[0], '/')) != NULL) @@ -964,6 +999,45 @@ main(int argc, char **argv) } } + if (connect(sndsock, (struct sockaddr *)&whereto, + sizeof(whereto)) != 0) { + Fprintf(stderr, "%s: connect: %s\n", prog, strerror(errno)); + exit(1); + } + +#ifdef HAVE_LIBCASPER + cansandbox = true; +#else + if (nflag) + cansandbox = true; + else + cansandbox = false; +#endif + + /* + * Here we enter capability mode. Further down access to global + * namespaces (e.g filesystem) is restricted (see capsicum(4)). + * We must connect(2) our socket before this point. + */ + if (cansandbox && cap_enter() < 0) { + Fprintf(stderr, "%s: cap_enter: %s\n", prog, strerror(errno)); + exit(1); + } + + cap_rights_init(&rights, CAP_SEND, CAP_SETSOCKOPT); + if (cansandbox && cap_rights_limit(sndsock, &rights) < 0) { + Fprintf(stderr, "%s: cap_rights_limit sndsock: %s\n", prog, + strerror(errno)); + exit(1); + } + + cap_rights_init(&rights, CAP_RECV, CAP_EVENT); + if (cansandbox && cap_rights_limit(s, &rights) < 0) { + Fprintf(stderr, "%s: cap_rights_limit s: %s\n", prog, + strerror(errno)); + exit(1); + } + #if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC) if (setpolicy(sndsock, "in bypass") < 0) errx(1, "%s", ipsec_strerror()); @@ -1251,8 +1325,7 @@ send_probe(int seq, int ttl) } #endif - cc = sendto(sndsock, (char *)outip, - packlen, 0, &whereto, sizeof(whereto)); + cc = send(sndsock, (char *)outip, packlen, 0); if (cc < 0 || cc != packlen) { if (cc < 0) Fprintf(stderr, "%s: sendto: %s\n", @@ -1770,7 +1843,12 @@ inetname(struct in_addr in) else { cp = strchr(domain, '.'); if (cp == NULL) { - hp = gethostbyname(domain); +#ifdef HAVE_LIBCASPER + if (capdns != NULL) + hp = cap_gethostbyname(capdns, domain); + else +#endif + hp = gethostbyname(domain); if (hp != NULL) cp = strchr(hp->h_name, '.'); } @@ -1784,7 +1862,13 @@ inetname(struct in_addr in) } } if (!nflag && in.s_addr != INADDR_ANY) { - hp = gethostbyaddr((char *)&in, sizeof(in), AF_INET); +#ifdef HAVE_LIBCASPER + if (capdns != NULL) + hp = cap_gethostbyaddr(capdns, (char *)&in, sizeof(in), + AF_INET); + else +#endif + hp = gethostbyaddr((char *)&in, sizeof(in), AF_INET); if (hp != NULL) { if ((cp = strchr(hp->h_name, '.')) != NULL && strcmp(cp + 1, domain) == 0) @@ -1830,7 +1914,12 @@ gethostinfo(register char *hostname) return (hi); } - hp = gethostbyname(hostname); +#ifdef HAVE_LIBCASPER + if (capdns != NULL) + hp = cap_gethostbyname(capdns, hostname); + else +#endif + hp = gethostbyname(hostname); if (hp == NULL) { Fprintf(stderr, "%s: unknown host %s\n", prog, hostname); exit(1); diff --git a/crypto/openssh/auth.c b/crypto/openssh/auth.c index 1259385f8af9..c5dac04d6a5b 100644 --- a/crypto/openssh/auth.c +++ b/crypto/openssh/auth.c @@ -295,8 +295,8 @@ auth_log(Authctxt *authctxt, int authenticated, int partial, authmsg = "Partial"; else { authmsg = authenticated ? "Accepted" : "Failed"; - BLACKLIST_NOTIFY(authenticated ? - BLACKLIST_AUTH_OK : BLACKLIST_AUTH_FAIL); + if (authenticated) + BLACKLIST_NOTIFY(BLACKLIST_AUTH_OK); } authlog("%s %s%s%s for %s%.100s from %.200s port %d %s%s%s", diff --git a/etc/devd.conf b/etc/devd.conf index 16acec60eda7..f0f7e5045df3 100644 --- a/etc/devd.conf +++ b/etc/devd.conf @@ -19,7 +19,7 @@ options { # Setup some shorthand for regex that we use later in the file. #XXX Yes, these are gross -- imp set scsi-controller-regex - "(aac|adv|adw|aha|ahb|ahc|ahd|aic|amr|bt|ciss|ct|dpt|\ + "(aac|adv|adw|aha|ahc|ahd|aic|amr|bt|ciss|ct|dpt|\ esp|ida|iir|ips|isp|mlx|mly|mpt|ncr|ncv|nsp|stg|sym|trm)\ [0-9]+"; set wifi-driver-regex diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist index bd08c2f00776..c2ae1e797792 100644 --- a/etc/mtree/BSD.tests.dist +++ b/etc/mtree/BSD.tests.dist @@ -328,8 +328,6 @@ .. libnv .. - libpam - .. libproc .. librt @@ -425,6 +423,10 @@ .. .. .. + eli + pbkdf2 + .. + .. .. kern acct diff --git a/include/complex.h b/include/complex.h index 4811255ae384..14e1a045e123 100644 --- a/include/complex.h +++ b/include/complex.h @@ -67,6 +67,10 @@ double complex cacos(double complex); float complex cacosf(float complex); double complex cacosh(double complex); float complex cacoshf(float complex); +long double complex + cacoshl(long double complex); +long double complex + cacosl(long double complex); double carg(double complex); float cargf(float complex); long double cargl(long double complex); @@ -74,10 +78,18 @@ double complex casin(double complex); float complex casinf(float complex); double complex casinh(double complex); float complex casinhf(float complex); +long double complex + casinhl(long double complex); +long double complex + casinl(long double complex); double complex catan(double complex); float complex catanf(float complex); double complex catanh(double complex); float complex catanhf(float complex); +long double complex + catanhl(long double complex); +long double complex + catanl(long double complex); double complex ccos(double complex); float complex ccosf(float complex); double complex ccosh(double complex); diff --git a/lib/libc/sys/kenv.2 b/lib/libc/sys/kenv.2 index dc17388f08ba..06f708170a2f 100644 --- a/lib/libc/sys/kenv.2 +++ b/lib/libc/sys/kenv.2 @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 17, 2002 +.Dd February 20, 2017 .Dt KENV 2 .Os .Sh NAME @@ -51,71 +51,59 @@ The argument can be one of the following: .Bl -tag -width ".Dv KENV_UNSET" .It Dv KENV_GET -Returns the value associated with the named kernel environment variable. -If the variable is not found, \-1 is returned and -the global variable -.Va errno -is set to -.Er ENOENT . -Only the number of bytes available in +Get the .Fa value -are copied out. +of the variable with the given +.Fa name . +The size of the +.Fa value +buffer is given by +.Fa len , +which should be at least +.Dv KENV_MVALLEN ++ 1 bytes to avoid truncation and to ensure NUL termination. .It Dv KENV_SET -Sets or adds a new kernel environment variable. +Set or add a variable. +The +.Fa name +and +.Fa value +are limited to +.Dv KENV_MNAMELEN +and +.Dv KENV_MVALLEN +characters, respectively +.Pq not including the NUL terminator. +The +.Fa len +argument indicates the length of the +.Fa value +and must include the NUL terminator. This option is only available to the superuser. .It Dv KENV_UNSET -Unsets the kernel environment variable +Unset the variable with the given .Fa name . -If the variable does not exist, \-1 is returned and -the global variable -.Va errno -is set to -.Er EINVAL . +The +.Fa value +and +.Fa len +arguments are ignored. This option is only available to the superuser. .It Dv KENV_DUMP -Dumps as much of the kernel environment as will fit in -.Fa value . +Dump as much of the kernel environment as will fit in +.Fa value , +whose size is given in +.Fa len . If .Fa value is .Dv NULL , .Fn kenv will return the number of bytes required to copy out the entire environment. +The +.Fa name +is ignored. .El -.Pp -The -.Fa name -argument is the name of the environment variable to be affected. -In the case of -.Dv KENV_DUMP -it is ignored. -.Pp -The -.Fa value -argument contains either the value to set the environment variable -.Fa name -to in the case of -.Dv KENV_SET , -or it points to the location where -.Fn kenv -should copy return data to in the case of -.Dv KENV_DUMP -and -.Dv KENV_GET . -If -.Fa value -is -.Dv NULL -in the case of -.Dv KENV_DUMP , -.Fn kenv -will return the number of bytes required to copy out the entire environment. -.Pp -The -.Fa len -argument indicates how many bytes of storage -.Fa value -points to. .Sh RETURN VALUES The .Fn kenv @@ -148,23 +136,31 @@ is not a valid option, or the length of the is less than 1 for a .Dv KENV_SET . .It Bq Er ENOENT -no value could be found for +No value could be found for .Fa name for a -.Dv KENV_SET +.Dv KENV_GET or .Dv KENV_UNSET . .It Bq Er EPERM -a user other than the superuser attempted to set or unset a kernel +A user other than the superuser attempted to set or unset a kernel environment variable. .It Bq Er EFAULT -bad address was encountered while attempting to copy in user arguments, +A bad address was encountered while attempting to copy in user arguments or copy out value(s). .It Bq Er ENAMETOOLONG -the name of a variable supplied by the user is longer than +The +.Fa name +or the +.Fa value +is longer than .Dv KENV_MNAMELEN -or the value of a variable is longer than -.Dv KENV_MVALLEN . +or +.Dv KENV_MVALLEN +characters, respectively, or +.Fa len +did not include the NUL terminator for a +.Dv KENV_SET . .El .Sh SEE ALSO .Xr kenv 1 diff --git a/lib/libcxxrt/Version.map b/lib/libcxxrt/Version.map index 73ef70748861..39f98e371146 100644 --- a/lib/libcxxrt/Version.map +++ b/lib/libcxxrt/Version.map @@ -254,10 +254,31 @@ CXXABI_1.3.1 { __cxa_get_exception_ptr; } CXXABI_1.3; -CXXABI_1.3.6 { - __cxa_deleted_virtual; +CXXABI_1.3.5 { + extern "C++" { + "typeinfo for __int128 const*"; + "typeinfo for __int128"; + "typeinfo for __int128*"; + "typeinfo for unsigned __int128 const*"; + "typeinfo for unsigned __int128"; + "typeinfo for unsigned __int128*"; + }; } CXXABI_1.3.1; +CXXABI_1.3.6 { + __cxa_deleted_virtual; +} CXXABI_1.3.5; + +CXXABI_1.3.9 { + extern "C++" { + "typeinfo name for __int128 const*"; + "typeinfo name for __int128"; + "typeinfo name for __int128*"; + "typeinfo name for unsigned __int128 const*"; + "typeinfo name for unsigned __int128"; + "typeinfo name for unsigned __int128*"; + }; +} CXXABI_1.3.6; CXXRT_1.0 { diff --git a/lib/libfetch/common.c b/lib/libfetch/common.c index 41453143a11e..8ec7d018aa3d 100644 --- a/lib/libfetch/common.c +++ b/lib/libfetch/common.c @@ -1339,16 +1339,11 @@ fetch_read_word(FILE *f) return (word); } -/* - * Get authentication data for a URL from .netrc - */ -int -fetch_netrc_auth(struct url *url) +static int +fetch_netrc_open(void) { + const char *p; char fn[PATH_MAX]; - const char *word; - char *p; - FILE *f; if ((p = getenv("NETRC")) != NULL) { if (snprintf(fn, sizeof(fn), "%s", p) >= (int)sizeof(fn)) { @@ -1368,8 +1363,25 @@ fetch_netrc_auth(struct url *url) return (-1); } - if ((f = fopen(fn, "r")) == NULL) + return (open(fn, O_RDONLY)); +} + +/* + * Get authentication data for a URL from .netrc + */ +int +fetch_netrc_auth(struct url *url) +{ + const char *word; + FILE *f; + + if (url->netrcfd == -2) + url->netrcfd = fetch_netrc_open(); + if (url->netrcfd < 0) return (-1); + if ((f = fdopen(url->netrcfd, "r")) == NULL) + return (-1); + rewind(f); while ((word = fetch_read_word(f)) != NULL) { if (strcmp(word, "default") == 0) { DEBUG(fetch_info("Using default .netrc settings")); diff --git a/lib/libfetch/fetch.c b/lib/libfetch/fetch.c index 8d92bbcb7808..6b3148ebe27f 100644 --- a/lib/libfetch/fetch.c +++ b/lib/libfetch/fetch.c @@ -284,6 +284,7 @@ fetchMakeURL(const char *scheme, const char *host, int port, const char *doc, seturl(pwd); #undef seturl u->port = port; + u->netrcfd = -2; return (u); } diff --git a/lib/libfetch/fetch.h b/lib/libfetch/fetch.h index d56a1036a462..319fca92b847 100644 --- a/lib/libfetch/fetch.h +++ b/lib/libfetch/fetch.h @@ -47,6 +47,7 @@ struct url { off_t offset; size_t length; time_t ims_time; + int netrcfd; }; struct url_stat { diff --git a/lib/libpam/libpam/Makefile b/lib/libpam/libpam/Makefile index 41863ad07c4f..c9d257be9010 100644 --- a/lib/libpam/libpam/Makefile +++ b/lib/libpam/libpam/Makefile @@ -180,8 +180,4 @@ INCSDIR= ${INCLUDEDIR}/security .include -.if ${MK_TESTS} != "no" -SUBDIR+= tests -.endif - .include diff --git a/lib/libpam/libpam/tests/Makefile b/lib/libpam/libpam/tests/Makefile deleted file mode 100644 index e40936a883db..000000000000 --- a/lib/libpam/libpam/tests/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -# $FreeBSD$ - -OPENPAM= ${SRCTOP}/contrib/openpam -.PATH: ${OPENPAM}/t - -TESTSDIR = ${TESTSBASE}/lib/libpam - -COMMONSRC = t_file.c t_main.c -.for test in t_openpam_ctype t_openpam_readlinev t_openpam_readword -TAP_TESTS_C += ${test} -SRCS.${test} = ${test}.c ${COMMONSRC} -.endfor -CFLAGS +=-I${OPENPAM}/include -I${OPENPAM}/lib/libpam -I${OPENPAM}/t -WARNS ?= 6 - -LIBADD = pam - -.include diff --git a/lib/libpam/libpam/tests/Makefile.depend b/lib/libpam/libpam/tests/Makefile.depend deleted file mode 100644 index 8e0956024b47..000000000000 --- a/lib/libpam/libpam/tests/Makefile.depend +++ /dev/null @@ -1,19 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - gnu/lib/csu \ - gnu/lib/libgcc \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - lib/libcompiler_rt \ - lib/libpam/libpam \ - - -.include - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/libexec/rtld-elf/mips/reloc.c b/libexec/rtld-elf/mips/reloc.c index 1d1e1a174a6a..59dc18800e4c 100644 --- a/libexec/rtld-elf/mips/reloc.c +++ b/libexec/rtld-elf/mips/reloc.c @@ -51,12 +51,28 @@ __FBSDID("$FreeBSD$"); #define GOT1_MASK 0x80000000UL #endif +/* + * Determine if the second GOT entry is reserved for rtld or if it is + * the first "real" GOT entry. + * + * This must be a macro rather than a function so that + * _rtld_relocate_nonplt_self doesn't trigger a GOT invocation trying + * to use it before the local GOT entries in rtld are adjusted. + */ +#ifdef __mips_n64 +/* Old binutils uses the 32-bit GOT1 mask value for N64. */ +#define GOT1_RESERVED_FOR_RTLD(got) \ + (((got)[1] == 0x80000000) || (got)[1] & GOT1_MASK) +#else +#define GOT1_RESERVED_FOR_RTLD(got) ((got)[1] & GOT1_MASK) +#endif + void init_pltgot(Obj_Entry *obj) { if (obj->pltgot != NULL) { obj->pltgot[0] = (Elf_Addr) &_rtld_bind_start; - if (obj->pltgot[1] & 0x80000000) + if (GOT1_RESERVED_FOR_RTLD(obj->pltgot)) obj->pltgot[1] = (Elf_Addr) obj | GOT1_MASK; } } @@ -175,7 +191,7 @@ _rtld_relocate_nonplt_self(Elf_Dyn *dynp, Elf_Addr relocbase) } } - i = (got[1] & GOT1_MASK) ? 2 : 1; + i = GOT1_RESERVED_FOR_RTLD(got) ? 2 : 1; /* Relocate the local GOT entries */ got += i; for (; i < local_gotno; i++) { @@ -294,7 +310,7 @@ reloc_non_plt(Obj_Entry *obj, Obj_Entry *obj_rtld, int flags, dbg("%s: broken=%d", obj->path, broken); #endif - i = (got[1] & GOT1_MASK) ? 2 : 1; + i = GOT1_RESERVED_FOR_RTLD(got) ? 2 : 1; /* Relocate the local GOT entries */ got += i; diff --git a/sbin/fsck/fsck.c b/sbin/fsck/fsck.c index bf1892c3210c..728acee4f52b 100644 --- a/sbin/fsck/fsck.c +++ b/sbin/fsck/fsck.c @@ -215,7 +215,7 @@ main(int argc, char *argv[]) if (vfstype == NULL) vfstype = getfstype(spec); if (vfstype == NULL) - errx(1, "Could not determine filesystem type"); + vfstype = "ufs"; type = vfstype; devcheck(spec); } else { diff --git a/sbin/ifconfig/ifbridge.c b/sbin/ifconfig/ifbridge.c index b61c7b561ffa..0f0d5b5498d6 100644 --- a/sbin/ifconfig/ifbridge.c +++ b/sbin/ifconfig/ifbridge.c @@ -205,7 +205,7 @@ bridge_interfaces(int s, const char *prefix) } printf("\n"); } - + free(pad); free(inbuf); } diff --git a/sbin/ifconfig/ifieee80211.c b/sbin/ifconfig/ifieee80211.c index 9b53c93e21ef..11b4648a69f4 100644 --- a/sbin/ifconfig/ifieee80211.c +++ b/sbin/ifconfig/ifieee80211.c @@ -1143,6 +1143,7 @@ set80211chanlist(const char *val, int d, int s, const struct afswtch *rafp) cp = tp; } set80211(s, IEEE80211_IOC_CHANLIST, 0, sizeof(chanlist), &chanlist); + free(temp); } static void @@ -3449,13 +3450,30 @@ printies(const u_int8_t *vp, int ielen, int maxcols) static void printmimo(const struct ieee80211_mimo_info *mi) { - /* NB: don't muddy display unless there's something to show */ - if (mi->rssi[0] != 0 || mi->rssi[1] != 0 || mi->rssi[2] != 0) { - /* XXX ignore EVM for now */ - printf(" (rssi %.1f:%.1f:%.1f nf %d:%d:%d)", - mi->rssi[0] / 2.0, mi->rssi[1] / 2.0, mi->rssi[2] / 2.0, - mi->noise[0], mi->noise[1], mi->noise[2]); + int i; + int r = 0; + + for (i = 0; i < IEEE80211_MAX_CHAINS; i++) { + if (mi->ch[i].rssi != 0) { + r = 1; + break; + } } + + /* NB: don't muddy display unless there's something to show */ + if (r == 0) + return; + + /* XXX TODO: ignore EVM; secondary channels for now */ + printf(" (rssi %.1f:%.1f:%.1f:%.1f nf %d:%d:%d:%d)", + mi->ch[0].rssi[0] / 2.0, + mi->ch[1].rssi[0] / 2.0, + mi->ch[2].rssi[0] / 2.0, + mi->ch[3].rssi[0] / 2.0, + mi->ch[0].noise[0], + mi->ch[1].noise[0], + mi->ch[2].noise[0], + mi->ch[3].noise[0]); } static void diff --git a/sbin/kldload/kldload.c b/sbin/kldload/kldload.c index cd31c5289b46..39a4114887f8 100644 --- a/sbin/kldload/kldload.c +++ b/sbin/kldload/kldload.c @@ -177,9 +177,9 @@ main(int argc, char** argv) break; case ENOEXEC: warnx("an error occurred while " - "loading the module. " + "loading module %s. " "Please check dmesg(8) for " - "more details."); + "more details.", argv[0]); break; default: warn("can't load %s", argv[0]); diff --git a/sbin/mdconfig/mdconfig.c b/sbin/mdconfig/mdconfig.c index e86ffdc4e961..f1c013c8b9fe 100644 --- a/sbin/mdconfig/mdconfig.c +++ b/sbin/mdconfig/mdconfig.c @@ -452,8 +452,8 @@ md_list(const char *units, int opt, const char *fflag) } gc = &pp->lg_config; type = geom_config_get(gc, "type"); - if (strcmp(type, "vnode") == 0 || - strcmp(type, "preload") == 0) { + if (type != NULL && (strcmp(type, "vnode") == 0 || + strcmp(type, "preload") == 0)) { file = geom_config_get(gc, "file"); if (fflag != NULL && strcmp(fflag, file) != 0) diff --git a/sbin/savecore/savecore.c b/sbin/savecore/savecore.c index a85adc62e9e9..157383024940 100644 --- a/sbin/savecore/savecore.c +++ b/sbin/savecore/savecore.c @@ -651,7 +651,7 @@ DoFile(const char *savedir, const char *device) } if (kdhl.panicstring[0] != '\0') - syslog(LOG_ALERT, "reboot after panic: %*s", + syslog(LOG_ALERT, "reboot after panic: %.*s", (int)sizeof(kdhl.panicstring), kdhl.panicstring); else syslog(LOG_ALERT, "reboot"); diff --git a/share/doc/pjdfstest/README b/share/doc/pjdfstest/README index d09011789e42..fdad7a97b70b 100644 --- a/share/doc/pjdfstest/README +++ b/share/doc/pjdfstest/README @@ -1,6 +1,6 @@ -pjdfstest test suite execution is integrated into kyua. This README describes -how to use pjdfstest in the default configuration (kyua work directory), and -with a specific filesystem path. +The pjdfstest test suite is normally run by kyua. It requires kyua 0.11 or +newer. This README describes how to use pjdfstest in the default configuration +(kyua work directory), with a specific filesystem path, and with prove(1). Method 1. Executing with default configuration (kyua work directory) @@ -23,14 +23,17 @@ Method 2. Executing with a specific filesystem path (in this case /mnt) 2. cd to the tests directory: % cd /usr/tests/sys/pjdfstest 3. Run kyua: - % env PJDFSTEST_TEST_PATH=/mnt kyua test + % env TMPDIR=/mnt kyua test - WARNING: the above method violates the test program isolation algorithm - described in kyua(1); as such, $PJDFSTEST_TEST_PATH must be cleaned up after - executing the testcases. + Note that if HOME is undefined, this will result in kyua's logfile being + placed in TMPDIR, which may not be what you want. You can always use + --logfile to explicitly select the log location. - It's highly recommended that $PJDFSTEST_TEST_PATH be pointed to a sandboxed - filesystem, e.g. a small UFS-formatted memory disk or ZFS dataset with - quotas enabled, so the filesystem can be easily destroyed after the test - execution is complete, and the testcases are properly bounded both in terms - of time and space. +Method 3. Executing pjdfstest with prove + + 1. Elevate privileges: + % su - + 2. cd to the temporary directory of your choice + % cd /mnt + 3. Invoke a specific test manually + % prove -rv /usr/tests/sys/pjdfstest/chmod/00 diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile index 68b1ca5ea5b3..593ca9fa7ef6 100644 --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -102,6 +102,7 @@ MAN= aac.4 \ cd.4 \ cdce.4 \ cfi.4 \ + cfumass.4 \ ch.4 \ ciss.4 \ cloudabi.4 \ diff --git a/share/man/man4/adv.4 b/share/man/man4/adv.4 index 978398968f81..cbab8a8bb1e1 100644 --- a/share/man/man4/adv.4 +++ b/share/man/man4/adv.4 @@ -201,7 +201,6 @@ AdvanSys ABP980UA/3980UA .Sh SEE ALSO .Xr adw 4 , .Xr aha 4 , -.Xr ahb 4 , .Xr ahc 4 , .Xr cd 4 , .Xr da 4 , diff --git a/share/man/man4/ahc.4 b/share/man/man4/ahc.4 index 1a746552455d..86e8eb65b8db 100644 --- a/share/man/man4/ahc.4 +++ b/share/man/man4/ahc.4 @@ -361,7 +361,7 @@ more SCB space available, the less host bus traffic consumed saving and restoring SCB data. .Sh SEE ALSO .Xr aha 4 , -.Xr ahb 4 , +.Xr ahd 4 , .Xr cd 4 , .Xr da 4 , .Xr sa 4 , diff --git a/share/man/man4/cfumass.4 b/share/man/man4/cfumass.4 new file mode 100644 index 000000000000..9cd012672eb6 --- /dev/null +++ b/share/man/man4/cfumass.4 @@ -0,0 +1,137 @@ +.\" Copyright (c) 2017 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" This software was developed by Edward Tomasz Napierala under sponsorship +.\" from the FreeBSD Foundation. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.Dd January 27, 2017 +.Dt CFUMASS 4 +.Os +.Sh NAME +.Nm cfumass +.Nd USB device side support for Mass Storage Class Transport +.Sh SYNOPSIS +This driver can be compiled into the kernel by placing these lines in +the kernel configuration file: +.Bd -ragged -offset indent +.Cd "device usb" +.Cd "device usb_template" +.Cd "device iscsi" +.Cd "device ctl" +.Cd "device cfumass" +.Ed +.Pp +The driver module can also be loaded at boot by adding this line to +.Xr loader.conf 5 : +.Bd -literal -offset indent +cfumass_load="YES" +.Ed +.Sh DESCRIPTION +The +.Nm +driver provides device side support for emulating an USB mass storage +device compliant with the USB Mass Storage Class Bulk-Only (BBB) Transport +specification, implemented as a +.Xr ctl 4 +frontend driver. +.Pp +To use +.Nm : +.Bl -bullet +.It +.Xr cfumass 4 +must be loaded as a module or compiled into the kernel. +.It +The USB Mass Storage template must be chosen by setting the +.Va hw.usb.template +sysctl to 0. +.It +The USB OTG port must be working in USB device-side mode. +This happens automatically upon connection to a USB host. +.It +There must be a +.Xr ctl +LUN configured for the +.Pa cfumass +port. +.El +.Pp +Upon loading, the driver creates a +.Xr ctl 4 +port named +.Pa cfumass , +presenting the first LUN mapped for that port - usually LUN 0 - to +the USB host. +See +.Xr ctl.conf 5 +and +.Xr ctld 8 +for details on configuring the LUN. +.Sh SYSCTL VARIABLES +These variables are available as both +.Xr sysctl 8 +variables and +.Xr loader 8 +tunables: +.Bl -tag -width indent +.It Va hw.usb.cfumass.debug +Verbosity level for log messages from the +.Nm +driver. +Set to 0 to disable logging or 1 to warn about potential problems. +Larger values enable debugging output. +Defaults to 1. +.It Va hw.usb.cfumass.ignore_stop +Ignore START STOP UNIT SCSI commands with START and LOEJ bits cleared. +Some initiators send that command to stop the target when the user +attempts to gracefully eject the drive, but fail to start it when the +drive is reconnected. +Set to 0 to handle the command in a standards-compliant way, +1 to ignore it and log a warning, or 2 to ignore it silently. +Defaults to 1. +.It Va hw.usb.cfumass.max_lun +Max LUN number to report to the initiator (USB host). +Must be between 0 and 15. +Some initiators incorrectly handle values larger than 0. +Defaults to 0. +.El +.Sh SEE ALSO +.Xr ctl 4 , +.Xr umass 4 , +.Xr usb 4 , +.Xr usb_template 4 , +.Xr ctl.conf 5 , +.Xr ctld 8 +.Sh HISTORY +The +.Nm +driver first appeared in +.Fx 11.1 . +.Sh AUTHORS +The +.Nm +driver was developed by +.An Edward Tomasz Napierala Aq Mt trasz@FreeBSD.org +under sponsorship from the FreeBSD Foundation. diff --git a/share/man/man4/ctl.4 b/share/man/man4/ctl.4 index 1061eadea9c5..876181a85e49 100644 --- a/share/man/man4/ctl.4 +++ b/share/man/man4/ctl.4 @@ -24,7 +24,7 @@ .\" SUCH DAMAGE. .\" .\" $FreeBSD$ -.Dd September 27, 2015 +.Dd January 19, 2017 .Dt CTL 4 .Os .Sh NAME @@ -158,10 +158,9 @@ Verbosity level for log messages from the kernel part of iSCSI target. Set to 0 to disable logging or 1 to warn about potential problems. Larger values enable debugging output. Defaults to 1. -.It Va kern.cam.ctl.iscsi.maxcmdsn_delta -The number of outstanding commands to advertise to the iSCSI initiator. -Technically, it is the difference between ExpCmdSN and MaxCmdSN fields -in the iSCSI PDU. +.It Va kern.cam.ctl.iscsi.maxtags +The number of outstanding commands to advertise to each iSCSI initiator. +Current implementation is not very accurate, so do not set this below 2. Defaults to 256. .It Va kern.cam.ctl.iscsi.ping_timeout The number of seconds to wait for the iSCSI initiator to respond to a NOP-In @@ -172,6 +171,7 @@ Set to 0 to disable sending NOP-In PDUs. Defaults to 5. .El .Sh SEE ALSO +.Xr cfumass 4 , .Xr ctladm 8 , .Xr ctld 8 , .Xr ctlstat 8 diff --git a/share/man/man4/iwmfw.4 b/share/man/man4/iwmfw.4 index 190f8061da32..71017f392645 100644 --- a/share/man/man4/iwmfw.4 +++ b/share/man/man4/iwmfw.4 @@ -55,6 +55,7 @@ module at boot time, place the following line in iwm3160fw_load="YES" iwm7260fw_load="YES" iwm7265fw_load="YES" +iwm7265Dfw_load="YES" iwm8000Cfw_load="YES" .Ed .Sh DESCRIPTION diff --git a/share/man/man4/man4.i386/aic.4 b/share/man/man4/man4.i386/aic.4 index 2af6e5fc97fb..a9f3772105ca 100644 --- a/share/man/man4/man4.i386/aic.4 +++ b/share/man/man4/man4.i386/aic.4 @@ -65,7 +65,6 @@ Adaptec AHA-1460, AHA-1460B, AHA-1460C, AHA-1460D (PC Card) .El .Sh SEE ALSO .Xr aha 4 , -.Xr ahb 4 , .Xr ahc 4 , .Xr cd 4 , .Xr ch 4 , diff --git a/share/man/man4/scsi.4 b/share/man/man4/scsi.4 index 7fd75be80d0b..cea141bd58e7 100644 --- a/share/man/man4/scsi.4 +++ b/share/man/man4/scsi.4 @@ -315,8 +315,8 @@ for details. .Sh SEE ALSO .Xr ada 4 , .Xr aha 4 , -.Xr ahb 4 , .Xr ahc 4 , +.Xr ahd 4 , .Xr ahci 4 , .Xr ata 4 , .Xr bt 4 , diff --git a/share/man/man4/umass.4 b/share/man/man4/umass.4 index badb97b0c609..5ade06d13be3 100644 --- a/share/man/man4/umass.4 +++ b/share/man/man4/umass.4 @@ -239,6 +239,7 @@ type as when using .Xr mount 8 . .Sh SEE ALSO +.Xr cfumass 4 , .Xr ehci 4 , .Xr ohci 4 , .Xr uhci 4 , diff --git a/share/man/man4/usb_template.4 b/share/man/man4/usb_template.4 index 2cc1ee421266..786f323a1ceb 100644 --- a/share/man/man4/usb_template.4 +++ b/share/man/man4/usb_template.4 @@ -84,6 +84,7 @@ Available templates are: .El . .Sh SEE ALSO +.Xr cfumass 4 , .Xr usb 4 , .Xr usfs 4 .Sh STANDARDS diff --git a/share/man/man4/usfs.4 b/share/man/man4/usfs.4 index ef757857022f..e8610beb9b7b 100644 --- a/share/man/man4/usfs.4 +++ b/share/man/man4/usfs.4 @@ -58,6 +58,7 @@ sysctl is set to 0). .Pp Upon attach the driver creates a RAM disk which can be read and written. .Sh SEE ALSO +.Xr cfumass 4 , .Xr umass 4 , .Xr usb 4 , .Xr usb_template 4 diff --git a/share/misc/pci_vendors b/share/misc/pci_vendors index 7ffc6dfc7053..c06137ff7684 100644 --- a/share/misc/pci_vendors +++ b/share/misc/pci_vendors @@ -3,8 +3,8 @@ # # List of PCI ID's # -# Version: 2017.01.08 -# Date: 2017-01-08 03:15:02 +# Version: 2017.02.15 +# Date: 2017-02-15 03:15:02 # # Maintained by Albert Pool, Martin Mares, and other volunteers from # the PCI ID Project at http://pci-ids.ucw.cz/. @@ -2254,6 +2254,7 @@ 1043 2016 Trinidad PRO [Radeon R9 370 OEM] 1458 2016 Trinidad PRO [Radeon R9 370 OEM] 1462 2016 Trinidad PRO [Radeon R9 370 OEM] + 1462 3050 R9 270 Gaming OC 148c 2016 Trinidad PRO [Radeon R9 370 OEM] 1682 2015 Trinidad PRO [Radeon R7 370] 174b 2016 Trinidad PRO [Radeon R9 370 OEM] @@ -5520,6 +5521,10 @@ 8056 Rockwell HCF 56K modem 808a Memory Stick Controller 81ce SxS Pro memory card +# 2nd ID + 905c SxS Pro memory card +# 2nd ID + 907f SxS Pro+ memory card 908f Aeolia ACPI 909e Aeolia Ethernet Controller (Marvell Yukon 2 Family) 909f Aeolia SATA AHCI Controller @@ -5528,6 +5533,7 @@ 90a2 Aeolia DMA Controller 90a3 Aeolia Memory (DDR3/SPM) 90a4 Aeolia USB 3.0 xHCI Host Controller + 90bc SxS Pro+ memory card 104e Oak Technology, Inc 0017 OTI-64017 0107 OTI-107 [Spitfire] @@ -6093,6 +6099,20 @@ 1077 0246 8300 Series Dual Port 10GbE Converged Network Adapter (TCP/IP Networking) 8031 8300 Series 10GbE Converged Network Adapter (FCoE) 8032 8300 Series 10GbE Converged Network Adapter (iSCSI) + 8070 FastLinQ QL41000 Series 10/25/40/50GbE Controller + 1077 0011 FastLinQ QL41212H 25GbE Adapter + 1077 0012 FastLinQ QL41112H 10GbE Adapter + 8080 FastLinQ QL41000 Series 10/25/40/50GbE Controller (FCoE) + 1077 000d FastLinQ QL41262H 25GbE FCoE Adapter + 1077 000e FastLinQ QL41162H 10GbE FCoE Adapter + 8084 FastLinQ QL41000 Series 10/25/40/50GbE Controller (iSCSI) + 1077 000d FastLinQ QL41262H 25GbE iSCSI Adapter + 1077 000e FastLinQ QL41162H 10GbE iSCSI Adapter + 8090 FastLinQ QL41000 Series Gigabit Ethernet Controller (SR-IOV VF) + 1077 000d FastLinQ QL41262H 25GbE FCoE Adapter (SR-IOV VF) + 1077 000e FastLinQ QL41162H 10GbE iSCSI Adapter (SR-IOV VF) + 1077 0011 FastLinQ QL41212H 25GbE Adapter (SR-IOV VF) + 1077 0012 FastLinQ QL41112H 10GbE Adapter (SR-IOV VF) 8430 ISP8324 1/10GbE Converged Network Controller (NIC VF) 8431 8300 Series 10GbE Converged Network Adapter (FCoE VF) 8432 ISP2432M-based 10GbE Converged Network Adapter (CNA) @@ -10584,6 +10604,7 @@ 1347 GM108M [GeForce 940M] 1348 GM108M [GeForce 945M / 945A] 1349 GM108M [GeForce 930M] + 134b GM108M [GeForce 940MX] 134d GM108M [GeForce 940MX] 134e GM108M [GeForce 930MX] 134f GM108M [GeForce 920MX] @@ -10616,6 +10637,8 @@ 13b1 GM107GLM [Quadro M1000M] 13b2 GM107GLM [Quadro M600M] 13b3 GM107GLM [Quadro K2200M] + 13b4 GM107GLM [Quadro M620 Mobile] + 13b6 GM107GLM [Quadro M1200 Mobile] 13b9 GM107GL [NVS 810] 13ba GM107GL [Quadro K2200] 13bb GM107GL [Quadro K620] @@ -10648,6 +10671,7 @@ 1427 GM206M [GeForce GTX 965M] 1430 GM206GL [Quadro M2000] 1431 GM206GL [Tesla M4] + 1436 GM206GLM [Quadro M2200 Mobile] 15f0 GP100GL 15f1 GP100GL 15f7 GP100GL [Tesla P100 PCIe 12GB] @@ -10677,28 +10701,31 @@ 1b82 GP104 1b83 GP104 1b84 GP104 [GeForce GTX 1060 3GB] - 1ba0 GP104M [GeForce GTX 1080] - 1ba1 GP104M [GeForce GTX 1070] + 1ba0 GP104M [GeForce GTX 1080 Mobile] + 1ba1 GP104M [GeForce GTX 1070 Mobile] 1bb0 GP104GL [Quadro P5000] 1bb1 GP104GL 1bb3 GP104GL [Tesla P4] 1bb4 GP104GL - 1be0 GP104M [GeForce GTX 1080] - 1be1 GP104M [GeForce GTX 1070] + 1bb6 GP104GLM [Quadro P5000 Mobile] + 1bb7 GP104GLM [Quadro P4000 Mobile] + 1bb8 GP104GLM [Quadro P3000 Mobile] + 1be0 GP104M [GeForce GTX 1080 Mobile] + 1be1 GP104M [GeForce GTX 1070 Mobile] 1c00 GP106 1c01 GP106 1c02 GP106 [GeForce GTX 1060 3GB] 1c03 GP106 [GeForce GTX 1060 6GB] - 1c20 GP106M [GeForce GTX 1060] + 1c20 GP106M [GeForce GTX 1060 Mobile] 1c30 GP106GL 1c35 GP106 - 1c60 GP106M [GeForce GTX 1060] + 1c60 GP106M [GeForce GTX 1060 Mobile] 1c70 GP106GL 1c80 GP107 1c81 GP107 [GeForce GTX 1050] 1c82 GP107 [GeForce GTX 1050 Ti] - 1c8c GP107M [GeForce GTX 1050 Ti] - 1c8d GP107M [GeForce GTX 1050] + 1c8c GP107M [GeForce GTX 1050 Ti Mobile] + 1c8d GP107M [GeForce GTX 1050 Mobile] 1c8e GP107M 1ca7 GP107GL 1ca8 GP107GL @@ -13224,6 +13251,7 @@ 0001 FireStream 155 0003 FireStream 50 119f Bull HN Information Systems + 1081 BXI Host Channel Adapter 11a0 Convex Computer Corporation 11a1 Hamamatsu Photonics K.K. 11a2 Sierra Research and Technology @@ -16021,6 +16049,9 @@ 509b T540-509B Unified Wire Ethernet Controller 509c T520-509C Unified Wire Ethernet Controller 509d T540-509D Unified Wire Ethernet Controller + 509e T520-509E Unified Wire Ethernet Controller + 509f T540-509F Unified Wire Ethernet Controller + 50a0 T540-50A0 Unified Wire Ethernet Controller 5401 T520-CR Unified Wire Ethernet Controller 5402 T522-CR Unified Wire Ethernet Controller 5403 T540-CR Unified Wire Ethernet Controller @@ -16049,7 +16080,7 @@ 5481 T540-5081 Unified Wire Ethernet Controller 5482 T504-5082 Unified Wire Ethernet Controller 5483 T540-5083 Unified Wire Ethernet Controller - 5484 T580-5084 Unified Wire Ethernet Controller + 5484 T540-5084 Unified Wire Ethernet Controller 5485 T580-5085 Unified Wire Ethernet Controller 5486 T580-5086 Unified Wire Ethernet Controller 5487 T580-5087 Unified Wire Ethernet Controller @@ -16069,6 +16100,9 @@ 549b T540-509B Unified Wire Ethernet Controller 549c T520-509C Unified Wire Ethernet Controller 549d T540-509D Unified Wire Ethernet Controller + 549e T520-509E Unified Wire Ethernet Controller + 549f T540-509F Unified Wire Ethernet Controller + 54a0 T540-50A0 Unified Wire Ethernet Controller 5501 T520-CR Unified Wire Storage Controller 5502 T522-CR Unified Wire Storage Controller 5503 T540-CR Unified Wire Storage Controller @@ -16097,7 +16131,7 @@ 5581 T540-5081 Unified Wire Storage Controller 5582 T504-5082 Unified Wire Storage Controller 5583 T540-5083 Unified Wire Storage Controller - 5584 T580-5084 Unified Wire Storage Controller + 5584 T540-5084 Unified Wire Storage Controller 5585 T580-5085 Unified Wire Storage Controller 5586 T580-5086 Unified Wire Storage Controller 5587 T580-5087 Unified Wire Storage Controller @@ -16117,6 +16151,9 @@ 559b T540-509B Unified Wire Storage Controller 559c T520-509C Unified Wire Storage Controller 559d T540-509D Unified Wire Storage Controller + 559e T520-509E Unified Wire Storage Controller + 559f T540-509F Unified Wire Storage Controller + 55a0 T540-50A0 Unified Wire Storage Controller 5601 T520-CR Unified Wire Storage Controller 5602 T522-CR Unified Wire Storage Controller 5603 T540-CR Unified Wire Storage Controller @@ -16145,7 +16182,7 @@ 5681 T540-5081 Unified Wire Storage Controller 5682 T504-5082 Unified Wire Storage Controller 5683 T540-5083 Unified Wire Storage Controller - 5684 T580-5084 Unified Wire Storage Controller + 5684 T540-5084 Unified Wire Storage Controller 5685 T580-5085 Unified Wire Storage Controller 5686 T580-5086 Unified Wire Storage Controller 5687 T580-5087 Unified Wire Storage Controller @@ -16165,6 +16202,9 @@ 569b T540-509B Unified Wire Storage Controller 569c T520-509C Unified Wire Storage Controller 569d T540-509D Unified Wire Storage Controller + 569e T520-509E Unified Wire Storage Controller + 569f T540-509F Unified Wire Storage Controller + 56a0 T540-50A0 Unified Wire Storage Controller 5701 T520-CR Unified Wire Ethernet Controller 5702 T522-CR Unified Wire Ethernet Controller 5703 T540-CR Unified Wire Ethernet Controller @@ -16232,7 +16272,7 @@ 5881 T540-5081 Unified Wire Ethernet Controller [VF] 5882 T504-5082 Unified Wire Ethernet Controller [VF] 5883 T540-5083 Unified Wire Ethernet Controller [VF] - 5884 T580-5084 Unified Wire Ethernet Controller [VF] + 5884 T540-5084 Unified Wire Ethernet Controller [VF] 5885 T580-5085 Unified Wire Ethernet Controller [VF] 5886 T580-5086 Unified Wire Ethernet Controller [VF] 5887 T580-5087 Unified Wire Ethernet Controller [VF] @@ -16252,6 +16292,9 @@ 589b T540-509B Unified Wire Ethernet Controller [VF] 589c T520-509C Unified Wire Ethernet Controller [VF] 589d T540-509D Unified Wire Ethernet Controller [VF] + 589e T520-509E Unified Wire Ethernet Controller [VF] + 589f T540-509F Unified Wire Ethernet Controller [VF] + 58a0 T540-50A0 Unified Wire Ethernet Controller [VF] 6001 T6225-CR Unified Wire Ethernet Controller 6002 T6225-SO-CR Unified Wire Ethernet Controller 6003 T6425-CR Unified Wire Ethernet Controller @@ -16265,6 +16308,8 @@ 6011 T6225-LL-CR Unified Wire Ethernet Controller 6014 T61100-OCP-SO Unified Wire Ethernet Controller 6015 T6201-BT Unified Wire Ethernet Controller + 6080 T6225-6080 Unified Wire Ethernet Controller + 6081 T62100-6081 Unified Wire Ethernet Controller 6401 T6225-CR Unified Wire Ethernet Controller 6402 T6225-SO-CR Unified Wire Ethernet Controller 6403 T6425-CR Unified Wire Ethernet Controller @@ -16278,6 +16323,8 @@ 6411 T6225-LL-CR Unified Wire Ethernet Controller 6414 T61100-OCP-SO Unified Wire Ethernet Controller 6415 T6201-BT Unified Wire Ethernet Controller + 6480 T6225-6080 Unified Wire Ethernet Controller + 6481 T62100-6081 Unified Wire Ethernet Controller 6501 T6225-CR Unified Wire Storage Controller 6502 T6225-SO-CR Unified Wire Storage Controller 6503 T6425-CR Unified Wire Storage Controller @@ -16291,6 +16338,8 @@ 6511 T6225-LL-CR Unified Wire Storage Controller 6514 T61100-OCP-SO Unified Wire Storage Controller 6515 T6201-BT Unified Wire Storage Controller + 6580 T6225-6080 Unified Wire Storage Controller + 6581 T62100-6081 Unified Wire Storage Controller 6601 T6225-CR Unified Wire Storage Controller 6602 T6225-SO-CR Unified Wire Storage Controller 6603 T6425-CR Unified Wire Storage Controller @@ -16304,6 +16353,8 @@ 6611 T6225-LL-CR Unified Wire Storage Controller 6614 T61100-OCP-SO Unified Wire Storage Controller 6615 T6201-BT Unified Wire Storage Controller + 6680 T6225-6080 Unified Wire Storage Controller + 6681 T62100-6081 Unified Wire Storage Controller 6801 T6225-CR Unified Wire Ethernet Controller [VF] 6802 T6225-SO-CR Unified Wire Ethernet Controller [VF] 6803 T6425-CR Unified Wire Ethernet Controller [VF] @@ -16317,6 +16368,8 @@ 6811 T6225-LL-CR Unified Wire Ethernet Controller [VF] 6814 T61100-OCP-SO Unified Wire Ethernet Controller [VF] 6815 T6201-BT Unified Wire Ethernet Controller [VF] + 6880 T6225-6080 Unified Wire Ethernet Controller [VF] + 6881 T62100-6081 Unified Wire Ethernet Controller [VF] a000 PE10K Unified Wire Ethernet Controller 1426 Storage Technology Corp. 1427 Better On-Line Solutions @@ -16516,6 +16569,7 @@ 14a2 Millennium Engineering Inc 14a3 Maverick Networks 14a4 Lite-On Technology Corporation + 22f1 M8Pe Series NVMe SSD # Wrong vendor ID used 4318 Broadcom BCM4318 [AirForce One 54g] 802.11g WLAN Controller 14a5 XIONICS Document Technologies Inc @@ -17957,6 +18011,7 @@ 1599 Delta Electronics Inc 159a General Instrument 159b Faraday Technology Corp + 4321 StorLink SL3516 (Gemini) Host Bridge 159c Stratus Computer Systems 159d Ningbo Harrison Electronics Co Ltd 159e A-Max Technology Co Ltd @@ -18013,6 +18068,7 @@ 024f MT53100 [Spectrum-2, Flash recovery mode] 0262 MT27710 [ConnectX-4 Lx Programmable] EN 0263 MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN + 0281 NPS-600 Flash Recovery 1002 MT25400 Family [ConnectX-2 Virtual Function] 1003 MT27500 Family [ConnectX-3] 103c 1777 InfiniBand FDR/EN 10/40Gb Dual Port 544FLR-QSFP Adapter (Rev Cx) @@ -18872,10 +18928,18 @@ 9700 Octeon III CN73XX Network Processor 9702 CN23XX [LiquidIO II] Intelligent Adapter 177d 0003 CN2350 [LiquidIO II] 2-port 10GbE Intelligent adapter - 177d 0004 CN2350 [LiquidIO II] 2-port 25GbE Intelligent adapter +# This was changed during the production phase to 10GbE adapter. + 177d 0004 CN2350 [LiquidIO II] 2-port 10GbE Intelligent adapter + 177d 0005 CN2360 [LiquidIO II] 2-port 10GbE Intelligent adapter + 177d 0006 CN2360 [LiquidIO II] 2-port 25GbE Intelligent adapter + 177d 0007 CN2350 [LiquidIO II] 2-port 25GbE Intelligent adapter 9703 CN23XX [LiquidIO II] NVMe Controller 9712 CN23XX [LiquidIO II] SRIOV Virtual Function 177d 0003 CN2350 [LiquidIO II] 2-port 10GbE SRIOV Virtual Function + 177d 0004 CN2350 [LiquidIO II] 2-port 10GbE SRIOV Virtual Function + 177d 0005 CN2360 [LiquidIO II] 2-port 10GbE SRIOV Virtual Function + 177d 0006 CN2360 [LiquidIO II] 2-port 25GbE SRIOV Virtual Function + 177d 0007 CN2350 [LiquidIO II] 2-port 25GbE SRIOV Virtual Function 9713 CN23XX [LiquidIO II] NVMe SRIOV Virtual Function 9800 Octeon Fusion CNF75XX Processor a001 ThunderX MRML(Master RML Bridge to RSL devices) @@ -19445,8 +19509,8 @@ 0155 NT100E3-1-PTP Network Adapter 1x100Gb 0165 NT80E3-2-PTP Network Adapter 2x40Gb 0175 NT20E3-2-PTP Network Adapter 2x10Gb - 0185 NT40A01-4x1 Network Adapter 4x1Gb - 01a5 NT200A01 Network Adapter 2x100Gb + 0185 NT40A01 Network Adapter + 01a5 NT200A01 Network Adapter 18f6 NextIO 1000 [Nexsis] Switch Virtual P2P PCIe Bridge 1001 [Texsis] Switch Virtual P2P PCIe Bridge @@ -19602,14 +19666,15 @@ 1924 800e SFN7x42Q-R2 Flareon Ultra 7000 Series 10/40G Adapter 1924 800f SFN7xx4F-R1 Flareon Ultra 7000 Series 10G Adapter 0a03 SFC9220 10/40G Ethernet Controller - 1924 8011 SFN 8022-R1 Solarflare Flareon 8000 Series 10G Adapter + 1924 8011 SFN8022-R1 Flareon 8000 Series 10G Adapter 1924 8012 SFN8522-R1 Flareon Ultra 8000 Series 10G Adapter - 1924 8013 SFN8042-R1 Solarflare Flareon 8000 Series 10/40G Adapter + 1924 8013 SFN8042-R1 Flareon 8000 Series 10/40G Adapter 1924 8014 SFN8542-R1 Flareon Ultra 8000 Series 10/40G Adapter 1924 8016 SFN8022-R2 Flareon 8000 Series 10G Adapter 1924 8017 SFN8522-R2 Flareon Ultra 8000 Series 10G Adapter 1924 8018 SFN8042-R2 Flareon 8000 Series 10/40G Adapter 1924 8019 SFN8542-R2 Flareon Ultra 8000 Series 10/40G Adapter + 1924 801a SFN8722-R1 Flareon Ultra 8000 Series OCP 10G Adapter 1803 SFC9020 10G Ethernet Controller (Virtual Function) 1813 SFL9021 10GBASE-T Ethernet Controller (Virtual Function) 1903 SFC9120 10G Ethernet Controller (Virtual Function) @@ -19902,6 +19967,7 @@ 5808 DDRdrive X8 dd52 DDRdrive X1-30 19e5 Huawei Technologies Co., Ltd. + 1711 Hi1710 [iBMC Intelligent Management system chip w/VGA support] 19e7 NET (Network Equipment Technologies) 1001 STIX DSP Card 1002 STIX - 1 Port T1/E1 Card @@ -20101,7 +20167,7 @@ 1b03 Magnum Semiconductor, Inc, 6100 DXT/DXTPro Multiformat Broadcast HD/SD Encoder/Decoder/Transcoder 7000 D7 Multiformat Broadcast HD/SD Encoder/Decoder/Transcoder -1b08 MSC Vertriebs GmbH +1b08 MSC Technologies GmbH 1b0a Pegatron 1b13 Jaton Corp 1b1a K&F Computing Research Co. @@ -20318,6 +20384,8 @@ 0003 Ultrastar SN100 Series NVMe SSD 1014 04f5 PCIe3 1.6TB NVMe Flash Adapter 1014 04f6 PCIe3 3.2TB NVMe Flash Adapter +1c5f Beijing Memblaze Technology Co. Ltd. + 0540 PBlaze4 NVMe SSD # http://www.nicevt.ru/ (in Russian) 1c63 Science and Research Centre of Computer Technology (JSC "NICEVT") # http://www.radiotec.ru/catalog.php?cat=jr8&art=14109 @@ -20437,16 +20505,18 @@ 4022 TN9310 10GbE SFP+ Ethernet Adapter 1043 8709 XG-C100F 10GbE SFP+ Ethernet Adapter 1186 4d00 DXE-810S 10GbE SFP+ Ethernet Adapter - 1432 8103 EN-8102PF 10GbE SPF+ Ethernet Adapter + 1432 8103 10 Gigabit Ethernet SFP+ PCI Express Adapter 1fc9 3015 Ethernet Adapter 4024 TN9210 10GBase-T Ethernet Adapter 4025 TN9510 10GBase-T/NBASE-T Ethernet Adapter 105a 7203 SANLink3 NBase-T1 1186 2900 DXE-810T 10GBase-T Ethernet Adapter - 1432 8102 EN-8102P 10GbE Ethernet Adapter + 1432 8102 10 Gigabit Ethernet PCI Express Adapter 1fc9 3015 Ethernet Adapter 4026 TN9610 10GbE SFP+ Ethernet Adapter 4027 TN9710P 10GBase-T/NBASE-T Ethernet Adapter + 1432 8104 10 Gigabit Ethernet PCI Express Adapter + 1fc9 3015 Ethernet Adapter 4527 TN9710Q 5GBase-T/NBASE-T Ethernet Adapter 1fcc StreamLabs f416 MS416 @@ -21748,6 +21818,7 @@ 0a26 Haswell-ULT Integrated Graphics Controller 0a2a Haswell-ULT Integrated Graphics Controller 0a2e Haswell-ULT Integrated Graphics Controller + 0a53 DC P3520 SSD 0be0 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be1 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 105b 0d7c D270S/D250S Motherboard @@ -22105,7 +22176,7 @@ 8086 1019 PRO/1000 CT Desktop Connection 8086 301f D865PERL mainboard 8086 3025 D875PBZ motherboard - 8086 302c Intel 82865G Mainboard (D865GBF) + 8086 302c D865GBF Mainboard 8086 3427 S875WP1-E mainboard 101a 82547EI Gigabit Ethernet Controller (Mobile) 8086 101a PRO/1000 CT Mobile Connection @@ -22303,7 +22374,7 @@ 1096 80003ES2LAN Gigabit Ethernet Controller (Copper) 15d9 1096 Motherboard 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 1097 631xESB/632xESB DPT LAN Controller (Fiber) 1098 80003ES2LAN Gigabit Ethernet Controller (Serdes) 1099 82546GB Gigabit Ethernet Controller (Copper) @@ -22457,6 +22528,7 @@ 103c 17d2 Ethernet 10Gb 2-port 560M Adapter 103c 18d0 Ethernet 10Gb 2-port 560FLB Adapter 1059 0111 T4007 10GbE interface + 1059 0130 T4009 10GbE interface 8086 000c Ethernet X520 10GbE Dual Port KX4-KR Mezz 10f9 82599 10 Gigabit Dual Port Network Connection 10fb 82599ES 10-Gigabit SFI/SFP+ Network Connection @@ -22862,6 +22934,7 @@ 1059 0110 T4005 1GbE interface 1059 0111 T4007 1GbE interface 1059 0120 T4008 1GbE interface + 1059 0130 T4009 1GbE interface 1538 I210 Gigabit Network Connection 1539 I211 Gigabit Network Connection 153a Ethernet Connection I217-LM @@ -23187,7 +23260,7 @@ 1a31 82845 845 [Brookdale] Chipset AGP Bridge 1a38 5000 Series Chipset DMA Engine 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 1a48 82597EX 10GbE Ethernet Controller 8086 a01f PRO/10GbE SR Server Adapter 8086 a11f PRO/10GbE SR Server Adapter @@ -24772,13 +24845,13 @@ 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 2680 631xESB/632xESB/3100 Chipset SATA IDE Controller 2681 631xESB/632xESB SATA AHCI Controller 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 2682 631xESB/632xESB SATA RAID Controller 103c 31fe Adaptec Serial ATA HostRAID 2683 631xESB/632xESB SATA RAID Controller @@ -24788,31 +24861,31 @@ 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 2689 631xESB/632xESB/3100 Chipset UHCI USB Controller #2 1028 01bb PowerEdge 1955 onboard USB 1028 01f0 PowerEdge R900 onboard USB 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 268a 631xESB/632xESB/3100 Chipset UHCI USB Controller #3 1028 01f0 PowerEdge R900 onboard USB 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 268b 631xESB/632xESB/3100 Chipset UHCI USB Controller #4 1028 01f0 PowerEdge R900 onboard USB 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 268c 631xESB/632xESB/3100 Chipset EHCI USB2 Controller 1028 01bb PowerEdge 1955 onboard USB 1028 01f0 PowerEdge R900 onboard USB 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 2690 631xESB/632xESB/3100 Chipset PCI Express Root Port 1 103c 31fe ProLiant DL140 G3 15d9 9680 X7DBN Motherboard @@ -24827,7 +24900,7 @@ 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard - 8086 3476 Intel S5000PSLSATA Server Board + 8086 3476 S5000PSLSATA Server Board 269e 631xESB/632xESB IDE Controller 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard @@ -24844,7 +24917,7 @@ 103c 2a3b Pavilion A1512X 1462 7418 Wind PC MS-7418 8086 544e DeskTop Board D945GTP - 8086 d605 Intel Desktop Board D945GCCR + 8086 d605 Desktop Board D945GCCR 2774 82955X Memory Controller Hub 2775 82955X PCI Express Root Port 2776 82945G/GZ Integrated Graphics Controller @@ -26205,8 +26278,7 @@ 8086 4010 Dual Band Wireless AC 3165 # Stone Peak 1x1 8086 4210 Dual Band Wireless AC 3165 -# Stone Peak 1x1 - 3166 Intel Dual Band Wireless-AC 3165 Plus Bluetooth + 3166 Dual Band Wireless-AC 3165 Plus Bluetooth 3200 GD31244 PCI-X SATA HBA 1775 c200 C2K onboard SATA host bus adapter 3310 IOP348 I/O Processor diff --git a/sys/amd64/amd64/amd64_mem.c b/sys/amd64/amd64/amd64_mem.c deleted file mode 100644 index 315981dfcae2..000000000000 --- a/sys/amd64/amd64/amd64_mem.c +++ /dev/null @@ -1,759 +0,0 @@ -/*- - * Copyright (c) 1999 Michael Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -/* - * amd64 memory range operations - * - * This code will probably be impenetrable without reference to the - * Intel Pentium Pro documentation or x86-64 programmers manual vol 2. - */ - -static char *mem_owner_bios = "BIOS"; - -#define MR686_FIXMTRR (1<<0) - -#define mrwithin(mr, a) \ - (((a) >= (mr)->mr_base) && ((a) < ((mr)->mr_base + (mr)->mr_len))) -#define mroverlap(mra, mrb) \ - (mrwithin(mra, mrb->mr_base) || mrwithin(mrb, mra->mr_base)) - -#define mrvalid(base, len) \ - ((!(base & ((1 << 12) - 1))) && /* base is multiple of 4k */ \ - ((len) >= (1 << 12)) && /* length is >= 4k */ \ - powerof2((len)) && /* ... and power of two */ \ - !((base) & ((len) - 1))) /* range is not discontiuous */ - -#define mrcopyflags(curr, new) \ - (((curr) & ~MDF_ATTRMASK) | ((new) & MDF_ATTRMASK)) - -static int mtrrs_disabled; -SYSCTL_INT(_machdep, OID_AUTO, disable_mtrrs, CTLFLAG_RDTUN, - &mtrrs_disabled, 0, "Disable amd64 MTRRs."); - -static void amd64_mrinit(struct mem_range_softc *sc); -static int amd64_mrset(struct mem_range_softc *sc, - struct mem_range_desc *mrd, int *arg); -static void amd64_mrAPinit(struct mem_range_softc *sc); -static void amd64_mrreinit(struct mem_range_softc *sc); - -static struct mem_range_ops amd64_mrops = { - amd64_mrinit, - amd64_mrset, - amd64_mrAPinit, - amd64_mrreinit -}; - -/* XXX for AP startup hook */ -static u_int64_t mtrrcap, mtrrdef; - -/* The bitmask for the PhysBase and PhysMask fields of the variable MTRRs. */ -static u_int64_t mtrr_physmask; - -static struct mem_range_desc *mem_range_match(struct mem_range_softc *sc, - struct mem_range_desc *mrd); -static void amd64_mrfetch(struct mem_range_softc *sc); -static int amd64_mtrrtype(int flags); -static int amd64_mrt2mtrr(int flags, int oldval); -static int amd64_mtrrconflict(int flag1, int flag2); -static void amd64_mrstore(struct mem_range_softc *sc); -static void amd64_mrstoreone(void *arg); -static struct mem_range_desc *amd64_mtrrfixsearch(struct mem_range_softc *sc, - u_int64_t addr); -static int amd64_mrsetlow(struct mem_range_softc *sc, - struct mem_range_desc *mrd, int *arg); -static int amd64_mrsetvariable(struct mem_range_softc *sc, - struct mem_range_desc *mrd, int *arg); - -/* amd64 MTRR type to memory range type conversion */ -static int amd64_mtrrtomrt[] = { - MDF_UNCACHEABLE, - MDF_WRITECOMBINE, - MDF_UNKNOWN, - MDF_UNKNOWN, - MDF_WRITETHROUGH, - MDF_WRITEPROTECT, - MDF_WRITEBACK -}; - -#define MTRRTOMRTLEN nitems(amd64_mtrrtomrt) - -static int -amd64_mtrr2mrt(int val) -{ - - if (val < 0 || val >= MTRRTOMRTLEN) - return (MDF_UNKNOWN); - return (amd64_mtrrtomrt[val]); -} - -/* - * amd64 MTRR conflicts. Writeback and uncachable may overlap. - */ -static int -amd64_mtrrconflict(int flag1, int flag2) -{ - - flag1 &= MDF_ATTRMASK; - flag2 &= MDF_ATTRMASK; - if ((flag1 & MDF_UNKNOWN) || (flag2 & MDF_UNKNOWN)) - return (1); - if (flag1 == flag2 || - (flag1 == MDF_WRITEBACK && flag2 == MDF_UNCACHEABLE) || - (flag2 == MDF_WRITEBACK && flag1 == MDF_UNCACHEABLE)) - return (0); - return (1); -} - -/* - * Look for an exactly-matching range. - */ -static struct mem_range_desc * -mem_range_match(struct mem_range_softc *sc, struct mem_range_desc *mrd) -{ - struct mem_range_desc *cand; - int i; - - for (i = 0, cand = sc->mr_desc; i < sc->mr_ndesc; i++, cand++) - if ((cand->mr_base == mrd->mr_base) && - (cand->mr_len == mrd->mr_len)) - return (cand); - return (NULL); -} - -/* - * Fetch the current mtrr settings from the current CPU (assumed to - * all be in sync in the SMP case). Note that if we are here, we - * assume that MTRRs are enabled, and we may or may not have fixed - * MTRRs. - */ -static void -amd64_mrfetch(struct mem_range_softc *sc) -{ - struct mem_range_desc *mrd; - u_int64_t msrv; - int i, j, msr; - - mrd = sc->mr_desc; - - /* Get fixed-range MTRRs. */ - if (sc->mr_cap & MR686_FIXMTRR) { - msr = MSR_MTRR64kBase; - for (i = 0; i < (MTRR_N64K / 8); i++, msr++) { - msrv = rdmsr(msr); - for (j = 0; j < 8; j++, mrd++) { - mrd->mr_flags = - (mrd->mr_flags & ~MDF_ATTRMASK) | - amd64_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; - if (mrd->mr_owner[0] == 0) - strcpy(mrd->mr_owner, mem_owner_bios); - msrv = msrv >> 8; - } - } - msr = MSR_MTRR16kBase; - for (i = 0; i < (MTRR_N16K / 8); i++, msr++) { - msrv = rdmsr(msr); - for (j = 0; j < 8; j++, mrd++) { - mrd->mr_flags = - (mrd->mr_flags & ~MDF_ATTRMASK) | - amd64_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; - if (mrd->mr_owner[0] == 0) - strcpy(mrd->mr_owner, mem_owner_bios); - msrv = msrv >> 8; - } - } - msr = MSR_MTRR4kBase; - for (i = 0; i < (MTRR_N4K / 8); i++, msr++) { - msrv = rdmsr(msr); - for (j = 0; j < 8; j++, mrd++) { - mrd->mr_flags = - (mrd->mr_flags & ~MDF_ATTRMASK) | - amd64_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; - if (mrd->mr_owner[0] == 0) - strcpy(mrd->mr_owner, mem_owner_bios); - msrv = msrv >> 8; - } - } - } - - /* Get remainder which must be variable MTRRs. */ - msr = MSR_MTRRVarBase; - for (; (mrd - sc->mr_desc) < sc->mr_ndesc; msr += 2, mrd++) { - msrv = rdmsr(msr); - mrd->mr_flags = (mrd->mr_flags & ~MDF_ATTRMASK) | - amd64_mtrr2mrt(msrv & MTRR_PHYSBASE_TYPE); - mrd->mr_base = msrv & mtrr_physmask; - msrv = rdmsr(msr + 1); - mrd->mr_flags = (msrv & MTRR_PHYSMASK_VALID) ? - (mrd->mr_flags | MDF_ACTIVE) : - (mrd->mr_flags & ~MDF_ACTIVE); - - /* Compute the range from the mask. Ick. */ - mrd->mr_len = (~(msrv & mtrr_physmask) & - (mtrr_physmask | 0xfffL)) + 1; - if (!mrvalid(mrd->mr_base, mrd->mr_len)) - mrd->mr_flags |= MDF_BOGUS; - - /* If unclaimed and active, must be the BIOS. */ - if ((mrd->mr_flags & MDF_ACTIVE) && (mrd->mr_owner[0] == 0)) - strcpy(mrd->mr_owner, mem_owner_bios); - } -} - -/* - * Return the MTRR memory type matching a region's flags - */ -static int -amd64_mtrrtype(int flags) -{ - int i; - - flags &= MDF_ATTRMASK; - - for (i = 0; i < MTRRTOMRTLEN; i++) { - if (amd64_mtrrtomrt[i] == MDF_UNKNOWN) - continue; - if (flags == amd64_mtrrtomrt[i]) - return (i); - } - return (-1); -} - -static int -amd64_mrt2mtrr(int flags, int oldval) -{ - int val; - - if ((val = amd64_mtrrtype(flags)) == -1) - return (oldval & 0xff); - return (val & 0xff); -} - -/* - * Update running CPU(s) MTRRs to match the ranges in the descriptor - * list. - * - * XXX Must be called with interrupts enabled. - */ -static void -amd64_mrstore(struct mem_range_softc *sc) -{ -#ifdef SMP - /* - * We should use ipi_all_but_self() to call other CPUs into a - * locking gate, then call a target function to do this work. - * The "proper" solution involves a generalised locking gate - * implementation, not ready yet. - */ - smp_rendezvous(NULL, amd64_mrstoreone, NULL, sc); -#else - disable_intr(); /* disable interrupts */ - amd64_mrstoreone(sc); - enable_intr(); -#endif -} - -/* - * Update the current CPU's MTRRs with those represented in the - * descriptor list. Note that we do this wholesale rather than just - * stuffing one entry; this is simpler (but slower, of course). - */ -static void -amd64_mrstoreone(void *arg) -{ - struct mem_range_softc *sc = arg; - struct mem_range_desc *mrd; - u_int64_t omsrv, msrv; - int i, j, msr; - u_long cr0, cr4; - - mrd = sc->mr_desc; - - critical_enter(); - - /* Disable PGE. */ - cr4 = rcr4(); - load_cr4(cr4 & ~CR4_PGE); - - /* Disable caches (CD = 1, NW = 0). */ - cr0 = rcr0(); - load_cr0((cr0 & ~CR0_NW) | CR0_CD); - - /* Flushes caches and TLBs. */ - wbinvd(); - invltlb(); - - /* Disable MTRRs (E = 0). */ - wrmsr(MSR_MTRRdefType, rdmsr(MSR_MTRRdefType) & ~MTRR_DEF_ENABLE); - - /* Set fixed-range MTRRs. */ - if (sc->mr_cap & MR686_FIXMTRR) { - msr = MSR_MTRR64kBase; - for (i = 0; i < (MTRR_N64K / 8); i++, msr++) { - msrv = 0; - omsrv = rdmsr(msr); - for (j = 7; j >= 0; j--) { - msrv = msrv << 8; - msrv |= amd64_mrt2mtrr((mrd + j)->mr_flags, - omsrv >> (j * 8)); - } - wrmsr(msr, msrv); - mrd += 8; - } - msr = MSR_MTRR16kBase; - for (i = 0; i < (MTRR_N16K / 8); i++, msr++) { - msrv = 0; - omsrv = rdmsr(msr); - for (j = 7; j >= 0; j--) { - msrv = msrv << 8; - msrv |= amd64_mrt2mtrr((mrd + j)->mr_flags, - omsrv >> (j * 8)); - } - wrmsr(msr, msrv); - mrd += 8; - } - msr = MSR_MTRR4kBase; - for (i = 0; i < (MTRR_N4K / 8); i++, msr++) { - msrv = 0; - omsrv = rdmsr(msr); - for (j = 7; j >= 0; j--) { - msrv = msrv << 8; - msrv |= amd64_mrt2mtrr((mrd + j)->mr_flags, - omsrv >> (j * 8)); - } - wrmsr(msr, msrv); - mrd += 8; - } - } - - /* Set remainder which must be variable MTRRs. */ - msr = MSR_MTRRVarBase; - for (; (mrd - sc->mr_desc) < sc->mr_ndesc; msr += 2, mrd++) { - /* base/type register */ - omsrv = rdmsr(msr); - if (mrd->mr_flags & MDF_ACTIVE) { - msrv = mrd->mr_base & mtrr_physmask; - msrv |= amd64_mrt2mtrr(mrd->mr_flags, omsrv); - } else { - msrv = 0; - } - wrmsr(msr, msrv); - - /* mask/active register */ - if (mrd->mr_flags & MDF_ACTIVE) { - msrv = MTRR_PHYSMASK_VALID | - rounddown2(mtrr_physmask, mrd->mr_len); - } else { - msrv = 0; - } - wrmsr(msr + 1, msrv); - } - - /* Flush caches and TLBs. */ - wbinvd(); - invltlb(); - - /* Enable MTRRs. */ - wrmsr(MSR_MTRRdefType, rdmsr(MSR_MTRRdefType) | MTRR_DEF_ENABLE); - - /* Restore caches and PGE. */ - load_cr0(cr0); - load_cr4(cr4); - - critical_exit(); -} - -/* - * Hunt for the fixed MTRR referencing (addr) - */ -static struct mem_range_desc * -amd64_mtrrfixsearch(struct mem_range_softc *sc, u_int64_t addr) -{ - struct mem_range_desc *mrd; - int i; - - for (i = 0, mrd = sc->mr_desc; i < (MTRR_N64K + MTRR_N16K + MTRR_N4K); - i++, mrd++) - if ((addr >= mrd->mr_base) && - (addr < (mrd->mr_base + mrd->mr_len))) - return (mrd); - return (NULL); -} - -/* - * Try to satisfy the given range request by manipulating the fixed - * MTRRs that cover low memory. - * - * Note that we try to be generous here; we'll bloat the range out to - * the next higher/lower boundary to avoid the consumer having to know - * too much about the mechanisms here. - * - * XXX note that this will have to be updated when we start supporting - * "busy" ranges. - */ -static int -amd64_mrsetlow(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) -{ - struct mem_range_desc *first_md, *last_md, *curr_md; - - /* Range check. */ - if (((first_md = amd64_mtrrfixsearch(sc, mrd->mr_base)) == NULL) || - ((last_md = amd64_mtrrfixsearch(sc, mrd->mr_base + mrd->mr_len - 1)) == NULL)) - return (EINVAL); - - /* Check that we aren't doing something risky. */ - if (!(mrd->mr_flags & MDF_FORCE)) - for (curr_md = first_md; curr_md <= last_md; curr_md++) { - if ((curr_md->mr_flags & MDF_ATTRMASK) == MDF_UNKNOWN) - return (EACCES); - } - - /* Set flags, clear set-by-firmware flag. */ - for (curr_md = first_md; curr_md <= last_md; curr_md++) { - curr_md->mr_flags = mrcopyflags(curr_md->mr_flags & - ~MDF_FIRMWARE, mrd->mr_flags); - bcopy(mrd->mr_owner, curr_md->mr_owner, sizeof(mrd->mr_owner)); - } - - return (0); -} - -/* - * Modify/add a variable MTRR to satisfy the request. - * - * XXX needs to be updated to properly support "busy" ranges. - */ -static int -amd64_mrsetvariable(struct mem_range_softc *sc, struct mem_range_desc *mrd, - int *arg) -{ - struct mem_range_desc *curr_md, *free_md; - int i; - - /* - * Scan the currently active variable descriptors, look for - * one we exactly match (straight takeover) and for possible - * accidental overlaps. - * - * Keep track of the first empty variable descriptor in case - * we can't perform a takeover. - */ - i = (sc->mr_cap & MR686_FIXMTRR) ? MTRR_N64K + MTRR_N16K + MTRR_N4K : 0; - curr_md = sc->mr_desc + i; - free_md = NULL; - for (; i < sc->mr_ndesc; i++, curr_md++) { - if (curr_md->mr_flags & MDF_ACTIVE) { - /* Exact match? */ - if ((curr_md->mr_base == mrd->mr_base) && - (curr_md->mr_len == mrd->mr_len)) { - - /* Whoops, owned by someone. */ - if (curr_md->mr_flags & MDF_BUSY) - return (EBUSY); - - /* Check that we aren't doing something risky */ - if (!(mrd->mr_flags & MDF_FORCE) && - ((curr_md->mr_flags & MDF_ATTRMASK) == - MDF_UNKNOWN)) - return (EACCES); - - /* Ok, just hijack this entry. */ - free_md = curr_md; - break; - } - - /* Non-exact overlap? */ - if (mroverlap(curr_md, mrd)) { - /* Between conflicting region types? */ - if (amd64_mtrrconflict(curr_md->mr_flags, - mrd->mr_flags)) - return (EINVAL); - } - } else if (free_md == NULL) { - free_md = curr_md; - } - } - - /* Got somewhere to put it? */ - if (free_md == NULL) - return (ENOSPC); - - /* Set up new descriptor. */ - free_md->mr_base = mrd->mr_base; - free_md->mr_len = mrd->mr_len; - free_md->mr_flags = mrcopyflags(MDF_ACTIVE, mrd->mr_flags); - bcopy(mrd->mr_owner, free_md->mr_owner, sizeof(mrd->mr_owner)); - return (0); -} - -/* - * Handle requests to set memory range attributes by manipulating MTRRs. - */ -static int -amd64_mrset(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) -{ - struct mem_range_desc *targ; - int error, i; - - switch (*arg) { - case MEMRANGE_SET_UPDATE: - /* - * Make sure that what's being asked for is even - * possible at all. - */ - if (!mrvalid(mrd->mr_base, mrd->mr_len) || - amd64_mtrrtype(mrd->mr_flags) == -1) - return (EINVAL); - -#define FIXTOP ((MTRR_N64K * 0x10000) + (MTRR_N16K * 0x4000) + (MTRR_N4K * 0x1000)) - - /* Are the "low memory" conditions applicable? */ - if ((sc->mr_cap & MR686_FIXMTRR) && - ((mrd->mr_base + mrd->mr_len) <= FIXTOP)) { - if ((error = amd64_mrsetlow(sc, mrd, arg)) != 0) - return (error); - } else { - /* It's time to play with variable MTRRs. */ - if ((error = amd64_mrsetvariable(sc, mrd, arg)) != 0) - return (error); - } - break; - - case MEMRANGE_SET_REMOVE: - if ((targ = mem_range_match(sc, mrd)) == NULL) - return (ENOENT); - if (targ->mr_flags & MDF_FIXACTIVE) - return (EPERM); - if (targ->mr_flags & MDF_BUSY) - return (EBUSY); - targ->mr_flags &= ~MDF_ACTIVE; - targ->mr_owner[0] = 0; - break; - - default: - return (EOPNOTSUPP); - } - - /* - * Ensure that the direct map region does not contain any mappings - * that span MTRRs of different types. However, the fixed MTRRs can - * be ignored, because a large page mapping the first 1 MB of physical - * memory is a special case that the processor handles. The entire - * TLB will be invalidated by amd64_mrstore(), so pmap_demote_DMAP() - * needn't do it. - */ - i = (sc->mr_cap & MR686_FIXMTRR) ? MTRR_N64K + MTRR_N16K + MTRR_N4K : 0; - mrd = sc->mr_desc + i; - for (; i < sc->mr_ndesc; i++, mrd++) { - if ((mrd->mr_flags & (MDF_ACTIVE | MDF_BOGUS)) == MDF_ACTIVE) - pmap_demote_DMAP(mrd->mr_base, mrd->mr_len, FALSE); - } - - /* Update the hardware. */ - amd64_mrstore(sc); - - /* Refetch to see where we're at. */ - amd64_mrfetch(sc); - return (0); -} - -/* - * Work out how many ranges we support, initialise storage for them, - * and fetch the initial settings. - */ -static void -amd64_mrinit(struct mem_range_softc *sc) -{ - struct mem_range_desc *mrd; - u_int regs[4]; - int i, nmdesc = 0, pabits; - - if (sc->mr_desc != NULL) - /* Already initialized. */ - return; - - mtrrcap = rdmsr(MSR_MTRRcap); - mtrrdef = rdmsr(MSR_MTRRdefType); - - /* For now, bail out if MTRRs are not enabled. */ - if (!(mtrrdef & MTRR_DEF_ENABLE)) { - if (bootverbose) - printf("CPU supports MTRRs but not enabled\n"); - return; - } - nmdesc = mtrrcap & MTRR_CAP_VCNT; - - /* - * Determine the size of the PhysMask and PhysBase fields in - * the variable range MTRRs. If the extended CPUID 0x80000008 - * is present, use that to figure out how many physical - * address bits the CPU supports. Otherwise, default to 36 - * address bits. - */ - if (cpu_exthigh >= 0x80000008) { - do_cpuid(0x80000008, regs); - pabits = regs[0] & 0xff; - } else - pabits = 36; - mtrr_physmask = ((1UL << pabits) - 1) & ~0xfffUL; - - /* If fixed MTRRs supported and enabled. */ - if ((mtrrcap & MTRR_CAP_FIXED) && (mtrrdef & MTRR_DEF_FIXED_ENABLE)) { - sc->mr_cap = MR686_FIXMTRR; - nmdesc += MTRR_N64K + MTRR_N16K + MTRR_N4K; - } - - sc->mr_desc = malloc(nmdesc * sizeof(struct mem_range_desc), M_MEMDESC, - M_WAITOK | M_ZERO); - sc->mr_ndesc = nmdesc; - - mrd = sc->mr_desc; - - /* Populate the fixed MTRR entries' base/length. */ - if (sc->mr_cap & MR686_FIXMTRR) { - for (i = 0; i < MTRR_N64K; i++, mrd++) { - mrd->mr_base = i * 0x10000; - mrd->mr_len = 0x10000; - mrd->mr_flags = MDF_FIXBASE | MDF_FIXLEN | - MDF_FIXACTIVE; - } - for (i = 0; i < MTRR_N16K; i++, mrd++) { - mrd->mr_base = i * 0x4000 + 0x80000; - mrd->mr_len = 0x4000; - mrd->mr_flags = MDF_FIXBASE | MDF_FIXLEN | - MDF_FIXACTIVE; - } - for (i = 0; i < MTRR_N4K; i++, mrd++) { - mrd->mr_base = i * 0x1000 + 0xc0000; - mrd->mr_len = 0x1000; - mrd->mr_flags = MDF_FIXBASE | MDF_FIXLEN | - MDF_FIXACTIVE; - } - } - - /* - * Get current settings, anything set now is considered to - * have been set by the firmware. (XXX has something already - * played here?) - */ - amd64_mrfetch(sc); - mrd = sc->mr_desc; - for (i = 0; i < sc->mr_ndesc; i++, mrd++) { - if (mrd->mr_flags & MDF_ACTIVE) - mrd->mr_flags |= MDF_FIRMWARE; - } - - /* - * Ensure that the direct map region does not contain any mappings - * that span MTRRs of different types. However, the fixed MTRRs can - * be ignored, because a large page mapping the first 1 MB of physical - * memory is a special case that the processor handles. Invalidate - * any old TLB entries that might hold inconsistent memory type - * information. - */ - i = (sc->mr_cap & MR686_FIXMTRR) ? MTRR_N64K + MTRR_N16K + MTRR_N4K : 0; - mrd = sc->mr_desc + i; - for (; i < sc->mr_ndesc; i++, mrd++) { - if ((mrd->mr_flags & (MDF_ACTIVE | MDF_BOGUS)) == MDF_ACTIVE) - pmap_demote_DMAP(mrd->mr_base, mrd->mr_len, TRUE); - } -} - -/* - * Initialise MTRRs on an AP after the BSP has run the init code. - */ -static void -amd64_mrAPinit(struct mem_range_softc *sc) -{ - - amd64_mrstoreone(sc); - wrmsr(MSR_MTRRdefType, mtrrdef); -} - -/* - * Re-initialise running CPU(s) MTRRs to match the ranges in the descriptor - * list. - * - * XXX Must be called with interrupts enabled. - */ -static void -amd64_mrreinit(struct mem_range_softc *sc) -{ -#ifdef SMP - /* - * We should use ipi_all_but_self() to call other CPUs into a - * locking gate, then call a target function to do this work. - * The "proper" solution involves a generalised locking gate - * implementation, not ready yet. - */ - smp_rendezvous(NULL, (void *)amd64_mrAPinit, NULL, sc); -#else - disable_intr(); /* disable interrupts */ - amd64_mrAPinit(sc); - enable_intr(); -#endif -} - -static void -amd64_mem_drvinit(void *unused) -{ - - if (mtrrs_disabled) - return; - if (!(cpu_feature & CPUID_MTRR)) - return; - if ((cpu_id & 0xf00) != 0x600 && (cpu_id & 0xf00) != 0xf00) - return; - switch (cpu_vendor_id) { - case CPU_VENDOR_INTEL: - case CPU_VENDOR_AMD: - case CPU_VENDOR_CENTAUR: - break; - default: - return; - } - mem_range_softc.mr_op = &amd64_mrops; - amd64_mrinit(&mem_range_softc); -} -SYSINIT(amd64memdev, SI_SUB_CPU, SI_ORDER_ANY, amd64_mem_drvinit, NULL); diff --git a/sys/amd64/amd64/db_disasm.c b/sys/amd64/amd64/db_disasm.c index dd436d7d6bb4..0ec81f47fd44 100644 --- a/sys/amd64/amd64/db_disasm.c +++ b/sys/amd64/amd64/db_disasm.c @@ -1044,7 +1044,7 @@ db_read_address(loc, short_addr, rex, regmodrm, addrp) return (loc); } addrp->is_reg = FALSE; - addrp->index = 0; + addrp->index = NULL; if (short_addr) size = LONG; @@ -1067,7 +1067,7 @@ db_read_address(loc, short_addr, rex, regmodrm, addrp) if (rm == 5) { get_value_inc(addrp->disp, loc, 4, FALSE); if (have_sib) - addrp->base = 0; + addrp->base = NULL; else if (short_addr) addrp->base = "%eip"; else @@ -1109,9 +1109,9 @@ db_print_address(seg, size, rex, addrp) db_printf("%s:", seg); } - if (addrp->disp != 0 || (addrp->base == 0 && addrp->index == 0)) + if (addrp->disp != 0 || (addrp->base == NULL && addrp->index == NULL)) db_printsym((db_addr_t)addrp->disp, DB_STGY_ANY); - if (addrp->base != 0 || addrp->index != 0) { + if (addrp->base != NULL || addrp->index != NULL) { db_printf("("); if (addrp->base) db_printf("%s", addrp->base); @@ -1248,7 +1248,7 @@ db_disasm(db_addr_t loc, bool altfmt) get_value_inc(inst, loc, 1, FALSE); short_addr = FALSE; size = LONG; - seg = 0; + seg = NULL; /* * Get prefixes @@ -1313,7 +1313,7 @@ db_disasm(db_addr_t loc, bool altfmt) while (ip->i_size == ESC) { get_value_inc(inst, loc, 1, FALSE); ip = ((const struct inst * const *)ip->i_extra)[inst>>4]; - if (ip == 0) { + if (ip == NULL) { ip = &db_bad_inst; } else { diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 1a6fb1a5de3e..6d984ab885e2 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -391,7 +391,7 @@ static struct md_page pv_dummy; /* * All those kernel PT submaps that BSD is so fond of */ -pt_entry_t *CMAP1 = 0; +pt_entry_t *CMAP1 = NULL; caddr_t CADDR1 = 0; static vm_offset_t qframe = 0; static struct mtx qframe_mtx; @@ -3998,12 +3998,12 @@ pmap_protect_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t sva, vm_prot_t prot) anychanged = FALSE; retry: oldpde = newpde = *pde; - if (oldpde & PG_MANAGED) { + if ((oldpde & (PG_MANAGED | PG_M | PG_RW)) == + (PG_MANAGED | PG_M | PG_RW)) { eva = sva + NBPDR; for (va = sva, m = PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME); va < eva; va += PAGE_SIZE, m++) - if ((oldpde & (PG_M | PG_RW)) == (PG_M | PG_RW)) - vm_page_dirty(m); + vm_page_dirty(m); } if ((prot & VM_PROT_WRITE) == 0) newpde &= ~(PG_RW | PG_M); @@ -4350,7 +4350,8 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, if ((m->oflags & VPO_UNMANAGED) != 0) { if ((newpte & PG_RW) != 0) newpte |= PG_M; - } + } else + newpte |= PG_MANAGED; mpte = NULL; @@ -4423,11 +4424,9 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, /* * No, might be a protection or wiring change. */ - if ((origpte & PG_MANAGED) != 0) { - newpte |= PG_MANAGED; - if ((newpte & PG_RW) != 0) - vm_page_aflag_set(m, PGA_WRITEABLE); - } + if ((origpte & PG_MANAGED) != 0 && + (newpte & PG_RW) != 0) + vm_page_aflag_set(m, PGA_WRITEABLE); if (((origpte ^ newpte) & ~(PG_M | PG_A)) == 0) goto unchanged; goto validate; @@ -4444,8 +4443,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, /* * Enter on the PV list if part of our managed memory. */ - if ((m->oflags & VPO_UNMANAGED) == 0) { - newpte |= PG_MANAGED; + if ((newpte & PG_MANAGED) != 0) { pv = get_pv_entry(pmap, &lock); pv->pv_va = va; CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa); @@ -7241,6 +7239,7 @@ pmap_quick_remove_page(vm_offset_t addr) #include "opt_ddb.h" #ifdef DDB +#include #include DB_SHOW_COMMAND(pte, pmap_print_pte) @@ -7252,13 +7251,17 @@ DB_SHOW_COMMAND(pte, pmap_print_pte) pt_entry_t *pte, PG_V; vm_offset_t va; - if (have_addr) { - va = (vm_offset_t)addr; - pmap = PCPU_GET(curpmap); /* XXX */ - } else { + if (!have_addr) { db_printf("show pte addr\n"); return; } + va = (vm_offset_t)addr; + + if (kdb_thread != NULL) + pmap = vmspace_pmap(kdb_thread->td_proc->p_vmspace); + else + pmap = PCPU_GET(curpmap); + PG_V = pmap_valid_bit(pmap); pml4 = pmap_pml4e(pmap, va); db_printf("VA %#016lx pml4e %#016lx", va, *pml4); diff --git a/sys/amd64/include/pcpu.h b/sys/amd64/include/pcpu.h index a4f4e1dc731f..7e3c1b0bbb27 100644 --- a/sys/amd64/include/pcpu.h +++ b/sys/amd64/include/pcpu.h @@ -78,6 +78,7 @@ extern struct pcpu *pcpup; +#define get_pcpu() (pcpup) #define PCPU_GET(member) (pcpup->pc_ ## member) #define PCPU_ADD(member, val) (pcpup->pc_ ## member += (val)) #define PCPU_INC(member) PCPU_ADD(member, 1) @@ -203,6 +204,15 @@ extern struct pcpu *pcpup; } \ } +#define get_pcpu() __extension__ ({ \ + struct pcpu *__pc; \ + \ + __asm __volatile("movq %%gs:%1,%0" \ + : "=r" (__pc) \ + : "m" (*(struct pcpu *)(__pcpu_offset(pc_prvspace)))); \ + __pc; \ +}) + #define PCPU_GET(member) __PCPU_GET(pc_ ## member) #define PCPU_ADD(member, val) __PCPU_ADD(pc_ ## member, val) #define PCPU_INC(member) __PCPU_INC(pc_ ## member) diff --git a/sys/amd64/linux/linux_dummy.c b/sys/amd64/linux/linux_dummy.c index b86fa4d8a2b2..690205a0e6cc 100644 --- a/sys/amd64/linux/linux_dummy.c +++ b/sys/amd64/linux/linux_dummy.c @@ -114,7 +114,6 @@ DUMMY(inotify_init1); DUMMY(preadv); DUMMY(pwritev); /* linux 2.6.31: */ -DUMMY(rt_tgsigqueueinfo); DUMMY(perf_event_open); /* linux 2.6.38: */ DUMMY(fanotify_init); diff --git a/sys/amd64/linux/linux_machdep.c b/sys/amd64/linux/linux_machdep.c index 3a6db17bc502..a7fe90f59dc7 100644 --- a/sys/amd64/linux/linux_machdep.c +++ b/sys/amd64/linux/linux_machdep.c @@ -88,6 +88,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include int linux_execve(struct thread *td, struct linux_execve_args *args) @@ -226,28 +227,34 @@ int linux_arch_prctl(struct thread *td, struct linux_arch_prctl_args *args) { int error; - struct pcb *pcb; + struct sysarch_args bsd_args; LINUX_CTR2(arch_prctl, "0x%x, %p", args->code, args->addr); - error = ENOTSUP; - pcb = td->td_pcb; - switch (args->code) { - case LINUX_ARCH_GET_GS: - error = copyout(&pcb->pcb_gsbase, (unsigned long *)args->addr, - sizeof(args->addr)); - break; case LINUX_ARCH_SET_GS: - if (args->addr >= VM_MAXUSER_ADDRESS) - return(EPERM); - break; - case LINUX_ARCH_GET_FS: - error = copyout(&pcb->pcb_fsbase, (unsigned long *)args->addr, - sizeof(args->addr)); + bsd_args.op = AMD64_SET_GSBASE; + bsd_args.parms = (void *)args->addr; + error = sysarch(td, &bsd_args); + if (error == EINVAL) + error = EPERM; break; case LINUX_ARCH_SET_FS: - error = linux_set_cloned_tls(td, (void *)args->addr); + bsd_args.op = AMD64_SET_FSBASE; + bsd_args.parms = (void *)args->addr; + error = sysarch(td, &bsd_args); + if (error == EINVAL) + error = EPERM; + break; + case LINUX_ARCH_GET_FS: + bsd_args.op = AMD64_GET_FSBASE; + bsd_args.parms = (void *)args->addr; + error = sysarch(td, &bsd_args); + break; + case LINUX_ARCH_GET_GS: + bsd_args.op = AMD64_GET_GSBASE; + bsd_args.parms = (void *)args->addr; + error = sysarch(td, &bsd_args); break; default: error = EINVAL; diff --git a/sys/amd64/linux32/linux32_dummy.c b/sys/amd64/linux32/linux32_dummy.c index 74e89a9380cd..9ba578c47e0e 100644 --- a/sys/amd64/linux32/linux32_dummy.c +++ b/sys/amd64/linux32/linux32_dummy.c @@ -114,7 +114,6 @@ DUMMY(inotify_init1); DUMMY(preadv); DUMMY(pwritev); /* linux 2.6.31: */ -DUMMY(rt_tgsigqueueinfo); DUMMY(perf_event_open); /* linux 2.6.33: */ DUMMY(fanotify_init); diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c index d8645b718cd2..c25bbd061dad 100644 --- a/sys/arm/arm/pmap-v6.c +++ b/sys/arm/arm/pmap-v6.c @@ -4799,12 +4799,11 @@ pmap_protect_pte1(pmap_t pmap, pt1_entry_t *pte1p, vm_offset_t sva, ("%s: sva is not 1mpage aligned", __func__)); opte1 = npte1 = pte1_load(pte1p); - if (pte1_is_managed(opte1)) { + if (pte1_is_managed(opte1) && pte1_is_dirty(opte1)) { eva = sva + PTE1_SIZE; for (va = sva, m = PHYS_TO_VM_PAGE(pte1_pa(opte1)); va < eva; va += PAGE_SIZE, m++) - if (pte1_is_dirty(opte1)) - vm_page_dirty(m); + vm_page_dirty(m); } if ((prot & VM_PROT_WRITE) == 0) npte1 |= PTE1_RO | PTE1_NM; diff --git a/sys/arm/freescale/imx/imx_gpio.c b/sys/arm/freescale/imx/imx_gpio.c index 1c308dbbd687..f7b417252dc8 100644 --- a/sys/arm/freescale/imx/imx_gpio.c +++ b/sys/arm/freescale/imx/imx_gpio.c @@ -727,7 +727,7 @@ imx51_gpio_attach(device_t dev) (READ4(sc, IMX_GPIO_OE_REG) & (1U << i)) ? GPIO_PIN_OUTPUT : GPIO_PIN_INPUT; snprintf(sc->gpio_pins[i].gp_name, GPIOMAXNAME, - "imx_gpio%d.%d", unit, i); + "GPIO%d_IO%02d", unit + 1, i); } #ifdef INTRNG diff --git a/sys/arm/ti/ti_sdhci.c b/sys/arm/ti/ti_sdhci.c index abc71c8d4389..16fa9569f040 100644 --- a/sys/arm/ti/ti_sdhci.c +++ b/sys/arm/ti/ti_sdhci.c @@ -71,11 +71,11 @@ struct ti_sdhci_softc { uint32_t mmchs_reg_off; uint32_t sdhci_reg_off; uint32_t baseclk_hz; - uint32_t wp_gpio_pin; uint32_t cmd_and_mode; uint32_t sdhci_clkdiv; boolean_t disable_highspeed; boolean_t force_card_present; + boolean_t disable_readonly; }; /* @@ -364,6 +364,9 @@ ti_sdhci_get_ro(device_t brdev, device_t reqdev) { struct ti_sdhci_softc *sc = device_get_softc(brdev); + if (sc->disable_readonly) + return (0); + return (sdhci_fdt_gpio_get_readonly(sc->gpio)); } @@ -558,8 +561,21 @@ ti_sdhci_attach(device_t dev) goto fail; } + /* + * Set up handling of card-detect and write-protect gpio lines. + * + * If there is no write protect info in the fdt data, fall back to the + * historical practice of assuming that the card is writable. This + * works around bad fdt data from the upstream source. The alternative + * would be to trust the sdhci controller's PRESENT_STATE register WP + * bit, but it may say write protect is in effect when it's not if the + * pinmux setup doesn't route the WP signal into the sdchi block. + */ sc->gpio = sdhci_fdt_gpio_setup(sc->dev, &sc->slot); + if (!OF_hasprop(node, "wp-gpios") && !OF_hasprop(node, "wp-disable")) + sc->disable_readonly = true; + /* Initialise the MMCHS hardware. */ ti_sdhci_hw_init(dev); diff --git a/sys/boot/common/md.c b/sys/boot/common/md.c index e81d1bb6e28e..22a0e953ad54 100644 --- a/sys/boot/common/md.c +++ b/sys/boot/common/md.c @@ -103,7 +103,7 @@ md_strategy(void *devdata, int rw, daddr_t blk, size_t size, if ((ofs + size) > MD_IMAGE_SIZE) size = MD_IMAGE_SIZE - ofs; - if (rsize != 0) + if (rsize != NULL) *rsize = size; switch (rw) { diff --git a/sys/boot/efi/libefi/efinet.c b/sys/boot/efi/libefi/efinet.c index 26802c2287d9..c598548ed9fc 100644 --- a/sys/boot/efi/libefi/efinet.c +++ b/sys/boot/efi/libefi/efinet.c @@ -131,13 +131,13 @@ efinet_put(struct iodesc *desc, void *pkt, size_t len) /* Wait for the buffer to be transmitted */ do { - buf = 0; /* XXX Is this needed? */ + buf = NULL; /* XXX Is this needed? */ status = net->GetStatus(net, 0, &buf); /* * XXX EFI1.1 and the E1000 card returns a different * address than we gave. Sigh. */ - } while (status == EFI_SUCCESS && buf == 0); + } while (status == EFI_SUCCESS && buf == NULL); /* XXX How do we deal with status != EFI_SUCCESS now? */ return ((status == EFI_SUCCESS) ? len : -1); diff --git a/sys/boot/fdt/fdt_overlay.c b/sys/boot/fdt/fdt_overlay.c index a19f06e8e947..0d9b367d4639 100644 --- a/sys/boot/fdt/fdt_overlay.c +++ b/sys/boot/fdt/fdt_overlay.c @@ -64,7 +64,7 @@ fdt_get_fixup_location(void *fdtp, const char *fixup) int prop_offset, o, proplen; void *result; - result = 0; + result = NULL; path = strdup(fixup); prop = strchr(path, ':'); diff --git a/sys/boot/ficl/ficl.c b/sys/boot/ficl/ficl.c index d4370eb1a48a..219cf84b2225 100644 --- a/sys/boot/ficl/ficl.c +++ b/sys/boot/ficl/ficl.c @@ -276,7 +276,7 @@ void ficlFreeVM(FICL_VM *pVM) FICL_SYSTEM *pSys = pVM->pSys; FICL_VM *pList = pSys->vmList; - assert(pVM != 0); + assert(pVM != NULL); if (pSys->vmList == pVM) { diff --git a/sys/boot/geli/Makefile b/sys/boot/geli/Makefile index f5ab24329036..7f7ad355c867 100644 --- a/sys/boot/geli/Makefile +++ b/sys/boot/geli/Makefile @@ -24,6 +24,10 @@ WARNS?= 0 .PATH: ${.CURDIR}/../../../lib/libc/string SRCS+= bcmp.c bcopy.c bzero.c +# need explicit_bzero for crypto +.PATH: ${.CURDIR}/../../../sys/libkern +SRCS+= explicit_bzero.c + # Our password input method SRCS+= pwgets.c diff --git a/sys/boot/kshim/bsd_kernel.c b/sys/boot/kshim/bsd_kernel.c index c94b755e9eaf..75eccb1d6725 100644 --- a/sys/boot/kshim/bsd_kernel.c +++ b/sys/boot/kshim/bsd_kernel.c @@ -75,7 +75,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, void *addr; addr = malloc(dmat->maxsize + dmat->alignment, XXX, XXX); - if (addr == 0) + if (addr == NULL) return (ENOMEM); *mapp = addr; diff --git a/sys/boot/mips/beri/boot2/Makefile b/sys/boot/mips/beri/boot2/Makefile index dec7d6110e95..be2dc0a6bb5d 100644 --- a/sys/boot/mips/beri/boot2/Makefile +++ b/sys/boot/mips/beri/boot2/Makefile @@ -71,7 +71,7 @@ LDFLAGS= -nostdlib \ CFLAGS+= -I${.CURDIR}/../common flashboot.elf: relocate.o start.o boot2.o altera_jtag_uart.o cfi.o sdcard.o - ${CC} ${_LDFLAGS} -T ${.CURDIR}/flashboot.ldscript -o ${.TARGET} \ + ${CC} ${LDFLAGS} -T ${.CURDIR}/flashboot.ldscript -o ${.TARGET} \ ${.ALLSRC} ${LIBSTAND} flashboot: flashboot.elf ${OBJCOPY} -S -O binary ${.TARGET}.elf ${.TARGET} @@ -79,7 +79,7 @@ flashboot.md5: flashboot md5 flashboot > flashboot.md5 jtagboot: start.o boot2.o altera_jtag_uart.o cfi.o sdcard.o - ${CC} ${_LDFLAGS} -T ${.CURDIR}/jtagboot.ldscript -o ${.TARGET} \ + ${CC} ${LDFLAGS} -T ${.CURDIR}/jtagboot.ldscript -o ${.TARGET} \ ${.ALLSRC} ${LIBSTAND} jtagboot.md5: jtagboot md5 jtagboot > jtagboot.md5 diff --git a/sys/boot/ofw/libofw/ofw_memory.c b/sys/boot/ofw/libofw/ofw_memory.c index 60cc90457bcb..5616184e8080 100644 --- a/sys/boot/ofw/libofw/ofw_memory.c +++ b/sys/boot/ofw/libofw/ofw_memory.c @@ -35,7 +35,7 @@ __FBSDID("$FreeBSD$"); #include "libofw.h" #include "openfirm.h" -static void *heap_base = 0; +static void *heap_base = NULL; static unsigned int heap_size = 0; struct ofw_mapping { diff --git a/sys/boot/sparc64/loader/main.c b/sys/boot/sparc64/loader/main.c index d7b4e1e7abbb..e70d9bbb0390 100644 --- a/sys/boot/sparc64/loader/main.c +++ b/sys/boot/sparc64/loader/main.c @@ -859,7 +859,7 @@ main(int (*openfirm)(void *)) /* * Initialize devices. */ - for (dp = devsw; *dp != 0; dp++) + for (dp = devsw; *dp != NULL; dp++) if ((*dp)->dv_init != 0) (*dp)->dv_init(); diff --git a/sys/boot/userboot/userboot/userboot_disk.c b/sys/boot/userboot/userboot/userboot_disk.c index 045854f12b62..e49393e9f082 100644 --- a/sys/boot/userboot/userboot/userboot_disk.c +++ b/sys/boot/userboot/userboot/userboot_disk.c @@ -91,8 +91,8 @@ userdisk_init(void) return (ENOMEM); for (i = 0; i < userdisk_maxunit; i++) { if (CALLBACK(diskioctl, i, DIOCGSECTORSIZE, - §orsize) != 0 || CALLBACK(diskioctl, i, - DIOCGMEDIASIZE, &mediasize) != 0) + §orsize) != NULL || CALLBACK(diskioctl, i, + DIOCGMEDIASIZE, &mediasize) != NULL) return (ENXIO); ud_info[i].mediasize = mediasize; ud_info[i].sectorsize = sectorsize; diff --git a/sys/boot/zfs/zfs.c b/sys/boot/zfs/zfs.c index 6cad2935616d..062895eef79a 100644 --- a/sys/boot/zfs/zfs.c +++ b/sys/boot/zfs/zfs.c @@ -126,7 +126,7 @@ zfs_close(struct open_file *f) { struct file *fp = (struct file *)f->f_fsdata; - dnode_cache_obj = 0; + dnode_cache_obj = NULL; f->f_fsdata = (void *)0; if (fp == (struct file *)0) return (0); diff --git a/sys/boot/zfs/zfsimpl.c b/sys/boot/zfs/zfsimpl.c index 8729a7517d1c..44e3bd343e3d 100644 --- a/sys/boot/zfs/zfsimpl.c +++ b/sys/boot/zfs/zfsimpl.c @@ -69,7 +69,7 @@ static const char *features_for_read[] = { static spa_list_t zfs_pools; static uint64_t zfs_crc64_table[256]; -static const dnode_phys_t *dnode_cache_obj = 0; +static const dnode_phys_t *dnode_cache_obj = NULL; static uint64_t dnode_cache_bn; static char *dnode_cache_buf; static char *zap_scratch; @@ -1527,7 +1527,7 @@ fzap_lookup(const spa_t *spa, const dnode_phys_t *dnode, const char *name, zc = &ZAP_LEAF_CHUNK(&zl, h); while (zc->l_entry.le_hash != hash) { if (zc->l_entry.le_next == 0xffff) { - zc = 0; + zc = NULL; break; } zc = &ZAP_LEAF_CHUNK(&zl, zc->l_entry.le_next); @@ -2264,6 +2264,61 @@ zfs_dnode_stat(const spa_t *spa, dnode_phys_t *dn, struct stat *sb) return (0); } +static int +zfs_dnode_readlink(const spa_t *spa, dnode_phys_t *dn, char *path, size_t psize) +{ + int rc = 0; + + if (dn->dn_bonustype == DMU_OT_SA) { + sa_hdr_phys_t *sahdrp = NULL; + size_t size = 0; + void *buf = NULL; + int hdrsize; + char *p; + + if (dn->dn_bonuslen != 0) + sahdrp = (sa_hdr_phys_t *)DN_BONUS(dn); + else { + blkptr_t *bp; + + if ((dn->dn_flags & DNODE_FLAG_SPILL_BLKPTR) == 0) + return (EIO); + bp = &dn->dn_spill; + + size = BP_GET_LSIZE(bp); + buf = zfs_alloc(size); + rc = zio_read(spa, bp, buf); + if (rc != 0) { + zfs_free(buf, size); + return (rc); + } + sahdrp = buf; + } + hdrsize = SA_HDR_SIZE(sahdrp); + p = (char *)((uintptr_t)sahdrp + hdrsize + SA_SYMLINK_OFFSET); + memcpy(path, p, psize); + if (buf != NULL) + zfs_free(buf, size); + return (0); + } + /* + * Second test is purely to silence bogus compiler + * warning about accessing past the end of dn_bonus. + */ + if (psize + sizeof(znode_phys_t) <= dn->dn_bonuslen && + sizeof(znode_phys_t) <= sizeof(dn->dn_bonus)) { + memcpy(path, &dn->dn_bonus[sizeof(znode_phys_t)], psize); + } else { + rc = dnode_read(spa, dn, 0, path, psize); + } + return (rc); +} + +struct obj_list { + uint64_t objnum; + STAILQ_ENTRY(obj_list) entry; +}; + /* * Lookup a file and return its dnode. */ @@ -2271,7 +2326,7 @@ static int zfs_lookup(const struct zfsmount *mount, const char *upath, dnode_phys_t *dnode) { int rc; - uint64_t objnum, rootnum, parentnum; + uint64_t objnum; const spa_t *spa; dnode_phys_t dn; const char *p, *q; @@ -2279,6 +2334,8 @@ zfs_lookup(const struct zfsmount *mount, const char *upath, dnode_phys_t *dnode) char path[1024]; int symlinks_followed = 0; struct stat sb; + struct obj_list *entry; + STAILQ_HEAD(, obj_list) on_cache = STAILQ_HEAD_INITIALIZER(on_cache); spa = mount->spa; if (mount->objset.os_type != DMU_OST_ZFS) { @@ -2287,87 +2344,119 @@ zfs_lookup(const struct zfsmount *mount, const char *upath, dnode_phys_t *dnode) return (EIO); } + if ((entry = malloc(sizeof(struct obj_list))) == NULL) + return (ENOMEM); + /* * Get the root directory dnode. */ rc = objset_get_dnode(spa, &mount->objset, MASTER_NODE_OBJ, &dn); - if (rc) + if (rc) { + free(entry); return (rc); + } - rc = zap_lookup(spa, &dn, ZFS_ROOT_OBJ, sizeof (rootnum), 1, &rootnum); - if (rc) + rc = zap_lookup(spa, &dn, ZFS_ROOT_OBJ, sizeof (objnum), 1, &objnum); + if (rc) { + free(entry); return (rc); + } + entry->objnum = objnum; + STAILQ_INSERT_HEAD(&on_cache, entry, entry); - rc = objset_get_dnode(spa, &mount->objset, rootnum, &dn); - if (rc) - return (rc); + rc = objset_get_dnode(spa, &mount->objset, objnum, &dn); + if (rc != 0) + goto done; - objnum = rootnum; p = upath; while (p && *p) { + rc = objset_get_dnode(spa, &mount->objset, objnum, &dn); + if (rc != 0) + goto done; + while (*p == '/') p++; - if (!*p) + if (*p == '\0') break; - q = strchr(p, '/'); - if (q) { - memcpy(element, p, q - p); - element[q - p] = 0; - p = q; - } else { - strcpy(element, p); - p = 0; + q = p; + while (*q != '\0' && *q != '/') + q++; + + /* skip dot */ + if (p + 1 == q && p[0] == '.') { + p++; + continue; + } + /* double dot */ + if (p + 2 == q && p[0] == '.' && p[1] == '.') { + p += 2; + if (STAILQ_FIRST(&on_cache) == + STAILQ_LAST(&on_cache, obj_list, entry)) { + rc = ENOENT; + goto done; + } + entry = STAILQ_FIRST(&on_cache); + STAILQ_REMOVE_HEAD(&on_cache, entry); + free(entry); + objnum = (STAILQ_FIRST(&on_cache))->objnum; + continue; + } + if (q - p + 1 > sizeof(element)) { + rc = ENAMETOOLONG; + goto done; + } + memcpy(element, p, q - p); + element[q - p] = 0; + p = q; + + if ((rc = zfs_dnode_stat(spa, &dn, &sb)) != 0) + goto done; + if (!S_ISDIR(sb.st_mode)) { + rc = ENOTDIR; + goto done; } - rc = zfs_dnode_stat(spa, &dn, &sb); - if (rc) - return (rc); - if (!S_ISDIR(sb.st_mode)) - return (ENOTDIR); - - parentnum = objnum; rc = zap_lookup(spa, &dn, element, sizeof (objnum), 1, &objnum); if (rc) - return (rc); + goto done; objnum = ZFS_DIRENT_OBJ(objnum); + if ((entry = malloc(sizeof(struct obj_list))) == NULL) { + rc = ENOMEM; + goto done; + } + entry->objnum = objnum; + STAILQ_INSERT_HEAD(&on_cache, entry, entry); rc = objset_get_dnode(spa, &mount->objset, objnum, &dn); if (rc) - return (rc); + goto done; /* * Check for symlink. */ rc = zfs_dnode_stat(spa, &dn, &sb); if (rc) - return (rc); + goto done; if (S_ISLNK(sb.st_mode)) { - if (symlinks_followed > 10) - return (EMLINK); + if (symlinks_followed > 10) { + rc = EMLINK; + goto done; + } symlinks_followed++; /* * Read the link value and copy the tail of our * current path onto the end. */ - if (p) - strcpy(&path[sb.st_size], p); - else - path[sb.st_size] = 0; - /* - * Second test is purely to silence bogus compiler - * warning about accessing past the end of dn_bonus. - */ - if (sb.st_size + sizeof(znode_phys_t) <= - dn.dn_bonuslen && sizeof(znode_phys_t) <= - sizeof(dn.dn_bonus)) { - memcpy(path, &dn.dn_bonus[sizeof(znode_phys_t)], - sb.st_size); - } else { - rc = dnode_read(spa, &dn, 0, path, sb.st_size); - if (rc) - return (rc); + if (sb.st_size + strlen(p) + 1 > sizeof(path)) { + rc = ENAMETOOLONG; + goto done; } + strcpy(&path[sb.st_size], p); + + rc = zfs_dnode_readlink(spa, &dn, path, sb.st_size); + if (rc != 0) + goto done; /* * Restart with the new path, starting either at @@ -2375,14 +2464,25 @@ zfs_lookup(const struct zfsmount *mount, const char *upath, dnode_phys_t *dnode) * not the link is relative. */ p = path; - if (*p == '/') - objnum = rootnum; - else - objnum = parentnum; - objset_get_dnode(spa, &mount->objset, objnum, &dn); + if (*p == '/') { + while (STAILQ_FIRST(&on_cache) != + STAILQ_LAST(&on_cache, obj_list, entry)) { + entry = STAILQ_FIRST(&on_cache); + STAILQ_REMOVE_HEAD(&on_cache, entry); + free(entry); + } + } else { + entry = STAILQ_FIRST(&on_cache); + STAILQ_REMOVE_HEAD(&on_cache, entry); + free(entry); + } + objnum = (STAILQ_FIRST(&on_cache))->objnum; } } *dnode = dn; - return (0); +done: + STAILQ_FOREACH(entry, &on_cache, entry) + free(entry); + return (rc); } diff --git a/sys/cam/ctl/ctl_tpc.c b/sys/cam/ctl/ctl_tpc.c index c8d60cad0194..39d4f2440af9 100644 --- a/sys/cam/ctl/ctl_tpc.c +++ b/sys/cam/ctl/ctl_tpc.c @@ -85,6 +85,7 @@ struct tpc_io { uint8_t target; uint32_t cscd; uint64_t lun; + uint8_t *buf; struct tpc_list *list; struct runl run; TAILQ_ENTRY(tpc_io) rlinks; @@ -127,7 +128,6 @@ struct tpc_list { off_t curbytes; int curops; int stage; - uint8_t *buf; off_t segsectors; off_t segbytes; int tbdio; @@ -813,9 +813,9 @@ tpc_process_b2b(struct tpc_list *list) while ((tior = TAILQ_FIRST(&list->allio)) != NULL) { TAILQ_REMOVE(&list->allio, tior, links); ctl_free_io(tior->io); + free(tior->buf, M_CTL); free(tior, M_CTL); } - free(list->buf, M_CTL); if (list->abort) { ctl_set_task_aborted(list->ctsio); return (CTL_RETVAL_ERROR); @@ -874,7 +874,6 @@ tpc_process_b2b(struct tpc_list *list) return (CTL_RETVAL_ERROR); } - list->buf = malloc(numbytes, M_CTL, M_WAITOK); list->segbytes = numbytes; list->segsectors = numbytes / dstblock; donebytes = 0; @@ -894,11 +893,12 @@ tpc_process_b2b(struct tpc_list *list) tior = malloc(sizeof(*tior), M_CTL, M_WAITOK | M_ZERO); TAILQ_INIT(&tior->run); + tior->buf = malloc(roundbytes, M_CTL, M_WAITOK); tior->list = list; TAILQ_INSERT_TAIL(&list->allio, tior, links); tior->io = tpcl_alloc_io(); ctl_scsi_read_write(tior->io, - /*data_ptr*/ &list->buf[donebytes], + /*data_ptr*/ tior->buf, /*data_len*/ roundbytes, /*read_op*/ 1, /*byte2*/ 0, @@ -919,7 +919,7 @@ tpc_process_b2b(struct tpc_list *list) TAILQ_INSERT_TAIL(&list->allio, tiow, links); tiow->io = tpcl_alloc_io(); ctl_scsi_read_write(tiow->io, - /*data_ptr*/ &list->buf[donebytes], + /*data_ptr*/ tior->buf, /*data_len*/ roundbytes, /*read_op*/ 0, /*byte2*/ 0, @@ -1029,9 +1029,9 @@ tpc_process_register_key(struct tpc_list *list) while ((tio = TAILQ_FIRST(&list->allio)) != NULL) { TAILQ_REMOVE(&list->allio, tio, links); ctl_free_io(tio->io); + free(tio->buf, M_CTL); free(tio, M_CTL); } - free(list->buf, M_CTL); if (list->abort) { ctl_set_task_aborted(list->ctsio); return (CTL_RETVAL_ERROR); @@ -1064,9 +1064,9 @@ tpc_process_register_key(struct tpc_list *list) TAILQ_INSERT_TAIL(&list->allio, tio, links); tio->io = tpcl_alloc_io(); datalen = sizeof(struct scsi_per_res_out_parms); - list->buf = malloc(datalen, M_CTL, M_WAITOK); + tio->buf = malloc(datalen, M_CTL, M_WAITOK); ctl_scsi_persistent_res_out(tio->io, - list->buf, datalen, SPRO_REGISTER, -1, + tio->buf, datalen, SPRO_REGISTER, -1, scsi_8btou64(seg->res_key), scsi_8btou64(seg->sa_res_key), /*tag_type*/ CTL_TAG_SIMPLE, /*control*/ 0); tio->io->io_hdr.retries = 3; @@ -1166,9 +1166,9 @@ tpc_process_wut(struct tpc_list *list) while ((tio = TAILQ_FIRST(&list->allio)) != NULL) { TAILQ_REMOVE(&list->allio, tio, links); ctl_free_io(tio->io); + free(tio->buf, M_CTL); free(tio, M_CTL); } - free(list->buf, M_CTL); if (list->abort) { ctl_set_task_aborted(list->ctsio); return (CTL_RETVAL_ERROR); @@ -1233,8 +1233,6 @@ tpc_process_wut(struct tpc_list *list) return (CTL_RETVAL_ERROR); } - list->buf = malloc(numbytes, M_CTL, M_WAITOK | - (list->token == NULL ? M_ZERO : 0)); list->segbytes = numbytes; list->segsectors = numbytes / dstblock; //printf("Copy chunk of %ju sectors from %ju to %ju\n", list->segsectors, @@ -1257,11 +1255,12 @@ tpc_process_wut(struct tpc_list *list) tior = malloc(sizeof(*tior), M_CTL, M_WAITOK | M_ZERO); TAILQ_INIT(&tior->run); + tior->buf = malloc(roundbytes, M_CTL, M_WAITOK); tior->list = list; TAILQ_INSERT_TAIL(&list->allio, tior, links); tior->io = tpcl_alloc_io(); ctl_scsi_read_write(tior->io, - /*data_ptr*/ &list->buf[donebytes], + /*data_ptr*/ tior->buf, /*data_len*/ roundbytes, /*read_op*/ 1, /*byte2*/ 0, @@ -1280,7 +1279,7 @@ tpc_process_wut(struct tpc_list *list) TAILQ_INSERT_TAIL(&list->allio, tiow, links); tiow->io = tpcl_alloc_io(); ctl_scsi_read_write(tiow->io, - /*data_ptr*/ &list->buf[donebytes], + /*data_ptr*/ tior->buf, /*data_len*/ roundbytes, /*read_op*/ 0, /*byte2*/ 0, diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c index 4a3f74372e01..4b9f23006bdf 100644 --- a/sys/cam/ctl/scsi_ctl.c +++ b/sys/cam/ctl/scsi_ctl.c @@ -1096,6 +1096,7 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) struct ccb_accept_tio *atio = NULL; union ctl_io *io = NULL; struct mtx *mtx; + cam_status status; KASSERT((done_ccb->ccb_h.flags & CAM_UNLOCKED) != 0, ("CCB in ctlfedone() without CAM_UNLOCKED flag")); @@ -1122,30 +1123,15 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) mtx = cam_periph_mtx(periph); mtx_lock(mtx); - /* - * If the peripheral is invalid, ATIOs and immediate notify CCBs - * need to be freed. Most of the ATIOs and INOTs that come back - * will be CCBs that are being returned from the SIM as a result of - * our disabling the LUN. - * - * Other CCB types are handled in their respective cases below. - */ - if (periph->flags & CAM_PERIPH_INVALID) { - switch (done_ccb->ccb_h.func_code) { - case XPT_ACCEPT_TARGET_IO: - case XPT_IMMEDIATE_NOTIFY: - case XPT_NOTIFY_ACKNOWLEDGE: - ctlfe_free_ccb(periph, done_ccb); - goto out; - default: - break; - } - - } switch (done_ccb->ccb_h.func_code) { case XPT_ACCEPT_TARGET_IO: { atio = &done_ccb->atio; + status = atio->ccb_h.status & CAM_STATUS_MASK; + if (status != CAM_CDB_RECVD) { + ctlfe_free_ccb(periph, done_ccb); + goto out; + } resubmit: /* @@ -1424,14 +1410,9 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) case XPT_IMMEDIATE_NOTIFY: { union ctl_io *io; struct ccb_immediate_notify *inot; - cam_status status; int send_ctl_io; inot = &done_ccb->cin1; - printf("%s: got XPT_IMMEDIATE_NOTIFY status %#x tag %#x " - "seq %#x\n", __func__, inot->ccb_h.status, - inot->tag_id, inot->seq_id); - io = done_ccb->ccb_h.io_ptr; ctl_zero_io(io); @@ -1497,40 +1478,22 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) break; default: xpt_print(periph->path, - "%s: unsupported message 0x%x\n", - __func__, inot->arg); + "%s: unsupported INOT message 0x%x\n", + __func__, inot->arg); send_ctl_io = 0; break; } break; - case CAM_REQ_ABORTED: - /* - * This request was sent back by the driver. - * XXX KDM what do we do here? - */ - send_ctl_io = 0; - break; - case CAM_REQ_INVALID: - case CAM_PROVIDE_FAIL: default: - /* - * We should only get here if we're talking - * to a talking to a SIM that is target - * capable but supports the old API. In - * that case, we need to just free the CCB. - * If we actually send a notify acknowledge, - * it will send that back with an error as - * well. - */ - - if ((status != CAM_REQ_INVALID) - && (status != CAM_PROVIDE_FAIL)) - xpt_print(periph->path, - "%s: unsupported CAM status 0x%x\n", - __func__, status); - + xpt_print(periph->path, + "%s: unsupported INOT status 0x%x\n", + __func__, status); + /* FALLTHROUGH */ + case CAM_REQ_ABORTED: + case CAM_REQ_INVALID: + case CAM_DEV_NOT_THERE: + case CAM_PROVIDE_FAIL: ctlfe_free_ccb(periph, done_ccb); - goto out; } if (send_ctl_io != 0) { @@ -1543,6 +1506,11 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) break; } case XPT_NOTIFY_ACKNOWLEDGE: + if (periph->flags & CAM_PERIPH_INVALID) { + ctlfe_free_ccb(periph, done_ccb); + goto out; + } + /* * Queue this back down to the SIM as an immediate notify. */ @@ -2023,14 +1991,6 @@ ctlfe_done(union ctl_io *io) softc = (struct ctlfe_lun_softc *)periph->softc; if (io->io_hdr.io_type == CTL_IO_TASK) { - /* - * Task management commands don't require any further - * communication back to the adapter. Requeue the CCB - * to the adapter, and free the CTL I/O. - */ - xpt_print(ccb->ccb_h.path, "%s: returning task I/O " - "tag %#x seq %#x\n", __func__, - ccb->cin1.tag_id, ccb->cin1.seq_id); /* * Send the notify acknowledge down to the SIM, to let it * know we processed the task management command. diff --git a/sys/cam/scsi/scsi_low.c b/sys/cam/scsi/scsi_low.c index 01ca86a0c2bc..ae59c08ab3a7 100644 --- a/sys/cam/scsi/scsi_low.c +++ b/sys/cam/scsi/scsi_low.c @@ -479,15 +479,6 @@ scsi_low_scsi_action_cam(sim, ccb) #endif /* SCSI_LOW_DEBUG */ break; - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ - /* XXX Implement */ - ccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(ccb); - break; - case XPT_ABORT: /* Abort the specified CCB */ #ifdef SCSI_LOW_DIAGNOSTIC if (target == CAM_TARGET_WILDCARD || lun == CAM_LUN_WILDCARD) diff --git a/sys/cddl/boot/zfs/zfsimpl.h b/sys/cddl/boot/zfs/zfsimpl.h index 2ccec82ec481..08ca499b735b 100644 --- a/sys/cddl/boot/zfs/zfsimpl.h +++ b/sys/cddl/boot/zfs/zfsimpl.h @@ -1080,6 +1080,7 @@ typedef struct sa_hdr_phys { #define SA_UID_OFFSET 24 #define SA_GID_OFFSET 32 #define SA_PARENT_OFFSET 40 +#define SA_SYMLINK_OFFSET 160 /* * Intent log header - this on disk structure holds fields to manage diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c b/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c index 6af1e8be348b..d33b034a4d61 100644 --- a/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c +++ b/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c @@ -196,10 +196,17 @@ mount_snapshot(kthread_t *td, vnode_t **vpp, const char *fstype, char *fspath, td->td_ucred = cr; if (error != 0) { + /* + * Clear VI_MOUNT and decrement the use count "atomically", + * under the vnode lock. This is not strictly required, + * but makes it easier to reason about the life-cycle and + * ownership of the covered vnode. + */ + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); VI_LOCK(vp); vp->v_iflag &= ~VI_MOUNT; VI_UNLOCK(vp); - vrele(vp); + vput(vp); vfs_unbusy(mp); vfs_freeopts(mp->mnt_optnew); vfs_mount_destroy(mp); diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c index 8c49ff2a4831..144ce3b7243a 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c @@ -168,8 +168,8 @@ id_t zio_taskq_psrset_bind = PS_NONE; #endif #ifdef SYSDC boolean_t zio_taskq_sysdc = B_TRUE; /* use SDC scheduling class */ -#endif uint_t zio_taskq_basedc = 80; /* base duty cycle */ +#endif boolean_t spa_create_process = B_TRUE; /* no process ==> no sysdc */ extern int zfs_sync_pass_deferred_free; @@ -922,9 +922,17 @@ spa_taskqs_init(spa_t *spa, zio_type_t t, zio_taskq_type_t q) * The write issue taskq can be extremely CPU * intensive. Run it at slightly lower priority * than the other taskqs. + * FreeBSD notes: + * - numerically higher priorities are lower priorities; + * - if priorities divided by four (RQ_PPQ) are equal + * then a difference between them is insignificant. */ if (t == ZIO_TYPE_WRITE && q == ZIO_TASKQ_ISSUE) - pri++; +#ifdef illumos + pri--; +#else + pri += 4; +#endif tq = taskq_create_proc(name, value, pri, 50, INT_MAX, spa->spa_proc, flags); diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h index 8849003e8aa9..de770c52add0 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h @@ -44,7 +44,7 @@ extern "C" { void zfsctl_create(zfsvfs_t *); void zfsctl_destroy(zfsvfs_t *); -vnode_t *zfsctl_root(znode_t *); +int zfsctl_root(zfsvfs_t *, int, vnode_t **); void zfsctl_init(void); void zfsctl_fini(void); boolean_t zfsctl_is_node(vnode_t *); @@ -53,10 +53,6 @@ int zfsctl_rename_snapshot(const char *from, const char *to); int zfsctl_destroy_snapshot(const char *snapname, int force); int zfsctl_umount_snapshots(vfs_t *, int, cred_t *); -int zfsctl_root_lookup(vnode_t *dvp, char *nm, vnode_t **vpp, pathname_t *pnp, - int flags, vnode_t *rdir, cred_t *cr, caller_context_t *ct, - int *direntflags, pathname_t *realpnp); - int zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp); #define ZFSCTL_INO_ROOT 0x1 diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h index bcf22cdb9d73..57cb61246c3a 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h @@ -68,7 +68,7 @@ struct zfsvfs { krwlock_t z_teardown_inactive_lock; list_t z_all_znodes; /* all vnodes in the fs */ kmutex_t z_znodes_lock; /* lock for z_all_znodes */ - vnode_t *z_ctldir; /* .zfs directory pointer */ + struct zfsctl_root *z_ctldir; /* .zfs directory pointer */ boolean_t z_show_ctldir; /* expose .zfs in the root dir */ boolean_t z_issnap; /* true if this is a snapshot */ boolean_t z_vscan; /* virus scan on/off */ diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c index 9ac5fc2aacdd..4c2e3e954100 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c @@ -70,136 +70,249 @@ #include #include #include -#include #include #include +#include #include #include #include -#include +#include #include "zfs_namecheck.h" -typedef struct zfsctl_node { - gfs_dir_t zc_gfs_private; - uint64_t zc_id; - timestruc_t zc_cmtime; /* ctime and mtime, always the same */ -} zfsctl_node_t; +/* + * "Synthetic" filesystem implementation. + */ -typedef struct zfsctl_snapdir { - zfsctl_node_t sd_node; - kmutex_t sd_lock; - avl_tree_t sd_snaps; -} zfsctl_snapdir_t; +/* + * Assert that A implies B. + */ +#define KASSERT_IMPLY(A, B, msg) KASSERT(!(A) || (B), (msg)); -typedef struct { - char *se_name; - vnode_t *se_root; - avl_node_t se_node; -} zfs_snapentry_t; +static MALLOC_DEFINE(M_SFSNODES, "sfs_nodes", "synthetic-fs nodes"); +typedef struct sfs_node { + char sn_name[ZFS_MAX_DATASET_NAME_LEN]; + uint64_t sn_parent_id; + uint64_t sn_id; +} sfs_node_t; + +/* + * Check the parent's ID as well as the node's to account for a chance + * that IDs originating from different domains (snapshot IDs, artifical + * IDs, znode IDs) may clash. + */ static int -snapentry_compare(const void *a, const void *b) +sfs_compare_ids(struct vnode *vp, void *arg) { - const zfs_snapentry_t *sa = a; - const zfs_snapentry_t *sb = b; - int ret = strcmp(sa->se_name, sb->se_name); + sfs_node_t *n1 = vp->v_data; + sfs_node_t *n2 = arg; + bool equal; - if (ret < 0) - return (-1); - else if (ret > 0) - return (1); - else - return (0); + equal = n1->sn_id == n2->sn_id && + n1->sn_parent_id == n2->sn_parent_id; + + /* Zero means equality. */ + return (!equal); } -#ifdef illumos -vnodeops_t *zfsctl_ops_root; -vnodeops_t *zfsctl_ops_snapdir; -vnodeops_t *zfsctl_ops_snapshot; -vnodeops_t *zfsctl_ops_shares; -vnodeops_t *zfsctl_ops_shares_dir; +static int +sfs_vnode_get(const struct mount *mp, int flags, uint64_t parent_id, + uint64_t id, struct vnode **vpp) +{ + sfs_node_t search; + int err; + + search.sn_id = id; + search.sn_parent_id = parent_id; + err = vfs_hash_get(mp, (u_int)id, flags, curthread, vpp, + sfs_compare_ids, &search); + return (err); +} + +static int +sfs_vnode_insert(struct vnode *vp, int flags, uint64_t parent_id, + uint64_t id, struct vnode **vpp) +{ + int err; + + KASSERT(vp->v_data != NULL, ("sfs_vnode_insert with NULL v_data")); + err = vfs_hash_insert(vp, (u_int)id, flags, curthread, vpp, + sfs_compare_ids, vp->v_data); + return (err); +} + +static void +sfs_vnode_remove(struct vnode *vp) +{ + vfs_hash_remove(vp); +} + +typedef void sfs_vnode_setup_fn(vnode_t *vp, void *arg); + +static int +sfs_vgetx(struct mount *mp, int flags, uint64_t parent_id, uint64_t id, + const char *tag, struct vop_vector *vops, + sfs_vnode_setup_fn setup, void *arg, + struct vnode **vpp) +{ + struct vnode *vp; + int error; + + error = sfs_vnode_get(mp, flags, parent_id, id, vpp); + if (error != 0 || *vpp != NULL) { + KASSERT_IMPLY(error == 0, (*vpp)->v_data != NULL, + "sfs vnode with no data"); + return (error); + } + + /* Allocate a new vnode/inode. */ + error = getnewvnode(tag, mp, vops, &vp); + if (error != 0) { + *vpp = NULL; + return (error); + } + + /* + * Exclusively lock the vnode vnode while it's being constructed. + */ + lockmgr(vp->v_vnlock, LK_EXCLUSIVE, NULL); + error = insmntque(vp, mp); + if (error != 0) { + *vpp = NULL; + return (error); + } + + setup(vp, arg); + + error = sfs_vnode_insert(vp, flags, parent_id, id, vpp); + if (error != 0 || *vpp != NULL) { + KASSERT_IMPLY(error == 0, (*vpp)->v_data != NULL, + "sfs vnode with no data"); + return (error); + } + + *vpp = vp; + return (0); +} + +static void +sfs_print_node(sfs_node_t *node) +{ + printf("\tname = %s\n", node->sn_name); + printf("\tparent_id = %ju\n", (uintmax_t)node->sn_parent_id); + printf("\tid = %ju\n", (uintmax_t)node->sn_id); +} + +static sfs_node_t * +sfs_alloc_node(size_t size, const char *name, uint64_t parent_id, uint64_t id) +{ + struct sfs_node *node; + + KASSERT(strlen(name) < sizeof(node->sn_name), + ("sfs node name is too long")); + KASSERT(size >= sizeof(*node), ("sfs node size is too small")); + node = malloc(size, M_SFSNODES, M_WAITOK | M_ZERO); + strlcpy(node->sn_name, name, sizeof(node->sn_name)); + node->sn_parent_id = parent_id; + node->sn_id = id; + + return (node); +} + +static void +sfs_destroy_node(sfs_node_t *node) +{ + free(node, M_SFSNODES); +} + +static void * +sfs_reclaim_vnode(vnode_t *vp) +{ + sfs_node_t *node; + void *data; + + sfs_vnode_remove(vp); + data = vp->v_data; + vp->v_data = NULL; + return (data); +} + +static int +sfs_readdir_common(uint64_t parent_id, uint64_t id, struct vop_readdir_args *ap, + uio_t *uio, off_t *offp) +{ + struct dirent entry; + int error; + + /* Reset ncookies for subsequent use of vfs_read_dirent. */ + if (ap->a_ncookies != NULL) + *ap->a_ncookies = 0; + + if (uio->uio_resid < sizeof(entry)) + return (SET_ERROR(EINVAL)); + + if (uio->uio_offset < 0) + return (SET_ERROR(EINVAL)); + if (uio->uio_offset == 0) { + entry.d_fileno = id; + entry.d_type = DT_DIR; + entry.d_name[0] = '.'; + entry.d_name[1] = '\0'; + entry.d_namlen = 1; + entry.d_reclen = sizeof(entry); + error = vfs_read_dirent(ap, &entry, uio->uio_offset); + if (error != 0) + return (SET_ERROR(error)); + } + + if (uio->uio_offset < sizeof(entry)) + return (SET_ERROR(EINVAL)); + if (uio->uio_offset == sizeof(entry)) { + entry.d_fileno = parent_id; + entry.d_type = DT_DIR; + entry.d_name[0] = '.'; + entry.d_name[1] = '.'; + entry.d_name[2] = '\0'; + entry.d_namlen = 2; + entry.d_reclen = sizeof(entry); + error = vfs_read_dirent(ap, &entry, uio->uio_offset); + if (error != 0) + return (SET_ERROR(error)); + } + + if (offp != NULL) + *offp = 2 * sizeof(entry); + return (0); +} + + +/* + * .zfs inode namespace + * + * We need to generate unique inode numbers for all files and directories + * within the .zfs pseudo-filesystem. We use the following scheme: + * + * ENTRY ZFSCTL_INODE + * .zfs 1 + * .zfs/snapshot 2 + * .zfs/snapshot/ objectid(snap) + */ +#define ZFSCTL_INO_SNAP(id) (id) -static const fs_operation_def_t zfsctl_tops_root[]; -static const fs_operation_def_t zfsctl_tops_snapdir[]; -static const fs_operation_def_t zfsctl_tops_snapshot[]; -static const fs_operation_def_t zfsctl_tops_shares[]; -#else static struct vop_vector zfsctl_ops_root; static struct vop_vector zfsctl_ops_snapdir; static struct vop_vector zfsctl_ops_snapshot; -static struct vop_vector zfsctl_ops_shares; static struct vop_vector zfsctl_ops_shares_dir; -#endif -static vnode_t *zfsctl_mknode_snapdir(vnode_t *); -static vnode_t *zfsctl_mknode_shares(vnode_t *); -static vnode_t *zfsctl_snapshot_mknode(vnode_t *, uint64_t objset); -static int zfsctl_unmount_snap(zfs_snapentry_t *, int, cred_t *); - -#ifdef illumos -static gfs_opsvec_t zfsctl_opsvec[] = { - { ".zfs", zfsctl_tops_root, &zfsctl_ops_root }, - { ".zfs/snapshot", zfsctl_tops_snapdir, &zfsctl_ops_snapdir }, - { ".zfs/snapshot/vnode", zfsctl_tops_snapshot, &zfsctl_ops_snapshot }, - { ".zfs/shares", zfsctl_tops_shares, &zfsctl_ops_shares_dir }, - { ".zfs/shares/vnode", zfsctl_tops_shares, &zfsctl_ops_shares }, - { NULL } -}; -#endif - -/* - * Root directory elements. We only have two entries - * snapshot and shares. - */ -static gfs_dirent_t zfsctl_root_entries[] = { - { "snapshot", zfsctl_mknode_snapdir, GFS_CACHE_VNODE }, - { "shares", zfsctl_mknode_shares, GFS_CACHE_VNODE }, - { NULL } -}; - -/* include . and .. in the calculation */ -#define NROOT_ENTRIES ((sizeof (zfsctl_root_entries) / \ - sizeof (gfs_dirent_t)) + 1) - - -/* - * Initialize the various GFS pieces we'll need to create and manipulate .zfs - * directories. This is called from the ZFS init routine, and initializes the - * vnode ops vectors that we'll be using. - */ void zfsctl_init(void) { -#ifdef illumos - VERIFY(gfs_make_opsvec(zfsctl_opsvec) == 0); -#endif } void zfsctl_fini(void) { -#ifdef illumos - /* - * Remove vfsctl vnode ops - */ - if (zfsctl_ops_root) - vn_freevnodeops(zfsctl_ops_root); - if (zfsctl_ops_snapdir) - vn_freevnodeops(zfsctl_ops_snapdir); - if (zfsctl_ops_snapshot) - vn_freevnodeops(zfsctl_ops_snapshot); - if (zfsctl_ops_shares) - vn_freevnodeops(zfsctl_ops_shares); - if (zfsctl_ops_shares_dir) - vn_freevnodeops(zfsctl_ops_shares_dir); - - zfsctl_ops_root = NULL; - zfsctl_ops_snapdir = NULL; - zfsctl_ops_snapshot = NULL; - zfsctl_ops_shares = NULL; - zfsctl_ops_shares_dir = NULL; -#endif /* illumos */ } boolean_t @@ -208,106 +321,114 @@ zfsctl_is_node(vnode_t *vp) return (vn_matchops(vp, zfsctl_ops_root) || vn_matchops(vp, zfsctl_ops_snapdir) || vn_matchops(vp, zfsctl_ops_snapshot) || - vn_matchops(vp, zfsctl_ops_shares) || vn_matchops(vp, zfsctl_ops_shares_dir)); } -/* - * Return the inode number associated with the 'snapshot' or - * 'shares' directory. - */ -/* ARGSUSED */ -static ino64_t -zfsctl_root_inode_cb(vnode_t *vp, int index) -{ - zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; +typedef struct zfsctl_root { + sfs_node_t node; + sfs_node_t *snapdir; + timestruc_t cmtime; +} zfsctl_root_t; - ASSERT(index < 2); - - if (index == 0) - return (ZFSCTL_INO_SNAPDIR); - - return (zfsvfs->z_shares_dir); -} /* - * Create the '.zfs' directory. This directory is cached as part of the VFS - * structure. This results in a hold on the vfs_t. The code in zfs_umount() - * therefore checks against a vfs_count of 2 instead of 1. This reference - * is removed when the ctldir is destroyed in the unmount. + * Create the '.zfs' directory. */ void zfsctl_create(zfsvfs_t *zfsvfs) { - vnode_t *vp, *rvp; - zfsctl_node_t *zcp; + zfsctl_root_t *dot_zfs; + sfs_node_t *snapdir; + vnode_t *rvp; uint64_t crtime[2]; ASSERT(zfsvfs->z_ctldir == NULL); - vp = gfs_root_create(sizeof (zfsctl_node_t), zfsvfs->z_vfs, - &zfsctl_ops_root, ZFSCTL_INO_ROOT, zfsctl_root_entries, - zfsctl_root_inode_cb, MAXNAMELEN, NULL, NULL); - zcp = vp->v_data; - zcp->zc_id = ZFSCTL_INO_ROOT; + snapdir = sfs_alloc_node(sizeof(*snapdir), "snapshot", ZFSCTL_INO_ROOT, + ZFSCTL_INO_SNAPDIR); + dot_zfs = (zfsctl_root_t *)sfs_alloc_node(sizeof(*dot_zfs), ".zfs", 0, + ZFSCTL_INO_ROOT); + dot_zfs->snapdir = snapdir; VERIFY(VFS_ROOT(zfsvfs->z_vfs, LK_EXCLUSIVE, &rvp) == 0); VERIFY(0 == sa_lookup(VTOZ(rvp)->z_sa_hdl, SA_ZPL_CRTIME(zfsvfs), - &crtime, sizeof (crtime))); - ZFS_TIME_DECODE(&zcp->zc_cmtime, crtime); - VN_URELE(rvp); + &crtime, sizeof(crtime))); + ZFS_TIME_DECODE(&dot_zfs->cmtime, crtime); + vput(rvp); - /* - * We're only faking the fact that we have a root of a filesystem for - * the sake of the GFS interfaces. Undo the flag manipulation it did - * for us. - */ - vp->v_vflag &= ~VV_ROOT; - - zfsvfs->z_ctldir = vp; - - VOP_UNLOCK(vp, 0); + zfsvfs->z_ctldir = dot_zfs; } /* * Destroy the '.zfs' directory. Only called when the filesystem is unmounted. - * There might still be more references if we were force unmounted, but only - * new zfs_inactive() calls can occur and they don't reference .zfs + * The nodes must not have any associated vnodes by now as they should be + * vflush-ed. */ void zfsctl_destroy(zfsvfs_t *zfsvfs) { - VN_RELE(zfsvfs->z_ctldir); + sfs_destroy_node(zfsvfs->z_ctldir->snapdir); + sfs_destroy_node((sfs_node_t *)zfsvfs->z_ctldir); zfsvfs->z_ctldir = NULL; } +static int +zfsctl_fs_root_vnode(struct mount *mp, void *arg __unused, int flags, + struct vnode **vpp) +{ + return (VFS_ROOT(mp, flags, vpp)); +} + +static void +zfsctl_common_vnode_setup(vnode_t *vp, void *arg) +{ + ASSERT_VOP_ELOCKED(vp, __func__); + + /* We support shared locking. */ + VN_LOCK_ASHARE(vp); + vp->v_type = VDIR; + vp->v_data = arg; +} + +static int +zfsctl_root_vnode(struct mount *mp, void *arg __unused, int flags, + struct vnode **vpp) +{ + void *node; + int err; + + node = ((zfsvfs_t*)mp->mnt_data)->z_ctldir; + err = sfs_vgetx(mp, flags, 0, ZFSCTL_INO_ROOT, "zfs", &zfsctl_ops_root, + zfsctl_common_vnode_setup, node, vpp); + return (err); +} + +static int +zfsctl_snapdir_vnode(struct mount *mp, void *arg __unused, int flags, + struct vnode **vpp) +{ + void *node; + int err; + + node = ((zfsvfs_t*)mp->mnt_data)->z_ctldir->snapdir; + err = sfs_vgetx(mp, flags, ZFSCTL_INO_ROOT, ZFSCTL_INO_SNAPDIR, "zfs", + &zfsctl_ops_snapdir, zfsctl_common_vnode_setup, node, vpp); + return (err); +} + /* * Given a root znode, retrieve the associated .zfs directory. * Add a hold to the vnode and return it. */ -vnode_t * -zfsctl_root(znode_t *zp) +int +zfsctl_root(zfsvfs_t *zfsvfs, int flags, vnode_t **vpp) { - ASSERT(zfs_has_ctldir(zp)); - VN_HOLD(zp->z_zfsvfs->z_ctldir); - return (zp->z_zfsvfs->z_ctldir); -} + vnode_t *vp; + int error; -static int -zfsctl_common_print(ap) - struct vop_print_args /* { - struct vnode *a_vp; - } */ *ap; -{ - vnode_t *vp = ap->a_vp; - gfs_file_t *fp = vp->v_data; - - printf(" parent = %p\n", fp->gfs_parent); - printf(" type = %d\n", fp->gfs_type); - printf(" index = %d\n", fp->gfs_index); - printf(" ino = %ju\n", (uintmax_t)fp->gfs_ino); - return (0); + error = zfsctl_root_vnode(zfsvfs->z_vfs, NULL, flags, vpp); + return (error); } /* @@ -350,18 +471,8 @@ zfsctl_common_access(ap) { accmode_t accmode = ap->a_accmode; -#ifdef TODO - if (flags & V_ACE_MASK) { - if (accmode & ACE_ALL_WRITE_PERMS) - return (SET_ERROR(EACCES)); - } else { -#endif - if (accmode & VWRITE) - return (SET_ERROR(EACCES)); -#ifdef TODO - } -#endif - + if (accmode & VWRITE) + return (SET_ERROR(EACCES)); return (0); } @@ -372,6 +483,9 @@ static void zfsctl_common_getattr(vnode_t *vp, vattr_t *vap) { timestruc_t now; + sfs_node_t *node; + + node = vp->v_data; vap->va_uid = 0; vap->va_gid = 0; @@ -394,6 +508,11 @@ zfsctl_common_getattr(vnode_t *vp, vattr_t *vap) vap->va_atime = now; /* FreeBSD: Reset chflags(2) flags. */ vap->va_flags = 0; + + vap->va_nodeid = node->sn_id; + + /* At least '.' and '..'. */ + vap->va_nlink = 2; } /*ARGSUSED*/ @@ -406,81 +525,46 @@ zfsctl_common_fid(ap) { vnode_t *vp = ap->a_vp; fid_t *fidp = (void *)ap->a_fid; - zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; - zfsctl_node_t *zcp = vp->v_data; - uint64_t object = zcp->zc_id; + sfs_node_t *node = vp->v_data; + uint64_t object = node->sn_id; zfid_short_t *zfid; int i; - ZFS_ENTER(zfsvfs); - -#ifdef illumos - if (fidp->fid_len < SHORT_FID_LEN) { - fidp->fid_len = SHORT_FID_LEN; - ZFS_EXIT(zfsvfs); - return (SET_ERROR(ENOSPC)); - } -#endif - zfid = (zfid_short_t *)fidp; - zfid->zf_len = SHORT_FID_LEN; - for (i = 0; i < sizeof (zfid->zf_object); i++) + for (i = 0; i < sizeof(zfid->zf_object); i++) zfid->zf_object[i] = (uint8_t)(object >> (8 * i)); - /* .zfs znodes always have a generation number of 0 */ - for (i = 0; i < sizeof (zfid->zf_gen); i++) + /* .zfs nodes always have a generation number of 0 */ + for (i = 0; i < sizeof(zfid->zf_gen); i++) zfid->zf_gen[i] = 0; - ZFS_EXIT(zfsvfs); return (0); } - -/*ARGSUSED*/ static int -zfsctl_shares_fid(ap) - struct vop_fid_args /* { +zfsctl_common_reclaim(ap) + struct vop_reclaim_args /* { struct vnode *a_vp; - struct fid *a_fid; + struct thread *a_td; } */ *ap; { - vnode_t *vp = ap->a_vp; - fid_t *fidp = (void *)ap->a_fid; - zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; - znode_t *dzp; - int error; + vnode_t *vp = ap->a_vp; - ZFS_ENTER(zfsvfs); - - if (zfsvfs->z_shares_dir == 0) { - ZFS_EXIT(zfsvfs); - return (SET_ERROR(ENOTSUP)); - } - - if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) { - error = VOP_FID(ZTOV(dzp), fidp); - VN_RELE(ZTOV(dzp)); - } - - ZFS_EXIT(zfsvfs); - return (error); + (void) sfs_reclaim_vnode(vp); + return (0); } -/* - * .zfs inode namespace - * - * We need to generate unique inode numbers for all files and directories - * within the .zfs pseudo-filesystem. We use the following scheme: - * - * ENTRY ZFSCTL_INODE - * .zfs 1 - * .zfs/snapshot 2 - * .zfs/snapshot/ objectid(snap) - */ - -#define ZFSCTL_INO_SNAP(id) (id) +static int +zfsctl_common_print(ap) + struct vop_print_args /* { + struct vnode *a_vp; + } */ *ap; +{ + sfs_print_node(ap->a_vp->v_data); + return (0); +} /* * Get root directory attributes. @@ -496,156 +580,132 @@ zfsctl_root_getattr(ap) { struct vnode *vp = ap->a_vp; struct vattr *vap = ap->a_vap; - zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; - zfsctl_node_t *zcp = vp->v_data; - - ZFS_ENTER(zfsvfs); - vap->va_nodeid = ZFSCTL_INO_ROOT; - vap->va_nlink = vap->va_size = NROOT_ENTRIES; - vap->va_mtime = vap->va_ctime = zcp->zc_cmtime; - vap->va_birthtime = vap->va_ctime; + zfsctl_root_t *node = vp->v_data; zfsctl_common_getattr(vp, vap); - ZFS_EXIT(zfsvfs); + vap->va_ctime = node->cmtime; + vap->va_mtime = vap->va_ctime; + vap->va_birthtime = vap->va_ctime; + vap->va_nlink += 1; /* snapdir */ + vap->va_size = vap->va_nlink; + return (0); +} +/* + * When we lookup "." we still can be asked to lock it + * differently, can't we? + */ +int +zfsctl_relock_dot(vnode_t *dvp, int ltype) +{ + vref(dvp); + if (ltype != VOP_ISLOCKED(dvp)) { + if (ltype == LK_EXCLUSIVE) + vn_lock(dvp, LK_UPGRADE | LK_RETRY); + else /* if (ltype == LK_SHARED) */ + vn_lock(dvp, LK_DOWNGRADE | LK_RETRY); + + /* Relock for the "." case may left us with reclaimed vnode. */ + if ((dvp->v_iflag & VI_DOOMED) != 0) { + vrele(dvp); + return (SET_ERROR(ENOENT)); + } + } return (0); } /* * Special case the handling of "..". */ -/* ARGSUSED */ int -zfsctl_root_lookup(vnode_t *dvp, char *nm, vnode_t **vpp, pathname_t *pnp, - int flags, vnode_t *rdir, cred_t *cr, caller_context_t *ct, - int *direntflags, pathname_t *realpnp) -{ - zfsvfs_t *zfsvfs = dvp->v_vfsp->vfs_data; - int err; - - /* - * No extended attributes allowed under .zfs - */ - if (flags & LOOKUP_XATTR) - return (SET_ERROR(EINVAL)); - - ZFS_ENTER(zfsvfs); - - if (strcmp(nm, "..") == 0) { -#ifdef illumos - err = VFS_ROOT(dvp->v_vfsp, LK_EXCLUSIVE, vpp); -#else - /* - * NB: can not use VFS_ROOT here as it would acquire - * the vnode lock of the parent (root) vnode while - * holding the child's (.zfs) lock. - */ - znode_t *rootzp; - - err = zfs_zget(zfsvfs, zfsvfs->z_root, &rootzp); - if (err == 0) - *vpp = ZTOV(rootzp); -#endif - } else { - err = gfs_vop_lookup(dvp, nm, vpp, pnp, flags, rdir, - cr, ct, direntflags, realpnp); - } - - ZFS_EXIT(zfsvfs); - - return (err); -} - -static int -zfsctl_freebsd_root_lookup(ap) +zfsctl_root_lookup(ap) struct vop_lookup_args /* { struct vnode *a_dvp; struct vnode **a_vpp; struct componentname *a_cnp; } */ *ap; { + struct componentname *cnp = ap->a_cnp; vnode_t *dvp = ap->a_dvp; vnode_t **vpp = ap->a_vpp; cred_t *cr = ap->a_cnp->cn_cred; int flags = ap->a_cnp->cn_flags; int lkflags = ap->a_cnp->cn_lkflags; int nameiop = ap->a_cnp->cn_nameiop; - char nm[NAME_MAX + 1]; int err; + int ltype; - if ((flags & ISLASTCN) && (nameiop == RENAME || nameiop == CREATE)) - return (EOPNOTSUPP); + ASSERT(dvp->v_type == VDIR); - ASSERT(ap->a_cnp->cn_namelen < sizeof(nm)); - strlcpy(nm, ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen + 1); -relookup: - err = zfsctl_root_lookup(dvp, nm, vpp, NULL, 0, NULL, cr, NULL, NULL, NULL); - if (err == 0 && (nm[0] != '.' || nm[1] != '\0')) { - if (flags & ISDOTDOT) { - VOP_UNLOCK(dvp, 0); - err = vn_lock(*vpp, lkflags); - if (err != 0) { - vrele(*vpp); - *vpp = NULL; - } - vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); - } else { - err = vn_lock(*vpp, LK_EXCLUSIVE); - if (err != 0) { - VERIFY3S(err, ==, ENOENT); - goto relookup; - } - } + if ((flags & ISLASTCN) != 0 && nameiop != LOOKUP) + return (SET_ERROR(ENOTSUP)); + + if (cnp->cn_namelen == 1 && *cnp->cn_nameptr == '.') { + err = zfsctl_relock_dot(dvp, lkflags & LK_TYPE_MASK); + if (err == 0) + *vpp = dvp; + } else if ((flags & ISDOTDOT) != 0) { + err = vn_vget_ino_gen(dvp, zfsctl_fs_root_vnode, NULL, + lkflags, vpp); + } else if (strncmp(cnp->cn_nameptr, "snapshot", cnp->cn_namelen) == 0) { + err = zfsctl_snapdir_vnode(dvp->v_mount, NULL, lkflags, vpp); + } else { + err = SET_ERROR(ENOENT); } + if (err != 0) + *vpp = NULL; return (err); } static int -zfsctl_root_print(ap) - struct vop_print_args /* { +zfsctl_root_readdir(ap) + struct vop_readdir_args /* { struct vnode *a_vp; + struct uio *a_uio; + struct ucred *a_cred; + int *a_eofflag; + int *ncookies; + u_long **a_cookies; } */ *ap; { - printf(" .zfs node\n"); - zfsctl_common_print(ap); + struct dirent entry; + vnode_t *vp = ap->a_vp; + zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; + zfsctl_root_t *node = vp->v_data; + uio_t *uio = ap->a_uio; + int *eofp = ap->a_eofflag; + off_t dots_offset; + int error; + + ASSERT(vp->v_type == VDIR); + + error = sfs_readdir_common(zfsvfs->z_root, ZFSCTL_INO_ROOT, ap, uio, + &dots_offset); + if (error != 0) { + if (error == ENAMETOOLONG) /* ran out of destination space */ + error = 0; + return (error); + } + if (uio->uio_offset != dots_offset) + return (SET_ERROR(EINVAL)); + + CTASSERT(sizeof(node->snapdir->sn_name) <= sizeof(entry.d_name)); + entry.d_fileno = node->snapdir->sn_id; + entry.d_type = DT_DIR; + strcpy(entry.d_name, node->snapdir->sn_name); + entry.d_namlen = strlen(entry.d_name); + entry.d_reclen = sizeof(entry); + error = vfs_read_dirent(ap, &entry, uio->uio_offset); + if (error != 0) { + if (error == ENAMETOOLONG) + error = 0; + return (SET_ERROR(error)); + } + if (eofp != NULL) + *eofp = 1; return (0); } -#ifdef illumos -static int -zfsctl_pathconf(vnode_t *vp, int cmd, ulong_t *valp, cred_t *cr, - caller_context_t *ct) -{ - /* - * We only care about ACL_ENABLED so that libsec can - * display ACL correctly and not default to POSIX draft. - */ - if (cmd == _PC_ACL_ENABLED) { - *valp = _ACL_ACE_ENABLED; - return (0); - } - - return (fs_pathconf(vp, cmd, valp, cr, ct)); -} -#endif /* illumos */ - -#ifdef illumos -static const fs_operation_def_t zfsctl_tops_root[] = { - { VOPNAME_OPEN, { .vop_open = zfsctl_common_open } }, - { VOPNAME_CLOSE, { .vop_close = zfsctl_common_close } }, - { VOPNAME_IOCTL, { .error = fs_inval } }, - { VOPNAME_GETATTR, { .vop_getattr = zfsctl_root_getattr } }, - { VOPNAME_ACCESS, { .vop_access = zfsctl_common_access } }, - { VOPNAME_READDIR, { .vop_readdir = gfs_vop_readdir } }, - { VOPNAME_LOOKUP, { .vop_lookup = zfsctl_root_lookup } }, - { VOPNAME_SEEK, { .vop_seek = fs_seek } }, - { VOPNAME_INACTIVE, { .vop_inactive = gfs_vop_inactive } }, - { VOPNAME_PATHCONF, { .vop_pathconf = zfsctl_pathconf } }, - { VOPNAME_FID, { .vop_fid = zfsctl_common_fid } }, - { NULL } -}; -#endif /* illumos */ - static struct vop_vector zfsctl_ops_root = { .vop_default = &default_vnodeops, .vop_open = zfsctl_common_open, @@ -653,29 +713,19 @@ static struct vop_vector zfsctl_ops_root = { .vop_ioctl = VOP_EINVAL, .vop_getattr = zfsctl_root_getattr, .vop_access = zfsctl_common_access, - .vop_readdir = gfs_vop_readdir, - .vop_lookup = zfsctl_freebsd_root_lookup, + .vop_readdir = zfsctl_root_readdir, + .vop_lookup = zfsctl_root_lookup, .vop_inactive = VOP_NULL, - .vop_reclaim = gfs_vop_reclaim, -#ifdef TODO - .vop_pathconf = zfsctl_pathconf, -#endif + .vop_reclaim = zfsctl_common_reclaim, .vop_fid = zfsctl_common_fid, - .vop_print = zfsctl_root_print, + .vop_print = zfsctl_common_print, }; -/* - * Gets the full dataset name that corresponds to the given snapshot name - * Example: - * zfsctl_snapshot_zname("snap1") -> "mypool/myfs@snap1" - */ static int zfsctl_snapshot_zname(vnode_t *vp, const char *name, int len, char *zname) { objset_t *os = ((zfsvfs_t *)((vp)->v_vfsp->vfs_data))->z_os; - if (zfs_component_namecheck(name, NULL, NULL) != 0) - return (SET_ERROR(EILSEQ)); dmu_objset_name(os, zname); if (strlen(zname) + 1 + strlen(name) >= len) return (SET_ERROR(ENAMETOOLONG)); @@ -685,272 +735,62 @@ zfsctl_snapshot_zname(vnode_t *vp, const char *name, int len, char *zname) } static int -zfsctl_unmount_snap(zfs_snapentry_t *sep, int fflags, cred_t *cr) +zfsctl_snapshot_lookup(vnode_t *vp, const char *name, uint64_t *id) { - vnode_t *svp = sep->se_root; - int error; - - ASSERT(vn_ismntpt(svp)); - - /* this will be dropped by dounmount() */ - if ((error = vn_vfswlock(svp)) != 0) - return (error); - -#ifdef illumos - VN_HOLD(svp); - error = dounmount(vn_mountedvfs(svp), fflags, cr); - if (error) { - VN_RELE(svp); - return (error); - } - - /* - * We can't use VN_RELE(), as that will try to invoke - * zfsctl_snapdir_inactive(), which would cause us to destroy - * the sd_lock mutex held by our caller. - */ - ASSERT(svp->v_count == 1); - gfs_vop_reclaim(svp, cr, NULL); - - kmem_free(sep->se_name, strlen(sep->se_name) + 1); - kmem_free(sep, sizeof (zfs_snapentry_t)); - - return (0); -#else - vfs_ref(vn_mountedvfs(svp)); - return (dounmount(vn_mountedvfs(svp), fflags, curthread)); -#endif -} - -#ifdef illumos -static void -zfsctl_rename_snap(zfsctl_snapdir_t *sdp, zfs_snapentry_t *sep, const char *nm) -{ - avl_index_t where; - vfs_t *vfsp; - refstr_t *pathref; - char newpath[MAXNAMELEN]; - char *tail; - - ASSERT(MUTEX_HELD(&sdp->sd_lock)); - ASSERT(sep != NULL); - - vfsp = vn_mountedvfs(sep->se_root); - ASSERT(vfsp != NULL); - - vfs_lock_wait(vfsp); - - /* - * Change the name in the AVL tree. - */ - avl_remove(&sdp->sd_snaps, sep); - kmem_free(sep->se_name, strlen(sep->se_name) + 1); - sep->se_name = kmem_alloc(strlen(nm) + 1, KM_SLEEP); - (void) strcpy(sep->se_name, nm); - VERIFY(avl_find(&sdp->sd_snaps, sep, &where) == NULL); - avl_insert(&sdp->sd_snaps, sep, where); - - /* - * Change the current mountpoint info: - * - update the tail of the mntpoint path - * - update the tail of the resource path - */ - pathref = vfs_getmntpoint(vfsp); - (void) strncpy(newpath, refstr_value(pathref), sizeof (newpath)); - VERIFY((tail = strrchr(newpath, '/')) != NULL); - *(tail+1) = '\0'; - ASSERT3U(strlen(newpath) + strlen(nm), <, sizeof (newpath)); - (void) strcat(newpath, nm); - refstr_rele(pathref); - vfs_setmntpoint(vfsp, newpath, 0); - - pathref = vfs_getresource(vfsp); - (void) strncpy(newpath, refstr_value(pathref), sizeof (newpath)); - VERIFY((tail = strrchr(newpath, '@')) != NULL); - *(tail+1) = '\0'; - ASSERT3U(strlen(newpath) + strlen(nm), <, sizeof (newpath)); - (void) strcat(newpath, nm); - refstr_rele(pathref); - vfs_setresource(vfsp, newpath, 0); - - vfs_unlock(vfsp); -} -#endif /* illumos */ - -#ifdef illumos -/*ARGSUSED*/ -static int -zfsctl_snapdir_rename(vnode_t *sdvp, char *snm, vnode_t *tdvp, char *tnm, - cred_t *cr, caller_context_t *ct, int flags) -{ - zfsctl_snapdir_t *sdp = sdvp->v_data; - zfs_snapentry_t search, *sep; - zfsvfs_t *zfsvfs; - avl_index_t where; - char from[ZFS_MAX_DATASET_NAME_LEN], to[ZFS_MAX_DATASET_NAME_LEN]; - char real[ZFS_MAX_DATASET_NAME_LEN], fsname[ZFS_MAX_DATASET_NAME_LEN]; + objset_t *os = ((zfsvfs_t *)((vp)->v_vfsp->vfs_data))->z_os; int err; - zfsvfs = sdvp->v_vfsp->vfs_data; - ZFS_ENTER(zfsvfs); - - if ((flags & FIGNORECASE) || zfsvfs->z_case == ZFS_CASE_INSENSITIVE) { - err = dmu_snapshot_realname(zfsvfs->z_os, snm, real, - sizeof (real), NULL); - if (err == 0) { - snm = real; - } else if (err != ENOTSUP) { - ZFS_EXIT(zfsvfs); - return (err); - } - } - - ZFS_EXIT(zfsvfs); - - dmu_objset_name(zfsvfs->z_os, fsname); - - err = zfsctl_snapshot_zname(sdvp, snm, sizeof (from), from); - if (err == 0) - err = zfsctl_snapshot_zname(tdvp, tnm, sizeof (to), to); - if (err == 0) - err = zfs_secpolicy_rename_perms(from, to, cr); - if (err != 0) - return (err); - - /* - * Cannot move snapshots out of the snapdir. - */ - if (sdvp != tdvp) - return (SET_ERROR(EINVAL)); - - if (strcmp(snm, tnm) == 0) - return (0); - - mutex_enter(&sdp->sd_lock); - - search.se_name = (char *)snm; - if ((sep = avl_find(&sdp->sd_snaps, &search, &where)) == NULL) { - mutex_exit(&sdp->sd_lock); - return (SET_ERROR(ENOENT)); - } - - err = dsl_dataset_rename_snapshot(fsname, snm, tnm, 0); - if (err == 0) - zfsctl_rename_snap(sdp, sep, tnm); - - mutex_exit(&sdp->sd_lock); - + err = dsl_dataset_snap_lookup(dmu_objset_ds(os), name, id); return (err); } -#endif /* illumos */ - -#ifdef illumos -/* ARGSUSED */ -static int -zfsctl_snapdir_remove(vnode_t *dvp, char *name, vnode_t *cwd, cred_t *cr, - caller_context_t *ct, int flags) -{ - zfsctl_snapdir_t *sdp = dvp->v_data; - zfs_snapentry_t *sep; - zfs_snapentry_t search; - zfsvfs_t *zfsvfs; - char snapname[ZFS_MAX_DATASET_NAME_LEN]; - char real[ZFS_MAX_DATASET_NAME_LEN]; - int err; - - zfsvfs = dvp->v_vfsp->vfs_data; - ZFS_ENTER(zfsvfs); - - if ((flags & FIGNORECASE) || zfsvfs->z_case == ZFS_CASE_INSENSITIVE) { - - err = dmu_snapshot_realname(zfsvfs->z_os, name, real, - sizeof (real), NULL); - if (err == 0) { - name = real; - } else if (err != ENOTSUP) { - ZFS_EXIT(zfsvfs); - return (err); - } - } - - ZFS_EXIT(zfsvfs); - - err = zfsctl_snapshot_zname(dvp, name, sizeof (snapname), snapname); - if (err == 0) - err = zfs_secpolicy_destroy_perms(snapname, cr); - if (err != 0) - return (err); - - mutex_enter(&sdp->sd_lock); - - search.se_name = name; - sep = avl_find(&sdp->sd_snaps, &search, NULL); - if (sep) { - avl_remove(&sdp->sd_snaps, sep); - err = zfsctl_unmount_snap(sep, MS_FORCE, cr); - if (err != 0) - avl_add(&sdp->sd_snaps, sep); - else - err = dsl_destroy_snapshot(snapname, B_FALSE); - } else { - err = SET_ERROR(ENOENT); - } - - mutex_exit(&sdp->sd_lock); - - return (err); -} -#endif /* illumos */ /* - * This creates a snapshot under '.zfs/snapshot'. + * Given a vnode get a root vnode of a filesystem mounted on top of + * the vnode, if any. The root vnode is referenced and locked. + * If no filesystem is mounted then the orinal vnode remains referenced + * and locked. If any error happens the orinal vnode is unlocked and + * released. */ -/* ARGSUSED */ static int -zfsctl_snapdir_mkdir(vnode_t *dvp, char *dirname, vattr_t *vap, vnode_t **vpp, - cred_t *cr, caller_context_t *cc, int flags, vsecattr_t *vsecp) +zfsctl_mounted_here(vnode_t **vpp, int flags) { - zfsvfs_t *zfsvfs = dvp->v_vfsp->vfs_data; - char name[ZFS_MAX_DATASET_NAME_LEN]; + struct mount *mp; int err; - static enum symfollow follow = NO_FOLLOW; - static enum uio_seg seg = UIO_SYSSPACE; - if (zfs_component_namecheck(dirname, NULL, NULL) != 0) - return (SET_ERROR(EILSEQ)); + ASSERT_VOP_LOCKED(*vpp, __func__); + ASSERT3S((*vpp)->v_type, ==, VDIR); - dmu_objset_name(zfsvfs->z_os, name); - - *vpp = NULL; - - err = zfs_secpolicy_snapshot_perms(name, cr); - if (err != 0) + if ((mp = (*vpp)->v_mountedhere) != NULL) { + err = vfs_busy(mp, 0); + KASSERT(err == 0, ("vfs_busy(mp, 0) failed with %d", err)); + KASSERT(vrefcnt(*vpp) > 1, ("unreferenced mountpoint")); + vput(*vpp); + err = VFS_ROOT(mp, flags, vpp); + vfs_unbusy(mp); return (err); - - if (err == 0) { - err = dmu_objset_snapshot_one(name, dirname); - if (err != 0) - return (err); - err = lookupnameat(dirname, seg, follow, NULL, vpp, dvp); } - - return (err); + return (EJUSTRETURN); } -static int -zfsctl_freebsd_snapdir_mkdir(ap) - struct vop_mkdir_args /* { - struct vnode *a_dvp; - struct vnode **a_vpp; - struct componentname *a_cnp; - struct vattr *a_vap; - } */ *ap; +typedef struct { + const char *snap_name; + uint64_t snap_id; +} snapshot_setup_arg_t; + +static void +zfsctl_snapshot_vnode_setup(vnode_t *vp, void *arg) { + snapshot_setup_arg_t *ssa = arg; + sfs_node_t *node; - ASSERT(ap->a_cnp->cn_flags & SAVENAME); + ASSERT_VOP_ELOCKED(vp, __func__); - return (zfsctl_snapdir_mkdir(ap->a_dvp, ap->a_cnp->cn_nameptr, NULL, - ap->a_vpp, ap->a_cnp->cn_cred, NULL, 0, NULL)); + node = sfs_alloc_node(sizeof(sfs_node_t), + ssa->snap_name, ZFSCTL_INO_SNAPDIR, ssa->snap_id); + zfsctl_common_vnode_setup(vp, node); + + /* We have to support recursive locking. */ + VN_LOCK_AREC(vp); } /* @@ -970,150 +810,100 @@ zfsctl_snapdir_lookup(ap) vnode_t *dvp = ap->a_dvp; vnode_t **vpp = ap->a_vpp; struct componentname *cnp = ap->a_cnp; - char nm[NAME_MAX + 1]; - zfsctl_snapdir_t *sdp = dvp->v_data; - objset_t *snap; - char snapname[ZFS_MAX_DATASET_NAME_LEN]; - char real[ZFS_MAX_DATASET_NAME_LEN]; + char name[NAME_MAX + 1]; + char fullname[ZFS_MAX_DATASET_NAME_LEN]; char *mountpoint; - zfs_snapentry_t *sep, search; size_t mountpoint_len; - avl_index_t where; zfsvfs_t *zfsvfs = dvp->v_vfsp->vfs_data; + uint64_t snap_id; + int nameiop = cnp->cn_nameiop; + int lkflags = cnp->cn_lkflags; + int flags = cnp->cn_flags; int err; - int ltype, flags = 0; - - /* - * No extended attributes allowed under .zfs - */ - if (flags & LOOKUP_XATTR) - return (SET_ERROR(EINVAL)); - ASSERT(ap->a_cnp->cn_namelen < sizeof(nm)); - strlcpy(nm, ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen + 1); ASSERT(dvp->v_type == VDIR); - *vpp = NULL; + if ((flags & ISLASTCN) != 0 && nameiop != LOOKUP) + return (SET_ERROR(ENOTSUP)); - /* - * If we get a recursive call, that means we got called - * from the domount() code while it was trying to look up the - * spec (which looks like a local path for zfs). We need to - * add some flag to domount() to tell it not to do this lookup. - */ - if (MUTEX_HELD(&sdp->sd_lock)) - return (SET_ERROR(ENOENT)); - - ZFS_ENTER(zfsvfs); - if (gfs_lookup_dot(vpp, dvp, zfsvfs->z_ctldir, nm) == 0) { - if (nm[0] == '.' && nm[1] == '.' && nm[2] =='\0') { - VOP_UNLOCK(dvp, 0); - VERIFY0(vn_lock(*vpp, LK_EXCLUSIVE)); - VERIFY0(vn_lock(dvp, LK_EXCLUSIVE)); - } - ZFS_EXIT(zfsvfs); - return (0); + if (cnp->cn_namelen == 1 && *cnp->cn_nameptr == '.') { + err = zfsctl_relock_dot(dvp, lkflags & LK_TYPE_MASK); + if (err == 0) + *vpp = dvp; + return (err); + } + if (flags & ISDOTDOT) { + err = vn_vget_ino_gen(dvp, zfsctl_root_vnode, NULL, lkflags, + vpp); + return (err); } - if (flags & FIGNORECASE) { - boolean_t conflict = B_FALSE; + if (cnp->cn_namelen >= sizeof(name)) + return (SET_ERROR(ENAMETOOLONG)); - err = dmu_snapshot_realname(zfsvfs->z_os, nm, real, - sizeof (real), &conflict); - if (err == 0) { - strlcpy(nm, real, sizeof(nm)); - } else if (err != ENOTSUP) { - ZFS_EXIT(zfsvfs); + strlcpy(name, ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen + 1); + err = zfsctl_snapshot_lookup(dvp, name, &snap_id); + if (err != 0) + return (SET_ERROR(ENOENT)); + + for (;;) { + snapshot_setup_arg_t ssa; + + ssa.snap_name = name; + ssa.snap_id = snap_id; + err = sfs_vgetx(dvp->v_mount, LK_SHARED, ZFSCTL_INO_SNAPDIR, + snap_id, "zfs", &zfsctl_ops_snapshot, + zfsctl_snapshot_vnode_setup, &ssa, vpp); + if (err != 0) return (err); - } -#if 0 - if (realpnp) - (void) strlcpy(realpnp->pn_buf, nm, - realpnp->pn_bufsize); - if (conflict && direntflags) - *direntflags = ED_CASE_CONFLICT; -#endif - } -relookup: - mutex_enter(&sdp->sd_lock); - search.se_name = (char *)nm; - if ((sep = avl_find(&sdp->sd_snaps, &search, &where)) != NULL) { - *vpp = sep->se_root; - VN_HOLD(*vpp); - err = traverse(vpp, LK_EXCLUSIVE | LK_RETRY); - if (err != 0) { - *vpp = NULL; - } else if (*vpp == sep->se_root) { - /* - * The snapshot was unmounted behind our backs, - * try to remount it. - */ - VERIFY(zfsctl_snapshot_zname(dvp, nm, MAXNAMELEN, snapname) == 0); - goto domount; - } - mutex_exit(&sdp->sd_lock); - ZFS_EXIT(zfsvfs); - return (err); - } + /* Check if a new vnode has just been created. */ + if (VOP_ISLOCKED(*vpp) == LK_EXCLUSIVE) + break; - /* - * The requested snapshot is not currently mounted, look it up. - */ - err = zfsctl_snapshot_zname(dvp, nm, sizeof (snapname), snapname); - if (err != 0) { - mutex_exit(&sdp->sd_lock); - ZFS_EXIT(zfsvfs); /* - * handle "ls *" or "?" in a graceful manner, - * forcing EILSEQ to ENOENT. - * Since shell ultimately passes "*" or "?" as name to lookup + * The vnode must be referenced at least by this thread and + * the mounted snapshot or the thread doing the mounting. + * There can be more references from concurrent lookups. */ - return (err == EILSEQ ? ENOENT : err); - } - if (dmu_objset_hold(snapname, FTAG, &snap) != 0) { - mutex_exit(&sdp->sd_lock); -#ifdef illumos - ZFS_EXIT(zfsvfs); - return (SET_ERROR(ENOENT)); -#else /* !illumos */ - /* Translate errors and add SAVENAME when needed. */ - if ((cnp->cn_flags & ISLASTCN) && cnp->cn_nameiop == CREATE) { - err = EJUSTRETURN; - cnp->cn_flags |= SAVENAME; - } else { - err = SET_ERROR(ENOENT); - } - ZFS_EXIT(zfsvfs); - return (err); -#endif /* illumos */ + KASSERT(vrefcnt(*vpp) > 1, ("found unreferenced mountpoint")); + + /* + * Check if a snapshot is already mounted on top of the vnode. + */ + err = zfsctl_mounted_here(vpp, lkflags); + if (err != EJUSTRETURN) + return (err); + +#ifdef INVARIANTS + /* + * If the vnode not covered yet, then the mount operation + * must be in progress. + */ + VI_LOCK(*vpp); + KASSERT(((*vpp)->v_iflag & VI_MOUNT) != 0, + ("snapshot vnode not covered")); + VI_UNLOCK(*vpp); +#endif + vput(*vpp); + + /* + * In this situation we can loop on uncontested locks and starve + * the thread doing the lengthy, non-trivial mount operation. + */ + kern_yield(PRI_USER); } - sep = kmem_alloc(sizeof (zfs_snapentry_t), KM_SLEEP); - sep->se_name = kmem_alloc(strlen(nm) + 1, KM_SLEEP); - (void) strcpy(sep->se_name, nm); - *vpp = sep->se_root = zfsctl_snapshot_mknode(dvp, dmu_objset_id(snap)); - avl_insert(&sdp->sd_snaps, sep, where); + VERIFY0(zfsctl_snapshot_zname(dvp, name, sizeof(fullname), fullname)); - dmu_objset_rele(snap, FTAG); -domount: mountpoint_len = strlen(dvp->v_vfsp->mnt_stat.f_mntonname) + - strlen("/" ZFS_CTLDIR_NAME "/snapshot/") + strlen(nm) + 1; + strlen("/" ZFS_CTLDIR_NAME "/snapshot/") + strlen(name) + 1; mountpoint = kmem_alloc(mountpoint_len, KM_SLEEP); (void) snprintf(mountpoint, mountpoint_len, "%s/" ZFS_CTLDIR_NAME "/snapshot/%s", - dvp->v_vfsp->mnt_stat.f_mntonname, nm); - mutex_exit(&sdp->sd_lock); + dvp->v_vfsp->mnt_stat.f_mntonname, name); - /* - * The vnode may get reclaimed between dropping sd_lock and - * getting the vnode lock. - * */ - err = vn_lock(*vpp, LK_EXCLUSIVE); - if (err == ENOENT) - goto relookup; - VERIFY0(err); - err = mount_snapshot(curthread, vpp, "zfs", mountpoint, snapname, 0); + err = mount_snapshot(curthread, vpp, "zfs", mountpoint, fullname, 0); kmem_free(mountpoint, mountpoint_len); if (err == 0) { /* @@ -1125,231 +915,79 @@ zfsctl_snapdir_lookup(ap) */ ASSERT(VTOZ(*vpp)->z_zfsvfs != zfsvfs); VTOZ(*vpp)->z_zfsvfs->z_parent = zfsvfs; - (*vpp)->v_flag &= ~VROOT; - } - ZFS_EXIT(zfsvfs); -#ifdef illumos - /* - * If we had an error, drop our hold on the vnode and - * zfsctl_snapshot_inactive() will clean up. - */ - if (err != 0) { - VN_RELE(*vpp); - *vpp = NULL; + /* Clear the root flag (set via VFS_ROOT) as well. */ + (*vpp)->v_vflag &= ~VV_ROOT; } -#else + if (err != 0) *vpp = NULL; -#endif return (err); } -/* ARGSUSED */ -int -zfsctl_shares_lookup(ap) - struct vop_lookup_args /* { - struct vnode *a_dvp; - struct vnode **a_vpp; - struct componentname *a_cnp; - } */ *ap; -{ - vnode_t *dvp = ap->a_dvp; - vnode_t **vpp = ap->a_vpp; - struct componentname *cnp = ap->a_cnp; - zfsvfs_t *zfsvfs = dvp->v_vfsp->vfs_data; - char nm[NAME_MAX + 1]; - znode_t *dzp; - int error; - - ZFS_ENTER(zfsvfs); - - ASSERT(cnp->cn_namelen < sizeof(nm)); - strlcpy(nm, cnp->cn_nameptr, cnp->cn_namelen + 1); - - if (gfs_lookup_dot(vpp, dvp, zfsvfs->z_ctldir, nm) == 0) { - if (nm[0] == '.' && nm[1] == '.' && nm[2] =='\0') { - VOP_UNLOCK(dvp, 0); - VERIFY0(vn_lock(*vpp, LK_EXCLUSIVE)); - VERIFY0(vn_lock(dvp, LK_EXCLUSIVE)); - } - ZFS_EXIT(zfsvfs); - return (0); - } - - if (zfsvfs->z_shares_dir == 0) { - ZFS_EXIT(zfsvfs); - return (SET_ERROR(ENOTSUP)); - } - if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) { - error = VOP_LOOKUP(ZTOV(dzp), vpp, cnp); - VN_RELE(ZTOV(dzp)); - } - - ZFS_EXIT(zfsvfs); - - return (error); -} - -/* ARGSUSED */ static int -zfsctl_snapdir_readdir_cb(vnode_t *vp, void *dp, int *eofp, - offset_t *offp, offset_t *nextp, void *data, int flags) -{ - zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; - char snapname[ZFS_MAX_DATASET_NAME_LEN]; - uint64_t id, cookie; - boolean_t case_conflict; - int error; - - ZFS_ENTER(zfsvfs); - - cookie = *offp; - dsl_pool_config_enter(dmu_objset_pool(zfsvfs->z_os), FTAG); - error = dmu_snapshot_list_next(zfsvfs->z_os, - sizeof (snapname), snapname, &id, &cookie, &case_conflict); - dsl_pool_config_exit(dmu_objset_pool(zfsvfs->z_os), FTAG); - if (error) { - ZFS_EXIT(zfsvfs); - if (error == ENOENT) { - *eofp = 1; - return (0); - } - return (error); - } - - if (flags & V_RDDIR_ENTFLAGS) { - edirent_t *eodp = dp; - - (void) strcpy(eodp->ed_name, snapname); - eodp->ed_ino = ZFSCTL_INO_SNAP(id); - eodp->ed_eflags = case_conflict ? ED_CASE_CONFLICT : 0; - } else { - struct dirent64 *odp = dp; - - (void) strcpy(odp->d_name, snapname); - odp->d_ino = ZFSCTL_INO_SNAP(id); - } - *nextp = cookie; - - ZFS_EXIT(zfsvfs); - - return (0); -} - -/* ARGSUSED */ -static int -zfsctl_shares_readdir(ap) +zfsctl_snapdir_readdir(ap) struct vop_readdir_args /* { struct vnode *a_vp; struct uio *a_uio; struct ucred *a_cred; int *a_eofflag; - int *a_ncookies; + int *ncookies; u_long **a_cookies; } */ *ap; { + char snapname[ZFS_MAX_DATASET_NAME_LEN]; + struct dirent entry; vnode_t *vp = ap->a_vp; - uio_t *uiop = ap->a_uio; - cred_t *cr = ap->a_cred; + zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; + uio_t *uio = ap->a_uio; int *eofp = ap->a_eofflag; - zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; - znode_t *dzp; + off_t dots_offset; int error; - ZFS_ENTER(zfsvfs); + ASSERT(vp->v_type == VDIR); - if (zfsvfs->z_shares_dir == 0) { - ZFS_EXIT(zfsvfs); - return (SET_ERROR(ENOTSUP)); - } - if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) { - vn_lock(ZTOV(dzp), LK_SHARED | LK_RETRY); - error = VOP_READDIR(ZTOV(dzp), uiop, cr, eofp, ap->a_ncookies, ap->a_cookies); - VN_URELE(ZTOV(dzp)); - } else { - *eofp = 1; - error = SET_ERROR(ENOENT); + error = sfs_readdir_common(ZFSCTL_INO_ROOT, ZFSCTL_INO_SNAPDIR, ap, uio, + &dots_offset); + if (error != 0) { + if (error == ENAMETOOLONG) /* ran out of destination space */ + error = 0; + return (error); } - ZFS_EXIT(zfsvfs); - return (error); -} + for (;;) { + uint64_t cookie; + uint64_t id; -/* - * pvp is the '.zfs' directory (zfsctl_node_t). - * - * Creates vp, which is '.zfs/snapshot' (zfsctl_snapdir_t). - * - * This function is the callback to create a GFS vnode for '.zfs/snapshot' - * when a lookup is performed on .zfs for "snapshot". - */ -vnode_t * -zfsctl_mknode_snapdir(vnode_t *pvp) -{ - vnode_t *vp; - zfsctl_snapdir_t *sdp; + cookie = uio->uio_offset - dots_offset; - vp = gfs_dir_create(sizeof (zfsctl_snapdir_t), pvp, pvp->v_vfsp, - &zfsctl_ops_snapdir, NULL, NULL, MAXNAMELEN, - zfsctl_snapdir_readdir_cb, NULL); - sdp = vp->v_data; - sdp->sd_node.zc_id = ZFSCTL_INO_SNAPDIR; - sdp->sd_node.zc_cmtime = ((zfsctl_node_t *)pvp->v_data)->zc_cmtime; - mutex_init(&sdp->sd_lock, NULL, MUTEX_DEFAULT, NULL); - avl_create(&sdp->sd_snaps, snapentry_compare, - sizeof (zfs_snapentry_t), offsetof(zfs_snapentry_t, se_node)); - VOP_UNLOCK(vp, 0); - return (vp); -} + dsl_pool_config_enter(dmu_objset_pool(zfsvfs->z_os), FTAG); + error = dmu_snapshot_list_next(zfsvfs->z_os, sizeof(snapname), + snapname, &id, &cookie, NULL); + dsl_pool_config_exit(dmu_objset_pool(zfsvfs->z_os), FTAG); + if (error != 0) { + if (error == ENOENT) { + if (eofp != NULL) + *eofp = 1; + error = 0; + } + return (error); + } -vnode_t * -zfsctl_mknode_shares(vnode_t *pvp) -{ - vnode_t *vp; - zfsctl_node_t *sdp; - - vp = gfs_dir_create(sizeof (zfsctl_node_t), pvp, pvp->v_vfsp, - &zfsctl_ops_shares, NULL, NULL, MAXNAMELEN, - NULL, NULL); - sdp = vp->v_data; - sdp->zc_cmtime = ((zfsctl_node_t *)pvp->v_data)->zc_cmtime; - VOP_UNLOCK(vp, 0); - return (vp); - -} - -/* ARGSUSED */ -static int -zfsctl_shares_getattr(ap) - struct vop_getattr_args /* { - struct vnode *a_vp; - struct vattr *a_vap; - struct ucred *a_cred; - struct thread *a_td; - } */ *ap; -{ - vnode_t *vp = ap->a_vp; - vattr_t *vap = ap->a_vap; - cred_t *cr = ap->a_cred; - zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; - znode_t *dzp; - int error; - - ZFS_ENTER(zfsvfs); - if (zfsvfs->z_shares_dir == 0) { - ZFS_EXIT(zfsvfs); - return (SET_ERROR(ENOTSUP)); + entry.d_fileno = id; + entry.d_type = DT_DIR; + strcpy(entry.d_name, snapname); + entry.d_namlen = strlen(entry.d_name); + entry.d_reclen = sizeof(entry); + error = vfs_read_dirent(ap, &entry, uio->uio_offset); + if (error != 0) { + if (error == ENAMETOOLONG) + error = 0; + return (SET_ERROR(error)); + } + uio->uio_offset = cookie + dots_offset; } - if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) { - vn_lock(ZTOV(dzp), LK_SHARED | LK_RETRY); - error = VOP_GETATTR(ZTOV(dzp), vap, cr); - VN_URELE(ZTOV(dzp)); - } - ZFS_EXIT(zfsvfs); - return (error); - - + /* NOTREACHED */ } /* ARGSUSED */ @@ -1364,151 +1002,40 @@ zfsctl_snapdir_getattr(ap) vnode_t *vp = ap->a_vp; vattr_t *vap = ap->a_vap; zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; - zfsctl_snapdir_t *sdp = vp->v_data; + dsl_dataset_t *ds = dmu_objset_ds(zfsvfs->z_os); + sfs_node_t *node = vp->v_data; + uint64_t snap_count; + int err; - ZFS_ENTER(zfsvfs); zfsctl_common_getattr(vp, vap); - vap->va_nodeid = gfs_file_inode(vp); - vap->va_nlink = vap->va_size = avl_numnodes(&sdp->sd_snaps) + 2; - vap->va_ctime = vap->va_mtime = dmu_objset_snap_cmtime(zfsvfs->z_os); + vap->va_ctime = dmu_objset_snap_cmtime(zfsvfs->z_os); + vap->va_mtime = vap->va_ctime; vap->va_birthtime = vap->va_ctime; - ZFS_EXIT(zfsvfs); + if (dsl_dataset_phys(ds)->ds_snapnames_zapobj != 0) { + err = zap_count(dmu_objset_pool(ds->ds_objset)->dp_meta_objset, + dsl_dataset_phys(ds)->ds_snapnames_zapobj, &snap_count); + if (err != 0) + return (err); + vap->va_nlink += snap_count; + } + vap->va_size = vap->va_nlink; return (0); } -/* ARGSUSED */ -static int -zfsctl_snapdir_reclaim(ap) - struct vop_reclaim_args /* { - struct vnode *a_vp; - struct thread *a_td; - } */ *ap; -{ - vnode_t *vp = ap->a_vp; - zfsctl_snapdir_t *sdp = vp->v_data; - zfs_snapentry_t *sep; - - ASSERT(avl_numnodes(&sdp->sd_snaps) == 0); - mutex_destroy(&sdp->sd_lock); - avl_destroy(&sdp->sd_snaps); - gfs_vop_reclaim(ap); - - return (0); -} - -static int -zfsctl_shares_print(ap) - struct vop_print_args /* { - struct vnode *a_vp; - } */ *ap; -{ - printf(" .zfs/shares node\n"); - zfsctl_common_print(ap); - return (0); -} - -static int -zfsctl_snapdir_print(ap) - struct vop_print_args /* { - struct vnode *a_vp; - } */ *ap; -{ - vnode_t *vp = ap->a_vp; - zfsctl_snapdir_t *sdp = vp->v_data; - - printf(" .zfs/snapshot node\n"); - printf(" number of children = %lu\n", avl_numnodes(&sdp->sd_snaps)); - zfsctl_common_print(ap); - return (0); -} - -#ifdef illumos -static const fs_operation_def_t zfsctl_tops_snapdir[] = { - { VOPNAME_OPEN, { .vop_open = zfsctl_common_open } }, - { VOPNAME_CLOSE, { .vop_close = zfsctl_common_close } }, - { VOPNAME_IOCTL, { .error = fs_inval } }, - { VOPNAME_GETATTR, { .vop_getattr = zfsctl_snapdir_getattr } }, - { VOPNAME_ACCESS, { .vop_access = zfsctl_common_access } }, - { VOPNAME_RENAME, { .vop_rename = zfsctl_snapdir_rename } }, - { VOPNAME_RMDIR, { .vop_rmdir = zfsctl_snapdir_remove } }, - { VOPNAME_MKDIR, { .vop_mkdir = zfsctl_snapdir_mkdir } }, - { VOPNAME_READDIR, { .vop_readdir = gfs_vop_readdir } }, - { VOPNAME_LOOKUP, { .vop_lookup = zfsctl_snapdir_lookup } }, - { VOPNAME_SEEK, { .vop_seek = fs_seek } }, - { VOPNAME_INACTIVE, { .vop_inactive = zfsctl_snapdir_inactive } }, - { VOPNAME_FID, { .vop_fid = zfsctl_common_fid } }, - { NULL } -}; - -static const fs_operation_def_t zfsctl_tops_shares[] = { - { VOPNAME_OPEN, { .vop_open = zfsctl_common_open } }, - { VOPNAME_CLOSE, { .vop_close = zfsctl_common_close } }, - { VOPNAME_IOCTL, { .error = fs_inval } }, - { VOPNAME_GETATTR, { .vop_getattr = zfsctl_shares_getattr } }, - { VOPNAME_ACCESS, { .vop_access = zfsctl_common_access } }, - { VOPNAME_READDIR, { .vop_readdir = zfsctl_shares_readdir } }, - { VOPNAME_LOOKUP, { .vop_lookup = zfsctl_shares_lookup } }, - { VOPNAME_SEEK, { .vop_seek = fs_seek } }, - { VOPNAME_INACTIVE, { .vop_inactive = gfs_vop_inactive } }, - { VOPNAME_FID, { .vop_fid = zfsctl_shares_fid } }, - { NULL } -}; -#else /* !illumos */ static struct vop_vector zfsctl_ops_snapdir = { .vop_default = &default_vnodeops, .vop_open = zfsctl_common_open, .vop_close = zfsctl_common_close, - .vop_ioctl = VOP_EINVAL, .vop_getattr = zfsctl_snapdir_getattr, .vop_access = zfsctl_common_access, - .vop_mkdir = zfsctl_freebsd_snapdir_mkdir, - .vop_readdir = gfs_vop_readdir, + .vop_readdir = zfsctl_snapdir_readdir, .vop_lookup = zfsctl_snapdir_lookup, - .vop_inactive = VOP_NULL, - .vop_reclaim = zfsctl_snapdir_reclaim, + .vop_reclaim = zfsctl_common_reclaim, .vop_fid = zfsctl_common_fid, - .vop_print = zfsctl_snapdir_print, + .vop_print = zfsctl_common_print, }; -static struct vop_vector zfsctl_ops_shares = { - .vop_default = &default_vnodeops, - .vop_open = zfsctl_common_open, - .vop_close = zfsctl_common_close, - .vop_ioctl = VOP_EINVAL, - .vop_getattr = zfsctl_shares_getattr, - .vop_access = zfsctl_common_access, - .vop_readdir = zfsctl_shares_readdir, - .vop_lookup = zfsctl_shares_lookup, - .vop_inactive = VOP_NULL, - .vop_reclaim = gfs_vop_reclaim, - .vop_fid = zfsctl_shares_fid, - .vop_print = zfsctl_shares_print, -}; -#endif /* illumos */ - -/* - * pvp is the GFS vnode '.zfs/snapshot'. - * - * This creates a GFS node under '.zfs/snapshot' representing each - * snapshot. This newly created GFS node is what we mount snapshot - * vfs_t's ontop of. - */ -static vnode_t * -zfsctl_snapshot_mknode(vnode_t *pvp, uint64_t objset) -{ - vnode_t *vp; - zfsctl_node_t *zcp; - - vp = gfs_dir_create(sizeof (zfsctl_node_t), pvp, pvp->v_vfsp, - &zfsctl_ops_snapshot, NULL, NULL, MAXNAMELEN, NULL, NULL); - zcp = vp->v_data; - zcp->zc_id = objset; - VOP_UNLOCK(vp, 0); - - return (vp); -} - static int zfsctl_snapshot_inactive(ap) struct vop_inactive_args /* { @@ -1518,7 +1045,7 @@ zfsctl_snapshot_inactive(ap) { vnode_t *vp = ap->a_vp; - vrecycle(vp); + VERIFY(vrecycle(vp) == 1); return (0); } @@ -1530,183 +1057,104 @@ zfsctl_snapshot_reclaim(ap) } */ *ap; { vnode_t *vp = ap->a_vp; - cred_t *cr = ap->a_td->td_ucred; - zfsctl_snapdir_t *sdp; - zfs_snapentry_t *sep, *next; - int locked; - vnode_t *dvp; + void *data = vp->v_data; - VERIFY(gfs_dir_lookup(vp, "..", &dvp, cr, 0, NULL, NULL) == 0); - sdp = dvp->v_data; - /* this may already have been unmounted */ - if (sdp == NULL) { - VN_RELE(dvp); - return (0); - } - if (!(locked = MUTEX_HELD(&sdp->sd_lock))) - mutex_enter(&sdp->sd_lock); - - ASSERT(!vn_ismntpt(vp)); - - sep = avl_first(&sdp->sd_snaps); - while (sep != NULL) { - next = AVL_NEXT(&sdp->sd_snaps, sep); - - if (sep->se_root == vp) { - avl_remove(&sdp->sd_snaps, sep); - kmem_free(sep->se_name, strlen(sep->se_name) + 1); - kmem_free(sep, sizeof (zfs_snapentry_t)); - break; - } - sep = next; - } - ASSERT(sep != NULL); - - if (!locked) - mutex_exit(&sdp->sd_lock); - VN_RELE(dvp); - - /* - * Dispose of the vnode for the snapshot mount point. - * This is safe to do because once this entry has been removed - * from the AVL tree, it can't be found again, so cannot become - * "active". If we lookup the same name again we will end up - * creating a new vnode. - */ - gfs_vop_reclaim(ap); + sfs_reclaim_vnode(vp); + sfs_destroy_node(data); return (0); - } static int zfsctl_snapshot_vptocnp(struct vop_vptocnp_args *ap) { - zfsvfs_t *zfsvfs = ap->a_vp->v_vfsp->vfs_data; - vnode_t *dvp, *vp; - zfsctl_snapdir_t *sdp; - zfs_snapentry_t *sep; + struct mount *mp; + vnode_t *dvp; + vnode_t *vp; + sfs_node_t *node; + size_t len; + int locked; int error; - ASSERT(zfsvfs->z_ctldir != NULL); - error = zfsctl_root_lookup(zfsvfs->z_ctldir, "snapshot", &dvp, - NULL, 0, NULL, kcred, NULL, NULL, NULL); - if (error != 0) - return (error); - sdp = dvp->v_data; + vp = ap->a_vp; + node = vp->v_data; + len = strlen(node->sn_name); + if (*ap->a_buflen < len) + return (SET_ERROR(ENOMEM)); - mutex_enter(&sdp->sd_lock); - sep = avl_first(&sdp->sd_snaps); - while (sep != NULL) { - vp = sep->se_root; - if (vp == ap->a_vp) - break; - sep = AVL_NEXT(&sdp->sd_snaps, sep); + /* + * Prevent unmounting of the snapshot while the vnode lock + * is not held. That is not strictly required, but allows + * us to assert that an uncovered snapshot vnode is never + * "leaked". + */ + mp = vp->v_mountedhere; + if (mp == NULL) + return (SET_ERROR(ENOENT)); + error = vfs_busy(mp, 0); + KASSERT(error == 0, ("vfs_busy(mp, 0) failed with %d", error)); + + /* + * We can vput the vnode as we can now depend on the reference owned + * by the busied mp. But we also need to hold the vnode, because + * the reference may go after vfs_unbusy() which has to be called + * before we can lock the vnode again. + */ + locked = VOP_ISLOCKED(vp); + vhold(vp); + vput(vp); + + /* Look up .zfs/snapshot, our parent. */ + error = zfsctl_snapdir_vnode(vp->v_mount, NULL, LK_SHARED, &dvp); + if (error == 0) { + VOP_UNLOCK(dvp, 0); + *ap->a_vpp = dvp; + *ap->a_buflen -= len; + bcopy(node->sn_name, ap->a_buf + *ap->a_buflen, len); } - if (sep == NULL) { - mutex_exit(&sdp->sd_lock); - error = SET_ERROR(ENOENT); - } else { - size_t len; - - len = strlen(sep->se_name); - if (*ap->a_buflen < len) { - mutex_exit(&sdp->sd_lock); - error = SET_ERROR(ENOMEM); - } else { - *ap->a_buflen -= len; - bcopy(sep->se_name, ap->a_buf + *ap->a_buflen, len); - mutex_exit(&sdp->sd_lock); - vref(dvp); - *ap->a_vpp = dvp; - } - } - VN_RELE(dvp); - + vfs_unbusy(mp); + vget(vp, locked | LK_VNHELD | LK_RETRY, curthread); return (error); } -static int -zfsctl_snaphot_print(ap) - struct vop_print_args /* { - struct vnode *a_vp; - } */ *ap; -{ - vnode_t *vp = ap->a_vp; - zfsctl_node_t *zcp = vp->v_data; - - printf(" .zfs/snapshot/ node\n"); - printf(" id = %ju\n", (uintmax_t)zcp->zc_id); - zfsctl_common_print(ap); - return (0); -} - /* * These VP's should never see the light of day. They should always * be covered. */ static struct vop_vector zfsctl_ops_snapshot = { - .vop_default = &default_vnodeops, - .vop_inactive = zfsctl_snapshot_inactive, - .vop_reclaim = zfsctl_snapshot_reclaim, - .vop_vptocnp = zfsctl_snapshot_vptocnp, - .vop_print = zfsctl_snaphot_print, + .vop_default = NULL, /* ensure very restricted access */ + .vop_inactive = zfsctl_snapshot_inactive, + .vop_reclaim = zfsctl_snapshot_reclaim, + .vop_vptocnp = zfsctl_snapshot_vptocnp, + .vop_lock1 = vop_stdlock, + .vop_unlock = vop_stdunlock, + .vop_islocked = vop_stdislocked, + .vop_advlockpurge = vop_stdadvlockpurge, /* called by vgone */ + .vop_print = zfsctl_common_print, }; int zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp) { + struct mount *mp; zfsvfs_t *zfsvfs = vfsp->vfs_data; - vnode_t *dvp, *vp; - zfsctl_snapdir_t *sdp; - zfsctl_node_t *zcp; - zfs_snapentry_t *sep; + vnode_t *vp; int error; ASSERT(zfsvfs->z_ctldir != NULL); - error = zfsctl_root_lookup(zfsvfs->z_ctldir, "snapshot", &dvp, - NULL, 0, NULL, kcred, NULL, NULL, NULL); - if (error != 0) - return (error); - sdp = dvp->v_data; - - mutex_enter(&sdp->sd_lock); - sep = avl_first(&sdp->sd_snaps); - while (sep != NULL) { - vp = sep->se_root; - zcp = vp->v_data; - if (zcp->zc_id == objsetid) - break; - - sep = AVL_NEXT(&sdp->sd_snaps, sep); - } - - if (sep != NULL) { - VN_HOLD(vp); + *zfsvfsp = NULL; + error = sfs_vnode_get(vfsp, LK_EXCLUSIVE, + ZFSCTL_INO_SNAPDIR, objsetid, &vp); + if (error == 0 && vp != NULL) { /* - * Return the mounted root rather than the covered mount point. - * Takes the GFS vnode at .zfs/snapshot/ - * and returns the ZFS vnode mounted on top of the GFS node. - * This ZFS vnode is the root of the vfs for objset 'objsetid'. + * XXX Probably need to at least reference, if not busy, the mp. */ - error = traverse(&vp, LK_SHARED | LK_RETRY); - if (error == 0) { - if (vp == sep->se_root) { - VN_RELE(vp); /* release covered vp */ - error = SET_ERROR(EINVAL); - } else { - *zfsvfsp = VTOZ(vp)->z_zfsvfs; - VN_URELE(vp); /* put snapshot's root vp */ - } - } - mutex_exit(&sdp->sd_lock); - } else { - error = SET_ERROR(EINVAL); - mutex_exit(&sdp->sd_lock); + if (vp->v_mountedhere != NULL) + *zfsvfsp = vp->v_mountedhere->mnt_data; + vput(vp); } - - VN_RELE(dvp); - - return (error); + if (*zfsvfsp == NULL) + return (SET_ERROR(EINVAL)); + return (0); } /* @@ -1717,52 +1165,70 @@ zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp) int zfsctl_umount_snapshots(vfs_t *vfsp, int fflags, cred_t *cr) { + char snapname[ZFS_MAX_DATASET_NAME_LEN]; zfsvfs_t *zfsvfs = vfsp->vfs_data; + struct mount *mp; vnode_t *dvp; - zfsctl_snapdir_t *sdp; - zfs_snapentry_t *sep, *next; + vnode_t *vp; + sfs_node_t *node; + sfs_node_t *snap; + uint64_t cookie; int error; ASSERT(zfsvfs->z_ctldir != NULL); - error = zfsctl_root_lookup(zfsvfs->z_ctldir, "snapshot", &dvp, - NULL, 0, NULL, cr, NULL, NULL, NULL); - if (error != 0) - return (error); - sdp = dvp->v_data; - mutex_enter(&sdp->sd_lock); + cookie = 0; + for (;;) { + uint64_t id; - sep = avl_first(&sdp->sd_snaps); - while (sep != NULL) { - next = AVL_NEXT(&sdp->sd_snaps, sep); + dsl_pool_config_enter(dmu_objset_pool(zfsvfs->z_os), FTAG); + error = dmu_snapshot_list_next(zfsvfs->z_os, sizeof(snapname), + snapname, &id, &cookie, NULL); + dsl_pool_config_exit(dmu_objset_pool(zfsvfs->z_os), FTAG); + if (error != 0) { + if (error == ENOENT) + error = 0; + break; + } + + for (;;) { + error = sfs_vnode_get(vfsp, LK_EXCLUSIVE, + ZFSCTL_INO_SNAPDIR, id, &vp); + if (error != 0 || vp == NULL) + break; + + mp = vp->v_mountedhere; + + /* + * v_mountedhere being NULL means that the + * (uncovered) vnode is in a transient state + * (mounting or unmounting), so loop until it + * settles down. + */ + if (mp != NULL) + break; + vput(vp); + } + if (error != 0) + break; + if (vp == NULL) + continue; /* no mountpoint, nothing to do */ /* - * If this snapshot is not mounted, then it must - * have just been unmounted by somebody else, and - * will be cleaned up by zfsctl_snapdir_inactive(). + * The mount-point vnode is kept locked to avoid spurious EBUSY + * from a concurrent umount. + * The vnode lock must have recursive locking enabled. */ - if (vn_ismntpt(sep->se_root)) { - error = zfsctl_unmount_snap(sep, fflags, cr); - if (error) { - avl_index_t where; - - /* - * Before reinserting snapshot to the tree, - * check if it was actually removed. For example - * when snapshot mount point is busy, we will - * have an error here, but there will be no need - * to reinsert snapshot. - */ - if (avl_find(&sdp->sd_snaps, sep, &where) == NULL) - avl_insert(&sdp->sd_snaps, sep, where); - break; - } - } - sep = next; + vfs_ref(mp); + error = dounmount(mp, fflags, curthread); + KASSERT_IMPLY(error == 0, vrefcnt(vp) == 1, + ("extra references after unmount")); + vput(vp); + if (error != 0) + break; } - - mutex_exit(&sdp->sd_lock); - VN_RELE(dvp); - + KASSERT_IMPLY((fflags & MS_FORCE) != 0, error == 0, + ("force unmounting failed")); return (error); } + diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c index dbcdd693c098..aa9ac8e90f7b 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c @@ -1952,15 +1952,6 @@ zfs_umount(vfs_t *vfsp, int fflag) if (zfsvfs->z_ctldir != NULL) { if ((ret = zfsctl_umount_snapshots(vfsp, fflag, cr)) != 0) return (ret); - ret = vflush(vfsp, 0, 0, td); - ASSERT(ret == EBUSY); - if (!(fflag & MS_FORCE)) { - if (zfsvfs->z_ctldir->v_count > 1) - return (EBUSY); - ASSERT(zfsvfs->z_ctldir->v_count == 1); - } - zfsctl_destroy(zfsvfs); - ASSERT(zfsvfs->z_ctldir == NULL); } if (fflag & MS_FORCE) { @@ -1978,13 +1969,8 @@ zfs_umount(vfs_t *vfsp, int fflag) * Flush all the files. */ ret = vflush(vfsp, 0, (fflag & MS_FORCE) ? FORCECLOSE : 0, td); - if (ret != 0) { - if (!zfsvfs->z_issnap) { - zfsctl_create(zfsvfs); - ASSERT(zfsvfs->z_ctldir != NULL); - } + if (ret != 0) return (ret); - } #ifdef illumos if (!(fflag & MS_FORCE)) { @@ -2095,8 +2081,10 @@ CTASSERT(LONG_FID_LEN <= sizeof(struct fid)); static int zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int flags, vnode_t **vpp) { + struct componentname cn; zfsvfs_t *zfsvfs = vfsp->vfs_data; znode_t *zp; + vnode_t *dvp; uint64_t object = 0; uint64_t fid_gen = 0; uint64_t gen_mask; @@ -2151,21 +2139,32 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int flags, vnode_t **vpp) if ((fid_gen == 0 && (object == ZFSCTL_INO_ROOT || object == ZFSCTL_INO_SNAPDIR)) || (zfsvfs->z_shares_dir != 0 && object == zfsvfs->z_shares_dir)) { - *vpp = zfsvfs->z_ctldir; - ASSERT(*vpp != NULL); - if (object == ZFSCTL_INO_SNAPDIR) { - VERIFY(zfsctl_root_lookup(*vpp, "snapshot", vpp, NULL, - 0, NULL, NULL, NULL, NULL, NULL) == 0); - } else if (object == zfsvfs->z_shares_dir) { - VERIFY(zfsctl_root_lookup(*vpp, "shares", vpp, NULL, - 0, NULL, NULL, NULL, NULL, NULL) == 0); - } else { - vref(*vpp); - } ZFS_EXIT(zfsvfs); - err = vn_lock(*vpp, flags); - if (err != 0) - *vpp = NULL; + VERIFY0(zfsctl_root(zfsvfs, LK_SHARED, &dvp)); + if (object == ZFSCTL_INO_SNAPDIR) { + cn.cn_nameptr = "snapshot"; + cn.cn_namelen = strlen(cn.cn_nameptr); + cn.cn_nameiop = LOOKUP; + cn.cn_flags = ISLASTCN | LOCKLEAF; + cn.cn_lkflags = flags; + VERIFY0(VOP_LOOKUP(dvp, vpp, &cn)); + vput(dvp); + } else if (object == zfsvfs->z_shares_dir) { + /* + * XXX This branch must not be taken, + * if it is, then the lookup below will + * explode. + */ + cn.cn_nameptr = "shares"; + cn.cn_namelen = strlen(cn.cn_nameptr); + cn.cn_nameiop = LOOKUP; + cn.cn_flags = ISLASTCN; + cn.cn_lkflags = flags; + VERIFY0(VOP_LOOKUP(dvp, vpp, &cn)); + vput(dvp); + } else { + *vpp = dvp; + } return (err); } @@ -2190,7 +2189,7 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int flags, vnode_t **vpp) *vpp = ZTOV(zp); ZFS_EXIT(zfsvfs); - err = vn_lock(*vpp, flags | LK_RETRY); + err = vn_lock(*vpp, flags); if (err == 0) vnode_create_vobject(*vpp, zp->z_size, curthread); else diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c index 2e0da41ef5db..fc6c57d1d5a0 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c @@ -1612,27 +1612,34 @@ zfs_lookup(vnode_t *dvp, char *nm, vnode_t **vpp, struct componentname *cnp, * the vp for the snapshot directory. */ if (zdp->z_id == zfsvfs->z_root && zfsvfs->z_parent != zfsvfs) { - error = zfsctl_root_lookup(zfsvfs->z_parent->z_ctldir, - "snapshot", vpp, NULL, 0, NULL, kcred, - NULL, NULL, NULL); + struct componentname cn; + vnode_t *zfsctl_vp; + int ltype; + ZFS_EXIT(zfsvfs); + ltype = VOP_ISLOCKED(dvp); + VOP_UNLOCK(dvp, 0); + error = zfsctl_root(zfsvfs->z_parent, LK_SHARED, + &zfsctl_vp); if (error == 0) { - error = zfs_lookup_lock(dvp, *vpp, nm, - cnp->cn_lkflags); + cn.cn_nameptr = "snapshot"; + cn.cn_namelen = strlen(cn.cn_nameptr); + cn.cn_nameiop = cnp->cn_nameiop; + cn.cn_flags = cnp->cn_flags; + cn.cn_lkflags = cnp->cn_lkflags; + error = VOP_LOOKUP(zfsctl_vp, vpp, &cn); + vput(zfsctl_vp); } - goto out; + vn_lock(dvp, ltype | LK_RETRY); + return (error); } } if (zfs_has_ctldir(zdp) && strcmp(nm, ZFS_CTLDIR_NAME) == 0) { - error = 0; - if ((cnp->cn_flags & ISLASTCN) != 0 && nameiop != LOOKUP) - error = SET_ERROR(ENOTSUP); - else - *vpp = zfsctl_root(zdp); ZFS_EXIT(zfsvfs); - if (error == 0) - error = zfs_lookup_lock(dvp, *vpp, nm, cnp->cn_lkflags); - goto out; + if ((cnp->cn_flags & ISLASTCN) != 0 && nameiop != LOOKUP) + return (SET_ERROR(ENOTSUP)); + error = zfsctl_root(zfsvfs, cnp->cn_lkflags, vpp); + return (error); } /* @@ -5956,7 +5963,7 @@ zfs_vptocnp(struct vop_vptocnp_args *ap) vhold(covered_vp); ltype = VOP_ISLOCKED(vp); VOP_UNLOCK(vp, 0); - error = vget(covered_vp, LK_EXCLUSIVE | LK_VNHELD, curthread); + error = vget(covered_vp, LK_SHARED | LK_VNHELD, curthread); if (error == 0) { error = VOP_VPTOCNP(covered_vp, ap->a_vpp, ap->a_cred, ap->a_buf, ap->a_buflen); diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c index c932c6d873c2..05258b223f54 100644 --- a/sys/compat/linprocfs/linprocfs.c +++ b/sys/compat/linprocfs/linprocfs.c @@ -1543,6 +1543,8 @@ linprocfs_init(PFS_INIT_ARGS) NULL, NULL, NULL, PFS_RD); pfs_create_file(dir, "mem", &procfs_doprocmem, &procfs_attr, &procfs_candebug, NULL, PFS_RDWR|PFS_RAW); + pfs_create_file(dir, "mounts", &linprocfs_domtab, + NULL, NULL, NULL, PFS_RD); pfs_create_link(dir, "root", &linprocfs_doprocroot, NULL, NULL, NULL, 0); pfs_create_file(dir, "stat", &linprocfs_doprocstat, diff --git a/sys/compat/linux/linux_mmap.c b/sys/compat/linux/linux_mmap.c index 802917f5a064..11da2ebf4df4 100644 --- a/sys/compat/linux/linux_mmap.c +++ b/sys/compat/linux/linux_mmap.c @@ -203,8 +203,23 @@ linux_mmap_common(struct thread *td, uintptr_t addr, size_t len, int prot, } } - error = kern_mmap(td, addr, len, prot, bsd_flags, fd, pos); + /* + * FreeBSD is free to ignore the address hint if MAP_FIXED wasn't + * passed. However, some Linux applications, like the ART runtime, + * depend on the hint. If the MAP_FIXED wasn't passed, but the + * address is not zero, try with MAP_FIXED and MAP_EXCL first, + * and fall back to the normal behaviour if that fails. + */ + if (addr != 0 && (bsd_flags & MAP_FIXED) == 0 && + (bsd_flags & MAP_EXCL) == 0) { + error = kern_mmap(td, addr, len, prot, + bsd_flags | MAP_FIXED | MAP_EXCL, fd, pos); + if (error == 0) + goto out; + } + error = kern_mmap(td, addr, len, prot, bsd_flags, fd, pos); +out: LINUX_CTR2(mmap2, "return: %d (%p)", error, td->td_retval[0]); return (error); diff --git a/sys/compat/linux/linux_signal.c b/sys/compat/linux/linux_signal.c index 0ecf537467c3..69bcd9423f09 100644 --- a/sys/compat/linux/linux_signal.c +++ b/sys/compat/linux/linux_signal.c @@ -764,3 +764,32 @@ linux_rt_sigqueueinfo(struct thread *td, struct linux_rt_sigqueueinfo_args *args return (error); } + +int +linux_rt_tgsigqueueinfo(struct thread *td, struct linux_rt_tgsigqueueinfo_args *args) +{ + l_siginfo_t linfo; + struct thread *tds; + ksiginfo_t ksi; + int error; + int sig; + + if (!LINUX_SIG_VALID(args->sig)) + return (EINVAL); + + error = copyin(args->uinfo, &linfo, sizeof(linfo)); + if (error != 0) + return (error); + + if (linfo.lsi_code >= 0) + return (EPERM); + + tds = linux_tdfind(td, args->tid, args->tgid); + if (tds == NULL) + return (ESRCH); + + sig = linux_to_bsd_signal(args->sig); + ksiginfo_init(&ksi); + lsiginfo_to_ksiginfo(&linfo, &ksi, sig); + return (linux_do_tkill(td, tds, &ksi)); +} diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index 615c3d97c441..db48275a36ed 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -505,7 +505,7 @@ linux_sa_put(struct osockaddr *osa) * not changed. */ error = copyin(osa, &sa, sizeof(sa.sa_family)); - if (error) + if (error != 0) return (error); bdom = bsd_to_linux_domain(sa.sa_family); @@ -613,7 +613,7 @@ linux_sendit(struct thread *td, int s, struct msghdr *mp, int flags, if (mp->msg_name != NULL) { error = linux_getsockaddr(&to, mp->msg_name, mp->msg_namelen); - if (error) + if (error != 0) return (error); mp->msg_name = to; } else @@ -637,7 +637,7 @@ linux_check_hdrincl(struct thread *td, int s) size_val = sizeof(optval); error = kern_getsockopt(td, s, IPPROTO_IP, IP_HDRINCL, &optval, UIO_SYSSPACE, &size_val); - if (error) + if (error != 0) return (error); return (optval == 0); @@ -753,7 +753,7 @@ linux_bind(struct thread *td, struct linux_bind_args *args) error = linux_getsockaddr(&sa, PTRIN(args->name), args->namelen); - if (error) + if (error != 0) return (error); error = kern_bindat(td, AT_FDCWD, args->s, sa); @@ -775,7 +775,7 @@ linux_connect(struct thread *td, struct linux_connect_args *args) error = linux_getsockaddr(&sa, (struct osockaddr *)PTRIN(args->name), args->namelen); - if (error) + if (error != 0) return (error); error = kern_connectat(td, AT_FDCWD, args->s, sa); @@ -830,20 +830,20 @@ linux_accept_common(struct thread *td, int s, l_uintptr_t addr, int error, error1; bsd_args.s = s; - /* XXX: */ bsd_args.name = (struct sockaddr * __restrict)PTRIN(addr); - bsd_args.anamelen = PTRIN(namelen);/* XXX */ + bsd_args.anamelen = PTRIN(namelen); bsd_args.flags = 0; error = linux_set_socket_flags(flags, &bsd_args.flags); if (error != 0) return (error); error = sys_accept4(td, &bsd_args); bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.name); - if (error) { + if (error != 0) { if (error == EFAULT && namelen != sizeof(struct sockaddr_in)) return (EINVAL); if (error == EINVAL) { - error1 = getsock_cap(td, s, &rights, &fp, NULL, NULL); + error1 = getsock_cap(td, s, + cap_rights_init(&rights, CAP_ACCEPT), &fp, NULL, NULL); if (error1 != 0) return (error1); so = fp->f_data; @@ -857,7 +857,7 @@ linux_accept_common(struct thread *td, int s, l_uintptr_t addr, } if (addr) error = linux_sa_put(PTRIN(addr)); - if (error) { + if (error != 0) { (void)kern_close(td, td->td_retval[0]); td->td_retval[0] = 0; } @@ -891,12 +891,11 @@ linux_getsockname(struct thread *td, struct linux_getsockname_args *args) int error; bsd_args.fdes = args->s; - /* XXX: */ bsd_args.asa = (struct sockaddr * __restrict)PTRIN(args->addr); - bsd_args.alen = PTRIN(args->namelen); /* XXX */ + bsd_args.alen = PTRIN(args->namelen); error = sys_getsockname(td, &bsd_args); bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.asa); - if (error) + if (error != 0) return (error); return (linux_sa_put(PTRIN(args->addr))); } @@ -916,7 +915,7 @@ linux_getpeername(struct thread *td, struct linux_getpeername_args *args) bsd_args.alen = (socklen_t *)PTRIN(args->namelen); error = sys_getpeername(td, &bsd_args); bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.asa); - if (error) + if (error != 0) return (error); return (linux_sa_put(PTRIN(args->addr))); } @@ -959,10 +958,10 @@ linux_socketpair(struct thread *td, struct linux_socketpair_args *args) #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) struct linux_send_args { - int s; - l_uintptr_t msg; - int len; - int flags; + register_t s; + register_t msg; + register_t len; + register_t flags; }; static int @@ -987,10 +986,10 @@ linux_send(struct thread *td, struct linux_send_args *args) } struct linux_recv_args { - int s; - l_uintptr_t msg; - int len; - int flags; + register_t s; + register_t msg; + register_t len; + register_t flags; }; static int @@ -1413,12 +1412,12 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr, linux_cmsg->cmsg_len = LINUX_CMSG_LEN(datalen); error = copyout(linux_cmsg, outbuf, L_CMSG_HDRSZ); - if (error) + if (error != 0) goto bad; outbuf += L_CMSG_HDRSZ; error = copyout(data, outbuf, datalen); - if (error) + if (error != 0) goto bad; outbuf += LINUX_CMSG_ALIGN(datalen); @@ -1541,7 +1540,7 @@ linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args) case SO_SNDTIMEO: error = copyin(PTRIN(args->optval), &linux_tv, sizeof(linux_tv)); - if (error) + if (error != 0) return (error); tv.tv_sec = linux_tv.tv_sec; tv.tv_usec = linux_tv.tv_usec; @@ -1613,7 +1612,7 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args) tv_len = sizeof(tv); error = kern_getsockopt(td, args->s, bsd_args.level, name, &tv, UIO_SYSSPACE, &tv_len); - if (error) + if (error != 0) return (error); linux_tv.tv_sec = tv.tv_sec; linux_tv.tv_usec = tv.tv_usec; @@ -1627,7 +1626,7 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args) xulen = sizeof(xu); error = kern_getsockopt(td, args->s, bsd_args.level, name, &xu, UIO_SYSSPACE, &xulen); - if (error) + if (error != 0) return (error); /* * XXX Use 0 for pid as the FreeBSD does not cache peer pid. @@ -1642,7 +1641,7 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args) len = sizeof(newval); error = kern_getsockopt(td, args->s, bsd_args.level, name, &newval, UIO_SYSSPACE, &len); - if (error) + if (error != 0) return (error); newval = -SV_ABI_ERRNO(td->td_proc, newval); return (copyout(&newval, PTRIN(args->optval), len)); diff --git a/sys/compat/linux/linux_socket.h b/sys/compat/linux/linux_socket.h index e2016938f641..9aff96554a61 100644 --- a/sys/compat/linux/linux_socket.h +++ b/sys/compat/linux/linux_socket.h @@ -143,9 +143,9 @@ struct l_ucred { #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) struct linux_accept_args { - int s; - l_uintptr_t addr; - l_uintptr_t namelen; + register_t s; + register_t addr; + register_t namelen; }; int linux_accept(struct thread *td, struct linux_accept_args *args); diff --git a/sys/compat/linux/linux_stats.c b/sys/compat/linux/linux_stats.c index f74fa803cb41..717f97026f24 100644 --- a/sys/compat/linux/linux_stats.c +++ b/sys/compat/linux/linux_stats.c @@ -98,42 +98,6 @@ linux_kern_lstat(struct thread *td, char *path, enum uio_seg pathseg, pathseg, sbp)); } -/* - * XXX: This was removed from newstat_copyout(), and almost identical - * XXX: code was in stat64_copyout(). findcdev() needs to be replaced - * XXX: with something that does lookup and locking properly. - * XXX: When somebody fixes this: please try to avoid duplicating it. - */ -#if 0 -static void -disk_foo(struct somestat *tbuf) -{ - struct cdevsw *cdevsw; - struct cdev *dev; - - /* Lie about disk drives which are character devices - * in FreeBSD but block devices under Linux. - */ - if (S_ISCHR(tbuf.st_mode) && - (dev = findcdev(buf->st_rdev)) != NULL) { - cdevsw = dev_refthread(dev); - if (cdevsw != NULL) { - if (cdevsw->d_flags & D_DISK) { - tbuf.st_mode &= ~S_IFMT; - tbuf.st_mode |= S_IFBLK; - - /* XXX this may not be quite right */ - /* Map major number to 0 */ - tbuf.st_dev = minor(buf->st_dev) & 0xf; - tbuf.st_rdev = buf->st_rdev & 0xff; - } - dev_relthread(dev); - } - } - -} -#endif - static void translate_fd_major_minor(struct thread *td, int fd, struct stat *buf) { diff --git a/sys/compat/linuxkpi/common/include/linux/bitops.h b/sys/compat/linuxkpi/common/include/linux/bitops.h index 9e1fa2bc4569..2c521318804f 100644 --- a/sys/compat/linuxkpi/common/include/linux/bitops.h +++ b/sys/compat/linuxkpi/common/include/linux/bitops.h @@ -31,6 +31,7 @@ #ifndef _LINUX_BITOPS_H_ #define _LINUX_BITOPS_H_ +#include #include #include #include diff --git a/sys/compat/linuxkpi/common/include/linux/bottom_half.h b/sys/compat/linuxkpi/common/include/linux/bottom_half.h new file mode 100644 index 000000000000..9f8dc02f2798 --- /dev/null +++ b/sys/compat/linuxkpi/common/include/linux/bottom_half.h @@ -0,0 +1,34 @@ +/*- + * Copyright (c) 2017 Hans Petter Selasky + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ +#ifndef _LINUX_BOTTOM_HALF_H_ +#define _LINUX_BOTTOM_HALF_H_ + +extern void local_bh_enable(void); +extern void local_bh_disable(void); + +#endif /* _LINUX_BOTTOM_HALF_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/compat.h b/sys/compat/linuxkpi/common/include/linux/compat.h index 01b8a85b9760..62ea3363394b 100644 --- a/sys/compat/linuxkpi/common/include/linux/compat.h +++ b/sys/compat/linuxkpi/common/include/linux/compat.h @@ -2,7 +2,7 @@ * Copyright (c) 2010 Isilon Systems, Inc. * Copyright (c) 2010 iX Systems, Inc. * Copyright (c) 2010 Panasas, Inc. - * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd. + * Copyright (c) 2013-2017 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,10 +31,29 @@ #ifndef _LINUX_COMPAT_H_ #define _LINUX_COMPAT_H_ +#include +#include +#include + struct thread; struct task_struct; -void linux_set_current(struct thread *td, struct task_struct *t); -void linux_clear_current(struct thread *td); +extern int linux_alloc_current(struct thread *, int flags); +extern void linux_free_current(struct task_struct *); + +static inline void +linux_set_current(struct thread *td) +{ + if (__predict_false(td->td_lkpi_task == NULL)) + linux_alloc_current(td, M_WAITOK); +} + +static inline int +linux_set_current_flags(struct thread *td, int flags) +{ + if (__predict_false(td->td_lkpi_task == NULL)) + return (linux_alloc_current(td, flags)); + return (0); +} #endif /* _LINUX_COMPAT_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/file.h b/sys/compat/linuxkpi/common/include/linux/file.h index 559ac0437681..0661e70a5697 100644 --- a/sys/compat/linuxkpi/common/include/linux/file.h +++ b/sys/compat/linuxkpi/common/include/linux/file.h @@ -39,6 +39,7 @@ #include #include +#include struct linux_file; diff --git a/sys/compat/linuxkpi/common/include/linux/gfp.h b/sys/compat/linuxkpi/common/include/linux/gfp.h index 7840919864ea..94cda86bb28a 100644 --- a/sys/compat/linuxkpi/common/include/linux/gfp.h +++ b/sys/compat/linuxkpi/common/include/linux/gfp.h @@ -2,7 +2,7 @@ * Copyright (c) 2010 Isilon Systems, Inc. * Copyright (c) 2010 iX Systems, Inc. * Copyright (c) 2010 Panasas, Inc. - * Copyright (c) 2013 Mellanox Technologies, Ltd. + * Copyright (c) 2013-2017 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -67,94 +67,106 @@ #define GFP_TEMPORARY M_NOWAIT #define GFP_NATIVE_MASK (M_NOWAIT | M_WAITOK | M_USE_RESERVE | M_ZERO) -static inline void * -page_address(struct page *page) +/* + * Resolve a page into a virtual address: + * + * NOTE: This function only works for pages allocated by the kernel. + */ +extern void *linux_page_address(struct page *); + +#define page_address(page) linux_page_address(page) + +/* + * Page management for unmapped pages: + */ +extern vm_page_t linux_alloc_pages(gfp_t flags, unsigned int order); +extern void linux_free_pages(vm_page_t page, unsigned int order); + +static inline struct page * +alloc_page(gfp_t flags) { - if (page->object != kmem_object && page->object != kernel_object) - return (NULL); - return ((void *)(uintptr_t)(VM_MIN_KERNEL_ADDRESS + - IDX_TO_OFF(page->pindex))); + return (linux_alloc_pages(flags, 0)); } -static inline unsigned long -linux_get_page(gfp_t mask) +static inline struct page * +alloc_pages(gfp_t flags, unsigned int order) { - return kmem_malloc(kmem_arena, PAGE_SIZE, mask); + return (linux_alloc_pages(flags, order)); } -#define get_zeroed_page(mask) linux_get_page((mask) | M_ZERO) -#define alloc_page(mask) virt_to_page(linux_get_page((mask))) -#define __get_free_page(mask) linux_get_page((mask)) - -static inline void -free_page(unsigned long page) +static inline struct page * +alloc_pages_node(int node_id, gfp_t flags, unsigned int order) { - if (page == 0) - return; - kmem_free(kmem_arena, page, PAGE_SIZE); + return (linux_alloc_pages(flags, order)); } static inline void -__free_page(struct page *m) +__free_pages(struct page *page, unsigned int order) { - if (m->object != kmem_object) - panic("__free_page: Freed page %p not allocated via wrappers.", - m); - kmem_free(kmem_arena, (vm_offset_t)page_address(m), PAGE_SIZE); + linux_free_pages(page, order); } static inline void -__free_pages(struct page *m, unsigned int order) +__free_page(struct page *page) { - size_t size; - if (m == NULL) - return; - size = PAGE_SIZE << order; - kmem_free(kmem_arena, (vm_offset_t)page_address(m), size); -} - -static inline void free_pages(uintptr_t addr, unsigned int order) -{ - if (addr == 0) - return; - __free_pages(virt_to_page((void *)addr), order); + linux_free_pages(page, 0); } /* - * Alloc pages allocates directly from the buddy allocator on linux so - * order specifies a power of two bucket of pages and the results - * are expected to be aligned on the size as well. + * Page management for mapped pages: */ -static inline struct page * -alloc_pages(gfp_t gfp_mask, unsigned int order) -{ - unsigned long page; - size_t size; +extern vm_offset_t linux_alloc_kmem(gfp_t flags, unsigned int order); +extern void linux_free_kmem(vm_offset_t, unsigned int order); - size = PAGE_SIZE << order; - page = kmem_alloc_contig(kmem_arena, size, gfp_mask, - 0, ~(vm_paddr_t)0, size, 0, VM_MEMATTR_DEFAULT); - if (page == 0) - return (NULL); - return (virt_to_page(page)); +static inline vm_offset_t +get_zeroed_page(gfp_t flags) +{ + + return (linux_alloc_kmem(flags | __GFP_ZERO, 0)); } -static inline uintptr_t __get_free_pages(gfp_t gfp_mask, unsigned int order) +static inline vm_offset_t +__get_free_page(gfp_t flags) { - struct page *page; - page = alloc_pages(gfp_mask, order); - if (page == NULL) - return (0); - return ((uintptr_t)page_address(page)); + return (linux_alloc_kmem(flags, 0)); } -#define alloc_pages_node(node, mask, order) alloc_pages(mask, order) +static inline vm_offset_t +__get_free_pages(gfp_t flags, unsigned int order) +{ + + return (linux_alloc_kmem(flags, order)); +} + +static inline void +free_pages(uintptr_t addr, unsigned int order) +{ + if (addr == 0) + return; + + linux_free_kmem(addr, order); +} + +static inline void +free_page(uintptr_t addr) +{ + if (addr == 0) + return; + + linux_free_kmem(addr, 0); +} + +static inline bool +gfpflags_allow_blocking(const gfp_t gfp_flags) +{ + return ((gfp_flags & (M_WAITOK | M_NOWAIT)) == M_WAITOK); +} #define kmalloc_node(chunk, mask, node) kmalloc(chunk, mask) diff --git a/sys/compat/linuxkpi/common/include/linux/interrupt.h b/sys/compat/linuxkpi/common/include/linux/interrupt.h index ed58518730b3..6f7b96dbaa6d 100644 --- a/sys/compat/linuxkpi/common/include/linux/interrupt.h +++ b/sys/compat/linuxkpi/common/include/linux/interrupt.h @@ -148,4 +148,25 @@ free_irq(unsigned int irq, void *device) kfree(irqe); } +/* + * LinuxKPI tasklet support + */ +typedef void tasklet_func_t(unsigned long); + +struct tasklet_struct { + TAILQ_ENTRY(tasklet_struct) entry; + tasklet_func_t *func; + unsigned long data; +}; + +#define DECLARE_TASKLET(name, func, data) \ +struct tasklet_struct name = { { NULL, NULL }, func, data } + +#define tasklet_hi_schedule(t) tasklet_schedule(t) + +extern void tasklet_schedule(struct tasklet_struct *); +extern void tasklet_kill(struct tasklet_struct *); +extern void tasklet_init(struct tasklet_struct *, tasklet_func_t *, + unsigned long data); + #endif /* _LINUX_INTERRUPT_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/jiffies.h b/sys/compat/linuxkpi/common/include/linux/jiffies.h index 9a85f616152a..a95e6064f41c 100644 --- a/sys/compat/linuxkpi/common/include/linux/jiffies.h +++ b/sys/compat/linuxkpi/common/include/linux/jiffies.h @@ -32,7 +32,6 @@ #define _LINUX_JIFFIES_H_ #include -#include #include #include diff --git a/sys/compat/linuxkpi/common/include/linux/kdev_t.h b/sys/compat/linuxkpi/common/include/linux/kdev_t.h index c0bb97e5ba42..447d7af2f842 100644 --- a/sys/compat/linuxkpi/common/include/linux/kdev_t.h +++ b/sys/compat/linuxkpi/common/include/linux/kdev_t.h @@ -31,6 +31,8 @@ #ifndef _LINUX_KDEV_T_H_ #define _LINUX_KDEV_T_H_ +#include + #define MAJOR(dev) major((dev)) #define MINOR(dev) minor((dev)) #define MKDEV(ma, mi) makedev((ma), (mi)) diff --git a/sys/compat/linuxkpi/common/include/linux/kernel.h b/sys/compat/linuxkpi/common/include/linux/kernel.h index ead6a8a72bfe..fabdba5df517 100644 --- a/sys/compat/linuxkpi/common/include/linux/kernel.h +++ b/sys/compat/linuxkpi/common/include/linux/kernel.h @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sys/compat/linuxkpi/common/include/linux/kthread.h b/sys/compat/linuxkpi/common/include/linux/kthread.h index 2e0da123d528..eaf2b31a71ab 100644 --- a/sys/compat/linuxkpi/common/include/linux/kthread.h +++ b/sys/compat/linuxkpi/common/include/linux/kthread.h @@ -2,7 +2,7 @@ * Copyright (c) 2010 Isilon Systems, Inc. * Copyright (c) 2010 iX Systems, Inc. * Copyright (c) 2010 Panasas, Inc. - * Copyright (c) 2013-2016 Mellanox Technologies, Ltd. + * Copyright (c) 2013-2017 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,74 +31,27 @@ #ifndef _LINUX_KTHREAD_H_ #define _LINUX_KTHREAD_H_ -#include -#include -#include -#include -#include -#include - -#include #include -static inline void -linux_kthread_fn(void *arg) -{ - struct task_struct *task; - struct thread *td = curthread; +#include +#include - task = arg; - task_struct_fill(td, task); - task_struct_set(td, task); - if (task->should_stop == 0) - task->task_ret = task->task_fn(task->task_data); - PROC_LOCK(td->td_proc); - task->should_stop = TASK_STOPPED; - wakeup(task); - PROC_UNLOCK(td->td_proc); - task_struct_set(td, NULL); - kthread_exit(); -} - -static inline struct task_struct * -linux_kthread_create(int (*threadfn)(void *data), void *data) -{ - struct task_struct *task; - - task = kzalloc(sizeof(*task), GFP_KERNEL); - task->task_fn = threadfn; - task->task_data = data; - - return (task); -} - -#define kthread_run(fn, data, fmt, ...) \ -({ \ - struct task_struct *_task; \ +#define kthread_run(fn, data, fmt, ...) ({ \ + struct task_struct *__task; \ + struct thread *__td; \ \ - _task = linux_kthread_create((fn), (data)); \ - if (kthread_add(linux_kthread_fn, _task, NULL, &_task->task_thread, \ - 0, 0, fmt, ## __VA_ARGS__)) { \ - kfree(_task); \ - _task = NULL; \ - } \ - _task; \ + if (kthread_add(linux_kthread_fn, NULL, NULL, &__td, \ + RFSTOPPED, 0, fmt, ## __VA_ARGS__)) \ + __task = NULL; \ + else \ + __task = linux_kthread_setup_and_run(__td, fn, data); \ + __task; \ }) -#define kthread_should_stop() current->should_stop - -static inline int -kthread_stop(struct task_struct *task) -{ - - PROC_LOCK(task->task_thread->td_proc); - task->should_stop = TASK_SHOULD_STOP; - wake_up_process(task); - while (task->should_stop != TASK_STOPPED) - msleep(task, &task->task_thread->td_proc->p_mtx, PWAIT, - "kstop", hz); - PROC_UNLOCK(task->task_thread->td_proc); - return task->task_ret; -} +extern int kthread_stop(struct task_struct *); +extern bool kthread_should_stop_task(struct task_struct *); +extern bool kthread_should_stop(void); +extern void linux_kthread_fn(void *); +extern struct task_struct *linux_kthread_setup_and_run(struct thread *, linux_task_fn_t *, void *arg); #endif /* _LINUX_KTHREAD_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/rculist.h b/sys/compat/linuxkpi/common/include/linux/rculist.h new file mode 100644 index 000000000000..e4823de7a3bf --- /dev/null +++ b/sys/compat/linuxkpi/common/include/linux/rculist.h @@ -0,0 +1,85 @@ +/*- + * Copyright (c) 2015 François Tigeot + * Copyright (c) 2016-2017 Mellanox Technologies, Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _LINUX_RCULIST_H_ +#define _LINUX_RCULIST_H_ + +#include +#include + +#define hlist_first_rcu(head) (*((struct hlist_node **)(&(head)->first))) +#define hlist_next_rcu(node) (*((struct hlist_node **)(&(node)->next))) +#define hlist_pprev_rcu(node) (*((struct hlist_node **)((node)->pprev))) + +static inline void +hlist_add_behind_rcu(struct hlist_node *n, struct hlist_node *prev) +{ + n->next = prev->next; + n->pprev = &prev->next; + rcu_assign_pointer(hlist_next_rcu(prev), n); + if (n->next) + n->next->pprev = &n->next; +} + +#define hlist_for_each_entry_rcu(pos, head, member) \ + hlist_for_each_entry(pos, head, member) + +static inline void +hlist_del_rcu(struct hlist_node *n) +{ + struct hlist_node *next = n->next; + struct hlist_node **pprev = n->pprev; + + WRITE_ONCE(*pprev, next); + if (next) + next->pprev = pprev; +} + +static inline void +hlist_add_head_rcu(struct hlist_node *n, struct hlist_head *h) +{ + struct hlist_node *first = h->first; + + n->next = first; + n->pprev = &h->first; + rcu_assign_pointer(hlist_first_rcu(h), n); + if (first) + first->pprev = &n->next; +} + +static inline void +hlist_del_init_rcu(struct hlist_node *n) +{ + if (!hlist_unhashed(n)) { + hlist_del_rcu(n); + n->pprev = NULL; + } +} + +#endif /* _LINUX_RCULIST_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/rcupdate.h b/sys/compat/linuxkpi/common/include/linux/rcupdate.h index 12f43bb23bbb..53deae5626ba 100644 --- a/sys/compat/linuxkpi/common/include/linux/rcupdate.h +++ b/sys/compat/linuxkpi/common/include/linux/rcupdate.h @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2016 Mellanox Technologies, Ltd. + * Copyright (c) 2016-2017 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -28,70 +28,73 @@ #ifndef _LINUX_RCUPDATE_H_ #define _LINUX_RCUPDATE_H_ -#include -#include -#include +#include +#include -extern struct sx linux_global_rcu_lock; +#include -struct rcu_head { -}; +#define LINUX_KFREE_RCU_OFFSET_MAX 4096 /* exclusive */ -typedef void (*rcu_callback_t)(struct rcu_head *); +#define RCU_INITIALIZER(v) \ + ((typeof(*(v)) __force __rcu *)(v)) -static inline void -call_rcu(struct rcu_head *ptr, rcu_callback_t func) -{ - sx_xlock(&linux_global_rcu_lock); - func(ptr); - sx_xunlock(&linux_global_rcu_lock); -} - -static inline void -rcu_read_lock(void) -{ - sx_slock(&linux_global_rcu_lock); -} - -static inline void -rcu_read_unlock(void) -{ - sx_sunlock(&linux_global_rcu_lock); -} - -static inline void -rcu_barrier(void) -{ - sx_xlock(&linux_global_rcu_lock); - sx_xunlock(&linux_global_rcu_lock); -} - -static inline void -synchronize_rcu(void) -{ - sx_xlock(&linux_global_rcu_lock); - sx_xunlock(&linux_global_rcu_lock); -} - -#define hlist_add_head_rcu(n, h) \ -do { \ - sx_xlock(&linux_global_rcu_lock); \ - hlist_add_head(n, h); \ - sx_xunlock(&linux_global_rcu_lock); \ +#define RCU_INIT_POINTER(p, v) do { \ + (p) = (v); \ } while (0) -#define hlist_del_init_rcu(n) \ -do { \ - sx_xlock(&linux_global_rcu_lock); \ - hlist_del_init(n); \ - sx_xunlock(&linux_global_rcu_lock); \ +#define call_rcu(ptr, func) do { \ + linux_call_rcu(ptr, func); \ } while (0) -#define hlist_del_rcu(n) \ -do { \ - sx_xlock(&linux_global_rcu_lock); \ - hlist_del(n); \ - sx_xunlock(&linux_global_rcu_lock); \ +#define rcu_barrier(void) do { \ + linux_rcu_barrier(); \ } while (0) +#define rcu_read_lock(void) do { \ + linux_rcu_read_lock(); \ +} while (0) + +#define rcu_read_unlock(void) do { \ + linux_rcu_read_unlock(); \ +} while (0) + +#define synchronize_rcu(void) do { \ + linux_synchronize_rcu(); \ +} while (0) + +#define synchronize_rcu_expedited(void) do { \ + linux_synchronize_rcu(); \ +} while (0) + +#define kfree_rcu(ptr, rcu_head) do { \ + CTASSERT(offsetof(__typeof(*(ptr)), rcu_head) < \ + LINUX_KFREE_RCU_OFFSET_MAX); \ + call_rcu(&(ptr)->rcu_head, (rcu_callback_t)(uintptr_t) \ + offsetof(__typeof(*(ptr)), rcu_head)); \ +} while (0) + +#define rcu_access_pointer(p) \ + ((typeof(*p) __force __kernel *)(READ_ONCE(p))) + +#define rcu_dereference_protected(p, c) \ + ((typeof(*p) __force __kernel *)(p)) + +#define rcu_dereference(p) \ + rcu_dereference_protected(p, 0) + +#define rcu_pointer_handoff(p) (p) + +#define rcu_assign_pointer(p, v) do { \ + atomic_store_rel_ptr((volatile uintptr_t *)&(p), \ + (uintptr_t)(v)); \ +} while (0) + +/* prototypes */ + +extern void linux_call_rcu(struct rcu_head *ptr, rcu_callback_t func); +extern void linux_rcu_barrier(void); +extern void linux_rcu_read_lock(void); +extern void linux_rcu_read_unlock(void); +extern void linux_synchronize_rcu(void); + #endif /* _LINUX_RCUPDATE_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/rwlock.h b/sys/compat/linuxkpi/common/include/linux/rwlock.h index 54c53dc94988..4c9529e843ef 100644 --- a/sys/compat/linuxkpi/common/include/linux/rwlock.h +++ b/sys/compat/linuxkpi/common/include/linux/rwlock.h @@ -34,6 +34,7 @@ #include #include #include +#include typedef struct { struct rwlock rw; diff --git a/sys/compat/linuxkpi/common/include/linux/rwsem.h b/sys/compat/linuxkpi/common/include/linux/rwsem.h index 22ad4dc62a94..7ca066125a48 100644 --- a/sys/compat/linuxkpi/common/include/linux/rwsem.h +++ b/sys/compat/linuxkpi/common/include/linux/rwsem.h @@ -34,6 +34,7 @@ #include #include #include +#include struct rw_semaphore { struct sx sx; diff --git a/sys/compat/linuxkpi/common/include/linux/scatterlist.h b/sys/compat/linuxkpi/common/include/linux/scatterlist.h index 5aa8d654b504..125b1acb7a33 100644 --- a/sys/compat/linuxkpi/common/include/linux/scatterlist.h +++ b/sys/compat/linuxkpi/common/include/linux/scatterlist.h @@ -2,7 +2,7 @@ * Copyright (c) 2010 Isilon Systems, Inc. * Copyright (c) 2010 iX Systems, Inc. * Copyright (c) 2010 Panasas, Inc. - * Copyright (c) 2013-2015 Mellanox Technologies, Ltd. + * Copyright (c) 2013-2017 Mellanox Technologies, Ltd. * Copyright (c) 2015 Matthew Dillon * All rights reserved. * @@ -34,18 +34,20 @@ #include #include +#include struct scatterlist { - union { - struct page *page; - struct scatterlist *sg; - } sl_un; + unsigned long page_link; +#define SG_PAGE_LINK_CHAIN 0x1UL +#define SG_PAGE_LINK_LAST 0x2UL +#define SG_PAGE_LINK_MASK 0x3UL + unsigned int offset; + unsigned int length; dma_addr_t address; - unsigned long offset; - uint32_t length; - uint32_t flags; }; +CTASSERT((sizeof(struct scatterlist) & SG_PAGE_LINK_MASK) == 0); + struct sg_table { struct scatterlist *sgl; unsigned int nents; @@ -56,27 +58,55 @@ struct sg_page_iter { struct scatterlist *sg; unsigned int sg_pgoffset; unsigned int maxents; + struct { + unsigned int nents; + int pg_advance; + } internal; }; #define SG_MAX_SINGLE_ALLOC (PAGE_SIZE / sizeof(struct scatterlist)) +#define SG_MAGIC 0x87654321UL + +#define sg_is_chain(sg) ((sg)->page_link & SG_PAGE_LINK_CHAIN) +#define sg_is_last(sg) ((sg)->page_link & SG_PAGE_LINK_LAST) +#define sg_chain_ptr(sg) \ + ((struct scatterlist *) ((sg)->page_link & ~SG_PAGE_LINK_MASK)) + #define sg_dma_address(sg) (sg)->address #define sg_dma_len(sg) (sg)->length -#define sg_page(sg) (sg)->sl_un.page -#define sg_scatternext(sg) (sg)->sl_un.sg -#define SG_END 0x01 -#define SG_CHAIN 0x02 +#define for_each_sg_page(sgl, iter, nents, pgoffset) \ + for (_sg_iter_init(sgl, iter, nents, pgoffset); \ + (iter)->sg; _sg_iter_next(iter)) + +#define for_each_sg(sglist, sg, sgmax, iter) \ + for (iter = 0, sg = (sglist); iter < (sgmax); iter++, sg = sg_next(sg)) + +typedef struct scatterlist *(sg_alloc_fn) (unsigned int, gfp_t); +typedef void (sg_free_fn) (struct scatterlist *, unsigned int); + +static inline void +sg_assign_page(struct scatterlist *sg, struct page *page) +{ + unsigned long page_link = sg->page_link & SG_PAGE_LINK_MASK; + + sg->page_link = page_link | (unsigned long)page; +} static inline void sg_set_page(struct scatterlist *sg, struct page *page, unsigned int len, unsigned int offset) { - sg_page(sg) = page; - sg_dma_len(sg) = len; + sg_assign_page(sg, page); sg->offset = offset; - if (offset > PAGE_SIZE) - panic("sg_set_page: Invalid offset %d\n", offset); + sg->length = len; +} + +static inline struct page * +sg_page(struct scatterlist *sg) +{ + return ((struct page *)((sg)->page_link & ~SG_PAGE_LINK_MASK)); } static inline void @@ -86,28 +116,21 @@ sg_set_buf(struct scatterlist *sg, const void *buf, unsigned int buflen) ((uintptr_t)buf) & (PAGE_SIZE - 1)); } -static inline void -sg_init_table(struct scatterlist *sg, unsigned int nents) -{ - bzero(sg, sizeof(*sg) * nents); - sg[nents - 1].flags = SG_END; -} - static inline struct scatterlist * sg_next(struct scatterlist *sg) { - if (sg->flags & SG_END) + if (sg_is_last(sg)) return (NULL); sg++; - if (sg->flags & SG_CHAIN) - sg = sg_scatternext(sg); + if (sg_is_chain(sg)) + sg = sg_chain_ptr(sg); return (sg); } static inline vm_paddr_t sg_phys(struct scatterlist *sg) { - return sg_page(sg)->phys_addr + sg->offset; + return (VM_PAGE_TO_PHYS(sg_page(sg)) + sg->offset); } static inline void @@ -118,18 +141,45 @@ sg_chain(struct scatterlist *prv, unsigned int prv_nents, sg->offset = 0; sg->length = 0; - sg->flags = SG_CHAIN; - sg->sl_un.sg = sgl; -} - -static inline void -sg_mark_end(struct scatterlist *sg) -{ - sg->flags = SG_END; + sg->page_link = ((unsigned long)sgl | + SG_PAGE_LINK_CHAIN) & ~SG_PAGE_LINK_LAST; } static inline void -__sg_free_table(struct sg_table *table, unsigned int max_ents) +sg_mark_end(struct scatterlist *sg) +{ + sg->page_link |= SG_PAGE_LINK_LAST; + sg->page_link &= ~SG_PAGE_LINK_CHAIN; +} + +static inline void +sg_init_table(struct scatterlist *sg, unsigned int nents) +{ + bzero(sg, sizeof(*sg) * nents); + sg_mark_end(&sg[nents - 1]); +} + +static struct scatterlist * +sg_kmalloc(unsigned int nents, gfp_t gfp_mask) +{ + if (nents == SG_MAX_SINGLE_ALLOC) { + return ((void *)__get_free_page(gfp_mask)); + } else + return (kmalloc(nents * sizeof(struct scatterlist), gfp_mask)); +} + +static inline void +sg_kfree(struct scatterlist *sg, unsigned int nents) +{ + if (nents == SG_MAX_SINGLE_ALLOC) { + free_page((unsigned long)sg); + } else + kfree(sg); +} + +static inline void +__sg_free_table(struct sg_table *table, unsigned int max_ents, + bool skip_first_chunk, sg_free_fn * free_fn) { struct scatterlist *sgl, *next; @@ -142,7 +192,7 @@ __sg_free_table(struct sg_table *table, unsigned int max_ents) unsigned int sg_size; if (alloc_size > max_ents) { - next = sgl[max_ents - 1].sl_un.sg; + next = sg_chain_ptr(&sgl[max_ents - 1]); alloc_size = max_ents; sg_size = alloc_size - 1; } else { @@ -151,7 +201,10 @@ __sg_free_table(struct sg_table *table, unsigned int max_ents) } table->orig_nents -= sg_size; - kfree(sgl); + if (skip_first_chunk) + skip_first_chunk = 0; + else + free_fn(sgl, alloc_size); sgl = next; } @@ -161,12 +214,13 @@ __sg_free_table(struct sg_table *table, unsigned int max_ents) static inline void sg_free_table(struct sg_table *table) { - __sg_free_table(table, SG_MAX_SINGLE_ALLOC); + __sg_free_table(table, SG_MAX_SINGLE_ALLOC, 0, sg_kfree); } static inline int __sg_alloc_table(struct sg_table *table, unsigned int nents, - unsigned int max_ents, gfp_t gfp_mask) + unsigned int max_ents, struct scatterlist *first_chunk, + gfp_t gfp_mask, sg_alloc_fn *alloc_fn) { struct scatterlist *sg, *prv; unsigned int left; @@ -174,7 +228,7 @@ __sg_alloc_table(struct sg_table *table, unsigned int nents, memset(table, 0, sizeof(*table)); if (nents == 0) - return -EINVAL; + return (-EINVAL); left = nents; prv = NULL; do { @@ -189,12 +243,17 @@ __sg_alloc_table(struct sg_table *table, unsigned int nents, left -= sg_size; - sg = kmalloc(alloc_size * sizeof(struct scatterlist), gfp_mask); + if (first_chunk) { + sg = first_chunk; + first_chunk = NULL; + } else { + sg = alloc_fn(alloc_size, gfp_mask); + } if (unlikely(!sg)) { if (prv) table->nents = ++table->orig_nents; - return -ENOMEM; + return (-ENOMEM); } sg_init_table(sg, alloc_size); table->nents = table->orig_nents += sg_size; @@ -210,7 +269,7 @@ __sg_alloc_table(struct sg_table *table, unsigned int nents, prv = sg; } while (left); - return 0; + return (0); } static inline int @@ -219,11 +278,70 @@ sg_alloc_table(struct sg_table *table, unsigned int nents, gfp_t gfp_mask) int ret; ret = __sg_alloc_table(table, nents, SG_MAX_SINGLE_ALLOC, - gfp_mask); + NULL, gfp_mask, sg_kmalloc); if (unlikely(ret)) - __sg_free_table(table, SG_MAX_SINGLE_ALLOC); + __sg_free_table(table, SG_MAX_SINGLE_ALLOC, 0, sg_kfree); - return ret; + return (ret); +} + +static inline int +sg_alloc_table_from_pages(struct sg_table *sgt, + struct page **pages, unsigned int count, + unsigned long off, unsigned long size, + gfp_t gfp_mask) +{ + unsigned int i, segs, cur; + int rc; + struct scatterlist *s; + + for (segs = i = 1; i < count; ++i) { + if (page_to_pfn(pages[i]) != page_to_pfn(pages[i - 1]) + 1) + ++segs; + } + if (__predict_false((rc = sg_alloc_table(sgt, segs, gfp_mask)))) + return (rc); + + cur = 0; + for_each_sg(sgt->sgl, s, sgt->orig_nents, i) { + unsigned long seg_size; + unsigned int j; + + for (j = cur + 1; j < count; ++j) + if (page_to_pfn(pages[j]) != + page_to_pfn(pages[j - 1]) + 1) + break; + + seg_size = ((j - cur) << PAGE_SHIFT) - off; + sg_set_page(s, pages[cur], min(size, seg_size), off); + size -= seg_size; + off = 0; + cur = j; + } + return (0); +} + + +static inline int +sg_nents(struct scatterlist *sg) +{ + int nents; + + for (nents = 0; sg; sg = sg_next(sg)) + nents++; + return (nents); +} + +static inline void +__sg_page_iter_start(struct sg_page_iter *piter, + struct scatterlist *sglist, unsigned int nents, + unsigned long pgoffset) +{ + piter->internal.pg_advance = 0; + piter->internal.nents = nents; + + piter->sg = sglist; + piter->sg_pgoffset = pgoffset; } static inline void @@ -247,6 +365,34 @@ _sg_iter_next(struct sg_page_iter *iter) iter->sg = sg; } +static inline int +sg_page_count(struct scatterlist *sg) +{ + return (PAGE_ALIGN(sg->offset + sg->length) >> PAGE_SHIFT); +} + +static inline bool +__sg_page_iter_next(struct sg_page_iter *piter) +{ + if (piter->internal.nents == 0) + return (0); + if (piter->sg == NULL) + return (0); + + piter->sg_pgoffset += piter->internal.pg_advance; + piter->internal.pg_advance = 1; + + while (piter->sg_pgoffset >= sg_page_count(piter->sg)) { + piter->sg_pgoffset -= sg_page_count(piter->sg); + piter->sg = sg_next(piter->sg); + if (--piter->internal.nents == 0) + return (0); + if (piter->sg == NULL) + return (0); + } + return (1); +} + static inline void _sg_iter_init(struct scatterlist *sgl, struct sg_page_iter *iter, unsigned int nents, unsigned long pgoffset) @@ -266,14 +412,14 @@ _sg_iter_init(struct scatterlist *sgl, struct sg_page_iter *iter, static inline dma_addr_t sg_page_iter_dma_address(struct sg_page_iter *spi) { - return spi->sg->address + (spi->sg_pgoffset << PAGE_SHIFT); + return (spi->sg->address + (spi->sg_pgoffset << PAGE_SHIFT)); } -#define for_each_sg_page(sgl, iter, nents, pgoffset) \ - for (_sg_iter_init(sgl, iter, nents, pgoffset); \ - (iter)->sg; _sg_iter_next(iter)) +static inline struct page * +sg_page_iter_page(struct sg_page_iter *piter) +{ + return (nth_page(sg_page(piter->sg), piter->sg_pgoffset)); +} -#define for_each_sg(sglist, sg, sgmax, _itr) \ - for (_itr = 0, sg = (sglist); _itr < (sgmax); _itr++, sg = sg_next(sg)) #endif /* _LINUX_SCATTERLIST_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/sched.h b/sys/compat/linuxkpi/common/include/linux/sched.h index c9f2a399904e..04abc8230775 100644 --- a/sys/compat/linuxkpi/common/include/linux/sched.h +++ b/sys/compat/linuxkpi/common/include/linux/sched.h @@ -2,7 +2,7 @@ * Copyright (c) 2010 Isilon Systems, Inc. * Copyright (c) 2010 iX Systems, Inc. * Copyright (c) 2010 Panasas, Inc. - * Copyright (c) 2013-2016 Mellanox Technologies, Ltd. + * Copyright (c) 2013-2017 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -37,6 +37,12 @@ #include #include +#include +#include +#include + +#include + #define MAX_SCHEDULE_TIMEOUT LONG_MAX #define TASK_RUNNING 0 @@ -46,41 +52,22 @@ #define TASK_WAKEKILL 128 #define TASK_WAKING 256 -#define TASK_SHOULD_STOP 1 -#define TASK_STOPPED 2 - -/* - * A task_struct is only provided for threads created by kthread() and - * file operation callbacks. - * - * Using these routines outside the above mentioned contexts will - * cause panics because no task_struct is assigned and td_retval[1] is - * overwritten by syscalls. - */ struct task_struct { - struct thread *task_thread; - int (*task_fn)(void *data); - void *task_data; + struct thread *task_thread; + linux_task_fn_t *task_fn; + void *task_data; int task_ret; int state; - int should_stop; + atomic_t kthread_flags; pid_t pid; const char *comm; - void *bsd_ioctl_data; - unsigned bsd_ioctl_len; + void *bsd_ioctl_data; + unsigned bsd_ioctl_len; + struct completion parked; + struct completion exited; }; -#define current task_struct_get(curthread) -#define task_struct_get(x) ((struct task_struct *)(uintptr_t)(x)->td_retval[1]) -#define task_struct_fill(x, y) do { \ - (y)->task_thread = (x); \ - (y)->comm = (x)->td_name; \ - (y)->pid = (x)->td_tid; \ -} while (0) -#define task_struct_set(x, y) (x)->td_retval[1] = (uintptr_t)(y) - -/* ensure the task_struct pointer fits into the td_retval[1] field */ -CTASSERT(sizeof(((struct thread *)0)->td_retval[1]) >= sizeof(uintptr_t)); +#define current ((struct task_struct *)curthread->td_lkpi_task) #define set_current_state(x) \ atomic_store_rel_int((volatile int *)¤t->state, (x)) diff --git a/sys/compat/linuxkpi/common/include/linux/semaphore.h b/sys/compat/linuxkpi/common/include/linux/semaphore.h index 022a0164840f..59a35311a5cc 100644 --- a/sys/compat/linuxkpi/common/include/linux/semaphore.h +++ b/sys/compat/linuxkpi/common/include/linux/semaphore.h @@ -34,6 +34,7 @@ #include #include #include +#include /* * XXX BSD semaphores are disused and slow. They also do not provide a diff --git a/sys/compat/linuxkpi/common/include/linux/spinlock.h b/sys/compat/linuxkpi/common/include/linux/spinlock.h index 97c83e0ed034..dbd7a5a9e5ed 100644 --- a/sys/compat/linuxkpi/common/include/linux/spinlock.h +++ b/sys/compat/linuxkpi/common/include/linux/spinlock.h @@ -2,7 +2,7 @@ * Copyright (c) 2010 Isilon Systems, Inc. * Copyright (c) 2010 iX Systems, Inc. * Copyright (c) 2010 Panasas, Inc. - * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd. + * Copyright (c) 2013-2017 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -35,36 +35,126 @@ #include #include #include +#include #include -#include #include +#include typedef struct { struct mtx m; } spinlock_t; -#define spin_lock(_l) mtx_lock(&(_l)->m) -#define spin_unlock(_l) mtx_unlock(&(_l)->m) -#define spin_trylock(_l) mtx_trylock(&(_l)->m) -#define spin_lock_nested(_l, _n) mtx_lock_flags(&(_l)->m, MTX_DUPOK) -#define spin_lock_irq(lock) spin_lock(lock) -#define spin_unlock_irq(lock) spin_unlock(lock) -#define spin_lock_irqsave(lock, flags) \ - do {(flags) = 0; spin_lock(lock); } while (0) -#define spin_unlock_irqrestore(lock, flags) \ - do { spin_unlock(lock); } while (0) +/* + * By defining CONFIG_SPIN_SKIP LinuxKPI spinlocks and asserts will be + * skipped during panic(). By default it is disabled due to + * performance reasons. + */ +#ifdef CONFIG_SPIN_SKIP +#define SPIN_SKIP(void) unlikely(SCHEDULER_STOPPED() || kdb_active) +#else +#define SPIN_SKIP(void) 0 +#endif + +#define spin_lock(_l) do { \ + if (SPIN_SKIP()) \ + break; \ + mtx_lock(&(_l)->m); \ + local_bh_disable(); \ +} while (0) + +#define spin_lock_bh(_l) do { \ + spin_lock(_l); \ +} while (0) + +#define spin_lock_irq(_l) do { \ + spin_lock(_l); \ +} while (0) + +#define spin_unlock(_l) do { \ + if (SPIN_SKIP()) \ + break; \ + local_bh_enable(); \ + mtx_unlock(&(_l)->m); \ +} while (0) + +#define spin_unlock_bh(_l) do { \ + spin_unlock(_l); \ +} while (0) + +#define spin_unlock_irq(_l) do { \ + spin_unlock(_l); \ +} while (0) + +#define spin_trylock(_l) ({ \ + int __ret; \ + if (SPIN_SKIP()) { \ + __ret = 1; \ + } else { \ + __ret = mtx_trylock(&(_l)->m); \ + if (likely(__ret != 0)) \ + local_bh_disable(); \ + } \ + __ret; \ +}) + +#define spin_lock_nested(_l, _n) do { \ + if (SPIN_SKIP()) \ + break; \ + mtx_lock_flags(&(_l)->m, MTX_DUPOK); \ + local_bh_disable(); \ +} while (0) + +#define spin_lock_irqsave(_l, flags) do { \ + (flags) = 0; \ + spin_lock(_l); \ +} while (0) + +#define spin_lock_irqsave_nested(_l, flags, _n) do { \ + (flags) = 0; \ + spin_lock_nested(_l, _n); \ +} while (0) + +#define spin_unlock_irqrestore(_l, flags) do { \ + spin_unlock(_l); \ +} while (0) + +#ifdef WITNESS_ALL +/* NOTE: the maximum WITNESS name is 64 chars */ +#define __spin_lock_name(name, file, line) \ + (((const char *){file ":" #line "-" name}) + \ + (sizeof(file) > 16 ? sizeof(file) - 16 : 0)) +#else +#define __spin_lock_name(name, file, line) name +#endif +#define _spin_lock_name(...) __spin_lock_name(__VA_ARGS__) +#define spin_lock_name(name) _spin_lock_name(name, __FILE__, __LINE__) + +#define spin_lock_init(lock) linux_spin_lock_init(lock, spin_lock_name("lnxspin")) static inline void -spin_lock_init(spinlock_t *lock) +linux_spin_lock_init(spinlock_t *lock, const char *name) { - memset(&lock->m, 0, sizeof(lock->m)); - mtx_init(&lock->m, "lnxspin", NULL, MTX_DEF | MTX_NOWITNESS); + memset(lock, 0, sizeof(*lock)); + mtx_init(&lock->m, name, NULL, MTX_DEF | MTX_NOWITNESS); } -#define DEFINE_SPINLOCK(lock) \ - spinlock_t lock; \ - MTX_SYSINIT(lock, &(lock).m, "lnxspin", MTX_DEF) +static inline void +spin_lock_destroy(spinlock_t *lock) +{ -#endif /* _LINUX_SPINLOCK_H_ */ + mtx_destroy(&lock->m); +} + +#define DEFINE_SPINLOCK(lock) \ + spinlock_t lock; \ + MTX_SYSINIT(lock, &(lock).m, spin_lock_name("lnxspin"), MTX_DEF) + +#define assert_spin_locked(_l) do { \ + if (SPIN_SKIP()) \ + break; \ + mtx_assert(&(_l)->m, MA_OWNED); \ +} while (0) + +#endif /* _LINUX_SPINLOCK_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/srcu.h b/sys/compat/linuxkpi/common/include/linux/srcu.h index c20215b09580..20ee7e62dd8d 100644 --- a/sys/compat/linuxkpi/common/include/linux/srcu.h +++ b/sys/compat/linuxkpi/common/include/linux/srcu.h @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2015 Mellanox Technologies, Ltd. + * Copyright (c) 2015-2017 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -25,48 +25,22 @@ * * $FreeBSD$ */ + #ifndef _LINUX_SRCU_H_ #define _LINUX_SRCU_H_ -#include -#include -#include - +struct ck_epoch_record; struct srcu_struct { - struct sx sx; + struct ck_epoch_record *ss_epoch_record; }; -static inline int -init_srcu_struct(struct srcu_struct *srcu) -{ - sx_init(&srcu->sx, "SleepableRCU"); - return (0); -} +/* prototypes */ -static inline void -cleanup_srcu_struct(struct srcu_struct *srcu) -{ - sx_destroy(&srcu->sx); -} - -static inline int -srcu_read_lock(struct srcu_struct *srcu) -{ - sx_slock(&srcu->sx); - return (0); -} - -static inline void -srcu_read_unlock(struct srcu_struct *srcu, int key) -{ - sx_sunlock(&srcu->sx); -} - -static inline void -synchronize_srcu(struct srcu_struct *srcu) -{ - sx_xlock(&srcu->sx); - sx_xunlock(&srcu->sx); -} +extern int srcu_read_lock(struct srcu_struct *); +extern void srcu_read_unlock(struct srcu_struct *, int index); +extern void synchronize_srcu(struct srcu_struct *); +extern int init_srcu_struct(struct srcu_struct *); +extern void cleanup_srcu_struct(struct srcu_struct *); +extern void srcu_barrier(struct srcu_struct *); #endif /* _LINUX_SRCU_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/types.h b/sys/compat/linuxkpi/common/include/linux/types.h index c9c37284a706..7572756f656f 100644 --- a/sys/compat/linuxkpi/common/include/linux/types.h +++ b/sys/compat/linuxkpi/common/include/linux/types.h @@ -63,4 +63,12 @@ typedef u64 phys_addr_t; #define DECLARE_BITMAP(n, bits) \ unsigned long n[howmany(bits, sizeof(long) * 8)] +struct rcu_head { + void *raw[8]; +} __aligned(sizeof(void *)); + +typedef void (*rcu_callback_t)(struct rcu_head *head); +typedef void (*call_rcu_func_t)(struct rcu_head *head, rcu_callback_t func); +typedef int linux_task_fn_t(void *data); + #endif /* _LINUX_TYPES_H_ */ diff --git a/sys/compat/linuxkpi/common/include/linux/wait.h b/sys/compat/linuxkpi/common/include/linux/wait.h index 7ae6464c6d4e..14da6d264cec 100644 --- a/sys/compat/linuxkpi/common/include/linux/wait.h +++ b/sys/compat/linuxkpi/common/include/linux/wait.h @@ -32,8 +32,6 @@ #define _LINUX_WAIT_H_ #include -#include -#include #include #include diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c b/sys/compat/linuxkpi/common/src/linux_compat.c index 54bd33bc7ad7..cac224a7b816 100644 --- a/sys/compat/linuxkpi/common/src/linux_compat.c +++ b/sys/compat/linuxkpi/common/src/linux_compat.c @@ -96,7 +96,6 @@ struct list_head pci_drivers; struct list_head pci_devices; struct net init_net; spinlock_t pci_lock; -struct sx linux_global_rcu_lock; unsigned long linux_timer_hz_mask; @@ -384,32 +383,14 @@ kobject_init_and_add(struct kobject *kobj, const struct kobj_type *ktype, return kobject_add_complete(kobj, parent); } -void -linux_set_current(struct thread *td, struct task_struct *t) -{ - memset(t, 0, sizeof(*t)); - task_struct_fill(td, t); - task_struct_set(td, t); -} - -void -linux_clear_current(struct thread *td) -{ - task_struct_set(td, NULL); -} - static void linux_file_dtor(void *cdp) { struct linux_file *filp; - struct task_struct t; - struct thread *td; - td = curthread; + linux_set_current(curthread); filp = cdp; - linux_set_current(td, &t); filp->f_op->release(filp->f_vnode, filp); - linux_clear_current(td); vdrop(filp->f_vnode); kfree(filp); } @@ -419,7 +400,6 @@ linux_dev_open(struct cdev *dev, int oflags, int devtype, struct thread *td) { struct linux_cdev *ldev; struct linux_file *filp; - struct task_struct t; struct file *file; int error; @@ -433,7 +413,7 @@ linux_dev_open(struct cdev *dev, int oflags, int devtype, struct thread *td) filp->f_flags = file->f_flag; vhold(file->f_vnode); filp->f_vnode = file->f_vnode; - linux_set_current(td, &t); + linux_set_current(td); if (filp->f_op->open) { error = -filp->f_op->open(file->f_vnode, filp); if (error) { @@ -447,7 +427,6 @@ linux_dev_open(struct cdev *dev, int oflags, int devtype, struct thread *td) kfree(filp); } done: - linux_clear_current(td); return (error); } @@ -538,7 +517,6 @@ linux_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, { struct linux_cdev *ldev; struct linux_file *filp; - struct task_struct t; struct file *file; unsigned size; int error; @@ -550,7 +528,8 @@ linux_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, if ((error = devfs_get_cdevpriv((void **)&filp)) != 0) return (error); filp->f_flags = file->f_flag; - linux_set_current(td, &t); + + linux_set_current(td); size = IOCPARM_LEN(cmd); /* refer to logic in sys_ioctl() */ if (size > 0) { @@ -560,8 +539,8 @@ linux_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, * Background: Linux code expects a user-space address * while FreeBSD supplies a kernel-space address. */ - t.bsd_ioctl_data = data; - t.bsd_ioctl_len = size; + current->bsd_ioctl_data = data; + current->bsd_ioctl_len = size; data = (void *)LINUX_IOCTL_MIN_PTR; } else { /* fetch user-space pointer */ @@ -571,7 +550,10 @@ linux_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, error = -filp->f_op->unlocked_ioctl(filp, cmd, (u_long)data); else error = ENOTTY; - linux_clear_current(td); + if (size > 0) { + current->bsd_ioctl_data = NULL; + current->bsd_ioctl_len = 0; + } return (error); } @@ -581,7 +563,6 @@ linux_dev_read(struct cdev *dev, struct uio *uio, int ioflag) { struct linux_cdev *ldev; struct linux_file *filp; - struct task_struct t; struct thread *td; struct file *file; ssize_t bytes; @@ -598,7 +579,7 @@ linux_dev_read(struct cdev *dev, struct uio *uio, int ioflag) /* XXX no support for I/O vectors currently */ if (uio->uio_iovcnt != 1) return (EOPNOTSUPP); - linux_set_current(td, &t); + linux_set_current(td); if (filp->f_op->read) { bytes = filp->f_op->read(filp, uio->uio_iov->iov_base, uio->uio_iov->iov_len, &uio->uio_offset); @@ -611,7 +592,6 @@ linux_dev_read(struct cdev *dev, struct uio *uio, int ioflag) error = -bytes; } else error = ENXIO; - linux_clear_current(td); return (error); } @@ -621,7 +601,6 @@ linux_dev_write(struct cdev *dev, struct uio *uio, int ioflag) { struct linux_cdev *ldev; struct linux_file *filp; - struct task_struct t; struct thread *td; struct file *file; ssize_t bytes; @@ -638,7 +617,7 @@ linux_dev_write(struct cdev *dev, struct uio *uio, int ioflag) /* XXX no support for I/O vectors currently */ if (uio->uio_iovcnt != 1) return (EOPNOTSUPP); - linux_set_current(td, &t); + linux_set_current(td); if (filp->f_op->write) { bytes = filp->f_op->write(filp, uio->uio_iov->iov_base, uio->uio_iov->iov_len, &uio->uio_offset); @@ -651,7 +630,6 @@ linux_dev_write(struct cdev *dev, struct uio *uio, int ioflag) error = -bytes; } else error = ENXIO; - linux_clear_current(td); return (error); } @@ -661,7 +639,6 @@ linux_dev_poll(struct cdev *dev, int events, struct thread *td) { struct linux_cdev *ldev; struct linux_file *filp; - struct task_struct t; struct file *file; int revents; int error; @@ -673,12 +650,11 @@ linux_dev_poll(struct cdev *dev, int events, struct thread *td) if ((error = devfs_get_cdevpriv((void **)&filp)) != 0) return (error); filp->f_flags = file->f_flag; - linux_set_current(td, &t); + linux_set_current(td); if (filp->f_op->poll) revents = filp->f_op->poll(filp, NULL) & events; else revents = 0; - linux_clear_current(td); return (revents); } @@ -690,7 +666,6 @@ linux_dev_mmap_single(struct cdev *dev, vm_ooffset_t *offset, struct linux_cdev *ldev; struct linux_file *filp; struct thread *td; - struct task_struct t; struct file *file; struct vm_area_struct vma; int error; @@ -703,7 +678,7 @@ linux_dev_mmap_single(struct cdev *dev, vm_ooffset_t *offset, if ((error = devfs_get_cdevpriv((void **)&filp)) != 0) return (error); filp->f_flags = file->f_flag; - linux_set_current(td, &t); + linux_set_current(td); vma.vm_start = 0; vma.vm_end = size; vma.vm_pgoff = *offset / PAGE_SIZE; @@ -735,7 +710,6 @@ linux_dev_mmap_single(struct cdev *dev, vm_ooffset_t *offset, } else error = ENODEV; done: - linux_clear_current(td); return (error); } @@ -756,7 +730,6 @@ linux_file_read(struct file *file, struct uio *uio, struct ucred *active_cred, int flags, struct thread *td) { struct linux_file *filp; - struct task_struct t; ssize_t bytes; int error; @@ -766,7 +739,7 @@ linux_file_read(struct file *file, struct uio *uio, struct ucred *active_cred, /* XXX no support for I/O vectors currently */ if (uio->uio_iovcnt != 1) return (EOPNOTSUPP); - linux_set_current(td, &t); + linux_set_current(td); if (filp->f_op->read) { bytes = filp->f_op->read(filp, uio->uio_iov->iov_base, uio->uio_iov->iov_len, &uio->uio_offset); @@ -779,7 +752,6 @@ linux_file_read(struct file *file, struct uio *uio, struct ucred *active_cred, error = -bytes; } else error = ENXIO; - linux_clear_current(td); return (error); } @@ -789,17 +761,15 @@ linux_file_poll(struct file *file, int events, struct ucred *active_cred, struct thread *td) { struct linux_file *filp; - struct task_struct t; int revents; filp = (struct linux_file *)file->f_data; filp->f_flags = file->f_flag; - linux_set_current(td, &t); + linux_set_current(td); if (filp->f_op->poll) revents = filp->f_op->poll(filp, NULL) & events; else revents = 0; - linux_clear_current(td); return (revents); } @@ -808,14 +778,12 @@ static int linux_file_close(struct file *file, struct thread *td) { struct linux_file *filp; - struct task_struct t; int error; filp = (struct linux_file *)file->f_data; filp->f_flags = file->f_flag; - linux_set_current(td, &t); + linux_set_current(td); error = -filp->f_op->release(NULL, filp); - linux_clear_current(td); funsetown(&filp->f_sigio); kfree(filp); @@ -827,14 +795,13 @@ linux_file_ioctl(struct file *fp, u_long cmd, void *data, struct ucred *cred, struct thread *td) { struct linux_file *filp; - struct task_struct t; int error; filp = (struct linux_file *)fp->f_data; filp->f_flags = fp->f_flag; error = 0; - linux_set_current(td, &t); + linux_set_current(td); switch (cmd) { case FIONBIO: break; @@ -856,7 +823,6 @@ linux_file_ioctl(struct file *fp, u_long cmd, void *data, struct ucred *cred, error = ENOTTY; break; } - linux_clear_current(td); return (error); } @@ -1507,7 +1473,6 @@ linux_compat_init(void *arg) #if defined(__i386__) || defined(__amd64__) linux_cpu_has_clflush = (cpu_feature & CPUID_CLFSH); #endif - sx_init(&linux_global_rcu_lock, "LinuxGlobalRCU"); rootoid = SYSCTL_ADD_ROOT_NODE(NULL, OID_AUTO, "sys", CTLFLAG_RD|CTLFLAG_MPSAFE, NULL, "sys"); @@ -1540,7 +1505,6 @@ linux_compat_uninit(void *arg) linux_kobject_kfree_name(&linux_class_misc.kobj); synchronize_rcu(); - sx_destroy(&linux_global_rcu_lock); } SYSUNINIT(linux_compat, SI_SUB_DRIVERS, SI_ORDER_SECOND, linux_compat_uninit, NULL); diff --git a/sys/compat/linuxkpi/common/src/linux_current.c b/sys/compat/linuxkpi/common/src/linux_current.c new file mode 100644 index 000000000000..6b4442cb4bce --- /dev/null +++ b/sys/compat/linuxkpi/common/src/linux_current.c @@ -0,0 +1,94 @@ +/*- + * Copyright (c) 2017 Hans Petter Selasky + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include +#include +#include + +static eventhandler_tag linuxkpi_thread_dtor_tag; + +static MALLOC_DEFINE(M_LINUX_CURRENT, "linuxcurrent", "LinuxKPI task structure"); + +int +linux_alloc_current(struct thread *td, int flags) +{ + struct task_struct *ts; + + MPASS(td->td_lkpi_task == NULL); + + ts = malloc(sizeof(*ts), M_LINUX_CURRENT, flags | M_ZERO); + if (ts == NULL) + return (ENOMEM); + + atomic_set(&ts->kthread_flags, 0); + ts->task_thread = td; + ts->comm = td->td_name; + ts->pid = td->td_tid; + ts->state = TASK_RUNNING; + td->td_lkpi_task = ts; + return (0); +} + +void +linux_free_current(struct task_struct *ts) +{ + free(ts, M_LINUX_CURRENT); +} + +static void +linuxkpi_thread_dtor(void *arg __unused, struct thread *td) +{ + struct task_struct *ts; + + ts = td->td_lkpi_task; + if (ts == NULL) + return; + + td->td_lkpi_task = NULL; + free(ts, M_LINUX_CURRENT); +} + +static void +linux_current_init(void *arg __unused) +{ + linuxkpi_thread_dtor_tag = EVENTHANDLER_REGISTER(thread_dtor, + linuxkpi_thread_dtor, NULL, EVENTHANDLER_PRI_ANY); +} +SYSINIT(linux_current, SI_SUB_EVENTHANDLER, SI_ORDER_SECOND, linux_current_init, NULL); + +static void +linux_current_uninit(void *arg __unused) +{ + EVENTHANDLER_DEREGISTER(thread_dtor, linuxkpi_thread_dtor_tag); +} +SYSUNINIT(linux_current, SI_SUB_EVENTHANDLER, SI_ORDER_SECOND, linux_current_uninit, NULL); diff --git a/sys/compat/linuxkpi/common/src/linux_kthread.c b/sys/compat/linuxkpi/common/src/linux_kthread.c new file mode 100644 index 000000000000..90da31f1ad0a --- /dev/null +++ b/sys/compat/linuxkpi/common/src/linux_kthread.c @@ -0,0 +1,120 @@ +/*- + * Copyright (c) 2017 Hans Petter Selasky + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include +#include +#include + +enum { + KTHREAD_SHOULD_STOP_MASK = (1 << 0), + KTHREAD_SHOULD_PARK_MASK = (1 << 1), + KTHREAD_IS_PARKED_MASK = (1 << 2), +}; + +bool +kthread_should_stop_task(struct task_struct *task) +{ + + return (atomic_read(&task->kthread_flags) & KTHREAD_SHOULD_STOP_MASK); +} + +bool +kthread_should_stop(void) +{ + + return (atomic_read(¤t->kthread_flags) & KTHREAD_SHOULD_STOP_MASK); +} + +int +kthread_stop(struct task_struct *task) +{ + int retval; + + /* + * Assume task is still alive else caller should not call + * kthread_stop(): + */ + atomic_or(KTHREAD_SHOULD_STOP_MASK, &task->kthread_flags); + wake_up_process(task); + wait_for_completion(&task->exited); + + /* + * Get return code and free task structure: + */ + retval = task->task_ret; + linux_free_current(task); + + return (retval); +} + +struct task_struct * +linux_kthread_setup_and_run(struct thread *td, linux_task_fn_t *task_fn, void *arg) +{ + struct task_struct *task; + + linux_set_current(td); + + task = td->td_lkpi_task; + task->task_fn = task_fn; + task->task_data = arg; + + thread_lock(td); + /* make sure the scheduler priority is raised */ + sched_prio(td, PI_SWI(SWI_NET)); + /* put thread into run-queue */ + sched_add(td, SRQ_BORING); + thread_unlock(td); + + return (task); +} + +void +linux_kthread_fn(void *arg __unused) +{ + struct task_struct *task = current; + + if (kthread_should_stop_task(task) == 0) + task->task_ret = task->task_fn(task->task_data); + + if (kthread_should_stop_task(task) != 0) { + struct thread *td = curthread; + + /* let kthread_stop() free data */ + td->td_lkpi_task = NULL; + + /* wakeup kthread_stop() */ + complete(&task->exited); + } + kthread_exit(); +} + diff --git a/sys/compat/linuxkpi/common/src/linux_page.c b/sys/compat/linuxkpi/common/src/linux_page.c new file mode 100644 index 000000000000..176b45343a08 --- /dev/null +++ b/sys/compat/linuxkpi/common/src/linux_page.c @@ -0,0 +1,167 @@ +/*- + * Copyright (c) 2010 Isilon Systems, Inc. + * Copyright (c) 2016 Matt Macy (mmacy@nextbsd.org) + * Copyright (c) 2017 Mellanox Technologies, Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include + +void * +linux_page_address(struct page *page) +{ +#ifdef __amd64__ + return ((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(page))); +#else + if (page->object != kmem_object && page->object != kernel_object) + return (NULL); + return ((void *)(uintptr_t)(VM_MIN_KERNEL_ADDRESS + + IDX_TO_OFF(page->pindex))); +#endif +} + +vm_page_t +linux_alloc_pages(gfp_t flags, unsigned int order) +{ +#ifdef __amd64__ + unsigned long npages = 1UL << order; + int req = (flags & M_ZERO) ? (VM_ALLOC_ZERO | VM_ALLOC_NOOBJ | + VM_ALLOC_NORMAL) : (VM_ALLOC_NOOBJ | VM_ALLOC_NORMAL); + vm_page_t page; + + if (order == 0 && (flags & GFP_DMA32) == 0) { + page = vm_page_alloc(NULL, 0, req); + if (page == NULL) + return (NULL); + } else { + vm_paddr_t pmax = (flags & GFP_DMA32) ? + BUS_SPACE_MAXADDR_32BIT : BUS_SPACE_MAXADDR; +retry: + page = vm_page_alloc_contig(NULL, 0, req, + npages, 0, pmax, PAGE_SIZE, 0, VM_MEMATTR_DEFAULT); + + if (page == NULL) { + if (flags & M_WAITOK) { + if (!vm_page_reclaim_contig(req, + npages, 0, pmax, PAGE_SIZE, 0)) { + VM_WAIT; + } + flags &= ~M_WAITOK; + goto retry; + } + return (NULL); + } + } + if (flags & M_ZERO) { + unsigned long x; + + for (x = 0; x != npages; x++) { + vm_page_t pgo = page + x; + + if ((pgo->flags & PG_ZERO) == 0) + pmap_zero_page(pgo); + } + } +#else + vm_offset_t vaddr; + vm_page_t page; + + vaddr = linux_alloc_kmem(flags, order); + if (vaddr == 0) + return (NULL); + + page = PHYS_TO_VM_PAGE(vtophys((void *)vaddr)); + + KASSERT(vaddr == (vm_offset_t)page_address(page), + ("Page address mismatch")); +#endif + return (page); +} + +void +linux_free_pages(vm_page_t page, unsigned int order) +{ +#ifdef __amd64__ + unsigned long npages = 1UL << order; + unsigned long x; + + for (x = 0; x != npages; x++) { + vm_page_t pgo = page + x; + + vm_page_lock(pgo); + vm_page_free(pgo); + vm_page_unlock(pgo); + } +#else + vm_offset_t vaddr; + + vaddr = (vm_offset_t)page_address(page); + + linux_free_kmem(vaddr, order); +#endif +} + +vm_offset_t +linux_alloc_kmem(gfp_t flags, unsigned int order) +{ + size_t size = ((size_t)PAGE_SIZE) << order; + vm_offset_t addr; + + if ((flags & GFP_DMA32) == 0) { + addr = kmem_malloc(kmem_arena, size, flags & GFP_NATIVE_MASK); + } else { + addr = kmem_alloc_contig(kmem_arena, size, + flags & GFP_NATIVE_MASK, 0, BUS_SPACE_MAXADDR_32BIT, + PAGE_SIZE, 0, VM_MEMATTR_DEFAULT); + } + return (addr); +} + +void +linux_free_kmem(vm_offset_t addr, unsigned int order) +{ + size_t size = ((size_t)PAGE_SIZE) << order; + + kmem_free(kmem_arena, addr, size); +} diff --git a/sys/compat/linuxkpi/common/src/linux_pci.c b/sys/compat/linuxkpi/common/src/linux_pci.c index 22db26495e58..84a38d875564 100644 --- a/sys/compat/linuxkpi/common/src/linux_pci.c +++ b/sys/compat/linuxkpi/common/src/linux_pci.c @@ -121,12 +121,9 @@ linux_pci_attach(device_t dev) struct pci_dev *pdev; struct pci_driver *pdrv; const struct pci_device_id *id; - struct task_struct t; - struct thread *td; int error; - td = curthread; - linux_set_current(td, &t); + linux_set_current(curthread); pdrv = linux_pci_find(dev, &id); pdev = device_get_softc(dev); pdev->dev.parent = &linux_root_device; @@ -159,7 +156,6 @@ linux_pci_attach(device_t dev) put_device(&pdev->dev); error = -error; } - linux_clear_current(td); return (error); } @@ -167,11 +163,8 @@ static int linux_pci_detach(device_t dev) { struct pci_dev *pdev; - struct task_struct t; - struct thread *td; - td = curthread; - linux_set_current(td, &t); + linux_set_current(curthread); pdev = device_get_softc(dev); DROP_GIANT(); pdev->pdrv->remove(pdev); @@ -180,7 +173,6 @@ linux_pci_detach(device_t dev) list_del(&pdev->links); spin_unlock(&pci_lock); put_device(&pdev->dev); - linux_clear_current(td); return (0); } @@ -190,18 +182,14 @@ linux_pci_suspend(device_t dev) { struct pm_message pm = { }; struct pci_dev *pdev; - struct task_struct t; - struct thread *td; int err; - td = curthread; - linux_set_current(td, &t); + linux_set_current(curthread); pdev = device_get_softc(dev); if (pdev->pdrv->suspend != NULL) err = -pdev->pdrv->suspend(pdev, pm); else err = 0; - linux_clear_current(td); return (err); } @@ -209,18 +197,14 @@ static int linux_pci_resume(device_t dev) { struct pci_dev *pdev; - struct task_struct t; - struct thread *td; int err; - td = curthread; - linux_set_current(td, &t); + linux_set_current(curthread); pdev = device_get_softc(dev); if (pdev->pdrv->resume != NULL) err = -pdev->pdrv->resume(pdev); else err = 0; - linux_clear_current(td); return (err); } @@ -228,18 +212,14 @@ static int linux_pci_shutdown(device_t dev) { struct pci_dev *pdev; - struct task_struct t; - struct thread *td; - td = curthread; - linux_set_current(td, &t); + linux_set_current(curthread); pdev = device_get_softc(dev); if (pdev->pdrv->shutdown != NULL) { DROP_GIANT(); pdev->pdrv->shutdown(pdev); PICKUP_GIANT(); } - linux_clear_current(td); return (0); } @@ -251,6 +231,7 @@ pci_register_driver(struct pci_driver *pdrv) bus = devclass_find("pci"); + linux_set_current(curthread); spin_lock(&pci_lock); list_add(&pdrv->links, &pci_drivers); spin_unlock(&pci_lock); diff --git a/sys/compat/linuxkpi/common/src/linux_rcu.c b/sys/compat/linuxkpi/common/src/linux_rcu.c new file mode 100644 index 000000000000..cc108177e913 --- /dev/null +++ b/sys/compat/linuxkpi/common/src/linux_rcu.c @@ -0,0 +1,259 @@ +/*- + * Copyright (c) 2016 Matt Macy (mmacy@nextbsd.org) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +struct callback_head { + ck_epoch_entry_t epoch_entry; + rcu_callback_t func; + ck_epoch_record_t *epoch_record; + struct task task; +}; + +/* + * Verify that "struct rcu_head" is big enough to hold "struct + * callback_head". This has been done to avoid having to add special + * compile flags for including ck_epoch.h to all clients of the + * LinuxKPI. + */ +CTASSERT(sizeof(struct rcu_head) >= sizeof(struct callback_head)); + +static ck_epoch_t linux_epoch; +static MALLOC_DEFINE(M_LRCU, "lrcu", "Linux RCU"); +static DPCPU_DEFINE(ck_epoch_record_t *, epoch_record); + +static void +linux_rcu_runtime_init(void *arg __unused) +{ + ck_epoch_record_t **pcpu_record; + ck_epoch_record_t *record; + int i; + + ck_epoch_init(&linux_epoch); + + CPU_FOREACH(i) { + record = malloc(sizeof(*record), M_LRCU, M_WAITOK | M_ZERO); + ck_epoch_register(&linux_epoch, record); + pcpu_record = DPCPU_ID_PTR(i, epoch_record); + *pcpu_record = record; + } + + /* + * Populate the epoch with 5 * ncpus # of records + */ + for (i = 0; i < 5 * mp_ncpus; i++) { + record = malloc(sizeof(*record), M_LRCU, M_WAITOK | M_ZERO); + ck_epoch_register(&linux_epoch, record); + ck_epoch_unregister(record); + } +} +SYSINIT(linux_rcu_runtime, SI_SUB_LOCK, SI_ORDER_SECOND, linux_rcu_runtime_init, NULL); + +static void +linux_rcu_runtime_uninit(void *arg __unused) +{ + ck_epoch_record_t **pcpu_record; + ck_epoch_record_t *record; + int i; + + while ((record = ck_epoch_recycle(&linux_epoch)) != NULL) + free(record, M_LRCU); + + CPU_FOREACH(i) { + pcpu_record = DPCPU_ID_PTR(i, epoch_record); + record = *pcpu_record; + *pcpu_record = NULL; + free(record, M_LRCU); + } +} +SYSUNINIT(linux_rcu_runtime, SI_SUB_LOCK, SI_ORDER_SECOND, linux_rcu_runtime_uninit, NULL); + +static ck_epoch_record_t * +linux_rcu_get_record(int canblock) +{ + ck_epoch_record_t *record; + + if (__predict_true((record = ck_epoch_recycle(&linux_epoch)) != NULL)) + return (record); + if ((record = malloc(sizeof(*record), M_LRCU, M_NOWAIT | M_ZERO)) != NULL) { + ck_epoch_register(&linux_epoch, record); + return (record); + } else if (!canblock) + return (NULL); + + record = malloc(sizeof(*record), M_LRCU, M_WAITOK | M_ZERO); + ck_epoch_register(&linux_epoch, record); + return (record); +} + +static void +linux_rcu_destroy_object(ck_epoch_entry_t *e) +{ + struct callback_head *rcu; + uintptr_t offset; + + rcu = container_of(e, struct callback_head, epoch_entry); + + offset = (uintptr_t)rcu->func; + + MPASS(rcu->task.ta_pending == 0); + + if (offset < LINUX_KFREE_RCU_OFFSET_MAX) + kfree((char *)rcu - offset); + else + rcu->func((struct rcu_head *)rcu); +} + +static void +linux_rcu_cleaner_func(void *context, int pending __unused) +{ + struct callback_head *rcu = context; + ck_epoch_record_t *record = rcu->epoch_record; + + ck_epoch_barrier(record); + ck_epoch_unregister(record); +} + +void +linux_rcu_read_lock(void) +{ + ck_epoch_record_t *record; + + sched_pin(); + record = DPCPU_GET(epoch_record); + MPASS(record != NULL); + + ck_epoch_begin(record, NULL); +} + +void +linux_rcu_read_unlock(void) +{ + ck_epoch_record_t *record; + + record = DPCPU_GET(epoch_record); + ck_epoch_end(record, NULL); + sched_unpin(); +} + +void +linux_synchronize_rcu(void) +{ + ck_epoch_record_t *record; + + sched_pin(); + record = DPCPU_GET(epoch_record); + MPASS(record != NULL); + ck_epoch_synchronize(record); + sched_unpin(); +} + +void +linux_rcu_barrier(void) +{ + ck_epoch_record_t *record; + + record = linux_rcu_get_record(0); + ck_epoch_barrier(record); + ck_epoch_unregister(record); +} + +void +linux_call_rcu(struct rcu_head *context, rcu_callback_t func) +{ + struct callback_head *ptr = (struct callback_head *)context; + ck_epoch_record_t *record; + + record = linux_rcu_get_record(0); + + sched_pin(); + MPASS(record != NULL); + ptr->func = func; + ptr->epoch_record = record; + ck_epoch_call(record, &ptr->epoch_entry, linux_rcu_destroy_object); + TASK_INIT(&ptr->task, 0, linux_rcu_cleaner_func, ptr); + taskqueue_enqueue(taskqueue_fast, &ptr->task); + sched_unpin(); +} + +int +init_srcu_struct(struct srcu_struct *srcu) +{ + ck_epoch_record_t *record; + + record = linux_rcu_get_record(0); + srcu->ss_epoch_record = record; + return (0); +} + +void +cleanup_srcu_struct(struct srcu_struct *srcu) +{ + ck_epoch_record_t *record; + + record = srcu->ss_epoch_record; + srcu->ss_epoch_record = NULL; + ck_epoch_unregister(record); +} + +int +srcu_read_lock(struct srcu_struct *srcu) +{ + ck_epoch_begin(srcu->ss_epoch_record, NULL); + return (0); +} + +void +srcu_read_unlock(struct srcu_struct *srcu, int key __unused) +{ + ck_epoch_end(srcu->ss_epoch_record, NULL); +} + +void +synchronize_srcu(struct srcu_struct *srcu) +{ + ck_epoch_synchronize(srcu->ss_epoch_record); +} diff --git a/sys/compat/linuxkpi/common/src/linux_tasklet.c b/sys/compat/linuxkpi/common/src/linux_tasklet.c new file mode 100644 index 000000000000..ef607c234ef2 --- /dev/null +++ b/sys/compat/linuxkpi/common/src/linux_tasklet.c @@ -0,0 +1,183 @@ +/*- + * Copyright (c) 2017 Hans Petter Selasky + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +#include +#include +#include + +#define TASKLET_ST_IDLE 0 +#define TASKLET_ST_BUSY 1 +#define TASKLET_ST_EXEC 2 +#define TASKLET_ST_LOOP 3 + +#define TASKLET_ST_CMPSET(ts, old, new) \ + atomic_cmpset_ptr((volatile uintptr_t *)&(ts)->entry.tqe_prev, old, new) + +#define TASKLET_ST_SET(ts, new) \ + atomic_store_rel_ptr((volatile uintptr_t *)&(ts)->entry.tqe_prev, new) + +#define TASKLET_ST_GET(ts) \ + atomic_load_acq_ptr((volatile uintptr_t *)&(ts)->entry.tqe_prev) + +struct tasklet_worker { + struct mtx mtx; + TAILQ_HEAD(, tasklet_struct) head; + struct taskqueue *taskqueue; + struct task task; +} __aligned(CACHE_LINE_SIZE); + +#define TASKLET_WORKER_LOCK(tw) mtx_lock(&(tw)->mtx) +#define TASKLET_WORKER_UNLOCK(tw) mtx_unlock(&(tw)->mtx) + +static struct tasklet_worker tasklet_worker; + +static void +tasklet_handler(void *arg, int pending) +{ + struct tasklet_worker *tw = (struct tasklet_worker *)arg; + struct tasklet_struct *ts; + + linux_set_current(curthread); + + TASKLET_WORKER_LOCK(tw); + local_bh_disable(); /* pin thread to CPU */ + while (1) { + ts = TAILQ_FIRST(&tw->head); + if (ts == NULL) + break; + TAILQ_REMOVE(&tw->head, ts, entry); + + TASKLET_WORKER_UNLOCK(tw); + do { + /* reset executing state */ + TASKLET_ST_SET(ts, TASKLET_ST_EXEC); + + ts->func(ts->data); + + } while (TASKLET_ST_CMPSET(ts, TASKLET_ST_EXEC, TASKLET_ST_IDLE) == 0); + TASKLET_WORKER_LOCK(tw); + } + local_bh_enable(); /* unpin thread from CPU */ + TASKLET_WORKER_UNLOCK(tw); +} + +static void +tasklet_subsystem_init(void *arg __unused) +{ + struct tasklet_worker *tw = &tasklet_worker; + + tw->taskqueue = taskqueue_create("tasklet", M_WAITOK, + taskqueue_thread_enqueue, &tw->taskqueue); + mtx_init(&tw->mtx, "linux_tasklet", NULL, MTX_DEF); + TAILQ_INIT(&tw->head); + TASK_INIT(&tw->task, 0, tasklet_handler, tw); + taskqueue_start_threads(&tw->taskqueue, 1, PI_NET, "tasklet"); +} +SYSINIT(linux_tasklet, SI_SUB_INIT_IF, SI_ORDER_THIRD, tasklet_subsystem_init, NULL); + +static void +tasklet_subsystem_uninit(void *arg __unused) +{ + struct tasklet_worker *tw = &tasklet_worker; + + taskqueue_free(tw->taskqueue); + tw->taskqueue = NULL; + mtx_destroy(&tw->mtx); +} +SYSUNINIT(linux_tasklet, SI_SUB_INIT_IF, SI_ORDER_THIRD, tasklet_subsystem_uninit, NULL); + +void +tasklet_init(struct tasklet_struct *ts, + tasklet_func_t *func, unsigned long data) +{ + ts->entry.tqe_prev = NULL; + ts->entry.tqe_next = NULL; + ts->func = func; + ts->data = data; +} + +void +local_bh_enable(void) +{ + sched_unpin(); +} + +void +local_bh_disable(void) +{ + sched_pin(); +} + +void +tasklet_schedule(struct tasklet_struct *ts) +{ + + if (TASKLET_ST_CMPSET(ts, TASKLET_ST_EXEC, TASKLET_ST_LOOP)) { + /* tasklet_handler() will loop */ + } else if (TASKLET_ST_CMPSET(ts, TASKLET_ST_IDLE, TASKLET_ST_BUSY)) { + struct tasklet_worker *tw = &tasklet_worker; + + /* tasklet_handler() was not queued */ + TASKLET_WORKER_LOCK(tw); + /* enqueue tasklet */ + TAILQ_INSERT_TAIL(&tw->head, ts, entry); + /* schedule worker */ + taskqueue_enqueue(tw->taskqueue, &tw->task); + TASKLET_WORKER_UNLOCK(tw); + } else { + /* + * tasklet_handler() is already executing + * + * If the state is neither EXEC nor IDLE, it is either + * LOOP or BUSY. If the state changed between the two + * CMPSET's above the only possible transitions by + * elimination are LOOP->EXEC and BUSY->EXEC. If a + * EXEC->LOOP transition was missed that is not a + * problem because the callback function is then + * already about to be called again. + */ + } +} + +void +tasklet_kill(struct tasklet_struct *ts) +{ + + WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, "tasklet_kill() can sleep"); + + /* wait until tasklet is no longer busy */ + while (TASKLET_ST_GET(ts) != TASKLET_ST_IDLE) + pause("W", 1); +} diff --git a/sys/conf/files b/sys/conf/files index a4f933c7303d..ab43ef809a70 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -1861,6 +1861,8 @@ iwi_monitor.fw optional iwimonitorfw | iwifw \ no-obj no-implicit-rule \ clean "iwi_monitor.fw" dev/iwm/if_iwm.c optional iwm +dev/iwm/if_iwm_7000.c optional iwm +dev/iwm/if_iwm_8000.c optional iwm dev/iwm/if_iwm_binding.c optional iwm dev/iwm/if_iwm_led.c optional iwm dev/iwm/if_iwm_mac_ctxt.c optional iwm @@ -1914,6 +1916,20 @@ iwm7265.fw optional iwm7265fw | iwmfw \ compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwm7265.fw" +iwm7265Dfw.c optional iwm7265Dfw | iwmfw \ + compile-with "${AWK} -f $S/tools/fw_stub.awk iwm7265D.fw:iwm7265Dfw -miwm7265Dfw -c${.TARGET}" \ + no-implicit-rule before-depend local \ + clean "iwm7265Dfw.c" +iwm7265Dfw.fwo optional iwm7265Dfw | iwmfw \ + dependency "iwm7265D.fw" \ + compile-with "${NORMAL_FWO}" \ + no-implicit-rule \ + clean "iwm7265Dfw.fwo" +iwm7265D.fw optional iwm7265Dfw | iwmfw \ + dependency "$S/contrib/dev/iwm/iwm-7265D-17.fw.uu" \ + compile-with "${NORMAL_FW}" \ + no-obj no-implicit-rule \ + clean "iwm7265D.fw" iwm8000Cfw.c optional iwm8000Cfw | iwmfw \ compile-with "${AWK} -f $S/tools/fw_stub.awk iwm8000C.fw:iwm8000Cfw -miwm8000Cfw -c${.TARGET}" \ no-implicit-rule before-depend local \ @@ -3037,6 +3053,7 @@ dev/usb/controller/usb_controller.c optional usb # # USB storage drivers # +dev/usb/storage/cfumass.c optional cfumass ctl dev/usb/storage/umass.c optional umass dev/usb/storage/urio.c optional urio dev/usb/storage/ustorage_fs.c optional usfs @@ -4265,12 +4282,22 @@ compat/linuxkpi/common/src/linux_kmod.c optional compat_linuxkpi \ compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_compat.c optional compat_linuxkpi \ compile-with "${LINUXKPI_C}" +compat/linuxkpi/common/src/linux_current.c optional compat_linuxkpi \ + compile-with "${LINUXKPI_C}" +compat/linuxkpi/common/src/linux_kthread.c optional compat_linuxkpi \ + compile-with "${LINUXKPI_C}" +compat/linuxkpi/common/src/linux_page.c optional compat_linuxkpi \ + compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_pci.c optional compat_linuxkpi pci \ compile-with "${LINUXKPI_C}" +compat/linuxkpi/common/src/linux_tasklet.c optional compat_linuxkpi \ + compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_idr.c optional compat_linuxkpi \ compile-with "${LINUXKPI_C}" compat/linuxkpi/common/src/linux_radix.c optional compat_linuxkpi \ compile-with "${LINUXKPI_C}" +compat/linuxkpi/common/src/linux_rcu.c optional compat_linuxkpi \ + compile-with "${LINUXKPI_C} -I$S/contrib/ck/include" compat/linuxkpi/common/src/linux_usb.c optional compat_linuxkpi usb \ compile-with "${LINUXKPI_C}" diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64 index 49f26c78ae6f..08f8fe8291b3 100644 --- a/sys/conf/files.amd64 +++ b/sys/conf/files.amd64 @@ -34,7 +34,7 @@ cloudabi64_vdso_blob.o optional compat_cloudabi64 \ # linux32_genassym.o optional compat_linux32 \ dependency "$S/amd64/linux32/linux32_genassym.c" \ - compile-with "${CC} ${CFLAGS:N-fno-common} -c ${.IMPSRC}" \ + compile-with "${CC} ${CFLAGS:N-flto:N-fno-common} -c ${.IMPSRC}" \ no-obj no-implicit-rule \ clean "linux32_genassym.o" # @@ -58,7 +58,7 @@ linux32_vdso.so optional compat_linux32 \ # ia32_genassym.o standard \ dependency "$S/compat/ia32/ia32_genassym.c" \ - compile-with "${CC} ${CFLAGS:N-fno-common} -c ${.IMPSRC}" \ + compile-with "${CC} ${CFLAGS:N-flto:N-fno-common} -c ${.IMPSRC}" \ no-obj no-implicit-rule \ clean "ia32_genassym.o" # @@ -125,7 +125,6 @@ acpi_wakedata.h optional acpi \ no-obj no-implicit-rule before-depend \ clean "acpi_wakedata.h" # -amd64/amd64/amd64_mem.c optional mem #amd64/amd64/apic_vector.S standard amd64/amd64/atomic.c standard amd64/amd64/bios.c standard @@ -667,6 +666,7 @@ x86/x86/io_apic.c standard x86/x86/legacy.c standard x86/x86/local_apic.c standard x86/x86/mca.c standard +x86/x86/x86_mem.c optional mem x86/x86/mptable.c optional mptable x86/x86/mptable_pci.c optional mptable pci x86/x86/mp_x86.c optional smp diff --git a/sys/conf/files.i386 b/sys/conf/files.i386 index 177b3ae0c266..96c600bfe453 100644 --- a/sys/conf/files.i386 +++ b/sys/conf/files.i386 @@ -21,7 +21,7 @@ cloudabi32_vdso_blob.o optional compat_cloudabi32 \ # linux_genassym.o optional compat_linux \ dependency "$S/i386/linux/linux_genassym.c" \ - compile-with "${CC} ${CFLAGS:N-fno-common} -c ${.IMPSRC}" \ + compile-with "${CC} ${CFLAGS:N-flto:N-fno-common} -c ${.IMPSRC}" \ no-obj no-implicit-rule \ clean "linux_genassym.o" # @@ -45,7 +45,7 @@ linux_vdso.so optional compat_linux \ # svr4_genassym.o optional compat_svr4 \ dependency "$S/i386/svr4/svr4_genassym.c" \ - compile-with "${CC} ${CFLAGS:N-fno-common} -c ${.IMPSRC}" \ + compile-with "${CC} ${CFLAGS:N-flto:N-fno-common} -c ${.IMPSRC}" \ no-obj no-implicit-rule \ clean "svr4_genassym.o" # @@ -491,7 +491,6 @@ i386/i386/elf_machdep.c standard i386/i386/exception.s standard i386/i386/gdb_machdep.c optional gdb i386/i386/geode.c optional cpu_geode -i386/i386/i686_mem.c optional mem i386/i386/in_cksum.c optional inet | inet6 i386/i386/initcpu.c standard i386/i386/io.c optional io @@ -634,6 +633,7 @@ x86/x86/io_apic.c optional apic x86/x86/legacy.c standard x86/x86/local_apic.c optional apic x86/x86/mca.c standard +x86/x86/x86_mem.c optional mem x86/x86/mptable.c optional apic x86/x86/mptable_pci.c optional apic pci x86/x86/mp_x86.c optional smp diff --git a/sys/conf/files.powerpc b/sys/conf/files.powerpc index 65c81ad27e84..525d377a61bb 100644 --- a/sys/conf/files.powerpc +++ b/sys/conf/files.powerpc @@ -134,6 +134,7 @@ powerpc/mambo/mambo.c optional mambo powerpc/mambo/mambo_console.c optional mambo powerpc/mambo/mambo_disk.c optional mambo powerpc/mikrotik/platform_rb.c optional mikrotik +powerpc/mikrotik/rb_led.c optional mikrotik powerpc/mpc85xx/atpic.c optional mpc85xx isa powerpc/mpc85xx/ds1553_bus_fdt.c optional ds1553 fdt powerpc/mpc85xx/ds1553_core.c optional ds1553 diff --git a/sys/conf/kern.post.mk b/sys/conf/kern.post.mk index 095b275455ca..f38dbf34a913 100644 --- a/sys/conf/kern.post.mk +++ b/sys/conf/kern.post.mk @@ -189,7 +189,7 @@ assym.s: $S/kern/genassym.sh genassym.o NM='${NM}' NMFLAGS='${NMFLAGS}' sh $S/kern/genassym.sh genassym.o > ${.TARGET} genassym.o: $S/$M/$M/genassym.c - ${CC} -c ${CFLAGS:N-fno-common} $S/$M/$M/genassym.c + ${CC} -c ${CFLAGS:N-flto:N-fno-common} $S/$M/$M/genassym.c ${SYSTEM_OBJS} genassym.o vers.o: opt_global.h diff --git a/sys/conf/kmod.mk b/sys/conf/kmod.mk index 5a1e611e8793..3402345aa11a 100644 --- a/sys/conf/kmod.mk +++ b/sys/conf/kmod.mk @@ -461,7 +461,7 @@ assym.s: ${SYSDIR}/kern/genassym.sh sh ${SYSDIR}/kern/genassym.sh genassym.o > ${.TARGET} genassym.o: ${SYSDIR}/${MACHINE}/${MACHINE}/genassym.c genassym.o: ${SRCS:Mopt_*.h} - ${CC} -c ${CFLAGS:N-fno-common} \ + ${CC} -c ${CFLAGS:N-flto:N-fno-common} \ ${SYSDIR}/${MACHINE}/${MACHINE}/genassym.c .endif diff --git a/sys/contrib/dev/iwm/iwm-7265D-17.fw.uu b/sys/contrib/dev/iwm/iwm-7265D-17.fw.uu new file mode 100644 index 000000000000..414e52d5145e --- /dev/null +++ b/sys/contrib/dev/iwm/iwm-7265D-17.fw.uu @@ -0,0 +1,30750 @@ +begin 644 iwm-7265D-17.fw +M`````$E73`IS=')E86TZ3&EN=7A?0V]R94-Y8VQE,31?````"`````(`````````'````!`````````` +M````````````````&P````0````!````$P````2``0```(```````!$```#B +M804```$```````"`O8``5#2``"ST@`#DY(``"!Z```#G@``````````````` +M``````````````````!L(,`0#QL)(MP=P!`*`!M`(``;;@H``&&``!MN/``` +M80`!&VX]``!A``(;;CX``&$0`!MN`0``84P``&%'``!A```;)"``&R7D'<`1 +MB`;A&!\`"&(``!LE`0`;)```!24!``4D``@%.0$`!6*((,`1`@`%)``(!3D! +M``5BC"#`$00`!20`"`4Y`0`%8I`@P!$(``4D``@%.0$`!6*4(,`1$``%)``( +M!3D!``5BF"#`$2``!20`"`4Y`0`%8IP@P!%```4D``@%.0$`!6*@(,`1```( +M)0``""2(!N$9A`;A&4`&P!(!`!MP"```80\<'2($`!TFZ!W`$`$`&S#H'<`1 +M@@0;)`@`&R4$*,`1O@\`80``&R2``!LEY!W`$0``&R0``1LEY!W`$0``&R0` +M`ALEY!W`$0@`7W`$``!AV!W`$/_^&S+8'<`1KP\`8=@=P!```1LPV!W`$:L/ +M`&$``!LE``$;)%P!,B``#&$0,` +M`20```$E#T4`(@!<`#GO_P`R'```9`"`$R0!`!,E.!S`$0]W$R+@',`1`@`! +M8@\!$R($",`1!P`3)0<.$R0$*,`1C`G`$@0HP!&0"<`2R$G'$0]P$R(!`!,P +M!"C`$9@)P!(8*,`1#Q,#(@@`6#$#`!,D```3)00(P!$``!,D.$7`$04``&$` +M`%@X!`!8,0``$R0!`!,E.!S`$0``%20````AZ!W`$`\3!R(/9`$B"@`!0`@` +M`7`>``!A"`!8;@D``&$(``=P!0``80`"7#$!``@D```()80&X1D"``!A`"!8 +M,````&$!0A,D```3)00HP!&"!!,D&``3)00HP!'H'<`0YO\3,O__$S/H'<`1 +M```!)`@``24/`6,B`0!2)`@`!VX"``!A```5)````"$4``!A0`;`$N@=P!$! +M`%(DM!_`$`(`$W`"``!A"`!D,>,/`&$/$U(B#Q-2(@$`4FX$``!A@@03)`@` +M$R4$*,`1!```88($$R08`!,E!"C`$0```&$L-H"!``#`%@(!$V1"`1,D!"C` +M$>C"@($``,`6!@$38@0(P!`$`!-D#UP`(@H``$``!@!P&@``80``$R0``!,E +M``#`%R``6#'((,`0<$7`$!`(P!```!,E`P`3)!P(P!$<",`1```3)`0(P!$/ +M%!4B!``5)@\P("+[_S`R`P`3)!@(P!$/%!4B`@`5)@\@,"(``!,D$$7`$1@( +MP!$0`%@Q#P`3(@$`$S`$*,`1#WP3(@@`S!$``!,E```3)#1(QQ$/>Q,B`0`3 +M,`0HP!$/%!4B`@`5)@]-$R($$,41`@`3)/``#H!@L`>`!@!P\`%``<#1$`&`!,"A(` +MI`$``!,`#`!`#10``P!,#14`!`!0#0`````````````````````````````` +M`````````````````````````!X````>B!Z(6@```%8```!6B%:(`@$``*H` +M``"JB*J(_@$``(P*``!4C%2,I!\```````````````#^```!`/\``@'_`0#_ +M`0$`_@(!`P+_`0$`_P$!`?\"`/\#`@#^!`(#`O\"`@#_`@(!_P,`_P4#`/X& +M`P`#_P,#`/\#`P'_````````````````V#````H````$````=+^````````` +M`````````#@Q```%````!````'2_@``````````````````````````````` +M```!````Y,D``'C+``!(RP``<,L``)3)``",R0``U'4$`$AV!`"4=@0````` +M``````````````$+_P``!0,```0"```&_P```/\```S_```'_P``"/\```G_ +M```*_P```O\!`/\``0(`$0$!`@$!`0/_`0$$`@$!!0,!`08$`0$'!0$!"`8! +M`0D/`0$*$`$`#/\!`/[_`@#_!P(!`?\"`@((`@(#"0("!`H"`@4+`@(&#`(" +M!PT"`@@.`@()#@(""@T"``S_`@#^_P```````````````````````/\'```` +M_P``!_\``0D(```*_P$"```!`P'_`0,"_P$#`_\!`03_`0(%``$!"_\!`@S_ +M`00&!@$!!_\!``C_`0`*_P("`/\"`P'_`@,"_P(#`_\"`00!`@(%``(!"P$" +M`@P!`@0&!@("!P`"``@!`@`*`0,`_P(#`P#_`P,!_P,#`O\#`P,$`P$$!0," +M!0`#`0L%`P(,!0,$!@8#`P?_`P`(!0,`"@4#`/X#!`0`_P0$`?\$!`+_!`0# +M_P0$!/\$!`7_!`0+_P0$#/\$!`8&!`0'!@0`"/\$``K_`````````````/\` +M```!`P`"`@(``P`"```%_P``!O\```3_```'!```"/\!`/\!`0$``P$"`0(! +M`@("`0`$_P$!!P0!``C_`@,`!@("`@8"``7_`@`&_P(`!/\"``<'`@`(!P,# +M``8#``$%`P("!@,!!?\#``;_`P`$!P,`!P<#``@'```````!`/\!`/\``0`! +M_P$"`O\"`/\!`@`!_P(!`_\"`P3_`@(*_P(""?\"`@C_`P`!_P,!`PH#!04* +M`P0&_P,&"@@#`PG_!`#_`P0``?\$`0,+!`('"P0""`0$`P3_!`(*"00$"?\$ +M!`;_!0#_`@4$!O\%`0,&!0`!_P4%"O\%!0D%!@#__P8$!O\&`0,&!@`!_P8# +M!/\&!@D'!@8*_P```````````````````````````````'"V@``!``-LMH`` +M`0`#"!Z```$``52Y@``!``-8N8```0`#<`8!``(`!````````%52``!'10`` +M3$D``$Y#``!$20``4U4``%I:``!:6@``6EH``%I:``!:6@``6EH``%I:``!: +M6@``6EH``%I:``````````@$#`(*!@X!"04-`PL'#P&1```!/P```I$``#X] +M```#D0``/3T```21```_`P``!9$```D0```&D0``%AP```>1```?'P``")$` +M`!P6```)D0``$`D```J1```#/P``"Y$``#T]```,D0``/3X```V1```_`0`` +M$1`^2$@`X!`$````#2`$````81`B````($,Y`````."$`0``X1`!`````A"7 +MRP4`,&`+````#]($````&-+\__\?`7,0````">")AH2$"N"$A```"^"F5=<@ +M#.`BBRPR#>"JB8>^PQ%^"2C(N*&."*B@``&>!^2><@&N`BBRPR&^"3 +M3;>^PQ)&`"`````G,`````$2`4A0$`&1`&````$=(#````,>#_MW8` +M,N#D)3\`,^`B4@X`-.`N````->``````-N`V-C8V-^`V-@``"1!N7P``&A`` +M````,1"&`0``,A"0`0``,Q#(````-!!0````-1"`````.A!I````.Q#````` +MP1``````)(``/```*N#YY>`>>^PQ*."+BXF)*>") +MB0``#&"#)0``.!!2````.1"6````08`!`````D;@<[G2X'.1P.![?;S08V +MFZT&-1KM!KO?\`C,Y7()2F4R"4@D\@C'X_$(1J.Q"$4BD0A$(G$(P^%0"$)A +M,`C!8#`(P6`0"$#@[P>_W^\'O]_O!S^?SP<^G\\'/I_/!SZ?KP>]7J\'O9[/ +M!SZ?KP>]7J\'O9[/!SZ?SP<^G\\'/I_/![_?[P>_W^\'O]\/"$!@,`C!8#`( +MP6!0"$+A<`C#(9$(1"*1",6BT0C&X_$(QR,2"YG$X'N]V.!SQ>KP>^WP\(0&`P"$*B,0WI=#H-S6:S"_G\\'O]_O![\?$`A`8#`(P6`P",%@$`A`(/`'/Y_/ +M![T>CP>\W6X'NYU.!SJ=;@>[W6X'/!ZO!SV?SP>_'Q`(0&`P",%@,`C!8!`( +M0"#P![_?[P<_G^\'O]\/",!@4`A#HO$(R66S"XFZT&M)E,!K%8#`8T'`\(1"*Q",5BT0A&H_$(Q^/Q +M",?CT0A&8[$(12)Q",.A4`C!8#`(0"`0"$`@$`C`8#`(0:%P",,AD0C%8M$( +M1N/Q",?C\0C'H]$(1F.Q",4BD0A`'HX&,%@L!C&9;`:TFNT&.-UN![O=;@>U +M6JT&-=IL!C)9+`8Q&HX'P*+1",;C$0G(9%()2N5R"'1L:&AHB(B`?'AT;&AH:(B(B +M(B`?'AT;&AH:(B(@'QX=&QH:&B(B(B(@'QX=&QH:&B(B(!\>'1L:&AHB(B(B +M(1\>'1L:%Q +M'AX<&A@5$AX>'AX>'!H8%1(B(B(B(1\>'1P:&!@B(B$?'AT<&A@8(B(B(B$? +M'AT<&A@4(B(A'QX='!H8%B(B("`@'QX<&Q@6$AX>'AX>'!L8%A0B(B(B(1\> +M'1P9%Q'AX>'!L7%1(B(B(B(B`?'1L:&AHB(B(@'QT;&AH:(B(B(B(@'QT; +M&AH:(B(B(!\=&QH:&B(B(B(B(!\=&QH:&B(B(B`?'1L:&AHB(B(B(B$@'AP9 +M%Q'!D6$B`@("`@'AP9%A0B(B$A(2$>'1P9%Q"2@`'PDH`"`)*``A"2@ +M`%`0H`!()J``8!"@`$PFH`!D$*``:!"@`%@0H``P$*``/!"@`#00H``L#*`` +M`(&D``&!I``#@:0`B"2@`(PDH`"0)*``E"2@`)@DH`"<)*``H"2@`*0DH``` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````````````O@`9R``&R0`& +MR@`!S``%S0`%RP`$S@`#SP`*T``*T0`"T@`"TP`*U``*U0`"U@`"UP`*V``* +MVP"(W`"(W0"JW@#=WP``XP`(Y``(Y0`*Y@`*Z```ZP`([``([0`*[@`,,0`D +M,@`F=P$P.`(P!`!,.```Y0%SY@$*I@)SIP(*^P#_CP$@5@(@@P$`1`(`C@$/ +M50(/D`$`3@(`D0%]D@%]DP%]3P)]4`)]40)]6@!56P!5_0`!Z@$$_@`3_P`& +M;@`*>0`-=0`!?P`/AP`.F0#%F0#-?`$-@`$-/0(-00(-?0'_/@+_?P'_0`+_ +M)P`<*``8*0`<*@`@('>P(0S@$#CP(#D0(`O0$)?@()QP$,B`(, +MO@$)?P()R`$&B0(&I`$0J@$2I0$0JP$290(0:P(29@(0;`(2WP$!UP$`H`(! +MF`(`>@$!.P(!```T`0`V`0`^`5<_`69``7=!`9A"`0=?`:I@`:IQ`7D?`@`I +M`O\J`O\R`GFA`%NB`!NC`#"D`!*E`""F``>G`!NH`!*I``>J``"L``FM``:N +M``RO``FP``:Q``RR``>S``2T``JU``:X`%Z^`!G(``;)``;*``',``7-``7+ +M``3.``//``K0``K1``+2``+3``K4``K5``+6``+7``K8``K;`(C<`(C=`*K> +M`-W?``#C``CD``CE``KF``KH``#K``CL``CM``KN``PQ`"0R`"9W`3`X`C`$ +M`$PX``#E`7/F`0JF`G.G`@K[`/^/`2!6`B"#`0!$`@".`0]5`@^0`0!.`@"1 +M`7V2`7V3`7U/`GU0`GU1`GU:`%5;`%7]``'J`03^`!/_``9N``IY``UU``%_ +M``^'``Z9`,69`,U\`0V``0T]`@U!`@U]`?\^`O]_`?]``O\G`!PH`!@I`!PJ +M`!RY`0>Z`1!Z`@=[`A#.`0./`@.1`@"]`0E^`@G'`0R(`@R^`0E_`@G(`0:) +M`@:D`1"J`1*E`1"K`1)E`A!K`A)F`A!L`A+?`0'7`0"@`@&8`@!Z`0$[`@%B +M`<]D`<]F`<\L`L\N`L\P`L\0``0`"P````,![`$%`!``!``1`!(``P`*``L` +M-`$=`C4!'@(V`1\")0````H`"P`$``\``P'L`1``.`#D`:4"2``2`",````- +M$2(##!R``.@;@``\'(``X!N```,![`$"`>L!!0`$`!``"@`+``8`"`!\`8`! +M/0)!`G,!=P$T`C@"EP%8`ID!6@*6`9@!5P)9`MP!G0(E`)H!6P*<`5T"```` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````8````````````````````!```` +M`@`````````N$2\7,!`Q*#(1,_(V(C@1.1#AY.(@````'/6```$`````````.O6```````#_ +M````_____P`````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````$P>`0`P'@$`,!X!```````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````M'X```4```($````=+^````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````(`````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````K"L```````#PP````0```&0G`0`"````;#8$``,```!4-@0`!````"QD +M!``%````]/0$``8```"X>@0`!P```#`H`@`(````+"@"``D````0=`0`"@`` +M`$P1!``+````=&T!``P```"`@@0`#0`````/`@`.````'&`!``\```#@"6`+X`4````"!.```````````````````$`````@`````````!`````0`` +M`!X```````````````$!#@X````````R"`(/`P`!``````````$!#@X````` +M```C!`(*`````````````/0!````````````````````````*'>````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````````/____\````````````` +M`````````````````````````````````````````````!``````D`$```"@ +M`!`G``#H`P``Z`,``'PN@`!\+H``M,R``+#,@`"PS(``J,R``+3,@`"PS(`` +ML,R``*C,@`"HS(``M,R``+3,@`"HS(``M,R``*S,@```````__\```$!```` +M`````````0````#H)00`Z"4$`.@E!`#<)00`Z"4$`.@E!`#@)00`Z"4$`*C+ +M``"``+3%@`!``/3*@`#\R(``I,F``$S*@``````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````````````````````$````` +M``````````````"0!@```/\#`(@'````_P4`"`<```#_+0#D!@```/\]`#@& +M````_P0`7`8```#_)0"P!@```/\\`"0A`0``_]T`,`<```#_3`"$!P```/\B +M`"P'````_R8`@`<```#_*``T(`$``"```&P?`0``_S``>`8```#_!P!8!P`` +M`/\@``P0$``$`1`.$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0#Q`)$!`%"A`+ +M$!`0$`(0$`T0$!`0$!`0$!`0$`8#$!`0$!`0$!`0$!`0$!`($!`0$!`0$!`0 +M$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0 +M$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0 +M$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0 +M!Q`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!``````O,R````` +M```````````````````````````````````````````````````````````` +M`/\```#4+8``N!.!`!H``````````0``````````````V"V``/`3@0`8```` +M``````$``````````````/____________________________________\` +M```````````````````````````````````````````````````````````` +M``````````````````"`"AT*X`FE"6T)-PD$"=,(I`AW"$L((@CZ!],' +MK@>*!P`````````````````````````````````````````````````````` +M`````````````````````````````````````````!PT```"````!````'2_ +M@`````````````````!X-```!0````0```!TOX``````````````!0``<@$` +M`*@"```#"0,)!0D,$0``````````````````````````;+P$``H````$```` +M=+^```````````````#_```!`/\``/X!`0#_`@$!`/\!``'_`0$"`P$!`P0! +M`00%`0(&_P$#!_\!`0C_`0#^!@(`_P<"`0#_`@`!_P("`@@"`@,)`@($"@(! +M!?\"`P?_`@$(_P(`_@L#`/\,`P$`_P,``?\#`P(-`P,##@,#!`\#`07_`P(& +M_P,!"/\#`/X0`````````````````````.2]!``*````!````'2_@`!TO`0` +MH+P$`+R\!`#,O`0`T+P$`.R\!`#(O`0`,+T$`#B]!``\O00`9+T$`#2]!`"L +MO00`M+T$`+B]!`#@````````!Z````?P```'H` +M``!_````>@```'\```!Z````?P```'H```!_````>@```'\```!Z````?P`` +M`'H```!_````>@```'\```!Z`````````'H````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````9F8.``````!F9@H`9F8&`&9F!@!F9@(`9F8"`&9F +M/@!F9CX`9F8Z`&9F.@``````9F8V``````!F9C(``````&9F#@`````````` +M`&9F!@`````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````0`!`0$!`0$!`0$``0`!````````_P`` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````!,"*``2`B@`&P'@``````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`/LUC``SL0``````````,P`````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````````````'AX> +M'AX>'AX>'AX>'@`9'!X>'AX>'AX>'AX>`!X>'AX>'AX>'@`>'AX>'AX>'AX` +M`08"!`("```$!`8$"`,`````&1X>'AX>'A@9'AX>'AX>&!@>'AX>'AX>'@`5 +M'AX8%1X>&!@>'AX#"``````&````````````_P4````````8&!@8&!T!!@8& +M!@`&```>`!X`'@`8``8&!@$!`0']!@8````````&`0$``!X````````````` +M``$`````````````````%1@8&!@8&!@8&!48&````````````````````/[^ +M_O[^`!06&!@4$A`8&````````````````````````````````````!48&!@8 +M&!@4%1@8&!@8&!02&!@8&!@8&!@```````$````!````$1@8%!$8&!04&!@8 +M``````#[%!04%!08&!@8&!@8&!@8&!@8&``8&!@8&!@8&!@8&!@8`!@8&!@8 +M&!@8&``8&!@8&!@8&!@`&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&``8&!@8 +M&!@8&!@8&!@8&!@8&!@!`0$!`0$````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````5E0``'L````````` +M6E0``#L`````````6E0``'L`````````"B```#L`````````6E0``$,````` +M````"@````$````P,`````````````````````````$````_```````````` +M````````!P````````("`````````````````0`"`@`!```"`@$``0(``@(` +M`````0`!``("`0`````````!`````````@(```$```$```$``````@`"`@`` +M```"```````"`````0`````````````"```!``(`!````````````````@`" +M``````````````````(``@`!``````(````````````"``$"``("`@`````` +M``(``@```0````````````````````$```$````"``$"```````````#`@`` +M`````````@`````"`@````````````````````````$``@(````````````` +M``````(``@$````````````"``````(``@(``@````````(````````````` +M`@("``````(``@("`@`!```"``````$"``("`@`"`0(````"`````@`!```" +M```"`0````````````(````````````````"``````````````````$````! +M`@$"```"`@```````0`"```!``$``@`````````````````````````````` +M`````````@````````````(````"``0``@````(````"`````@`"``("```` +M`````````@`````"``````(```````4````"``$```$```$"```````````` +M```````````!```````!``(````!``(``0`````"```````````````````` +M`````````````````````0`````````````````````````````````````` +M```````````````````````````````"`````````@`````````````````` +M``````````(``````"DI_____P`````````````````````````````````` +M````````````````````````'@$``"P+```````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````!`@,$!08'"`D*"PP-#@\0*BHK+"TN+TI+3$U.3U!K +M;&UN<'&+C(V.CY&LK:ZOL+',S,S-SL_0T=+3T]/3T]/3T]/3T]/3T]/3TP!! +M```````````!`@,$!08'"`D*"PP-#@\0*BHK+"TN+TI+3$U.3U!J:VUN;W"* +MBXR-CH^JJZRMKJ_*R\S-SL_0T-#0T-#0T-#0T-#0T-#0T-#0T``^`0(#!`0% +M!@<("0H+#`T.*BLL+2XO2DM,34Y/4&IJ:VQM;F^*BXR-CH^0JJNLK:ZOL+#* +MRLO,S<[/T-'2T]35UM?8V=K:VMK:VMK:VMK:VMK:V@!#`@(#!`4&!@<("0H+ +M#`T.*BLL+2XO2DM,34Y/4%!J:VQM;F^*BXR-CH^0JJNLK:ZOL+#*RLO,S<[/ +MT-'2T]35UM?7U]?7U]?7U]?7U]?7U]?7UP!``@,#!`4&!P@)"@L,#0XJ*RPM +M+B]*2TQ-3D]/4&IK;&UN;XJ+C(V.CY"JJZRMKJ^PL,K*R\S-SL_0T=+3U-34 +MU-34U-34U-34U-34U-34U-34U``\```````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````````````````````````/]_ +M_W__?_]__W\`````````````````````_W__?_]__W__?_]__W__?_]__W\` +M````````````````````JJH``/\```#_````_P```/\```#_````_P```/\` +M``#_````_P```/\```#_````_P```/\```#_````_P```/\```#_````_P`` +M`/\```#_````_P```/\```#_````_P```/\```#_````_P```/\```#_```` +M_P```````0````$````!`````0````$````!`````0````$````!`````0`` +M``$````!`````0````$````!`````0````$````!`````0````$````!```` +M`0````$````!`````0````$````!`````0````$````!```````````````` +M```````````````````````````````````````````````````````````` +M````````````````?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_```` +M````````````O@```+X````!``````````$```!?````7P````(````````` +M`@```"\````O`````P`````````#````&````!@````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````*```````` +M````````````_P#_``````````````````````#_`/\``````#0````````` +M``````````#_`/\``````````````````````/\`_P``````<``````````` +M`````````/\`_P``````````````````````_P#_``````"9```````````` +M````````_P#_``````````````````````#_`/\````````````````````` +M``$````!``````````$````!``````````$````!```````````````````` +M`0````$``````````0````$``````````0````$````````````````````` +M`````````(P*```````````````````````````````````,`P@````````` +M``#_``````````````````````````````````````````````#_```````` +M``````````````````````````````````````#_```````````````````` +M``````````````````````````#_```````````````````````````````` +M``````````````#_```````````````````````````````````````````` +M``#_``````````````````````````````````````````````#_```````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````0````````#@$H$````````` +M````````````````````````!%4```H````$````=+^````````````````` +M`````````````````````````````0P>M@XR`A$>N0XR`Q8>NPXR!!L>O@XR +M!2`>P`XR!B4>PPXR!RH>Q0XR""\>R`XR"30>R@XR"CD>S0XR"SX>SPXR#$,> +MT@XR#4@>U`XR#DT>UPXR(E!`&2``)&!`'B`V)G!`(R`R*`!!*"`V*A!!+2`U +M+"!!,B`V+C!!-R`Q,$!!/"`V,E!!02``-&!!1B`V-G!!2R`Q.`!"4"`V.A!" +M52`U/"!"6B`U/C!"7R`Q0$!"9"`U9&!$OB(T9G!$PR(P:`!%R"(T:A!%S2(T +M;"!%TB(T;C!%UR(P<$!%W"(T`!&\"(T>A!& +M]2(T?"!&^B(T?C!&_R(P@$!&!"(T@E!&"2(`A&!&#B(TAG!&$R(PB`!'&"(S +MBA!''2(SC"!'(B(TCC!')R(OD$!'+"(SD4A'+R(`E6A'.2(SEWA'/B(OF0A( +M0R0SFQA(2"0RG2A(320SGSA(4B0OH4A(5R0RI6A(820R```````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````````````#P`/ +M``\`#P`/``\`#P`/```````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````$``0``````P`"0`-`````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````!@E`0`"@````0```!TOX`````````````````````````` +M``````````````````````````````````````````````````#_____N!2! +M````````````````````````````E%4```H````$````=+^``$!"#P!`0@\` +M0$(/`$!"#P!`0@\`0$(/`$!"#P!`0@\`0$(/`$!"#P#@!P``0`$``.`'``!` +M`0``("<``.`'``#@!P``0`$``.`'``!``0```@`````````"```````````` +M`````````````````````````````````````````````'RJ@``8-($`&``` +M``````````````````````#_____```````````````````````````````` +M````````````````````````````````````````````````-@$``*H````$ +M`0``@@````````!HSP$`C,\!`)S/`0!TSP$`9,\!`*#/`0!,SP$```````#@ +M````@`````````````````````````````"`]```@$L```!````````````` +M``````````````````#D````7````$`````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````Q)X$`("@!`"!`"PF@0`[)T$`$";!`"TH`0`#)T$`(RA!``````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````````````````````"DD]8` +M``````````````````````````#226L```````````````"````````````` +M````````@````("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("` +M@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("` +M@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("` +M@("```(```````````````````````````````"```````#_```````````" +M````````````````````````````````@```````_P```````````@`````` +M`````````````````````````(```````/\```````````(````````````` +M``````````````````"```````#_```````````"```````````````````` +M````````````@```````_P```````````@`````````````````````````` +M`````(```````/\```````````(```````````````````````````````"` +M``````#_```````````"````````````````````````````````@``````` +M_P```````````@```````````````````````````````(```````/\````` +M``````(```````````````````````````````"```````#_```````````" +M````````````````````````````````@```````_P```````````@`````` +M`````````````````````````(```````/\```````````(````````````` +M``````````````````"```````#_```````````"```````````````````` +M````````````@```````_P```````````@`````````````````````````` +M`````(```````/\```````````(```````````````````````````````"` +M``````#_``````````````````"!`````````((`````````@P````````"$ +M`````````(4`````````A@````````"'`````````(@`````````B0`````` +M``"*`````````(L`````````C`````````"-`````````(X`````````CP`` +M``````#``0`````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````+A5```*````!````'2_@``` +M``````````````"X50``"@````0```!TOX```````/____\````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````85@``Z%4``&Q6```` +M5@``<%8``.!5```<5@``_P```/\```#_````_P```/\```#_````_P```/\` +M``#_````_P```/\```#_````_P```/\```#_````_P```/\```#_````_P`` +M`/\```#_````_P```/\```#_````_P```/\```#_````_P```/\```#_```` +M_P`````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````!@@H``<(*``*""@`"P@H``X(*``(""@`"0@H``P(*``-""@ +M`#P@H`!`(:``1"&@`&@AH`!L(:``>"&@`$@AH`!,(:``<"&@`'0AH`!\(:`` +M`````/\````````````````````````````````````````````````````` +M````,.D`Z0`` +M`-D```#)``````````````````````#W(0``Y2$``-,ATR'!(<$AKR&O(9TA +MG2&,(8PA>B%Z(6DA:2%7(5 +M#O%V:`#7#KIV:@#0#H-V;`#)#DQV;@``````<`"\#M]U<@"U#JEU=`"N#G-U +M=@"H#CUU>`"A#@=U>@":#M)T?`"4#IUT?@"-#FAT@`"&#C-T@@``````A`!Y +M#LISA@!S#I5SB`!L#F%SB@!F#BUSC`!?#OIRC@!9#L9RD`!2#I-RD0`````` +ME0!"#A-REP`\#N!QF0`V#JYQFP`O#GMQG0`I#DEQGP`C#A=QH0`=#N5PI0`0 +M#H)P_P```````````````````````````````````+@Y@`#()($`&``````` +M```!``````````````",-X``D"2!`!@``````````0``````````````L*F` +M`(`S@0`8``````````$````````````````````````````````````````` +M````````````````R%2``"0K@0`8``````````$``````````````)10@`#@ +M*H$`&``````````!```````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````#__P``__\````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````#P`_``$````/`#\``0````\`/P`!````#P`_``$````/ +M`#\``0````\`/P`!````#P`_``$````/`#\``@`````@`#``,``@`"``"@`& +M``(`$``0`!``$``(``H`!@`"``L`"P`+``L`"P`*``8``@`````````````` +M``````!(2#P\````````````````````````````````2$@\/``````````` +M``````````#_?P```````/]_````````_W\```````#_?P```````/]_```` +M````_W\``/]_``````````````````#H>=MYSWG#>;AYKGFD>9MYDGF*>8)Y +MFW>2=XIW@G>;=9)UBG6"=9MSDG.**9X)GFV6298IE@F6;8Y)CBF."8YMA +MDF&*88)A>V%T86UA9V%A85QA5V%284UA26&;09)!BD&"08HG@B>;)9(EBB6" +M)9LCDB.*(X(CFR'H>=MYSWG#>;AYKGFD>9MYDGF*>8)YFW>2=XIW@G>;=9)U +MBG6"=9MSDG.**9X)GFV6298IE@F6;8Y)CBF."8YMADF&*88)A>V%T86UA +M9V%A85QA5V%284UA26&"09LEDB6*)8(EFR.2(XHC@B.;(9(ABB&"(9L%D@7H +M>=MYSWG#>;AYKGFD>9MYDGF*>8)YFW>2=XIW@G>;=9)UBG6"=9MSDG.** +M9X)GFV6298IE@F6;8Y)CBF."8YMADF&*88)A>V%T86UA9V%A85QA5V%284UA +M26&"09LEDB6*)8(EFR.2(XHC@B.;(9(ABB&"(9L%D@6;>9)YBGF">9MWDG>* +M=X)WFW62=8IU@G6;"9YMEDF6*98)EFV.28XIC@F.;89)ABF&" +M89M%DD6*18)%FT.20XI#@D.;09)!BD&"09LEDB6*)8(EFR.2(XHC@B.;(9(A +MBB&"(9L%D@6*!8(%FP.2`XH#@@/\>>YYX7G4>?QW[G?A=]1W_'7N=>%UU'7\ +M<^YSX7/4<_QQ[G'A<=1Q_&_N;^%OU&_\;>YMX6W4;?QK[FOA:]1K_&GN:>%I +MU&G\9^YGX6?49_QE[F7A9=1E_&/N8^%CU&/\8>YAX6'48?Q%[D7A1=1%_$/N +M0^%#U$/\0>Y!X4'40?PE[B7A)=0E_"/N(^$CU"/\(>XAX2'4(?P%[@7A!=0% +M_`/N`^$#U`/H>=MYSWG#>;AYKGFD>9MYDGF*>8)YFW>2=XIW@G>;=9)UBG6" +M=9MSDG.**9X)GFV6298IE@F6;8Y)CBF."8YMADF&*88)ABD>"1YM%DD6* +M18)%FT.20XI#@D.;09)!BD&"08HG@B>;)9(EBB6")9LCDB.*(X(CFR'H>=MY +MSWG#>;AYKGFD>9MYDGF*>8)YFW>2=XIW@G>;=9)UBG6"=9MSDG.**9X)G +MFV6298IE@F6;8Y)CBF."8YMADF&*88)ADD6*18)%FT.20XI#@D.;09)!BD&" +M09LEDB6*)8(EFR.2(XHC@B.;(9(ABB&"(9L%D@7H>=MYSWG#>;AYKGFD>9MY +MDGF*>8)YFW>2=XIW@G>;=9)UBG6"=9MSDG.**9X)GFV6298IE@F6;8Y)C +MBF."8YMADF&*88)ADD6*18)%FT.20XI#@D.;09)!BD&"09LEDB6*)8(EFR.2 +M(XHC@B.;(9(ABB&"(9L%D@6;>9)YBGF">9MWDG>*=X)WFW62=8IU@G6;"9YMEDF6*98)EFV.28XIC@F.;89)ABF&"89M%DD6*18)%FT.20XI# +M@D.;09)!BD&"09LEDB6*)8(EFR.2(XHC@B.;(9(ABB&"(9L%D@6*!8(%FP.2 +M`XH#@@,``P4(`````````````````````````````````````,S+S,O)R,G( +MS[[ZMW@``````````````````````````*&,```H````$````=+^```(! +M``"````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````M-4``.@E!`#00`&'H$`"!Z!`!8 +M>@0`G'H$`+1Z!``@Q0``#,,``!3$``!PQ```E,,``/3#``!,Q```:&\$`+!O +M!`#X;P0`0'$$`)1Q!`#L<00`('($`#!R!`#```# +M!0<)"Q4-#Q$3```#``8&!@8&!@```````````PTN@(`V0("`@("`<(!67@!2 +M>6A*@("`@(!`2AN`=G9E``````0/"`L```!-&V,P``````8)"0D#"0D)``D) +M"1(````$!@`&!`8&!@8&!@8&!@8&!@8"!@0`````"P<#`#LW,R\K)R,?&Q<3 +M#PL'`P`[-S,O*R`.H`>@`^`-0!]`!Z`#@`'@`0`'(`.@`>``(#!`4``.`B!`"E11@`RO0G +M`,KT)P```0(#!`4&"`H+#`T.#Q`1$A,4%187&!D:&QP='A]65ZJJJJJJJJJJ +MJJJJ[JJJJJHH_P#,JJH``*JJ`,RJJ@```$``P`!``,``4`#P`%``\``````` +M`````````````````````````````````````````````````````````*JJ +MJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ```````````````````` +M``!L;6YO<'%R0`F`#D`)@`W`+<`FX!W`)N`>@!;@'T`&X! +M]`"R!;(%V0*R!=D"S`/9`N8!V0+F`40!1`'F`40!Y@&P`>8!'`+F`1P"B`*( +M`LP#B`+,`V`#S`,X!,P#.`3,`\P#L@7,`[(%$`6R!50&L@54!@8&$@82#!(> +M$AX``#0`:`!H`-``T``X`3@!.`&@`:`!;`#8`-@`L`&P`8@"B`*(`F`#8`/J +M`-0!U`&H`Z@#?`5\!7P%4`=0!^H`J`.H`U`'4`?X"O@*^`J@#J`.``$"`0,& +M`````````````````````````'T$`"A=!```````*%T$`!A"!``````````` +M````````````='X$`$Q\!`!$4@0`O$\$`$12!`` +M.([C.!S'<1R]A/82CN,X#AS'<1R.XS@.7D)["<=Q'`5)%08`,"J +M'718+C0M-K+<[K3[6_:D379AM\Y]>U(^W7%>EQ/UIFBY```LP6!`'^/(>>VV +MOM1&C=EG2W+>E-28Z+!*A6N[*L7E3Q;MQ8;7FE5FE!'/BA#I!@2!_O"@1'BZ +M)>-+\Z+^7<"`B@6M/[PA2'`$\=]CP7=UKV-","`:Y0[];;],@108-28OP^&^ +MHC7,B#DN5Y/R58+\1WJLR.>Z*S*5YJ#`F!G1GG^C9D1^5*L[@PO*C"G'TVL\ +M*'FGXKP=%G:M.]M69$YT'A3;D@H,;$CDN%V?;KWO0Z;$J#FD,3?3B_(RU4.+ +M66ZWVHP!9+'2G.!)M-CZK`?S)<^ORH[TZ4<8$-5OB/!O2G)<)#CQ5\=S49%!ZI8\#^%F`"1<:VF4Q +MU\:$N-##@K`I=UH1'LM[_*C6;3HL``$"!`0&!@@(````E9F=H:4````1```` +M````````````````9````!````#_``P@"````!(````````````````````L +M`0``$````/\`#"`"````$P```````````````````"P!```0````_P`,(`<` +M```4`````````$`&`````````0```!`````!``Q`!````!4`````````0`8` +M```````!````$`````$`#$`#````%@````````!`!@````````$````0```` +M`0`,0`,````7`````````````````````0```!````#_``0`!````!@````` +M````0`8````````R````,@````$!S$`#````&0````````````````````$` +M```!`````0$`@`$````:`````````````````````0````$```#__P"@!0`` +M`!L`````````$``````````!````$`````$"!``&````'``````````$```` +M``````$````!`````0`,``$````=``````````0``````````0````$````! +M``P``0```!X`````````!``````````!`````0````$``(`!````'P`````` +M``````````````$````(````_P`,(`8````@`````````````````````0`` +M``@```#_``P@`@```"$````````````````````!`````0```/\`#*`#```` +M(@````````````````````$````!`````0(,@`$````C```````````````` +M`````0````$```#_``"@!@```"0````````````````````!`````0````$" +M1``"````)0````````````````````$````0````_P`,(`,````F```````` +M`-@``````````0```&0````!``@``@```"<`````````+`$````````!```` +M`0````$`#$`$````*``````````L`0````````$````!````_P`,0`0````I +M`````````"P!`````````0````$````!``Q`!````"H`````````+`$````` +M```!`````0````$`#$`#````*P`````````L`0````````$````!`````0`, +M0`4````L``````````(``````````0````$````!``0`!0```"T````````` +M!``````````!`````0````$`#$`!````+@`````````L`0````````$```!I +M`````0`,0`,````O``````````````````````(``!(```#_``Q@`@```#`` +M````````,@````````!D````$````/\`#&`&````,0`````````L`0`````` +M``$```!N`````0`,0`0````$#`P(%!0$!$````"```````$````"````!``` +M`$```$````!`````_T%5514`````@(B("`````$``0`<````_____P0!```8 +M````_O__?P0"`0$8````_____P$!`0$8````_____P,````<````_/]2U0(` +M```<````_/^GZ@4"``$8````_/]2U0(!``$8````_/^GZ@,!``$8````_/]2 +MU04!```8````_/^I:@!````7````%)@``!0``````````0```+!7`0`````` +MV,````,```"LF@``!````.RW```(````2+4```P```!@IP``$0`````````3 +M````-)@``!8````$)P(``````)#````$````2"("``4```#8H0``"````$RU +M```,````%*H```T`````````$0```````````````````##```"TEP``!*$` +M``RU````````@*,```````"PE```1*8```2X``#$F@````````$"!/\($/__ +M``(`````!?\```'_`@#_`@(#!?\"``8!`@`!`0,`_P,#`P4$`P0#_P,"`@4# +M``8!`P`!`00`_P8$!`7_!`$'_P0`!@$$``$!`0#_!P$!!?\!!0'_`0,("`4` +M_PD%!07_!0`("@4%`_\$`@0"``````$"$`0(`````A`$"``````!`0`!`@$! +M`0````````````````````````````````````````````````````"L!H$` +M`````````````````````````(`````````````````````````````````` +M`````````````````````````````````````````!`````0```````````` +M`````````````&`1!``*````!````'2_@``````````````````````````` +M`````````````0``````T/X````````````````````````````````````` +M`````!``````````$``````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````$P````0``P``````(""`#P``0``@((`/`0"H6"`@ +M@`\!``PD(""`#P``!`AI(```:2!``&D@``!I($``(""`#P$`5%UI(```:2!` +M`&D@``!*(```2B$``$HB``!*(P``2B0``$HE``!*)@``2B<``$H@`!!*(0`0 +M2B(`$$HC`!!*)``02B4`$$HF`!!*)P`02B``($HA`"!*(@`@2B,`($HD`"!* +M)0`@2B8`($HG`"!*(``P2B$`,$HF`#`*)(`_@0``>D$LG#!`+)PP0B0<-`HB +M@#^``#3E"B,`-Z8,0"%*)@!P:2!``$HF`'!*)@!P2B8`<$HF`'`````````` +M`````````````````/P`3<.-TU\.!X!-PTW3/PX'@$ +MW##=,?#@>`3<+-TO\.!X!-PHW2WPX'@$W"3=*_#@>`3<(-TI\.!X!-P`3<%-TC\.!X!-P0W2'PX'@$W`S='_#@>`3<"-T<\.!X!-P$ +MW1GP-!0:,#`4&3`L%!@P*!07,"04%C`@%!4P'!04,!@4$S`4%!(P$!01,`P4 +M$#`"QP'&L"1-,[`D'S/@?OP'#X<+AP>'`!\`<',`QX<#@ +M?P'`"B8`\(H@OP_*(&0`X'\O(`,`X'^*(/\/"B)`@`#9Y@`!`"\F`/!*)D`` +M2@`&`$L`(`"*)?\/X'@*(D"``-G&``$`9@`D`"\F`/!6``4`)P@U"$HF0``( +M<0#84''@(,4'0GD!X%!QX"#%!T)Y[P?O_P'@+RT!`$`E10`")GSQ```@```H +M0`'H("(#+R``@"\A2P!0<<`@A@'"(88`X'X3`"``2B``$$H@0!`.(D(`+R`+ +M$LX@18"*)?\/"@`%`"\M`0!`)44``B9\\0``(```*$`!2B9``.@@(@,O(`"` +M+R%+`%!QP""&`<(AA@!*)@``3"#`D,X@@@%$('Z0SB&"`>!^`0?/_^!X,P`@ +M`$HD```'(<0`+R9`\$HE```0`"8`+R0$`0X@0($#)4$`@.,.``,`#B)"@0,E +MPP`%(X6`,`$!`'ES2'0(`AT`-@%*GX`+W$%*CX#`"!`C@$AP0X%*SX#X'\G<>!X +M4R)"@>!\3B(#B!8`#``!*,P``"F!```H@`#@?X5Y3B,#```HP0#@?P)XX'A3 +M(D*!X'Q.(@.(%@`,```IS``!*8$``2B``.!_A7A.(P,``2G``.!_(GG@>.!X +MX'@*)(#P!2!$`.`@P0=$)/Z`02K$`(0``@`O)`+Q0B$!`4(@`P'H(*($!!$$ +M`@01!0($$08"!!$'`@0;"`$$&T@!!!N(`00;R`$L`"4`1"(^@3P`(@!$(OR` +M0"'!`.`@P0=`(\,`J""``0$1A`(!&PH!("#`!P01!`($$04"!!L(`=0'X?\$ +M&T@!1"+\@`01!`+)!^__!!L(`4(A00!"($,`J""``0$1A`(!&PH!("#`!^'% +M"'41\.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!X@.5AO>_UX'C@ +M>.!XX'C@?\'%`-L)\,]RH`!@#$B*`>,!&)(`4R!^@`3R[0M$@`#<"?#/PGPSW*@`&`,2(H!XP$8D@#U"T2`X'Z& +MX/'``-@-],]P@0!H)J8/[_\&V?[)@KC^&ABP`=C1P.!^X'B#X/'``-@)],]P +M@0!`)H(/[_\#V0'8T<#@?N!X\<`(<<]P@0",*22H9@_O_P7@`=C1P.!^\<"! +MX.'%`-@)],]P@0!F)@'=2@_O_ZEQJ7#]`L__X'CQP((*S_^$X`#=RB!"`Q+T +MSW:!`"PF0";`%2(/[_\$V1>.MZX4KAF.%:X:CA:N`=B]`L__\<"6X.'%`-B, +M]\]U@`!X.:EP]@[O_P39`X6)N`.E`=BA`L__\<":X.'%`-B,]\]U@`!X.01M +MT@[O_P39`X6(N`.E`=A]`L__X'\!V/'`X<7/<8``<`DNB3!P`-@*],]U@0`L +M)J(.[_]`)0`7`=@6M5$"S__QP!\(40#/<*``8`PHB,]P@0",*A(((``DJ`'8 +M`O``V-'`X'[@?N!XX'\!V.!_`=CQP*()S_\(=<]P@`"D/@*`&G$`WF,($`&$ +MY6``)0#*((4#SW>!`"PF0"<`$S8.[_\$V2Z/T*]3(0``$:]!*,`@H+DW"&0` +M`B!"`&.]*PI%`POJSW&@```,!(%ANEA@!*%H$8```O`/CU,@@B``V0\A@0`D +M>!"O`=B-`<__X<3\',B^_!Q(ON'`X<'APN'#_!P(L?P<2+'\'(BQ_!S(L?P< +M"++\'$BR_!R(LOP'&X$(@`(#@?\H@8@!):`8@@0#7<`"````?V`;R+RE!`$XA@`?@?N!X.@G@ +M(`#9X'XH";T2PY1$,]TH```#*2$`-L8\&@4CA"$*0$L`"&!?X``7",` +M(8!_@`#\(DR)`>,#NEA^2(#'>DB@#(D!X,&X#*D")P`4SPL$@*2D`=A%!X__ +M\<#.#:`'#]@J#&`$`=C1P.!^X'CQP,X.C_^BP0AU.G'/=X``L`C`%X`0`-ZF +M#V`(R7&"Y1IPT_>I<"IQR7+)#E`)8`21@KO_P'9 +M`X6`N`.E3_`;"90`SW6``'@Y0"4`$BH*[_\"V0.%@;CR\6;IBW`:"N__`=D@ +MP,]U@`!X.5,@`0`HK1QXP+@)K>[QK0D4@<]U@`"(-*EP\@GO_P39`I6`N`*U +M)?">".`#*'"BZ,]R@`#XRR&"@+DAHAKP6>G/=8``^,NI<,()[_\!V0&%@K@! +MI0WP#>G/<(``S#BN">__`=D!V".':@B@"$2'`-@U!:__HL#/<(``T#B."<__ +M`MCS\?'`S@R/_\]P@`"(-`*0.0@>`,]P@`!P"0"(SW&``%BS`[@5>`!A'0B> +M!TUP&0B>`\]Q@0`L)@R!!N@:D<#@!/1B"<`'SW6``'@Y`X4K"%``?PB1`,]P +M@`!P"2"(C"$"@#7R2HT#N35YQW&``%BS`($JZIJX*O#/<(``<`D`B(P@`H`` +MVB/R\=S@`!8LR"#A)6*)D00Q'RQN2"C#0R!$Y&Y(*,%\('DRB)A`(#B +MT"$B!]`A8@?/(6$'P@U@#2"C!?"ZN+NX`*$`V`.ESW6``/C+`87@N'0.@@,! +MA4<(G@#/<(``<`D`B(P@`H`9\F"-+PO?`0.X%7C'<(``6+,@@%,C0@`$(8$/ +M_\/__QJZ17E$N\*[8;L3S#!21X']('/64`WJ7J5&A6>@`B@0^` +M`$!)0"$0"(0H"`;/<8``I#XP(4`.+-E*#R`AR7('IZ*@!X'`("Z"6`@R7$.\`*"&PT`$#AC<'7*($8#`J('AP"`#@I@(,EQ*G:` +MYJ`(X@/*(.("+0.O_\EPX'@%N,]Q@`!H\SA@`-D@H.!_)Z#@>/'`N@J/_\]U +M@`#X'B"%0"4.&A-I%7@`(((/@`!X'Q&"`>`1H@38!:42:11X`&:`X,H@@0\` +M`"(SO`K!_P"%)(4"N!1X!&8`W@&%R7+)/'`!@J/_PAW +M`B"`#P``.S,H=BT(=0%(=;X.(""I<,#@2?:R#B`@J7`+#@$0C";#GP;TZ7#) +M<18*[_^I__"B3`!(7H&P(@`$H@P"0*)8`O@0`L)JIP +M2B$`(P(.K_\J<:*F#=@`IE,,$"#/<(``+"6$*P@F)H``(8!_@`"D/A7I0X0!0`P4(@`"-B"J`*:G(*(`"@QO3/<(``")H`B`\(T0`Z#J`*`]BZ +M"4`+3"0`H+CRM@Y@`VIP`(:`X,P@XH*P],]PH```(&P0$0`FA@T)901#A@(A +M0"`(\`(A000.(8`/_____X'#@L$%*+X``!G`#@`;0`X"P``BC2^``!PC`>`= +M>`2M!(T-")(`8;@/>`/P`-@%K2>-.&`'K0B-`>`(K0R&`>`,IA@>0!0`AL<( +M$0`!AAH(H`4EAH#@!=A(]%@6@1!D%H(0`-@B>L]W@``L)6*'47H1">4`3WH@ +MAQ4)A0`"V`;P(8<-"D0``]@`I@'8K^AF#(`*(X<)"$0`1(<#\$6')(8B>!%X +M`^H+"(4``-@$\`38`*8!V)OH;1:`$`?H`-AM'@(0!]@2\"B&!X80<0;8#O0& +MAPOHA"L()L]P@`"L/C`@0`X+"!$!`=@`I@"&D>@&C0'@!JT+A@'@"Z;/<(`` +M+"4'@`?H5@Y@`VIP"=@`ID0K/B?/<(``5"(P($`.CN@$(K[O!`0$!`KR1"L^ +M)P`A@'^``%PB`!A`!`'9SW"``#0+(Z`*<'D';_^CP.!XX<7AQD$HP@#!ND$H +MS`$KN"*)SW.``,33NFG/<8``6"4E$8X`P;C!O`MC"PB``QC>P*$#O$5\!KB% +M>`B[97B*N(^X$KVE>`'B1Z$$H<'&X'_!Q>!XSW"F``#`!8#/<8``6"4%H0D( +M'P`1V`"AX'\`@?'`Q@Y/_PAV2B``(`'=R@A@"F38J7!0#=SW&F```$8($A@0WO#'$7"=X$SW.F```$ +M,8,`WU,A4``R@R"&@.'1(&*!"/(`VV"FSW&@```0::'/<8``6"4)"!X`!.^; +M"AZ`X+K*(.($$/2`Y,]RI@`` +MP`&BSW&``%@E`J$"V`*B#!J`#P``-#0!V`"BX'[QP,(-3_\Z<,]W@`!8)0B' +M&G&EAYIP02T2%$`B3BCZN,`F(A'/<*``@"`2@`L(%`,2V`"G9?``V'IPBG') +M<@AS3@W@)IAPN0@?!B07@A"$*`@F`"&`?X``I#X#V\]QH```"!IQ8J'@VP`8 +MP%`#NE5ZQW*``%BSFHK/<8``V+46(0,#@(,`&`!36HI6>4*1`!B$4$2``!B` +M4$J0`!B$4$:``!B`4"Z0`!A$4#.7`!A$4!.7%=D0X!.W`!A$4*EPX@WO_T`G +M`18`&`10,+@`&`)0BG#)<;H*H"5J`#9SW"F``#`(*#@?O'`K@Q/_X(D!#$(=@HD +M@"\```"T02B5`%,@4@``W;8.(`J*(`\*SW"``*3,`(`*(``GY[C*(4$#RB%! +M(W7R`VY&(,\`0"<`%`/:SW&@```,1J&EV0':7@C@#4AS"B$`H`SRSW&``/PE +M0($`'X!`(8$`'T!``!_`0ZEQ5_#/<*8``,`3@$#:$'C1<,HCAB/*(P4@02N` +M(*)XP.#*)X80RB<%$!GO`"6`'P```+3I<4H/H`<*/W"X2$"PD0(``?`$!"<6QP*P@?`,]PH```15R`&(`["%\% +M!"*^CP`&```7]%D)A(//=8``6"4&\!38SW6``%@E`*4`A2T)$"`7"!$%`]G/ +M<*````PFH`SP&=CP\0#80!P8,%8D`#@$V=8.H`T!V@"%E0-O_X`D!#'@>.'% +M6F)4>A0BS0#/.'%X<9!*(T`P;@`VK';"+L+\,]QH```#)J!*=D2N75Y +M@*$!XP'B[PI$@P#:2'4*\,]QH`!@#"B)DVV8>3IB`>7Q#020*=@2N'5X0*#! +MQN!_P<7@>/'`SW"``(0E((#HN$HH@WP@>#*)8$?`0"@A@?RSW*``(0E)X(! +MX2>B`-[/=X``A"72IZ(*(`#)<0>'$0@4`NX(``#'I\]U3`!`2\]R@`#$O@:" +M`X`@@+EA#@N@#TAPG0)/_Z'!\<`J"D__HL$(=@0@@0\````8*[D$((`/``,` +M`#BX!2!0`,]U@`"$)3`5CQ"+<%8*(`CI<<]Q@0#0*T*!`,!!*H$#PKG/$5XE+B:N"H(8`H#I02E`-@(W/\!;_^BP,]Q@`#\T^!_ +M\"$```#9SW"``(0E):`FH">@X'\HH.!XSW"``(0EX'\2@.!X`-G/<(``A"7@ +M?R&@!""`#P$$`-C/<8``A"4!H<]PH```(!N`H<$*H>!_H<#QP#X);_]TN,]V +M@`"$)2:&(K@!X2:F%'ACN.`<"+``W4'%0\4_V&;``X86'$0S!""!#P```!@K +MN00@@`\``P``.+AJ#^__)7A$P!D<0C-'Q67%"B0`!XH@!``CAJERF@C@)JES +M"B<`D`CTSW"@```(H:`R"2`F(-B$[P'8$J8#\`[?Z7`A`6__J,#@>/'`K@AO +M_SC;SW:``(0E!88BA@'@!:9*(``@SW*@_D@"!=@5N$2@SW6@```@0!T`%!#8 +M%]HV".`F"B0`!%3?70@?!@'9SW"``-C"(*`#V,]QH```"`*A`!C$4V3:`!B$ +M4$V&`!B`4%R6`!B$4$^&`!B`4$`6`A$`&(10,1:`$`*X`!@"4``8!%0$&0`$ +MB@@@)A#8.X4II@/P#=AY`$__X'C/``@@0^``%BS>HG/ +M<(``V+5V>&"`*($"D&VB'++/<(``M#Z$*0@&,"!!#B=P`8`OHN!_$*+@>`_9 +MSW"``(0EX'\@H,]T@`"$)14D`Q!3@P"D`>)3H\]SH/YD`@7:%;IDH@BY)7@$ +MHN!^X'CQP.'%$-T&\`#=%@QO_P;8'PT1%`QP]0A?A6QP[P@>@`+=`-G/<(`` +MA"4RH._QA>W.#``,"'7=!R__J7``V86X#/`O*@$`3B*#!U)K0W+9$@*&$"#` +M`$5Y]>B$N>!_WQI8L.!X\<`N#P__&G``W:EV.G4E\/)N]'_'=X``("@)AXP@ +M_X\:\@J'JW@)\L]P``!%,$8/;_\`$`$@*X<*AP5]$PE.(,]P``!&,"X/;_\` +M$`$@*X:]#A21-0@`V`BA&?#/<(``&"J6@%6` +M<8"%[`L*Q0`)\`T+A0`#V`BA"_`0@`T*!0`"V`BA!?`(@?L(E(#/Z^`=C"(`$`!+A/(,$`SW"` +M`&RH`HB"X`'8P'@'N"5X$+B%()(`SW&@```H`:'J"6__`=C1!0__X'CQP`(( +M@`//<0$`]&_/<(``B"GB"``'^@]``]'`X'[@>,]Q@`!\*$"!`8$%(CZ`"/1# +M@02!!2(^@`G8`_((V"T`H`,`V?'`&@T/_^H*8`HO??H*8`H(=A5X!>#/<8`` +MF"GD&0``X!&``!D-`1`;#=$0XA&``!!V:`]B`\H@@@,%\.(,H`JI<$4%#__@ +M>,]P@``X+`B`@^`!V,!X.0)`"^!X\<"Z#"__`-C/=H``&"HWAE4F3Q>`X<]U +M@`"8*$`E`1P989H-(`D$V`'8S00/_^'%SW"``#@L`X#/!_P<4( +M/D)$X#@?N!X\<":"P__2B``(`IU+/!`+1(1 +MSW"``!A/`"*/+X``D#3"AP&`/0B%`P&'A2@!"3IP+W!F#"__R7$`(H$O@``, +M5!6A6!E`!,]PH```(!N`UZ$8H4\@`"`O(`<@`-@!IP*G`>6O?:L-TI`7"!`@ +M`MG/<(``#%0@H(396@Y@#:':>0,/_^!X\<`F"P__K@Y@``AV"'6,)<.?`-AT +M\B*&(PY$<`!```!$AAL.A'``0```SW*@`(`@7H(-#H5P`$````'8C^C/%5)@A,*3@///'`Q@DO_P?8`@P`""R`)R7#-`0__\FG2="2#``!2U`>'M"92`-0$/__'`X<7/<(``")K.#^`$ +MH(B,)<.?"O+2#@`*".B*#"`+`/'`)@@/_QIP*'4`WA'PSW>!`"@4U7\&AQ4- +M`1`@APCI8'D*<`#8`*<&V`:G`>;C#I21SW"!`%@4`-FU>""@)J#/<8``!!X` +M@0D-`1`&V`"A.0`/__'`SW"!`"@48@N@`##9SW"!`%@45@N@` !MG/<(`` +M!!X@H-'`X'X)`"``!8#@>/'`H@_/_@AVA"@%"@`AC7^``!B:SW"@```@;!`0 +M`(0N"!;/<8``J$`R(4\.SW&```@_,"%`#B;H-F_/<(``[)\@8*#HN@^@(,EP +MG.C0%0`0`B``!"T(4P!#%0`6`-L+Z$,=V!#)<`79"KE."F`B!-H(\,]Q``"0 +MQNEP1@Z@(@C:A0?/_O'`X<4%@(0H!0H`(8U_@``8FHH/("(0V:EP+@U@(@#9 +M>0?/_O'`^@[/_N6`A"\%&@`AC7^``!B:`"&.?X``&)N$%0`0"!80$"<('P#/ +M<8``]*,@@0#8B>G/<8``\*,@@8#ARB!B`(7H!8T!X`6M/@X@(NEP!8TS"%$! +M`=@&K0`G@1^``-BC`(F`N`"I'I:IN!ZV-@M@"NEP&P@0(*EPM@U@(@+9"_!, +M(`"@RB!"`P79`_2I<`39D@Q`(LD&S_[@>/'`X<5(=48/H`<`V80H!0H`(8!_ +M@``8FBF%+WM6(`($$0M1`"&"H+DAH@'9*:@)\)+;9'D;"<``(8*`N2&BSW&@ +M```@.X$CH#X,8"(!V8T&S_[@>/'`X<4(=1#@)H`C@2"!T@X@#Y8A"@``A9H- +M("(0V6D&S_[@>/'`Y@W/_J"`"'>$+04:`"&0?X``&)L($``@@.#*)H(?``!0 +M1LHF@1\``!`GJ7!B#2`B"-E6)T`2)H`%O2.!((%Z#B`/V6$`V0@80"#/<*`` +M`"`[@``E@!^``&SS[07O_B"@X'CQP'H-[_Y4:!IQ5GK/<8``0$D`(9(`A"@% +M"@';+W$`(8P/@``8F_J,V(R#YYZ4PB/%`,]R@`!IFP#=#0R>$(3GRB5F$`#? +M`!C`(XCM@./,)F*0RB#!`SWR&>TI8H#ARB"!#P``6@-4!0'_A"@(!@`A@'^` +M`*0^"PY0$!^``O`=@`4H?@`*(4`N"/"$*`@&SW&``"`_,"%1#@`2`"`J<>() +MH!\`V@AW"B'`@\HA8@``&$`@`-@-[1`2`"`J<<()H!\`V@\.41`!V`+:`!B` +M(,]Q@`#LHZ"A`-F`Y\P@(8#*($$``_(!V/$$S_[@>/'`D@S/_@AV.G'/=X`` +ML`C`%X`0`-UN#:`'J7$:<,]P@0`L)@'9+*`/APL(7P6I$KYBD$&0$+ME>O5^0*8!Y>D-1)!%!,_^ +MX'CQP.'%"'5*""`**'`"?4$$[_ZO>/'`P@OO_@#:SW&A```&[[XD\`,4C#"1<2.HD0/O_J+` +MX'CQP,]R@0!@)`""SW&!`%PD`*$`W,]Q@`!0-H"ASW.!`&PD)X.(HP'A)Z// +M<8``0#9@@07K(8)@>T*"T<#@?N!XSW&D``!`28'/<(``G%1`H$&!SW"``)14 +M0*!`@<]P@`"05$"@`-@)H?_8`:$`H>!^\<":"N_^`-D:<`HC@"^!`"@ESW"` +M`#!1`!.,($"`(0R#$`03@"`9"(,`"!.`(!$(@P`,$X`@$'+*(6D`@.&7\@#= +M;_!*(4`@`-X(Z@`4@2!DN#!PRB9N$!4E`13/<(``Q`D5($$``!&2`*(/X`]* +M<`AWF@_@#R38`B&1Y!2!^@``5@B`%\A"/&PH#``$5@"!0KQ&O`!2`(!*O`A2`(!.O +M%@_@#TIP"'<.#^`/)-@")P(0`=@B#>_^`-EAAD*&97A%>0&F(J8!Y4\-%1$+ +M#1\006T"\$EM%2-5(\]P@``D4<"`%2.4(`(4@"#/G8$\$`C4R!;"Y4@`-\#\`'G]0_5D=8*(`#I<`#9]0D5@<]P@0`H)35X +M0(C0X@#;R_:!B-#DR?:"B-#DQ?:#B-#DRB-I``WK765!B&*(`"*2(`.(`"'1 +M(``@$"`!Y@'AW_'/=X``,%$*(X`O@``D40HD@"^``"A1"B6`+X``+%$5[JEP +MR7$N#N`&Z7)*<,EQ(@[@!FIR*G#)<1H.X`:*<@IPR7$.#N`&JG)`AP`3`R!D +MND"G9+L`%`P@`!O`(&2\`!4!(``<`"-DN0`=0"#/<($`W"-`J"&H8JB1`._^ +M@ZCAQ>'&`-N!X"C8RB*A`\H@H@/*(L(`SW2@```@VX0.\,]T@`!`K/`DC!`" +M)@T3!>RQ<<`C9@`!XND*!(!H<,'&X'_!Q?'`_@^/_@H@@"\```\G"B*`+Z`` +M`"!L$@`@`-UZ<#IP"?!L$A$@SW&``.0M`($!X`"A`B'`)($(A0\!`+"M`-X- +M\,]P@0"X,_`@CP-Z"2``Z7`.#>__Z7`!YL]P@`#$J0"`XPX$D&P2`"#/<8`` +M3#8"($`$$G#*(`4@L7!`@<]Q@`#DJO`A@0#*)0T0EPD%@,]S@0!L)""#`>$@ +MH\]Q@`#/'`L@Z/_L]R@`!PJX\2@0`5(D``-X@`W0KIB@^O_I`2 +M@`"`X1C>P"XA%@3R`-Z!$(5`K/<8$`;"0$ +M@0'@!*&*"N_^!MB&"N_^!M@`W2OP#^T5)D`3`(C/<:8```@#N(&X`*$!V<]P +MH```$"F@7@KO_@;8SW*D``!`?A(!!L]P@0`H);5X(*B`$@$&`>4AJ-`2`08B +MJ`0A@0\```#_*+DCJ+$-%)$)!H_^X'C@?N!X\<"R#X`(G@^`"(H/@`C1P.!^ +MX'C/<```Y0ZY!>_^WQ(!MN!X\?_9SW"``'A5*:#&I7T%C_[QP`H-C_X(=BAUSW&@ +M_L`!!=@5N"2@`-\,\.H/8`<5)L`3X'C@>.!XX'C@>.!X`>?K#T23/06/_L]Q +MH```!`6!!*$#V!6AX'X,<1$A`(#*(($/``#_``[RSW&@```$#Z$#@2RXQ+C/ +M<8``B+SP(0``X'[@>/'`)@@``(P@PX_*("$`"O(6"```SW&``/A4`[@5>#A@ +MT<#@?O'`X<7/<(``")J@B/_8$'7*)0$0^`^B"/'`X<4( +M=<]P@0`X.U"`5B!#`L]Q@`#P5'QB@*%Z8B&*B>D"@/"XRB"!#P``Z1Q<#,'^ +MN@Y`!GX)8""I<(D$C_[I!\`C\<`.#(_^"'4H=L]P@``0T2"`00X0$9H+X`+) +M<.8(X`D/>,]Q@0#0*R&!)0A1`(0N"!;/<(``R#XP($`.@.#/(6$`SR'A`,\A +M80($\D4A00,`VPKP%FUU>``@@@^!`+@U(*(!X_$+%(0`V\]Q@0`X-18A0@-@ +MJF&J`=@"J@/8`ZIH<@;P.&*V>&2H`>+Y"A2!Z0./_@;HSW"``/A4H-D$\"AP +M)-GY!@``SW&``&0W((DK"1`%`-D$\`'A+WG/+I`BA<*0@!U:<]R@0#> +M&'-B$'KE"X&``O#_V>!_*'``VD6@1*#_V2*@+*@\J$*P'AB$#P``___@?T"@ +M\<`."X_^"':J"N`"*'`(=:(*X`+)<`AVBB#_#Q!VS"4"D##R1@G@":]XJ8@^ +M">`)SWC)B#((X`^I<,]W@``@U0AG*0@1`B((X`_)<`AG`-T5"!`"$@C@#\EP +M"&>'X,H@0@,1]`'8#_#^#Z`/R7`.9_8/H`^I<`AG$'8!V,!X`_``V/4"C_[@ +M>`2XQW"``&C58(&`@&"D(I%A@""C(()B@""C(X`"D@"AX'[@>/'`5@J/_CIP +M50A1``#=(?#3;=5^QW:``/A4X88(%A`0A2\!&2]P+@NO_@IQ,FTU>4)QG[@! +MH>*A!(8,&0`$!*'/<*```"`;@`'E!:&O?0HB@"^```Q4O0T2D2?P2PF1(`#= +M'?!`+1`1`""`+X``D#3A@,*`A2\!&2]PV@JO_LEQ`"(!))^X%:'VH<]PH``` +M(!N`UZ$8H0'EKWT*(H`O@``,5,4-TI#/<8``#%0%`J_^`!E`!/'`K@F/_B2( +MSW*``"SDPKDK8@#9YH@/(<$`SW6!`#@E0"4,$D`ECA-1C87O)GI1K1?P17DQ +MK26(?F8@KD6()HAT?%EA(+0@@(PA$(!$]XHA$``@H".Y(*4`@"JX`:4`V,]Q +MH```-PBA#HT!H025`J$/C0.A!94$H1"-!:$&E0:A`(4'H0&%":$1C0"AB0&/ +M_O'`X<7/=8``B#TAA8_IH@G`"<]P@`#X$P"`!^@!V<]PI`"`0S"@`=@`K6T! +MC_[@>/'`X<7/=8``B#T@C1#I(86.Z3X)P`G/<(``^!,`@`#9!>C/<*0`@$,P +MH""M.0&/_O'`X<7R".`)_]V`X,H@00,'\L]P@``(FMH(X`(`B!D!C_[@>`AQ +M"'01\"\J00!.(H,'A"L(!L]R@`"L/C`B0@Z&XM`DP1`0(<$`\>F`Y.!_RB`" +M`_'`SW&``#0+)X$P<,P(!0#1P.!^SW"``#0+H0(@(@B`'7F*(`D%40-@!\*Y +M\H#B(``I`,H@J0#//'`X<4(=<]P +M@``T"R$-M1"GH,]R@`#X"P""BN@&@@.`(("`(0\*/@C@#DAP$FW/<8``8`L4 +M>`%A9@I@!]38S0=/_N!XBB+_#P#<`_`!Y!L,%1$R;#1YQW&``"`H:H'Q"PZ` +M"8$"\$APX'[@>`#9#P@?`"\J`0!.(H$'`-K/!^X'@`V32H +M-:C@?RAPX'CQP,H.3_X:<,]P@``83P"`BPB>`,]U@`"0-#`5@!!_"!X`SW>@ +M```@VX>Z#(`)@>#*("$`"_*&X,H@80`'\HO@`MC*(((/``#_`(P@PX\G\@2X +M'647"!`@`=C\'P`0"!^`'P@```##I1GP(X47Z0P?@!\(````#0Y$$`(F0!`' +M\`XA@`______V&`BA3A@`J7X%P$0`84X8`&EE09/_N!X\<`N#D_^"';/<(`` +M")H`B)4(T`#/=:```"#[A1WI)880Z0T/1!`")T`0!_`.(8`/______A@)(8X +M8`2F`-@%IN.F"!V`'P@```#/<`$`H(;B"P``*/#/<(``1,XV#H`.#!V`'P@` +M```CAA;I"P]$$`(G0!`&\`XA@`______^&`BACA@`J8`V`.F^!4!$`&&.&`! +MILEP>@IO_P#9Y:8!V/P=`!#Q!4_^X<7AQF*(@8B">V][IN/*)"L0A_8+"S,. +M$=Q"(XP)`=[/=8``5$_%I<.(P;X)YFQ^8(@"B"=S`GMKI?0A``-L>,]Q@``@ +M>"]P"0I1`#>9`_`VF0QY+W`L'4`>P<;@?\'%#0A1`,]P@`#(3P7PSW"``%1/ +MX'[QP,]P@`"03VX-@`X"V.8*H`T`V='`X'[QP,]Q@`#@5@&!-PA>``"!&PB> +M``'8Q@J@#0#9SW&``,"9"HD!X`JI!?``V*X*H`T(<<]Q@`#`F0F)`>`)J='` +MX'[@>+T'S__QP/8+``FV"J`/BB`/"L]P@`#@5@"`%0B>`,]P``#+*,X,K_Z# +MV0OP5@L`"<]P@``@>#88A`\``.0,<@H`"='`X'[@>"AR=0`@``#9\$5"84#\"=" +M$/`E0!#S"@"``=@#\`#8C01/_N!XX<4`W0+P`>43#8,0JV"L88)[+R/'@/GS +M`O``VVAPX'_!Q>!XX<5`*0P")7Q`+`,4A7LG"C0""'0$\`$<4A!ANE,D?I#[ +M]4$JC0#!NH`E_Y\$'-`0_/4'ZH`B_X\!'%(0_/7@?\'%X'CQP,]QH```(#N! +MSW.!`!@K`*//<(``T%0`@`#<`B$"@!-XRB1O$#A@@.3*(@$`0:-H<`S9K@Z@ +M#&3:B@M`"='`X'[@>/'`<@MO_@W:I<$`'(`_````(,]U@0!@+`*58<*&('\, +M''A`*($#`<#/=X``8,,E>$'`A,"2"R`'(HV!P(H+(`+@%IP'8 +M!*==`V_^I<#@>/'`Z@I/_JH(H`D:<`#:#O#/<8``P-KT(0$$0A``!EEA-7L` +MHP'B3WIA"M,`*=O/<(``")H`B!*[A"@+`L]P@`!X83`@3`X*<80J"`:`)`8> +MSW6``+3:+W"$*00#`"`!)#1Y5'DG<#5EF&!`(`P"`-G`X:`'RO\_9?`D3A`5 +M(\\#P*,]R@`!$SB:"(X$@@1EAP0*@#DAP +M\<#N"4_^"'4`WA$(T0#2"8`)@.#*)F(0A@V@":EPCNY:"*`)J7`>"@`,6@[@ +M):EP$-AB#"`)`-EZ#F`(J7`=`D_^X'CQP*H)3_YB#T`)@>`!V,]R +MH`"`,"J"`-N&(?\-*J+/=:```"AFI:8+0`C/=H``")KR#:`"`H;NN`'8PB`! +M``2X3R#!`,]P@`!LJ`*(@N`!V,!X![@E>!"XA2"2``&EQ@UO_@'8O@V@`@*& +M@+@!I:$!3_Z*(O\/`-P#\`'D&PP5$3)L-'G'<8``("AK@?$(P8`)@0+P2'#@ +M?N!X\"G`(<0IP)@D@ +M'P#:"B,`H,PE(J`.\@IP`-F*<@C;(R!`!4HD``"R#6`>"G`%?9(/X![I<`AQ +MZ7#V""`?`-H*(@"@S"4BH!+R&!&`((7H`=@;&0(@Z7``V8IR"-LC($`%F'%V +M#6`>Z7`%?3H,X!X*<`AV,@S@'NEP`,$)"5$`0H8,\!<)D0!"AF*``B.!``D) +M4@!BI@/P0J!,(@"@S",AH`WRB^W/<*```"`[@,]P@```S"((H`XRX:EP>0!_)'C/#P_^"'7/=Z`` +M`#`*ATHA0"`$((`/``(``-=P``(```'8P'B`X*H)(`#"(4(D&G!!%P"6`-Z+ +MZ),7`)8$((`/````#XP@$(#*)F(0=@V`#"?HSW```$0_/<```L!Z:"0`'SW'_!P``)'@+ +M"$```-\'\`'?!?`$(8]/``0``,]P```(''()``<$((`/`(```$(@`(#*(&(` +M@.`!V^6]RB!"!,H@80`? +MZ.:]RB`"!,H@80`9Z..]RB#"`\H@80`3Z.2]RB!"`,H@80`-Z.*]RB""`\H@ +M80`'Z.&]RB""`,H@80"#Z`#<"/#@O>@!W%D,4!!,(0"@`=C` +M>$P@`*`!W`*X!7V`X0'8P'@#N`4@00.`Y@'8P'@$N`5Y +M@.(!V,!X!;@%>8#C`=C`>`:X!7D2R!,:6#`!X!(:&##I!2_^B7#@>,]P@0#$ +M*R&`SW"@```P!(`+Z00@@`\(````UW`(`````=C`>`;PAB!_#X+@`=C`>.!^ +MX'CQP.'%$@[O_PC8`-V(Z$(((``!:%#PA>`%L9F`\` +M```(`=H:A0\(W@<7A8*X%Z4#V1/P$NH3A00@@`___P``!2"`#P"`I``3I1&% +MA2`8`!&E`=D#\`+9$86#X/'`X<7>#N__`=V`X,H@0@,J],]QH```+`6!H+@%H0#8 +M5@[@"(RX#O!L<#,('P#/<*```#`'@"\(7P8O)@?X$_3&"H`,@.`!V,!X&WCZ +M#.__A2!!!FKH`=@&\$4$;_Z*((T*`-A]!`_^\<`"#`_^SW.@```$I(-%@Q4@ +M3@!H$@PW`B8/$]%TRB;.$\2C!:-89,)X`B`.`Q!TRB2.$\HD#1`BO`#8!?`` +M%@Y``>#0H_L(!(.DHVC,&F(8(D(``B(!`%!PRB&-`"6C"00/_O'`E@LO_C1H +M"'<]P@`!`20`@4`"$+P4:SW&``#";,B%`#L]V@`#LHX'@`=D`AL!Y2B$` +M((;H@.'*)4(4#_2$+P@6SW"``!@_,"!!#@`0`"!&".`>`-H(=0"&@.``V`WR +MA"\(%L]P@``@/S`@00X0$``@(@C@'@#:`!Y`%(#ES"`A@`#8`_(!V&T##_[@ +M>`#:SW&!`-`K0*$#V`.I0:E"J009@`\```!`"!F`#P```,#@?T"IX'CQP.8* +M+_X`VA3P%"*.`-]@88^@CPB[97T>9F*.EFV!O!"[A7O/=*```"AAI`'B4'K; +M"D*`&0,/_O'`X<7/=:```"@$'8`?Q0!")J8(8`\*V`0=@!_-`$(F!!V`'Q`` +MQP`$'8`?`0#&`(8(8`\*V`0=@!\#`,8`!!V`'Q``Q@`$'8`?#P#"<@0=@!\/ +M`,*=!!V`'P\`@FT$'8`?#P`"HU((8`\>V+D"#_[QP$(*#_[/=8``5!@`A:#H +M%@Z`"0/9SW"@```H(:!%@"&@)8`!VC!\0]MAH,6`8:!E@!YLP;@'K1QLP;@& +MK1ILP;@%K<&Y)*UHK4"E80(/_O'`[@D/_J'!"'*1X`!Q$,!$-`!"`)O^?U@?/_P#8`_`!V!4"+_ZA +MP/'`X<7/=8``:"$`A8?H7@_/_XH.S_\!V`"E!0(/_N!X\<"*"0_^"'4`V`"E +MSW:``&RH`(X/"%$`+@\`"8'@`=@"\@B-":W1`2_^`JY!*($"P;E!*`,#P;L= +M>L*ZSW2``(C2X+A*9.$@P@?*(*(`<'$!V,(@`0!0<1MXX2#+!\\@*P#@?O'` +M'@DO_DHD```(=AIQ2'6Z#^__*'`(=R4(D0`B#F``R7#@ID$H`2'"N4$HP"'" +MN`JNSW"``&RH*:YP\""&$0D1`L]P@`!LJ"B.:/`$A@L-`1`)CHWHZ@U@`,EP +M"(ZDI@FN"JX#V"@>`A`!W1'P,'?*)0$1#?(1#Q\0Q@U@`,EP"(X)K@D/7A`( +MC@JN`-T*((`O@`!LJ``0@"`9"%$`1@X`"1$(40#AI@38`*8!V37P`(8!IN"F +M70\>$*7M%(ZGZ"@6@!"`X,H@@0_D`,#ARB""#PH`8*[/<:```"!;@6F&"PK$ +M`#N!8GD'\%N!#B.!#_____]980\)!0!J#F``(G@(\&X-8`#)<`3P`@]@`,EP +M%(Z%Z"F."G`BJ&D`#_[@>/'`X<4(=<]R@`!LJ`&*1"@^"P`A@'^``+RG((`7 +M"5X`"H@"JCH+8`(!V$8/8`ZI<`3P+@M@`@'800`/_N'%08!FH.'"`-P@PS<* +M7@+/=(``I$B_A`BYSW2``'`)@XQD?:1\";R%>25[++H$(H(/````,&5Z(X!" +MH)ZY(Z`E\!,*'@)!*L$`P;D!X0'<"O`3"IX&/&O!N0'A`MS#NP+P`=D"O!2[ +M!".##_`#``!AN85Y97F'N00B@@__`P#<)KI%>5(AP0,BH*'`X'_!Q>!^X'CQ +MP.'%H<$(=<]P@0`X-39X`8A6:15ZSW"!`+@U06!2#F`EBW``P`"E@0?O_:'` +MX'CQP`(/S_T(=P#8SW:``%@E`*8!W0X,(`KAQ=((C_Y`)@`8L@_O_R06@1!V +M"```#NC/<8``8#<`@0'@#W@`H?X/;_Z+<`"F!/"@IJEPA.C2#T_^`*:(Z#N. +MANF+<-((K_[I<0"F`,&&Z<]QH```$*FA@^#*("$`#O*Z"8_^`(:)Z`#;2@@@ +M`B06@!!H<`+P(=A6"(_^U0;O_:'`X'CQP(#9SW"@```@(Z`BH&8(X`@9V-8* +M+_X&V`0@@$\``@``4R,!0`4A/H#V\]'`X'[QP.'%\@L@"0AU+0A1`,]P@`"( +MTJA@@.#*(.$'3`8A_L\@(0//<:H``%"!X`'8RB`N``BA>0;/_2\H`0!.(($' +MSW"!`/`KX'\GH.!X\!.B!"*^[P@("`@0\L]R@`"P"`^"3R#!!"^B(8(1"1X` +MD[B5N`^B`=A`P`#`B>C/<8``)$DF@>VYRB"B`.!_H<#@>.!_`-C/<8``)$DF +M@>:YRB"B``CT!"*^[P("`@+*(&(`$^@$(K[O"`@(",]S@`"P"`3R+X.3N2^C +MSW&``"1)0H$S@T5Y,Z/@?@0BON\("`@($_+/`P':SW&!`"PF3*'@?L]Q@``D22:![+G*(&(`X'X3Z`0BON\("`@( +MSW.``+`(!/(O@Y.Y+Z//<8``)$E"@3.#17DSH^!^X<7AQL]U@`"P")"%0!6` +M$`0D@A\````8*[I3),$01+A3($,`$FH5>#1XSW:``!#:%F;/<(``X-EH8/N\ +MS'B8%0`0!"A^#B]PPB`B!!#T`[I[8U5Z=7MZ8EEASW*``$#9*6+"N3EA-'D0 +MX2)X([C!QN!_P<7QP(X,@`L."X`+Q@Z`"-'`X'[@>/'`.@S/_<]P@``L%@.` +M#>@%V16Y"Z'PR0'@L[BUN+BX\!H8L`2ASW"!``@^RQH8L,]P@`"8P\P:&+"@ +MS44('@#/=:```"`^A<]P@``D20"``N%AN`@A```0I0'8!QT8D!#8`*6:"N`D +M2B``(*#-)+A3(`X`!""13S``````W[#P)@G`"@AQSW"``+`(J@H@"!F`&G#/ +M<(``6+@"@(P@`HV)]Y8)(`(4V`#9SW"@```0*:"@S<]UH```("L(WP-*(0`@ +M*G8J=\SP;@D@`A38`-G/<*```!`IH,]UH```(`'?OO`$V-`:&+`1A8#@BB`, +M`,H@@@\````"`*4$'9B?8````.()``;LR00@OH\```\X!?(`V078%;@KH+,# +M```0A0QPH!(!MT,(7@70R88@\8\;]`0AOH\```!0!?($V*`:'+!F",`*SW"` +M`%BX`H!]"(6/``"T`.S)#0C>`@#9!=@5N"N@`=^@$@*W10H?`64*GP%$(CZ* +M7?)L<%\('@`,<%<(7P6@S<]S@`!8ML]Q@`!8MW4(W@"`V*`:'+"AS4,(W@(; +M@0'@&Z$`WQ[PHSW6@```@0/`3@0'@$Z%Q$P(&SW"``-BW57A:@`'B6J`-"1`@&H$! +MX!JA@-H7\(HB!``2@:`:G+`!X!*A<1,#!L]P@`#8MW5X>H`!XWJ@"PD0(!F! +M`>`9H7<*WP'HNG[TZ;J8]`0BOH\```!0"/)L<`T('@`$V-`:&+"AS>^XSW6@ +M```@CO30R00@OH\#@.A37?4,`-`:F+\`"`@`R/$$V-`:&+`PR`+:`""!#X`` +M%*=`J`1")`=D6":`)`-H6 +M#8`%R\D`V:`0``#PN"AP!O*B#@`&`-B6N,(-P`X$V-`:&+!5\?(-(`F*(`0` +MY@R@!0#=R\F@$```\+BI<`7R=@X`!@#8E;B6#<`.!-C0&ABP"=C/=:```"`1 +MI7SQ5@X@!@'8`-B0N-KQR!4"$,]Q@``P"3^1,'*S]Z^XH1H!<]P +M@0`(.P@0!0`#\$HE0`#J#.`#B7`PR,]RH```+0*X`""!#Z```"UX@=82#+8L +MO,2\08(="P$#,""`#Z``9"X0(@(#2W@#\@/8&*$8@8HA""`1\"\J00!.(H`' +M$"$!`""CSW&``*A`A"@(!H(+X`,R(4$.SW.``.BC((/MZ=X+@`;ZI0`=0!01 +MA83HBB`$``"E!!V8GR``/P`''9B?`0#`_)X(0`[/<8``G#P`@0+HX*')<%H. +MX`<*<>S)!""^CP``#S@%\@78%;CKH,X/``S*"V`&`=C_V<]P@`#0PB"@T0>/ +M_>!X\<`!V,X-(`D`V=8.``G1P.!^X'C/<8``S*D`J<]R@`"P""^"$-N:N2^B +M"-G%&D(`QAI"`,]QH`"`''NA1"@^#<]Q@`#4J2"!)W$$@<]SH```&`*C`X$" +MHP*!`J,!@0*C`-@&H[H2``$@DFBXNAH$`"APAB#]#(P@`H(!V,!X#[B&(?^, +MEB"<`Q*C!/0!V!FCX'[@>/'`X@ZO_1#:"'8!B$0H/@W/<(``U*F@@`&6)W4` +MM306@!`"K0&.`ZU`)@`9,@Y@#$`E`1E`)H`=0"4!%2(.8`P*V@1N)&T:#F`, +M$-H!!X_]\<#/<(``")HF#^`"`(@*Z&(-H`4,V&X+8"4,V`'8!?#:#8`%`-C1 +MP.!^X'CQP&(.C_W/<(``^%2D$`X``_`0)DX3(NXO*($#3B"-!W8.X`&I<)H, +MP`%UZ"\I`0!.(8,'A"L(!L]Q@`"L/C`A3`XS;35Y`"."#X``&%4Z8H"J$"#` +M`.OQ<0:/_?'`X<4`W1_PA"T!$\]P@`#<53(@0`X5Z,]Q@`#X5*01```/($`# +MI!D``$X+X`BI<#-M-7D`(8(/@``<50"J`>6O?%4)@%,@`0!$ +M(((`)7I$(`$!AB#_#45Y!2!^@`'8%0:O_<(@`0#QP)(-C_T*)0"0*'=(=AIS +M#_(E%8`0)P\B$/_9)A6`$!L.`A`P=O[!X\<#AQ<]U@`#\J1H)(``=A0'8C06O_12ESW"@```,#8!"(``(X']( +M(```X'C/<(``L`C"$(``@.#@?\H@8@#@>/'`SW```&P/'`SW"``/RI5B"!`Q2`@>#,("*`%?1Z""`` +M\"$``"X((`"*(/\/1@@@`(H@_P_/<```6!S/<=V!W0%F#T`&T<#@?N!XD0?/ +M_PAQSW```&0<30=@!B6YX'@(<<]P``!L'#T'8`8EN>!X02A!`>/8!;B=N9ZY +M*0=@!I^YX'@(<<]P``!H'!D'8`8EN>!XSW&``.Q4(($B@0)YSW```%`<`0=@ +M!C!Y\<#/<```7!SR#F`&@-G/<($`Q"L"@(#@SW```%@<#/+/<1&`$0#6#D`& +MSW```%`/'`L@N/_0AUP@[O_RAVA>X#Z`T-!1!B +M#^__J7`!!(_]\<"2"X_]"'6V#N__*':%[@/H#0T%$&8/[_^I<.$#C_WQP,]Q +M@`#\J52!`-A6H8'B%*$0""(`RB!B`-'`X'[@>/'`!NBZ#L__T<#@?H8.S_\1 +M"%]$`]G/<*``@!TFH/;Q]/'@>/'`SW&@```@0!F`#P``$"1,]P```('/H-0`8-"-X';'#I"!Z`4B,`0,"XT<#@?N!X$/`O +M*T$`3B."!Q`A@0`TJ`/<,FHU>0`A@P^``&RG@*,TB/'ISW"``)C.(0/`#>!X +M\<"R"H_]"'4*((`O@`!LJ``0@"`C"%$`7@C`"!L(40#/<*```"`;@`FESW`* +M`&"NQ@@``$SPM@K@`1"-U@C@`0#>I+@*)(`/@`!LIQ2M#_"$+`@6SW*``*P^ +M,")"#F"AA>(!VL!Z`>)$J1KH+RD!`$XAC`?O?_GQSW*``)C.!H(#@""`QW$&`(`:V@K@#4AP +MSW"@```@&X`HC0FE`AA"(`08@"/&I<>E20*/_?'`SW"``&RH`8A$*#X+`"&` +M?X``O*<>#\__.@D@#@'8T<#@?L]R@`!\SB:"(X$@@1EAA0+@#4AP\<"R"8_] +MSW6``&RH(84+"5$`R(@0\$:`)X"`XLPA(8`&]"B(R8@1"8$#!?`)":0``MX! +MWDF(0"`!"`\.@!`#VDBIR:@)\$B)"PI2`&&Z3WH"\`#:2*F`XLHA@0_D`,#A +MRB&"#PH`8*[/6'/@*^U7X` +M)HP?@`!LIZ"D\>I(B,]P@`!LJ$*HSW*``)C.!H(B>P.`((!Y87()X`U(<`4! +MC_W@>!2($?`O*@$`3B*!!Q`@0``/>`3;`KDU>0`A@@^``&RG8*+RZ,]P@`"8 +MSM$`P`W@>/'`SW"``&RH`8A$*#X+`"&`?X``O*=N#<__0@Z@`1'8T<#@?@AQ +MSW"!`%`T-08@!@#:X'B$Z0#8`*(/\(PA!(`%]`'8`*("V`?PC"$"@`;T`M@` +MH@'8`*/@?N!X\<#//'` +MB@]O_0#9JL'/=X``?+I`)P(4!X](P8#@!=C`*"$#P'C/(&(#HH*,)1"02/>* +M)1`0HJ(,&H`/````)!UE`8)'P0`@4`/'=0$````$V$#`8<#/<*```"`;@"J] +M0\!&Q0'>1<9"Q@XE@!\````"1,"+<(G!"@[@#(C"",`-Z`G`"KU)'Q@0#"!` +MH\HE!11*'U@3R7`"\`#850=O_:K`X'CQP,]Q@`!\NPN!I+@+H1$(7P#/<`$` +M).-B"0``T<#@?O'`Q@Y/_0AVSW6``*R[`(4*(8`O@`!\NAIQ!^@`WTX(8![I +M<>"ESW"``%RZ<@^@#0IQSW>@```@&X<3"(4#.X<")D`002B0`@/P2B``(!\( +M$"``$0`@'MF>"B`?`=H@@"BE.X<8&``$(J!)$0`F`B8!$$H1`"83"&0``B!/ +M``\/A1\!`````-^0OPG8U@D@`2W9((#OI2REPJ`JO^:@SW$!`!#DSW(!`(CA +MSW,!`)C@>@X@`0G8G@P@'@'8:09/_?'`"@YO_0AQSW6``'RZ"!40$,]S@`!8 +MLT`HPB!5>D)C`(51(D""`=K`>H#AS"(B@"'R'=D""B`?`=H@@,]V@`"LNR2F +MSW&@```@.X$`WR*@"-DFH#X,(![I<'H+H`$+V$L5`!:@N$L=&!#F#>__[*8# +M\"(-0`S/!X\#4_] +MNG#/=8``?+HBA<]R@`!8LQ-I%7@`8@`5DA!1($""0"40&$`E#A2-]"]Y!@O@ +M!TIPC"##CSIP"O1`*@$D0H7/<```931J#:_]17G/=X``>#L`AQS9(*!`(``A +M`:=`(``D9@T@!BB-(8=`(!,H`8&+N(RX`:$\$(`@AB#\`T`@%"]-"-X!A"H( +M)@`A@'^```1`%B!`!#6(&M@"IP`A@G^``.0_%B)"!!N2#!\`%02X%AP$(!N2 +MP[D!X!NR0X<,DB5X#+(!AS,80@`&\`P?`!48V`*G0H8CAH#BS"$B@`GT$+K/ +M<```9C3&#*_]17D`$``@0H9B<%RH(H;_V@BZ1'DHN3VH(X8`VSZH(X9$>2BY +M/Z@BAP':`"$`!0:G`8<`D")X!:?I<*IQ3@]@!DHD@`'/<8``W"T`H4L5`!:" +MN$L=&!!I!$_]X'CQP"H,;_T`V,]V@`!\NN*&I@T@"P\@P`/"#@`+"'5+%@`6 +MX+C`>,\@P@,,"B(.RB'B!RCMSW"@```@FX#/=8``E#L`)(4?````?0#8$-D! +MV@ASF'<*)H`/````&.(/8`;X=<]Q`0#\XZEP`=H`V\(.8`9*)(`!SW&``!!1 +M`*$'\$L6`!;@N"@+00P)!$_]X'CQP,]P@`!\N@*``=P`+``0]@D@#A_9SW`! +M`"3C"@[/_]'`X'[QP,]P@`#@J=(+@`W/<(``K+LL@`?I/@L@`0G83@WO_P'8 +MT<#@?N!X00&@`1+8X'C/@@A@D*$2`H=0CP?@V@!JEP!.@@AOKQ0")2(.;QANVN"J`- +M"G`,\!@0`"`#@""``B%!!+EA!@N@#0IP?0)/_80H"`;/&6BQW"``!B^0H!`@D"A`X``@.!_`:'AQ0#;"?#P(,T` +M@((!XZ5\!!H0`V][\PM$@.!_P<7@>/'`U@E/_0#=BB3_'X"B@*,"\`'E%"%/ +M`\"/C";#GPSR@8_S"`6#""8.$,"B`8\`HP'8`_``V`D"3_W@>/'`((!&@(#A +MRB""#P``-A&\`8+]@((#\("$$0R`$&*`(H1B>?4)4H`AA`&D@*`AH`"A9(`F +M@!CA%0M>`&"!!^N"@&*#@GL)"U(``*$D@&:`'.,7"=X`((,&Z8*`(H&">0<) +M4@``HR&`"PI!`'X.8`P&@-'`X'[@>/'`'@E/_4H((`((=PH@@"^@``!(`_`V +M#<`&SW6@``!%'H4$(+Z/<````/?UBB#_#QRE&*7/=J```"`%'IB?`0``@`*' +MSW&``#S%"*4$AVP1@@`%I0.'1"H^!Q#A!""`#P`"``#B#J`!,R%!#@.'SW&` +M`(`)!*7(%@`0"8=%@0>E!X>!X@:E`-C*(.$`!/*"XLH@(0$0N`4@@`\```8. +M`Z'/<(``'#;P((``!*%Q$`"FT0!O_0:AX'CQP&((3_T(=CIQ&G)H=Q(,X`B( +M=1X*X`#)<,EP*G$*"B`(#R=/$P#=!?#V"N`-`=@! +MY1D-!10+(,##!?1L#4`("'&R"^`"J7`*)0"0"/*:#B`%"-@"#>`D"-@A`&_]J7#@ +M>.!^X'CQP)8/#_T:<,W)`-T%(``$S1H8L%X+(`L*<#IP"'+/=*```"ZI<1_P +M+RB!`$X@@P=O>_6$TFLOR#`FCA^@`&0NQ'@$?\W)`-X$)P00#R;.$!$/`!$& +M?P4ES9,$\L5Y+WG&>N3J582`X:9Z!2(`!!6DX`KB#AWJ+RB! +M`$X@@P=O>_6$TFLOR#`FCA^@`&0NQ'C-$@ZV!'_+?P#8#R#``.CSQG\%)2]YXO$5A(#AIG@5I`P*X@W*($(`:@W@#2\@1P3Z"N`("G"9!@_]X<4' +M\`9]H*00(<$`+WD/Z2\L01!.)(,7;WO/=(``\!UU?*"$<.H%?>_QX'_!Q>!X +M\<`2#@_]"';/<(``")H:#F`(`(@`W0[H0@X@#LEP"B4`D`CRS@P@!038V@K@ +M)`38308O_:EPX'CQP,8-#_VAP0AU*'9(=QIS"B$`(0HB0"%2">_^&-F.YA0! +M*0!*(P`@!@M@#LEP.G#^"F`.Z7"Q"%$@\78!V<(A20`8($``$'K/$D@``82K1.M,R"!$"BM +M`!?`$":M.&`)K0>MUO``(8`O@`!@;0P0P@``(8$O@`#@;D"M&A#````ACR^` +M`"!N#*TV$<.`>F)!K007PA!88`VM$A?`$!*M$A?`$!.MUA'`@`:M!!?!$#A@ +M!ZVN\,]P@`"0TDP@@*#*8.A@K_0")L`3!N`I"%4#,R8`<(``Q,]`)X%R%'D` +M>4HC0"`1\$HC@"`-\$HCP"`+\,]P```,*\EQH@QO_>ER2B,`(/%V2B!`(,(@ +M"23JYA7R!_8C#I`:NN9[]`':$O#ZY@WRC":"D@WRC";"EG'T!=H(\`#:!O`" +MV@3P`]H"\`3:SW.``.!M66,,$<``%"",(!"M#!'!```DD!^```!N"A#,(!4C +MDR``)$00#AT"$5QC#!3,$``CP002$<\`8G/\9(RM`"*/#X``H&X*%\$0&6$Q +MK0H7Q1``)0$!+ZT*%\$0/&2-K1`7P1`VK1`7P1`WK0H0P2`0%\P0F6$O>4DA +M`08TK36M$!?!$!(3PP!Y82]Y22$!!C*M,ZW'-(G@#&0(@>_#/<```#2O)<88+ +M;_WI$D@``8]\&ZZ4'K/<(``KFTS(($`SW2``.!N+W@L +MK5MD?A/!@)IB&6$MK9@3PX`O?W*MF!+"@%.MSW*``*!Q6I)O>1_JC"8"E!WV +M-PX2'<]R@```;QH2PP![>PDC```,K1H2P``>$L(`6&`;>`D@P`,-K4(4P!`; +M>`D@0``2K1.MBW'J""`.R7!*)0``!/!`)44`$O>=3A2_84($P`08SU#8&00(SM#X&0`O!H<<]P_W___R$)``!`*8`@ +MA"X+$A0@``3'<(``(&$PX#4@0`XB>+T!#_VAP?'`-@D/_:C!"'=:P`A@'^``.!?Z;K`("(,P"`A")IP`^L+"=X``-T"\`'=2B8`(#?P:PN. +M)4`N@2`U>0`B0"!`@$)Q`8`%N@4@D0!`+H`@`"05,`@1$``O(4<$+R('!.EP +MJ7/^#N__"B2`!0AV"!T`(",(@0__?___NWP%)(P5B&*`8L(N25X`!@$,`"*((L(N"5X`!D$,`C<:P`O_:C`\`78)(`X`W1H.``B&"2`(BW'/=X``T,O>#^`- +MZ7`#\`'EL'UA#9,02B``(`;P0"!`("\@""#K").@2B$`(/$)$:#)`8(X`@!V10ACR,`MP(E@!0/>/(/H`@!V0&W`N;; +M#@24@0?/_.!X\<`F#^_\'-D:<`#=SW:``,2IH*;/=X$`N#.F"J_^Z7`1\`#8 +M#R!``P#9!"``!`4@?H`(\@"&%2<,$`'@H*0`I@'EXPW4D44'S_S@>.'%!?`@ +MHQ`@0`,.Z"\K`0!.(XT'SW.``(B\M7MTZO_<@*/S\>!_P<7QP+H.S_P(=BAU +M"FD"#"`.#WA!*$$!\"9!$,2X$2$`@,H@@0\``/T4R`XA_.!^X'C/<:```"!;@9VX +MGK@_&1B`X'C@>.!XX'C@>.!XX'C@>.!XX'@;@>!^\<#2#<_\H(`:<`2%H<$/ +M"+0`0"41%105$1``'(`_80``\(MPQ@R@"P39`(6^#*`+!-D!A;8,H`LXV2*% +M`85`D`/I$0I%`,]P```#0M(-#_T#A9H,H`LBA100@2`-"5(`B@R@"T`@`"$$ +MA2OH`-[)<@3P`(`!XAYF!(4C"@4`%B&`((&`(("98>L,19`!%(\4SW.@`$`$ +MX*OX\140@2`="5(`2@R@"T`@`",(\`#9SW"@`$`$(*@!YE,F?I#X]74%[_RA +MP/'`9@S@`N'%"B4`D`?R[@O@!`#8]@F@)`#8=07O_*EP:B!``9BXX']K($`! +M\<#J#._\F'.*)H00%'@(`-WEOM$F +M8I+*)6(0&NV`X\HD81`%N``@@P^``&CS0",-`I#J`-@*\$:#`>`5)8X0(*8! +MXL&Z1J-))`(1[0B$@,'&X'_!Q>!X@0%/_?'`2@S/_`#>R7<)\`"%#0A1`&X) +M;_WI<`'G2P\5$80O!1K/<8``5)L5;P`@C0^``&CS-"%!#@#8Y;G1(6*"RB!B +M`&;HZ7!F"&_]J7$@A83I"0@5`6+I7^B&"&_]Z7`(=MSQ403O_,EP\<#B"\_\ +M"'<."&`&*'8(=9#@RB"&#P``=`#/(&8#RB'&`P0,)OW*(H8#(03O_*EP\<"B +M"\_\&G#@B,(+(`CI<(0O`1,?`X$P,@<'+,(&&`RB""#P``!PE0"P+]>@@@".EP&G`=C4X@00`^ +MK3Z-!"F^!``A3G3)<,H*H`T46Y +MSW6``$@[-7TBA<2X2B$`(`\A$2`+(4"@"/*B"^`A"G`"A08@0`0"I4H-H`CI +M<`'8-_`X$PP@SW.```B:8(N1K1RM0B%!("]X1;C/=8``2#L5?0*%Q+E*(``@#R!0 +M(`L@`*`(\BX+X"$J<`*%!B``!`*E`MC6#F`'Z7%Q`N_\R7#@>(0H"`8`(8)_ +M@``D/WB*ENLA"5$`-8H"N`'A-:HTBD-P`>$TJB,0`08!X>!_(QA8`!:*`>#@ +M?Q:JX'[@>/'`Y@G/_`AWR\F@D`&`0.7TN,`EHA`#Y<]RH```!"2"!"6-'P`` +M_/\3">4#_64PR!MX0W!B$``'&6$.@@(E3A!9"(4#`]BN"Z`'"K@%V16Y"X'1 +M&ABP`-@+H<]PH```!`Z`#0B%`VQP\P@>@-')!=D5N0NA;'`E"!X`,,@;>$-P +M8A`!!P78%;@DH,2@0]B,N.EQF@DO_:ERSW"@```$I*"M`<_\$P@>`,]Q@`#8 +MMP*!`>#@?P*A%0A>`,]Q@`#8MP.!`>#@?P.A(0C>`&QPSW&``-BX#0@>`!6! +M`>#@?Q6A&X$!X.!_&Z$3"-X!SW&``-BW`($!X.!_`*'@?O'`P@C/_*W!"B.` +M+X$`"#L`$P`@2B``($'`ULG+$@&V!""`#_$``/!"P,01``"*(0@V!"A^!L]R +M@`"L/C`B0@XPB87BS"+B@1OTSW*``.R?=FEB8H#BP'C/("(#$O2$*`4*SW*` +M`!2;,B)"#A,*D0"R#0`@@.#*(&(`#+@"\`#80\#+R1H(H`@0B!MPSW"``(#F +M`H"A$@&W"P@>`40A``0$\$0A@``#N$3`SW6@```@6H4$PP03`"`.Z\`5`1#+ +M$@.V(G@"(@$`+R)(('83``%88!7PRQ(#MH03$@%"0!1*)<`@"!Y`%086%I96)@`B!!X8D,O),8A3(90`I!`!``0AOH\```!! +M!O)."N`*`-\,\.JYRB""#P``'27$!\+\`-\Y'=B3`!8`0$`J`200>`5Y`\#/ +M@7!*6-9 +M822F`BZJ`*)`$0`!,!(.-@*R<(E@$0$!%&O#N25X!K($ +M$P`@;ZH0>\]Q@`"TIA4A@@/>@E8AS`/;8WZB6X588,`5`A!">$C`"!,`(,]R +MH`"`#`*X+^`$(``%$*+J$@*V`!^`0`@3`B``'X)`,,@4(0(`4(H`'X)``!_$ +M0\O)E!`"```?@$`PR/`D`A``'X1``!_$0P`?P$,`'\!#`!_$0\O)4(C/<(`` +MC,1*8``?@D``'\)#UA("M@`?@$#+R4"05!```1"Z17@`'P!`RQ(#M@&#'P@> +M`5*+SW"!`#@U<(MV>`"(AB!_#!QX!+A%>`+P@-@`'P)`R\E0B#,0@``$ND5X +M`!\"0,O)7)``'X1`RQ(#MIP3``'FN`#8SR`B`\H@P0-/@\]V@`#(Q,"Z#;I% +M>-@:&+`PR!1Y`""-#X``U*8;>N"QX*T/?;9^H):8&<0#%7S/<``H"`!`P,03 +M``"H&<0#!"A^!L]P@`"D0#0@0`[@I$G``8-0&40#]+C*)Z(0`)-6)@XB^&`# +MX`0@``4>9@/P`GX`(H`P8A``!_D.!9#/<:```$4<@3B!`-T1"5\%!""^CP`& +M```.\OJX`=W")4$3^;C*):(0];G*)2(23@O`#8_M;'#@N,HE(1`+\@'9SW"` +M`.C"(*!J#"`-*'`(W<]QH```"`2!_[C,)2&0T?,%[2@<`#0R\`#8"1D8@-;) +MSW*@`(`L#Z++$@*VS!(#MAJ22B5`(!JSQ!(``,0;``"D$@``I!L``!"*$*LH +M'``T$/``V`D9&(#6R<]RH`"`+`^B`=A`)54@VG9*P.EVSW"!``@[`H!I#00@ +MP0(```QP.0@?`\]QH```11R!.($`W1$)7P4$(+Z/``8```[R^K@!W<(E01/Y +MN,HEHA#UN@```(%H`/!!2!3`,P2`;8$(X`@.!G`!``1%P%0<]QH```11R!.($`W0\)7P4$(+Z/``8```WR^K@!W<(E01/Y +MN,HEHA#UN``?`$`,P$`@4"#J&ABPS!(!MLO) +M`=K,&ABP`8'+&EBP]+C"(H$``)%6)@\25'@#X`0@@`\``/S_'V<#\`)_,,@; +M>$-P8A``!_4/!9#/<:```$4<@3B!`-T/"5\%!""^CP`&```-\OJX`=W")4$3 +M^;C*):(0];G*)2(2,@C`#9#M;'#@N,HE(1`*\@'9SW"``.C"(*!*"2`-*'`( +MW<]QH```"`2!_[C,)2&0TO.`Y20%P?\H=]IV`_`H=ZH(0"-3)7Z0PB*")#[T +M#'#MN,H@@@\``$$`B`^B#$0E?!00@OH\`!@``#O+Z +MN`'>PB:!$_FXRB:B$/6YRB8B$J(/@`V/[FQPX+C*)B$0"_(!V<]P@`#HPB"@ +MO@@@#2AP"-Y*(@`@`]G/=Z````@*'UB0@.;*)8(33"#`LP_:RB(%!@RZ4R4! +M$M7-)7H0N$5X`!\`0*ETAB3]GD`@3B`4\E0?0!35S1"X)7@`'P!`!!^`%,X* +MH"(!YL]QH/YH"`78%;@DH,<-$!#/<*#^G`@*((`OH````!`8`""2#Z__J7`% +M\`C9`!]`0`'FSW"!``@[`H#S#@20SW"!`(`K!)`#W@*X,""!#Z``M"[8R25X +MSW&@```,`J''H<>GB@U`"L]QH```!`F!!NC(H209@`0%\)8.K__*<`K`&N@L +M$``@T1H8L"P8@"3/<*```"`[@`C`,'!O(0L`#'"`X=$@887U\]')!=D5N0NA +M2B(`(`#`T!H8L`G`5@I@!P#9XPU>$,]PH```(&@8@`1I\!<)$"!4'T`4SW&` +M`-BW`($!X`"ASW"!`(`K!)`#W0*X,""!#Z``M"[8R25XSW&@```,`J&GH00? +M@!1*"&`C"<"AS1$(7@#/=J````0.AL#@!/<`Q3WPM:8!V`FF]@F@(LS))(;, +MR;081`"HIC"(4R'"`$2YPKG`&$(`4*A(<(H(8`4`V@#$AP\<`. +M#T_\"';/<8``)`P`@:+H`=VZ"*`%H*'/<8`````$H<]PH```,`6`4B```,"Q +M"P@>``&1@+@!L<]P@`!@.:"@*'!$V?()X`H!V@C8R@E@!0'96@\`!0WHSW$` +M`!`GE@R@#0#82@\`!0AQV@ZO_#[8"0=/_.!XX<7AQBO:$KH&Z8#@"=C*(*($ +M!O"`X`K8RB!B!`*B$-G/<*P`@``MH!+;;J`7WL^@,*"!W;.@(MR6H#>@>*#9 +MH#J@O:!`&A@#`=@&H@#8!J+!QN!_P<7@>(#@`=K`>@6Z$N+/<:P`@`!.H5BA +M@.`EVLHB(0P$\H3@RB+F!4^A6:'RVH#@RB*!#P``\P`&\H3@RB*&#P``\0!3 +MH5VAX'[@>.'%SW2``"`>`-D+\!0D0!!@B"O:$KH!B'5Z`*(!X?$)E(O@?\'% +MX'CQP`#9LNC/\"!" +M`"O8$KCP(((`SW"``.CS-7A`H`'A,'GC"=*`&?#/<(``$![P($,`*]H2NL]P +M@`#H\_`@0`!U>@"B`>$P>>$)TH``V<]P@``<'B"@T<#@?N!X\`:A],D2>@.A1Z'U$@*V7Z%2>E:A +MSW*``.RJ(((!X2"BP[EW"5$#*KA3(($!4R"`000@0(`S\B\H`0!.((T'0"6` +M$@#9#R$!``LC0,`G]#)M,"&0#Z``B"#/<*```"#1@,]W@``$I""'"B*`+X`` +M#*0*(8`O@``(I!D-01``$@`@$0@!!``1`"`0=E@(P2.@IP`:`"0`&8`CY01/ +M_.!XJB"!#`GHJR;!<@```0"J(`$"_P@?@N!^X'[@>.!^X'CQP&X,3_P(=BAW +MLN'*((8/```S,\HAA@.8#*;\RB+&`P38Z7%R""`>R7((=0^0[KC*(($/```T +M,\HA@0-T#*'\RB+!`P.^%2:`$P`@C@^``'@?#(8!X`RF?01O_*EPX'CQP.'% +M*'6."B`=`-B!Y<0)H0#*(.$"<01/_.!X\<#AQ<]Q@`!X'PJ!SW6``/@>`>`* +MH0'8>@Z@!0FA((6,(<./RB""#P``(3,`#(+\.01/_/'`X<7/=8``>!\+A<]Q +M@`#X'@'@"Z4!@8P@_X_H",+\;@Z`!0#8$01O_`FE\<"."T_\"'7/<*```"#; +M@$`E#Q@`CZG!&G$3"%``S=@@A0:XL@NO_$2/`84BA4#``8]#P6'`!H5&P`6% +M1\`/'`W@I/_`AVFG$:,]U@`#X'D`E$1E6)8$5.&`-#]X0(H`!X2*@"P_>$22``>$DH&T( +M42!%A8#BRB""#P``*#/8"J+\RB&"!$&%4';*(((/```I,\0*HOS*(8(#0"J` +M(!1X,"$,(`KL$M@%IE)/`G@`'A)Z`!A1T.`1``A0.X%7@`(($/@`!X'Q2!`>!F +M#Z_\%*%`*H`@%'@P(0P@"^PBV`6ER7"*<0IRZ7-@?`HDP`0`WC4";_S%I>!X +M\<#AQ0AR*'7/<```/3-(<=H/K_RI@Q@!P+8`=K/<8``^!Y&H='`X'[@>,]P@`#X'N!_`(C@>(P@PX_Q +MP`AQ#/)#"94",R9*<(``=,]`)P!S%""``@!X_]C1P.!^`-C]\0'8^_$#V/GQ +M!-CW\078]?$&V//Q!]CQ\0C8[_$)V.WQS=@"":_\!KCH\<]S@`#X'D"#`-D- +M"($`C"##CP3TX'\H<".#`H,*N3A@SW&@```@.X$B>(#@X2#+!\H@:P#@?N!X +M\<#/<0``&'K/<@``/';:"B`=!-BF"@```-G/<(``!$DCH"2@T<#@?O'`"''/ +MB!-CJ"2`=`-KV#6`` +M"]C1P.!^\<#AQ0AR*'7/<```/#-(<1(.K_RI/'`W@\O_`AR +M*';/<```.3.&#:_\2'$R"Z`&!-@(=<1XQ@W@#!#9;@N`(R$`;_P$)8`3X'CQ +MP*(/#_P:<"AU2'=H=L]P``!(,TX-K_P*<8#ES"8BD,H@@0\``#$SRB$!!+P/ +M8?S*(D$#0"B!(#1Y`"&`#X``&!^@H.&@P0#P_\"';/<```.#,* +M#:_\R7'/=8``^!Y&A8#BRB"!#P``,C-X#V'\RB&!`VH)@`<'A8'@B`_!'0#8 +M!J6-!R_\!Z7QP/X.#_PZ<%IQ&G)Z<]8+X!P*)0`A"';/<```1C.V#*_\R7$3 +M;A5XSW>``/@>5B>-%1UE"PN>(`&%`>`!I0T+GB$#A0'@`Z5%AX#BRB""#P`` +M(S,$#V+\RB&"`Q)N%'@`)Q00(!0`((#@RB"!#P``)C/@#F'\RB&!`PL(4"!C +M"YXA`8>,(/^/#?(`AP.X%7@`(($/@`!X'Q2!`>#""Z_\%*'`I\]PH```(!N` +M!!]`%`*G!@O@'"IP!H`0'X`4`Z<`W::GIZ<1V`6G(!0,("IP2G$*`&I2'8!:<@%`P@*G`*/'` +MX<4(%H,X`P0V6$&#_S@ +M>/'`X<7N">__"'6J#B`@J7!)!@_\\<#.#0_\!-[/=X``I#X`)X`?``!H",]Q +M@`"D1MBA`=T^""``N:$`)X$?``"8",EP^@K@!ZERR@T@(,EPZ@T@(,EP]04/ +M_.!X\<#AQ<8)[_\(=5X.(""I<.T%#_SQP.'%"'4"">_]7-D!V`"E`-@!I4`E +M`1S/<(``F-/6#.`*+-K%!0_\\,=P@`!8LR"`$PE? +M`@B`#PT!$,]X/@I@!/_9`>;A#A24`-G/<(``B#2!!2_\(K#@>.'%8(%@@P#< +M,.L$\&)X`>3]"P2`(8&@@1:\%.JZ9%,B3`61<,(B#@#+]\=R0`````0B@@_` +M_P``FV,">WIB%?`")0(34R),!1QDD7/`(@8`2_<"(H(/0`````0B@@_`_P`` +M8GR:8D"AX'_!Q?'`F@P/_`AVSW6@```@.X7/=X``L`@>ATH@`"`">1V'(GA! +M*(("SW&!`&PF$.!`L1!X%@_@!@IQ3@R@"0IPSW*``.`B!H(#@""`@"$0`"(- +M8`Q(<,]PH```$"08``2!AYP7`!!2)`P0P!>!$`HD``1`EW27\@S@'5,D!1"Z +M"X`&&@P```#:SW&``.BC`($/(H(#2W@(\D9X`*')<)8/(`+`%X$0.1T8E##8 +M/!T8D$0N/A<`(8!_@`!4(D4$+_P`&``$X'CQP.'%"'7/<(``L`@`D(8@_`", +M(`*`"]IM](0M`1P`(8%_@`#\(@"!AN@!@8X+(`(E@03H`=I?\*EP$@U@!@#9 +M$7B,(`."RB*M`@[WSW&!`"PF$8F'Z!")A>B:"*`?J7`#Z`/:1_`$(K[O!`0$ +M!,HBH0!!\O(/0`>`X,HB80$[\H0M!1K/<(``%)LR($`.@N#*(B(!+_2&(#W` +M"O3/<8``<`FI<,H/8!\@B03H!MHC\#X)0`<*#,`'@.#*(N(!&_2$+0@6`"&` +M?X``.#\!B(#@RB)I`@_V1"T^%P`A@7^``%0B`X'6"B`"(H&`X`#:RB(B`D0M +M/A<`(H`/@`!4(B=P,(B`X@'A,*@!V$D#+_S`>$0H/@<`V0`A@'^``%0B(*#@ +M?R&@SW*``"PE*H(9Z80H"`;/<8``&#\P(4$.28)CN2QZ0"F!/'`1@H/_`AWA"@!#``ACG^``/PB +M):86AB]UF@X@!QFF!*8(A@>F]@@@`.EP`-C'=8``'",&K0>M=0(O_`BMX'CQ +MP`(*#_P(=L]P@`"P",$0@`#/<8``6`F$+@$ +M'V>B?_>D);\`(8T/@``$N>"MSW6``-BX-7TFA?:D`>$FI32.>6$4X2=Q`*D4 +MC@'@%*X4CL2X%*XVA(PA!("(]\]P```P$7X);_Q7A)D!#_R$*`$,SW.``%BX +M`"&`?X``_"(F$($`,J,E$($`SW*``)BX,Z,V@#"J((`QJCB`,JI&@"6`"PF% +M`")Z5:,'\`XB@`______.&`5H^!^`-D!VQ/PA"@!#,]T@`!0(R]R3&1B?,2\ +MQW2``!PC%.1*9%!QRB&%``'CWPM4@3D#``'@>/'`L@@O_`AQSW"!`$PF&H@` +MW0KHSW&``)#2"6&,(<./$_(7\,]V@`!X.0.&$0A>`IX-(`<`CHGH`([N\0?I +M&@@``-#@@_>I<`/P>@X`!]$`+_P/>,]P@``LJ0:`!""`#P```.#_V0\(7@// +M<8``4`DHB1L(G@//@@\*10#/<8``4`DIB1L(W@//<(``V+8?@`\( +M10#/<(``4`DJB.!_*'#@>/'`]@_/^PH@@"^``'`)`!"`(`HB@"^``+`(C"`" +M@`#=U/+.".`$J7'/=X$`+"8Z%Y$0"'8-"1`@X@T`!S)PM_0\$@`@#0C>`D`2 +M@"`)")`"`-D#\`'9BB`(!@Q^.G``(8!_@`"00""@4@^@'``'@Y(X\=S@`!8LP"#ZKK/(*(& +MT""A!M`@X08`HZFY(Z=7"1X"(8?/=8``6+-$(0.#`!"`(!'R,V@U>7`A0@.$ +MX\\B8030(F($A@C@"4"A`!"`(`#9`O`!V0.X%7@=90"%@.'0("('T"!B!\\@ +M80<`I0.'J+@#IS8.H`3)<'(*(`+)<,]Q@`#HHP"!A"X!'`\@@`,`H<]P@`!< +M(S`@00[&"B`&R7`$+GX4,"-`+C$($`'/<8``V+80@0'@$*$0\(0N"!;/<(`` +MK#XP($`.$0@0`<]Q@`#8M@^!`>`/H84&S_O/,]R@`!8)322$"$!`.!_-++QP!H.S_L(=2D)'@#/=H``A"4P%H`0'0T`$.>X +MD`H!`&X,C_SB#:_\,!Y"$P_8`*95!L_[H<'AQ>'&SW.``(0EH8,$)8X0`-P] +M#IX6,!..`#$)@0,#W@N^!"*!`RNYI'XKOAT.1!!0(D$$LKD$)8(?`0``P).Z +M)7J)<0?P`]D%\`+9`_`!V35[.H,!X3JC0*#!QL'%X'^AP/'`@@WO^XH@#PJ" +M#Z`&`-T*\/()+_P&V,]PI@``P`N`1""-`(3M;'#K"!Z`SW:``(0E*X8([8H- +MK_P`V.8+K_P#A@7P>@VO_`S8=@J/_*$%S_O@>/'`X<7/<8$`N#4&N.X*K_P` +M80HE`)`%]&(,C_P(=8GMSW"``(0ER@NO_`2`"'6%[6(-C_P(=93MSW*``,2^ +M!H(#@""`QW$``*AAL@T@#$AP`-G/<(``A"4GH`7P+@JO_*EPSW&``(0E,1&` +M``'@Q;@Q&0(`+07O^Z"AX'C/.!^X'CQP(H,[_L3V0AV`-WAQ<]P@`!P"4"(SW>``(0E,!>`$`L*`0#R +M"H_\@^@H=7/P_PX4E(MP$@DO_`/9`,%")L40*Z%";)$+*G1_2/ +M"=X#BP@!`X,)WP)_")40>PI1`'<.U0`#AP0@@`\````8*[AG",$!"7!(<>AR +MR'.."*_\"B1``K!PS"6.CP``_`=```T`SW>F``#`U*>GIR\@``)/(`$`0"]` +M`B5X0"[!`@5Y0"F`$R5X"*<)AZ&X@+@)IS(*C_R""*_\J'#'IPOP`,$&V`3P +M!=@"\`38O@NO_!/=N@B/_*EPV0/O^Z'`X'CQP.'%SW6``*0E,(T9"$$`SW"` +M`,2^N@L`#.H)C_P0C8>X$*V]`\_[`-F>N1EYX,G@?R1X`-F>N1EYX,DF>.!_ +MX!H8L`#:`KF>NAEZ0W'9$0"&1GC9&1B`]A(!MOC)L0.O_"5X`-F>N1EYWLDR +M>21XWAH8L-_))'C@?]\:&+#@>/'`Z@K/^^`2#[;I=2+P"'<@\"\N01,3#M46 +MSW"```0FUG@`@(CHSW```/4.R7$""R_\J7(`V)ZXV7@&?<]P@``$)M9X`(!` +M>.#)!R#^@^'UX>T!`\_[X'CQP.'%`-T3\,]P@``$)K9X08!0=7A#=26W0+/^^!X]A("MO@2`;9%>?D"K_P&(0``X'CV +M$@&V^,GI`J_\)7@`V9ZY&7G@R25XX'_@&ABP`-H"N9ZZ&7I#<=D1`(9%>-D9 +M&(#V$@&V^,FY`J_\)7@`V9ZY&7G>R25XWAH8L-_))7C@?]\:&+#QP.'%WQ(" +MMB\M@1";Y`"`0'B`V<]PH```'">@ +M.0+/^Q#8X'_?&ABPSW&``$PH`K@4>.!_`&'@>/'`X<4(=83@RB"&#P``@C#0 +M"2;\RB%&`\]Q@`!(*!)M%'C]`>_[`&'QP&H)S_M*(0`@*G4$\$HA0"`!Y54- +M%1%2"2``J7`:G#O"`"$BB`(!@Q]SW:``*P^6G`P)D`>BB0&*-<,#J#A +M;<\/59$B"2``Z7`9",`$!"^^%#`F01X1)$"@S"`"A-?U`>?P\0H(8!XJ<%$! +MS_O@>,]P@``@*!6`@N`!V.!_PB`.`.!X,F@T>0`A@`^``$0HX'[@>/'`Z@C/ +M^PAU`-Z%X,H@A@\```8P#`DF_,HA1@,`V1#PSW*``$@H$FD4>`)B`-@/($`# +M1'B`X,HF@A`!X0<)%0%P[A4![_O)<`]Z&0HU`0#9`KI4>L]S@`!$*$)C"0B` +M`"AP`_`!V.!^\<#AQ0AQ#WV%Y,=P@``@*"J`"0F. +M`ZN``>(-"A4!C"7_G_/SC0#O^ZEPX'CQP.'%"'6%X,H@A@\``&$`P"CF`3P( +M)OS*(48#K@AO_:EP;0#O^P]X\<#AQ0AQ#WV$Y.!^X'C/<*```!\<@.!_P+C/<(``4`EHB"F(SW"``#@L2(#/<(``E"CP +M((``.&`0,]QH`"`'409@`\>````$X&%(`P`$Z$5@;FX +M%:'@?N!X\<#AQ<]U@`"8*.XRB%B`\`I(@+/".`%%(V%!X_[SW*``!@J.X((Z0#9@N`[HK0&`0>1!@`' +MX'[@>,]R@``8*CN"$PE0``'9@N`[HF`&`0E+X;"!X%(@_/_X'@RB!A`!`-(0?*(2$`V:49!X_[X'CQP)8.K_L'V,8( +MX`5*(D`@"B"`+Z```"!+&)BD`-@Z<,]WH`"`'PNG_][/=8``F"G/<8``&"K2 +MH0/8X!T"$.(=@A,"V!>A'Z$=H1ZA%@D@`$`=&!#&#H`%&XSR'B`<]R +MH`"`'1:")7@6HN!^X'@$V.4`(```V<]P@``X+"C9\0`@"L[:X'CQP,(-C_L( +M=H#A`=VB"^`&P'U`)8`2N@@@`,EQ$0:/^_'`SW*``'@J(8H3"$``V@BO_`&J +M@."\#\+_T<#@?N!X\<#AQ0HE`)#,)6*0!O3/<(``G"IN#H`%SW"``'@JV06O +M^Z*HSW$```__C08@"@#8SW$```__D0<@"@#8\<#/<($`&!/L'`BPSW"!`$`3 +M0<#/<(``K"A"P,]P@`"D*$/``-M$PPG8!MD-V@HD@`^``+0H"B6`#X``#"Q* +M)D`--@I@!$HG0`"EP-'`X'X(%,@`0``@J"X)7C@?P"BX'CQP.'%SW*``$`& +M`H(@@J2X@[A&(0$&(*("H@#9SW6@`(`=.J6@&D*P`=@]I0H-H`6A&@*PSW"` +M`&RH`HC/<:```"B"X`'8P'@'N$4@``80N(4@D@`!H;8([_L!V,]P@``8*A.` +M"PC>`!6%N;@5I16%M;@5I8D$C_OQP,]R@`!`!B""`H*CN82Y(*)%(``&]@V@ +M!0*B`=B@&@*P`-BA&@*P`]C/<:``@!T=H<]P@``8*A.`#0C>`!6!F;@5H16! +ME;@5H='`X'[@>/'`X<7//'`X<4(=:'+#>BBRX#@RB""#P`` +M_0'*(8(/K=[OOJ`+PONARZ7HHLN`X-`EHA,I],]P@`!LJ$*(SW&``$`&`('A +MNL\@(@#0("$``*'/F&('^."?(7#=\2 +MCKT'\+02`(`+"!X`J[WY\7T#K_NI<,]S@`"8*=P3`@"`X`2ZQW*``)@KP"(A +M`\`B(@3H$P`!$2!`@`#8`_0`@N"XSW.``$`&!M@$\@"#AB!_#B*#1B&!`25X +MH+@"HP""+R`#`.!_`*+@>*/+SW&``%@)"6$`V!$$H`5#N>!XSW"``&RH`HC/ +M"""P+B@N25X`**DN,]QH`"`'1JAX'[@>/'`X<7/0;:!?`$V@/P`MJCR\]Q@`!8"0EA2'"2"Z`%0[G/<(``0`8@@,]PH`"`'3J@ +M`(4O(`,`>0*O^P"EX'[@>,]R@`!`!@*"1""!`0""1B"``25XX'\`HH#@RB!B +M`%,A`@%<>H#ARB.)`,HC+`#/6)Y,.&`X`*C`($O(`,`X'\`H:'!\<`^"8_[ +MJ'0H'$`Q6G"X<1IR.G.(=0HC@"$$)(P?!@```$$L510%*'X!"B#`#B2X`2A` +M!4%H*!04,$`HA"`5)`0!"B6`#X``X-D4)$$$,B5#`QT,'B+/=(``$-HT9(Q[ +M`"E,=04J/@-"=`<)!7-(<``H4`49#)XFSW"``!#:,&`,>P4I/G0*(D`NSW"` +M`%36,&#/=8``#-9L>`IPBB$*`@4I/G`O=@'8)PFD`Q0E313/%@L/A!-4E27P*0Z$4@A#`"99#5Y0G@;"$4`SW6``$C6 +M,B5"%'5[!2H^`PT+1`X4>!<(10``)0`D0"!0``L,GB8#V1D;0B!1)("FRB$" +M!,HA(0`<&T`@"G`(W.L'3_O@>/'`J@]/^X0H"`8`(8!_@`"D/B@0!@``(8%_ +M@``D0$`A!`5`(04+0"$'#%$FP("*(@@`RB(A`$X9A```W1'PSW>``.#8KV?) +M@.MC9'YW@<1[+RO!`$XCC@?+9'"J`>57#142Z8#/5=#94228#/=H``]-BK9L]T@`!PVF1Z+RN!`$XCCP?K9``G3P-@ +MKWB!9'HO*H$`3B*#!VMD0"0""+IB9JJG#MZ`:("`Y=,CH0`O*\$`3B.,!\]S +M@`#TU(MCT_$`VQ3P*(#/2\I00!.(8('SW&``/3426$! +MXR"LW0L4@;4&3_OQP$(.3_L(=I"(SW"!`'@T%B`$`\]R@0`X-99Z0(H`%`$! +M`-@1"E\!SW*``(#F0XH'"MX``=A6)@T4(.@)A3T('@,&A00@A0\````8(PV` +M#P````@,)8"/````$,H@@@\``!@5RB"!#P``L`0#\$O8!;@0<&#/`/)P\0`Q21`$8,X"(&A0D@ +MSP,&A0/G-@S@(@39`"@`!`/@!""`#P``_/_/<8$`"#L#H0/@02B!`,]PH`"` +M+#Z@=!A`!-82`;8BORRYQ+D8N3`2`C:=N12Z17F?N>5Y.Z#/<8``V+@>@0'@ +M'J$L +M!U,(E"``EA#@2PA%`""E"!T`%)@6`!"."J`A0"4"%`&E[!:`$#V'*!T"$.H6 +M`!$3M1^'`>`?IP`A``0=I]?)#8`/"%X`HC/<8``Q&L)\,]Q@`#@;('@V2%A!M@A8@?/<(``X%8` +M@$T(G@3/*"@`>/2X[GW4Q&``%(1 +M@P`W:"5XSW&D``!`9:$&H82BSW&``."9&8D!X!FI701/^_'`SW&``$!X!ZDJ +M"2```=A:"D`#T<#@?O'`R@M/^QIPBB4&%*EV"B&`+Z8``$``$0\@(P\?$#H( +MK_L#V(#F8;[W]<]P``"D*,C9Y@NO^U,G`A#/<*<`@$@`@,]V@`#@=Q:F`!$/ +M(",/'Q`&"*_[`]B`Y6&]]_7/<```I"C(V;(+K_M3)P(0SW"G`(1(`(#/=8`` +M0'@7IL]P@``(F@"(Q@@@``:M:P@0(!>&-H8X8`BX*[@`V@/P`>(=>/\(%8C/ +M`]X''@%K<]Q@`#@F1:)`>`6J1H,(``%C34#3_O@>/'`_]G/ +M<(``0'@GJ!(((```V#H)0`/1P.!^X'C/@```H`:>*#F_[J7`Z#._^`-@$V&8-H`,`V0/8 +M(@I@!P#9SW&@``!%38'/<(``9"Q`H,VASW"E```0P:#/<:<``$BMH6P9``2\ +MH4X-8`<0V`8-8`<$V`0?@!\!``8$!!^`'R``!@&I<'H*8`!_`!V-5Y_@I@!R")`>;G#I600" +M!<]P@`#@<0>`SW&@```QG[@>H>!^X'[@>/'`SW&``.!6(8'ON0`-PO_/<(`` +M0'@:"B``!8C1P.!^*(#/`!A +M"!D`(,]P@`!\Q128#!D$(`6&%!G`(Q`9`"!=!P_[\<#AQ0HE`)`)\D(,[_\` +MV%(,[_\`V&X-``,:"^__J7!`##]A5!P_[X'B9!,__107/_^!^X'CQP"X) +MK_^AP<]P@`!`>`6(!-E`P(MPX@F@"0K:H<#1P.!^X'@O)@CP!-J+NDQX+W$% +M],]P@`"X>07P0GG/<(``O('@?SA@X'C/<(``X'$*D(?HSW&``.!6`(&CN`"A +MX'[QP&(.#_O/<(``X%8`@*'!MPC>``#=B@\@!JEPSW>E```,$!<0$!`?@!\" +M``$`4@Q`!IH/(`:+<<]P@``(FF"((,*$*PL"SW"``'AA,"!`#B"`4''*(((/ +M``#+%%P.0OO/<8``:#U`B2#`$PB!`!`?`!0N#R`&`=@G\#X-H`L`J<]VH``` +M$"06$1"II@;P\@KO_*EP`>6O??<-DI`)AH#@RB""#P``PAGT!4+[)!Y`%.X. +M(`8!V!`?`!3/<8``X)D*B0'@"JG]!2_[H<#_V<]P@`!H/>!_(*CQP(H-#_L( +M=#IQ&G-XW^QZ+W#R"R``B7$$*/XC@-X")@$0SW6!`)`3(*4O<-8+(``J<0(F +M`1``A?_:$7@7"B4`(:4B%8`0P*4!X"(=`A`!V`FE,7D5"D4`(A6`$,&E`>`B +M'0(0`=@)I8$%#_OQP"8-#_L(=\]UH```10`=@!\`0```X'@`V`"E5@R`"XH@ +M_P\`RE#@R`"R4%#_OQP)X,#_L:<#IQ>G)H=0HF +M`"$*(`"$`MG*(&(`0"!4`$PA`*%*(D`@PB*!)!;:SW>!`)`3SW"!`+`3NG!` +MJ"&H`-X$\`'FSWY)#@,5%P@0(!,.4A!*<"IQ9@D@`,ERH@H``$`J`"&V>,=P +M@`#@<=Q@`#@<@V!+H%"AWH.[_]CAPF'DNA`*4`A%'A`*T$A +M.&`$O;A@%""`!2"'QW"``"!S.*@AASFH#00/^_'`R@L/^PH@`*`H=4AV.G,* +M(P`A!_+/<(``R-0""B``J&``V<]PIP``2#&@`O`!YCT.U1#)<)8)(`"I<0#? +M`_`!Y^\/E9#)<(X)(`#I<0HB0"3Q"X2D"G"I<4"A[WDJ<"X,(`?) +M<@#8SW&D``!`$:'_V!2AO@D``%D##_OQP/X*#_NAP0AV*'<+"K,`2'43#5,0 +MSW```+43'@MO^ZEQSW"``$#1`(C/<8$`D!-@P,]P@`#(U.A@)X$7"$$`A>Y" +M)$`PJ&`%\#)M:+DX8`]X%0,O^Z'`CN#A(,X'RB`N`<#@X2#.!\H@+@#XX.$@ +MS@?*(&X`C"`"@^$@S@<"V`/8X'[QP'8*+_LDV&H+(`<`W\]QI0``'`*!SW:D +M``!`G;B>N`*AI@P@!XH@PR_5'M@3SW6G``!([:7RI?.E[*54'8`?`P#__/NE +M`MA2#F`#BB$&!*78$+@$&(`/``#___&E\:90'@`4=0(/^X'@`=C`>-D$(`<# +MV?'`X<5F#2`'*'7/<*<``$B\H`#9#R%!`Q-I)7C/`RB%@F`"ST"#_O@>/'`P@D/^PAV`-UZ""`!J7'/ +M<($`D!/'H,]PI```0[6@SW"G``!(L:`%`@_[\<"AP8#ARB"!#P``FQ.X`4'[ +M`@\@`XMR`,"AP-'`X'[/(HF_Q^` +M(`,"SW&C``O7!2A^``H@P`[,>`/`"!]`'@'>%0C>!04@@`\`_P``$WB*)O\? +M@"`#`L]QHP`+UP4H?@`*(,`.S'@O<@*'#!]`'A%X&>`%*#X`47@9X"]Q!2@^ +M``T))`0O<`\(10,&AP'@!J#")4$3;@WO_\EP&G#/<(``X%8`@`\(7@&!Y=@*X?_*(`$$`-@<\#1M%GG' +M<8``X'*%@6:!"B$`@,HA8@#'<0``$M(IVA*Z"[P$)(P?/P``^,J[A7LU>F"B +M`>`/>,L(DH``W03P`>6O?4,-TQ``W@3P`>;/?O$.DY``W_D/$Y)`*$$A-'D5 +M;3A@=&X;8_1[QW.``"!S&1.$`*EPR7'I@'8J7%E;SH+[_]*)(`! +M#N\.#D`+">@\AL]P``"Q$UB&/@\/^^X/+_\`V`'EKWU'#5,1A.4!W\!_R0T1 +MD?(/+_\`V``>@!\`0```X'@`'@`4%@Y`"XH@_P\0!1`*0$DC[F;N<]P@`!` +M!@"`G[G$N`JX)7@,IL(-0`O/<8``P)D-B0'@#:G*#.`"!=BY!L_ZX'CQP.'% +M"'4`V+X)8`.I<0#8>@[@!JEQO0;/^N!XX<7AQHATSW6``'S;"&7/=:```"B` +MX!XHN`#V>$@Q0?*("4!Y.#A +M(,4'RB`E`/[@X2#%!\H@90",($*%X2#&!\H@1@`"V.!^\<#N"\_[SW&``."9 +M$8D!X!&IT<#@?N!X\<"Z#P``SW&``."9$XD!X!.IT<#@?N!XX'[@>/'`<@W/ +M^@AU&G%(=L]P@``(FN"(?@T@!NEP"B&`+X``:"PTZ-X*(`#I<`#9)*#/<8`` +M;*@BB0X1`R$-"1X`<'7*(T4##0E>``P@P*#*(P4$"PF>`'!VRB.%`SR00"`" +M"%,A30!`(`P-G65@K0'A=(H\L&VJ`=@(\`ED"PM#`"VJ*',!X/4(%(%)!<_Z +M\<#AQ<]P@``(FJ"(^@P@!JEP!^AB"B``J7`!V22@207/^N!X\<#&#,_Z"'4H +M=AIRSW"```B:X(C.#"`&Z7`SZ#8*(`#I<,]Q@`!LJ"*)`-H/"1X`@.7*(DT# +MRB(N``T)7@!0=LHBC0,-"9X`#""`H,HB#00]D$`@#`A3(4T`0"`##'UE0*T! +MX5",/;!/K`'8!_`)8PD*0P`OK"AR`>#W"!2!K03/^N!X\`#\`#8"J4HA02/+'@FA4$IP'$P<&\@"P"`X*EP +M"O)^""```=D`V`FE#XX.KC;PL@@``"F%@.#,(2*`)?(/CDZ.`N`/>`L(@P`$ +MA07H"H64X`#8PO7"PD$`(H@R@\`IQV% +M`>`=I0'8":4`V`JE"O"`X3!RRB&&`,HA!0,-"F0`(*"*(8H/(*-`@"`3@0`-"D4` +MBB$+`BNC/8!AN>!_/:#/<8``:"Q(@":)!H!,>4$IP7$0<0'8X'_"(`X``=C/ +M<:```"`"H?`9``!`V.@9``#@?N!X\<#F"L_ZSW"```B:X(AF""``Z7#J""`& +M"'4(=L]P@`#@5@&`2B!`("<('@,%A1!V4`@B`,H@P@/%I1X-[_^I<`P=`!0` +MV`^EH@_O_Q2E_0+/^N!X\<":"L_Z&@@@``AV"'7.""``R7$`V/$"[_H#I80H +M"P(`(8!_@`!\8>!^X'CQP/(/[__AQ0AU]@UO_'C97]@`I5#8`K6`V`.U4M@$ +MM9;8!;4`V0CP7]I`)0`<.&!`J`'A]0D4@:D"S_KQP.'%`-T&\+X/[_^I<`'E +M^0T4D9$"S_KQP.'%SW"```B:H(@B"B`&J7`(Z(H/[_^I<#>``>$WH&T"S_KQ +MP.'%SW"```B:H(C^"2`&J7`(Z&8/[_^I<#B``>$XH$D"S_KQP*(/S__*#L__ +MT<#@?N!X\<"^"<_Z"'?/=:```"#;A0.`@.#,(>*`*O+L%0$03X<-":0`-*<" +M(8``!_`.(H`/_____SA@,0X%<```H`^^"B``Z7"F""``Z7`%AX[@+`WN_\H@ +MS@//<8``P)D4B0'@%*D&\(PA_X]4#L'_O@C``AN%#0B$`QN%PG@(\#N%#B:` +M'_____\X8)T![_H9I^!X\<`B"<_ZSW"```B:P(@Z"2`&R7#/=X``:"P>Z)H. +M[__)__$!U`%%8(P`(J +M%X`0`>`J'P(0*0'/^L]T@`!H+&B`)8Q'@&QY02G!<5!Q;R$+`(#A'``"`">, +M;'E!*<%Q,')O(0L`@.&$``(`X'XBD,]R@`!H+`'A:9(P>0DAP0`BL&F2#0G" +M`(HA"P`@HB.0:Y(!X3!Y"2'!`".P8I`KD@T+0@"*(8L`(*(DD&V2`>$P>0DA +MP0`DL&*0+9(-"T(`BB$+`2"B)9!OD@'A,'D)(<$`);!BD"^2#0M"`(HABP$@ +MHCR`8;G@?SR@(I#/0@AP0`CL&*0*Y(-"<(`BB'+`""B))!LDF&Y,'D((<$`)+!BD"V2#0G" +M`(HA2P$@HB60;I)AN3!Y""'!`"6P8I`OD@T)P@"*(/^O'`X<6#X`'=PB5!$VX/X`4/>(#@ +M`-C%!Z_ZRB!"`^!X\O +M^B@=`A#@>/'`'@^/^L]P@``(FJ"()@_@!:EP"^B.#.__J7`(=D(-[_^I<6() +M[__)<%X.@`)2#:`"#-A5!X_Z\<#AQ<]U@`!H+$8.@`(I%8`0`>!%!Z_Z*1T" +M$/'`Q@Z/^J7!"'<*)(`/@`!H+$`@#@]6((T"BW+)<$H((`"I<0"%`*8!A0&F +M`H4"I@.%`Z8$A02F`,`$P0BG`L`X8`H4`0$,>0/``<$<'T`>.&`(%`$!#'D8 +M'T`>T0:O^J7`X'CAQ8"!8(!P=,(DQA!&]PXCC0______O&2`HH&!H8`-#$03 +M`B1#$P?P#B6#'_____^;8V&B@H&B@`L,1!,")$,3!O`.)8,?_____YMC8J)C +M@:.`L7/"(T8#1O<.)8P?_____YMC8Z(D@62`<''"(<8`1O<.(X`/_____QEA +M)*+@?\'%X'CQP.(-C_H(=1X(X`0%V`AVR@D@`P"%0I4#E<]QI`"`0%2A%:%$ +ME0656*$9H>H/H`3)/'`X<7/<8``F"PZ#R``NH%$*#X+0"4`$L]Q +M@``X&"]S>&``H;MCM9-6DXN;-Y/(O`F]SW`#``#^!'VE?,]UIP``2(:EC9,) +MN3VE)X,3"=``+),)NLBY1'@E>`>ESW&``."9#XD!X+$%K_H/J>!X +M\<`*#8_ZI<':`",/`0#=$0\S +M'@(C$`&,)W^21O8%V%`<`""@\`.`B^@$@0\(40"@@HHCPR\0\`\(D0#_W0`2 +M$P`*\&?9SW```'X9"@WO^E`<0"!Z=4#&RG"J<>ERJ7,*),`$2B#`,`HE``:* +M)L,/8@L@`$`D!S%`)!DS0,;*<*IQZ7*I#Z_Z*G#)/'`D@N/^J;!6G)!PXAU"B1` +M(0HA@"$$@0#>"B.`+X``F"P!WQ<(40``$0X@_]@`)E`3HG[:<+IP&O""X,P@ +MXH`+]``1#B#_V0`F5A,")E43&G$H=@SP9]G/<```?AF."^_Z4!M`(-IV&G:Z +M=HPFA*T$]HPE`Z)&]@;84!L`((GP0,!YF!A:6$`<6DQ!* +M(0`@$/#*<.8*K_H#V2\F!R!J<-H*K_H#V2\C!R!`(5$@!(Y+"04@0"05,4`D +M%#(*<*EQ2G(`PPHD@`4*)4`%;@SO_PHF``4`WP6.O0\%D`IPJ7%*<@##"B3` +M!`HE0`72#>__"B8`!0'G\/$A"%(``<`%M02%_]D/"%$``L`&M2>U!/`FM0+` +M![6!`:_ZH\#@>/'`2@FO^E!XSW2``"P,H(3(N@FXSW8#``#^Q'A%>,]RIP`` +M2`:B+R`(`5,D#P()N,1XY7@=HG!XR+L)N,1X97@'HA0:@`%/)0$"(*(`V`/M +M`*3H<`X((``$P5D!C_K@>/'`W@B/^AIP.G&*)084J78*(H`OI@``0``2#R`A +M#Q\03@VO^@/8@.9AOOCUSW```*0HR-GZ"._Z4R<"$,]PIP"`2,"``!(/("$/ +M'Q`B#:_Z`]B`Y6&]^/7/<```I"C(V/'`^@]/^L]W@`"8+`HB@"^@```@;!(1(&@7$Q``V'(,(`":<-8) +M(`"*=JH)```$&P`@`_`!Y@&'B0X%$*()(`#)<$0N/AL`(T$NNG$"H8H.8``` +MV:8)(```W>8*(`#)<`*'U0T%D/X*(`"I<,EP0@P@`*EQ$FTXAQ4@$```)0`D +M*K`VAR.@-X72\$`B@0P(80HG`)`$ALHG8A"EP;+H0"0',0'=0,4*<"IQ +M`-K_VYAS2B7``8X-[__8@!]@`,*5!!Z`'V``0I8$'H`?#``"7P0>@!\,``)@!!Z`'PP`0H\$'H`? +M#`!"D`0>@!\#`,)@!\'``*.!!Z`'P4`PF4$ +M'H`?!0`"E@0>@!\%`$)F!!Z`'P4`@I8$'H`?_P`"=P0>@!__`$*G`-T$'H`? +M``#"0`0>@!\```)[!!Z`'P,`@D`$'H`?`P#">DH@`"$$'H`?;``"`00>@!\# +M`$()!!Z`'P$``@1N#F`&`=\$'H`?`P""9@0>@!\#`,*6!!Z`'P,``F<$'H`? +M`P!"ERO8$KB@H*&@SW&G``!([:&DH>.AOJ'XH3P9``3/<*0``$.UH,]QI0`` +M'`*!G;B>N`*AM-@&">`"BB$'"#T%3_K@>"\F!_``V,H@;P`#N!1XQW"``+@L +M4X@RB,]PIP``2%&@,*#@?O'`M@Q/^@AU`-X/)@X0,V[%><]PH```12V@$+E/ +M(<(#F[K/<8``0`8@@9^ZQ+D*N45Y+*#*"^`*A28!$M!^0"X`%(4@A0#/<:`` +M`"@!H:EPT@WO_0#9J7#."Z`"`-G%!$_ZX'CQP.'%"'0H<$AQ_]H`W4>P1K"E +ML$.$!>H#V22@!?"DH!(-[_]H/'`-@J`!7H.C__1P.!^X'CAQ<]T +M@`"8+%J$9(0A@@(@30``V0CK>(RQ?0T-Q!`!V0YX`:(H<.!_P<7@>.!^X'CQ +MP.8+3_K/<(``F"P$@"7HSW6@``!%S86Z"\__`=G/<*```!`IH,VE$+Z/OIN^ +MSW"``$`&`("?OL2X"KC%>`RE[@K`"@(*8`((V,]Q@`#`F1")`>`0J?T#3_K@ +M>/'`X<4(=0+8Z@Z@`JEQL@WO_:EP`MBB"V`&J7'A`T_Z\@'@ +M&:;I<*8.8`8PC4`D!S$!V$#`"G#I<0#:_]N8__V',!P!>F`L`6 +MI@'!@.#,(8&/\`B`T;8'Y?]8A@L*U`46V!BF&0-O^J/`\<"F"F_Z*'"OP2\F +M1_``V#.__3XE:<,2Z!;VO?45]0"T.$D`D$3%` +M)!`]!26!$XHB"```VPHD0`0^""``"B4`!`W`SW>G``!("*<.P`4E@1,)ITIP +M`-H`VPHD0`0:""``"B4`!`W`"*<.P`FGA0)O^J_`H<'QP"H*;_J(`"E%9(WDLJXRKD+N25X`:5)\)X(``!`P2#&1"@^#<2^ +MSW.``(AU+W2>9LACY[C/("("SR!B`L\@H@+/<8``6';/8>>_SR[SR,B`L\C +M8@+/(Z("#&'GO,\D(A+/)&(2SR2B$E,C@`)3)($2"[DE>`&E=;*7L@C"$_]T<#@?N!XSW&``,)Q%'D` +M&80/``#_?^!^X'CQP-X(;_H(<[AR`=K<'(BPSW*``.!60(+DNC0$(0"(<,]R +M@`"@<5F2@.(D!`(`+.DD%0$`SW"``(`)):`@%0``SW6``-3.!Z,<%0``":,8 +M%0``"*,`A8#@E@4!`,]S@``\Q6T3@``)*(T`0"B*`+X``/,5L$H(@PB/" +M$D0J/@=*`!B:!),(0DD#!!!*8`# +MPKC/=X``B-((9X+@!MC`>`)\P8-="5X"+K["OLAGA"D!%DD@@``I:(H@OPT` +M)D(.@"("`#5ZR)HE@TF:,WDY83YFSGY982YY"22"$TYZ"21!$"YY`=P7"Q$0 +MSW6``(`)A:5`)`$E,F@1`,\`T.GA93 +M)L$0"/#=><*YSW*``&C:*6(88!5X:K@`($<`R'"`(`4)%"!``@`0R@`3#A$@ +MSW"``#C%`)A!<"\B!1"*)P$F!"G^%0`F0`Y`X!4@P`$@F`(040$%@Q-X&&`9 +M82)P+GD.>`DA`0,N>@@<1#`))`P0CGD*'`0S0"01,B\@R`%!P`'-,+$1"7#A`@!"A^)0HG0`Y!+HP3PKR-9PT.'A)3 +M)HP0#?`+#IX64R;,$`?PW7S"O,]W@`!HVHQGOV7U?VJ__&0$*/X%`"=`#L=P +M@``@8!4@#P..GP`13R%LO#<,PA/HOM,FHA`,]/J^TR;B$`CTW7["OL]T@`!H +MVLYDO66U?6J]W66U>`^8`A%,(6RX"P@#`P'<)?`"W"/P1PB1``0H?B4!Q0`A +M@'^``$!A%PVR$@@43C&FB"L-@Q,'B",(0P`'\*2(&PV#$P6(%PA#``#).>@'A+GF%A1)L%"#`!,=P@`"LRP`0S@#:8DY^`1#```@@@GCQ/N?@@C**-T$LX@ +M`!R"`\6%"!Q```0<@`//<8$`V#H'H4FA#AP$``P#(!T```6%)!T```#``*'3\,]P@``(F@`0AP`!@$HA +M0!`(B,]R@``\Q8'@PB%"$A[8"!P$,`HC(8.!@QL)7@(!V8;HSW"``(`)):"@\.&_P'GY\4$L +M@1/"N2IF#0P>$E,D@1`-\`L,GA93),$0!_"=><*YSW6``&C:*65:8E5Z:KI9 +M82\D2`""Q0':!"2!'P```!A!*<4"!"2!'P`#``!!*08&!29!`=$($0"/"1`0 +MA"\+`B]P02R"$\*Z2F8+#!X24R2.$`SP#0R>%E,DSA`(\)U^PK[/=X``:-K. +M9U]B]7]JO_YFA"D!!B=PQW"``"!@%2"!`RZ9P)ULN3<)@@/HO-,DHA`+]/J\ +MTR3B$`?TG7S"O,]Q@`!HVHQA6F)5>FJZFF)5>`^8(9ULN`L(0P`!VBCP`MHF +M\$T)D0"$+PL"`"&`?X``0&$=#+(""!1,,2:(,0D#`PH403$'B"D(0P`*\"2( +M(0D#`PH403$%B!4(0P``V@CP1">`$OD(D(*W#U^0SW"``(`)1:`($``0"*,Q +M`R_ZJ<#QP`X+#_H(=L]P@`"@<5B0SW&``.!6`(&$ZJ2X`*%:\(2X`*%>"&`% +MR7`(=TX*[_[)<-((0`5:"P`+R@A`!78+``N$+@L2SW"``/Q?+W6@8(#@RB"! +M#P``"2OT"F'ZRB&!`T(,X`K)<.EP@@L@"\EQA"X!$\]P@`#=53(@00X`(8!_ +M@`"@540I/@<(X/8-(`4P($`.&G"J#R`%R7`(<@IPZ7')*UH0(/^O'`0KC/QZS:@I@!4ZC@.#0"`+[T<#@?N!X\<`>"B_Z%-K/<8``W'&2">`(`-TH +M\(0M`1,O<``@@@^``,!5?(K/<8``H%4:ZUV*.&!$*CX'".!6#2`%,"!`#@AW +M3@\@!:EP"'8"#R`%J7`(6O?;,-$I$=`@_Z2(#/ +M<8``PG'U(8$`X'\BH/'`H@DO^@#9SW"@```0*:#/=J```"@FI@#?CK\&#F_^ +MZ7`(=>MX`=C"(`$`!+A/(,$`SW"``&RH`HB`O8+@`=C`>`>X)7@0N(4@D@`! +MIMH-+_H!V*&F_]DKV!*X(*`AH*D!#_KQP#X)#_H(=2AV`-_/<*```!#IH&X, +M(`4!V([E`=G"(4T`**BIJ,JHZZ@$[F*]J:@0&(`/```&/#8,``5I`0_ZSW"` +M``!R((A!B$`I``2!N(JXC;C//'`:@M@!1#87@I`!='`X'Y"(``,X'\/>`WHSW*@```@ +M>X("(T(`$PZ$<`"````/"(0``-@$\/\(Q8`!V.!^X'C@?N!X\<#AQ<]U@``$ +M'@"%-PB5`<]P@0`L)A2(*PA0`"X/[_T!V$"%SW&!`%@457E&@1<(@0`*V)X/ +MK_TL@0#8D@_O^B"%+0`/^N!X\<"R#^_Y"'%(=@#=`O`!Y1,-E1'/<($`B!3P +M($`#\PD!@(;ERB"&#P``$2N\#P;Z@>8!V,(@`0`!X$X/[_JI<=T'S_GQP)8/ +MS_K/<0``Z,'/<@``@,'/\!Q(L"*3SW.``%31!!Q$,""#0L$BDPP<1#`#\`'FHPZ5$<]W@0!8%$`G +M#1;5?RR'[0A!@(L*40`@AX'ARB""#P``$"LL#P+Z`M@:<`"GSW>```0>P*=V +M#:_]"M@(=HMP0"8!$E(.H`@&VH+`0"8!%$8.H`@&V@_8!J85V`>F1-@+IA#9 +MSW"``"1`E2!("R"@9@VO_0K8"'8`A_`E`1`O>+8+(`4IK@BN`-@*K@NN!:8` +MI@:F$!X`%"8/K_T*V-D&[_FDP.'%X<:$*`4*SW2``,R:`"1#'L]U@`!TOP#: +M)W1`I`;9)*//<0``@"$CHP6CIJ/!QN!_P<7!`0```('/<:```"!;@06X`""! +M#X``;//@?T"A\<`:#L_YP(&DB`C*'`_`PA\EPZ@A@'0+:3"`` +MH,H@@@/*(8(/````!-0(8AW*(B("-FW/<(``X)\H8!4(D`#/<0``1,:I<`C: +MB@R@'0';]07/^?'``('/<8``5)N$*`4*-"%!#A,)7@`#V0JYD@A@'0G:`_#^ +M"```T<#@?N!X\<#AQ:"!O@R@'02)J7`#V0JY;@A@'0O:S07/^?'`X<6@@:(, +MH!T$B/'`X<4H=<]Q``!TQ02-$-H.#*`=`=NJ""```(65 +M!<_Y\<`>#<_Y!X'`@0CHSW"``/@M\""-`P3P!=T*O5X/8!W)<(#@RB"!`\HA +M00/\#R$=RB*A`54%S_GQP.'%H('/<@``!,8$B4AQ$-KJ"Z`=`-M.""``J7`] +M!<_YX'CQP,(,S_F@@3.1B.G/<(``Z"WP($X#!_#/<(``""[P($X`_@Y@':EP +M@.#*($$#RB&!`YP/(1W*(N$!]03/^>!XA"@%"@`A@'^``,R:U00`"O'`;@S/ +M^0AV*'>$+@@6SW"``*P^,"!-#H3FRB"&#P``"0&(#";ZRB&&`X7ES"7BD',(>*!%`L!'='`X'[@ +M>/'`"@S/^2AUP('DB80N!1K/<8``S)H`(5`.-PA1`(H((`8`V`R%&0A0`,]Q +M``!$QNEP"-J^"J`=`-L+\*(*H!WI<"`0`2#)<-8.(!T!VB$$S_G@>/'`N@O/ +M^0AV*'4`WY8,H`+I<:]]*PU1$%9N`"*!#X``ZI_@J0/9"KFB#B`=!=K/<($` +M3"7P(((#R7#I<0OPC"6"E`KRSW"!`$PE\"""`\EP`ME`>LT#S_GQP-AQA"@( +M!L]Q@`"L/C`A00Z%X/'`+@O/^0AV*'4*#*`"`-FO?1<-41#/<($`C"7P(((#R7``V0OPC"6" +ME`KRSW"!`(PE\"""`\EP`ME`>ET#S_GQP.(*S_DZ<"AW`-W&"Z`"J7$(=H0H +M!0K/<(``S)H`(%`.'0]1$$`I@2$`(8`/@`#JGZ"HR7!*#B`=*G$@$`$@R7"Z +M#2`=`=KY`L_Y\<">"L_Y"'@T@'0/:A"T(%L]P@`"L/C`@0`Z'X)`,H1S* +M($$#L0+/^?'`1@K/^0AVD.#*((H/``!<`W`**OK*(8H#MF['=8``F)\(A0'? +MANCV#V`=R7#HI?:E"@[@',EP=0+/^?'`X<4(=9#@RB"*#P``70,T"BKZRB%* +M`^8-X!RI<`#9!KT`)8`?@`#PGUD"[_D@H/'`Q@GO^9AQ"'9(=0`0$``H<(8@ +M_`R,(`.""G"$*`4*`=K`>@`AE'^``!B;5B8,%`"$"!02((+@2B%`(,(A0B3/ +M<*```!`Y@!B``-\&ZPT(E``0<.@.+1)2*1#?(IC@OI*HZ)Z<]Q@`#P +MHR"!A>DA:"]X)ZY'"-(`/!0!(:FY/!Q$(`&$A[@!I*H+8!T*<,EP#PH0($8( +M8!T"V03P,@\@'039`=@+K@`@@"^``-BC((B!N2"H`-@'K@#9"XXHKBFNH.CD +MOI<`S9RB'A`I8.`!W5`,_Y\'ZRB"!`RT`[_FAP(00`0!`@*6YA!A``,]P@`"<'BT! +M(`/P((``X'@I!&`=*'#@>+$![_HH<.!XX<7AQH0H!0H`(8%_@``8FE8A3`+/ +M!X\<`V#X_Y&G`H=U8A#@0`AJ"!@N"$+04:SW&``'";2B%`(,(A0B0R +M(4`."B1`+E,@TP"$+0@6SW"``*A`,B!2#FX/X`E6)T`29@_@"4`G`!2I<'(/ +MX!P8V4`J@"'/<8``[)\`8:7HJ7#.#"`=!-D&Z(X*[_RI!X\<":#H_YP(#/=8``@!Z`&$``2PF0`&\)$0&$+@@6SW"``*A`,B!$ +M#L]PH```()N`A"X%&L]P@`!OF\=T````?0C9,B!##A'8"+@!VKAT2B8``%H* +MX`+X=17PSW"@```@FX`,V0`DA!\```!]`-B,N`':R7,*)8`/````&%8+X`+8 +M=<]Q``#,(JEP`=H`VPX)X`)*)(`!SW&``)P>U7D`H8P@_X\!V&$&K_G"(`$` +MX'CQP.'%*'4F#N__*'#R#Z_ZJ7``V<]P@`#PHR"@SW"``/2C/0:O^2"@50+@ +M!0#8X'CQP+8-K_DH<"AU\@WO_^"!`-Z`'8`3Z7`6#N`<"-GVR1$@P(,H"N(% +MRB""`_$%C_GQP(8-K_D(V:+!BW56#6`*J7`@QL()[_RI<`AU`,`/>8/ARB"& +M#P``"PF0!<;Y`<$O"=$`9@W/_0#!C"#_C\H@@@\```4)?`W"^2#!`-K/<(`` +MT%8U>$"@I@E@(X!`A0#`?F(/?,]Q@`#05I5YP*&& +MZJX+H!I@I0?PSW"``*B^2@I/_)(/0`%9!:_YHL#QP.8,K_DLV<]W@``L);H, +M8`KI<`#>./"$+@$:5#E21K@FO_0#8^@Y``;D$C_G@ +M>/'`,@RO^0;9I\&+<(X,8`HZ<`#!+R)'($PBP*#*(.8`;`SF^<`H)@//=H`` +M("A`*H`@%'A`)@$9`F&*)_\?`B+`@P'!RB!B`$`F%Q4?"5``@N$`PY?R@^&2 +M`@$`SW````4P-@SO^6ARC/`(Z,]P```!,"8,[_D`P@#!2B4`("\G1R!`+X`@ +M%'C88%IP*:`*($`EJG4J\!4A%B0(%@(@20K``T`E52`O(X<@3"-`H>#2`;\"8`%`IP%@Q@!0'9$"4-%//MQ@Z@ +M!!03`""R"V_Z*G`L$@$@ZG`.".`#*!("(+3P!.@1"X``SW````TP"@OO^6AQ +M2B0`(``4D#`*(@`EBG4*)0`E!_`@H`\EU21`(E(@2PK5(!4AEB0(%@$@\PG` +M@R\C1R`9"W0A0"14(,]P```6,+H*S_D(%@$@%2;`%$"`#R7-%,4*P(-0<``F%A`H +M%@`@I7BG>)IP'?`O*`$`3B"2!TIP/@M@!0#9\":`%!D(P0,`$0$@SW```!`P +M3@KO^2@6`B``V!()H!H/((`$$".`)`HC`*#C]2@>0",4$0$@+W@/"#4!\"<" +M(#,)@`#/<```$3`6"L_Y$?`O*$$#3B"2!P\-CB1:#"`;\":`%$IPT@I@!0'9 +M$"6-%/'M=@IO^BIP$/`O*`$%3B"3!Q4FTA2>#"`;`!(`(``:P",0)-0DY0P1 +MH``1`"`*":`:J7$L%@$@"G#*#J`#*!8"($7P!.@1"X``SW````0PH@GO^6AQ +M0"J-(+1]W64KA4IP*!40$.8.H`,*'YRB&!!"IP-@I@!0#9'@P@&P`3`"`*A0`;P",0($`$"J5*A>#J +M"X45)A$0^@R@!!01`"`4&<`C2G!&"*`:"G'II0#8.G`5I@/P0")`($L(-0%: +M<$`J@"`4>-A@*8#O"<"#JH!S[2\H00-.()`'A"@()L]Q@`"L/C`A0`X-")$! +M9@_@&PIP!N@5A@#=`>`5IA`E#13H\1@<0#2&P.H)8`$$V:D`K_FGP/'`?@BO +M^0;9SW:``'PHM@A@"LEP`@M@`07=`=C)<0#:`@Q@`0AS((8!A@4A/H`']".& +M!(8%(3Z``_*I<`+P#-@/>$H+[_T`V:$`C_GQP"X(K_D"V<]W@`"8*6H(8`I6 +M)T`6M@I``<]V@``8*C*&529-%R]X"0E1`'<(40"!X?_&0"XTR"B +M`<\A`@#0(0$`-+*AP-'`X'[QP$X/;_D`V.`<"+#/<(``9-(`@,]Q@`!HTD'` +M@L`."Z_Y&-K/=8``^%2I<+X*+_NHV8MP`=EJ#R`*&G$`P4`E$147"=\`SW"` +M`!A/(*`$X$X/(`H%V<]VH`"`(!V&BB&.`21XSW>@```@"0A``#VF`,`K"-X` +M0L"#P"8/(`H%V0+`#PA1`'(,[_H!V$?PA.!D#.'ZRB"A`$'PSW"``!A/`(!3 +M(+Z`#?0,'X`?"````'P>`!0!V"X+[_H`V2_P7P@>``'8'@OO^@#9#!^`'P@` +M``!\'@`4?@C/^S\(40`:",_[SW"```B:`(B,(,./$O0`V`WPI!4!$`\)#@!; +MAS-H-7DB<4"A`>`/>.T($H$%\-8([_H"V!N'0<"!P)X/(`$$V0#`$PC>`,]P +M@``,5(394@G@!Z':>09O^:C`\<#AQ:/!BW6I<,]Q@`!/'`L@I/^7((H`2")`(S +M@>!*($`@SW"``*!Q&9#"(`$DANC/<(``G,4-B`/P`-A$*#X'SW>``#S%BW;) +M<``AS7,*#N_ZC-G)<,8(8`JI<9AP`!7`$$#`'(=!P`#?+?"$A7-O>7R/?!4C +MP@"#5-GEZ>`]X":+/<(``")H` +MB'9[A"@+`CMC`"&!?X``8&$&@0'G>&`(X/0@``/P?PJBJP^2D,EP7@L@`8S9 +M50)O^8`D`C/@>/'`[@EO^1C9K\&^"2`*@L#/<(``")K`B(MUJ7!B#>_Z"-DB +M#V`*(L#/<8``\%;T(0``0"0$/@`(-P +M$PE1`#(0@0`"'$(P,Q"``!#P!,&(Z2`0@0`"'$(P(1"```CP+!"!`"T0@``" +M'$(P`QP",*EPR@H@`0C9S0%O^:_`X'CQP.'%K,&+=:EPE@D@"@K9`<$5"5`` +M&PG0`$/8=@FO^0BX"_"*P=8.H`2I<`7PBL$R#Z`$J7"*P((*(`$(V9$!;_FL +MP/'`#@E/^<]W@`"07P^'H<'_W0B]CNB+<$()(`H!V0`4`#$$?4B]+R`'(`(4 +MCC`*\!"'1!>.$`1]*+VO?2\@!R":"<`"&PC0`!$.$!2I<`IQ1@S@`LER!?`! +MV%P?&)`^"@`#$0%O^:'`\<#AQ<]PH```!`.`L!P(L(MUJ7#>""`*%-D`P&&X +MBP@5!3,F`'"``/#.0">!K@_@"8MP`,'/=8``B#TAI0'``Z4) +MZ2,)4``5"9```]@#I<&E#/`#V`.E"O#*#T`$`=@`K03PD@]`!,"MQ@D``94' +M+_FBP.!X\<`B#R_Y"-FHP8MU6@_@":EPJ@D``0#`6PC>`0#;#?!3(DP"B[R/ +MO$`L#A3%?(&A5'I$L0'C-0L3`3)K`"1",$."-'G'<8``7`N,(L^/0*'H]T$J +M3`')O$\DCA*+OH^^0"X,%,5\Y?$'PL]Q@`#X/4"A4R`"`,]Q@``T"T*A$P@> +M`%8.K_J!N%H.K_JI<`$'+_FHP/'`J\&+<,X.X`D!V2#`A"@(!@`A@7^``*0^ +M&P@U`4B)(8$)Z87BS"+B@07T4@Y`'`7P@L">#N`)"=GN"``!J\#1P.!^\"C`N`"A"12!,`H4@C""X@GO^BC9`>??#Y20"12`,`.X%7@#PMA@!,%(H"F@"Q2!,!$)40#_V<8) +M[_H@VB[P2@GO^B#9`-@@\``6`4$!X``<1#``%@)!`AR$,``6`T$G>@0D$J`0)'>2]Z([H)%(,PVF(#NW5[6V-`B\*Y#R)"`$"K"A2!,+\(1(#/<*`` +M``2JH/H/P`#!!2_YI<#@>/'`X<6BP0'=0<6+<(X-X`FI<0#`#0A1`*H,X`,` +MV`?P&PC1`)X,X`.I<('`B@[@``39-@]@!`#8!_``V$'`@K)`!\`0``4`3$`'T1``\`(Z,]PI@``0`"`^0A1@`+`#.@`%@!! +M!L$$Z0`6`4%2#>``R7$3\`#=#/``%@%!`^H`%@!!['+*#.```<`!Y0`4`#'I +M#220!L(&P(?H`!0`,0L('@``%@!!D@S@`,EP`=@(<18/X``(-P>P'F`!0!,>L.1)`1\``6`4$$Z@`6`$$!P``6 +M`D`>#>```>8`%`$QYPYDD`;"!L"%Z`L)'@``%@!!SW"@`(`,0!B`#P"@"`#J +MR0`?`$#N"^``J7`!V`+9<@[@``AR*00O^:?`\<"AP8MPB@O@"0390@[``*'` +MT<#@?N!X50!`&O'`@@L/^;+!SW>```B:2@E@!``7E!"!X$HB0"#2"B`$PB*! +M)!IPBW`!V;8+X`EZ<0#=`@B@`:EPQ@KO_8IPSW"!`#@Y0!`1``IP2G$J"B`* +M*G(`P<]V@``\Q5IP:PE1`('`?@O@"0/9`_`!Y:]]@N4(`0H`$FV#<"&`"2&, +M!`#:`_`!XD]ZYPK3@`#;]PL3A0"/,FN$*`L"M'DO<(0J`08^8,=V@``@8!SF +M)W:`MHKJ$0N3`,=Q@`!@8"SA&6&`L0'C;WOD\:L)D0!$'$0S1AQ$,X'%J7`* +M"^`)#]D;"!`@521$-%0DQ3B*<*EQ*G)*"2_\2G,3\`;`!\(%N`5Z`<`(N@+! +M!;@E>$5X1!P$,`C``\$(N"5X1AP$,$04`#%&%`(Q!K9'M@G`!,$)N"5X`J9/ +M>$]Z"+@$((`/````_P5ZSW&G``!(2Z$"AG$9&``!P0#8[@T@!2+"`=@&P>(- +M(`4GPL]Q@`"@<3(9Q`0&\,]P```**UX*3_FZ#,``60(O^;+`X'CQP*X,X`#A +MQ<]P@``T&`"`%NC/<(``S%0`B!D(4`#/=8``Q#MN"V`"`(6*(/\/`*6&">_\ +M"-@J#J_Z`MA-`@_Y\<#2"0_YSW"@```@NX`V"\`=!^C/=X``-!@`AP;HSW`` +M```*V`=@`I\]P@`#,5`#9(*`(V`(-K_P8V<]Q@`#85`"A`"6!'P````@B +MH"&.)J`ACB6@(Y8\J`C8/@VO_`'9SW"``-!4S@VO^J"@G0$/^?'`X<6CP8'` +M6@K@"0+9!!0`,6&XVPA5`3,F`'"``+S/0"!>1`>`7L:EP,@G@"0G9J7`(V07:K@HO_&B%8O#/=8`` +M`&M`)0`7$@G@"8HAC07/`,L:EPU@C@"8HA2``P)8,?````"*EPBB$(`$H* +M+_P$VC#PSW6``.!6J7"R".`)BB')`=8(P`3//'``@@O^0#8F@Q@`:'!`!:.0``6C4`` +M%@!!-@H@`P?8&G"[>`?@@N;*(*(!`^`$((`/``#\_YVXG[C/<:``@`P0H>H2 +M`;:'Y@`?0$``'X)#.@$-`#(FBG.``#3/0">```6`4``%@!`@+G/ +M<*```"@AH(_P`-H2\``6`$$`%@%!!K@`'$0P`!8#0(&X$+DE>,]QH```*`&A +M`>+?"D2#>?``'T)#`-D5\``6`$`!X1!X`!8"0`:X12#"`,]PH```*$&@98!! +MH$6``!R$,``?A$#;"42#7_``%@%`SW"@```H)J``%@!`5?``VASP`!8`0``6 +M#$!!*`$$$'@&N$4@SP#/,]QH``` +M*`&A`>+="D2#!_#/<```J1FR#B_YR7&J""`#"G`!V`#9&@G@``ARP0;O^*'` +M\"^_^`=H,%$`Q!-E2"^_^`=H.%$`Q!=E&"^_^`=H$ +M\%X+[_Z$P`X(P`"IP-'`X'[@>/'`:@WO^`+9HL&F#:`)BW``W0WP-@S@`*EP +MQ\D1($"#8`NB(,H@0@,!Y5D-U1<`P+EX^0@>@`'!"^G="5"`&PF0`,]P``"S +M$UH-#_GN\7X+X`"I<.KQ`=C/=H``]!X`K@L-41&N#<_]"?`-#1$2&@F/_@7P +MC^50"H']`-@`KM;Q`<",Z,]P@``@>*X,X``:F,?)@."8"((@:@^``#D%[_BB +MP.!X\<"Z#._X#-FCP8MVD@R@"I/8C;BJ +M#"_Y17D#%($PSW"```#M%B!1`"W(5&E88"X2`C84(E``(<*`XL[R&PI0`(+B +MRO0"%((P`"&`#X```J,7P!12",,]U@`#(-!'J8(!!@$5[0H`#@&5Z!2"^ +M@,H@@@\``)0`1`PB^<\@8@,#%($PSW>@```P4FG'O2#Z`&R7!`\#H7`I9*)4``!'I0<`$4C##" +M)4$!`A2",`2\A7H`$`PA.'N1<@''!P`=C"(`$` +M`K@%>@<4@#`$$0,@EKAP<`'8PB`!``.X!7H&%(,P4R2``!!S`=C"(`$`!+@% +M(@*`RB""#P``E0"4"R+YSR!B`P,4@S``V@"%#R+"`$5X`*4!%(`P%24!$(2! +M!+A%?(2A`A2!,``CC`^``!@U!A2#,""L=7U\A05Y17M\I3H7`Y9E>CH?F)`` +M&$0@!12`,`,4@3`X>)(7`98E>)(?&)``V0`90"`'%(`PEK@$&0`@!A2`,"'! +MD+B1N)*X`[D%>04A@0\8`1```Q2`,`*X"!0",<=PH```,*T8F(`T&$"`!?"J +M#J`&R7`APH'BS"(B@"#T`Q2!,)3ARB!%`,H@1@"'W,`@!@,"N#`@@P^@`!@L +M$FDP((`/H`"T+@]X$'/*(((/``"2`*@*(OG/(&(#R7#""Z``!-FM`N_XH\#@ +M>/'`2@K/^$H@`"C/=:```"`['1B4`!8`0,]VH```%!"F`!8/0(#GRB"!#P`` +M+"5<"B'YRB'!`^JF3!W8DP/8$Z8!V$L=&)`\'1B4H@R``&$"S_C@>/'`^@GO +M^!'9SW:!`-0S-@J@"``+3,;H9]"M\"`(>4Z!-K%7@`9?ZXRB""#P``*"7L"2+YRB'"``'8`*?/ +M'`@00.>N2"@+8:$X/'`_@CO^`+9IL%B":`) +MBW`$%)IQ`-@$\$`D0"#R<"@! +M)@":<``6CT``%HU`&0T2%(PEPY_*(((/```J)=@((OG*(4(#`!8`00`6D4`` +M%H!``!8`08\-$Q0*(X`O@`#4J00HOB4P($`^2B4`+8#@S":BD/'`@@^/^$8-X`.A +MP8'@`=UJ#>`#PB5!$PAQ%@Z@!*EP*@W@`PAUO66T?8?H`"6/'X``3*0%\``E +MCQ^``*"DBW;)<)(/8`D!V1H-P`,N#>`#.G!F#>`#&G`(<\]P@`#@5@H0A``J +M<0#`"G*Z#F_[N'?)<'X(H``$V6D'K_BAP.!X\<"BP:(+(`$`V(MP1@]@"0'9 +M@<`^#V`)`=D`PL]Q@`#@5@"!@.+/(.(`T"#A``"A`<#/<8``X'%:#:`$!*$" +M".`#`,!B"8``HL#1P.!^X'CQP.'%I,&+=:EPY@Y@"0S9W@]/_08.@`2>"2`$ +MJ7`!V$/`@\#Z#V``!-DJ#^_\`-@!!Z_XI,#@>/'`H<&+<,8.8`D!V0#!SW"` +M`*!Q"@F@`#JPH<#1P.!^\<#AQ;'!BW6I<,]Q@`!@T"8*[_A$V@0<@#\!``"` +M?@R```KH`,!"P,]P@`#L5`"``(!#P`#9"O`[>$-P8A`"!Q)I@W!%H`'A\0D4 +M@L]P@`#L5""``H%-P`.!3L"I<&H/8`!$V74&K_BQP.!X\<#AQ;?!BW`V#F`) +M%]F#P,]U@`#\J:EQ7@U@!U#:@#6`) +MBW#/<*#^(`,%VA6Z!*(DP`7!!*(DH@;!4R#/`"2B1+A3()<`%0\S%`'!G@@@ +M`BAP`<$1"%``SW```!`TF@WO^"3"!!24,,]P@`"D/D`@%0)`(!`'BB`(!@0L +M/B!:<#`E32X3;R#!"B&`+X``6+,5(!8``"&.)0"&K0D?`!,(7P)SV(VXZ7%. +M#>_X!<(`V20>0A`JMC_8"[9*<`0L/B"%Y30@0"[,)>*1!O0GN`JV*[8/\!L- +M$1)!*`$#*+@'><.Y)!0`,06Y.&#(N`JV`L#I<@/!0":#%K8/8`<*)``%+R`' +MH![RBG#&">`)Z7$1%(`P(!X`%8:X$1P",(H@_P]&P`"&!<&&(`H`*+G`N0>Y +M)7@`INEP=@@O^HIQ`=T*\`+="/#IN`'=RB4B$DH@`""!Y>3T(@Q@!.EP)!0` +M,0RV2G`$+#X@,"5!+@`6$Q`%P`;"'0D1`AD*'@)!*`$"P+E!*\,AP+MP<=`B +M(@*GND;"I[A%P`8C@2!$>`5Y(*89"QXBZ+G*(`$%RB'!`W0*81K*(N$'$12` +M,!X>PA4E"%X!(!0!,2(4`#$GM@BV"ND!%((PBG"`XNEQRB+A!T8*0!HB"J_^ +M`"9`)"#`"P@?``\($2`1%(`P$PA>``(4`3$FMG()X`#IEP'A0",8ISH@^O^XHD`0"0X,HE +M)A$F#6`&Z7`@P!$4@3`-"!X`*'2&)+V?)_($%A`0"L)!IAL)'@`$(@`$$'+* +M(((/``"C(80+XOC*(0($(8;I<'()X``1%((PBG$!ADX,K_L`VB##Z7!2(P,` +M"L$*`07``-D/(<$#SW*``$@[88(="!X!)7OVR6&B$2`` +MAV&B#0L>(2"")'@`HO;)&P@.!0"&Y[C*("$` +MSR#!`\@(80G*(>$#(,**<%(B`@#I<>H(8!K`NNEPC@RO_"84`3'/<*``@`Q` +M&(`/`*`(`.K)`MD`'P!`J7`V#6```=JE`J_XJ\#QP.'%L,&+=:EPM@I@"1#9 +M!=G/<*#^1`,5N02A(,`$H0(4`#$$H0$4@#`$H2X/H`:I<,]PH`"`#$`8@`\` +MH`@`ZLD"V0`?`$`!V.(,8``(/'`^@BO^`+9L\$Z"6`)BW".P8+&SW6``-BCJ7!>"&`'$-I+=X`G`A'I +M<,EQ3@A@!S#:@L`J"F``1-D`P!4('@#I<$X,+_HPV:EP1@PO^A#9$0&O^+/` +MX'CQP)((K_B*(40'@B0$.$`DS3#&"&`)J7`AP'()8`$`V1IPSW&``*0^A"@( +M!@/`,"%1#E8@$PJ+=X/&"G`F#N`"(<&,(,./0"02-P'""O1`*`$DSW```&0T +MA@CO^$5Y`<(CCPL)TP`1"A0$SW```%`T=@C/^&*&(X8+"V0`088#CX7H`B'` +M`!4*!0`0N\]P``!1-%8([_AE>0`2`2"8X*(D0'!<`&PF)P +MR@@O^P`BP01A\!4)40`1"-X`BB'_#R"FH[@+IP'`SW&``%BS`[@5>`!AHPC? +M`0"&C"#_CTOTJ7`G;MX.(`>*(D0'R@_O^BIP-.@J0!2F#2`9`=@I\"?IJ7`G;I8.(`>* +M(D0'`<`!W``L`!!R#2`)']D#%(`P%PA1``N'A;@+I\]P`0`DXW8)#_L-\,]P +M@`#@J4(/@`@%P<]P@`!`NJ(/H`AB<6H)0``1!V_X@"0$..!X\<"N#F_X&=F^ +MP8MU^@X@":EP"L#/=H``[+L`IHO`)&[B#B`'#MI`)@`?R@X@"2*68@H@&B#` +MB.C/<```8#2^#J_X`,$DC83ARB")#P``832H#HGX`-X9\!8E@!,HB,]R@`!8 +MLQ-I%7@`8E$@0(+`*2($RB""#P``8C2`#J+XQ2&"`P'FSWX$C=$.`I`@P(HE +M"!9:<*QX"B&`+X``Y#]`(9,L-"-`+O_96<":P!H*+_H0V@#9SW"```1`0"`0 +M!$`@!`5`($4$$/`$*GXC`"$"<#9Z58H`(4-T2:PV>UN31;0!X2]Y2G*L>B]T +M,B`"(SL)@P`:9#9Z5(IR:8-S:!N$`")T-GQ;E&H;A```VB'$U0H#@Y-J@W3H +MC&@3#@&M#L"3`>)/>O3Q!.HAP)#H!"I^(P44@3`&%``Q`"5%#@`=0@``(U,N +M`!L$("'"&0I2``0J?B."P`.Z`"1!#JH-(`/KS#K@!HW8/``"AP-'`X'[@>/'`X<7/=8$` +M.#NI<%8(+_J*(0L$ZLD`I01M_@P@"1'95B5`$H8,(`DBE5H([_D/A14%3_CQ +MP'(,3_BDP0`6C4``%H%``"6`'X``C,0@J``6`$&I<&(-(`$!V8P@PX]*)``@ +M&G`&],8)X`!4V%$"```"#(_\SW&``%BS0,`3;15X"PTU%`)A$0I>`G;8C;B& +M#*_XJ7'/=H$`.#7)<+9X>@P@"0+9SW"!`'@T0<"V>&H,(`D"V19M0L`*)X`O +M@0"X-0+'ZG`?9^EP3@P@"1#9SW"!`/@TM7A"#"`)`=GI<(X,X`@0V18F61,! +M$8`PD.#*((H/``!W`,\@:@,0#*KXRB%*`X#8`"68'X``Q+(`&`(P"B.`+X`` +MB-)*(@`@(_`$Z``8@C0()%0D-P@0(0#`S@B@`P]X$P[U(`AQ#PX0(`L.1"0) +M"44%`-Z`YLH@@0\``'@`SR!A`[P+H?C*(L$#0")2($PB`*3\``8``L`5((`$ +M,""'P```!@R(Q8@0\=!*M4"`=YD\B/! +M$D$OPQ#!NP'C02]`%,&X`"#1`*#AS"(A@!CR"0\>$A$+E0`)W`J\!"<"$QT* +M``,9"-4`#0B1`!$/'A(-"Y$`#0\>$LSAQ/8`W@/P`=[/UIB57IZ8AIBSW.``$#92F,!WE$BP('/`L,42"!X"R`&J7`! +MPL]P```8%;9Z()()(0```+*N#```)0)O^*3`X'CQP/X)3_BBP8MP`=]""B`) +MZ7$`W8X.H`"I<,]V@`#`S`"&@.![]*EQ#_``(8(/@`!@;0P2P``!X0;@#*H: +M$L``+WD&X!JJYPF2@P#9#_``(8(/@`"`;0@2P``!X0;@"*H2$L``+WD&X!*J +MYPE2@@#8"_``(((/@`"@;0X2P0`!X`;A+JH/>.\(4H8`V`OP`"""#X``P&T( +M$L$``>`&X2BJ#WCO"!*#`-D+\``A@@^``.!M#!+```'A!N`,JB]Y[PF2@0#= +M*/"$+0$3+W``(((/@`#`57R*SW&``*!5&NM=BCA@1"H^!PC@C@Q@`S`@0`XZ +M<(8.8`.I"2`)`-TQ\(0M`1,O<``@@P^``,!57(O/ +M<8``H%4CZH0M"Q+/6O?:,-$I$&"P``S0!/ +M^.!X\"&_X"-FBP>H2#[;/=:```"[5A28((`F+<"_(`,'/"1X@.`!V,!X2WC*(($/``"F*%0(@?@`V!6EQ@O@"#_8`,`$ +M%`$Q%:6""N`(@KG5I98*(`#J&MBS60!O^*+`X'C@?N!XH01`&9T$0!GQP.'% +M"'6V#6`)%-C^"6`"!85%`$_XX'@*(P"`\<`,\B,+4``E"Y``<-B-N.X/;_AH +M<0?P*=@2N/`@0```HM'`X'X5V!.X^O$KV!*X]O'@>/'`X<4A@`#=#>D7"5`` +M%PF0`&[8M@]O^(VXJ7`$\`+8`O`!V,]QH`"`'!NA/@U@"138U0@@EP\)D@"I<'(*H```V@[P`-X)\.QR`8=N#^__J7$!Y;!] +M`>8`E^\.!)"%!P_X`!8!02"P`!:!0%,A0@!!H$$IP@!2(@(`P+I"H$$I@@#` +MND.@)+G`N2:@`!:!0,]QH`"`'#J!X'\EH.!X\<`*Z!<(4``9")``;]@%!V_X +MC;@IV!*X!_`5V!.X!?`KV!*X3WHU>$"@T<#@?N!X!]G/<*``@!P[H($$8`D4 +MV/'`G@X/^`AVSW>@```0#1<`EBAU0B``"$@@`0!`)0`2$'$(#44)!VT$((`/ +M``#\_YVXG[@P'QB0ZLD`'P!`(KT%\``?`$`$YF&]^PVUD`"&`MD""2```=JM +M!@_X\<`Z#@_X"'8H=PHA@"^@```0#1$`IAIS0B``"$@@`0`$;WA@!.`0<4AU +MI`Q%"0`@P",'X`0@@`\``/S_G;B?N#`9&*#JR0`?`$`BOP;P!!8!%&&_`!]` +M0/OO02B!(`;P`!\`0`3E8;GY";6``(4"V88((``!VB4&#_C@>`/;SW*@```0 +M!AK8@#`:F(\`H!@``MH\&H*PSQ(#M@`?P$"?$@*W`>*?&IRP`!\`0.H2`K;/ +M<*```"``'X!``!]`0`'9):#/<8``&+X"@4"``!^`0`.!`(`"V2$`(``!VL]P +MH`"`#$`8@`\`H`0`ZLD"V0D`(``!V@/;SW2@```$:J3/=*````P'Z1,)4``1 +M"9$``J0$\`BL`O`$M&>DSW"@```@`^IF&-B`.X#/<(``4#W@?R"@X'A-!8`" +M8(!`@1T+@0!BD$*1%0N!`&*`0H$-"X$`1I`&D0D*```!V`/P`-C@?O'`#@\@ +M`@?8`=G/<*```!TKH,(-H`(H<-'`X'X#@`0@@`\@````0B``@.!_RB!B``#; +M%PJ0`$.!`=OMND"!P'OMNL\C80!EH&"!08%@H$&@8H%#@6*@0Z`!@<]R@``8 +M*BBXQ;@5H@"!/+@C@<&X*+G!N3A@X'\6HO'`<@Z``A8/@`+1P.!^X'CQP%H, +M#_@(=4AWI@V@`FAV@.!X#*("RB!"`Q,.41"I<)8.H`+I<9H/@`*9!`_XX'C1 +M`4`9`]G/<*````0HH##(SW*!`-PK89+/<8``M*84>022:+'+$@.VF!D$`*`3 +M`0`#@H8APP\E>.!_H!L``.!X\<#AQ<]P@0"H.@AU`(!/"%$`#'`]"%\&SW*` +M`+`(+X+/<*``@$0+"=X"$H`"\!&`SW&@`(`@,H%AN!D)!`"^$@`!$0D%``.% +MAB#/#YNX`Z5Z"N_ZJ7``V`"E"00/^.!X\<"."P_X"';/=8$`V#H`A1<(40!6 +M"N_ZJ7``V`"E`879`R_X`*9?V)4#;_B,N.!XX'[@>.$'``/QP-X/``-^#@`# +MT<#@?N!X\""``J7&9`P_XX'CQP,(-0`'6 +M"$_\T<#@?N!X\<#AQ0AU1@X@`R]XP@O`!4H,H!FI<+8(3_S."2`8!MAI`P_X +MI0!/_/'`Z@H/^`AW*'4F"6_\2';/<*```"!;@,EQHGH_NNEPJ@R@&5(B`@`5 +M"%$`SW"``."^B@M@"$`E01(#\$!^%0,/^.!X\<#/<(``X+X""T`()@\``]'` +MX'[QP)(*#_@(=L]WH```(+N'@^#*(($/```N,*P"0?BN#2`#SW@J"\`%.X<- +M"40#`B%``P?P#B6`'_____\X8`*^0W8*'A@0M0(O^`X:&##@>/'`X<7/<(`` +M")J@B(/ERB"!#P``(C!@`D'XM@X``UX-(`.I<)4"#_C!`X`9\"X`9R@\/ +M_-'`X'[@>/'`X<6F#R_\"'6I<`#9V@N@&2AR:0(/^/'`Y@S@`#S8SW&``.0R +M`*'1P.!^SW"``.`R`(#@?X8@_@_@>,]P@`#@,@"`X'^&(/D/X'CQP.'%`-C/ +M=8``X#*F#.```*6&(/D/'0(O^`"EP1(!M@\A`0#@?\$:6+#@>,]P@`#L,NT! +M0`C@>/'`SW*``.PR`(*/Z,]P@`#@=QJ`A2@/"@:"`X`@@"=Q,@I@"$APT<#@ +M?N!X\<#/<(``X%8!@!,(W@-."6_X#]B`X%@*0OC1P.!^X'CQP,]P@`#@5@&` +M[;@L"6+XRB!B`]'`X'[!$@&V$"$!`.!_P1I8L.!X\<"*(/\/P1H8L,]P@`#@ +M5@&`SW&``&@L&P@>`PF!SW*```@S)H(C@2"!&6&R"6`(2'#1P.!^X'CQP.'% +MSW"```B:H(CB"&`#J7`+Z,]P@`#@5@&`[+AX"6+]RB!"`RD!#_C@>/'`SW"` +M`.!6`8#LN+P)0OW1P.!^\<#/<(``X%8!@,]Q@`!H+!L('@,)@<]R@``(,R:" +M(X$@@1EA0@E@"$APT<#@?N!X\<#AQ<]U@`#@5@&%$0@>`UH(;_@,V(#@P`E" +M^@&%$PA>`TH(;_@-V(#@U`_"^+$`#_C@>/'`-@@/^`AVSW6``.!6`845"-X! +M(@AO^`?8@.!T".+ZRB""`P&%%P@>`@X(;_@(V(#@*`CB^LH@@@,!A14('@#V +M#R_X`-B`X-0*(OO*(((#`847"!X!X@\O^`38@.#(">+ZRB""`P&%%0A>`L]U@`"8,P@=0A3/=J````PSAL]P +M@`!TJ2"@4@C@!4AP"'<$AA2&Y*9T$``@SW&@```@9.`0H0'8!QD8@!#8`*$Z +M$@`AD>#*($P$R?;I<`#9"-KB"2``J7,(YXSH((VJVA$)@0`AC0T)@0`BC0D) +MT```V2'P(Y4M"1`"C"$8@A#R\0F!CP``AMWI<`;9`=JF"2``0"4#$@?G(]D- +M\"#8ZO'I<`G9`=J."2``0"4#$@KG#-E(C2$*400Z$@(A8FD9"X4`Z7`"VFX) +M(`!`)8,2@.#*("$(^0;/]_'`J@[/]\60SW&``$`S`-P5#H`?``#__\]R@`"` +M,W6*$0N3`"AP`-F&"J_Y6-H>\#D.DQ(6(8T#@K6ED&&[%B%.`X"FI9!UJK9Y +M@[%O?"60=XIP<1:*T"!A``?R#0A>``D,41"@N!:JK0;/]^'%X<;/=(``F#,# +ME,]Q@`"`,XP@&(+/``#8!/`!X`]X-0B3`ACK%B(! +M`**1+PU1$,.1I91AN^D.09//``I`N#`>`+H^KQ\<#/ +M<(``0#-0&(`/#P#__\]Q@``DS0"!`>"Z#>__`*$+"!$((@_/_P#8T<#@?N!X +M\/'`$@WO]P'8X<#/=8``0#,4A<]V#P#__Q\( +M@`.+<`39%@\@!F#:%(7/AP.'%SW.``(`S-8O/ +M@"B`-C@?\'%X'C/#,_WIL$:<"AU3L&/PP#9*'((\`3C_!,,@!)J@W"`H`'B\PI$@P7: +M%;H0&@`$!O`2:3`D`#`!X02B]PE$@\]V@`!4-`.&0"62$$)PC"#'CXMW2B%` +M(([WSW"@```,,X`4@`T)`0!F#L`!*G`#\`#8".@CA@`A@`0#I@'8!O`&A@'@ +M!J8`V"_H4R#`)$`M`18%>0&&SW*!`$`;%2(,`""D`>`!I@#;"?#P)\$0%2(, +M`""D`>`!I@'C\PM$@\]PH```(#N``885>B"B)(8!X`ATAB3'GP'A)*8%\B6& +M`>$EILBX`:8DW-,#[_>FP.!X\<#/<($`0!M5V4#:=@]O^8NZ+@DO_!;8T<#@ +M?@4```#QP.'%M,&+=:EPSW&``!#0'@_O]U#:`<`)Z&H+@`('Z!()P`&6#J`! +MJ7"I`^_WM,#QP,]P@`!P"0"(SW&``(@TC"`"@""102D,`Q'R'PG?`C-H-7D` +M(8(/@`!8LR:2#R$#`W!YM@@@`&:RT<#@?N!X\<#J"L_W"'\-%)(M`\_WX'CQP.'%`=GAP4"`(8#/<(``")J@ +MB(3J[@@``PAQSW"``-A5A"T!$Z(.X`,P($`.BW#R"Z__!-D!`^_WH<#QP(8* +M[_<3>TAUBB+_#X#@RB)J`,HC"@!3>#-\@.'*)@L0RB:*$,HA"P,4(<``9@OO +M]SMYS'B]`N_W`!U`'N!X\<`^"L_W"';/=8``R#0!A2AW0"40%#'H_]D(N00G +M0!`P<,H@@@\``*$A5`HB^,HAP@/R?^]_\""#(Q[P17DCI1KP+RC!`$X@C`<` +MV0\A`0,R>`1[`-X#\`'F'0X5$L]R@``8-8IB]0Z!D$.%T0^/DT1X`Z7GZRT" +MS_?@>/'`"'//<(``R#1`(`P$`8`4Z/`DP!`5"AX`)'@="0``SW```*0A!_`1 +M"0``SW```*`AV@DO^&ART<#@?N'%SW*``*`/`-@+\!8B`0"`@17;$[LA@95[ +M(*,!X/$(5(/@?\'%X'CQP&()S_<,<+T(W@4L<+D(G@//=*H```2BA`?802T! +M$B]YB;G/=H``<`EHCL]R@`"P"`Z[97DPHL]S@``LJ:VC+J,@A$`2CP"4YRNC +M&/(&]C$/D1(CN1CP&P_0'>[G$O1%*?X"Y[U!*<%PPB%B``?8"O!%*?X"02D! +M<0;P(KD$\`#9"-@NHD&$+Z-,H^2ZRB`B`N&ZRB`A`@\*G@$$VD.N2I."NDJS +M&PC1`14)M`,'V,]RH```$%2"!PF```C8A^#8"((%!0'/]P#9SW"E```<)J#@ +M?O'`"^F`X`'9RB`A`,HAX@#*(&(`"_"`X,H@80#*(0$`!?(9"%$``]D`V,]R +MIP``2#NB'*+1P.!^SW```(T9A0`/^.!X\.'%SW6E``"!!*5@I1"Z +M17DEI1@=`!'@?\'%X'CQP/(/C_<(="AW2'8:$="94"$FD4 +M>,=P@`!@XD"([PR!D`&(ZP\!D`KPSW```,DHB7$"""_XZ7(`V1)I%'C'<(`` +M8.(B@,]RIP``2#:B@H@!V6^"H+N%>V^B;X*#B-Z['[R%>V^B!(C/=:0``$`# +MI>]_@-C/&"``'X`` +M\%/4>`"(%:+/<(``-%'6>/`@P`,6HL]P@`"D4=9X\"#``Q3PSW"``!12UGCU +M>&"``'X``U%/4>`"(%:(M@9HAS8%Z(8V!BB@-@:HANB +M`'X``1,#4>`"(`:+/<(``0,'5>/0@ +MP`,"HL]P@`!@P-9X]7@@@".B'(`&HDOP8J)CHF:B1_",)L*6.O*,)D*6+?*, +M)L*5)?)")HP9;0Q5%C,F#'.``!C/0"<`+U +M"D2`"O``W`;P`H,5(@T#`*4!Y/<,1)#@?\'%\<"6#*_W"'+/<(``L#7P((T` +MSW"``*@U3F"CZ<]W@``8-@"'@.#*(((/``#'**0,XO?*(8(``=@`IP#8#O#T +M)0(0*=D2N?`A@@#/<8$`@",5>4"A`>`0>.<(@H,7\`#8#O#T)0,0*=H2NL]Q +M@0"`(_`A`0!U>B"B`>`0>.<(@H,`V<]P@``8-B"@=02/]^!X"+@$((`/```` +M_X4@@0O/<:0``$`)H>!^SW"D``!`,Z#@?N!X$+DE>,]QIP``2`*AX'[@>"T( +MLP,`W,]SI0``@%.#!"*"#___`,!3H\]R@`!XP15Z]")``#.#)7@3HR'PSW*` +M`+#!8FH#\`'DCWP3#!,2EB\PA!@`+P`-S/.!^X'CQP.'%`=V-Z,]PH`"`,`N``=T$((`/`(```(#@P'UZ"H`" +MSW&``.!62XD`V8#ES"`B@`/R`^HH<`+P`=AY`X_W\<#AQ0AUSW"A```&%(`$ +M((`/`(#_``"E$@^O^`"-`*T>#Z_XJ7`#C88@_0])`Z_W1[C@>*'!\<`(V\]R +MH`"`#'"B`!\`0"AP`MEJ#6__`=K1P.!_H<#@>`?9SW*@```$+Z()\"Z""2!# +M`"2"8GAY822B^NC@?N!X\<"*"H_W"'8P$@$VSW"``+2F-'@1B!#HRQ(!M@&! +M&0A>`\01``#/<8``S#L5>0"!$.``H:8*`!]&#F`#,,C+R0'9H!A``,EP'@[@ +M'B\2`3;+$@*VSW.``%BS$(I`(PT$`[@5>$`C@0,;8P>3+PA2`&&X![-0BA-J +M%7@088_H`-@/((``;@A@"!_9R\D0B#-H-7DQ9>&YF`]"'ET"C_?@>/'`X<7/ +M=8``4#8`A1;H?@EO^P+8SW"!`&`D8@TO^0S9SW"!`-PC5@TO^839`-D@I<]P +M@0!L)"B@)0*/]\]PH```(#N`SW"``,"IX'\@H.!X\<"6"8_WSW:``$@V`(;/ +M=:```"`!X`"F>X7/<8``P*E@H8KJ`]G/<($`8"1*#J_X(*!;\,]W@`!,-B"' +M@.',(**`)/3/X6`@@L+!`-[A8)[!_!;A0XD@Q______6V// +M=($`8"RDA"J[">U&@'IB#PV%$$6$"KI982*@`MBJ#"_[`=D9`8_WX'CQP,]Q +M`0`@$L]R`0"8#\]S`0"$#_((;_L"V%#9SW"``(0T(*`$V<]P@`!(I""@SW"` +M`#PV(*#1P.!^X'BCP?'`X<7/=8``<*O/=(``\*O/`#JP7P`-@#JP*KE!U`$)@=@!`*\`*+`>`"JP*+"0A1`0#8$+16"$`<$-R; +M`(_WX'CQP!H(C_?/=8``\*L/E<]W@`!PJP#>%>@0E1/HSW"@```@.X``AP)Y +MH@^O^`'8"PB4`-"U!?"C'X(3S[7.M44`C_?@>/'`)@G/^(7@`=C"(`4`T<#@ +M?N!X\<`2"<_XC.`!V,(@#@#1P.!^X'CQP*(/3_=:<#IQSW>``%`V((=H=AIR +MB'6$Z04F?I,']#W8"+C.#Z_WR7+/<8``3#8`&4`$SW&``#@V`!D`!`#9SW"` +M`$0V(*#/<(``2#8@H,EP^@YO^*EQSW&``.`M`*'/<8``0#8`&8`$`=C/<8$` +M;"0`IPBA!8$!X!X([_@%H0+8P@HO^R[9SW&@```@.X$"X2*@`M@."R_[`=EA +M!T_W\<`&#T_WSW"@```@^X#<&(`/`P!`#<]V@`!$-@"&`-T!X,]S@0!L)":# +M`*8!X2:CUPI1`,]Q@`#D+:"ASW&``$PV(($3"5$`@>`'V"@H*(&\`/9SW"! +M`&`D(*!5!D_WSW*``(P/`(*)Z,]Q@`!(#P"!`>``H0'8`*+@?H?HSW&``$@/ +M`($!X`"AX'X`V03P`>$O>14)4P'/D"2\0B!@`/P_]G@?RAPX'@` +MV<]P@`",#^!_(*!"*`("3WG!X83VVN$!V&$]MKA`=G#]@#9 +MA.D`V!+PUW```%I:S"""CP``4$%8W,PB`H,#]`'8`O``V/#H`=C@?N!X\<#A +MQ<]P@`!(#P"`SW,``%I:?0@T`0#:2'1H<`OPSW&``$P/E7F@D2&1@.'*($(# +M`>0+#!41ZPC`@%$(P0`$W$AS!/`!VP'D)0P5%,]Q@`!,#Y5YH)$AD>T)@(!0 +M<"*.)W@CCB=X)(XG>"6._]XG>``@A0^``*3Q`!6/`#$/@!.N#N__:'`-"',! +M`-TA",,#!O`9#U(1%0P0`,]P@`!,#_5X(9`!W6&Y(;`1[5X((`!H<``=`@`7 +M"(`#SW&``$P/%7D!D0'@`;$`&80!E01/]^!X\<#AQ0#=SW"``$@/H*#/<(`` +MI/'_V1H(+_E!::EQ"/#/<(``3`\U>*&P`>'U"12$;01/]PAQ`-R)<`?P09*` +MXLHD`1`!X!<(%03/F"2Z0G!@`7P_]B&Y,H@!@/@?O'`Q@M/]\]Q +M@0#$*R"!.0E1`,]R@`#/'` +M9@M/]PAUSW```,@;3@X``%,@S@+/<```S!L^#@``R[@-#@00`B8!$`CPSW&` +M`%0W(($">=EA(*7/<(``5#<`@"*X$'',(>:``=C*("8`@0-/]\]Q@``842*! +M`-@3"9X%];GA(,('9-C@?US8X'[QP&_8!KCF#:_X"-D'V`JXV@VO^`79<=@& +MN-(-K_@$V='`X'[QP+X*;_AIS"B$`(0C%"B/`(0"E"<`*(H`A`Z4('4`1 +M0"4/&&2O"L-&KV2E"\,EKV6E`-MFI6*O8Z\$'0`1!Q^"$?_>R7&.#N_X+W($ +MA07HR7&"#N_X18\%A07H_]EV#N_X18\`WPOP%2'"(R"*J7!"BL8,K_GI/'`\@E/]Z'!"B<`D"AU +M&G)`(`X()HX&\@D-0Q`#AXWH`(=`+0(2$+@%>L]P``#I#A(*K_=%><]P@0`` +M=!T(!"#/<($``'H2<,H@C0\``/@.\`FM]\HA#01`CJ"N`HY!KAP?`!0.Z`.. +M">@@A^_8$+D$N*5YX@FO]V2.`=@#KH;P`=@"KDHC`""*),,O)(X#'L(4`!:1 +M$`:.'!<0$`QY0X<`(4!T"&(`W0D(``6AAQ5]1H<5ZF#!`AQ"-`3M`8T#\/_8 +M`1P",`3M`XT#\/_8`QP",(MQ8'KI<"2.DG',)2*0#/0`APBY$+@%><]P``#H +M#E()K_<%(4$$)(Y!C4HB0"!0<<(B@20U"8``!8<`V@WH*6`7"0`%`8".( +M"PD`!0*'\"!"`(#BRB!"!.,@@@#*(0($_]@$KB.-$PD`!0*'\"!"`"IP8'H* +M<3<*$"`!C02N!(``%BV$Z;/<*4```P%@!FF +ME>E[$@`&$'D$((`/__\``#"XT!]`$-0?`!`4AC6&*+A6ABBY2@MO_"BZSW&` +M`#`)(A&``,]R@`!0"1JF)!&``!NF)A&``!RF"(HIBAVF2HH^IFX*;_Q?IH0M +M"!;/<(``K#XP($`.$PA0`6H,@`&`X,PE89`%]`'8B@XO_Q>F(0!O]T$?6!/@ +M>/'`L@\/]PAV*'7/<8``6+,3;15X`6'IN@(A1$(5`$KV`BX'@]O]XAQ"(51!P_WX'@=>00A +M@0]55555(GC/<3,S,S,$($(`(K@$>5EA02D``3A@!""`#P\/#P\$*(`/`0$! +M`>!_02D`=O'`G@X/]PAVSW"@```@NX`&#V`&*'`")@$0"PE2`#UE`_#">`)] +MY08O]ZEP\ZN`>`V5Z2:0<'(`?`&D``.!^ +MX'@%V16Y"*$<&8`/`&H```J!X'[@>`7:%;H(HBFB'!J`#P!I``#@?N!XHL'Q +MP,]R@`"4-RZ"4PG?`#$(T0`#@DL(40`1@L]SH```(`'@$:+$$P``"*(;@P>B +M`=@)HBL)W@&""J`'`=@1\!\(D0`3@L]SH```(`'@$Z+`$P``#:(;@PRBX0D? +M@M'`X'^BP*+!\`0[P$H;/`6I0*%SW&``/`W084!H02%0*$"H0>%2(5">`6A!85&A4)X`Z$H``,PX!(\@I@*F!8]`)@$<`Z9DV`6F!Z9`)P`4 +MR@K@!83:"H4KA6?:(GAON`BF#(4MA2)X"J8FEP67$+DE>`:F))<#EQ"Y)7@$ +MI@IP":8+ILEPM-D^#D`%`-@`I0.EX@B@!P2E80,/]_'`>@B``HP@_X\'\@#9 +MSW"``&0Y(*#1P.!^X'CQP-X*#_=:"(`"C"#_CS[R>0I1`(X)[_H&V`AW6@GO +M^@;8&G#/=8``9#D"A0#>`J?2#R`""8W%IPBOQJ<0'X`?```&/,"G#]D8&$`@ +M%=D<&$`@0"`!(D`E`!,*"N`%!MHL&(`C084&V`#9H@KO^@\A@0#/<8``A$@4 +M@42-#R"``!2A"@OO^@;8N0(/]_'`3@H/]QIP"B&`+Z````P`W@CP$!$"(+YA +MNF(0&8`@(VYA"$0@SW"@`&`,B(AHB$B(0"H-`F5]W0P1DX+ES"7BD\PE(I?* +M)D(0'/3/=X$`;":"KT2O2(ACKPB(1:\&KQ$-\A/":0=OJ@XO]PW9#>81#1$7 +M0"<`%9H.+_<-V0WF$!$!(`(@@",981`90"`A`B_W`=CQP+X)#_>,(`2`B@`F +M``AU@PT4%<]W@0`L)@H@@"^!`*PF5B=`%%H.+_<"V0@0`"%C"%$`5B>`%$8. +M+_<$V>EP@"""`CH.+_<"V0H0`"%'"',!:+T"N#\-!!``W@KP52=`&=5X&@XO +M]P399+T!YL]^"A``(>L.`I!5)\`8`@XO]P+9#!``(0\(L.`I#/<:````P$@;A@!*$! +MV&$!#_?@>/'`H.`(<0#8"??/<($`+"8YH*8-+_=HX`'8T<#@?N!X\<#&""_W +M`=J,(`2`PB*-`(;@.G"T`"4`RB!E(`HC@"^@```,:!.`(,]W@0`,)T`G4A%H +M$X$@`*\"CR&O&6&0X4H@`"#*((X@0"<4$0+>;PA1(`#=#_!"#2_W".`"CP'E +M`>`"KP*/KWTS:#5Y,B)!(#YF(8]'#4,0`[@5>()P&@TO]P'9(H\#N35Y`"&` +M#X$`-"<_W!-D"CP.X%7A"/A@)8BG"7*(!N9*(``@ +M$!,!(`(A@",981`;0"!1`"_W"G#@>/'`#@@/]Z'!"'4H=FL--!$`V(MPL@PO +M]P39`,#7\@KV0PB!#_(!`%"I<$X((`#)<2'P&PB`#YH)4&\G"($/ +MFA-0;ZEPM@MO^,EQ$_"I<&(-[__)<0_PJ7#6#N__R7$)\,]QH```#`2!9+VX +M8`2A`=@%`"_WH<#QP(H/S_:,(`2`B@`F``AU@PT4%<]W@0`L)@H@@"^!`*PF +M52=`&R8,+_<"V300`"%C"%$`52?`&Q(,+_<$V>EP@"""#08,+_<"V380`"%' +M"',!:+T"N#\-!!``W@KP5B<`%M5XY@LO]P399+T!YL]^-A``(>L.`I!6)\`5 +MS@LO]P+9.!``(0\(`%M5XJ@LO]P399+T! +MYL]^.!``(>L.`I#/<:````P$@;A@!*$!V"T'S_;@>/'`N@[/]EIQ`-W/,H-+_LR(E`."'<&\`(-@`<0)X\3%N\O*,$#3B".!P0N?A0` +M(8!_@`"D/G00`08"@"5]W0@0@LEPP@L@&@IQZO'/=H``2#L`AJ5X`*:I<,X, +MH``#9"O!`V)^XSW*``"P6 +M-7H`H@'A(0D5"`#:[,D/(D(`2W@(\NW)2WCN]=#8G[CN\0#8[/'@?N!X\<#: +M#<_VE@L@`@'=@>#`?2X.8`>[?0#9SW*@``!(SW>@`(!$SW"@`(Q$.*!D&IB/ +M"`````C89!H8@,]VH```10`>@!\`0```X'@@IL]P@`"\`1!X%*?/<(``J`,0 +M>!6G--@1IQS8$JZ#&`'`=AX'X`?@````'P?@!^`````8!^`'P!&.`!L'X`?``8;`)$%S_;@ +M>&HA0`%!*<``4B```,"X$WC!N(`@"`@J(@``RW-5!2_W?-C@>/'`U@S/]J[! +M"'<:$(B(=9IPS@VO_\EQ.W`!ATC'()"&Y0*'0.&&('\/.&`# +MX`0@D@\``/S_RB:!(PKRSW````1"\@PO]ZEQBB;#+XC`T@UO^#IP08?/=J`` +M``0@DAEA0G`@LEIP+R,(("^&SW"``'BING`@H*^F6@L@`,IP!^BV"Z`'J7`3 +M",4$`!4`(`^FBB7_'S;P$!R`/P"````CAR"1AB']#(PA`H)O($,`"/1O(,,` +M$!R`/P"``0`CAR"1AB'\`(PA`H`#]("X1,`('$`V#!P"-10<`#08',`U'!P" +M-@6&!!R$-$#`BW%V"R``RG`(=2H.[_DJ<``5`"`/IJEP#03O]J[`\<#&"\_V +M]!P(L%IQNG(:``%BS/H^$+@@6!+F&(?X#!2$6`""'`"&8?X``I#X*(4`N%PE>`G00 +M`C;/<```PR'6"R_WR7,!A0#9A@]O^#C:@<>*<,H/H`7I<EQ`"&` +M+X``W#\#I0&%&-D@L$\GP""$N$&%C;@!H@#`0X6%(`$"`+(BI0"%'-D@H"&% +M`8&DN`&A`840&((%`84S&,($`84H&$`&`84Q&(($`84R&(($`84T&$0%`84, +MX%H+K_^*<3@0`#`Q"!X``84:V2"P(J4CA0"1%AG$!(>X`+%3(,`@#+$AA0&! +MK;@!H2&%`8&4N`&AY0+O]J/`X'CQP*H*S_;T'`BP>G$:L=R@`!8LQZ*A"X(%@2XAB#^`P4@5``@@@HB0"X="5X" +MSW"``'1`,"""!,]P``##(<(*+_?)EPK@Z@ +M!2IQR7#B"&`!*G$`(H`O@`#R"!T<#@ +M?O'`H@GO]@ARJ,&&X"AVRB4A$`GRSW````1"P@DO]TAQ_]V+<4H*(`"I<$L( +M40`&PA"]!<,CP!X4`3&E>3,*40#/,]R +M@`!D-PIB$0H0!<]R@`!XN@IB"0I#``#8"O`'N!5X!;D980`A@`^!`,`8X'[@ +M>-$'[_\`V>!X\<#AQ0#=!/`!Y:]].PU3$!39`"6`'X``9#<@J`#;`"6`'X`` +M>+I@J.$+$X47;15X-6L980`A@`^!`,`8?@T/^`'C;WOR\14!S_;@>/'`E@CO +M]@#;"'<`)X4?@`!D-P`5@@`H<(#BRB"!#_____\W\C<*$P4*)(`/@`!XN@/P +M`>-O>P`DP0.`B1L,PA#7;]5^M6O=9<]V@0#<&*YFO(CC#D.3`>2`J6&Z`!V" +M`+=OM7T%NWUESW:!`,`8V66F#V`%(-K//]N!X\<`F#X_V`""2 +M#X``>+H`()$/@`!D-P`1@B``$I`@E.+*("$`0_*W:,]R@0#`&+5]0"(``J!@ +MC"##C\H@@0\```%")`?!]DAVN&9J#F`%(-H`$H`@/PA2``#?%O#/``&0(@`=C9!H_VX'CQP(8.C_:HP7H.[_\( +M=8'@:`JA`LH@H0&+<;(.[_^I<"T(40#/=J````0/AL]U@`!XJ0"E!M@/I@04 +M`3$`P$8*K_A"N0"%#Z8!V`/P`-BE!J_VJ,#QP#(.C_9*#<__SW6@```$#X7/ +M=H``>*D`I@;8#Z5""0_X!@J@`@;8`(8/I7$&C_;QP(;@"'$`V`?RSW````1" +M*@[/]O_8`@W/_X#@RB"!#P``_P`"\@*`T<#@?O'`T@V/]H;@"'<`V`CRSW`` +M``1"^@WO]NEQ_]C/=J````0OAL]U@`!XJ>^FO@SO_R"E((4OIH7H;R!#``+P +M!(#Y!8_V\<#AQ0ARAN`H=0#8"/+/<```!$*V#>_V2''_V((-[_^I<>4%C_;@ +M>(4$S__QR;6XX'_Q&ABPX'CQR8>X\1H8L/+)F[CR&ABP],F'N/0:&+#UR8"X +MX'_U&ABPX'CQR96XX'_Q&ABPX'C/<(``@#/@?Q2(X'C/`(A +M`@`1#H1P`(```#!P;R`+``/P`=C@?@]Y&PEU`0#:A"D(!@`A@7^``*0^8($+ +M",``2'`%\`&!^PA1@`'8X'YE`2__`=C@>,]RH```'"2"`((D>`#9D;D'"%X$ +M)*+@?L]PH```'`&`+'#/<*```!Q!@`#9G;D$(4!`2W@%\O+)O;CR&ABPSW"@ +M```<):#@?O'`5@R/]L]UH```'#:%](HF!!`1"!X"=Q(`AEX- +MS_K6I0CP#0@>`-8-``4!V!:EB02/]L]RH```(`<:F(\!````3!(!AD0H/@O/ +M<(``Y4TR($`.+R@!`$X@@P=O>\]P@`#(Q!8@S`!@E#00@`![>X"[9'DX8*`: +M``#@?O'`S@N/]@#=SW2``/C-J78"\`'E&0T5%,"$SW>```P'OF;#OO0GCQ/K +M#U^2X6X[#344X*0`W<]T@`",!M9\H*2AI`2XAB#X`XFXP[D%>0J[)7O/<(`` +M#`<4((P#8+0@X-5X0*`"\!#>S0.O]LEPX'CAQ0AQ`-@(!_*'#/``@C`^``+0\`H0/ +M(,```J0YV`0<@!\``(``I:X`:3@?O'`K@JO]@#9"';/<(``3-$!@*+!0<`! +MV$#`SW>``+0\(*=')LT7Q+T4\"\H00-.((0'SW&``/0\\"$``?_:%.$5>4"A +MBW'F#^_W*'(0)0T1[>U*)@``"B2``2OP+RB!`TX@C0?/6<$ +M$04`\")``R*!!29&`04D1`#[8V.#((<4XF5Y(*<5>J"BKWF$*0@&`"&"?X`` +MI#Y`(@$$A@_O]QCB$"9.$]CNSW*@```H`!J8@;,2`89`+``!AB$##(8@_`,E +M>+,:&(`$&H"/.@1*<#T"K_:BP.!XP=G/<*```"C/D&ABB($`$.A`-FU&%B`X'[@>,]P@`"T/.!_`(#@>/'`G@_/_\]P@`!4-P&` +MSW&@```H@B`"``T9&(#/<:``@"83@8*X$Z$3@88@`PP3H='`X'[QP`AQSW"` +M`+30`8"BP4'``=A`P,]T@`#T//`D0!!2:51Z`"*##X``M#Q"@Q5\$"("`$*C +M1803"8$`_]DEI(MQ<@[O]RARHL#1P.!^`-K/<*```"A5&)B`SW&@```D$!F` +M#P``_W\;V`>A2Z'@?N!XSW&@```H0Q$"AC(1`8:&(>./`=@&\NNZT2*B@F"B +M8:(@X15Y8*'@?N!X\<#AQ0AUSW&@```D2H$B@0#8(*46ZG<)WP?/<(``L`@] +M@`K89.$*#J`'C+@,@8?H`=BN"&``'J$#\$() +M``#1P.!^X'CQP(X/3_8(=L]Q@`"`5RAW@"<4%!F'`"&0#P``$`@`W8/HJ7`1 +M\`H,P`#]Z&`0`"#YZ!V'B^@?A^L(5($>#2``R7#QZ`'8K0=/]B00`"$0=C@( +M00#G\>!XSW*``(!70"(!!#`A@0\``#P(`-B/Z8`B%`0V@HOI-X*)Z3B"A^DY +M@H7I.H*`X3$"(``%VO'`J@YO]@AS2'6:#^__`-K/=H``@%<4Z(#C +MS"%A@03R2'`2\)8FA!!=%@"6^NB"#P``"H8/#0`0`-@&\)8FA!#Y\0'8T09/ +M]O'`X<7/=8``D%]$%8`0"PA1`0'8&*7/<(``&#VF#H`&`-A>'1B0L09O]ET= +M&)#@>/'`+@YO]KAPF'&*#B``2';/=8``D%<(=Q,.$1$P)8`?``!8!8#@RB#@?PNB\<`>#4_V +M"'4H=UIR:'8*(8`O@`"05[#@S"@_O_^EQ*!$`("L(``1"#R``"G``W1#P+R('!,EP_@WO +M_TIQ@>#*($$#4`_A_\HAP0,!W?X,``+5!&_VJ7#@>/'`<@Q/]@AU*'8*(8`O +MH```(&P1$B"`X@/?RB>"$"(/(`"I<(#@`=C`>"\@`(`*((`O@`"05ROTJ7#) +M<18.[__I.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!X +MX'C@>.!XX'C@>.!XX'C@>.!XX'C1P.!^X'C/<8``/E=7(<`)300@!2?:SW.` +M`)!?7!,"A@GJ3X,3LX#B<`4!`&T"#_W@?O'`>@M/]L]V@`"05\((```(=8/@ +MRB"&#P``)@F4"Z;VRB%&`X0MAAN]`V_V`"&`<_'`X<5Z#.__"'6`X*EP!?(2 +M"````_!2"```I0-/]N!XC"##CP#9%_*.X.$@Q0?`(&4`EN#`**4`X2#%!\(@ +M)06BX,`HI0#A(,4'P"`E`PL(U`DH<.!^`KB"(`("X'^`($(%X'B,(,./`-D1 +M\H[@X2#%!\`@90"JX,`HI0#A(,4'PB`E!8P@0HW#]RAPX'X"N((@`@K@?X`@ +M0@7@>`L)-0,`V@"`,?`-"94#`(`BN"WP"0F1`TAP*O`+"54,`(`DN"/PP.$$ +M]P"`)K@?\.#A!?<`@"BX&?",(0*$!?<`@"JX$_",(4*(!?<`@"RX#?",(4*) +M!?<`@"ZX!_"]#D3P``"U``"`,+C!N.!^X'C/<8``@%=`(0,$EB&$`%*1#0B! +M`%\1`88;"5`!-".!#P``5`4P,]R@`"05\G@ +M1-S,(0&#"?0P(H`/``!H!8'@`=@"\@#8X'[@>`L(%`FPX`'8PO<`V.!^X'CQ +MP-();_9!VL]U@`"05T)X1"B^!D)Y`"%.#HPF"IG*((8/```D">0)IO;*(88# +MJ7"`(!8`SF`R)8`?``!M!1!VRB"&#P``)0G`":;VRB&&`^T!;_;)<.!X\'-HSW(``/W_!">/'P``]?]D>D5_&W@% +M?SX/[_]J<`KH!">/'P``W_^!Y@'8P'@%N`5_4">!$0#8#PZ0$('FT2$A@0+T +M`=B`X,H@8@`&N`5Y+PVT$S!_"!``(`0A@0\``/_Y02C"`,"Z0"J/`L]R``#_ +M_41_)7_GN,\G81(`&<0C`>5-#=29\0!/]O'`I@A/]@AV`-T.\%8-[_^I<`AQ +M'@WO_\EP"'&."F`'J7`!Y>D-U)G/<(``H'$8D##H`-TL\(H(H`&I<";HA"T! +M$\]P@`#=53(@00X`(8!_@`"@540I/@<(X+X+8`$P($`."'>R#6`!J7`(=F8- +M8`&I<`ARZ7#)<:ESZ@H@!THD``".#^_ZJ7`!Y:]]JPT2D7T`3_;QP!((3_9( +M=\]P@`"`5T`@`00`W0AV@"84%`KK!]@?IAV&@."0"<+_J7`C\.((S_]?AAGH +M,PK$`QV&!^@+#U41=@G/_Q/P@.#,)V&1#_0?"L0#,"&`#P``/`B`X+P(`0`% +M\`L*Q0,!V`/P_Z8`V`T`3_;@>/'`SW2``)!?6!0#E@/K`=@8\(7BS"(B@1#T +M0"@"`@0B@@\```#_A$*P0`F'(0?```I*>WQ-@@``.GH`-C1P.!^\<`( +M<\]R@`"05TX([_\`V0GH,"*`#P``?`40<\H@0@`"]`'8T<#@?LG@1-S,(0&# +M"_+2X%7!'W,PA`8,#]`'8`O``V.!^X'CQP*X(S_\."```T<#@ +M?N!X\<#AQ<]U@`"07U>%SW"``!@]%+HF@%UZ(X$@@:X/8`9980'830/'`_!P,L`(<0C``V`,<`C"+<`39*@F@!,G:H<#1P.!^SW2` +M`.!65B2#%3(C@P\``&P%$0O0#X24#0R#'P``__\(+,(>*!_/7@?VAP +M\<#AQ<]U@`"07Q*%#>@`V!*E1!6`$(7@3`^!_Q"%%@KO_T05@1`5!@_VX'C/ +M2"PX'[QP.'%SW*``)!? +M+((*H@'AE@[O_RRBH@[O_PAUM@G/_]X+[_^I<*H,[_^I<+T%#_;!X`':A_;: +MX`7VP>&#]MKAPO8`VK#@S"$AC`;R@.#,(2&``_0!VN!_2'#@>,]P``"MWN!^ +M\<`"#0_VH\$(=0#>`8"9ON.XRB:B&,`N(A;1("*!RB:B&L`N(A:+<$`E`1@0 +M%1(0%!41$!@5$!#GA:H(;_8,VB&%R7!"A0HD@`1CA0HE0`0*)@`$D@P@`/AW +M:@L@`*EPSW```%55^00O]J/`\<">#`_V"'[!H8L`*'[AJ8L^T:&+#P +M&IB_T/X```"'B^#*(((C!/0,%Q`08@XO_P7=%;W+I0"'"0C0`1T('B#/<(`` +M*"T`@(#@+`H!`!(,``"N"P``"?#/<*```$<`&(`/`(```$8,(``*<"H-P`#L +M$@&V@.',("*`$?+/<(``+!8?@`SH"Z7PR0'@L[BUN+BX!*7P&ABP`O#+I<]P +M``!555T$#_;@>/'`(I`('`/3Q2B!`$/+Q@.+*(($O``"MWB+R%!4$$`&%(H5#A0X* +M(`!DA4!`BAP0=4!#Q#!22,8#/<*```$8EH`#8!_#P(P$``>`$ +M&E``^0B4@`'9SW"``"@M(*#/<```556]`@_VX'@$X,]SH`"(1@#:!_#P(($` +M`>($&U``^0J4@<]P``!55>!^X'CQP"X*+_:*(,\/M,$$'(`_H`````@<@#\? +M`/__#!R`/Z``#`1$P!0<@#^@```,1L`<'(`_H````$C`)!R`/Z```'"*(-\/ +M2L`L'(`_I````#`<@#\#`/__-!R`/Z@````X'(`_`P#__SP<@#^@`!``0!R` +M/Z``$```WE'&BB!$`%+`4\"+=?(.[_^I<('`R7&B#:_W(-I*#^__J7#]`2_V +MM,#@>/'`O@_/_8#@RB!B``JX!."0N-'`X'[@>"9XQ;B?N,]QH```1@:AX'[/ +M<*```$8(&(`/``<``.!^\!^B;0$/ +M]J7!SW2@``!'`J0%),(`4*1$'$`1X'^EP*7!0,!!P2#!`12`,`4A@0\````_ +M$+@%>04A@0\`/P``SW"@``!&**`#%((P`A2!,`BZ17DAPA"Z17D%%((P&+I% +M>2F@X'^EP,]QH```2``9@(^``````-B!&1B`@!F8CP"```#@?N!XI<'/!_I\#L +M$@*V[1(!MAL*0``=>,"X&WA%($$!SW*@``!&`((E>`"BX'XF>,6XSW&@``!& +M`J'@?N!XSW&@```W`(&@N`"AX'[@>,]QH```-P"!@+@`H>!^X'@!VL]QH``` +M-TBA0:$"H4>A2:%`H>!^X'C/<:``@!T5@00@@`\!^/__%:$`V!:A':'@?N!X +M`]C/<:``@!T=H1:!12!`#!:A5!F`#Q````#@?L]SH`"`'3:#4"&"!).ZA.A6 +MHP7PDKF3N3:CX'[/$"`SW&@```?7J$!@!^AX'[/ +M(8CQPN&(?@'!7DE>^!_8*+@>.'% +MSW2``$`&HH0E>`0EC1__P!C^!;J&(O@'!7H8NT5[97VBI.!_P<7/,]QH`"`'1:!M;@6H>!^X'C/<:``@!T6@;&X%J'@ +M?N!XSW&@`(`<&J'@?N!X\<#V#\__2@HO]@;8T<#@?O'`X<7/<:``@!RZ@=H/ +MS_\N"B_V!M@=!N_UJ7#QP)8-S_7/=8``5#0#A4`HD("AP6WRSW:@```,[88B +M"J_^BW`*(8`OH```$(/H/P\%%`"%0X5!*($`(GB?"(4`FP\4'H2%!H5`+P,4 +MF&`&I1"\`,?/<*#^#`$"V85ZF@@@`.5[#@D``#GP0"#`(00@@`\``/S_G;B? +MN#`9&*``'X!/`(#W`,]R@0!`&P/PR+DBI62%(H7P(D``&.N`(_^/.+ADI0'; +MPB/!``'C>&``V]\+!8#P(D\``!_`0X.%`>%AO(.E`>/V\0'A`J8#V`>F`X4B +MI6&X`Z4AI2V&`(4"N`\)!0`#V<]PH`"`'2:@"07O]:'`\``?`$"#P@#9"/`$XOP2#(`!X0`?`$,"P/4)!(#/<*`` +M`"`;@`(;&(`#V`<;&(#1P.!_J,#@>`#8SW&``%0T!*$#H0&!X'\"H>!X?0;/ +M__'`$@S/]0AW*';Z"R_Z&G)*"V_W"'7O>@`B@0^``-ZCP*G/<8``B#T`)X(? +M@`"L/0`:`@1$@0#;#R/#`P3N9GI$H0SPC"7#GV5Z1*$&\@T-`1#:"F_W`X$= +M!,_U\<"Z"\_U"'6>"R_Z*';R"F_W"'?/<8``B#U$@65M$"+"`$2A&.[/!^X'C/G2"6_WJ7$#\/H)3_=1`\_U +MX'C/<(``B#WI`6_W`X#QP.'%"'4R"F_W2'`U:`5Y"K@E>)^XSW&``)P]M7DI +M`^_U`*'QP*H*S_4(=>8);_=(=@AW`@IO]\EP-6@%>0JX)7B?N,]R@`"(/4`B +M`06,)<.?M7D`H0KR$0W!$R2""WD$\H();_<#@LT"S_4`VL]Q@`"!XBB)0",]S@`"(/22#&'I&>0\A`0#@?R2CSW"@```@&X#/<8``-`L`H0&A +M`-I"H0'8!Z%$H=C8*06O_DAQ\<#AQ<]U@``T"PBESW*``-P+!H(II0.`(("5 +M(<@/R@H@!DAPSW"@```@&X`!I8();_#@N(!VL(BC@`$ZJ8/S__W\0#8T<#@?N!X\<"N"<_USW:` +M`#0+`H:AP0#=(NB+=0C8=@X@`*EQB>@'V&X.(`"I<8/H!(8#Z`+8`O`#V,8) +M3_<`W1,($`$"N,]Q@`!<"Q1X!6'/<(``^`N^"0`&J7#%`>_UH<#QP$H)S_4( +M=\]U@``T"P*%&G$5Z`#8`Z7/=J```"`$%@"64R#^@'@)8??*(&$`@.?,("&@ +M`_(;A@&E=0'/]>!X\<#AQ<]S@``T"T*#@.+,("*`"O(#Z0.#!NC/<(``/.0` +M@`3H`-@'\`'=?@AO]ZEPJ7!5`<_UX'CQP,]Q@``T"R*!@.',(**!7`AB]\!X +MT<#@?N!X\<"Z",_UA"@(!L]R@`"P/C`B0`Z`X0*X%7@`((T/@``8OC%X`-[* +M)FH0RB<+$'X)(`;*)TH0Z7"I<7H+K_G)!X\<#^#X_U"'8:A;4($`"$ +MX\HB80#*(2$`R7!B#^__"G,(=Q$/$Q#)<#8)(`#I<0AWSW"``#SD`("'Z*X. +MS_F`X(H@OP,#\HH@(`P+#],<;0\#$(H.X`3)<#IP)@_@!,EPN'!3(4`ESW*@ +M```@6X($(8$OP/\```(B!@0")0(``"&##T````!0<,HDQ0#*)$8`_*7)<"() +M(`#I<0(E@0')<(H.X`0%(0$!/@[/^8#@!`WA^#N__R7`!V`"E,MD*\`"%ANB.#N__R7`!V`"EBB$'#0*^ +M0W8;'E@0"!``(#1X^0:O]>)X`[C/!QC0(00ZH*$`=H)\'E@".'P +M(8$``>(P=,HD1A#S"A2!DWG@?RAP"0ES``#:,WK/<8$`S"4#N!1X&V&!@SA@ +M"."5>$"@`6S!N.!_`:/@>.'%`[C/`)C#NH9"1,``-T(\'Q@M7Q" +MA`'E.F)"I/4-%)'@?\'%\<`&#J_U2B%`$*+!`-Q*)@`(B7,.\"\I`0!.(8(' +M3WT`),$P0*D0($`##W@!XV][\^@`V1ET^'2X=)AT//#/<(``9$!`(`L/0""0 +M#S(D3S"*)0@6K'_/,=P@`!8LX"`#0S>$0>0"0A2``\AP0`0(L(`[>K@ +M?RAPX'CQP.'%"'&$*`@&SW"``'1`,"!-#H#ERB"!#P``+S1T#,'U+RU!$TXE +M@!>E!*_U#W@`VX0H"`;/<(``=$`P($$.$O`O*$$`3B""!\]T@`!FLQ-J%7@4 +M9`\C@`"`Y,HC"0`0(8$`[^G@?VAPX'CQP.X+K_7QV<]V@`"D/LEP;@\O]P2Y +M`-T3\(0M"!:*(?\/@-JI<``F3!X@I``A@7^``*A`0*FF#B`7`-D!Y=\-5)'_ +MV<]P@``D21$$K_4CH/'`G@N/]0#>R740\(0M"!;/<(``J#XP($`.#PA1`"X, +M;_ZI<`5^`>7E#521W0.O](0H"`;/<(``=$`P($$.SW"``$@[`(#@?R1X +MX'@`V@/P`>(?"E4!A"H(!L]S@`"L/C`C0P[M",&``=A`H0+P`-C@?N!X\<#R +M"H_U"':$*`@&+W4`)9`?@`"D/C`0`"``)8\?@`!D0`;H"=@>MR[8!?`4V!ZW +M,M@?MR(*+__)""("0F2`&&Y(*@!XD]ZZ0H2@=D"C_7QP`ASA"@(!@`A +M@'^``*0^0H`;"A`!&PH0`L]P```:-)H*[_5H<='`X'X^H/WQA!A``/OQX<6$ +M*`@&SW2```1`0"0`%"]R36``V`3P`>`/>!$(0P.;8A9[=(OU"<&``_#_V.!_ +MP<7@>/'`#@J/]0AU*'8`WP+P`>9B1N0"4`%A8)8`0&VD`F@1)` +M)0`4"@E@!`;:0"8!%$`E`!;Z"&`$!MKE`8_UX'CQP'()K_4(J"F`#$"4-$/CM90&/]>!X\<#F"(_U7PB1`#((K_D! +MV/X.H!D(=\]S@`"P"`"3`=J&(/P`C"`"@,!ZSW&!`(PIQ(G/=8$`+"H_#M00 +M@^K0X!OTJ7""(,(&W@LO_D`C`0-D%8(0*VY9)<`4<@I@!.ES"_`7"!`!#0@1 +M`B()`!L%\)#@@`B!^]D`C_7@>/'`9@B/]:(/S_X]Z,]P@`!P"0"(SW:!`"PF +M`-U+"-\!,@EO_JEQ]@AO_AIP'>@J"._Y"G""#H_Y#W\4CAL(40":#:``Z7`U +MCC!PRB`"!%@)HO[*(<(#_LD/")X`0!8`$=H*8``*<;2N_AI8LTUPAB#\`XP@ +M`X`/\@;VC"`"@.@/0?D)\(P@`X3@W,P@`H,4"\'U.0"/]>!XSW*``-S+()(E +M>.!_`++@>,]P@``8OR$`P`7@>/'`N@]/]<]Q@`"$ID"!A^@!V#H*(```V33P +M`-D*\,]P@`"(.?`@0``5(DP``*0!X>\)%($`W0?P`-@2"B``R7$!Y:#M`-X/ +M)DX3$PY0$(H@A`RB#Z_UR7$2\,]R@`"(.0""*+A#@E,@P0!!*@`#P+@%>!X\<#AQ;8)[_D(=1,-4!"*((0,/@^O]:EQ(_"KV<]P@`"X3B"@(:`BH,]Q +MH```(%N!3!$`AA!X&F(-VPCP3!$`AF&[$'@:8N!X]0M3@%,BP`#(&ABP02H` +M`L&XR1H8L"T'3_7@>/'`L@YO]0ARH\$!VQ,(4`"*((0,U@ZO]4AQ`-I(\`#: +MB>G)R4AQ`>#!N,D:&+!H/'`X<4(=07:SW"``-%/0*C/<(``W*D@H,]P@``TO^X-@`6!Y/'`5@U/]<]U@`#03P"-BNC/<0``#__:#N`#`-@`V#/P$@N@`P+8D>@`C<]R +M@``8OV&X`*T&@@.`(("`(8(%Y@V@!4AP(?``W=X.X`.I<,]V@`#8RP"F"_!* +M#N`#J7'/<8``B#FU>0"A`>7Q#321`-C/<0``#_]Z#L`#G@J@`P+8`(8>#<__ +M/05/]>!X=0?/__'`Q@Q/]<]R@`#J"F$05/ +M]?'`H@Q/]<]V@`#`#084!V`+9H@W@`T*%!@[@`P'8"'7/<0``#_^^#>`#`=CZ":`& +M!-@@E@'8^@W@`Z5YT@F@`P'8`=A&#\__<01/]>!X70?/__'`X<7/<8``)$DF +M@0'8APD?`,]U@`"P"""5BB(,`$1YC"$(@#3TSW"``'@H`(`'Z`6%6@_@%B:% +MK.@`V0+P`>$?"94`$VD5>,=P@`#(3FB`0X7O"X&`4I`(E><*`8`U"94``I5# +ME0.Y1WA$E35Y1WA!*`("1W@/>B.ZQW*``,A.*6+"N`T)#@`!V`7P!PF!``/8 +MW0-/]>!X\%4) +MATH@0"`0($`#":<#O;5]`"6!'X``^%2N#Z_V`-@)AU,@`0!$(((`)7I$(`$! +M17F&(/\-!2!^@`#>#_3/<(``1,Y:"X`%SW&@```@#!F`#P@```#\&0`$`"6` +M'X``'%7`J!CPTVW5?L]W@`#X5/EF5@^O]@#8I!<`$`\@0`.D'P`0)@B@`*EP +M`":!'X``'%4`J04#3_73;=5^`":!'X``^%0B#Z_V`-CN\?'`X<7/<8``&$\@ +M@5,AOH`X\L]Q@``(FB"):0G0`,]S@`"P-%"+70H?`,]Q@`!X52F!4R$,`$0A +MC0"%?40A#`&E?(8A_PT%(3Z#'/)AN#4(50$S)@!P@`"TST`G@7(4>0!YO@RO +M]@#8#/"V#*_V`=@(\("Z4*L&\*"Z<@XO]E"KA0)/]?'`%@@@``#8#@@@``'8 +MT<#@?N!X\<#V"6_U`-G*#._V"'?/=H``5$\EIB"`SW6MWN^^1PE``\]Q@``P +M3TH,[_;I`/]@/9):8+I@\/41#/<8`` +M*#8`L07PSW&``"!X&K']`4_UX'C/<```RRC%`:_UBB$-"N!X\SW*A```&SW4]```)XK\IH,HA8@(HHH:BIZ+)H`"# +MX;B4#,+VT@Y`!$X(``"A`4_U\<`6""```-@.""```=C1P.!^X'CQP"8)3_7Z +M"^_V"'4(=AH.K_VI<87H`!Z`'ZW>[[X/#5$0`-FAV!"X*:!I`4_UX'CQP.'% +MSW"``.!6`8`!W2,(7@#/":`%2'"I<`+P`-@Y +M`4_U`=FAV!"X*:`"V<]PH0``!B&@2(#/<8``5$\&@$JA":'/<*```"`;@.!_ +M`J'QP)H+S_8`V-'`X'ZY`*_U/]C@>,]P``"MWN!^\<#AQ00BON\("`@(SW&` +M`+`(SW*``'`)#/0`BL]RH`"`)!BX@K@2H@^!L[@/H3;PSW&!`-0S8($`V,*[ +M;*K/=(``$-6)C`VJCJH0W<]TH`"`'+ND@N/*("(.4`"B]<\@(@//=(``V-N& +MA`B[0(J%>QBZ17O/!X"ND`V,]RH```/!2B +M02F``&&X%:+@?N!X!=G1R16Y"Z'/<:```$8`@9^X`*'@?N!XSW*@_E@!!=P5 +MO$2D`-H,\/`@@P!DI.!XX'C@>.!XX'C@>`'B[0I$@.!^X'C/.!XX'C@>.!X`>/M"T2`X'[@>/'`,@_/_\]R`(`1 +M!$+9@N#*(8$/``!"`,HB@0\(@!$,SR%A`Q#RA>#*(H$/"(`1#,HA@0\(`$)` +M!O*#X,HB@0\`@!$4@.``V`?RSW"@```\)J!`H`'8T<#@?N!X!=H5N@N"SW&@ +M``!&T1H8L`"!WK@`H0#8"Z+@?P'8X'CQP.'%'-T>\"""SW```)DA2(+"#D_U +M%O#/-%>/4+E($`VIZZ.7I$>$(@`(#@?\H@8@#@>,]QH``` +M(!"A`=@'&1B`$-@`H>!^`N$P>4%I#0H%`")X$'@#\`+8SW&@```@$*$!V`<9 +M&(`0V`"AX'[@>/'`4-K/!!X`_`"V,]QH```(!&ABB`8 +M"`"A`M@'&1B`X'[QP#8-#_4(=2AV,@BO_RAP"K@G[<]TH```(,@4`A`*O<]S +M@``P"3B34'I985"3A"X(%KIB8KH((D(`(GH)(($``M@''!B0,:0`(8!_@`"D +M/B:`#I`PN1"X)7@`&A@P104/]>!XX'[@>/'`Q@PO]8HB$```W\]VH```'.JF +M"B"`+X``K#P`$``@SW&@```@SW6``!11X*4*Z-P9@`\#`$`-`MA"H0"E!/!# +MH>EPSW&``+`\(($1Z<]P`@`R*&2X$J;/<(``1`#/<8``&`;N#P_]`(5%(``# +MA2!'!`"E<=@&N%X/[_W\V<]P@0#$*R*`SW"``%PW!.G@H`#9"/`#V1*Y`!B` +M#PP```#/<```3!PR#^_]G[D`A1?:SW&@```-0:&%(`@(`*4`$``@%.C/=X`` +M9"$`AXSHSW&!``!T`-@/V@H/+_@#VP'8`*<$\/(.#_@`A0JF/00/]>'$_!S( +MOOP<2+[AP.'!X<+AP_P<"+'\'$BQ_!R(L?P@!0'V`JX +MP-D8N6H-[_T`VL]P@`!<-R*%`(`K>`'8RB8B$SGT`(4?")$`3"``H,!^!?1B +M#X_]"':`YLHF(1TJ\@'8*?`9"!X`4@WO_2#82@WO_8H@"`!FWA[PC"`(@!?R +MD.`1\@CV&P@0`2<($0(\WA+PP.`+\HP@!(`+]%3>"O"&W@CP1MX&\$S>!/!E +MW@+PA-X`V('@W`D!%@(*`!9"%`"FR7!`A0#92@IO]2IST<#!Q&LDP!#!Q&LD +M@!#!Q)]T!!05-`04%#0$%!,T!!02-`04$30$%!`TP*'!0,`E"!X"02C!`,&Y86E!*$$$P;D[8T$H@07!N<]R@`#T +MW2IB#?`@P0#:1+G!N6%I!""!#P(````QN3A[$0MU`@#9SW&``/3=:6%981$( +M'@+JN!C8RB`A"`/P)-B%X!^\<`&"2_U`=D`WL]UH```(!N%H=@0N"&@\@X@!HH@!`O7=@``N`L!Y@GW +MSW"A```($X#I"%Z``-@"\"#8.X4U`0_UX'C/<*```#`3@`0@@`\````@X'[@ +M>/'`X<7/<8``Q,P`@1KH`-V:#^__H*'/<*$```A$@"6`S@_/_P/HJ7`&\(#B +MS"$A@/OS`=C/<8``S,QF#^__`*'/<(``S,S=`"_U`(#QP.'%SW"``,Q4`(@7 +M"%``SW6``,0[R@EO_@"%BB#_#P"EM0`/]>!X\<`Z"`_USW"``,Q4`(@H=1<( +M4`#/=H``Q#N>"6_^`(:*(/\/`*;/<(``V%0`@!R($'50#*'VRB!A`&T`#_7@ +M>/'`SW$!`.!ASW(!`/A@SW,!`-!@/@CO^`C8SW"``%"_.@A`!0#9SW"``#08 +M(*#1P.!^X'CQP,8/S_0)@L]Q@`#,5`"A#WBAP2T(40`!V$#`SW*``%"_!H(# +M@""`QW$'`""A9@A@!4APBW`$V;8*8`-CVACPSW:``-A4((8(V""!SW6``"@S +MI@VO^$"%"N@`AB"%`=H`@`C;*@_O_THD``#%!^_TH<#@>/'`4@_/]*+!*'8+ +M"E``;PN>`0#80,#/=8$`8"P$A4`E`19!P$*-BW#*#B`9"-L`C2*5,@\@&0C: +M0HT(V`#9.@^O^`\A@0#/<(``*#/`H,]P@`#,5`"()PA0`,]Q`0!L8<]P@`!@ +MPP#:2'/J"2_^2B2``<]Q@`#$.P"A10?O]*+`\<#AQ<]UIP"`21<(40""#``` +M$(5&(,`!12#```3P$(5&(,`!$*4A!\_TX'B.X,H@+`#+]L#@RB!L`,?VC"`" +M@@+8RB#I`.!_`*G@>/'`8@[/]`AU]!Q(L$'"SW&``+`(()$`V(8A_`",(0*` +M2B!`(`+>"_0!P<]R@``$(X0I`0PP(D$.@^FZ<`CPSW&``"PE)H%[Z0HE`"1* +M(@`@"B:`+Z````P*)(`D:!8`(0@/!NVRI`[MX>FB`9WI(H`R)`>#!N`RI$!87(`D4DS!BO7D-Y!1`)%0@ +M`B7-%-%URB8N$``C@"/J<4IRR7,"#B_U!!0$,`HA`*`J\L]P@``\.NE@.PD0 +M!,]P@`"\.39X0(`&B$*ZPB!" +M`,`@00`/>.!_H<#@>/'`&0@S`0AQA"D!`\]P@`#<53(@0`Z(Z.MRSW````H) +MB@P/]='`X'[QP-X.#_[&"```$@X``-'`X'[@>/'`"'$/>(0H`0,`(8!_@`"@ +M53P0@P!.@`/K$0F``,]P```."4H,#_71P.!^\<`"#._T#WAF"2```-XI:"]Z +M1;K/=8``2#M5?4*%Q+D/)DX02WX'\L(,P!D"A<9X`J4]!,_TX'CQP*'!#W@B +M#>__BW$6#:_Y(,"AP-'`X'[QP(X*@`4R:#9Y`"&`#X``='C1P.!^X'C/<(`` +M*#;@?P"8X'C/<8``('@+"%$`&9D"\!B9X'[@>/'`>@O/],]P@``(FJ"(@@L@ +M`*EP).@`WL]PH```$,F@SW"@```<$!B`#R`````+#=`0R7`&\"X(``#["%&` +M`=B`X`0(H1S*($$#5@@/_WH/P`":"*__`=@B#0``B0//],]P@``(FN!_`X#@ +M>/'`X<6B#N__"'6$+0$3`"&`?X``H%4]$($`".!$*3X'80/O]#(@0`Z.X`'8 +MX'_"(`D`X'CQP.'%;@[O_PAUA"T!$P`A@'^``*!5/1"!``K@1"D^!RT#[_0R +M($`.\<#AQ48.[_\(=80M`1//<(``WU41`^_T,B!`#O'`X<4J#N__"'6$+0$3 +M`"&`?X``H%4]$($`">!$*3X'Z0+O]#(@0`[QP.'%`@[O_PAUA"T!$P`A@'^` +M`*!5/1"!``O@1"D^!\$"[_0R($`.\<#AQ<]U@``(FM8-[_\`C0&%J0+O]`B( +M\<#AQ<]U@``(FKX-[_\`C0&%D0+O]`J(\<#AQ<]U@``(FJ8-[_\`C0"-A"@! +M`\]P@`#?56T"[_0R($`.\<#AQ<]U@``(FH(-[_\`C0&%50+O]`F(\<#AQ<]U +M@``(FFH-[_\`C0&%/0+O]`N(\<#AQ<]U@``(FE(-[_\`C0&%)0+O]`2`\<#A +MQ3X-[_\(=80M`1,`(8%_@`"@52AP/A&!`$0I/@?]`>_T)W#@>,]P@``(FN!_ +M`H#@>/'`8@G/]!IPSW6```B:`@WO_P"-`84!WBJ("B*`+Z```""!X/'`D@H```#9"_"$*0$#`-H!X0`A@'^``,!57*A=J.\)%('1P.!^ +MX'@%````\<#^#N`5X<5B",``A@L@``?88@IO^`AU5@L/_;X.S_P!V:':$+HH +MH@3;SW"A```&9J`<&(`//0``"2B@`-@(HL]PH```'2*@4@KO_JEPC0#/].!X +M\<#R#F_X`]@`V1<(T`#/<(``]!X`B(#@RB!!``+R`=C1P.!^&0@S`0#9A"@! +M`\]P@`#<53(@0`X)"%``*'`#\`'8X'[/<8``")H@B8PAPX\`V`SRA"D!`\]Q +M@`#<53(A00Z!X__"'62"R_])8WM!X_T\<#AQ0AQ.@K@``'8)@W/_X'@`=C"(`$` +M1@Z@``$2`382#>__"'41"%$`(@W/_R6-9[D&\!8-S_\EC6.Y2@LO_2]YJ0>/ +M].!X\<#/<8``/!@`@07H`-@`H1'PSW*``"!X.IH!V_#APB/*``'87)IU>$)Y +M,7D%Z`L)!`#V#4_V8@O/_\]R@`#8MQZBSW"``"!X.Y@_HJX.K_P:F-'`X'[@ +M>/'`U@Z/]%H+S_\`V,]UH```*`:E!-G/<*``@!P[H#H+[_0&V,]PH```,`.` +M;PB?!@#>CKX>"R_YR7#+>`'8PB`!``2X3R#!`,]P@`!LJ`*(@N`!V,!X![@E +M>!"XA2"2``&E]@KO]`'8Z@HO^CF#$_V!O`!V<]P@``\&""@T<#@?O'``@C/_E8*[_0&V-'`X'[Q +MP/8(S_]^#D`"C@@/_M'`X'[@>/'`A"@!`P`A@W^``,!5/8L`(8!_@`"@540I +M/@<(X`8)[_\P($`.'ZO1P.!^\CN"H'-A:<",) +M@``,>L]SH```(!N#`"5!%#((+_XP(4$.`^@>CAVNO@CO_^EP78X`(4`C!"J^ +M!"=P706O]`08`"#QP&H)8!P$X'(-0`#1P.!^\<#AQ>H)[_\(=80M`1.!X``A +M@7^``.!5"MC*("($406O]`&Q\<#AQ<]QH`"`'+J!\@Z/_D8)[_0&V#4%K_2I +M#N_XJ7"Y!(_T\<#AQ<8.[_\(=98.[_^I<$H/[_^I<'H.8`"I/'`O@N/],]U@`"8HPZ%`>`. +MI78([_@,V`#>#?`O*D$`3B*`!P]X$"$!`+H*;_8KI05^*X7TZ8#F^`IB%?&)T(D3"-X!86\R$HP`PJUC +MK265"/`Q$HP`86Z8$0$!8JWCK22U`-DW#.40(Z7/<8``V+@5"-X!$($,'8`? +M00"#``'@$*$)\!&!#!V`'R$`@@`!X!&A$@X```.%$/!>"F``$(H(<@1M"@V@ +M&LL2`;8`V)VX#!V`'P`@``#Q`H_TSW&``&0Y(($P<`'8PB`!`.!_$WC/<(`` +M9#D`@(#@RB!B`.!_$WC@>/'`7@J/]`AVY@_O_RAWC"#_CP'=`_2AIR;P!MC6 +M#2_X)]D@@,]R@`!D.2"G(*(CAF6&(:(FAB2B)(9CHB*B!-DA&$(`)X8BH"B& +M(Z`IAB:@+Y!%(<$`+[`&V/H-+_BI<0#8`:=A`H_T\<#V":_T*'*B@*"A@.7* +M(($/```!0Q0"P?1:#^__J7",(/^/!/0"V`&B$_``WL&BSW>``&0Y08<&V`#9 +MJ@MO^`\A@0`&V(X);_BI<<"G$0*/].!X\<#AQ0AR#PA1`/X)S_@(=0+P`-W/ +M?,("*@S"4BD#?RSW:``#@L$!X`%,EP"@QO_*EQ'^C)<*EQ +M5@QO_.ER`=A>#^__"'&:#$_U/@Q/]7(*;_4!V`:F:@IO]0+8!Z9&AL]Q@``8 +M*EVA"@OO^!ZA#@QO_*EP@>#*(&$`RB$A`,HB00!D#&'\RB,!`!4!C_3@>/'` +ME@FO_@'8<@FO_@#84@FO_@#8T<#@?L]R@`#\O@:"`X`@@,=Q#P!`0E4!X`1( +M<,]R@`!`!@&"12"!!<]PH`"`'RN@X'\AHO'`<@J/_EX*C_YZ"H_^T<#@?N!X +MSW"``/R^L0#`!.!XSW*``$`&`8)&(($%SW"@`(`?*Z#@?R&BSW&``!@J7(&! +MXLP@(8`&]`#8<0/'` +M^@]/],X-K_\(=PAUSW:``)@ISW"``'PH0H#@'L(34'?/<8``&"K*("$`!O(% +M@!!W`=C*(*(`"@MO]1>AB(9IADJ&*X;/<*``@!^,H'R@7:`_H.(6@!`0=20* +MXOC*($(#`0"/].!X\<#Z#J_\X<7/<*```!T8&(`/#P#__P'9SW"@```(.:#/ +M<```F!Z*(;\(`-TZ"F_]J7*AV!"XK:#1!T_TX'[@>(T!``#@?N!XX'[@>/'` +MSW%C"-![!2A^``H@P`YAN$\@P@?/<:```#!2H='`X'[@>/'`X<6BP<]PH``` +M,+2`<(#/<@``)/2+<8'`!2N^```8P`X`&4`.`,$!P"NY%;@E>!UESW"``&R_ +M((`")4`0,'7*($X#50=O]*+`X'CQP-(.3_0(=AIQL@@@``D2#3:"X`#?RB'! +M`Q+RG@@``&;9'0C0`,]PH0"``1.`$'@%*(`/```)/4$I07+/<*``@#``@#"X +M.&`\X(`@#PH=9;%V`=C"(`X`@.`(V`?R5@\O]@IP@.`$V,!XS09/].!XSW&@ +M```P'!F`#P`"```(@9FX"*'@?N!X\!AB'_ +MC,H@X@#@?O'`!@Y/]%(/+_\(=6H/#_^*"4_V"':*(1``SW"@```P(:``V*H. +M+_:+N.(+H`55)4`6W@D``#T&;_3)<`#9SW"@```P,J"`&(`/,@```)4`3_;@ +M>,]RH```,">""((D>,]Q@`"8/"")'0E1`!P:@`^`UP$`SW"@```<%!B`#P`H +M```.\`#9GKD'")X')Z+/<*```!P4&(`/``@``.!^X'C/<*```#`#@,"X@>`! +MV.!_P'C@>/'`[@_O_P#9!NC/<(``^*,`@(3H*'`#\`'8T<#@?N!X\<#/<($` +MQ"L!@(WHSW````@<%@A/_0\(W@<,,]QH```,`.!M+@# +MH>!^X'CQP*H/S_\-Z,]PH`"`'!J`$@]O_D8@P`':#\__!/`&#V_^!-C/<*`` +M@#``&(`/,@```-'`X'[@>/'`C@\/]CX)K_0&V#8)K_0&V#()K_0&V-'`X'[@ +M?N!X\<#/<*```#`'@#L(7P8:"$_VE@J@!0K8(!RXF;C/<:```#`)H>!^ +M\<#/@```P!(=PW@;P7@BO]`;8`>4$A\1X)+B,)8*5S""E@+7W +M*01/].!X:0`@`#_8X'CQP+(+3_0H=I(,+_T`V0AW`O"F?B3N+RF!`TXA@`<` +MW0\E#1!B#R`"J7``V07PIGM@H@'A+WG?"5.!1"\^&P`A@G^``-1--GI)B@MZ +MSW*``-P=-7I@@NWSI7OL\;T#3_3QP%8+3_0(=A/P*@D@`*EP#_`O*($#3B"- +M!Z]]8@@@!:EP"B$`@!`F3A//?N_U\^Z1`T_T`-H$\`'B3WH;"E,!1"D^"P`A +M@W^``-1-5GMIB^D+#H`"\/_:X'](<`#9`-H/(@(``O`!X1<)50'/<(``W!WP +M($``2WCW\R]X`O#_V.!^X'@(<0#8#_`O*T$`3B."!T]Z$"&!`,]S@`#<'?`C +M@@`O>45X\^G@?N!X\<`Y"E``50J0`!<*T`#/<```!2O."J_T2''1P.!^1"@^ +M"\]P@``4V``A@7^``-1-]@D@`RS:\_&`X!X\<`6"D_T"'8*)4"0RB"!#P```2M("J'TRB&!`R\H00-.((\' +M$"7-$Z]]R7#:#N__Z7$:<(P@PX_*(($/```"*QP*H?3*(8$#+-@,?UIP"B&` +M+X``U$U`(0`A)W`6(``$"B"`+X``R,0*<=9Y-@D@`PC:*?!#L"?P+RA!`TX@ +MCP?)<(8.[__I<4IQ+'\`(4%T%GD6((`C8I%`D!`ES1,+"N,`KWU@L&.109`) +M"L,`8;!HB42(!PK#`&2H19$CD+D*0H#<[:T!3_0#V#D'8`,`V?'`1@E/]`X/ +M;_]*($`@@>`J#>__PB`!)`#8;@IO_SIP"@]/_QX/;_\(=@AU<@I@``IP"G"B +M#R``J7&2"F``R7`*<,EQ7@M@``$2`C;HY5IP&_(/]K;E'?(&]HWES"4BFA/R +M&?`C#1`>)PV0'A/P5R7!'B,)504S)D%P@`#4ST`G@'(T>`!X`M\)\`/?!_`% +MWP7P@.8!W\HG(A'F#D__R7&X<,]P@`#@5@H0A`#I<*ERJ',Z""_W"B6`!,EP +MJ@RO_`42@2"Z#D__SW&F```(`[C%>`"A4B``H,]RI@"```;RBB$*`"2B!O`0 +M&H`/````/,]QIP``2(#@`]C*($$$$*&A`$_TSW&``,BE`K@4>.!_"&'@>`#9 +M`K@4>,=P@`#`I2&@(*#@?RBH`K@4>``@@P^``,"E+0F``("#F6$@HP&#&F(" +M(8```K@C"24`0:,(BPD(TP,!X`BK`-@`H^!_`:,`V`"C`:/@?PBKX'[QP.H/ +M+_07V0]^A"X(%@`AC7^``*0^`*46""`%0"4`$B*%"0F5`H?ISW````8T]@]/ +M]%4E0!;Z#^`$#-FV#*_^R7`!V!$`;_0!I>!XT!J8OP```"!1`T_VX'[@>/'` +MX<4`W>'%BW%F#*_^"-@3Z!8,C_X`P8#@RB!"`&`,HO7*(4(#SW"``(@\H*`` +MP'8((``!V&4'+_2@H.!X\<#*#@_TH\$:<#X*K_TH=X#@ +MAO)V#F_X"G`O)0<@A"@()L]Q@`"L/C(A5`X6#6__JG`(=2(*;_\"@"J-VG`) +M%9,0`=T`V`\@0``O(@<@BW`Z<"H*[_4(V2IPRG$.#R_W2G(`WD+&HPP0(4,, +M4"&A#!$B&N^"P58+K_X%V`;H"G!:"Z_UR7&#Z,EUSW"``(@\`("`X,PE(9`T +M\D'?@.40WNEU-O)>#H_V,O""P1X+K_X(V"[H`L`F"Z_UR7$HZ`7O0@Z/]AOP +M>@M@!6IPSW:``"#5"&8?"!`"9@M@!6IP"&83"-`!6@M@!6IP"&:$X/`-@O;/ +M<(``B#R@H$'=`-X(\`G=$-X$\(#GRB7B$"IP2G&I/'`P@T/]/(-;_@(=@AW`-T7#M$0D@SO]P/8$PC0`)(*3_\+"%``J7`" +M\`'8FNB,)\.?&/+/<(``B*8`@)+HX@MO^.EP"'8-\"\H@0-.((T'L'VI<(H. +M[_\!V1`F3A/V[LD%#_3QP%(-#_2BP;8(K_U:<*<($``O)X<4I@MO_^EP"'6R +M"&__`H#*C3IP`-@/((`#+R`'((MUJ7"^"._U"-FI<"IQH@TO]PIR$@IO_^EP +M"''/<(``8%=6D."YT2(B@`OT"PD?`!,*7P#/<```_A0V#6_TP+F*)T00#PY0 +M$!<.D!``V`SPSW"``%#BBB=,$`;PSW"``%CBBB=4$(#@$`XB]\HA0@2I<`IQ +MZ7(`VS8.+_<*)(`$_00O]*+`\<`/>%8-[_\`V88@_PW1P.!^X'CQP`]X0@WO +M_P#9P+C1P.!^\2"1*!T"$U`;1``! +MV6`=0A!XXA5Z@**H&P0#P<;@?\'%$GG/@!\P`,(:!!Z`'Y,`0AD!I@0>@!\G`((1 +M!!Z`'R$`PA'X9Q1XQW"``*"D@(CDY(KV!!Z`'P$`0EX$'H`?`0""C@KP!!Z` +M'PT`0EX$'H`?#0""CHPD0I22]@0>@!\/`((6!!Z`'P\`PA8$'H`?/P#"&`0> +M@!\+``(9$O`$'H`?50""%@0>@!]5`,(6!!Z`'R0`PA@$'H`?"``"&00>@!\5 +M`,(?!!Z`'PH`PFP$'H`?"@`"G0"(C"""@HOV!!Z`'Q0`@FP$'H`?%`#"G$#P +M!!Z`'QX`@FP$'H`?'@#"G#CP!!Z`'P0`Q@"!I@0>@!^S`$(9`:8$'H`?*P"" +M$00>@!\#`,(1!!Z`'[<`0B`$'H`?!`"&$00>@!]5`((6!!Z`'U4`PA8$'H`? +M`0"".`0>@!\/`()L!!Z`'P\`PFP$'H`?#P#"G`0>@!\/``*=!!Z`'Q``QQ00 +MN8&YB+F,N2&F!!Z`'P<`1Q$0N@4B@@\``$810:81"U$`!!Z`'R``QA$&\`0> +M@!\@`,<1!!Z`'P$`QA7B#R`%"M@$'H`?@`!&$00>@!]``$(2!!Z`'X``1Q$$ +M'H`?`@#&%00>@!\0``88@@T@`.EP!!Z`'Q``!Q@$'H`?$`#&%)(-(`#I<`0> +M@!\"`,<5`X6^N`.EZ0$/].!^X'C/<:```"@$&8`/`P!&"8;H!!F`#P(`1PG@ +M?N!X@.#QP`#8&/0*\!I@5'K/"4_T`-C1P.!^.6$T>87HSW"``$RD!/#/ +M<(``H*3@?SA@H<'QP`AQ$0A1`.8+(```V`O9#_`/"9$`U@L@``'8"=D'\!D) +MT0#*"R```M@#V<]P@`"DS""@$?"+Z0+9SW"@```H,:"J"R```=@`V?'Q'=CJ +M"&_T";C1P.!_H<#QP*H(``"&#(__]@[/]0X(``#1P.!^X'CQP,]P@`#@5@J( +M$0B1`,]P@``8&IC9!O#/<(``8!B2V88-S_6Z#<_UT<#@?O'`X<7/<*```#`% +M@%(@``!1"!\`G@W/]`>X)7@0N(4@D@`!I98,+_0!V(X.#_^&#$_X@+@!I74`#_3Q +MP.'%SW6@```P`X6:N`.E\@T@!078`X6SN+JX`Z7F#2`%9-A-``_T\<#2#^_S +M"'+/<(``+!SP((X`SW"``"@<36"JZ<]W@`"`'`"'@.#*(((/``#&*.`/(O3* +M(8(``=@`IP#9%?#T)D(0SW"``*3R!KI%(LP`SW.@```H@:-%@S1X0+"!HT6# +M`>%`L#!YVPE"@QSP`-@3\/0F`A#/<8``I/+T(0$`!KJ!NA"Y17G/`6Y17DP>0:X@;@0N05YSW"@```H(:#@?A"X3R!"`(>ZB;K/<:```"A!H84@ +MBP`!H>!^X'C/<:```"B+Z`09@`\$`,8`!!F`#R``QP`)\`09@`\$`,<`!!F` +M#R``Q@#@?L]QH```*`09@`\#``!"X +MA2"1`0&AX'[@>(`@P@X0>`:X@;@0N05YSW"@```H(:#@?L]QH```**/H!!F` +M#Q``0FD$&8`/$@#":@09@`\0`(*9!!F`#Q(``IL$&8`/$``":009@`\2`()J +M!!F`#Q``0ID$&8`/$@#"FB'P!!F`#QH`0FD$&8`/&@#":@09@`\:`(*9!!F` +M#QH``IL$&8`/&@`":009@`\:`()J!!F`#QH`0ID$&8`/&@#"FN!^X'[@>/'` +MM@WO\UEB"B,`@$AP-'D(]``AC0^``$RD4-D$V@WP`"&-#X``H*1`C8#9C"(" +M@`+:RB+J`(&-SW:@```H$+P%)(P?```"$X&F$+F!N8JYC+DAIB*-$+D%(8$/ +M``""%"&F)(T0N04A@0\```(F(:::">__(XVM!>_SJ7`#N<]RH```*"]Y@.!` +M*0`$Q2""#P``!@[%(($/```'#@&BX'[/<:```"@$&8`/!P`'#A#H,0A0`$$( +MD0`"VL]P@`"`"009@`\$``8.X']%H`#:SW"``(`)!!F`#P``!@[@?T6@`=K/ +M<(``@`D$&8`/`P`&#N!_1:#@?N!XSW&@```H!!F`#P8`!P00>!"XA2"0`0&A +MX'[@>`.X-7C/<8``8-,`88"XSW&@```H!!F`#P8`!P00>!"XA2"0`0&AX'[/ +M<:```"@$&8`/,``'!!!X$+B%()`!`:'@?N!X!;G/3!Y@.!`*0`$ +MSR!A`,\@X0'/("$"SR!B`,\@8@(!H^!^X'CQP.'%"'5`V!C9.@KO]3/:@>#* +M(((/``"*&.$" +M[_4!V.!XV0+O]0+8X'CQP-8*S_//=H``;*@!CD0H/@L`(8U_@`"\IP"%*0A> +M`!2-DN@`CA$(40!J"`__@>`!V`/R"8TBC@T(0``"K@(*8`0!V/T"S_/QP((* +MS_,:<,]W@`!LJ`"/GP@`!*X*+_\`'P(4">C/<(``")H`B(L(T``B"`__@P@0 +M`"&/+-@Z<,]V@`!LIPQY5B:-$B=U40@0(`"%8PB0`!2-@."@"6+VRB!"`P#9 +M#?`J<`QY`"9`'E2`"PH1`E6`5*`!X2]Y[0D2@0"%42``PP&E!-@`I0'8`J\! +MV,(@`0`!X`WP`84`I12-!NC6"&_VJ7`$\`F-`J\!V$X)0`0U`L_SX'CQP-H) +MS_//<(``;*@AB,]V@`!LIT0I/@M6)HT2C"'#CR=URB"*#P``DAKH"0KTI@[O +M]Q'8-(T7\"\J00!.(H`'`-H/(@(``K@5>%)[VF``@F1Y+0B0`$T(T`!!%@`6 +M10A0`.SI%(V*Z,]P@`"8SLX)``2Z#R_VJ7#-`<_S%(UD>!2M!(IB@@4H_@`& +MA2=P!J4$BF."!2L^``>%)W`'I07P%(T$>W2M`-@`HMWQH<'QP"8)[_,(/$V&_"K_E>$3`(0L>`<]PH```(!"`F[H"N&ZX2"```,FX17A#P`;P +M"0L>`IVZ0\)!Q(MVR7!H@4E5X-+_C#N,]P!`0$!`LB`.`>\@0@ +M@(S_V0OR+R@!`$X@@0`@#8BB'6`,]RH```*&\:6(`#V\]Q +MH```#&>AR@^/]038`1H8@`0BON\!`0$!SW6``+`(-/+/<*```"`:@*[H\@J/ +M^Q6%E+@5I2CP12$!!\]PH`"`)#*@S_$/A;.XM;@/I4UP[KC/(2("SR%B`L\A +MH@)%(0$&SW"@`(`D,J#"\0#8&:7/<8``V+8.@0'@#J$0V<]PH```)"&@`X49 +MVBB5,+@0N05Y`,@0<0'8P'@"N(&XSW&@```G`*$#A2B5,+@0N25X_QH8L$AU +M\_#BN9ORSW"@`(`@$H#/<*````P-@,]PH```*$,0`88&$`*&,Q`!AN.ZRB5B +M%![T#'#[N,HEHA08],]RH```#'2"$X(;"P``SW"``"1)!H`+"-X"`]@'H@7P +M%=T&\`L)W@<`W0+P%]V/[<]R@`"P""&R!"&^CP,````!V,!X+X(0N"5X#Z*` +MY;3TSW:``+`(#X;/=X``6+<*((`OH```*!4('@0\AI38'@W@`2$`"F*H`L]U@`#H5`"%Y)!$OYX)H`!3)\`0`(5:"&``4R?!$,]Q@`"P"`AU +M"PB1!A6!@+@5H1N!SW*@```H`>`;H8(2`8;#N6T)`0`$&IB#@A(!AL.Y80D` +M``,:F(,L\$T)W@`(V,]VH```*`0>&)!F"0`!"'5!"!`%SW*``+`(`X(HDC"X +M$+D%>0#($'$!V,!X`KB!N``>`)`#@BB2,+@0N25X_QH8L!G=!O`7V*(,[_., +MN`'8H@L@`@#9F>4D!,'_J7"M!*_SH<#@>/'`0@R/\PAU`-_/=H``6"4P@."F +M!"&0CP$!`0'*(,$#,?($(8&/!`0$!!7R+RE!`$XA@`,]R@`!XLP!BSW*``'`) +M(*H3"=\!)!Y"$$05@1#LMCJN^ZY,(`"@RB`A`+P,@O49!(_SX'CQP)X+C_,$ +M(K[O`0$!`3IPM/+/<00$!`0+(D#@%_($(8&,_]@+\B\I00!.(8`'([C/<8`` +M"#WP(0``SW&``*A`A"@(!C(A0`X'\!01`"`2"*`"&!$!(,]V@`!P"<]U@`"P +M"`"N%84$(+Z/$'```%P/0?L*(H`O`"```$01`"#/<8``;"$`H4$H`0-3(=,` +M((Y!*!0%%&D%(,`$&G`-"=X!$H65N!*E8O#>#\_\O0@5!,]Q@``L!_`A#P`* +M)(`/@`",!B".R[\8N8*YSW.@```H,AM8@`(DPB,`V8RY.F++ND`K#"/7<@`` +M``B0O$GW!20`(U,;&(`!V`NN2G`X\.5\4QL8@TD.A7```,`/0GD6)`(`8((A +M"34(`8(`V@\B0@!ANDXA#`@!*PX#.'ME>CAX!7X1\$(A`0@`V`\@0`!AN#A[ +M!2,.`(HB_P\%\(HB_P](=@'8SW&``+Q4`*D"&00$0:'"H4IP!/``V)RX-84% +M>4`A`"(UI1JE`MG/<*```"<@H!01`"`8$0$A,+@0N25X_QH8L%T"K_,`V.!X +M\<`&"H_S"'=5(%$$`!$`(*/!0<`$%``Q02@3`P84`#$$(K[O`0$!`4(H$@%U +M\J'-[;C1(&*`!?)6#F_[@L#/<00$!`0+(D#@%_($(8&,_]@+\B\I00!.(8`' +M([C/<8``"#WP(0``SW&``*A`A"@(!C(A0`X%\`6'2@Y@`B:'SW*``+`(P!H" +M``'9#PC>`3*"E;DRH@#9!+C/ +MRB9"$*$2`;\*#-X[C,)B*0$O)&(<$`H1I/"!$'!!$0(`@1$2"7[2.'")`*X@;C/<:`` +M`"<`H0.'*)`$H1&!%7D6@0'@ +M%J&AS0\('P,`W0?P"-UH\!K=K+BA&ARP?.[/*(J`D8P@1`*@$A);`,&``$SW&!`(`K +M))$0&$`$C&8JL)JHX!N``$`I`@.=N@4B@@3/`6H3#( +MSW&``+2FA!(#`15Y'H$:W7A@'J$0B@'9K@XO_RARJ7``V1OPSW&``-BV#($! +MX`RA$_#/6XSW&``%BV@_)`V*`:'+!5$0`&SW*``-BW`>!5&1@`<1$`!A5Z%H+/ +M<8``M*8!X!:B,,@4>2")$PE?`<]Q +M@`"`YB.)"0G>``'<(.PIN\]QI@``!"2!P;LEN5,A3``)(PT#`B-!`Y%SSW.` +M`+`(<(-O)0L0Z;O*):(09H+ZN\HE(1$%[078%;BDH"?P)^E0(\T"K+U`+,$2 +M)7U`Q2#'P[M$O\&_P[EE>2<-GA;[9P.\=7N5?)MC.V//=(``0-EK9`\+W@%& +M)`@38PQD"`*H);_N!P`#< +M!_"L$0```=P!X*P9``"8[`.&*)8PN!"Y!7D`R!!Q`=C`>`*X@;C/<:```"<` +MH0.&*)8PN!"Y)7C_&ABP`-A5!6_SHL#@?PC8X<7/<*8```2D@,]R@`"P"$$M +M0!'*$H$`P;@P<,HD1A#*)`400"Q!$D\A`P20&L``$0T?$0T(``.0N9*YD!I` +M`.!_P<7QP.'%"'7/R&#`9`0<0C8"?<6""``J7"%Z""#8'FI"&`SW*``+`(P;D9"=$`SW"``#`)((`&@0'@!J$`V1_P/8+//'`X<7/=8``L`@5A00@OH\`<```)/(O*0$`SW"``(2H]"!` +M`#R%@KAB"Z`!6H48Z!6%#0B>!P8)C_\'\`#9SW"``+Q4(*BB#4`9SW"``"1) +M(("@%0`1R@TO_C1X+01/\_'`M@M/\S"`SW:``+`(!"&^CP$!`0$(=37R!"&! +MCP0$!`04\B\I00!.(8`'([C/<8``"#WP(0$`SW"``*A`A"D(!C(@0`X&\`6% +M%@A@`B:%P!X"$!$(W@$2AI6X$J8/AI>X#Z85A@0@OH\0<```"_21N,X:&+`0EQ4(`P$,E3"Y +M$+@%>0#(;0D!`#"%!"&!CP0$!`04\B\I00!.(8`'([C/<8``"#WP(0$`SW"` +M`*A`A"D(!C(@0`X&\`6%)@\@`B:%P!X"$!6&!""^CQ!P```6]`2'*0B?!'8. +M#_L5AIZX%:9`)0`2&J80)O\P#8X'CQP/H)3_--<,]P +M@``L%@N`#.@%V16Y"Z'PR0'@L[BUN+BX\!H8L`2ASW"@`(`@$H"(Z,]P@`"P +M"!209@^O]\.XSW$$!`0$"R)`X"+R!"&!C/_8#/(O*4$`3B&`!R.XSW&```@] +M\"$``(0H"`;/<8``J$#/=H``L`@R(4(.SW&``'`):@RO_4"I"'4,\,]V@`"P +M"`.&(@X@`B2&P!X"$`#=P!:`$!4(WP%*"B_\`-D^#*_]G!X`$`AU!"*^[P$! +M`0$']`&&"P@?`(#8P!X"$,`6@!!`*`$&/0C>`0^&3R#"!4^FL[A2AK6XE;I2 +MIL]R@``\P$""E[B#Z@^F37#NN,\A(@+/(6("SR&B`D4A`08C\`.X%7C/ +M`_H/``$(\,]P@`"P"`^`];CD#\+]SW"@```,-(#/<(``C*@@H`39SW"@```D +M(:#/<8``L`@/@00@OH\L````!/03@1_H#'`-")\$+'#Y"!Z&!=G/<*#^U`45 +MN02ASW>``+`(P!>`$`2A$0C?`>8(+_P`V=H*C_T(=0^'"PB>!`#=LO"Z%P`1 +MQ1>!$`HC@"^``(RH`B!.```3`2!.AP3@66$"(1$`SW"!`"PF6G!2"^_T9]G/ +M<(``>#D0V48+[_0:<<]P@`#XRSH+[_0(V<]P@`#,."X+[_24V4X+@!@`$P$@ +M2G`[L#@81`0*(H`OH```#$P2`2#/<(``=*D@H%H((`$J<`AR$!H`(!V'SW&@ +M```@9.`0H0'8!QD8@``9``3PV00B0%",(`*(,O)&``D`T."`W,P@`H,R]`#9 +MSW"!`"PF.:"(&$0`M!A$`.(80@#A&$(`SW"!`"PJ9!A"@&080@#)<$AQ0@VO +M\ZER"'4>\(P@`X`.\HP@`X3@W,P@`H,.],EP%@BO\TAQ"'40\,EP1@IO]$AQ +M"'4*\,]P```R$0H/;_,$(8$*`-T>[<]QH/[@!`78%;@DH*2@SW&``+`(#X&< +MY;.X#Z$`V<]P@`!X.2.@SW"``/C+(:#/<(``B#0BL,HE01"-[6()C_P+Z,]P +M@`"P"`&`"P@>`/8(3_L(=;4&+_.I,]Q@`#8/H0H"`;6#N_[ +M,"%/#AIPR7!V#N``Z7')<.EQ"@NO_`IR$26`DPP((@#*($(#708/\_'`X<7Z +M#R_U"'7.#J_TJ7!J#N``J7`Z"Z_\J7!5!@_S\<#AQ0AUA>#*((8/``!9`,\@ +M)@,`#F;SRB%&`VH.X`"I<(8,K_RI<"D&#_/QP,]P@`"D5#H)[_08V<]P@``0 +M+2X)[_08V='`X'[@>/'`C@T/\PAU`-_AQ\]PH```#`6`@>#*(.(#SR`B`ZP- +M8O/*(4(#SW"@_D@&!=X5O@2FI*;/ +M!@'8$0A1`,]Q@`!8MP"!`>``H1$-T!3J#*_\BW`*(0"``_2I<68+H``H<$MI +MH.(4`0T`,B:"<(``D,]`)P!R5'@`>`'8"'&$\,]P@``P"2"`"($!X`BA`-@! +MV7KPSW&``#`)0($'@@'@!Z(`@0>`!*8!@4!X`-AK\(8-P`#/<:```"0*@03H +M`M@!H<]P@``P"2"`$($!X/8*H``0H>WQSW"``#`)((`,@0'@#*',\<]Q@``P +M"4"!`H(!X`*B`H%`>$;PSW&``%BW`X$!X`.ASW&``#`)]?'/<(``,`D@@`.! +M`>`#H2;PQ@N@`P'8MO'/<(``,`D@@`6!`>`%H0GPSW"``#`)((`$@0'@!*&2 +M"```'O#/<(``,`D@@!&!`>`1H9+QSW&``%BW#($!X`RA`-D!V`[PSW&``-BV +M#H$!X`ZAF_%!V#H,;_.,N`'8"'$'Z-H+H``H<"(,P``$\`CIC@\/]<]PH``` +M"`*`SW"``+`(#X`="-X$SW"``'@YXZ#/<(``^,OAH,]P@`"(-.*PX@Y``!4$ +M+_.AP.!X\<`%V,]QH/[P!16X)*#/<(``L`@]@&3A>@E@!`C8E@WO_0/8`_"J +M#X_\SW"@```D"H`%Z&QP\P@>@-'`X'[@>,]Q@`!TJ`AA$0@>``0BON\!`0$! +M`=@*],]P@``D20:`X;@"V,H@(0`%V16Y$!F`#.!^X'CQP$0B`%,_"!$"M@F/ +M_`L@@(P_\L]Q@`"P"`&!"0@?``'8./",(/^/"O0$D1$(@0\``/__#X&2N`^A +M]/$"#X_]*/!$(C[3SW"``"1)!H`?].&X`M@>],]P@`"P"`&`$0@?``0BON\! +M`0$!!/0`V`/P`=A!*@%1P[G/@%VA6Z"Z+PR0'@L[BUN+BX\!H8L`2B`-_/=8``L`CRI>^E +MX+7SI<]R@`!P">6J"B*`+X``)$D8$@`@YJKKN`'8PB`!``*X%J7UI<]V@``P +M"?ZVBB$"(``:0@3GIFP0`"#]I2)X'J4_I?BVSW"``/`A^*#/<($`."S@H/NE +MY*KDI@39SW"``&PA(*`'BLX:V+.@N`>JZ@BO_.*JBB'_#\]PH```13R@.*"* +M()@-6!L`(`P80"0(&$`DSW&@```H`!G`@XH@&`@`&``@2!``(!T(7@`S$0"& +M!""^CP#````&\O_)!.@`&A@P_QK8LT@8P",L<,]Q@`!8MC<(G@,/A8NX#Z55 +M(<`%`*;/<```&*0B``"$@@`@#/<($`Q"LA@,]P``""#H#ARB#!`%!PRB8N$(#F%_04$@`@ +M@.!:V,H@H0<,<1$)7@;/=H``L`@_AA<(10#/<8``V+@=@0'@':$#WFL"``"` +M%@$0SW6``"RI`(%`)1(6`>``H2#8B@E@`P"E`=C/=Z```"`%I\]Q@``8O@*! +M2B``(``0$0`#@0`0$P!B#R`""G#`%PP0`B$"HP,C`R1`PCN'@GB">2&E0J5C +MI6H.+_X$I0X.+_X+M8'@`=C`>`JUSW"E```,XH`*(8`O@`!P"5,GPA`!&8(@ +M4R=`$(/@RB!A!<\@(0-<"&'SRB'!`T$O01/"N0@90B`/AN:E`-^+OQ\(W@($ +MN0J5@;DE>`JU!]@(\!4B#"``'``4`O`$V`'@]0@4@L]P@``(F@&`!H#KN*P/ +M0@`/ADH@0"#K>,(@`23/``/>?@J/_('F3O."YHSTSW&@```0;($`V"R[SW&@ +M`(`A)('"NT#!(,'ANX)I9+E((0$`RB(!`!+R`A2",`T*1`!0=,HB9@!*]U!T +M`-K*((8`RB!E`,HB)0#@N\HD(1``VQ/R`12#,!,+1`!P=,HD9A#*(R8`2?=P +M=`#[D$?1%*?X"Y[M!*<%PPB%B``?> +M"_!%*?X"02D!<07P(KD#\`#9"-Y!@BZE3*4!4"``<*0``(WF\.T1%*(@`@F@ZO_4IQ +MSW*``%`)SW&D`(!!=H'/<*0``$"B'<00!".##___```PNZ0=Q!!^@0H:@@2H +M'<(0*+NI'<(0XQ``!G&!)AF$),B[%;ME>!09`"`1@2FXQK@L&00@*8H(B@BY +M)7@'IP4%(``*=<]QI@``!".!-+G!N3`91"`,(-K_TP>03P`@Z/_0?>2B<``,]T@`!P"<]PI@``!&"``QS"$4$KP@3"NDBL +M02L``\.X0"J!`P4@10!`'4`14R/``D`5@1`.I>"YT2/BA\HF(1+/=X``+*EJ +MIQ07!A%`*@0!!22"`4JW/'H/IS@?0!'"NL]W@`"`VTIG#0H$`$^%C[I/I8?F +M=*64](WA;O0N&00@SW&``*C:(($#X`4H?@`*(,`.`>`"N!3@':4B#:_]%-@T +MA0GPD@_O\@;8SW"F```$((`TI00A@8\#0```&_09"%Y&SW"@`(`@4(#/<(`` +ML`@?@`D*!0`!V`/P`-B+Z`QP$P@?!VQPSW6``+`(NP@>@!T)@0\`0````-C/ +M=8``L`C$'0(0`-^7OQOP&PF!#P$````!V,]U@`"P",0=`A``WYB_#?`G"8$/ +M`@````+8SW6``+`(Q!T"$`#?D[]4A<]Q@``LJ4JA#?#/<*``@"`P@!*``]XF +M\`0_`-@5Z`K>SW`$``$1,@@@!`#9!"#`0X#@RB;B$6QPX+C*)B(2 +M[PZ0D@SP+H43";0#!][/<*```!`4@`D(0``(WH?F(@,"``HD@"^``'`)!!2` +M(,]W@`"P".&XT_(*((`OI@``"!$0$Z8`WD$K@"+"N`'@02O"(,"Z67AAN$$K +M`R$2$`VF4R-#@5,E!!"]>5,A$0!!+8$04R%2`%,C02#,(^*/`=O*)((3"/1! +M+0X1P[Y!+0P2P+P`VX#CC_0$N,5X0"Q#`V5X"[DE>!&Z!7H3O`@4@""%>@ZX +M17A3(@$@&[DE>)JX$*%!,. +ME1(/")0##PX%<`@````=WB/P0!>`$$2XP;@!X"$(TP#0AP0FCA\````8=@[O +M_2N^T7#*(`8$RB;F$5#W3@T```AVE.#*)N(3!_!"#0``"':4X,HFHA@*<""` +MSW"``"RI+!C`!"V@PA>!$*R@![F*N:SPX+@*(H`OH```$*WR"B&`+Z8```@" +M$1"F`Q$-IE,@@"&`V@0E@1`&N25X!"("!`2Z17A$)0$<#;DE>*EQAB'S#PZY +M!7D(%(`@X[T.N`5Y1"6`$!2X!7FI<(8@_@\5N"5XB+A2($`%$*=!+<$0P+D" +M'$(@RB*"#P``___*(H$/```0'RZ'02@#(E,C0X2N'T00;J<#])2X$*=A#9X4 +M0!>,$!$,$1@$(+Z/````&";R#P@>`D$HP0!3(7Z`!_0)W@J^!""!`S4)@`-! +M*$$$P;DI"=4`%0F1`"$('@)!*,$`P;D!X14)D0`)"!X"S.0&]@D+E`,)"L4` +M"-XC\$$HP0#!N0'A'PG5``0@@`\````8'@WO_4$HS@(+"(0#$(<5")X"^@L` +M``AVE.#*)N(3"?!0$@$@#H<0<0?>RB9B$@`1`2#/<(``+*DL&``$+:`"%($@ +MK*`'N8BY2I!%>2JP+H[/<8``L`@9@0T(T0``V!FA%=X#\`#>@.8L":+_RB""`TH@P"`<'0`4 +MSW>``+`(QQ>`$!,('@#/<*```"4`@)\:'+`J#D``H,V&(/F/"?2$YLPFXI`% +M]*`:G+\```"`,-C/<:```"`\&1B`4X6,%P`0,0B``!27P[@E"!4!`8@V"<_Z!O`N#@`!!/!F&1B$R7!Q!J_RHL#QP"H.C_+/ +M<(``)$DF@,]U@`"P",]V@`!P"0*.!"&!#P```@A/A93HCH43#!$8T,D(VYN[ +M9'@5",``%0R1$Z#-X[C1(&&!!/*1ND^E!.FONK&Z3Z7ONM$B880%\BS8':40 +M\!"%#PB?!BZ%>@O@&`#:':4]A<]P@`!LJ;8*(``AL`^%'PA?!+H+P``$C@GH +MSW"```B:`8`&@.NX[`L"`!"%"0B?!@#8(/#/=Z``@!`(AQ,(WP8]A8'89.%> +M"^`##+@(AQL(W@<1")X'`-DBKLVX#J7J\0'8`J[F\0QP_+@?V,H@H0>XZ,]U +M@`!P"0*-SW&!`*@Z$N@"VL]PH```)T"@`-C_&ABP!XV`N`>M!(&%(`$(!*&` +MW@CP!(%"WH>X?@D@``2ASW"``"1)!H#KN-`FHA'0)N(1SW&@```HL!F8@P'8 +M`1D8@`*-!.BJ#,_^!/`^#0``/06/\@/9SW"@```,)J#@>.!XX'C@>.!XX'C@ +M>.!XX'C@>.!XX'C@>.!XX'C@>":@X'[@>*'!\<">#(_R1,`5W5,(W@`(V,]W +MH```)`2G3@D``,]VH```*#T($`4RAQ.',+D0N`5Y`,@0<0'8P'@"N(&X`!X` +MD!*',XAD?)"A`_"$ +M>W"AS\D`'P!`-X(`'T!`T<#@?N!X\<"J"`_WSW"``+`('8`7Z,]QH`"`(#"! +M(GAJN$@@@0`;"=0`SW"@```D"H"'Z"QP^+CX".$#RB`A``#8T<#@?O'``@N/ +M\O82`;;XR<]U@``LJ25X0!T"$,H);_;_V-()3_9!C0.MTFI,YL#8(@D@`#P: +M`K#/`$((`/ +M``#_OX^XGQHNY9`@"`"D" +MC_+@>.!^X'C@?N!XSW"``'"IX'\`@.!XSW"D`(!!,8#/`.R#'+/<(``F*@`V1$*7@;/U@A@`0C:SW"``#`),I!1 +MD!"Y17DPI3.0!8`QI0^E!X8=I58EP!)J"^_Z527!%9,1`"9H'0`4&Z7/<*0` +M`(``@&0=`!0,]T@`"8J`:D)Z0!V!.T"(_R#@]@`0AUSW&``+`(#X'/=J```"2PN`^A +M"H8#Z`+8`:8`V<]PH```#"R@X@Q``!X(0``*A@3H`M@!IH#EE`X"`$(/X`(! +MV$8*3_TY`(_R`=G/<*```!`IH`#9SW"``%BX(J"M!*_V%-C@>,]Q@`!PJ>!_ +M`*'@>/'`D@]/\J+!BW96#^_[R7`*)0"0'_3/<(``5#WT +M`,#IN(HB"`"3\L]W@`#H5`"'SW:@```D))#/=8``L`A$N5,AT0!$IB^%60E> +M!*H*#_\*)0"0"O3/<(``U-H6($`$((!@>0"'"'4*A@3H`M@!IA`>@!\``/]_ +M&]@'IAH*S__/<(``\"$8@(#@:`O"`*T-D1;/<(``G,2:#&`9`-U.\&(+;_\J +M(Y\PGXI4#].EU&/#_#Y"4%0@0(%X,```*)0"0 +M-`S!_P?PO@G/_P#8&:4(=1$/D1;/<(``G,1&#$`9I.T"A@#=0<`I")\`*@[O +M^X'`"B4`D`[T`<+BNLH@H0+*(8$/``#^`)`.H?+/("$#C.T$V`2F&]@'IL]P +M@`#P(1B`@."\"L(`@.7&]`'9SW"``/"C(*#9`P``X+C*`P$`SW:``+`(+H:X +M%@(10GEDN;H>1!`OA@#8@0E?!,]Q`@("`@0B0&``W!#P+RH!`$XB@P=!*\T` +MSW*```@]\")"`Q`@P``/)(P0\>@:[`0A@8S_V`SR+RE!`$XA@`H`-DTJ`#=SW"!`"PF8@IO_ZR@SW:``+`( +M&:8+"-$`J7`9IH$($`!R"P__"B4`D&CT1"(^TSKT37"&(/P#C"`"@%#&&XA.`#VLHB +M!0``V`;P@GDO>2BK`>`I"),`SW2``,3:`""##X``4`DHB_`DC!#A#$20`-GP +M\9H.#_^O`@``G!8`$,]Q@`!4(AIP1"@^!S`A0`X`W0GH0@AO]@IP`=@Z<`+8 +MMO"AS24(W@$$(K[O`0$!`0SR+R"'"HP@`H8(],]Q@`"P"`^!F+@/H6H*```* +M)0"00?7/=H``L`@/AC4('@0\AM38"@R@`,ER"'?F#Z_V`-@`EH8@_PP3"!$" +MSW&``%BW`H$!X`*A@.<\#D(8@!8!$`:!`>`&H<`6@1`A"=\!@8:<%@`04B0, +M$$"62B0``'26"@T@%%,D!1`/AO.XS`O"_!.&#>C/<(``)$GB@$(+[_SI<(3G +MRB4A$.3R"B&`+X$`+"8P$0`@"^@/AA,(7@4L$0`AA>CV"$``"/``V,]QH`"` +M'!FA,-@#,)R*02`QB%\H@P@,J"T_V"'%`)@`3P@[@`.ER@.#*)6$5 +M2B$`(""6AB'\`(PA`H!O]-4(D0#`%H`0.@PO^P#9A"@!#``ADG^``/PB`!(/ +M(`COSW&@```@.X'N"$_VSW"``"PE!H`+Z",/E1,S)L]S@`"`ST`G@'+T>`!X +M`-_I<`KP`-\"V`;P:!(`('GH`=@`WP'::!J`(`L(D``+"1`@%=T$\('@RB4A +M$*[MSW"``/RI6Z`/AE$(W@3/<(``I-``@$'`SW"@```,#8!"(``(@.#*(,P# +MC"`*C=;WG=AAP)_-!AP$,`'@!""`#P``_[^/N)\:'+`!P`H(8`$`V<]P@`!8 +MN/*@I@EO]@IPSW"``/C+`8#@N.@-0O;/<(``;*@!B$0H/@O/<(``T*``+`(&*?R +M">_[BW`*)0"0!?*I<(D";_*AP,]PH```)2.`4R&```0AC@__P%]_G0C1`4UQ +M#X=Y"9X#!""^CP`T```+\L]P@0`L)@R`-N@*"4``!7XR\`0@OH\`"@``"?), +M<`$(GP!,<."XSR9B$<]Q@`"P"`^!^;C/)B(2SR;B$L\FHA,:]",(W@8%)H`? +M````:]*!!":.'P(```!2)DX4*KX%?@KPA28<$`CP#0A>!28(8`#)<`AVSW"` +M`'`)`(C$N!BX!7X)\."YRB7A%07RX;G*):$4#'#RN,H@(@A$#V(#P'G/<(`` +ML`C8H)/QX'CQP.'%`-T%V`NX7@LO_:EQ_@G/]<]P@`"P"`^`GPC>`L]PH``` +M'!`8@`\`$```(@]@`P78$/`, +MA\]PH```'"2@!_#/<8``6+@"@0'@`J'J"````-G/<*0``$$BH!GP#'#TN`'E +MP'UL`2H078SW&@_N0&%;@DH*#- +M!""^CP```%`(\L]P@``P"1^0'@HO_0#9T<#@?O'`X<4`V,]UH```$`FE0@QO +M\@/8<@@```'8":4E`$_RX0?/_T[;SW*!`$PL%7K@N6"BRB#!``7RBB"%`P"B +M"PG>`HFX`*+@?@#;#O`O*0$`3B&"!\]Q@0!,+/`A@0`0((``)7OTZ,]PH``` +M$'"@X'[@?N!X`-K/<8$`3"P5>>!_0*'@>`/:SW"@```03J``V\]Q@`!@-TZ@ +MX']@H<]QH`"`#`&ASW"``.Q4`(`"@`*AX'[@>,]R@`#L5$""0H)88")X`B"! +M`%!PX'_*($8`X'CQP)H,P`*2"8_[T<#@?N!X"'$`V`AT#_!3;%5ZQW*``%BS +M8((-"U\"2()0<<\@`0,!Y.D,%)3@?O'`Q@X/\@#>#WT>\,]P```2,O8.3_(8 +M\"\H00-.((('3WH0)8T0$VH5>,=P@`!8LR"`:("O?0\FSA#5"5^"C"/#C^;S +MZNWM!B_RSW@`V1#P+RL!`$XC@@=/>A`@@``#NE5ZSW.``%RS0F-%>?+HX'\H +M<.!X\?!#Q44SW&``%BS$VX5>`%AMF[U?<=U@0"X-0"%)0E> +M!`T('@)!*,$`P;D)\`T(G@8@C42YP;D#\`#9!.F>N`"ESW&!`#@UUGD@B0L) +M'@">N`"E7PB?!\]X`-FF#N_Z&G&$*`@&`"&`?X``I#XJ@`\.T1,"@(3@RB$! +M!`"%SW(`!``!+PA?`A7I2WC1(>*%T2'A@`GT&PD>!@0@OH\````8!_+^N<\@ +MX@?/(*$'`*4$(+Z/``0``:7S/P@?@L.XGO&M!0_R`=H$\!`@P``;Z"\I`0!. +M(8,':'&`(<(!E./*(<4``KDP(8P/H``8+#)K,"&!#Z``M"XO>3!TP'KFZ@#8 +M`O`!V.!^X'CQP.'%!"&"C_#_``#/=:```#`%\C2Z;1V8D!2XT[DE>)0=&)`# +M\!()S_N4%0"6^PC>AU4%#_+@>%)HQW*@```N*()`@L]SH```+A<)@0`P@Q$A +M`(`!V,(@`0`$N`7P0"$`!$)XP[C@?L]RH`"`+0J"SW&@```P3R!#`HN[\+AJ +MH@'8PB`!``FX12!``;09`(`*@L]R@```[R$('@#/<(```/`N&A@P62(`""\: +MF#__?___+1H8,`_P0B(`""X:&##/<(``H.TM&A@P+QJ8/P\`___/<(```.<` +M&1B`X'[@>`#9$O`O*P$`3B."!T]Z$""```*Z,"*"#Z``-"_"N@\A@0`O>?#H +MX'\H<.!X\<#Z"R_R`-KCB,]SH```,"&(#R+"`P80D0`2;\=PH``T+P`8@`\8 +M`0``DA,`AE)]I'B2&QB`.A,`AL]V@`#(-*1X.AL8@`"&I'@`I@&&(N@5)E`0 +M$!``($MXRB"!#P``GR'D"V'RRB+!`Q`0`2``)X`?@``8-:1Y$!A`(/_9(*@# +MAJ1X`Z85)DX4'(:D>!RFR0,/\O'`:@LO\@78SW&@_O@!%;@DH`#>"B"`+Z`` +M`##/=Z```"[5IP_="+T#\&X/C_L3AZ1XC"`0@/OS!!B8HP/P6@^/^Q.'JWC] +M]84##_+/=*``@"Q8I'FD#+B=N)^X!7DWI.!^X'@PV<]SH`"`'#NC`]S/``+`(#("C#07@!`3"`$#B'#F"R``0"<#'`IR&?`2 +MAY&XDK@2IQCP`=CLNL(@`0`%VA9Z#X>9N`^G8($%(T`!0,`!@4'``H%"P`.! +M0\`#XD&F`=N'ZP^'E[@/IW`=0!01\`#``]D+I@'`#*8"P`VF`\`.IB>FNA<` +M$0.F!-@9I2FF:0(O\J3`X<7AQL]QH`"`'"#:6Z%6(`P$*82BP8L)7P97"=X! +M,8@%VB.YP+DV>L]SH```%`/9,Z,J@XWB0<$0WOMI8`E?:NCL8B&)?P?&+VE>3J@!_`-VB6`SW.@```4 +M*Z,!V2"C`^)!HR:`+*,G@"VC*(`NHP/9)Z-P$``!`Z,)A)FX":2BP,'&X'_! +MQ>!XX<7/"\(G@'/;&3SW.!`-0S4(./@U!US"$!@\\@[@'#]R^CL*/@?\'%X'CQP.(( +M#_),#"_R$-K/ +M`L@0(4/IF_TSW6``-C;\"7$$$`IAP,%)PT!&+JE>C(;F*`/"Y$`(@AO]`IP +M6_"&)7^-'O($CYOHSW&``#`)'9&,IF2X';$$V`6O!J\9"]$`'!,`I@VF'9%D +MN!VQ#-@%KPC8!J]>#.__"G`]\',+$0%`+HT!!;D`(58#G+@/IA#9$M@&K[H6 +M`!$EKW*XNAX$$,]PH`"`'#N@C@LO\@;8`-C/<:```!H!H00H/B4`$@`@)W!! +M@``AC250H4*``"&1)5&A0X!2H02`$Z$!A0*A`H4#H0.%!*$0$0`@!:$#\)>X +M#Z8/A@L@0(4,\L]Q@`#8VT"/(($8ND5Y,AM8H+.X#Z;1!L_Q\<">#L_QI<$( +M=P*+*'9Y<*"+9,`1'$(S`!($`0(2!0$$$@@^Y17D`(0(!4'D`'(0P1Y9'>3QZ#[DE>@`B00$P>@(<1#!< +M>0^Z17D!<3!Z!!Q$,%QY#[HE>N!R4'D&'(0P/'H/N25Z`")!`@@<1#`P>EQY +M#[I%>1EA,'@*'$0P4R6!$86Y"+DE?:"W()8G>!QX"+@%(,`"`;<`P`&G`<`" +MIP+``Z?I!>_QI<#@>`]Z2+@/>,]S@`#TV_0C``!`*`$"2+@%>?0C@``P>>!_ +M)WC@>!#:SW&@`(`<6Z$!V\]RH```&&:BI!`!`!\)W@("V!FBSW&!`-0S!($" +MH@.!`J("@0*B`8$.\#R0AB'_C`+T>:(4X".`(J(B@"*B(8`BH@"``J+@?N'% +M!+E`(`(.QW&``!#5@(%A@HHE#!!@I&228+1C@F"D:))@M&6"8*1LDF"T8)*D +M>PT+00-H@F"D@```$A(88&BX$Z$`@`PXA@\]RH``` +M&B>B)).*)`P0+K(C@R>B*),NLB6#)Z(LDRZR().$>0\)`0,H@R>B,I,NLB"0 +M`),,L@&3#+(.DPRR%),,L@N#!J(,@P:B#8,&HBRRX'[QP`8+S_$:<."(`9"S +M;UIPM7W'=8``6+-"*`X"P;X/")X#$-G=K0'8!/``V`'9W*VZ<`$0D2`6)L`3 +MQW"!`+@Y`"F4`Q4@4P4;"M\@SW"``-"IR6``&T(@.XT%(0`%&ZT^\.(++_0* +M0+/\8+@RB"!#Z$`'`0'\@\( +M40#/<*$`%`4!V2"@X'ZAP8+@RB&!#Z$`&`0&\B$(40#/<:$`$`4`@4#``,"` +MN`"A`(%`P`#`P+@#\`#8X'^AP.!X\<#R"<_Q]A(!MOC)`=PE>"EH"WD`V<]P +M@0#P*\6`X<'/=8``L`@/A<(D`1-;"-X"#H5`%8$0'0@0!8SL1+G!N80N"!8` +M(8!_@``X0!C@*6!/(4`"SW*``*1(?X(1I<,5@A`D>T2YP;ED>CIBSW&``-#4 +M]"&!`+0=1!#/<8``X-3T(8$`6?#/\*['0@1!0J*28I0<,HB!0!@P0#`&+H%>D#"$/`& +M[,]P@`!@VFA@"?"$+@@6`"&`?X``.$!H8&#`(,$`P#QYPKG/_QH<"AP?'`9@C/\5IPAB#\`XP@`X`Z<4AW,_+/<8`` +ML`B<$0``SW*``*P^A"@(!C`B0@[`$8$`A>+,(N*!'/3/,\@(@,3](0H!0K/`7*G`*)(`/@0"(.DHD`""*<"IQRG+&#B`8"G,+\`#8 +M*G'*<@ISM@X@&)AP2B0`((#@I`E!&-D($0`3"9XF0B8`(9^XSW&@```("J$` +M&(14`!C$5".'`!A`4"B7`!A$4!L-P"6,)0.A)_*,)0.E%O(3V$$'[_&,N""& +M#X$!X`^A5@D@`.EPE@T``(#@RB#B`#0.(@#`>039%?#/<(``E#<`@".'_@FO +M^D2'((8-@0'@#:'R\0#90(:.N0Z"`>`.HL]PH```"`08``7(%0(0`"#`)$)X +M@.#*(`P%4840>"T(A``#ATB7,+@0ND5X`!H8,*#8`:5$'0`5$)9BN&)P$:4" +MV`<=&)"`V`"E`=HM\#D*P"6,(@.E'_)$'0`5R!4!$!"6!^`B>(#@RB`,!1&E +M`M@''1B0(-@`I<]Q@`#8N!F!`>`9H0_PSW&``-BX%X$!X!>A!_#/<8``V+@8 +M@0'@&*$`V@39H,V&(/^%&O2,(@.A%O(?"Q$@SW"``&RH88C/<(``O*=$*SX+ +M,"!`#A$(7@"@&IR_````$`3PH!I#8_Q"'8H=2AP2'$` +MVK8)(`!(C/<(``;"'A@<*!`A$1`:"`-+TJ\+()3_O/<:```"@"$0"&\PB>@541`H8` +MW5496(,"V`09&(`O*($`3B"!!Q'JSW"``(P&-GC@@,&`SW"```P']"!1`"#@ +M\"!-`,N]!/"I=JEW.G4$$`$@`!A`4`@0`2$`&$10SW&!`#@L`($&Z$*!`-@` +M&(!0`*'/<(``")H!@`:`Z[C*(,(#RB&"`\HB0@/`#"+_RB-"!%,AP"`,N!2] +MI7B"N``8`%``&,!3`!B`4S$%C_'QP-8,C_$(=2AV2'=3('Z`RB""#P``!CSX +M#.+QRB%"`\EPZ7$!VIX((```VX'@RB!!`\HA@0,0""$`RB)A``$%C_'@>"*Y +M!O``'\!`!.!AN?D)M8!@@,]PH```#&*@`]DGH,]PH```(`/J9AA8@#N`SW"` +M`%`]X'\@H.!X\`$((`/``#_OX^XGQH3"@"/"D>V5Y,*`$\`?EI'MPH`#!`=@`'T!` +M`-D@IN4#K_&AP.!X\<#AQ0#=#O#/*H`@P'@`*-881S9B@[O_\7:`>7/ +M`]XX."L!\7_SW.``'2J`(,!X`"CU/$`V'T#K_'@&@``\<#^ +M"H_QSW&@```@.H&,(0*/1/>1"!``R\G$$```A"@(!@`AC7^``*0^`@QO]@#? +M$-@-V8ZY,-I8VWX*(!F8=^X+;_8(=OB^RB#"`RKT`]G/<*````@BH(C:`!B$ +M4``8Q%-$A0`8@%!*E0`8A%!$A0`8@%!*E0`8A%!$A0`8@%!*E0`8A%``&,!3 +M&MH$\``8A%`"XOL*%(SAH#H,@!/'`X<4(=<]P@`#\J12`@>#,("*`"O0F#<_S$0A%`P/9SW"@`(`=)J"5`H_Q +MSW"``/RI%8`O"!\``]K/<:```!`P&9B/`*`(```?@$\`@````=@"&1B`!QF8 +M@,]PH`"`'4:@X'[QP)8.[_,`V`+9SW"``/RI-*#1P.!^X'BE!,_S`]G/<(`` +M_*G@?S2@@>`!V<(A00`!V#1XSW&``/RIX'\6H>!X`=C/<8``_*E-!N_S%*'@ +M>"4&S_/QP$(.[_,`V`/9SW"``/RI-*#1P.!^X'CQP(H-S_,V#```T<#@?N!X +MSW"``/RI%("!X,P@(H`!V,!XX'[QP%()C_$(=D,(7T1B#,_SSW>``/RIV@_O +M_Q>GSW6@```@#^@7AQL.!1!:#,_S$PX%$!N%T@SO\QBG`=@*\`/89AT8D.8- +MS_,#Z`#8`O`"V&D!C_'QP`()C_'/=8``_*E8A1?JSW"@```@.X`7A4)Y#PDE +M`(HB#PHB>`D*!`!(<`#>)@WO\\EQ.@SO\]BE-0&/\>!X\<"V"(_Q"';/=8`` +ML`@`E3IQAB#_#(C@2B!`(,]W@`#\J32'PB`")(3AS"9ED8CWBB".!,X([_') +M-9X&F(#@;`,"`,]P@`#\J12`@N!4`P(`X'[@>/'`SW"``/RI%(""X,P@XH`&\@H+ +MS_-"#^__`=G1P.!^\<#AQ0ASB@[O_RAU$.@(ZL]P@`#\J7F@NJ`*\&AP*@SO +M\P#9J7!"#._S`=D]`(_Q\<#&#T_QSW:``/RI&88,Z`#=!@SO\ZEQ&H:YIAH, +M[_.I<;JF#0"/\?'`D@]/\=X-;_FBP<8-;_F*)0@0"'&+,]R@``( +MQ1!B0W%B&1P`4R"^@1UEN`SB_\H@8@`!Y]T/%)(,(0"DJ`SM_\H@K0``A@&` +M$'68#.W_RB#M`,]P@````"P8@`\(````,!B`#P$``(`I!V_QHL#/<8``V.(( +M8<]QH0`(!!5Y`(&@N`"AX'[AP<]Q@`#8X@AASW&A`$`$%7D`P/`A``#@?Z'` +MX<'/<8``V.()8<]PH0!`!#5X`,$U>$"@X'^AP/'`G@@@``'8E@@@``#8T<#@ +M?N!XSW&``-CB"F'/<:$`#`0!V%5Y`*'@?N!X\<#/<(``Q$X`@(#@RB"!#P`` +M+3-L!H'Q0'C1P.!^X'C/<8``V.()8<]PH0``!/`@0`#@?L]R@`#8X@IBSW"A +M```$57@@H.!^\<#AQ0HB`(`H=/'`X<4(=78/[___V98+K_\!V)(+K_\"V*EP_@[O___9-09/\<]Q@`#8 +MX@AASW&A``@$%7D`@8"X`*'@?O'`H@UO\0*X`=X5>,]U@`!LI[E@`-@3\``@ +M@P^``%`)B(L5(0(`XH(!X/QD@J)(BP]XC"(#C,HF*Q#A"-*`!8D!X`]Z"PHS +M`06I&0Y1$`+8`*%&"Z_U$=@$[@'801T8$*D%3_'QP,]P@0!0-.P<"+#/<($` +M)#]!P,]P@`"LS4+`SW"``+#-0\``V$3`"M@$V0;:`ML*)(`/@`"TS0HE@`^` +M`/"J2B9`!"X*+_I*)T``I<#1P.!^X'BI!._S!=C@>,]P@`#\J1:`@>`!V,!X +ME03O\P/@C03O\P+8X'B%!._S`-C@>'T$[_,!V.!X\<"F#$_Q>G!:<=X+(!8: +M<@AW#0@1(+8*C_P:<)(/P!4*)0"0!/+.#0`6A.@"V(/P@>6`\L]P@`#$-`"` +M$NC/<8$`#"`1^Y'@O)`>`SW&` +M`+!.`(G%>`"I'O+/<(``P+"V>""(SW"``,"R0)`/(D(`0+`T;0`A@`^``""Q +M:G%*`?TSW"``*0\`(`* +MZ#V)SW*``+!.`(HE>`"J`=@#\`#8S0-/\>!XX'\`V/'`;@M/\<]P@0"H.@AW +M#!B`#P"```!!@`HA@"_^__\_!")"!.'"SW:!`-`K"B*`+X``L`@#CL@2@2`+ +M>1SRP1*!(`#=6FG!N@\EC1`$)0V0P;D`V@\B0@`$(A```_(+")`@"G4$\(8+ +MC_5]Z`Z]`,"E>`3P`89%>$#``(X`PT2XPK@.N`?:#KH$(XP`"WR+<13RUW0` +M``!`S"2"GP```(#,)(*?`0````/T`88"\`*&!"-#!&5X`*$`P4MYRB"!#P`` +M40#H`J'QSR`A`RZYPKE#AT`I``9%>`.G`,``V@&GBB`$!@2G`-@%I^EPR@IO +M\TASZ7!."B_V`MD`P0'8D"C`\$(VBZYPKE$I4.% +M0"D#!F5Z0Z4#PV&E#0@>`IVZ0Z4%\(H@!@8$I0#:1:6I<`'>'@IO\\ESJ7"B +M"2_VR7'`I0C@QO\>ISR7+Z"F_QJ7,Z<`#=`,"I<4IR8@QO\>ES(G``&``P!!A`,QD! +M;_&AP/'`\@A/\0AU*'93(4``T@_@`4X@#P$;#@00SW*@```$3H+/<```QB(. +M":_QR7$`V0?P*F7/<*``0`1`J`'A]PF$@R,/4!`5#Y`0)0_1$`#9SW"@`$`$ +M(*@`V<]PH`!`!""H`-G/<*``0`0@J.T`3_'AQ:L*$`!`(L,#)+O#NI<*%00S +M)H)P@```T$`G#'-4?"!\H(@!&5(#`>`!$(($`1F2``$0@@0!&9(``1""!`$9 +MD@`!$(($`1F2``$0@@0!&9(``1""!`$9D@`!$(($`1F2``$0@@0!&9(``1"" +M!`$9D@`!$(($`1F2``$0@@0!&9(``1""!`$9D@`!$(($`1F2``$0@@0!&9(` +M`1""!`$9D@"`(_^/`-JS]>!_P<7@>%A@66$&\/\0@X)ANO\9RH#[ZN!^\<"^ +M#P_Q"'93('Z`*'=(=03T4R=^D`GRSW````,\R7'B#V_QZ7(C[0-M(KC!O3<- +M%1$S)DUS@`#LST`G`7.T>2!Y0(8$'Y`0!.8$%@$4!!]0$`06`10$'U`0!!8! +M%`0?4!"`(/^/`-WC];T'#_'@>/'`3@\/\0AV*'=(=>"XT2!X\<#/B:#0*0C@2"!&6$&\`:#(*0#@""`66'Z#F`! +M:'#1P.!^X'CQP!X.#_$`W`+P`>05#%41SW6```#>C67S"T&#`=L#\`#;@.-W +M\@#;:'4&\`';B75CN0/@2PG4`,"(C"9#D@#<5/;AB!+O"?#/=X```-Z/9P\. +MP!,!Y/4,5)$`W`+P`=R`Y`#!XHL'QP.X,#_$Z<$K!&G*(<(0H"`8O<``@@0^` +M`*0^1H$*)``A6G,H%`\Q&0I!!"Z1$0G!`P`@@0^``*A``!D"!$$I`"1`+P$4 +M!7E!*0`")W@PN2=XSW:``-2RH(Y3(),!Q;V0YI +M0"C!(*"H-7D`&D(CQW&``%BS(!D`!0"!J;@`H0'8#-R'!`_QX'BBP?'`.@PO +M\9AP1<$4%`XQ,+A`+@$4!7E!*0`")W@PN2=XQK@`((,/@`#8L@+P9VR@BX#? +M60W?$<]Q@`#8M2ATMGP&C.L*`8#/<(``>+,#NE5Z0&"$*`@&+W"X<,=P@`"D +M/D:`%0H!`0Z0$0X!$``E@`^``*A`X*@'C+9Y`*O/<(``U+)`B(>]1ZF@J`S< +M&P0/\>!X`[@5>``@@@^``%BSFHK/<(``V+46(`,#8(-@H5J*5G@"D.!_`K'@ +M>`.XSW&``'*S%7@)8<]P@`#8M39X((",(?^/"/0"D-=P``#__P'8`_(`V.!^ +MHL%!P004`C%!*`$$0"H#!"5[02L!`F=Y,+MG><:YSW.``-BR*V,#\&>)@-D= +M"]\!SW&``-BU=GE@@?$(P8!BD>D*P8`&B0/P*'#@?Z+`X'CQP`H+#_$(=L]P +M@``\T0"`SW6``%BVX<#J#R_U$]@@A0#8ANDAA8#ARB!A`!_HSW"@```,#8!" +M(``(2"```(P@"HV9]YW88,"?S0(`"F +M"PS!)&89F*"^H_^CR0$O\:'`?0;O_P#8X'CQP.'%"'4R""```-LI:&AR#?`H +M914($@P1"),.-@D/]Y)JF'@%>P'B8;GK"1.`Q0$O\6AP"'(#\`'@((C^Z>!_ +M0GC@>/'`SW&@``!%`!F`#P!```#@>`#8`*'/<*```!P%@.^X@`BB``#8`*4$I6$!#_'@>,]R +M@`"`!F""`-D-"QX`88()"U``*'`.\(HCR`HB@@'<#R$!`"*BSW"``)3UCZ!H +M<.!^X'AJ"L_[SW&@```\`(&(N`"A:2!``/[QX'CQP,]Q@`"LNRR!,'!\"J'S +MRB"!`-'`X'[QP.'%SW6``'RZJ7`&#*_RBB$$#(H@_P\`I<]P@`"LN_(+K_)` +MV9H(C_//<(``$*2R"$`!SW"``$"ZJ@A``<]P@`!"`_Q*'8`W?H([_FI<0AQA"D(!L]P@`"D +M/C`@0P[/<(``?+I`@%!SRB""#P``4S0L"$+QD.[/<8``?+L+@:&X"Z$M"!\! +MSW`!`"3C6@J/\Q#PSW:``*R[`(8(Z%H)X!$`V:"F>@TO]0O8,@_/_QD`#_'Q +MP)H/S_`(=SX,H!%:`,]P@`!` +M``1`0"<`%"]U,B!0`P#>#?#X9=9X-(C/<(``?+H(B!!Q7`Y!\P'FSW[K#@*4 +M<0;/\.!X\<#^#<_P)!*2`,]UH```(%N%SW>``'RZ)X<`W@`AD0`[A4:'`")0 +M`,H.K_G)<0AQA"D(!L]P@`"D/C`@0`Y`AQL(@``-"!$!2Q<`%@\('P#/<``` +M5#3Z#0_Q4PI1(,]V@`!\NPN&HK@+IAT('P`GCP\)40`*<,H.;_,J<2OP@[@+ +MIBGP3PA>`<]P@`#@J>(-``$[A0:'&6'/<(``0+H^#@`!"X:EN`NF%?#/=8`` +MK+L`A0GH\@Z@$0#9P*42"R_U"]@LA07I(@VO]`G8S*7"#,__B07/\.!X\<#/ +M<(``?+L+@."XJ`S!_]'`X'[QP`(-S_"NP0AUM@F@$5IRSW:``*R[((;DB`#8 +M$0U`$"2�U`$"R&!PU!$`'8>G#/<8``J$"*(`@&VG`,?S(A40X/#Q$1SW"` +M`'RZX(@S"Q`@!"^^%<]Q@`"D/C`A00[/<(``?+I`@#!RRB""#P``5C3*(<(# +M^`PB\<]P@`#@ +MJ>(+(`&9(00`#0L0($PB`*"$"L'_+0/O\*[`X'CQP.'%`-T)\!H(8`&I<"(( +M(``!Y:]]]0T2D<]P@`!TOPX(``":"T_T10//\/'`X<4(=03P)@L``8(+(`&I +M`"B +M`H5@H`KP!84@@B1X`*('&YB/`'P``.T"S_#QP,]P@`!4\.P<"+#/<(``?/!! +MP,]P@`","T+`SW"``)`+0\``VT3#"-@$V2AR"B2`#X``E`L*)8`/@`!LO$HF +M@`1F#V_Y2B=``*7`T<#@?@AS*'+/<(``5/`5`*_Y:''QP+8)K_0(V%8.;_($ +MV-'`X'[@>,4"3_3QP/X)S_#/=8``H+(`A1SHSW&``+2R(('/`+9-@^O]@':SW"@```@.X#/<(``O+(`@,]R@`"6&Q\_P +M97C@>/'`X<4(2%D@(%3 +M(D$%4R1-%:)Y.&"`X""@02J!!3:\@GGQ`._P(:#@>(0H +M"`;/<8``L#XP(4`.SW&``!B^`K@5>`!A`(#@?N!XA"@(!L]R@`"P/C`B0`[/ +M""``,)980(A@8`!PR"@`R7- +M$*&@_0>O\*3`A"@(!L]Q@`"P/C`A00[/E!X1[$($`,@8:$A#AX0"P\>$$\BP``'L0L/GA"$N`>Q!-@&L0.5@[@# +MM1\.GA`+#QX1!Y&#N`>Q#0^>$0>1A+@'L0:1A+@&L4IPT@I@```0`B!$)KZ2 +M-/)N"\`0"'$"A6>1`J%/(4`A!7MGL0P0`"!P>F&X`:$A#EX0"P]>$$\CP@!' +ML0L/WA"$ND>Q"-@&L0.5H[@#M1\.WA`+#UX1!Y&#N`>Q#0_>$0>1A+@'L0:1 +MA;@&L4IP9@I@```0`B"5!H_P\<`>#H_PJL&:<-IQSW"``/P]P(!*(``@!H$D +M'``TSW>``&B^0"<8%8KHSW"``!3`!(#">!$(A0\````0"B(`)`IQ$/!N#B`` +M!!8`((3@"''*(@4DAO<$%@`@2B)`(`&G0H?7"A$@0"0$.0#9RPH0``&'SW*! +M`+@2,F@T>2-B`-T(<0CP`>'!N7)I='MC8@'E"0T5$?$+$H@:#@``A.4Z<,HA +M1@13]P#=*G$-\`&'`>4!X,&X_@T@``&G"'$!V``<```+#141Z0D2A&T-$1$" +MV``<```$%P00BB;##Q$),R0$'X`10"1``%,@1`!*)0``B'4=\,K)4FV6(`8` +M5'I88&&`@X":VIMC"2."`$.@`8<3"($!G@T@`*EP"P@R!`AQH:%!?``)H`?!P``\`6E"!T` +M%`;P`"9`%`6E`=@"I0&'F0,@``"EF>H!V;(+[_0BI0&`@<%$A66%N@X@`$HD +M```!P(#@=@,"``/!BG!V"^```=IG`R``!:4-"I0``84+"$$`2B4`(#SP!(4* +M(X`O````0``FP10B>#^X4B``@,HE(2`0\EH+[_0!AX'!`8#)`L)!2`"AX'@ +M=O0"A8'@P@(A`,2E`H>E")0`(G;%I6GP`\$!;H<)`0!.#R``X(4`I6,/`1"^ +M"L_T1(6%P0&`987``2B0```7`"PA1``6%1\`&#"```(4'P@JX&68"(8`` +M/[A2(`"`"/)%A0(B0``?"%,`1\(+\`3!9(4`(<`$`GL_NU(C`X`#]$AQ"O!' +MP0CP!,(DA0`BP`0B>`D(4@!#P0?P0\)(<0/P`8<`I26EQ*4-`B``BG`IA0T) +M$0$'A06E%?""X```=H@A8#8%2!8,``8`#"U\(H)[_1(<('! +M984`)D(4`8#[8XX,(`!*)````<"`X,2EH_0#P8IP2@G@``':`\`%I9OP2B,` +M(`'8`J7-"A$@)0U1($H)[_1(<`&`@<%DA6*(/\/(6H)"@``LPT4E/_8NWV#=3`=`A`Q'0(0Z74.\``2`"`7"$4#`!I` +M(Q)O!.`*N*)P`!@`(`'G%!$`(($-!1``P'T(Q`.`W`XG`!-Q"`0%`-U*)$`` +M"B4``>EVPPZ%GP``@``4$0`@MPT%D+,(1(&,P*,(,./0J,"]"&C`>$O>=\)$H&#ZO_8`:/@?TAPX'CQP.'%SW"` +M`/P]L@HO\JC9SW"``%0VI@HO\HHA!`#/=8``%,"I<)8*+_(HV?_8`*4!I0#8 +M:0=O\`*EX'CQP-(.3_"DP3IP6G(:(["A4!3B+```#;`KB#<&"@:'3M#!62\"&-(#)L +M.7W#O<]Q@`"0#ZUA3B3!$0*Y.'VE>V"@`>3N\4XFSA!.(],G$FYP(`$'`"W" +M)$1Y(*#I<3IW>G<#\$AVR7(9\+)N<"4`%Q3H:@ZO\`'?`-D/(0$`26E%>4"% +M3")`H$5Y(*4U;AEA?]S.(0$#R7(!Y@D.%1%G[R4+$2``&$`@2'0(\!)L<"`# +M!P'D"2_R$-D")P`4/[A2(`"``=T` +M&D`CG_3/=8``_#T`A0(@P0,7"7(`5B7$$@(@`00_N5(A`8"/]`AW`G\+#U(0 +M02\3$P/P2B,`(`(@`2"`X2RYRB$L`'_8"2$5`!$,$"!*($`@)?`0)HX0(_`1 +M#AX1R7(`W@CP$")"``;P1R;`%\ER"'83ZB\H@0!.(($'`-OG"Q6!E&EU?!)K +M,"0,`W`@#P?E?("@`>/T\4H@`"$7[B\H@0-.((('`-NO"Q6!%&IU>#)K'&6" +MA'`A#P>X8!:`Y7P&?("A`>/Q\1L,$2``V@?P$FIP(`$'`>(R>2"@]PH4@83# +M0"0$-2IP:G$`WN8-[__)$(&D`@`6H@A0RX&6$,&D`@ +M`!J`([$$;_"FP,]P@`!HOD&``-L#\`'C&PL5`0'BRLG!NC)JE2!,`#1Y(&#M +M"!2!X'](<.!X\`P:"*+@/>#1HRLDT>03@`"$!@`*! +M*+@/?@KR*!&```CHSW"``%0V\""``XCHSW````,Q2@RO\$*"SW"``%0V\""` +M`QUE801O\*EPX'@`W(?J9H"8ZR:@X'^`H6B`A.LHH.!_@*&!@4&#@GH9"E(` +M8*'@?RB@08$!A$)X$0A3`(ES@(/Z[""CX'X@H^!_@*'@>/'`B@M/\((D`S`( +M=9IQ`(BR"J_T>G`BA1IP#0EU`1`5%1"'Z<]P```/,;H+C_"R#J_Y`(6`X,PD +M(J`(],]P```0,:(+K_`@A:IPX+C1(&&`RB"!#P``&#&("Z'PRB%!!8IPV@[O +M\1#9`-_I<)H(H``AA1`5$1"A#1X@SW"```"D`(#`@%IW0?`I%I(0/?`(B5D( +M40`$B2<(TP`C"5\@((4#ADD)`0`-"9X@$Y8/"-X#.0G>(!.6-0C>`Q)O%'B# +M<,&@_]D@J".6"P]R$"2P]!C"@P'G[W^0Y\H@B@\``!4Q``NJ\,HAB@3`A@?N +M0"8!&`F)GPB`A`\/4A"+ +M(:H)C_0$\`\G`!!:<,]P@```I`"`X(`"\."'-N]`)P(8*8H,C64(0@`(B@#9 +M%0A1``2*C"##CQ;T3(\)"H\@*'`3\"ITAB3^FP7R$Y<9"-X#*G2&)/V7!/(3 +MEPD(WP,`V`/P`=A`A2.'`-XP<@'9P'E`*98`4^B+<>EPR7*Z"R``RG,!YOGQ +M`-X0\!L.P107#9XB%&[/<8``!#XX8"*%^@_O\HIR`>8E#E41`-@/((`#!"`` +MA-$E8J(%].CHT0T>HL]Q@`!4/A1NZO'Q`6_P@"0#,/'`G@E/\*3!.G`H=4`A +M%0%*(P`@SW"``"@6`!`4`&IP`_!`($`@_]]R=QIP>/)`*X`@%'@P)0$@Y0D0 +M`&D,$""X8`#;:G'I=.ERQ)`9#I\2P8`D%HX0$0[2$(GK2'0H<@AS'/``$(4` +M@^LH0A$3#,`3`KR4?'(D3A/`J""L!/``&,($>G$H +M=(AP((@2:11XN&"K"<&#BB+#+PHFP"1`+HX@U'Z^9@&&"G(C@`PA0*`!VG$5\`#!!)85 +M"5$`'PB?`HJX!+9`)$`@"/`/")X"JK@$MD(D0"":<`HB@"4`%I80F0^!E87Q +MS0!O\*3`X'CQP)((;_`4V:7!"'8>#._QBW`&AJ"`W@YO]`*&&G`*\"RY#0Q! +M$">3J+DGLZ"@H(6##1`0!I5_")``\@S@$`*%9(CO",Z@#Y#G"-Z#!I6&(/^% +M[_,AA<]R@`#\/0`A@`\````0P()`(@P"PGB`X"RXRB`L`'_>"2"/`T$O0!'5 +M:,)_U&L5?L!D"PC/`P>5B+@'M1)K<"`#!TKK0(*!@T)\@.0LO,HD+!!">7D) +M4X``V;GQ10!O\*7`\<"Z#P_PY!P(L!IQ2'=H=0HE`"'F#F_T"B%`(1_>!GY` +M)!+E?(.@[0H4@1`FSA#L +M[A3P`,-2:02[`"2`,'IB8X!"<@D)$"!6@@/P0H)E>D.@4GI#H`'AW0D4@8'# +M0"0$,NIPJ'$`WNH/K__)`<(4@`CI0*%`B`!((#ARB`,(,3V +M"!T`%`(@@"4_N%(@`(`+\@02`"`+"($%`]@`I0/P`!T`%8$&+_"GP/'`,@X/ +M\`AU*'<,B#IST!P(L$`E%1@$%8`@&G*,(,./RB"!#P``_@`$\@H5@2`B>`(@ +M``3"A4'`"(4HOB)P0"B4`@.5SWX-"!X!`<`!X$'``=A"P$HAP#``IP0?0!8$ +M%8,@`<`3"P4`(H7/<```!3$Z#F_P`<+/<(``5#;5>""`0\`'A0HG@"^``/P] +M"K@%*#X$3"``H``A4W``(Q8ERB&")9'I*@GO_ZEP)X4*N04I/@0G<`*G*(4*N3A@`Z<"V`"G"B&`)5IV-/`` +M%Q(@`B+`)!<(4@``(X`O````"`(@@`0-"%,`:G9J<`;P`B:4)$IV2G`*%8$@ +MDNDEA1#I"KD`(% +M"KD%*3X$)W`"IRB%"KDX8`.G:P(@``H@`#4$%P(@`B*`(#^X4B``@`OR`!]` +M%@#8`:<#V74"(``*(``UPGD?"5(`!16!(`T($2`$Z0L5@"`">8#A3@(A`,H@ +M`34`V#.5C[A$P"1X0B`$@`#8CKA%P"1XRB1B`$(@`(!*<D(B!(`%PLHD8@!$>$(@ +M`(`JH+P0(AP``U"`,%EB$(``(F0!`_ +MN%(@`(`0\ESJ#O`")L`0/[A2(`"`"\#L\V)XU0@"A6*G"\`#IPC`&PC1`!<, +MA2\'``#P`!]`%@07`"!`(%,`0($(@!(`%P,HD8@`$>D(B!8``P,HE8@`J@N(*X`:<#AP(@0`0="%(`!!<`(`#;#"$`H,HC;P"` +MX\H@000#IP.'`B"8`,L)$0`")H`4*0A2``(F@!`_N%(@`(`$\@/`0*`*\`&' +M$0B>``L5@""$Z`/`P*`#P".'P(`(A0JX'F8'A0JX!2@^!"=V`B9`$'\(4@`$ +M%P`@10D!`&H)3_3/<8``%,"3Z`45@""1Z!.5'PC?`\.G2($")H`0#PA2``F! +MR*&!N`FA((8OI`L`! +MV0"G"!_`%`B%"KAB<`.G"?`!AR"'H;B#N`&G`_`@A\.G@^$!P`#>RB8"$)3I +M#"``M`T+40"`X,H@*P"&]HHCOP,((,```J(`V`6F08(5"H4/````4`&& +M\"4`$``@4``#\!IP0"<`%<(,K_$0V0&&%7T`'0`4`88"I@2&!*=U`0_P\<#J +M"`_PR!P(L"AU2@_O_UIR2G!>#B``J7'/<(```*0`@*"``O"@A8#E4`4!``*% +M0"44&"BX#WY>"&_T`X4O(0$+``-A!P,]P@`!4-D3`U7A% +MP`"`0\`$%!$P'/`&P#$(T0`(P0>'(G@A"%(`SW"``/P]`8`0<0P`#P`,CPT( +M40`)AR>G@K@)IP#8#*]`(5$@`L!%Z,]W@``4P`*'!N@EAP/`,'`2``\`AL&I +M<"IR`@KO_P#;!O`#V$;``\!(P`#8)X5"P`/`"KDX8$/`!L"`X';T,Y4(PL4) +MWP-@AXPCPX\']`G$`!]`%H6G1*0D)4@!$IR:'"<0")$`0/0A2`-_Q1:#^X4B``@`0?0!8(\BR-!!(`(`\@0``$ +M&@`@!L*#XD[S!\!$(#Z#[/(CE2T)7@$I"1$@)0B>`,]P@`#\/0"`BL),P$W` +M"-A+P`'82L!*<*EQZ@\O_P#;'!06,`44E2`-#AX@3R:6(!P<@#4-#EX@3R;6 +M(!P<@#4#E>6XS"$AH`?T#P[>($\FEB`<'(`U$PD1(`\-$"`+%(`@`B45($0F +M@"""X$HC0"`%P,(CPB0GA0"`"KD%*7X$*(4G<`JY`"$0`(;&2G"I<`2D)$"`%P">%R7(`@`JY!2E^!*EQ)W!(P`'81\!&P$IP +M0@\O_P#;#-A'P`#81L!*)D`@!_`#V$;`2B-`($`F5B#%"Q$@P0Y%)0;`N0@1 +M``G!SW"``/P]08"6(0@``B&``#^X4B``@.?U#!68$`'81L!3E0HG@"\```"` +M!"+`!4(@!(`$(H(/````0,HD8@!"(@6`"W#*)6(`"G(6#J__R7,&P)OH"<(" +M(@`$"PA2``P>`!0*@0@P`5"(`.`*KK*(V(`"W#""R``"KH!AD4@ +M``,!I@;`D^@)P`(@``0_N%(@`(`'\@?`2B-`((&X1\!*<*EQR7)F#B__`-N? +M\9T+$2#/<(``_#T!@`(@``2-"%(`)!P`-`+81\`!V$;`R7(Y\`44@R"`X\PB +M8H`0\B.5Y;G,(2&@S"(A@`/T@KA'P%$(7@"#N$?`)/!%"E$`(Y5!"1X!/0D1 +M((KK@;A'P,]P@`#\/0"`2<`4\"4)7@'/<(``_#T`@(K"3,!-P`C82\`!V$K` +M2G"I<=8-+_\`VX;"2G"I<,(,./0<&> +M\H'B#/0$%(`@@^`D!,O_!12`((#@S"%!A)#T)X48$@X@"KE`(4`@!2A^``*% +M"127("BX!,(/>/`B``!*)@`@2(4`($$."KHZ8@#8C+@`(A,``B$5`!07$!`" +M($`E/[A2(`"`5O("\,"&+NXAA@PE0*#V!\__*/`"":`0`H8A$($`*0G"!2:6 +M-0G>`#V(END\B"D)T@`&@"&&"K@">0(@0""`X,H@22`/\`>%"K@`)14@`",3 +M(`'8$?`"($`E@.#*($DEP(8([B&&`B-`(#^X4B``@-/U`-BPZ,]P@`#\/4"` +M#""`H!``#P#/<```%C$N#"_P"G%*<`IQ2B9`(,H*(`#*!8((!`!I0>E`H:.Z,]P@```I`"` +M`("(Z`#8`J8GA0>1@;@'L2*&`-@%Z2F&X[G*(&$`!:4&A2"&(J`'A2*@!88G +MA0'@`:$'A0+9)K`'A0#9(*`GA0>1@K@'L2>%J7`A@>8)(``#VB>%J7`&#V__ +M`-J&A<]P@`#\/2"`083'A0(B0``_N%(@`(!AA@OR`B.```\(4@#DX`KW`(01 +M#@$0SW````DQ`@L/\!H*K_^I/'`G@K/[PAW=@MO_RAVSW6``/P] +MP*4`)H(?!P``\$&ESW&``!3`Q*'%H<:A`"*`#R`````'H4BASW"```"D`(#` +M@!#P`H8HN"\@!R`2#F__R7#/<8``5#85(0$$`*'`AO+N'>\`WL&GSW&``&B^ +M`('CH0'@`*'N#N`/`*<&IP'9)K`&A\*@!H?`H""%!HQQ:=I +M`L_OX'CQP/()S^]Z<$AT"B&`+X``_#T`$0(@&G,"(8X`@.8LOLHF+!`\9&&\ +M0GP-#%(002P-$P/P`-T"(8``/[A2(`"`RB"!#P``#C'\"0'PPGWA;4$N4A%` +M*D`A`B8-$-AG8;C_X,H@C0\```TQRB&-`\HCC0\``'\`W`DM\,HBS0-`*P`A +M%2""!%\($"!`(0$B`"&0`"WPN&=AN$D@S@"2_PZ7,`V@\B@@,I:B5Z`-@/($`#8;@`$`$@!GI%>0084""B?@'F +MPG\`W07P5B'`(@`@D`#6[UT!S^_QP/8(S^\:<`:`FG+P'`BP(!``('IQ0("`0`"`- +MZ"&``B%!!3^Y4B$!@`?R+@W`#P#9(!A`($IP60#O[Z3`X'CQP"(([^]*)$`` +MX(&`@*&`\73!@<(D#@'1=0';P'O1=0'=PB5.$P\,P1.`X\HC8@`)](;M@./, +M)"*`!/("VP/P`-L5ZQ\+4``W"Y$`@("@@0&``B1,DR&!@*(#($```:(/\`#8 +M`*(!H@OP@(&@@"&!`B1,DP&`@*(#(0$`(:(-`._O:'#QP)X/C^\@@`AW`-@H +MZ4&')HV:#._^!H,]PH```'!P8 +M@`]`````X'AL<`$(G@7@?D"``_!`@@\(@`!D@BM[_/,"\`#:X'](<,]S@`!T +MOT:#".I"@D"@!H,#@`"A`=@#\`#8X'[QP,H.K^]\V?3)&+DE>/0:&+#/=J`` +M`"`''EB0`-T,\*EP3@_O_@#9J7#F#N_^`-D!Y:]][0T2D0#9"_``VL]P@0!@ +M.C9X0*!!H`'A+WGQ"5*!`-@;I@`>@!\`#`\`"!Z`'P```/``'H`?_@```(H@ +M"``"I@'8S!X`$%H+S_ZY!H_OX'CQP$8.C^_/=J```!RGAA$-GA9>"R```-A& +M"0``#PW>%DX+(``!V#H)```1#1X70@L@``+8*@D```\-7A"0`` +M$0V>%\]P@`!TOPX)```<'H`?`'P``%4&C^\5V,]QH```(&$9&``(&8`/`P#@ +M``G8'J$?H8C8T!D```09@`\`!````-@;H0`9@`\`#``9X'[@>/'`I@V/[\]S +MH```(``;@`\`#`\`"!N`#P```/!^#N__"'4;@[A@&Z-L$Q```-D<\%)I57K' +M`@`&AD`@#P8@ +MAP\.01#&#>__`MD`IP:&0"`/!R"'#PY!$+(-[_\(V0"G(X9@>`5`-KZ#.__&G""P8/""@SO_JEPSW>@```@R!#O2$+0@6SW"``*P^,"!`#@#>.G8)"!`!`=XK[B8,S_][AP#: +M`,$"(\,$`<``(<&``2("`$#!0<+J"N_^J7"$+0@6SW"``)Q`,"!`#A/H!,!, +M(4"@$WG*)P$0RB="$*EP.@KO^>EQ#R!`(ZX,8!'I<V#>_Y:'66 +M"^__0"B.`E,E0!40=LH@A0\``#41RB%%`]`*Y>_*(H4#Z7`J"^_^*G'I<,(* +M[_X*<>EP(@KO_LEQZ7"F">_^J7'I<%(-(!$!V0S!$(P`/UV%8,;_@%N#`2`38. +MAL#@U_?0&EBS8@CO^2AP[@R/\4P0`"#D>/%PRB""#P``]0#`*&(!(`QB^,HA +MX@$&\,]PH`"((#5XH*!A`8_OSW*@``!%.(($(;Z/```((`#8!?0\@@D)7@8! +MV.!^X'C/<8$`V#IB@:'!!".##P_\G_]3(,(`%+HFN(8@_@=%>&5X`J'@?Z'` +M\<`$\-H,#_G/<*```$4>@`0@OH]P````]O71P.!^X'CQP(X(C^\(=L]P@`!L +MJ-8/[_^BB`HA@"^@`(!$0!$`(,]WH```148@`0U`&4`@!(<*((`O@``\S00@ +M@`__;__#!*<,AP0@@`__?__##*<`'X`?`$```.!X`-@`IQ-MI7@-IP(*K_&I +M<``0@"`-#0`0Y@L`%P`80B-`$0$@!2&!#P"`-`!`&4`@*>X7#E`0.0Z0$(H@ +M6@H^"._OR7$?\!"]C[V;O<]P@`!`!@"`G[W$N`JX!7VLIRX/S_^*(/\/'*<8 +MIPWP$+V/O<]P@`!`!@"`G[W$N`JX!7VLIQ4`C^_@>/'`@8`H<@"``-N.":_O +MB7%(<-'`X'[@>`#8SW*@``!(SW&@`(!$&*$9H1JAC]AD&AB`01J8CP!```!! +M&IB/`!```,]P@`"\!1!X%J'@?N!X\#_#P)X$302F``\*XI7@0=/'`#@]/[XH@$"!*(0`@SW"``"1)((#/=8``E/4#A30=0!0%*'X` +MSW2@```@&X3/@'8$0E1 +M`D$JP``FND)X#:4"V%IP`-]7\`L(40``DPBR`!E"!`#;SW"``.3"((`/(\,# +M:WD0$@0!"O+/<8``X,*@@0`80`0!Y:"ASW"@```=+(`$(0$!SW"``(`&`H`T +MLFMXF6$9]`(A@`12<""@!.9*(0`@`>=Y#S42*G`/I?D/T)$-A8#@S">BDL]S@`#(Q%9[A(M$A5QD'&3/H[I`">! +M'X``%*<`B8+@?_4(DF&3&WB`N&1X?/$4D@L(10"98+'Q-+*98:_Q!*7/<8`` +M@`8!H=D%;^\*`6Q'D>"6_[J7#G[]H,(``'V'4%3^_QP`H-3^^PP0AV`]@: +M<,]UH```!`BE$!41$`Z%P."_]P`6`$``%@!`0,`@P)S@RB!B#10%HN_/("(# +M@<`>#2``#MD$%`\Q"A2`,`L4@3!`YPBY)7CDN,`GHA`#YP0GCQ\``/S_#NX, +MP`SH!=D5N0BA+<`)H0/`#*$<&8`/`&P$`%DG#A(#\+8(#_D.A?L(A(,B=^2E +M5!T`%`Z%&P@4`A2%3\`OP9SARB"B#:0,HN_/("(#`L`$((`/````0*T$;^^P +MP.!X\<`R#$_O6G`(=0HD@"^@```P"B.`+Z```"Y4$Q4@!!06ID@3$"#/<:#^ +MS`@%V!6X)*"R"&_]2B$`(`7PU@LO\NEP*>TO*$$#3B"/!^]Y+\@"N3`AC@^@ +M`&0N$"7-$P1^!2&1(PKP,F@P(8$/H`"T+@#:O@AO_4AS8NXO*8$#3B&`!P#9 +M#R$!``L@0*`F?O;SZ_%*<*X.+_TJ<50;0"4$')BEW0-/[^!X\<":"V_OF'`* +M(,"@`-L/(P,``-S*(@(CRB$"(\HE`A,6]`8B30`&(9$`B7`-\,]R@`#P'?`B +M`@!K>@7R#R0,$(]\`>`/>.L(4H%:=`#8*'((\`8GSY#@I,8B@0,!X`]X'PC3 +M!P#>#R8.$"M^SW2```2]%7S@A._S97_@I/#QB'!V#^_Z2'$7"!$@3"(`H,PE +M(I`$#"+RRB!"`Q<($2!,(@"@S"$BH&0+(O+*($($(0@1(!T*$"!,(0"@S"4A +MD`CRN@XO_04A0"..#\_Z*0-/[R\2`38"N#`@@`^@`&0NS1("MB1X!'H`V`[P +M+RN!`$XC@01`B0@#//'`G@I/[RAV`=P> +M#"_]`"P`$`AUN@_O^LEPSW*``,@T(8($Z2."!O#/<:```"XR@:1XV0)O[R1X +MC0$@`/_8X'C/<(``Y$\@@"AP@"#"`93ARB!%``*X,"""#Z``&"P"N3`A@`^@ +M`+0N#W@.(("`X'_*(&(`\<"$*`@&SW"``*8_,B!"#L]P@`!(.R"``8`E>!$( +MCP#/<(``Z$]F"B_R`(#1P.!^\<#Z"4_O*';/<8``2#M`@2&!17D&($V`$/*I +M<,EQG@LO\@':7@LO_:EP"'7^#N_ZR7`J"B_RI'@M`D_O`-H/(@(`SW&``.A/ +M0*'/<8``Y$_@?P"ASW"``.A/C0(O\@"`\<":"6_O`-H(=E(++_(H=1(++_W) +M<`AVL@[O^JEP:@HO\L1XX0%/[_'`:@E/[PAV`-T/)0T0`-_/<8``7+,#N!5X +M,"$0`*EPN@_O_Q_9R7#I<0IRG@WO_^ES"O#/<(``\!WU>""``>>F>2"@\0]4 +MD84!3^_/<8``P&S@?S,A``#QP,]PH```!"^`%0D5`DZ`.WE#<6(1``=">`CP +MSW```,X#WA`*($"],DF>)$#[_+T&ABPI[@/>$`H@0+T +MR25X?0/O\O0:&+`;>$-P8A`!!\]PH```!`Z`X'\.($``X'CQP*8(3^_/<(`` +M[%0`@."`SW"@```((1C8@X`G"!``W1WPSW:@```$KZ;MIB\@0",`(@`T8A`` +M!P`@D"8,IFBX2"`!`!5M<@LO^)4@70``V`FF8A``)P'E'V?+#122K0!O[^EP +M\<#AQ0AU,!H8,/78!;A&"R_XJ7'/<*````2OH*$`3^_QP"8(3^\(=RAV1B'- +M`!UE4R!^@,H@X@/`**("1`BB[\HAP@/I<$H((`!!+H$0P;X=#E`0$0Z0$!L. +MT1``%H!``1T2$``6@$`!'1(0`!:`0`"M/0!/[^!X`-L'\``6@D`!XP$8D@#Y +M"T2`X'[QP+H/#^\(=RAU4R!^@,H@@@\```$\X`]B[\HAP@/'#1`00"7.$R2^ +MP[V`Y` +M$"'100^0F$@Q4'#^_@>/'`]@W/_VX/S_P!V<]PH```##&@):#"#`_W +MSW&``.Q4(('N#N_Y(('1P.!^\;0?H+F%@$*`$HA`"`& +M\$`A0"`O(0@@A0F3()X+;_KI<`*XU'@B<,]Q@``D;S,A$`#I<&(,(``J<80O +M"Q((=3)N%"%!!``A@'^``.!?L*`'@#EQ".`P8`HG0`X"<%EP+R`&$$HC`!"I +M"Q&0"7"I<>ERR7-*)```"B5`!)(/(``*)L`"%"'`$L=P@``@82C@X'``&(0" +M0"-+$.CQ`-T2\!)N%B!0`QX/[_,`V`C@`""!+X``X%]$X6)Q`*$!Y;!]00W3 +MD(H@"P(,?QIP"B*`+X``8&%`(@`F,"!`#@HC0"Y@Z,]P@``(F@"(=@IO^CIP +M!"D^)'-NE&UV>P`B02Z6?`:!FV-Y8`CA$FZV>,=P@`#@7T3@8G`@H-+QE04/ +M[^!X\<`Z#2_OV'&GP5IP&G*XFJZ%"!,`R]S +M1"V^%3IBSW>```05@W0G`0>+WQ:PB3@"#"&V"$*H$`=7L4($P#.V,O +MH0M`1;:8L=R@``@8!SB)W)@L@_P"2+"`')I%'N$ +M+0$6VV/'X0M`1;;8\=S@`!@8"SC`>$GH0M`1;:8L=R@``@ +M8!SB)W)@L@'@$'B^\6D(DX`@PAM@A"J!`'5[%"!,`SMC+W)$+;X5SW>``/P3 +M@W0G`0>+[Q7PV3$`#:`_`!XE!Z4PJ3``#9$O`$B`<+`P!H<')J-'N$ +M+0$6VV/'TG#5`0*PV0$,]P +M``"7&=();^^I<0;P`=DCH"2@`-DBH/D!+^^I<`+9(Z`!V??Q`MDCH`/9\_'@ +M>*3@RB(K`(_VQ.#*(FL`B_;DX,HBJP"']HP@0H4#VLHB*@$`VP[P>&,5>%1X +MSW2``-QQ-20`$!0AS`!"N`"T`>/G"Y2`X'[@>*'!\<`NNL*ZSW.``(C22F." +MX@;:P'H0Z$H)```&Z(#A(=C*(*('!O"`X2;8RB!B"4)X!?#/<```_W_1P.!_ +MH<"AP>'%!"""#P```!@KN@0@@0\``P``.+DE>L]Q@``(FH")02B!`\]S@`"( +MTL*Y*V,I"%X"22.#`&&[A"P+$B]PA"H!!B=PQW"``&!@=7@L$((`+A"``"#P +MZ+C3(*(`#/3ZN-,@X@`(]!UXPKC/=8``:-H(97MC=7MJNQMCA"P+$B]PA"H! +M!B=PQW"``"!@=7A'*(($`'7@/>,'%X'^AP/'`X<7/<8``I,L@@03I +M;@@``#+P`-H$\`'B4'I9"I,``-GY"9.`SW.```B:8(L4(8T`A"L+`L]S@`#\ +M7S`C3`Y`)`,4,R--`\]S@``@>'J;@(2B>Q0B#0//=(``O,LS)$P3;'P5((,` +M-'L!X0`;1`XP>=GQ00`/[^!^X'C/<(``8''@?QZ`X'CQP`AQSW"```B:`(C/ +M([@RB(K`(;V +MY.`!VLHBJ@#/=(``O'%*9&-LA"D+`D*Z`"&!?X``8&&.X$.QRB`K`(7VY.`! +MV,H@J@`(8T*XX'\$L>!X\<#/<(``")H`B(P@PX^0#L+QSW"``"!X.IC/<(`` +MJ,L@H"H-[_8$V-'`X'[QP.'%SW6``*#+((6)Z<]P@``@>!J8SN#*(&H`2O8; +M"5$`SW"``"!X&IC)X`7V`-A*""_[`*4`A<]Q@``XQ0[HSW"``.!6"HB"X(H@ +M?P[*(((/___W_P/P`-C9!N_N`+'AQ0:X`"`-@>'&#@`C`*AT@B4"D`/P@"4" +MD/_8P"4$$$B]A"H+`M-KE7['=H``X%\G=K1Y**;/<(``5,BT>`RF$FN4>,=P +M@``@80`@0@ZXLH(E`16\LL'&X'_!Q?'`_@W/[M4(E0,/"+0`JF@)"/0"`=L` +MVQYA`!;"$``@C`^``&!M3*P.%L(06JP9Z[IA'!+"`,]W@`"`;;QG2*RZ8282 +MP@!`(00(4JP4)$(#$!+,`+1_G*\1$L(`7:^J%LP0`"""#X``X&XV&@*#N!;, +M$$0:`H/&%LP04AH"@Q'KO&'4%,\0`"6.'X``0&[@KMX4S!"*KKQAZ!3,$)2N +M5B$."AQF"A3,$!YFUAH"@Q@6S!"`X\]P@`#`;N0:`H.W\H`A!0BZ8082P@"X +M8%*HN6$0$<$`/*BK\&ZX#PCU!1U[`=H)"!X``-JX6ZQ"$"`^2ZT"-B +M`>.ZT"$B`7<8V`#@?W@86`#@>`AR!""^CV`````PR,]Q@`"TI@`@@P^``!2G +M%'D%\LO)')`7")X"!"*"#V$````3"H$/`0````#8`+$!V!SPH,W+$@*V&PC> +M`0&),A*"``T(@0``V`&I\_$!X`&I"_``B3$2@@`+"($``-@`J>?Q`>``J0+8 +MX'\`J^'%`-K_W!-I%7@`((,/@`!SLX"K#O#/<(``T*E+8``B@`^!`+@Y-GAD +MJ&"H`>)/>N<*$H'@?\'%X'[@>/'`X<4(<<]P@`"0TBU@C"7#GP7RC"%"B<7V +M_MC*"B_OB[@!`^_NJ7#QP((*S^X(=>"(P8"$Y\H@A@\``!(TJ`HF[\HAQ@.$ +M+P@6`"&`?X``I#XA@`'<@>%`@""%P'Q0<0';P'N'>X'F`=S")`$3SW````$T +M@..5>'0*`N^5`L_NX'[@>`#:`_`!XD$H@0#]"D2`X'X+Z8"XSW*@```@,*(! +MV0<:6(`0V2"B`03/\>!X\<#AQ8P@SX_*((T/``!P`QP"#>\@W<]SH```(**C +MU!L```#8U@OO\8VXHZ-%`L_N\<#&"<_N*'4/"5\%!""^CP`&```>\CT-'Q7/ +M=J```"!L%A`0%/`XA]X)+^^*()H*#O#/=Z```$6XA[H-3_@;A@(@``3C"(./ +M```0)^<-'I79`<_N\,]P@`"4/`"`ANC/<(``D#P`@`7HS08OY`O8QC/<:```"`[@98);_#ASP_PSW"!`*P2#8"`X,H@@@\``"PPW`!"X`H) +M;_#ASYH(H```V/_9SW"``%#V)Z#1P.!^X'CQP.'%SW6``-3U[!Q(L\]P@`#\ +M]4'`SW"``-PF0L#/<(``Y"9#P`'81,``V`?9#-H"VPHD@`^``.PF"B6`#X`` +MQ"=*)H`+>@VOZ/APSW$$`$@$Q@^OZ*EP`-@(<<[_I0`OX*7``-C%&ABP>O$H +M<@]YSW"``-3U$0:/Z.!XSW````(P/0!/X.!XK03/YZT$S^?QP.'%SW6``%#V +M`84Z#B_D`H`(<0&%I@SOYP&`50`/X#$&(`$"V.!X\<#6#\_?SW"@```@NX"2 +M#"_D"]@2#F``J7`*)@"0RB"!#P``1S#H#R'@RB&!`P*&C"##CQ'R`X8`V0(@ +M0(/*(6\`@.'*("$`UW`````0!=C*("8!E/_M!\_?X'CQP%8,S^?>#2`!`MC% +MR0?H`-C%&ABPD?\/\,]P@`!0]B&``H&,(,./!_+/<(``I"<6"&_P(X$Z#V`` +M`-C_V<]P@`!0]B>@4?'QP,]P@`"D)XH/#_!Z#2`!`MA'\?'`X<7/<*```""[ +M@-H++^0+V%X-8`"I<"*`C"'#CQOR`X``V0(@0(/*(6\`@.'*("$`UW`````0 +M!=B3]\]P@`!0]B&`SW"``*0GH@\O\".!"/#/<(``I"`!V,]U@`"0/`"E +MC"'_CTH@`"``AP;T`8#B#Z`!`-D>9@"'SW($`,P@`8"""^_GR7'!!N_?`!T` +M%/'`X<7/=8``4/8!A9H,+^0"@`AQ`84V"^_G`8"U!L_?`=C@?\4:&+#QP#8. +M[]\`V<;)SW:``%#VH88&Z`"&!X`!@`OPQ`T#S^@U@``"` +MZP3/_\T#(`$"V.!X\_?`=C/=8``E#P`I<]P@`!0]@"`P8#/<*```"`; +M@-H-````V2"E"NBF#2_PX<\'V(HA_P]&_P7PX@X@`,EPG07/W^!X\<#AQ0'8 +MSW6``)0\`*7/<*```"`;@)X-``!R#2_PX<\`V'T%[]\`I<]P@`!0]@&``H", +M(,./!=C*(&$`O0//_^!^X'CQP,]Q@`!0]D"!BB#_#X#BRB"!#P``-3#\!`'@ +M)H(9Z2>1+PD>`">"!.E'D0\*'P#/<```4##A!`_@%PI?``&!SW&@```@.X$B +M>$@@``#1P.!^X'CQP.'%#@POY`]]SW&``%#V0($B@@]X'0A!``&"%0A.`^/_ +MUW`````@.`OM_\H@;0+5!,_?\*& +M`O#@AQ?O`(8'@"L/`!`&E_,(GH"2"*```H?^$`&!YPG?@0^0WPC>@Z&'`B4- +M%$@E#1!!!._?J7#/<(``4/8`@`>`X'\!@.!XX'[@>,]R@`!0]@#;#_`4:T`@ +M#`16(L$#F6%88#Z@AA`!`0'CH+F&&$0`C"-#C['W`-G/=($`4`;/%A@ +MCJ`RH#.@-*`!X_,+E("&HH>B*J*M`R_PX<_@>/'`X<7/<8``4/:C@8#ERB"! +M#P``.C!@`P'@`(4#H:EPM@YOX1#9!Y6`N`>U`-@`I8D#[]^I<.!X\<`."\_? +M"B4`D"+RSW:``%#V)(9`@0/I!NK/<```.#`N"P_@!(:@H*2F$?`'E>"XRB"! +M#P``2C`,"R'@RB%!`P>5H+@'M:2FH(7R[2T#S]_QP+H*S]\`W03H1Y`/"A\` +MSW```"DPV0(/X&D*7P#/<:```"#[@<&`00J>``:0$0B1`,]P@`!0]@"`H8`6 +M[78)#^2`X`#8"O3/<(``4/8`@`&`T@N@`0'9`G[/<8``4/8`@<2@`('$@`(F +MP!,1"%(`X<\:"R_PR7$`V`CP`=@&\)X*+_#ASZEPF0+/W_'`*@K/WPAV*+@/ +M>`2X%'@`((T/@0"P!B45@!`)Z,]P``!R,,EQ3@HOX"P5@A#/=X``4/8`AR:` +M)^DCE0D)7P*BAP/PJ(`:=03P((4:=2AU".TBA?<.09`FE>.YRB4A$(/M`-@\ +M\""%!X`C"0$`N@@/Y(WH`(``8`B>`\(A0\'``#P`=@J\`*'-0T!$`>5 +MAK@'M0*'@.#*(($/```],,`!`>``@`*GL_^W"%&`SW&@```@.X%&"B_PX<_3 +M\0"'2(`@A0L-@1`HH`/P`!A`(`#>P*6I<)/_R7"Q`<_?\<#AQ<]P@`!0]B&` +M0(`@H$&@@.'*(($/```\,&0!`>"F@:*@!.T'E1,('P`B@<]P```V,%X)+^"I +M#*(8$#'@U@``*&&G!`(`T"_A4`D6,(WP%`)0\88H\\ +MC5V-,',#C\P@C(#/]AB[$+D(N"5[!7O!V""%!KCB""_@97H\C6*/!Y8+")X! +M*PM!``OP)PM!`"./'8T?"0$`_A4`D1<('P$&$``A4R!^@*`(H@#*($(#Q0#/ +MW^!X\#/<(``4/8D@$"!`^D&ZL]P``!#,#((#^`&A0?HR7'B_P#8!J4'I0B% +M!>C)<=[_`-@(I?_8/0#OWP*EX'CQP,8/K]\`VL]W@`!0]L.'2'40\`>6`>7@ +MN,H@@@\``'@PX`_BW\HA@@,`ALER"';R[@2'$'+^W,PE`9/*(((/``!Y,,0/ +MXM_*(4(#X0>/W_'`<@^/WQIPSW:``%#V`(8!W2:`XH`/Z4>1&PH>`$*&$PF! +M`$B`!^HA@2#@+@A@`*ERSW"``*@\H*``A@IQR/__W@(,[^,+V((-(``*<"*` +M'PF``QL/01#/A9 +M!Z_?J7#@>/'`]@Z/WPAUA>#*((8/```C,!P/YM_*(48#SW:``%#V((8'@8#@ +MRB"!#P``)3``#\'?((8!@0\@0`,!H0#8H@ROYP\@0`,=!X_?X'CQP*H.C]\( +M=87@RB"&#P``)C#0#N;?RB%&`\]V@`!0]B"&!X&(Z"&!SW```"@PO@[OWZER +M((8!@1`@0`,!H0"&)X``V`\@0`-:#*_G(8')!H_?X'CQP%(.C]_/=H``4/8A +MA@AW`H$-"-```(8`@`"A.O\`AJ&`YWT$\,__$"7-$P[M+RA!`TX@CP<`AN]_ +M`8`1(,"#Z7#S]=K_\O%Q!H_?\<#R#8_?IL$(=P:0&G&`X,H@@0\``"`P(`;! +MWR>71"$^C\H@@0\``"$P&`[!WP>7EPB>``:71"".`&4(7@#/=8``4/8`A4>` +M4'?*(((/``!8,/@-XM_*(<(#`=@:<""%"Z4%@:&!#^@"@1L(T`!:"N_C"]B' +MZ,]Q@`!,Y`IP`*$#\`&'@_\*Z.(-[^_ASP?86@VO_R*'!/"I<,?_!I?@N!'R +MSW6``%#V`(5&@%!WRB""#P``;S"4#>+?RB'"`P#8"Z6/`P``AK@'M]()8``" +MA_X0`('GN,P"`@#""6```H_?0H`%DE`Q*?DR&'3R0`$5V-'[.`XLP@(:`5 +M]$\D`A'L]S@``H%@"#8;@`HT`E`Q@"BXP@@X]$]@'@`JL`V`.K"0I> +M`0'8`ZNI<"H(H``*`%DE`A(?DB&'I+@?LA^2J;@?LA^2J+@?L@*% +M`GD5"5(`+Y4-"1\#)84*N3A@`J4FET0A``P3"!$,SW```%,P=@SOWT*'!I?;))'@; +M\I+H)@Q@`+_ +MRB""`Q7P#^CF"V`!R7"+Z``1`B#/<```=##)<!OR +MB^B>"V`!R7"'Z(H+8`')<"^5!.@OE54)W@,$(4$$@.$!V\![SW```'8PR7%N +M"^_?0(4<\`?H7@M@`7Z+CT"^+_RB""`P>7`'H/(``"A\]QH```(#N!0,'/<8``4/8@ +M@8#ARB"!#P``'C#H`L'?((%!P2"``8!"P4/`!I25X1,`FEQ0<`#0EN<"Y!;DE>$3`BW`8V9X-[^TJV@>7"0@? +M`0#>5_#/=8``4/8AA0`5%!``$1$`"!$2``@4$R#J#B```HP"%`-X9"`$%`H`5",$$(84`@0T(000"@0<(@`0!WLEP]0&O +MWZ;`X'CQP)8)C]_AP`HD@"^``%#V!!0-(!IP(H6*(L,O4G'*($(#=`GB_\HA +M`@2+=V_^6@]@``IPY@U@``#`2B4`(``4$3#/_?(H83END('X,DA@(A0`37"%*`#PL0(`"'(GC/"%*`(*?C\?,-$"#/ +M<*```"`[@!)Q`-C*(&\`@.#*(0$$SW"``"@6`(`D'$`@@.!L"T(``,%`)``E +MP@]O[ZER`H6%"(`$(@^/XR&%"'(D>!!QRB""#P``3C#T",+?^@ZOXP*%C"#_ +MC\H@@0\``'HPT`#!WP*X0W`*$`$&!H5'A0&`(G@#I0&"!*4FDA,)7P#/<``` +M7S"Z"._?0H('A2"`".G/<```8#"J"._?0(6Z#J_C`H4GA0AR!H4A@0&`1@E@ +M`66%&_`(A1GH`O`H<""`_^G!@$`E`!@!YLEQ%@D@``#:".@$%`$@`H%2<,HE +M0A`%\*EPR7'__:EP20"OWZ'`X'C/5$0@?`,]P```J,(8/K]^I<:EP`=E. +M_NOH`H8)Z`"``J8>_6L($8"-!T_?SW```#TP50>/W_'`$@]/WPHF`)`:<3IR +M`-A:<,]U@`"H/`"E!/(`AH?HSW```&TP+0>/WR&``B!`(#^X4B``@$IP+_(E +M\'8+(``"AP'9_A`"@1$)$"`1"AX!!I>&(/^%!/(H<`/P`-CGNLP@88`,].EP +M`-DL_@"%B.@&E^.XN`VB_\H@P@,`A2"&#>C@A@GOB>A!AP(@@2`_N5(A`8#4 +M]=D&3]\`@0"F`!^`%.EPW/P`A>WQX'CQP&H.;]\,V:W!`-^N#B_PBW`:=SIW +M$?``W0\E31`+)0"4RB""#P``&3"$#H+?!2!0(T`A42"#"14A0"F-(+1]<"4` +M%XP@_X_U\XX-C^,@A4&%8H4'Z(PB`H"`W,PC#H/&]\]P```8,%H.C]\@C5)I +M5'H`(H`/@0"P$D&%@("="@"#SW:!`*P&8(;@N\HB`@,"]$"@8(8+"U\`8H5A +MH`CJ08"&Z@08@`\```!0`-T/)4T0I7^U\4<@P",5\"\J`0!.(H$'P`C +M@@^!`+`28(('ZP#;8*)AH@\G3Q`0($``[N@`W4S%C,#N#B_G!-G-#Q`0SW:! +M`*P&`(8O"!\``=G/<(``4/8JH`_P,FTT><=Q@0"L$@&!`>6%*`$)02G`<0&A +M`Z'I#121Y@W/[AIP`(9["%\`=PB4(/_>`-W)=P/P`>6O?3D-$Q&&"Z_CJ7`$ +M\*EV$"!``'7H+RH!`$XB@0>$*0@&SW*``*P^,")"#N,*4(&'XLHG01/N\?%V +MRB""#P``_P#,)@*0S"<"D`_R,-D"OM1^SW"!`+02'F8@IEC9`K_T?_A@(*#/ +M=8$`4`86A1)PH`M"_U@=`!0-!6_?K<#@>.'%"'(PW(QYSW&!`+`&H((`(4`. +M8(`;"$`#0I",>B=Q8*$-ZR*!*+DO>2*S!_!@H@7K!!N$#P``___@?\'%X'@) +MZ0"!`*("@4"A*+@/>`*R"/`@@""B0*`$&H0/``#__R""!ND"@BBX#W@"L>!^ +MX'CQP#H,3]\:<,]V@0"L$@^&@.#*(($/```<,%@$@=\B@"BY+WE`)@`?VO\( +M=>*`I@_OX##9`6\/>`0GCQ\```#_Y7A`*`$F)7@"I2Z&`O`(<0/I`(']Z$`F +M`!ZI4#;]^I<.!X\<#M_PC@T<#@?N!X\<#A +MQ?S_"'7^$`"!4R!^@`OT(!6!$,]P```P,"05@A"2"Z_?886U`V_?J7#@?SBX +M*+C@?P]XX'@"($,`%PM2`!,*E``$\$`J@P)Y83!P^@?/_^!_*'#@>/'`!@M/ +MWRAV2'=*(``@Y_\(=07N)84+#D$0"G`?\%DE!1(^%0`!Q:4*N4HD0``M"!\! +MSW"@```@&X!"A4`N@Q(B>GEBF2`$`,ERYO\"I3X5`0&+N3X=1`"(<`?O)H4+ +M#T`0YJ4!V`4#3]_@>/'`H@I/WPAU*'9\B$6`@.,F@,PB(H#,(2*`!O(3"U`` +M#PI%`,]P``!H,,8*C]^J#:_H`86(Z""%SW```&DPI@JOWT&%#Y41"!\#(H7) +M<$6%R?\"I;D"3]_QP#H*3]\(=B@0@`!:<;D($``#EL&X$PA0`,]P``!1,&(* +MK]\BAA.6"B&`+X$`L`8PWR\('@-&AD$J``(/>.QX`"%-+@.5P;@1")``SW`` +M`%(P.@JOWR*&`Y6&N`.U`H;/=8$`K!(HN`]X['@:<``A070#D<&X$PA0`,]P +M```M,`(*K]\B@4`E`!X*<4/_"',`V0V%!/!`@`AQ2'`'Z"D3C``I$((`\PR# +MD$`E`!UH/'`4@EOWPAS*+@/ +M>`2X%'@`((T/@0"P!@.5P;@H=B<(40!"A5!SRB""#P``*S!D":+?RB'"`,]Q +MH```(#N!J7"R_X#F[`\"_W4!3]_QP!7_SW&!`*P2"'-`(0`.+H%H__`[/QP-H(3]\(=T$H#@+/?A1N%'@`((T/@0"P!D*%&G%0=\H@ +M@@\``'`P^`BBW\HAP@,#E<&X%0B1`"@5@!"&Z,]P@0#@$LEQYO_I<`IQT?_Q +M`$_?X'CQP(X(;]^8<,]U@0"L$BV%"/`B@2BY+WE`)0`=V__)<0[I*!&``,"! +M^^@#D<&XYPB0@,]P```O,(4`C]^(<+3_N0!/WT$H`@)/>G1J='L`(X(/@0"P +M!B@2@P``V03K8H()",``*'`(\`.2P;CY")&`*A*``.!^X'CQP!8(3]\(=BAU +MP.'*((8/``!E,#@(AM_)<*EQTOX(<\]U@0"L$C"%0"4`'VARWOYPI0.31B#` +M``.S`-A%`&_?*!L"`/'`S@\/W\]QH```()N!`-D@&$(`62`-`C^570F>`<]Q +M@0"L$FV!!?`D@":C8(,DZS.3_0D>@\:#0(#U#H&01(/"@%YFQ*-?E2$*'P'C +MDT6`"KH5#Q\1Z(,*O]]G0G^"?PD/4A!"?L2C3Y#!"A^#K+DSL][Q0(!!*@X" +MSW[`YLH@A@\``&8PC`]FW\HAA@,?E14(G@*JN!^USW&``"@6`(%AN`"ASW"! +M`.`2R7'$_XD'#]_@>/'`'@\/WPAV`-W6_B.04R%"`!L*40`H&$(#02X!$L]P +M@0#D$B]YN?\#\`L*D`"I<`;PA[DCL`C@Q?\!V$T'#]_QP-H.#]](=4$H`@)/ +M>@2Z5'H`(H,/@0"P!D`C#`C(C`#:!>["@PL(@`-(<"+PXY-3)TX0]PZ1D/,/ +M'I'*C.\)@8.DOZF_\'^EOR2,J+_CLPD.01#;_PKP$Y,1"!\#)X,$@PJY.&`$ +MHX#E5`T"_P'8T08/W_'`X<4H==+_@.7,("*`/`T"_\T&#]_@>/'`0@X/WPAW +M*'4:<@#>"B*`+X$`K!(T$@$@!?#&_P5^*G$8Z0.!`!$1`/D/`9`"@4$H`@90 +M=?_/&@X04OW]*@X'CQP&(-#]\`W@H@@"^! +M`*P2-!`/('IV"/``V4`@`"WI0HA@"^!`+`&(H<`(4TN*+DO>4`@`"T9_@AQ$'?* +M(((/``"$,$@-8M_*(L(#(I:A"8"/``#__P0IO@0`(4%TR?&`YLHFP1/I=@`@@"`C +MH"P80@,PXD`@`2%982&@*6LDL`'CP..J]P@8A"\``/__SW"!`"P2M:#/=X$` +MK!(`W@KP,FXT>01O.&`*"._@#-D!YO$.%)&MIZZG0"``(0^G0B<`&[T$+]\0 +MI_'`6@P/WV^0"'8H=8<+'P,B%H`0+PA1``.&%>ABA@JX>&"6(`0`HG@_N%(@ +M`(`)]""&SW```" +M@P(E@!`/"%(`]PX$\`````@")8$002G`!U(@`(`&\AL)A`\````($+L@EL]P +M```D,&5Y&@QOWZES-00/W^!X\<#""P_?SW"@```@VX#/<($`K!*M@`?P0"4` +M$LEQ0?Z@A?SM"00/W_'`;@LOWQ39JL'Z<$HA`"`:#Z_@BW"%P!(/K^`4V2IQ +M&?"*(@@&3'G/<(``)$!5($,')W">@!T,41"<@)%]$FD)#?0<@W"`H$QY,"-" +M#D6@`>'3"12!"B"`/X$`K!(T$`TP"B)`)$OP"PD3`` +M@P.5#!64$`T(W@*KN`.U#R$1)4`L@"!P(`$'@^D%@&SHA"P()@`A@'^``"1` +M/8!<@$`E#A)98006D!`%AA<),@!`*)4"*'CX*;]^I<\"&(^X3 +MEOT('X,#EA\('@$;"!\")(8P=1(`#P!"AL]P``!K,!(*;]^I<\]P@`#@.RF` +M4B$!``2Y.&`D@,GI0X`"@`)ZQO$1`@_?X'C@?N!X>0`/__'`N@S/_\H-#_\` +MV`/P`>`/>/\(4H'1P.!^X'CQP/G_Z@@/__GQX'@]`"__`]C@>#4`+_\!V.!X +M\,]P@`!0 +M]@"`(8#/<(``P"<`@"1X$'$!V.!_P'C/=(``4/9@A`#988,!V@\+#@`&A(P@ +MPX\#]"AP`O!(<.!^X'CQP/((#]\(=P#='?`4;11X`""!#X$`K`8%D<&X)0A1 +M`-")$2>`D\H@@@\``!LP``EBW\HAP@/)<`#9&@OO_RAR`>7`Y:3W%0$/W^!X +M\<#AQ0AR*'4"N!1XSW&!`+`2`&&`X,H@@@\``!HPQ`ABW\HA@@"I<./_]0`/ +MW^!X20?O_@O8X'CQP+?_1@@/_W7QX'@U!^_^"-C@>/'`1@AOX^'%"'6$X,H@ +MA@\``'$P@`AFW\HA1@,R;31YSW"!`+`2K0`OWR!@\<`%V!6X$!@`"`78%;@0 +M&$`(SW"``*P6X@COZ239(@V/Y]'`X'[@>,]P```(@<]R```.@0;P*=D2N?`A +M`0`!X/<*!8#@?N!X\<#"#\_>"'=Z<9IRNG,*(@`A"B!`(<]P``#(&\(*[^<* +M(8`A4R#6`L]P``#,&[(*[^<`WE,@UP+/<```!!RB"L_G&W#/=8``@+W)<$`E +M`1NB#R_N0"4"'`;8`*7/<:```$4<@>&E`J4=@1`=P!0#I10=`!48'4`5'!V` +M%"`=`!0D'4`43@XO[LEP"J7/<:```"`:@0VE&X$.I1R!1!V`'P4`XF$/I1'8 +M$*4V"N_G*-@2I2X*[^?)\H\%$P$7! +MSW"MWN^^:2```(HB$`#/<:```"!#H07!@.$$]$+`!O"!X0;"0L(%]T'`0,`' +M\(+A!\)`PL+W",!!P"H.;^T`V,]Q@`"L]#`9P`\L&0`/*!G`#B09@`X@&4`. +MSW"``*ST'!A`"\]P@`"L]!@8``O/<(``K/04&,`*SW"``*ST$!B`"L]P@`"L +M]`P8P`C/<(``K/0(&(`(SW"``*ST!!A`",]R@``L],]Q@`"L]``9``A\&L`' +M>!J`!W0:0`=P&@`';!H`!V@:@`9D&D`&8!H`!EP:P`58&H`%5!I`!5`:``5, +M&L`$2!J`!$0:0`1`&@`$[Z+.HJVBC*(L&L`"*!J``B0:0`(@&@`"'!K``1@: +M@`$4&D`!$!H``6.B:B```Q:A:B#``A6A:B"``A2A:B!``1*A:B```1&A:B#` +M`!"A:B"```^A:B!```ZA:B````VA:B"``1.ASW6@```0!14`E@L(4``,"$\!["B#`@,E"V4`S'"`@$PE`(``@L<@`@/% +M(`$#`*+G#1^0`!8"0/#Q`(!@@B\-$8!E>);Q$0^?$0'8`-D>#J_F"'('\`/9 +MSW"@```$*J#!`\_>X'CM!8_FZ@V/YIT"S^WQP$H+S][/<*``)#"M$`V&!A`. +MA@#8;@VOYJ@2@;`XV.H2`;:I!X\<#AQ<]PH```(!N` +MI<%$P(MP2@NO[P/9(,$5"=,`SW```$8?,@LOWP$4@C``W0?P@\`J"Z_O`=D! +MY2#`8[CU#020A,`R#*_F!-E!`^_>I<#/<8``=#3/<```FB'Q`B_?(8'@>`?9 +M,!I8,,]PH```!"^@`!8!0,]P@``L%@B`UAI8L`WH!=H5N@NB\,D!X+.XM;BX +MN/`:&+`$HL]PH`"`+#"@`!8`0.H:&+"IRP7H`!8`0.L:&+#@?O'`X<4`W>'% +MZ?^I$H&PBW(-"7($0,6,(<./B/;/<(``)"[P($``A.@!V1[P&PE2!(XAPP_/ +M<(``0#O/`@78%;BKH"D"[]ZAP.!XSW*``/RC(((E>`"B +MF0;OXAG8X'CQP.'%'@XOZ@AUSW*``/RC(((&(4&#(*(&](#@;`_BXLH@8@;I +M`<_>'0)/ZA4"3^KQP,]PH```,`.`X+B<#$+JT<#@?O'`3@G/WLH(```*((`O +M@``,'@AU`!``(`7H\@E/ZNH)3^J*(!``SW:@```P`J;N"4_B)88(AE(A`0"Y +MN`BFX+G*(*(`//3/=Z```"`%'YB?``@``-X*```<'H`?`)(!`/8/#^T6#`_C +M&X<-"$0#.X>B>0CP&X<.)8$?_____QEA`!`"(`#8">K/"]`B``?!H",/'`@@COW@?8SW6@```@"QT8D*X+K^E*(``@]@B/Z<]VH``` +M,`J&0@E/ZK8*+^\(=\]Q@`!8N$:!^F)('@`4`!V`'P````BA`._>1J'QP"8( +MS]Z:<<]R@``,'D""`=D(=0#8">K/`4H@`\```D]02E`!%``A0`0`(!`@$G7*((X/``"#`\HA3@/*(@X$?`_NWLHC +MS@,")0T4W@\OZJEPSW&A`(`!4!F`#P"1$%$#&E@S!!H8,`8:V#,[AL]P@`!P +MOX8*+^\@H*?Q\<#V#H_>"'6:#2_M*';/<8``#!X`H<]P@`#@(CH/S^YN"$_J +M^@V/YNH)+^.I<(+F`=G`>:EPH?\!V1$:6#`&Z'8.3^,2"D_J&0>/WO'`I@Z/ +MW@AW*'7/<*```"`;@$AV!1H8,-=Q````$,H@C@\``$8#M`;.WE()3^JI<*(/ +M+^KI<40@/H,+\L]RH```$"F"@^D!V2FBQ0:/WJEPR7'9_P(-S__Y\>!X\<". +M"4_JSW"@`(`<&H!J"._H12#``48(3^(^"0_GI@S/YM'`X'[@>/'`)@Z/WL]U +MH```,`.%#0B>!@.%NK@#I;X(3^H*)@"0`_+N_PGPSW"@`(`<&H`B"._H12#` +M`9(-C^I"#:_FR7`%%0"6@+@%'1B020:/WN!X\<#*#8_>HL&+<.H.[^Z!P?H- +M[^D(=PAUSW"```B:P(@X[PH@@"^@```@;!`1(`KM$FY#<`H0#P8!V!4:&#`& +M\`#8%1H8,`#?`,$`(8`O````$/A@`GDW"5(`.@Y``*+H`,$6&I@S`B%!!.)Y +MBB!)#P#:K_\M"%$`%.W*"J_FR7!L$``@#QH8,`SP"@Y```KP`-H5&I@PBB!) +M#XHA_P^D_XD%K]ZBP.!X\<#AQ<]U@`#<,R"%UW$C`6=%RB""#P``P2A,#<+> +M`!V`'U1V$#)]!8_>X'C@?N!X\<#^#(_>J@XOZ@#>5@T/[3X*S^]*#D_O:@G/ +MYFX(3^)^"<_FBB#%#\]UH```(`L=&)#/<8``L#P`@<"X`*'/<8``K#P`@<"X +MZ@]OZ0"AX?\:"L_B+@X/[<]PH```$,F@]@]/[$#9!=@5N""@(@O/_ZH.S^[" +M#<_NB@U/[-8(```&"X__Z@O/Z>X+3^*"#D`$P@L/Y_X,C^1N#(_IW@C``_8+ +MS^FV#<_BZ@H/Z/8,3^QZ#^_I!]C2_PH,C^22#D_K\@M``\(*#^WZ"<_HG@P/ +MZL]QH```,,]PH`"`,1P8@`_,@)'`(!B`#T`!`:`D&(`//P`]``.!%0A?`,]Q +MH0"``1R!H;B>N!RASW```/[*Y@P/XOX)C^8"A82X`J5J#P_B202/WHH.#^+@ +M>.!XX'C@>&D@@`%O(3\`:2```/;QX'BP_V8.S^?X_^4#[]X]V.!X\<``V/8: +M&+#W&ABP^!H8L!#8L@_OZ/D:&+!F"8`"T<#@?N!X\"'\<#AQ<]Q@``D2:2!!7U3 +M)?Z0!_(#@8P@PX_/)0(0I*&F#._HKWBV#&_KJ7`=`Z_>J7#@>/'`C@JOW@+9 +M@B0"-8MUV@IO[ZEP"@CO[ZEP`\X`W:EQA@XOX*C:BB$$"P?P$FU#<`H86``! +MY?D-%)$.&E@P"!I8,`#`"1I8,"\C!R#/=8``I#Y`)1`3BB8(%@'!!"N^(T`E +M$1X`)4\>%PE0`(,)D`"#X9'R#=AF"N_>"KB^\#X*3^JBAQL+$2"&Y!"N^(VIP`"%!+E(/+^HAPLH(+^EJ<,]P@`#4UO`@ +M00.`X>,@0@#*(,($!"N^(S`@02YJ<`'"D?_Z":`"(,"""V_K:G`R#B`&:G!V +M#L_FAO!`)!`R0"<`$@IQZ@EO[1?:5211-E4G0!8J<=H);^T,VJX);^H`P.*' +M`L)0=\H@@@\``!PTP`GBWLHAP@,$*[XC`"52'FIP0"(!+L(.+^HAPCH(+^EJ +M<`P2`"`#P1<(0`!J<`/:/@F@`B#`:G``V4H.+^HAPFIP(XF/``V.8+ +M+_\:<`[!"':1X`L]PH```(!N``J8[ +M"U$BD\%Z#._H"-@7Z`(1@"`!KQ/`K'@`(D$N&8$,'@`4QW````"P`J8LV`:F +M_]@`A0<@06F`(82#B__`=D@P*QX,"1!+H;A_`W!``"&4<`.P"?P@L"* +M#R_O!MD.P`7!+@PO_P;"@.`.PM,#@>/'`]A(!MOC))7C[$@&V"WD!V`7R(@V/_P/P,@V/_S<#S__@>/'` +MO@Y/W@AU^,F,)?^?!B4.$,H@@0\``!,TU`:!WA[NJ7#R_OC)I7CX&ABP+RB! +M`TX@C0>O?80M"!;/<(``K#XP($$.SW"``$S7\"!!`&!YJ7`0)DZ3[/7A_]$& +M3][@>/'`]Q(!MI/I_!("MH+BRB""#P``##2(#H+>"?`O*4$`3B&`!R8/8`(/ +M>/<2`;;XZ=/_GP+/_^!X\<`>#D_>"B,`@!IQ2'4`V/P:&+#W$@&V2/+Y$@RV +M]LD$),*0A'CV&ABP"?1F>/8:&+"!"1$``]@]\`8B3@!%>?K)]QI8L`8@@(#Z +M&ABPH`JAXLH@(0$<\"\H@0-.((\'[W^$+P@6`=F`Y/'`:@U/W@AW#WV$+0@6SW"``*P^,"!.#HH( +M[^?I<('@RB""#P``"C1\#:+>RB'"`_G)#R!``_D:&+"*#6`"J7#/<(``_-;P +M(($#@.'C($(`RB!"`WT%3]Z$*`@&`"&`?X``)$`^H`#9/:#@?SR@X'CQP/H, +M3]XN"._G"':`X,H@@0\```DT(`VAWLHA@0//?80M"!;/<(``K#XP($\.^#R__*'+)I<8#@RB""#P``>S"\#*+>RB%"`ZEP`-G9_]T$3][@ +M>*+!0<$`W/82`[8$\'U[`>0K#%41$^OY"QZ`A"P(%@`A@7^``*0^1('E"(&` +M2I$$%`$QW0I!@`'8`O``V.!_HL"$*`@&SW&``*P^,"%!#@#8A>',(>*!RB!A +M`.!^A"@(!L]Q@`"P/C`A00[/<(``M$TV>.!_`8#@>(0H"`;/<8``L#XP(4$. +MSW"``+1--GC@?P"`X'CQP,X+3]X(=RAU"@^OYUIR)PA0`.]XA"@(!@`A@W^` +M`*0^0(//<````38HND]ZZ7'Z"Z_>88-`+5`1`""1+X``B-M@$0`@$'7*(((/ +M```(-,0+HM[*(4(#1@_O_DIP"';/]A(-M@OP+RE!`TXA@`.8+ +M+^<0)0T0!7[W[9D#;][)<.!X\<#AQ0#=$_"I<`#9=@TO_RARA"T(%L]P@`"D +M/C`@0`[_V;8,+_\!V@'EX0U4D6T#3][@>/H2`;8/(0$`^AI8L*4`K^($V.!X +M\<"F#V_B!-CZR0;_`-A#!Z__^AH8L.!X\<#AQ8H/;^(#V/W)`-W\&EBS!^CT +M_OW)0'C]&EBS'0-/WN!X\<#AQ:'!"'6$X,H@A@\```H<#@>/'`/@I/W@AU*':$*`@&SW*``*P^`"&1?X``)$!0$0$@ +M,")/#DH@`"`/()`C!"$!!!)QRB""#P``)S3*(4(#3`JBWLHB@@-0$0`@A><& +M(``$4!D`(,PGXI$%].8/;^3)<`_P$0\1$JEP[@E@`,EQ"?"$Y\H@00-`#B$" +MRB&!`R$"3][@>/'`A"@(!@`A@W^``*0^=!,,!@\D3!!T&Q@#@H//`?B[LHAX@?@?O'`"'),_PWH%&H6>,]Q@`!@20!A@."T".(`RB"" +M`+L%C__@>/'`-@E/WJ'!"'8H=80H"`8`(9!_@`"D/@@0#R#.#*_NBW$Z<"R- +MR7!-C1()K^@`PX?GS"=BD0OTR7#I_P#`A1@8(,EPD@H@`:EQA.?\#2$"RB!! +M!$$!;]ZAP.!XBB$(!BQXSW*``*P^,")`#H7@S"#B@0[TR\D!VL00```L>`#9 +M`"&`?X``)#]7J#2HX'[@>`#8#?"*(O\/SW&``+1-%GE`H0#:0:$!X`]X[0@2 +M@>!^\<"2"&_>"'&$*`@&`"&-?X``I#["A87@RB"&#P``*S2P"*;>RB*&`Q,. +M$!&%YLPFXI$`V`3T&84"\`'8P0!/WO'`4@A/W@AUA"T(%L]P@`"L/C`@3@Z% +MY"'8:<0'?"O`/")$!L@Z@`*EP`N@`WQ`F3A,1 +M[B\H@0-.((T'A"T(%L]P@`"L/C`@0`[7"%&!`=\`&,`C'0!OWNEP`-D/(0$` +M]\G@?R1X`-D/(0$`^,G@?R1X\<#AQ:8,K^@$V,]Q@``\1P38Z@SOZ0+:1@DO +MZP38SW"``"1)I(!N":_HKWAZ"2_KJ7#E!P_>X'@Y`8_G^Q(!MA`A`0!]`.__ +M^QI8L/L2`;8/(0$`;0#O__L:6+!1!(`!X'[@>/'`^''8,@`@/*(H(!@P./__'`!@\/WAIP*'=(=6AV +M&_`*<>ER8'S)(0H"`;/<8``K#XP(4(.SW&``#C3\"&, +M`!`E#1#H[.WM)0@\@`JEP +M&0X'CQP#H.#]X(=8HF"!;/3`D0`X1>(P@$(#(]^H, +M3^*`X*P+8>+*(.$"208/WO'`X<4(=2AS`-HH<&G^#N@4:Q9XSW&``$!).&`@ +M@!$-0!`$@`D-`!!(<`WPA"L(!L]P@``\/S(@0`Z`X`#8RB!B`!4&#][@>/'` +M`-H/(@(`^,E&>/@:&+`&Z?;)17CV&ABPJ/WO`8__\<``V0\A`0#WR3)Y!"!` +M@/<:&+#VR21X]AH8L`KT_,D1"%$`%@MOX@/8`MC\&ABPNP&/_Q$&``+QP$(- +M#]Z$*`@&`"&-?X``I#[>#>__@!4.$`V%C+@-I68+[^[)<(D%#][@>/'`X<6$ +M*`@&@-HO=0`A@7^``*8_0*GP_\=U@``D/Q&%$*4,V&4%+]X1I>!XA07/_\]Q +M@``(P\]R@0`X.P"!8()@H`"!'-M@J`1J`:%6(D`"`Z$8V`*A5B(``P:A`8)X +MN`6A`H*+N(RXC;C@?P*BX'@"\%EA,'#^!\__`_!">1QBD7'\!\__X'\H<.!X +M\#`_>NG`*($"@]!R(L#MSA"@(!@`ACG^``*0^'(8*(4`N0"B3`@`6&!!` +M+0$A-GG/<(``0$D`(%<`#/0`%P$@@.'*(((/```/,GP,8M[*(D(%20A0(/Z& +MO(;Q=`"J/B.E\&``%`=@*KXIU"_`J +MCP3I/X`#\#F&BG!J +MRB,%!0MP']E*(0`@E@^O_RIRHJ`\AB6@`(`@V0`?`"`+<'X/K_\J+*(.$"T0(OWJ/`\<"V"@_>X@UOZ`AU"'+/<(``Z,OP((``UW`( +M*'(9RB""#P``$#+0"F+>RB%"`X0M`14`(8!_@``03,]R@`!TOP#>P*`&V22@ +MSW$$`"1/(Z"EH$:@7__/<00`%$S/<@0`U$ZR#._^J7"$+0@6SW"``*8_,B!` +M#HP@`H#*($(#RB&B`,HB@@.H#>+_RB-B`)4"#][@>/'`&@H/W@AWSW:``+`[ +M`(:*)?\?"PA``X8+3^>@IC1O-GD`(8`/@`!`22#@A"\(%@`AC7^``*0^`"&. +M?X``I#]`CL]Q@`"(-P(6D!!`H68-K]]PV54E0!E:#:_?BB$$`(0O`14`(8!_ +M@``03!8*3^X"'@(4=!4`%A(([^X?V0((S^[]`0_>X'CQP(H)#]XZ<`HE0)#/ +M<8$`.#OD:58A4@(H=DGF0I$$\A$-A!#/<````3*R"6_>J7&N9@"7`N:B>`(@ +MD(/*((0/```#,LHA1`.0"63>RB*$`Q$(4B``(D$CV&&^"._L"G(`E\]Q@``( +MP\)X`+<%@80I"";">`6A`-D`(8!_@`!@/V4!+]X@H.!X\<#^"`_>&G#/<8$` +M.#OD:58A4P)5(RB)-`T"7`";`%!$.I1`:<``@02.*"._LPGI`(0`E +M"G'.#Z_LJ7(`E\]Q@``(P[A@`+<%@1UEI:%]`"_>/!F`(^!XA"@(!L]P@`!T +M0#`@00X$\!`A@0`O*$$`3B""!POI$VH5>,]S@`!8LP!CZ0C>@0#8`O`!V.!^ +MX'CQP.X/S]T(=AIQ\/\(Z/;)$2"`@[@-HN[*(((#A"X(%B]U`"6/'X``I#YT +M%P(6%&[/<8``0$D6>*/J`&&`X,H@@0\``!$RRB$!!.P/(=[*(H$#`(?_V5() +M[_X!VH#9`"6`'X``IC\@J,]V@`"P.P"&BB7_'PL(0`/Z"$_GH*;5!\_=X'B$ +M*`@&SW.``#@_`"-!#MW:)W-`JP>)!^`!J5#8`JEOV`.IFM@$J0G8X'\%J?'` +MX<4(=9AQEOZ$+0@6SW"``&`_,"!`#@?HJ7#N_ZEPB'$!VH3_E0?/W>!X\<`. +M#\_="'4H=CIRB@OO["AP]A(!M@#?&G`!V"T)3@,5"!`@SW&``$@[(8$1(8"# +MRB<"$*EPKO\&Z(;OM@RO[JEP!/`R#8_N3"``H,PA(J`-\H0M"!8`(8!_@`"F +M/\"HJ7``V2AR`=N*_@4'S]W@>/'`X<5*#.`$"'4`VA-M%7@`(($/@`!FLP4' +M[]U`L>!X]A(#MA$C`(#`>,\@0@"$!*+NRB&"`!-I%7C/_=J'`H=40B`0-#"1$"'^C3 +M;=5^QW:``%BS*0H>`Z8+C^X`AH4@!@``I@>6@.#*("$`SR!!`Y@+H>[*(>$' +M!_``A@L(W@&GN`"FB07/W>!X\<`.#>_=`-FNP?(-K^9(=QIPM&C/=H``2$FV +M?13OBW'I<'(,K^PHVHK!B\+R#"_M"G"@9HHA_P]-P,]P@`"P.R"@"/"+<&(( +MK]\XV9+82<"+<#C9Z@\O[)#:&07OW:[`\<"N#,_=*'9(=S\*<@`:NA +MPJ#FH,T$S]W@>/'`2@S/W:3!.G!Z<4AW6G,*)0"1`-J$*`@&+W":<,=P@`"D +M/E4@5@EP$!4`&G"`(,(GRB:!$!7R_]X!V=%W`(#"(4$`2@BO_R'A0"J!(F)Q +M(J"FH`D/@1,4&$`%P(`7#U$0SW&``*H_,B$`!0/H0"80)L]PH```(!N`"KT. +M(Q,@8@PO[2IP`B#`!$(B`2$*N3A@0\`#',(SEB40$$'%0"V`(HPGPY_*($(# +M0L!`),`P"G$V"Z_L#=K)<-T#[]VDP/'`?@O/W3IP6G%\'(BPA"@(!B]U`"&5 +M?X``I#X`(8]_@``D/U8DF3(KIQBB"5`%S`D,!!P,EPH@]O[0'!`"64'X``I#\( +M%(`@!.@J<"^'9OYP%18@0"Z0(LH*[_XJ<`AUY.!FW,PF`:/*)8$5"B.`+X`` +M5#WJ<&IQG@YOWP3:@.`!V1R'RB$A`"$-`!!3)7Z0S"6"E$`HD``A"(4CGL-6)`0T +MZG"I<0X+;^T!V@?H'L`!X%[``_!>Q3\.!10"P(8@?XG,(&&P%_2>PU8D!#3J +M<*EQX@IO[0':'L(RAP'B(KD")4,0!.@-"X0`1!<0$%[#`_!>Q0P@@*/*(88# +M$8?*(04$$*Q1"GT:?0IT`7$!`)#@44T*<:=A[``B8.%`)]`KW1 +M=%6)`0TZG!2"F_M`-HRZ``@P20?PR*Y70M%`(`4`C!!*TT!02I, +M`<2[`-D/(<$`%2%#,V&YP(,R>1D-`1/$N@#<#R2,$$ELA7I$><5Y(*,3\"5^ +MP*.`%`$P`-O$N0\C0P`I:R5[%2$!,T"!97I`H0/P`-C$Z+7Q!,`!VH#@`"`! +M!`(F0"#`>A@@E@`"P(8@?XG,(&&P!_05APL(`006AUL(@`5`*0`A%G@`((T/ +M@`!`22#E!(4&Z"8*K_X`V0/`!*49#E(@*G!*@=P3$(1"!J=A?P`>4%+WXC02F0<(P@P:_/ +M]P`4@B`!V5UE!2]^(T$ID'!"($X@!/`!V6IVVG&I#A"@0B!`("%N$';*($(@ +MRB"!(T`IF3!.(0`P%2``!$;`0"D.(=9^*G!*<4HC0"!JG!L`<',`T&*=D'T`6"!S")`<!),HE@13*($$C1_()P$`N@B+" +M<"\.)!!"8` +MK;STD@AO_^EPBB'_#P]^$0A``"8-;^;)<`D(4```WF7P!"Y^%0'``@EO_C`@ +M0`YP%`(@(H`*N@(C0"`1>`+P0GC_"@2``GH)((```"&.+X``)#\="(4/```` +M4!Z&`>`5"#0"'J8`V!ZF`=@%\`#8'J8`V%;H+R`"!@`@40!\'D`42B5`(`H= +M0A4$$``@_]FN#6_^`-KI<*IQ:G)J#V__`-N."Z_^Z7#DX%OW+R#"!00@EP\` +M`/S_$88J<1"F1![`%0D=0A5J<"(/;_\+<@(@P`0JN.)P3&CI<&IQ`]N^_2(+ +M;_X!V`'>"!0`(!T($0*`YLH@P0/*(<$$Z`^A_\HB80``V`6M"!``(`@:`"#V +MR1$@P(.+\H#FB?0@C<]U@`#P5`"%SW:``+`[(J@`AHHA_P\P<-0,PN;/<00` +M'$3/<(``",,`W^ERZ7-"#J_F2B2``0"FSW"@```@$!B8CP$```#QH""%`HF' +MZ`2)"P@>`*"X!*DJ#H_B6?`%C0'@!:T$C26-$PDD``#>Z7!J<@","C0#9*')O_37P$!(` +M($D-`!`K<`+P`>!;"!4!5B("(C1H66%`@?,-@9`-#E`0`,!#")X!`X$B@0JX +M&6&9(00`8@OO[0+`!,$#P"5XD@AO[A_9$?`?#E$0(@A/[@OH4@AO[NEPSW"` +M`/!4((`$B8"X!*EY`J_=I<#QP.'%]@XO_@AU1(C/<8``0$D4:A9X.&`@@$`@ +M`P@3#4$0`-CZ"F__#R"```_P!(`1#0$02'!__(#@@`A![@?P`(,+#0$0`-@` +MHXD"C]W@>/'`#@JOW1_9!8"$*`@&SW"``'1`,"!-#EX(;^ZI<$X(3^X5\"\H +M00-.((X'$VX5>,=P@`!8LRB0#PE>``>0"PA2`,]XR/P0)8T3[NTM`H_=`-G/ +M<($`7"O@?R"@A"@(!@`A@7^``*0^38%Y@8RZ3:'/<8``)$F`X\H@@0\``/\` +MX'\#H80H"`8`V0`A@G^``#@_&0)O_R"B\<#AQ0AU\/^I,]Q@`#<3Q5YSW"` +M`"0SX'\@H.!X\<#^"(_=*':$*`@&`"&!?X``I#[/!X\<">"*_=!+@6>,]Q@`!`23A@0"`-"`"%`-X>"F_^ +MR7'`I3X.K^$+V.$`C]WQP&H(C]T(=AIQ3@EOY@#9"'4`WP\GCQ/B"6_KZ7`S +M"!`@4PB1((0M"!;/<8``!$`P(4$.ZWD%].8*3^L)Z,]R!`#`4*EPF@R@`,EQ +M$_#I<"H.+^X?V80M"!8`(8!_@`"D/S:`!B'!@S:@K`BA`!>A!/"`Y&`(@0$1`(_=\<"6 +M#T_=2@AOYAIPA"@()B]U`"61'X``)$#'=8``I#\7A5`1`2`&(0X`$'$!V6@1 +M`"#`>9_H'^G/<```$#65!X_=+RB!`TX@CP<6A>]_$"#``Q:ESW&``'RZ`($+ +M"`$$"(D/#P`0"G""#*``Z7$0)LX3Z>X`V3>E:!E`('D';]TYI>!X"'38(`RB*"`>!^\<#N +M#D_="'4`WL]P@0`L)M2H#@WOYZEPSW$$`.A7SW($`.19)@EO_JEPA"T!%0`A +M@'^``!!,SW.``'2_P*`&VD2@SW$$`&A=(Z"EH&:@0"`,!\"D1*3/<00`<%TC +MI*6D9J0X&(@#1*#/<00`=%TCH*6@9J#/<00`;%X.#6``J7#:#Z``J7"$+0@6 +MSW&```@_+W`!80CISW&``*A`"6%B"N``J7"U!D_=A"@!!0`A@'^``!!,F0:/ +M[?'`X<4(=31H-GD`(8`/@`!`2;8)+]^0V48+[^VI<$X+C^RI,@A/ +MZE$&3]W@>/'`X<4(=>?_<@MOX:EP/09/W>!XQO'@>/'`G@U/W:+!&G)H=HAU +MA"T(%B]W`">3'X``I#X`$Q$@/@VOX:EP-&TV><]P@`!`20`@4@``$`$@`(80 +M<<_RQW>``*1`@."I<+3RA@G@`"2/"!,`(`\(40$,'X`?````$`3PBB`0``.G +MEM@$IP`3$"`$ADHD@"01VA/9!.CFAH;O;06OW8H@A`;Q<,HF@B`%]/1_YJ;: +M<4`HE0(*OPIPRG%""2__`-H@@#IP`!I`(`0:@"4*%,A@@$1"8`# +M"^@3"A,$#PI2``C9&!E`(!@80""V"B_^`=C/<00`Z%?/<@0`Y%E^#B_^J7`P +M&H`CJ7#F"F```-D<\`#>R7%F#B_^R7(JC/<(``=$``))4O@`"D/U@5#B`P(``%!'[XR1`@0`/X&ABP$O`O +M*($#3B"/!U@5`"#O?Q`@P`-8'0`@J7#6"*``Z7$0)LX3[^[6"V`!J7!`($$A +M@<.I<`H,8```PH0M`14`(8Y_@``03(8+K^U`)@`>?@NO[4`F`!!X\AT8)1`@0`/W&ABP$?`O +M*<$#3B&`!R\F!R`6AA`GCQ40((`%%J:I<"X/8`#*>"F``Z7.I<.EQQ?\!P%<(40`+"1`@"P@0(`#?$/#*"F_LJ7`6 +MAL]R!`#`4`\@P`06IJEP`@Y@`&IQ"'<;A@SHA"T!%0`A@'^``!!,..!*"J_M +M.H:3[Q<)$"!J<`#9/_X-\&H*8`&I<`GP=!4`)F8/[^T?V?H)8`&I<'T!;]VD +MP/'`.@E/W0AW6G%(=CISV@WO_0H@`"&DB/H-[_WI<'1M=GO/<8``)$E`(0(' +M>F)`(@,(&0A1`.EP2G')EA@`>`3"(4/``"@#Y((H`"I<"SPA"T(%@`A@'^``"0_ +M68B!Y@'B6:@%@0\@0`,%H:L":'ARB"A +M``[P!(,-#P$0BB#_#P2C"/`8@Q!WD`VA`,H@00/%`$_=\H,[_T<$P`@0"4/%1IPBW`Z +M<,]Q@`"\T`8,;]T4VLEP"@YOX$IQ2B4`(`L*4"`ACR+P&(V6Z+H,;^?)"X#D;B(8\- +M"=(`/@O/Z-_Q"B*`+X``)#,`$@`@08@/"8,`8H\#B#<+`@`+"8(``(\"\`*/ +M0?9#Y20K08/W0AR0A&```T($0-4(4`(`_``V'4&(`!(Z,=U@`"D/G05`!9Z#._M']FV#N_ER7"`X,H@@@-$"V(`RB$"!%D5 +M`!:`X`#8"O3N#B`!R7`!V`;P]@X@`!'Z``M"X`)H`?````$")XR[@)"8$#J7`3\(P@!(!\ +M]PIP,"(`(!O9B@GO_JER"!A`!`"`"@SO_:EQ`=B=!0_=X'B$*`@&`"&`?X`` +MI$`GB(PAPX\;\E)I,"*##Z``M"XHD*@X'[QP.X,#]T(=AIQ2'7>"R_^:'/'``@P/ +MW0AW&G%(=BAP8@GO[039@.8(=:@)8N/*(`($A"\(%@`A@'^``*1`!NTO+4$3 +M3B6!%P/P_]DM!"_=)ZAU!>__!8#@>`6`//'QP*H+#]VE@*/!-&TV>0`A@`^` +M`$!)0"`2"(0M"!8*(4`N`"&/?X``I$!N"*``!(]Z<`8,;^RI<'H*;^$:<`#> +M,N@0$@`@C"#_CR[T!X^,(,./*O+/_] +MR7'B"&_A"]@!WJ?NQ@OOY:EP(^A`($$ABW.I<-X+(`!J<@#`@."X#*'_RB!! +M`P'9`"&`+X``"$`@H`#>]LD/)DX3RW@&]#(+[_ZI<`?HR7``V:X,K_XH?K#Y20VP@0((0J"";/<8``I#XP(5`. +M0"0`)QYF0"84&$HA0"8`W1+P0H:`XRJZ1:G(@@`AW%&V"<+IP**`J +M<"0=`"`$AD8+[^5*<9D@!``"IR&&`-LJN6*Y)J?/<:```"`[@1!QRB-O`&$) +MD*8(ZR`5`"!."^_]`-D@'<`DM/%*<-3^)@CO_0'8T0$/W80H"`8`(8!_@``X +M/^!_&.``V3Z@A!A"`",80@`MH#\80@`TH%L80@`[H.!_@!A``/'`:@D/W0AU +M*';R_PAR`-M_H/3_B!J``WVBA"T(%@`A@'^``*0^(H`-"5$!D!C```'8':*A +M`0_=\<#F_SZ@T<#@?N!X\<#AQ4AUA"@(!@`A@G^``*0^>8(&Z_H/#^S5N+A@ +M$?!`*8`"SW&@```@.X&%$@(&0GD#\`)Y`0A$`+A@(GA=`0_=X'CQP-8(#]T( +M=2AW2'8($1$`!!$0`,W_6.!5#P$0)(<"<0(F0!`_N%(@`(`N\BX);^RI<`AR +MA"T(%L]P@``8/S`@00ZI<-[_`B!"!``B`031<0#9RB%O`(#ARB""``.G!*<2 +M\(PAPX\B<`2G$/0XCQD)4@`$AP`@`P0")L(0/[I2(@*`\?6Q``_=8;DXK_#Q +MX'CQP$H(#]T:<"AUK/\(=KX(;^P*<$0M/A<(/'`X<4(#2_A!=@-``_=X'CQP(8/S]PH=DAW&G.(=001$0``V2"ER7&F_QB.@^@` +MV"#P1(8"(L`##PA2```8@"`!V`"E]?$B<@(BP`,_N%(@`(#*(($/```R-(@/ +M(=W*(<$#!(8`($$$`=@`&$`@`*6%!\_<\<`&#\_;\%IVR74Z=A'P"^D!P0T*$"`")4`0"PA2`$HB +M0"`H=4`A0"`O(0<@1PFS($+&1"D^)R]Q,"5`(.L(48!`(``H&6&!PT`D!#** +M<`#"R_\"P5[H@.'*(($/```T--P&`=W`IP'8`J;"A`@HGB3 +M"%(`H:='\(#A2B,`(,HFP20&\@04%C!*(T`@2B$`(!#P#.D!P0\*$"`")4`0 +M#0A2`$HB0"`H=4`A0"`O(0<@60F3($0I/B`X!X\<">#<_<"'4H`-".0#_]D7#T$0 +M`B<"$#!WRB&"`#BM!2B^`P7P!2[^$Q@=0A0`(8!T!*55!<_<\<#V#._>EP`(40(,`#`*7/=8`` +MD#<`A9L($``O*`$`3B"/!^EPR?X!V0AV/:`_H`"(>0@1`SZFA"\(%L]P@``8 +M/S`@40X6#2_LZ7!:<.EP*G%*/'`"'$@X/[_0"$`#_S_ +M5B'``OO_ZP+/__'`X<6V"J``"'4`V0:]`"6`'X``F)\UH&T$[]PWH.!XA"@% +M"@`A@'^``!B;SW&@```@.X$IH`'9X'\LH/'`X<6$*`4*`"&#?X``&)I9$PP& +M%.S/=(``\)^V::1D@^P="A$#SW2!`)`K`*0DK$]Y5B/`!IH)K^6)<@T$S]SQ +MP)(+[]P((#@P'WV;L=W@`"8GP?I +M%8>!X'0/X?_*(,$``-@5I\]P@0!,)=5X0*!H<,EQ!]K=_ZD#[]RI<.!XSW&@ +M```@6X&$*`4*`"&`?X``&)LI@")Z+(`'Z2J`66$JH`#9+*#@?O'`#@OOW`AS +M*'6$*`4*SW"``!2;,B!!#DH@0"""X0'8P'B`X,(@`B3V;<=W@`"8GTAV".D5 +MAX#@H`_A_\H@P0`!V!6GSW"!`(PEM7C`H&APJ7$(VKO_'0/OW`IP\<#AQ0AU +MA"@%"L]P@``4FW9IQW.``)B?,B!`#IAQ".@5@X#@6`_A_\H@00,!V!6CJ7"( +M<0G:K/_U`L_<\<`(@;P02D"`2>Y.F)0<`'8X'_"(`X`X'B$*`4*`-D`(8!_@``8FRB@X'\JH/'` +M_@GOW)AQ"'>$*`4*`"&-?X``&)L%A=L($`!`+($!SW"``.R?(&#+"!$``-ME +MI0R%NPA1`.EPH_\KA0J%(G@*I6>E"(4JA4V%WO]`)0X7%.@!V`>ESW"``/@M +M]7@`&(`/`0``I,]P@`#H+?5X`!B`#P$``*0Q\`B%*H5.A='_A.@>E3,(7P(> +ME0L(7@(RA0+P,(7/<(``^"WU>""@'I4)"%X",X4#\#&%SW"``.@M]7@@H!'P +MSW"``/@M]7@`&(`/``!\%<]P@`#H+?5X`!B`#P``?!4!AAD:&#`#AAH:&##I +M<$O_Z7#!_^EPB'$"VD__=0'/W.!X\<#Z",_<"'7/<8$`+"80B4(@$H`1B'*(*$`]LD!V2$(3@,('X`4 +MPZ?T`K_X@HN!X\<#AQ0AUSW&``)BC +M"X$/($`#"Z'V#>_@#-BI<(#9\_^=`,_E^*XE`_A_\H@00,>EPL(7@(SAP+P,8?/<(``Z"VU>""@'I<)"%X",H<# +M\#"'SW"``/@MM7@@H""6J7`$(8$/````"(8+[^94CJEPW/_Q!X_`"EAB`_#1'K!^J` +MX!0/X?_*(,$#`(6`X`'8P'B'[H#@Y`]B_LH@P@.E!X_``%2;`"&-?X``&)L*($`NJ7!R"F_>/-D!V`ZE +M`M@-I0#8&:4`)P`46@IOWB39"M@?M5X)8`#)<`#8#R"``Q)YSW*``)BC"H(D +M>`JB"X(D>`NBR7#_V<3_]0:/W/'`B@Z/W*7!"'?5_X0O!1H`(8U_@``8FQB% +M`"&1?X``&)H!WK#H5B'`)AIP0,#/<(``Q/!!P,]P@`!8#$+`SW"``%P,0\`` +MVT3#!M@#V0W:"B2`#X``8`P*)8`/@`!DS4HF0`EB"V_E^'//<00`A&ZN#6_E +M"G"N#Z_BZ7`Z#R``Z7#8I=FE`!G`(P09@B/I<$#9:?]5!J_"4"[_\# +MVN!X\<#6#8_<"'6Z<4AV&G,*(@`A"B-`(4APAB#\`(P@`H#)<`':P'J&(/X, +MR."$+04:2B%`(,(A0B3MO@'9PB%!```ACW^``!B;`-@+IPL-$``BIP'8(_`- +MZL]QH```(#N!SW*``+`(7H)">2NG$O"$+0@6SW"``*P^,"!`#@<(T`$CIP'8 +MFG"&Z5X.[^`"V(IP`=K/<8``-`M#H2_HSW*``+`('8(HASA@"*AB%_#X+AT!(!`,!^`B5/$(#G +MRB<,$@&@X)]`X`@@+EA2@WO[&APW02/W.!XSW"@```@6X`&N0`A@`^``/2? +MX']`H.!X\$`!`SAW,HBP0,YA0'8B.D9I>"F!*[I<$#9 +MT_[I<`IQS?_I<,]QG```0`K:J?_I<&#^Z7#H_>EP"G$+VNW]]LD1(,"#RB#! +M`\0(X?_*(0$$T0./W/'`;@N/W`AV*'<6#&_E`-V!X,H@0@,8],]PH```(%N` +MA"X%&L]Q@`!6FP:_SW"``/2?-"%!#N!@%+DX8!!R`-C*(&\`D0./W`:XSW&` +M`.J?X'\(880H!0K/<(``S)H`($,.SW"@```@&X!'@SA@`B"!``D)4@`'H^!^ +MX'BI!H_?404``(0H!0H`(8!_@``8FT.``-F&Z@*`@.#*($$``_(!V.!^\<#A +MQ"H_<"'8Z<4AU +MA"@%"L]Q@`#,F@H@0"X`(4\.0-F*_LEP(-F^_BEM20E5`3,F07"``%3/0">` +M`A*`"*<.\!"`"*<,\"`? +M@!\````H!=T&\"`?@!\````,R7!Z_L]P@0"0*ZR@R7`J<0':D_UQ`H_<\<#A +MQ3(-K_PH=0J]L7"!`J_<;R`+`.!XX'[@>(0H!0K/<(``5)LT($`.AB#W#X#@ +M`=C@?\!XX'CQP`AR9(J`(`(#!>O.#R_E+WG1P.!^X'CQP,H)C]S`@4(-K^+) +M<(0N!1H`(8U_@``8FJEP"=GS_\EP'@KO___9525`%B:`(X$@@68*[^R6(00` +M`(4N">__!-GU`8_`?9,/'QP.'%A"@%"@`AC7^``!B:A"@(!L]R +M@`"L/C`B0`Z'X,HA80!`)0`;">DF@".!((':"._L@"$0``?P9@C/[*EPYO^I +M<.[_;0"/W.!X\<#R#V_<`=HH=A"1H('MN`'9SW"``/2C0*`'AL(A00`6Z(0M +M!1H`(8!_@``8FSZ0"0E>`C*``_`P@)X,[_^I<#"6J7!1EF:&O?\$\*EPVO\- +M`(_<\<"6#T_!^X'@`@80H!0H`(8!_@``8FF+Q\<``@80H!0H`(8%_@``8FCW_@.!$ +M#J'BRB!!`!<%S__QP-H.;]P%V0AVA"@%"@`AC7^``!B:5270&.P<"+3/<(`` +M[/!!P,]P@`#T#$+`SW"``/P,0\``WT3'"]@-VNES"B2`#X``!`T*)8`/@``P +M#$HFP`V^"R_E2B=``,]Q!`"$;@H.+^4*<.8.K^+)<$`E`AO/<8``=+_@H@;; +M9*+/<`0`M'8#HL6B)J)D'<@39*7/<`0`Z'8#I<6E)J6A!F_.!^X'CQ +MP#H.3]P(=H0H!0H`(8U_@``8FH8.K^Q6)4`2?@ZO[$`E`!1V#J_L0"4`&VX. +MK^Q5)4`6R7!Z#J__'MEI!D_<\<#Z#6_<"MD(=H0H!0H`(8U_@``8FJEP`/_) +M<.G_`-D@I26M)JTKK2>M**TIK2JM(Z56)0`4(*`AH"*@*09OW"2MX'B$*`4* +M`"&`?X``&)II!<__X'\`V`AQA"@%"@`A@'^``!B:!;D`V@`A@P^``(3S0*.E +M`^__2''@>`AQSW*``)BC"8(/($``":(]`Z_@%]C@>`AQSW*``)BC"8(0($`` +M":(M`J_@%]C@>`/P$""``!'H+RD!`$XA@@>$*@4*SW&``!2;,B%!#N<)D(`` +MV`+P`=C@?N!X\<`"#4_<"B6`+X``F*,T%0$@*!46(`'A-!U`(`KPJ7`$V0O_ +MZ7!R#:__`=D$)M8DNPX0("\H@05.((\'A"\%&@`ACG^``!B;(X8`(8U_@``8 +MF@#8#R#``R\C"B#HZ2@5`2#\%8`0!"'!!"@=0"#!")&`A"\(%L]P@`"H0#(@ +M00X(%A00+@GO_^EP&G#I<*;^.G`<%A(0+R$'!;H(K^WI<$&&%6\`(($/@`!L +M\T"AJ7`$V:3^:P@1H!<*$"#I<+#_A^@`V`>FJ7`%V>'^K/%9#!"@U@NO_^EP +MJ7`-"1`@`MG;_J+Q`-F7_I[Q*!4`((#@^`BAX,H@H0)5!$_<\<`>#$_`,IAOPIK@!IPIP"-F&_A7P+R@!`$X@ +MC0>$+0@6SW"``*A`,B!/#JEPGO\&O\]P@`#LG^!@!>@)ANSH*01/W(0M!1H` +M(9!_@``8FE8@#R0!AP\(W@&GN`&G3@COYZEP`8>E")^!TPA>@=X+K^(*<`&' +MI;@!IPIP^@ROX@39@.!("^'_RB`!!-GQ\<#AQ0AUV@NO[$C@`(7F"Z__"-D` +MV-T#;]R`'0`0X'CQP%8+3]P(=RAUP('/<(``J$"$+@@6,B!0#H8+K^(H+<`S__@>/'`?@I/W,6`A"X%&@`AC7^``!B:J7"!_L]P@`"8HR^`@.'C +M($(`RB""`ZEPA/Z]`D_!X +M\<`J"F_<-F@(=\]P@`"\GSU@N!Q(L\]P@``P\4'`SW"``.`-0L#/<(``Y`U# +MP`#>1,8.V`39"=K)8H@!`2V":_< +MY7G/<8``\)\P(4`$!^BO>0`B0"1>#^_D"G*M`4_/'` +M(@E/W,]U@0"0*R.E`-DHM26E"B'`@$2URB%B``'AT?_%A4`E`!**#._=$-EA +M`6_<&Y +MPO_%A4`E`!).#._=$-DE`6_"B-`=_I"APDMG>\>!X\<#AQ0AU +MSW"``)RJ>@BOY?`@0`,6;<=P@`"8GU.`!^H`V3.@J7!@>I+950&HJ:$*0@&SW"` +M`'1`,"!"#O;)$2!`@,H@@@`8#.+LRB'B!P(+;^`'V'$&+]RNP/'`]@T/W)8* +M[_Q(=J2(QPY1$(0M"!;/<(``=$`P($`.1@SO[!_9P@FOY:EP2@YOZZEPSW6` +M`)@Y(X66(0H`(GC7<`"`````V4+W(J4"A2&E%0A1``2%$0A1`"6ED@MOX`?8 +M.?`BI0'>SW&!`#@[0('/=X``[,(`A\6E0*``AQS:0*@$:0&G5B%``@.G&-@" +MIU8A``,&IP&!"B"`+X``M#MXN`6G`H&-N`*A`!``((P@_X_(#D+ESW$$``Q\ +MZ7``VDAS/@AOY4HD@`$`&``@P:7&I8D%#]S@>/'`2'"*)/\?SW&``+0[@*$D +M$($`SW*``)@Y`-MFH@T)40`!V26B`_!EHL]Q@0#\/G(,[^HHVN(*;^`'V-'` +MX'[QP.8,+]Q`V@AVA"@(!@`AC7^``*0^SW"``)@YQZ`MA8RZ!"&``%!PRB"" +M#P``(C3L#$+_]R7`1!0_/'`5@P/W`AWSW:``+0[`(:*)?\?"PA``[X-3^6@IAH-(`#I<)D$ +M#]SQP"H,+]PH<]P@`!`20`@4`!T%0`6$"#^ +M@."%-?0SZ@`0`2"`X``@C0^``$!)H>L`A8#@RB"!#P``+C2D"T'/'`X<5:#F_F +M"'4(/'`X<4(=80M"!;/<(``I#XP($`.$=FB#J_]`-K/<:`` +M`"`[@2*@`(`:">_\`=G/<00`^'ZI<+H,[_P`VLD"#]S@\>!XSW"``*0^`(#_ +MV?4#[_P!V@#8UO$Q!^_J`-C@>/'`+@H/W*7!`=X`W2[P$VT5>``@CP^!`/@7 +M0,?/<(``5/%!P,]P@``$#T+`SW"```P/0\``VT3#R7`'V0O:"B2`#X``:`X* +M)8`/@`!\,DHFP`D2#Z_D^'//<00`6(%>">_DZ7`!Y@'EIPU4D2D"+]REP.!X +MSW*``"1)!((0($``M0/OZ`2BX'CQP*H)#]P(=BAUA"D(!L]P@`"L/C`@00[/ +M<(``Q-?P($$`@.'C($(`RB!"`\EPJ7'O_^4!#]S@>($&K_TH<.!X\,]R@``D202"$"!``"T#[^@$HN!X\<`B"0_<*'4`WH7@S""B@LHF81"*[L]Q +M@``D202!$"!``P8+[^@$H:EP8@OO_?_(0$/W.!X\<"J"`_< +M.G`H=H0I"`8`(9!_@`"D/G00#297$``F!GT,\"\H00-.((\'[W_)<-(-+__I +M<1`ES1/U[0#85Q@8('H8&"`J<,EQK/_!``_(0I"`;/<(``=$`P($`.30:O[!_9D0-``^!^X'@(0`A@`^!`/@7K06OY`'9"'(S:#5Y`"&`#X$` +M^!>9!:_D`MD(0`A@`^!`/@7<06O +MY`39"'(S:#5Y`"&`#X$`^!==!:_D!MD(0`A@`^!`/@7-06OY`?9\<#AQ0AUZ_^IS_J7#U +M_XT'S]L(0`A@`^!`/@7[02OY`K9 +M"'(S:#5Y`"&`#X$`^!?9!*_D"=D#N!5XSW&!`!P8"&&#X`'8X'_`>`.X%7C/ +M<8$`'!@(883@`=C@?\!X\<"R#L_;PA(!MH3ARB"&#P``AB?4#@;"SN+6XN+CP&ABP!*'"$@&VP\E`*0T"!7W/=H``0,T` +MABT-`!#5R88@<8\1]!\)4`#J#0``%PA0`.(-```(`@#9!=@5N"N@B0;/V^!X\<#5R<]R@0!` +M,R\I`0!.(80'SW&``(#U+XE0(`"``KDT>2EB`!I"L`7R8@L@`(AP!?!Z#0`` +M"PB1``'8&_!N#0``%PA0`&8-```(<<]P``"7)_X-#]S#$@&V@.'*(((/``!Y +M)^@-`MS5R=,('X!2#@``T<#@?N!X\<"6#<_;`=W6#*_?J7!6#"``&G`(=]7) +MAB!QCP?T%@T``,,2`;8M"%``P\D7"%$`SW:``,@[Y@XOY0"&BB#_#P"FPAI8 +MLP#8"'7#&ABP=O",)Q"0Q/:,(!"@&_<7"5$`SW6``,@[M@XOY0"%BB#_#P"E +M6@ZOY-3)SW&``#"D`*$`V-0:&+`#V<(:6+#>\:,)50$S)DIP@`!`%A`=CN"J_?(($"ICCP +MU!(!M@#:C^D#V,(:&+##&IBP.@TOZP#8SW&``+2I`*$F\"\I00!.(8`'8@U@ +M`-,:&+##&EBSSW$$`(23SW"``"3#`-H`VXX/[^1*)(`!SW&``,@[`*$,\`38 +MPQH8L`#=!O!/V*8,+]P'N`'=P03OVZEPX'CQP$H,S]O5R88@<8\%].8+```5 +M"%```=C"&ABP`-C#&ABP;_##R=,($0#/=X``@/4/C\]U@0`X,P*X%'@`90HB +M@"^``+BI`!`0```2`""A"!```,L*(X`OH```(%)H5'K'`>H(@``5\`'8?@NOWPIQ`=@N#V_?%MDO +MCP*Y-'D]90"EQJ!L$P$@(J`!A8"X`:4!V&X/;]\(<0`:0"0'\`/8PAH8L,,: +M&+!B""_@#=@!V*4#S]O@>/'`PA(!ML]P``",)XX++]S#$@*VHP7O_P#8X'CQ +MP"X+[]L"N,]QH```(&P1$``4>``@D0^!`#@S"!&-(*CERB"*#P``CB=,"RK< +MRB%*`Q)M%'@`()(/@0`@,3@2`2'/=X``A!PO>!8G3A,.""_G+*X-KL]Q@``L +MI`"!`-L.KF"ASW&``#"D`(%@H0^NTLD`W`(@`J`3>#6``R7#-`N_; +MU1I8L^!X\<#AQ<]PH```(!N`PLD(Z-7)@;C5&ABP`=T#\`+=\@EOZ@#8@N6D +M#^+_RB"B`)T"S]O@>/'`PA("MH;J@.#B(`(`$?#/`#9!/`!X2]YSW*!`&`L1(H7"8,`4FE4>L]S@0!8,5)C +MY0B!@`/PBB'_#^!_*'#@>,]P@`"`]0^(SW&!`#@S`K@4>`)ASW&@```@TLD[ +M@1)X&6$!X0:"*KDB>.!_"KC@>,]Q@`"`]>!_`*'@>/'`X<75R24('@"@N-4: +M&+`!W2H,8`"I<((-#^9""0_@SW"``)BIH*!-`<_;\<#6",_;SW:``&RK`(8' +MZ`#=&@EOZ:EPH*8"V.O_P\D7"%$`SW6``,@[*@HOY0"%BB#_#P"EF@WOWPW8 +MYO\%`<_;X'CQP.'%`=VI<-__"@U/Z@GHU@AOZ:EPSW"``&RKH*#I`,_;X'C/ +M<(``@/7@?P"`X'CQP%H(S]L(=BAU&G+F#F_?;W@(=T`E@!)`)P$2P@]OZ@;: +M0"4`%$`G`12V#V_J!MH/V`:G%=@'IP"&SW*``(1(AB#_#9>XF+B>N`BG`(:& +M(/\'":<`AH8@_PL*IP&&"Z/H,[^;IK0BM`-@*K0NM!:4`I0:E$!T`%&H(K]_)%"N$"$"``+R!^K/<```"C.N#\_;B_^*(/\/O0>O +MVPJFX'CQP$H/C]L`WL]U@0!@+`650"50$48@@0.&(/X#1+@;>"5X+R$((,]P +M@``PI,"@SW"``+BIP*`#A>:-!162$$L(7P$8[U)WRB"%#P``>R?*(84$2`_E +MV\HBQ0,DA0KI,'?*((T/``!\)S`/[=O*(LT#)(4+Z5)QRB"%#P``?B<<#^7; +MRB*%!)(-;]\!V``2@;`(=P*Y-'D*(H`O@0!8,30B02`O>-(+[^8IKPBORJ_+ +MK\6GP*?&IQ`?0!1&#V_?`=@`RRIQ`K@4>#0B`"`!VJ?_SW"@```@&X#/=X$` +M5#'2&ABP`,L"N!1X`&<1"!\`(X4EN<"Y`>$#\`#9,B!!(,]R@`"DJ0JY(*($ +M((`/'P#^_YX(;^34&ABP`,LR:#1Y(&?@N`/8"_+4R8CHSW````8H8@[OVS0B +M02`"V,(:&+##&IBS90:OVP#8\<#AQ0AQSW*!`#@S`-T#\`'E$FT4>`\-M1$# +M8@"#]0D!@`3K$0V4$<]P``"2)S(.[]NI$9"94! +M$FD4>,]R@0`\,P!B[P@>@`#8!O!N#2_J`-@!V+L#S__5R8"XU1H8L`'8PAH8 +ML`#8X'_#&ABPX'CQP.'%SW&!`&`L`X$6W0L(7@&I`!X%=@"\!38T06/V\]P``"1)XX-S]OI\0#9`_`!X1<)E0$2 +M:11XSW*!`#PS`&+Q"!^`AN$`V.!_RB!%`/'`(@V/V[)HM'T`)8\?@0#@,!V' +M%0@?`,]Q@0!@+".!);G`N4%I`_``V@H@@"^!`&`L0"!!(4YA%0@>``0@@`\? +M`/[_$@Y/Y!1X'F;/<($`6#'V">_FJ&`5"%$`#!``(`L(7@$=APD('@`*YAD% +MK]O)<.!X\<"*#(_;\!P(L`HE@"^!`&`L!!6`(`H@@#^``(#U#A"/,"AUXGA) +M(,``0N#,_;SW"@```@ +M.X#/>`N`0;`"`!Y@HA`#0! +MP)4.!1"1#A$@B_\,%0$@&G``V!<)7@$R;S1YSW*!`%0Q(6+@N`2(0 +M@@``<]P@`!\J18+ +MS^L*\.EP`-EB_X;HU!$!R/$PD!`.W^"PA1`.EP`=FK_Q,*$"`!V,(:&+``V,,:&+`!A:&X`:49 +M_B,.41`C_@#+SW&!`%0Q`K@4>`!AP+B!X`'8:@LOY,!XB0&/V^!X\<`R"8_; +M.G!(=VAU`-@:<,]Q@`"8J0"A*G#%_C)H-'G'<8$`.#,(=@&!"P]0$-,-GA&A +MN`&A`,O/<8$`6#$"N!1X&@ZOY@AASW6!`&`P@.`!VL!Z@% +MAPJX(PA%`#N"SW"``)RI(*``&P`$!_"!N`&A*G`Z#"``R7&)`(_;X'@!VP$& +MS__@>/'`SW"@```@.X#/<(``P*D@H-#]`=C"&ABP`-@7!J__PQH8L/'`_@]/ +MVPAW`-X6\+)NM'W'=8$`.#,(C1L/`1`!A1<('@`@A0'8M@\OWR"!`86@N`&E +M`>;9#I21+0"/V_'`Q@]/V\]U@`!LJP"%!^@`W@H(+^G)<,"EP\D7"%$`SW6` +M`,@['@GOY`"%BB#_#P"E=@POWP'8`-G"&EBPPQI8L``:0K#5&EBPSW"``"RD +M(*`6#R_?`=C/<(``@/7Z"B_=%-G/<($`.#/N"B_=2-E.#*_?#=B]!T_;X'CQ +MP#8/3]L:<%8(;^D$V`AUSW:``"3#`(8! +M`(`S`+?/``K4X.C]\D;0*M`-CJ +M#:_J0"4"$EH*#^J*(04#@."I<.ER!?)N"<_I`_#N",_I0"4`$P#9O@DOW8HB +M!0`5!D_;\<#AQ<]P@``L%@J`2'4-Z`79%;D+H?#)`>"SN+6XN+CP&ABP!*'" +M$@&VPQ("MH+AS")A@,H@@@\``(DGL`V"V],2`;;4R1`@0`#4&ABP*87/<(`` +MU%0@H"]Y!-@O"5``PN'/`@#9!=@5N"N@A05/V_'`*/T3"%$`PLF`X`'8 +M#P.O_\H@H@``V`,#C__//'`X<7"R;OH +MX@S/_\]Q@0!@+`61AB!_#(7HU#Z__ +MJ7&$Z`S8W_\,\!H(#^2I<"X(+]^I<03P6@P@``W8H01/V\]P@0!@+.!^SW&! +M`%0Q(*#/<($`8"S@?P2(X'C/<8$`8"S@?P2IX'CQP.X+;]L"N7IPSW:!`#@S +M-'G/<($`8"P#@``F4!``$!$@D0A>`0@0@"#/<8$`5#$"N!1X`&%]"!\`?@Z/ +M_UIP7@@O_&IPHH`$\,=U`0``D,]W@`"LJ0"'\PA%@Q@1`"#/<8``J*D*N""! +MN&!%"$4``=@B#^_>%ME`*H$@-'D^9@"F&!$!(":@`(:BH""&`-@#H0@0@"`( +MK@'86@_OW@AQ`8:`N`&F&!$`(`JXN&``IY4#3]OAQ0AQ`-@!VPAU#?#/H""#0Q%$`2*`>4#\`#;]NO@?\'%\<`B"V_;`K@H=0#?X`9A527`%06FJ7#N_QRNBW%N#^_>R7`"I@`@@@\/`$!"SW&``*BI0*$\CN.F +M189AN04IO@#/<8``K*DG=0J]N&``H3$#;]NAP.!X\<"Z"D_;SW"@```@NX#/ +M=H``@/4OC@H@@"^!`#@S$FD4>#`@#R#B"2_?`=C/<8``I*D@@3!P`=C"(`4` +M0"`1(JKH!H="APJXSW.``*RI8(-88'!P#``#`*6'"KU=91SPSW"``)RI0(`+ +M#800`B6`$`;P#B*`#_____^X8,]R@0!@+&2"*K@(ZQEA#0M%``6""K@=90'8 +M"@HOWR"'#XX"N!1X)@KO_S(A`"`!V*H-[]X6V0AW#XX"N!1X`G#@H.(,K_\` +MRZ*G!J`'@SW&```"Q.8G_VC!PX'_*((8`SW&``,"P%GD`B40HO@@`(8!_@0"8 +M+.!^\<">"4_;&G`H=@#=`O`!Y<]P@```L1B((PT%$,]W@`#`KK9_"G#I<5X- +M[]P&VO'H!H\+#@00!X\"\`#8Q0%/V_'`9@E/V\]U@`"`LCN-"':`X,]Q +M@`"`LN!_&:G@>/'`X<4(=<]P@``@L<]Q@`#HL>X(+^HLVL]P@`#`L14!;]ND +MH/'`E@A/VPAV*'`JCFAWB'4$Z2F.$0I%`$FNZ*[)P<2+-5(<`$0<`H<(`@@@!"P%8A0`1#P`#81,`-V`;9"=H`VPHD@`^``*SC +M"B6`#X``%*Q*)H`&.@WOXTHG0`#/<00`K)J"#^_CJ7!I`&_;I<`(`#8"''N\>!X\<#/<(``P*Z6#^_K +MBB$)"$X*#^/1P.!^\<#/<8``L*LHB>K)".G6#*_C`=D!V`+9ZO\%\,8,K^," +MV>[Q\<"V#L__C.C/<(``I#P`@(;HSW"``,0T`("%Z`78`-G?_]SQX'[@>/'` +MX<6*#N__"'6E>(X.[_\/>,]P@`"PJPB(@N"\#\'_M0`]]:@[O_ZEPF.W/<(``I#P`@)3HSW"``,0T`(`.Z,]P@`"PJPB(#PC1``+8 +M`-G&_P3P@>"H#$'_;0#N__"'6K>`'870,]P@`"P +MJPB(@>#,(.*``=C`>.!^SW"``+"K"(B!X`'8X'_`>,]P@`!PJ^!_`(#@>,]P +M@`!PJ^!_`8#@>`#9SW"``'"KX'\AH,]P@`"PJPB(@.`!V.!_P'C@?N!XSW"` +M`&#.W09/Z^!X\-A@*8`!XJZY +MK[FPN2F@\0J4@*H.3]\-"%$`4"5"D`/TJ7+/<8``\*L1B1MX$:D1B5,@OH`# +M]`'8$:E+>/;S-&A7:"5Z)99%>26V`-L*\))KE'S<9"F$0"B"`T5Y*:0!X^\+ +ME(!A!@_;\<#.#0_;SW>``/"K+X\*)8`O@`!PJQ4E0"#7B*+!`-T&[A"/N@XO +MV\EQ$ND!W0?N$(_.#B_;R7$"Z0#=%25`(PZ0`=U*)@`@!PB>`-IU?@GO_P#? +M6G?*_WH)[_^!P`04%S"`Y0'8P'@;N,=P`!```$#`#_#/<9,#`(<&#B``R7`" +MZ("]`!A`(T`B4B`!Y\]P@`"`LAB(ZP\%$+)OM'T*)(`O@`#`K()UTI6V""_G +MR7!NZ,]QD]8`I,8-(`#)<*B%>G`O(8``G$"`$&(0C,F\T +M>0`D0"`3D``D5"`&&`0@*!0`(`@8`"#/<($`8"P#@#$(7X`$);Z?'P#^_Y+S +MZ@_OYLEP&P@1@&8-[^;/>(#@@/7/<9/6`*1_\6H([_]*<`#9SW"``+!.(*C/ +M<(``P+(@L,]P@`"T3B"@SW"``""QW@^OW+#9SW"@```@&X``'0`@#PH1(`C8 +M`=D2_P/PA@^/_U$$+]NBP-$!3__/.!^X'CQP.8+#]L(=0H+ +M[_\H=I#HSW"``*0\`("*Z,]P@`#$-`"`@.#*(*(``-DX],]Q@`!PJQ4-41$6 +MB8/H&HDOZ`2!`J$F\,]S@`#PJT^+%2&,``J4`J$0BY:,`>`0JPZ3`>`.LQ"+ +M(PP!$(PDPY\-\@#8`>)/JQ"K#XL+"),`%7D6B8/H`-@"\`'8"0A1`,[_!_`" +MV-O_!MC)<=C^N0,/V^!X\<`^"P_;SW6``/"K+XW/=H``<*L5)D`0-X@'Z38, +M+]L0C0'8`ND`V!IPBB#_#Y0>`!"8'@`0`-@/M<]P@`"@J0'?X*"C%H`0#0@2 +M`38+C^,"Z.^U%28.%`Z63P@>`!"5(^@.E5QZ4B("`%,B`P`"VG1ZP+F*(_\/^@JOXTHDP`<$ +M\`?8`-FL_O4"#]OQP*X(S__"_MT"S__/_KBB$(!#(,S^(8 +MVQB[`-H+\!)J%'C/<8``X*P`86MXP"=B$`'B&!.`(.L*!(`$$8$@"0E2`(CO +MSW```)DGH@EOV^ERSW"```"QC@CO_QR(`=@.K@#86/^)`0_;\<#AQ<]R@`#P +MJR^*SW.``'"K]!Q*L#"*SW2``!"L`1Q",".,$0DR`0(<`C`PDH#A`MD&\B*, +MA>$!V(/K_\`V,EPJ7&'_K8.3^.I<-7_A>7*((8/``!D*\`(9MO* +M(48#[0`/V_'`<@@/VZ'!*'?/<(``P+*:#Z__H)`:<,]P@`"P3L"(SW"```"Q +M,@RO_QH0D0`(<<]R@`!PJP&"`>`!H@'8%O\#@>.XRB""#P``YP`("J+_RB'" +M`\]P@`#$-`"`#N@$(0`DRW@*\@`<1#,"'((SBW`$V;(+;^G9VL]P@`"T3D8/ +MK_\`@`#=!O``V$!Y`>6O?2<-$Q(`V`\@0`//<8``>-/P(4$##WB`X/'` +MX<4(=/'`=@_OV@]X*'7/<:```"#;@;H,#^S/<8``+"WP(0``!>@"?@D-I1,!V`#8 +MM0?/VO'`F@P/[,]QH```(#N!`=J`X4"A%@TOWQ78T<#@ +M?N!X\4"A^@POWQ78\?'@>/'`X<7/=8``S"TDC8#A +MRB""#P``5BL@#P+;!(V'Z`6-A>@!X`6M`=@"\`#810?/VO'`X<7/=8``S"TE +MC8#ARB",#P``6"OP#@S;!8UAN"4'[]H%K?'`H@[/VNK_GP@0``H@@"^``"C. +M]@XOZPIPSW"@```@NX``WXHF_Q_I<@7P`-@`HP'B,PH5"L]S@``L+55[((-X +MZ0(E3!#/<)/6`*3A#`60.&`"($$#,';*)DT0RB<-$.CQW_^,)O^?%_+//'`\@WOVD`@`@-`(`\'`-D.\#B[ +MPKO/=(``I.-L9,]S@`#0':&#`>&E?(&C89`C"<4`\")#`%,CS`77=*P```_, +M)(*?\@``4.7S`=X"\`#>INX`W`3P@;I`I0'D(I!!#$40\"#/'`1@WOV@C9"'<*((`O@`#0'`#<#R0,$,]S@```#>#R8.$,]S@``4Y,YC%B4#$^"#$"$!@.5^P*/N]=SQSW&!`*PF +M!)$&Z%8B0`2?_Q?P&I$&Z%4B0`N<_Q'P!9(`$`(@!!`!(("ZY+C%(:($SR$A +M``IP(:!`H`#8H03/VN!X\<`J#,_:"'=:<3IR&G.(=:AVZ@DOY@HC@"&$Y;A%8`0SW&!``PG +M.PX%$!-N%7@9806)Z0\!D,]P@`#H\M9X08`+(D"$[/,`@`L@`(3H\T`A``)* +M<7H/;]SI2B8`!78(K^-* +M)T``I<#1P.!^*'(/><]P@`!8]24!C^/@>/'`#>C/<*```"`[@,]P@`#8S""@ +M!=@`V?;_T<#@?N!X\<#/<(``"/4`B!<(7@`!V<]P@``<#""@%@XOZ53:[_'Q +MP.8*[]H4V<]V@``(]1X+K^O)<,]U@`"P'JEP*@ROX@C99@NO_P+8,(Z`X!\#\'_Z0+/VN!X\R7!)`L_:\<#2 +M"<_:SW6```CU,(T`WAL)4``;"9``&PG0`,]P```"._()#]O)<0;P$]D$\`[9 +M`O`(V<]W@``H]3(-;]Q`)0`9!(\]CX"XP;D"N25X!*_/=H``5@P`CB2/!+@E +M>`2O'H\FC\*X)7@&KPH@@"^``-@>!!``(((([^L#@`UYB.'*(2P`R?:6X+/(:$!?X_`NP>[97DIK\]Q@`!4#&")SW&` +M`+`>*AW"$""!&PI1`"H5@Q!3(_:+W'88`00`2`-`>_:"J'@>/'`M/_/<(``"/4`B"<( +M'@#/<00`O*K/<(``V!X`V@#;B@OOXTHD@`'/<8``N#L`H1#PSW&``"3.(('/ +M`/?`"I/!*``&-J3PP!$,]T@`!5#`",SW6``%8,`>`/?@"L`-@` +MJ2***0Y!$".*`*P@K<]Q@``DSB"!SW*``!@/*@YOWD""SW&``,C,`*$,\,AC +M`*US_\]P@`#(S`"`@.`P#\'_00#/VO'`T@^OV@AQ2'8`W<]P@``DSB"@S@UO +MWJEPSW&``!@/`*'/<(``T,R@H,]P@`#(S*"@CPY1$,]V@``(]4P6`A&I<`#9 +ML@]OW@\A@0#/<(``O,R@H,]R@`"P'@2*30A1`,]P@`#8S&"`A>O/<(``%`]@ +M@,]QH```(!N!#0C$`!N!8G@(\#N!#B.`#_____\X8"F6!"F!#P\`0$(1"05P +MI*H$V`#9_OX-\,]Q@`"$2$P6@A`4@0\@@``4H4#_F_^!!X_:X'CQP.'%`-G/ +M<(``5`P@J,]P@`!5#""HSW"```CU(XC/<(``5@P@J.(+[]X0V`'9SW"``+S, +M(*#/=8``N#M.""_D`(6*(/\//0>OV@"E\<#/<(``T,P`@!,(40#/<8``L!X` +M@0'@`*'/<(``O,P`@(#@D`_!_X\#S__//'`SW"``+S,`(`K"%$``-G/<(``5`P@J,]P@`!5#""HSW"` +M``CU(XC/<(``5@P@J`WP)!*``!$(40`!V<]P@`#0S""@(@SOWA#8(P//_^!X +M\<#&_P(+;]X`V,]P@``XS2"``-CJ#6_>(($#`\__X'@!V<]P@`"P'N!_)*@" +MV<]P@`"P'N!_)*CQP,]Q@`"P'@"!A^C/<(``"/4#@`"A`-AF"6_>*-G/<8`` +M.,T`H<]Q!`!@J<]R!`!PJL]S!`"/'`X<7/=8``V!X` +MA1S9(*#/<(``C/`F"6_<.-G/<8``"/41B4&%`+(0B8'@S""B@`3T`8*4N`&B +M$H$#HDP1`@'/<($`.#56>$*(884#@PZZ17@#HTP1``$0JP+8,AL"``'8&K,0 +MB8'@S""B@![:RB(B!A&)0J5">`6E0"$`!5A@G06OV@:EX'CQP.'%SW"``%4, +M((C/=8``"/4#;2E@SW"``%8,(*@`V<]P@`!4#""HU/\0A<]Q@``XS84H#PH@ +M@4$I@'(&H<]PH```(!N``J$$E00H@`\/`$!"0BF`<@6A`-BZ"&_>`=DU!8_: +M\<"^#(_:"'8H=0#8SW&``+`>`*%I_LEPJ7'A_PT%C]KQP,]P@``(]0"(&0A> +M``#9SW"``!P,(*`!V:X/[^A4VG,!S__QP'8,C]H(=RAV6?_/=8``.,T@A0#8 +M/@QOWB"!`-CN#R_>*-D`I>EPR7',_[$$C]KQP.'%SW6``#P7525`'?_9/@AO +MW"#:`-BE!*_:U!T`$/'`*@ROV@':SW6``#P7((6`X!O(0L`!2&^@*'! +M5_3,:%/PJ7"`((,&M@COV@+9527`':X([]H"V62^1_"+<*(([]H!V2#!8;XF +MZ7$)40#/<(``'!@@J,]Q@`"\%Q6!@;A9#O(2%:&I<(`@@PAR"._:`ME5)4`> +M:@COV@C9527`'EX([]H!V58E@!=6"._:!-EOOAOPSW"``/P7.*C4%0`0@+B# +M#C.1U!T`$,]QH```#`2!'F;$H0CPSW&@```,!('88`2A`-YY#E.1`=C%`Z_: +MH<#@>/'`2@NOVBC:&G#/=8``/!?/=X``O!=5)4`8M@IOZ54EP1H*<%4E01BF +M"F_I*-H!V`BG,(<&A\]V@`#<%PD)`0`(CH3H'H4?I=`5@!`HC@'@"0D%`!Z% +M`*I1^E`*=%`X_:X'CQP+8*C]K/<(``L`@,D*O!#WDH +MN`BY)7C/=X``/!>D%P$152=.&#!P$`(B`%4GU1KL%Y803"8`H@`""0#P%PT0 +M#.W/<8``+*DB@0(A@0^`````,'7D`04`/(\D'`0P'8\F'$(P)QP","06@A"` +MXKSR18:`XKCR&+D0N`4@4P`9CQ@7DA!`*!0"!23`)`4B&2`7CP#9P@VOVAC: +M^G$Z<`4A63`6CP#9L@VOVA#:&W`:<04@0`1`P`4A63`5CP#9F@VOV@C:N'$` +MP9AP!7D4%X<0!2%9,04G1@!AA@"&#"'`L,PF`8"B``T`Z!<"$.07`1!0<\P@ +M08!2``8``!4#(`05`"!P<U!\,'#,(P&#.`-GN"Z_:&-H(=25_%HX`V=X+K]H0V@5])7\5C@#9T@NO +MV@C:!2'3`S2.I7@%(1$`W!:`$-T6@1`8N!"Y)7C/=8``L`@QC0BY)7@PC04A +M$``/C0#9F@NOVAC:"'<%(1($#HT`V8H+K]H0V@4@T`,%(8\$#8T`V7H+K]H( +MV@4@``1LC>5YY!8/$`5[A!8-$.@6#!"Q=X@6`!#,)`&0SW*``'P7!O(>B@'@ +M'JHV\!V*F88!X!VJSW"@```@&X`,(T"@S"'!H()X&J9-]XPD/Z'%]AF*`>`9 +MJHPD?JW%]AJ*`>`:JNP6C!"H%H`0%0P"$"D,`1`,(T"@S"'!H$[WC"0_H<3V +M&XH!X!NJC"1^K<3V'(H!X!RJH0=/VO'`8@]/VL]Q@`"P"`R1SW*:`5!O#WXH +MN`B^!7[/=8``/!<`A1SHU!4`$!KH'(48Z.05`Q#H%0`0!2,^@!#R!8$="($` +M#_^D%0`1"PX!$)W_!O!?%8`0`>!?'0(0<0=/V@#9SW*``#P7SW"``'P7.:@Z +MJ#NH/*@^J#^H/:C@?SJB\<#.#F_:&-HZ<`#=SW:``#P7_(Z8'D`3'1:3$$`O +M`19`*P`D)7@YC@BY)7@XC@4A$@`7CB(*K]JI<1IP!2)2(!:.J7$2"J_:$-H% +M(!`@!2)2(!6.J7$""J_:"-H%(``$5(X%(8$$!7J$'H`0B!Y`$*0>1!3/<8`` +MW!>HJ>:IC!Y`$Y`>0!,'&<($G09OVKBF\<#/<*```"`[@,]S@``\%Q.#SW*[ +M``"`@.#*(($`.&`=HP#8&Z,5HQRC6!L"`,G_#Y/0_P#8C@A@``AQT<#@?HCQ +MX'@!V,]Q@``\%QRA`-B<&0``H!D``,]RH```(!N"&:$[@L]P@`"84+4&K^J6 +M(1(`X'CQP-8-;]HHVJK!BW;/<8``W-">":_:R7#/=X``/!>H%X`0GP@0`#Z' +M'X?/=8``O!<">3%Y90G4`!*5/8\@'`0P'(\C'$(P(AP",!BX$+DE>#F/N(\( +MN25X!7T7CP#9]@BOVAC:&G`E?1:/`-GF"*_:$-H%(!`@)7T5CP#9U@BOV@C: +M!2``!%2/I7D%>D#"0<$`V&G`1<`2\""%(G@1>",(U`!5)T`8R7&R#"_I*-K_ +MV&G`"(6#Z`#81L#)<'3^?05OVJK`HL'QP`X-3]JFP2AV2'7Z#:_J&G"+<8'" +M"@VOZ038SW"@```@.X"*(P@``B$/!``GCY,`V`$E#1`"((`CTK@">61Y(GL$ +MV.EQ%@KOZJER`=G/<(``/!!]@")XT?````"`?8S@_OW2_9SW:``##-`*:BH,]P@``\%PB`$.@' +MV+(/[]TOV<]Q@``TS0"A((8B@<=Q`@```"*@!]CV#^_=`=EA!$_:HL'QP/8+ +M3]HH=0AVU?^^#8_C:@X``,]P@`"84#X,C^H")D`3TKC<_PS((&EZ`?83@[O +MW3#9SW&``#3-(($`I03I(H$&\,]QH```(#N!SW*@```@6X(`VS!RRB-O``(A +M@@\(````@./*(8$`QW$"````(J`'V&8.[]T!V>4"3]K@>/'`X<7/=8``*,T@ +MA0?I!]@R"B_>(($`V`"ESW6``"S-((4(Z0?8'@HOWB"!`-@`I:T"3]KQP!8* +M3]K/=H``/!<4A@7H+R$'(`/PJ!:1$,]W@0`X.R"'SW6``'S#`(48VB"@`(4< +MV2"H!&\!I58G01)6)P`3!J4!AR.E0J6"Z$&G"B6`#X``O!BBX"+I%>`JQ#!4'$,]P@``PS1`?A`%!+@8$$A^$`0"`@(!T%0``5B=" +M$Q,,`!#/=(``-,V`A("$#P@!`XH@"```L@3P9-AH'P006X8*ACA@A>H`VD.H +M!/!'W +M"12""QI")%8FPA0`V0;P*&(`)4P@`*P!X?<)%($!AR&%>+@%I0&!C;CY`&_: +M`:'@>/'`X<4(=<]PH```(!N`\!P(L('!@L*Z"*_I!-A#Q8MP$-G."Z_HA]H1 +M`6_:I,#@>/'`E@AOV@'8SW6``#P7&Z4`WE@=@A-@_@V%+H5/A=C^#84NA4^% +M'O_)<-X*(`#)<=$`3]KQP%8(3]H:<,]PH```(#N`SW6``#P7'84">0\)<@#T +M'0`4`=@;I8'B?_0*(8`O@``PS0`1`"``@!,(``3/<(``-,T`@`"`#0@!!`'8 +MU/^"_J(.[]T'V`AVQ@[OW0?8"'<`$0`@`(`5"``$SW"``#3-`(``@`T(`00L +M'H`?``!`(,]P@``TS0"``(`5"``$SW"``"S-`(``@`T(`002A8;HE=@'\!&% +M!.@/>`/P!MC2#&_E":\(KP#8&G`*KPNO!:<`IP:G$!^`'P``!CQ`)@$20"4` +M%0H/[^@&VJ05`1$0'H`?F@%0;R]X*+D(N"5X"K8/V`:F%=@'I@.%SW&``(1( +M`:;/<(``?,,!@%"(%($/((``%*$(V!6A[@_OW0?8`MBR"2``"G&1!P_:X'CQ +MP#(/#]H"":_C"'>J"2```-W/<(``)$"5($@+H*#/<(``,,T`@,]V@``\%P"` +M%0\`$,]P@``TS0"``(`/#P$0'(8%Z`#8B__9_E$'+]KT'D`3X'CQP+((C^-> +M"0``SW"``)A0,@]/Z@#9SW"``"1`E2!("R"@SW"``+P7I0#O_SV@X'CQP+(. +M+]H4V;3!BW;J#N_JR7`Z"0_BSW6``#P7R7`D;=(.[^@4VD*%&PI0`$$*D`!A +M"M``SW````$*L@YOVDAQ//``A8#@RB!B`9@&8MK`*&("`=@`I<]P@`"D/B.% +ME2#(!B"@Q@JO^P38_OT8E2;H&96D%0$1,'!8#X+_.96D%0`1#0D!`*@5@!"8 +MZ&3_%O`$_B.%!-B6"J_[`]JV#>_=!]CB#T_CC@@``,]P@`"84&(.3^H`V`"E +M908OVK3`X'CQP.'%2B=``,]U@0"4*NP<2+//<($`O"I!P,]P@``(4$+`SW"` +M``Q00\`0',`Q$=@$V0G:`-L*)(`/@``04`HE@`^``+10W@KOXDHF0`C/<00` +MX+TF#>_BJ7`-!B_:I<`H<@]YSW"!`)0J@0//XN!XSW"``.Q/W05/ZN!X\#6_IR7"+<#C9=@BOZ)#: +ML04OVJ[`X'CQP#X-#]K/<(``,,T`@`#>SW6``#P70(#T%0$0B[X5"D``SW"` +M`#3-`(``@"<)`0"H%8`0D>@5A8#@S")!@`OT!-B*(2``36@Z"J_J`-L!V!6E +MR7`#\`#8C;@UA0OISW&@```@.X$98<]P@`#L3YX-3^HY!0_:X'@$V`#9F/'@ +M>/'`K@ZO_^'%SW6``#P7(X4$V"8)K_L#VD8,[]T'V'(.3^/'_P#8#04OV@"E +M\<#/<(``/!<8D(CHSW"@```@&X`:",__T<#@?O'`K@C/_SH)S__Z\0$"S_^4 +M\>!X\<#/<8``?!<9B87H&HD-"-(`!M@`V:__Z/'@>/'`SW&``#P7'(&$Z!Z! +M&^@""L__SW"``'S#SW$$`+R[`-I(\>!X\<#/<8``?!<;B87H'(D+"-(`!]@'\!F) +MA^@:B0L(TP`%V`#9D/^L\?'`SW&``'P7&XF>Z!R).0C3`(H)S__/<(``?,// +M<00`O+L`VDASJ@XOXTHD@`'/<8``O#L`H<]PH```'$`8@`\!````B/'@>+T' +MC__@?N!XX'[@>/'`SW&``'P7&8F&Z!J)@^`%V(?V&XF'Z!R)!>@&V`#9!^X'C@?N!X!]AQ`^_=BB'_#^!XX'[@>,]PH`"`#$`8@`\`H`P`ZLG/!X\<#2"B_:`=K/=H``K#(IAJC! +M!X8BN?JX`-W"(H$`1B'/`#)O0"$1!V;%/]D6'$0P%2&0(`HB`"<*<5X(8`!* +M!^BB`$`,]QH```(`&A%-@>H0`9@`\``!`? +M!!F8CR``?P`'&9B/`0#`_&4%0`'QP`#8SW&@```@$*$0V`"ASW"!``@^RQH8 +ML`09@`\`!```SW"``*PR"H`(Z,]Q@`"DS`"!A;@`H9__I?_;_PQP^0C>@<]P +MH```(``8@`\`!```F?^J#@_[J!*!L(PA0H'*(((/``!;"WP)0MJ,_]K_SW"` +M`*PR"H`'Z,]Q@`"DS`"!I;@`H17Q\<`B"2_:`-BV#4_B@O^`V<]PH```'"2@ +MSW>D``!`"8?/=H``H%0`IA&'SW6``)A4`*7/<(``K#(@@,]S``#_#R\)'@`G +M@/JYRB."#W\`__\&].BYRB."#P,`__])@%!SRB".#P``:`O\"$[:P_\`A@FG +M`(41IQ4!#]K@>/'`E@@/V@(/[]\`W<')SW&``.@R`*'/=J<``$C/.G!:<`L@`(0!V,(@`0`$N$\@P0#/ +M<(``;*@"B(+@`=C`>`>X!7D0N84AD@#/<*```"@:<"&@C@POV@'83R(!(`08 +M0"!*(D`@4?!5"9$`<@QOWHH@$``Z<`L@`(0!V,(@`0`$N,]Q@`!LJ"*)@[B" +MX0'9P'D'N05Y$+F%(9(`SW"@```H&G`AH#H,+]H!V$\A`2`$&$`@2B)`("?P +M(@QOWHH@%``Z<`L@`(0!V,(@`0`$N,]Q@`!LJ"*)@[B"X0'9P'D'N05Y$+F% +M(9(`SW"@```H&G`AH`'8Z@LOVEIP3R$!(`080""*(00@`8=J<0.X`J$8&8`$ +M&!M`(R*'`]@:<`D)40`0I@7P!PF1`+"F!(>`X(P/XN/*(&(`08>#AU/9$;DM +M"M$`12+``30>@!2=>D]Z"+P$)$,497I#I@`9``2EIJZF@N#*(.$`$_`T'H`4 +MG7@/>`B\!"1,%(5X`Z8`&0`$I::NIH+B`]C*(((`&Z87V`"F9@G/X0T'S]GQ +MP"(-S]\`VL]SIP``2$VC0*//=(``]%1P$P`&((1&(,`!PKDE>'`;&`#/<(`` +MC#Q`H,]P@`#H,@"`0*3!&ABP_]DKV!*X(*`AH,]Q@`#$Q`"!&*,*">_A0*%O +M`\__X'CQP,]P@``L,P"`A.AL_P/PY/]7`\__X'CQP.8*;^(`V,]P@``L,X8. +MK^H%V?7_.P//_^!X\<`,<<]PH```"#T)'@,V@`2`$'@X8(HA$@H6>?X++^N` +MV`QP(0@>`P'9SW"``.C"(*!J#6_J*'#/<8``V+@5@0'@%:$`V<]PH```122@ +M`]G/<*````@GH-'`X'[QP.'%`!8!0`AUUAI8L``6`D#J&IBPJ,L7"!`'SW.@ +M```$9(//<```W`[Z#0_:J7#J#:_J#MD5!L_9X'CQP(X-S]FBP1IP`-@Z<,$9 +M`@`!@3`2`S:PB4DCS``]"!\!SW"!`-`K`XC"N"4(T0!#@0/8#K@$(@P`&0P` +M$,]T@`"TIG1\<8P)"QX`1W@#H2.!`!A`()+P$VT5>,]S@`!8LP!C/+A3($2` +M"/3/<($`.#6V>&&(`_`J01ZY7MF>`DA +M`P&8>P5[0"W``@5[*0N>!D`MP``Y815X-7DX8%A@SW&``$#9"&$-"-X!1B/# +M`V&Z17N+<*EQ8@[OW6AR`,``)8(?@``XI(;NSW&``(S$J6$#\"IQ(*H`&``@ +M=03OV:+`X'C/<8``@.9CB58@`@13(WZ`)H(*\MVY)J+@N\\AH@?/(>$')J($ +M(;Z/`,````ST`8`5"!X`U\D*@/ZXSR'B!\\AH0_R:%1X43"9X'"86%(@$$C+@)I4>E&/#7R8`@!@`;"=X' +M*84%(H(/0`%0`(VY*:5'I3F`GKD'\)2ZEKI'I3F`GKF?N3F@K0//V?'`0@OO +MV0#95B`-!$:%UQ(,M@0B@P\````8*[N`)`850"0.%C*E%0I>`AB-1+C!N`AF +MB;@($`'9%NE`*T$"D;G6>`"(,J4`WQ$(7P'/<(`` +M@.8#B`<(W@`!WP;OB+DRI0+PPKI`)`$86&$&B%EA4(D(\#B-/'G"N3ADF6$( +MB%")/90E>@*E&+M%>^4"[]ECI2&`'0G>`#"(`[DU><=Q@`!8LTN1[!B"`"J1 +M!O`_V>P80@``V>!_ZAA$`.!XH<'QP"H*S]FAP;IP3,`H=@0@OH\`!``!FG+: +M\A4-'B)3)8\@02W`(%,@5@!`V`GP+,!3)<\@1+A3(%8`@-@$)8TO````&"N] +M,VT`)H(E-7E5>EEA^6'/ +M)@'8&1P"(`IP`,&I"B8`!9/H`!0$,&IP!2@^`0H@ +MP`X$);ZO!@```"2X`>`%\E,@`0`X8"D-7B//<8``Y-D@@04I/@``(8)_``#_ +M#RRZ0"+#`R2[`"-!!`;P%2$!(`#;:'),)`"@>?(`W!4<`B,9#5XCQ;J'X@': +MP'H4'((@`^,BNT)S!O``(@,@%!P"(W1[426`IF.[`!S`(%_R4FU5>O1ZSW.` +M`!#:4F//T8FSA`BOA`<@",%*3YP@.4,'$`NRB#A`<`H +M800*\H'E`]C`*.$$RB#B`,`H8@7%>!`<`"`W\"S`20U>(B$(T@W`N,]Q@``( +MU?`A```#O@4N/A`*(,`.`>`'\`D(D0(3;@/P$F[/<8``I$A?@2S!)'J&(O\. +M(KK`V5IY&6$3\`.^''C"N,]Q@`"(VO`A```6Y@4N/A`*(,`.`>`"N$`@`04P +M>`C<0P#OV:'`\<#R#X_9&G`H=1`1D0``WE8A#P37RG,_#7R8`@!@`;"=X'*8<< +M'X`?0`%0`(VY*:!^H. +M;^4J<`AR5B7`%*EQ9/['IP7P'!^`'U`````1"!XE)!^`'P(````#\,FG,8W/ +M<(``*.+"N2I@SW"``##B\"!!`%8E%1,)AQ0=@B`%>0:'*:=6)102%0A>`@K: +M-AR$(#@``K:.!R$ +M((.Y*:<#\#@,*X$0D>!<]Q@`"HV/0A$@`'\,]Q@`"8V/0A$@#+R1R0 +MAB#_##"-$0@1`FX)[]TH<('@9-@#\@#80G`AA1!XX[G*("$``K<&AP0@OH\` +M!``!%1V"(QWR%0@>`D$HP0#!N0'A,;C!N#A@%/`XCP0@@`\"````1+G!N0'A +M,;@`*1(`!-D5'4(@J7#2_@/P`=A:<""5%!6`(!EA%16`(#A@)H<=MP0AOH\! +M``#`RB`A"]`-X=G/("$#)PI0($PB@*#,(N*@RB!B"[`%XMG/("(#SW"!`#@U +M%B!`!`.(!_#/<($`.#46($`$`H@CAPZX)7@#IP:'525"'3V7P?XIAP0AOH\` +M```P`;<^\D.'#I=%IPFW`!\$%,L2#+8A"1X#%-@(MSXP.3!.B1 +MN2FG!"*`#P`#```XN`/9!GF"X,HA(0#7R0NY>1`"!D5Y>1A8``SP)H?`MR6G +M+Y<^'(0C*;<]EQFW*+<^%``A()!CN4SW"@```$)*"O\``6`T%6(`T"?+``%@%!/;``%@5` +M/!A``0`6`4$@M0`6`4`QH``6`4$DM40C`0,_"1`!&-[9M0`6#T#SH``6#T'H +MM0`6#T'JM3,)$0**)`P`!",/`2WMFU`!8/0/:@`!8/0>ZU"?`0WMFU +M"B2`#X$`W"L*'(0!:'>&)_TDFDJ+JNNDFD`-DZH#N@"/``%@%`.J``%@%`.Z`(V0"0/F;">!BUAB/\`,]Q +MH```!(PC`X3@V,PC`H`1]`.!$'N,(\2"#?0!W<]S@`"4-Z.C!""`#_\````P +MN`2CF+I)I`2!&[2%`X_9X'CQP`79SW"@_H`'%;D$H`P'8SW*@```(!J+@>.!X`-DFHDH*#^K/<8``6+D!@0'@`:'/ +M<8``R*D`@0KH`-@`H2QP_PB>A<]PH`"`+!R`R\F@$`$`$PD>!(HA"`"@&ERP +M@_\Q\"L)'@76R<]RH```+BRX4R`!`16"`=P0($``%:(PR#(.+^H`+``0R\F* +M(1``T!I8L%8@`00(@14('@?/P3R`>)0>PD( +M,P%@L83H`-@#\(#8X'ZAP?'`V@F/V2AV1,%H=4&CBB,$`"<)'@)1(,"!`=C" +M(`$`![A!+D$19'D%>1F-B;D-N"5XCK@"I6/P%8T%Z`-J1B#```&E02Y#%,&[ +M!":"'P```!@DP2NZ1+G!N0'A`"G,`&&\!":$'P@```#XC4$LQ`3[?X8G?A`' +MO.5\ZY53)L`0"K\$)X\?!P``_.5\02Y/$\"_%;_E?/2-%K_E?/F-%[_E?$`L +M3P?E?).\E+R>O!L+M0""I03K$PF5`(+AS"*N@,P@;H(`V\+W`=LY835Y`[IJ +MN55Z.F)88,]Q@`!`V0AAAB#]#P4@_H#*(((/``!4`,\@(@,D">+9RB&"`P"% +M4]D%N!&Y`:$!A0\.'A(#H0*%!*$/\,]QI@```1"A`X43H0*%$:$$A1*A&8T# +MZ`>%%*$(W!,!C]FAP?'`F@BOV8ASH<$H=4?!&G!(=P#>SW"``)P\P*!M"5X" +M`MG/<*``@!P[H"?!4V_NX5!X!/2+<9C_'_`1"=$-&W@0>(MQE?_),]Q@`#8MQ&ASW"@ +M``!%!(``W@0@OH\`*```2B%`(,]PH```(`Z`PB%")`3PJ@L/X\]PH```1;R` +M`=\$)8`?@`````0EA!\@````!"6"'P`&```$((%/8`(``-=Q``(``,!_SW.@ +M```@`-D5"1`@R!,,``T,U1"`Y\HA80`%$PR&!"6^GP`X```$)(\?````@,PA +M(8#`)F$0!2```05_!2>^D`3TB0Z4D@T,WA/UO!"6^GP````P!X`ZAG+Y.\IT- +M7Q`PR`#9#R$!`,]P@`#DPB"@1/`5"-X`SW&``%BW#X$!X`^A0MXZ\`ATAB3] +ME]$@H8$S].VXA`U"Z"_P$PU>%<]Q@`#8N!N!`>`;H27P'>KZO%L]Q@`#8N!2!`>`4H4+>"/`^@SG87(.2#J_9C+@`WJEP?@ROZBIQ"O`V +M#4_HSW&``-BX'($!X!RA`-Y/)@`6)/`%$P"&\+C*("$`SR"A`P`,H>K*(2$` +MSW&@``!%6($%@4MX`-@2\AR!`=C/=:````@&I>!XX'@`V2:E5@W/Z0/8!Z4% +MV)BXB>@?"-\A`]K/<:````A"H0?PSW*@_J@'!=D5N42ASW*``%BW+8(!X2VB +M"-P+!F_9H<#@>/'``-H*V,]QH```(!"A`=@'&1B`$-@`H4AP%?"V"0_CSW&@ +M``!%'($`VGB!`-F5N0\+7P4$(+Z/``8```+R`=HD>`QQ[+G,(B&`S"`A@`7T +M;'#-"!Z`;'`A"!X``=G/<(``Z,(@H+(,[^DH<,]Q@`#8N!6!`>`5H0QP[+@` +MV`KTSW&``-BX&X$!X!NA`-B8N$4'3__QP/X,3]G+$@&VH\$0$94`SW"```B: +M`(@`WH0H`0//<(``XE4T(%(.SW>@`(`M,,@=I]?)H1(-MX`A`@#^$!`'1B7` +M$*$:'+`)@<.Q4R5^D(2XI`(A``FA0"W`(!5X`""4#X``6+,.%``A$PA1```4 +M`""&(/F/@`("``HA@"^``%BVSW"``%BX((!Z<`'A(*`#\*X(#^-^A_L+WH5' +M"YX%4R/``@*X02L,`X[@P[S0(Z4%F??,$@*V9+A6(@$$"+%T&H(#P+)U&H(# +MQZ'=L! +M`1T+7@4`V$X(K__I<@'ZKH1`"8!X+H9&""T\`&!Q0C>`)@1``"D$0\`UQ(#MHMR:':`)@850"8, +M$D`F!!96(XX-)0\>%>BXTR"B`-,@X0`(9L]S@`"HV`"B'7C"N/0C```!HD+P +M-0A>`B2XP;@R)```B;A`P,]P@`"D2!^`(,)$>$2ZP;J&(/\.6&#/,*X +M]",```&B$/`=>,*X"&3/ +M!_`$X`BQ!-AU&@(``=X&@8`B`P4N"*__*)',$@&V5B$"!.D9@@,BD@&R.&`8 +MLLO)SW&@```@L!`,`<`1`P!B?``D`Q28DD)SFF,Z@5!Z,'*F!LW_0G2&&`0# +M!!,`(*$:7+,!X`0;`"!9`F_9H\#@>/'`&@IOV0#;SW&```B:((F$*0$#SW&` +M`.)5-"%,#L]QH```(&@1!`#`$0(`00@1``6F` +M#PL>!<]S@0`(.X&#`O"!D&*00GP")``#"",#``3P8I"#D)MC:'0Q\('@S""B +M@#;TRQ(#ME8C#P3`EPT(40!^$P`!!?``W`(D`P`2\`F'%P@>!<]R@0`(.P*""PB4`&&"`O!AEYAF&V,"EQMCW&2A +MS14(7@#+R780``%BN)U@"_!H=<;Q#PMR`&*]U\G^$``''66@V`&A`-@1H;&A +M`M@'&1B`@-@`H8$!;]EP>/'`T@Y/Y`CHSW&D``!`&8&@N!FA*0-/_S#(QW"` +M`-2F*(@!X2BH"(@;"#(!RQ(!MJ`9@`\#`(0`BB`(`-`:&+`)\(H@$`#0&ABP +MH!F`#P(!A`#@?L]PH```11B`.PC?`\]Q@`!8MQ"!`>`0H3#(QW"``-2F((@! +MX2"H((C/<(``F"D`@!,(10"*(`@`T!H8L(K8D+@'\(H@$`#0&ABP0MB8N.!^ +M\EN@P/Y\]P +M@``\.P"`@.#,)R*0`_0('9B3R\F@$```"0!/V?'`G@\/V6X);_\(=\]VH``` +M(#N&SW"``&0](*#%_PAU`=F`Y1,*'@#/<(``HD`T($`.!O#/ +M<(``I$`T($`.X_^XZ`/9SW"@```$**`@V*`:'+#/<8``6+<4@0'@%*'+R9@0 +M`0"4&$``RQ("ME8B`00/D6"1";$=D0BQ"8&LN*VX":%^$@`!&V,8D6)X&+$` +MV'X:!`!!D0"Q6;%B#._G)H'+R:00`0"&(?6/M`P"Y^4`3__QP,O)Q!`"`#"( +MA"H(!L]P@`"L/C`@0`Z%X,P@XH$=],]P@`#LGW9I8&"`X`#8SR`B`Q3TA"H% +M"L]P@``4FS(@0`X7")$`J@NO_$AP@.#*(&(`#+@"\`#8A2`#`0/:SW&@```( +M0J$`&`10R\E=D``8A%#+R5&``!B`4,O)2!`"`0`8A%``V`&A60!/__'`+@X/ +MV%(<+H+;_\`VJQH +MZ@Y/Z<]PH`"`(-"`BW'+R8'"\@UOZ,00````P<)]`<`]94%H,'7*(@8``!A` +M4P`8@%``%@!``!8`0,O)SW2@```(5B`#`CB3:+DDI#B3S!A``VBY.+/0&(`` +M#08OV:+`X'CQP(8-#]DH=E8A#P0FAP0AOH\!``#`H<$P]`:'0,`!VA4('@)! +M*,(`P;H!XC&XP;@:8@[P&0B>!B#"!""`#P(```!$NL&Z`>(QN!AZ(0I0`!,* +MD`"#X@#8RB#A`<`HH0,*\,]P@0#0*P*`!O#/<($`T"L!@`5Y)J#R__ +MR7`PCE,AP`!$N<*YP!Y"$!"NP@WOX0#9$:?J&IBT$8[6&EBTPKC/<8``*.() +M8<]S@``PXO`C``!6)@(3:800OV:'`\<`B#`_9"'8H=[")`=@S$9```*XP$@$VSW"``-2F*&`* +M(8`O@`"TI@&NM@OOY*EP,!(!-@.N%"%`(!"(`JX5(4`@+(`AIL]Q@`",Q*EA +M-JXAAT`F`A@?"1X!6"J((D\><*Y!+EE>0+P@-D@J@2]!2!! +M(R&J/)`]X:P@U`C#:0!F`#P"@ +M,``+"!0!`-H"\`':ZLD`'P!`((8`'T!`(88`'T!`(H8`'T!`(X8`'T!`)(8` +M'T!`)88`'T!`)H8`'T!`)X8`'T!`(!8!$@`?0$`AA@`?0$#8R:5X+@WOX`+9 +MW0(/V5"A"@F/YX#@RB`B`:@)HN?`>3.PA2`&&X![-0BA-J%7@0897H`-@/((``,@COZ1_9 +MR\D0B#-H-7DT($$@X;E8#\+_H2"1F!V$$U`=1!#+$@&V%7\!@00@@`\```!@ +MP*<="($/````(,01``#/<8``S#L5>0"!$.``H:D!#]GQP#X)+]D`V<]P@`#H +MPB"@SW"``"P6`8#/=?\/__^AP"SN+6XN+CP&ABP +M!*(#V,]VH```!!6F`=@)ILL2`K:@&@``S!I``*#-X+B$\AH++_](<,L2`K8P +MBE,AP`!$N<*YP!I"`#-H-7D0JL=Q@`!8LV"!-PM?`JH)[^$`V`AC@^#*((D/```(*YP(2=D$ALL2 +M`;:T&00`T,E*"&__,!("-LL2#+:P%``1EPA%`P&$!""`#P```!B>#D_=!""^ +MSV````#+$@*V5B(!!`;R(!F`#P`1```,\,]P@`"(/0&($0A1`"`9@`\`"0`` +M/0,``%"*SW"``#BD2F`)D<8.+^4E@1WP`!8`0-8:&+``%@%`ZAI8L*C+G.#* +M(.()"`ABV<\@(@/+$@RVM!0`$02FE!0`$`\(7@**#4__RQ(,MC#(SW&``+2F +M0"$.#!1Y")&KZ!",SW*``%BS,V@U>2%B3PE?`CX/C^3+$@RV,!(!-E8D`Q2% +MZ`:#-7X`IE&#SW"``,P[\"""`,]P@``TIURS-'@TD`0B@@\``/#_P[E%>32P +M!?"H$0`!N!P$$*`4`1#/<(``")J!X=",`(CR])X,#^3/:XU/0!A`\( +MG@:@'(`?`0"0`,SP`[[/=X``6+-`)X`7U7[)8,`4@!`1"$``H!R`'P$`D0#I +M\,]P@0#$*P&`()0)Z,]PH```!`Z`$'$`V`+W`=B,Z*`<@!\``P``SW&``%BW +M$8$!X!&AS_#/<*````P-@$(@``A((`$`BB`$"PL)!`!6)`(4"_#^#`_JRQ(, +MME8D`A2@'(`?@`$``&J$SW&@```@&X&,(_^/$?)B>!\(A0\`@```(!J`#P$` +MAP#/<8``V+@2@0'@$J&=\!",`[@5>!]G`(<$(+Z/``"`$SOR$0A>`B`:@`\! +M`(L`C?!="!\#!Y>BZ,]S@`#(-`&#UA(!M@GH++G$N0#8#R!``".#)'@'\,#8 +M&+@$>1!Q`=C`>`?H(!J`#Q`!``!M\"`:@`\!`(@`:?`)@K2X":()DJ>X";(/ +MDJ>X#[)?\"`:@`\!`(4`6?!FES,4@!!3"PX`SW.``,@TP8/6R0KN++C$N`#> +M#R8.$`.#!'X(\,#;&+MD>'!P`=[`?@ON"8*TN`FB"9*GN`FR#Y*GN`^R"?`! +MA`\(G@$@&H`/`0"-`"WPT,DA"!X`\@IOZ1&"RQ(,MK%PRB%&`\HA!0!6)`(4 +M*J(#\#J!&)(?"04`(!J`#P`%``#/<*#^0`<%VQ6[!*,8D@2C)*//<(``B#T! +MB`\(40`@&H`/``D``%8D`Q0(@\]U`0$``*MX$/0)DU4D1!TE@TB3-@QO_WF3 +MRQ(,MJ`4`1`E>*`<`!"K>`;RK@E/_VT`0``F"&__B7#0R +M`!R2SW6@```@AB#]#(P@`H([]((++^@1@(P@!(O+$@&VRB*&`X`A`@`*@1!RRB,& +M`,HCA0#`$H(PSW"``,C$5G@#D!!SRB#%`(P@!XUKH4+W`-B(Z$F!L;I)H07P +M:H%KH?GQ"',$'8`?``,``,`5`A`A:C!SRB'-`$)Y.J4`'8`?``$``,L2`K8, +MZ*02`0"AS?&YQ2"B!,\@80"A&ARP`8(/")X#H/,(^*!'_3/<\A(@,6](0H!0K/ +M`U02`P&X$@$!P[ME>50:1``( +M<88A_0R,(0*"%_0PB@.Y-7G'<8``6+-GD1\+4@`HD1L)7@`3"U$`8!(!`82Y +M8!I$``/PC;@#&_=I!A``,O)I!```*MXOO+TN`'=>`U! +M_\O)I!```-,('@,!V!G\RQ(!MM(/+]T=L +MA>#,(.*!'?3/<(``[)]V:6!@@.``V,\@(@,4](0J!0K/<(``%)LR($`.%PB1 +M`&H/+_Q(<(#@RB!B``RX`O``V`/9(J6%(`(-`!@$4,O)/9``&$10R\DO@!,) +M'@#7R2:``!A`4-?)+I`&\``80%#+R4`0`0$`&$10R\DQ@,@0``#QN,\A(@`` +M&$!0R\E($`$!`!A$4`#8`:7+R900``#IN*P(@?^9_&D%``">#V__`MC+$@&V +M';'/<(``V,*@H+O\R\F8$`$`E!A``,L2`;:`(0(`#Y%=D0FQ2+$:#V_G)H'+ +MR7@0``%W_(#@)`4"`.H-K^"+<,O)5B`#!%4@1`T)DR6#2).V"&__89/XN*@+ +M0?\;"!X&`]G/<*````0HH(H@$`#M!"``T!H8L,O)I!`!`(8A]8\(\B(/C^8# +MV<]PH```%"F@RQ(#ME8C`@2I@O2]RB:!'Z````@A\L]T@0`(.\*$"9(9#K00 +M)8)`A!8/+_]`)`,4`@@/W)4$``"GN`FRM+T)DJFB@",#!?H.+_](D@/8SW:@ +M```(`J;+R<]R@`"DUC&(PKDO8L]R@`"0V"UB!AV19+B?N`JF')(_"!X#SW"``&RH08C/<(``O*=$*CX+,"!` +M#B<(7@`1@80H!0H`(8!_@``8FSZ0$PE>`@2`@."0#.'DRB!A`,O)/)``&$10 +MR\D]D``81%#+R2^``!A`4,O)0!`!`0`81%#+R3&``!A`4,O)2!`!`0`81%#+ +M$@&V')&&(/\,/P@0`3.!BB(,```80%#+R5`0`0$`&$10R\E4$`$!`!A$4,L2 +M`;8`5H2(.;_\#WLL2`K8(=2^" +MR7`""J_A4(($);Z?!@#*`!_RSW"``'0T`X"`X,H@X@K/("(#RB%"`YP.XMC* +M(D(#SW&``-BX$X$!X!.A!=C/<:#^R`<5N"2@Z0$``,]PH```!,J@RQ(!M@&! +M,PC>`*01`@"*(`@&Q!$!``QY$PH>`,]P@`"B0#0@3PX+\,]P@`"D0.X,;_\T +M($\.`_!V$0\!H@&MRPI[FKN:RYRQ(,MJ$:7+`0C#,4C1`$N*5XSW6! +M`(`KF'`&M0&$/0B>`8NYC+FA&ERPSW"@```N\H`-\"\HP0-.((X'+LCT((`# +M$">/$Q,(``'V[P@=A!\``/__`O#$M:`:W+`!A`T(7@>'N:$:7+#/<8``6+<4 +M@0'@%*$C\!#8H!H!X.XH1H< +ML,]P@0#<*P&`RQ(!MI@9``#0R78,[_XP$@(V!/"CN*$:'+"AS5,@?H`,\J#- +M%0@1`LP2`;8`V.X);^>8$0$`J02OV*'`X'CQP.'%SW6@```@!!V8GR``?P`' +M'9B?`0!`/!H-#^F*(`0``*6=!(_8\<`.#*_8]-J")`,]"'4Z<8MPSW&``'#1 +MW@^OV!IPSW"``"P6#8`%V16Y"^@+H?#)`>"SN+6XN+CP&ABP!*$!V'IPSW>@ +M```$":?/`6HL]PH/[P!P2A0"D`)*5X!*'`?@;TI@XOZ0#8 +M"';`RL]QH```+C6!`K@O$@(V,""`#Z``9"Y$>`1Y!"%2!+/PI!0`,+BXI!P` +M,.X.[_X*<&X.+^D`V`AVSW"``)S$.G!&#V__"G$J<`;\G?`#V)IP%:0HA@"^``%BS,"%!(&3`#PE? +M`A(,;^$`V0+P_]B&)7\;Q!P`,!L-7A"@'(`_`0".`-<-'A&@'(`_`0"&`&7P +M!^Z@'(`_`0",`%_P),`#N!5X<"!!!"ATAB3QGP[R#PE>`J`<@#\!`(L`3O"@ +M'(`_`0"(`$KP7HC`%($P$0F``*`<@#\!`)$`0/`!P1,)G@:@'(`_`0"0``'= +M-_`FD#,4@#!#"0X`SW*``,@T`8+6$@&V">@LN<2Y`-@/($``(X(D>`?PP-@8 +MN`1Y$'$!V,!X"^@BP!,(4@"@'(`_`0"-``'=$_`*P8PA_X\/\L]PH```(!N` +M(G@3"(4/`(```*`<@#\!`(<``=V`YLPE(9!1]2`?`!6`YF/U4R5^D`7R#H>` +MX%WU9PU>$`':2G`$\!`@0``HZ"\K`0!.(X$'*'.`(\(!E.'*(T4``KLP(X,/ +MH``8+))I,"2,'Z``M"Z/?)%SP'KFZL]P@`#(-`"`"N@1($"`RB"!#P``G"'\ +M"<'8`-@#\`'8@.`K\_4!K]B`)`,]X'CQP*'!BW&*#N_B!=@)Z`#!SW"``,P[ +M%2!!``"1`O``V*'`T<#@?N!X\<#AQ:'!"'6+<5X.[^(%V`?H`,'/<(``S#LU +M>*"@W0&OV*'`H<%`P"#`(KD<>,*XSW*``,#8\"(```*Y#'E!*`E,A@@`CN0;P4R'"`"+!1+E`*(,@=7M4>\]R@``0VG-BP;G/2"@K?'QP)H(K]@(!XH<'QP#X(C]BAP2AU"'8Z`X`P*`?__`0__\<#AQ:K!BW6I +M<,]Q@``4T7(+K]@HVJEP;@MO_\L2`;9"#&__J7`!`*_8JL#QP.'%H\&+<,(/ +M+^D#V0'"SW2``*0^3WT;#341BB,(!FQ]`"1`'B"`"PI!``&`%PA0`&Q],"1# +M'F#8C+B6#Z_8J7$`P,]Q@`#,.Q4(4``1")$`"!0`,14A3`,`I"APM7B&"&_@ +M#-F5!V_8H\#QP!(/3]C+$@&VBB<(%L01`@#/<8``M#[L>D(A#0(`(4X.SW&! +M`(@^(X'/-H$(8$/``,``$4A00/AP2#"7'K"NO0C@P#/'![%-H*)``$FO\+"!X&"G!&\,O)Q!`"`#"(['HP)4`>A>#, +M(.*!'?3/<(``[)]V:6!@@.``V,\@(@,4](0J!0K/<(``%)LR($`.%PB1`*8+ +M[_M(<(#@RB!B``RX`O``V`/9SW*@```((J*%(`,)`!@$4``8!%2*(?\/`!A` +M4``8A%\``/__((8`&$!0(I8`&$10!!H`!/H/3_X!V'T&;]BAP.!X10"/_O'` +MSW"``+#0`(#AP``6`4``%@!`SW"@`(`,`=H="5``0!B`#P"@#`#JR0#9`!\` +M0``?0$`H<`_P0!B`#P"@$`#JR0`?`$``'X!``,%(<``?0$`"V7((;^`!VJ'` +MT<#@?O'`H<%*"N_@`-B+<-8.+^D"V:8,;^0`P#8(3^#O\>!X\<"AP8MPU@TO +MZ0'9(@KOX`#8`,#/!X\!/`"W@#=J7(@P%<( +M40`"%``Q$'+*(((/```@*RP-@MB3[JEP'@TOZ0(4`3'/<(``")I`B/(,K^-( +M<(#@:`DB`,H@@@`+\`#8!?``%H%``>`0>`(4`3'W"$*``-H%\(#@RB9B$?OU +M`AR$,`SB4R)!`#IB`^($(H`/``#\_YVXG[C/`0>/<(0H#)<`'9 +M`@\OX"ARN01OV*'`X'[@>.!^X'CQP#H,3]C'$@&V@.'*(($/```("5@$@=@` +MW03P`>6P?4$-U1'/<(``-..V>,"`\0F.@^&`@.?*(($/``"/$T`,H=C*(H$# +M0'_'R1`@@8/'&EBP!_3B"*_/'`X<4`W0OPSW"``-SBMG@!@(#@XB`"``'E\0W4DIX*3^`=!$_8X'A`@,]Q +M@`#@5D"A`8`!H>;Q=0(/WH0H"P(`V0`A@'^``.!>1QA8`*886`#@?_<86`!- +M`4_9\<#AQ80H"P(!V@`A@7^``,!B0*'Z_P#="_#/<(``;./P($`#@.#B(`(` +M`>6P?>\-E).Q`T_8X'CQP(0H"P(`V@`A@7^``,!B0*'/<8``X%8A@>RY@`B" +MW='`X'[QP,<2`K8/(@$`QQI8L(_JW@POXP;8@.#*(((/``"-$R`#@MC>"*_< +M!MCJ\?'`X<4(=0/8;@[OVR?9SW&@```@.X$BH`79)J"*(5X((Z`#V+(.[]NI +M<3$#3]C@>/'`Q!("M@\B`0#$&EBPCNK/<00`P/;/!X\<#$$@&V$"$!@,0:6+!<#^';RB#A`+#Q\`KR!B!`@\<:&+#$#F',]P@`"4/`"`ANC/<(``D#P4```` +M!(`!````@```````$0```.)A!0``"0```````(#1@`"L(H``Y/F``-3M@``8 +M%8``@.^``````````````````````````````````&P@P!`/&PDBW!W`$`H` +M&T`@`!MN"@``88``&VX7``!A``$;;A@``&$``AMN&0``81``&VX!``!A)P`` +M82(``&$``!LD(``;)>0=P!%P!<`2`0`;<`@``&$/'!TB!``=)N@=P!`!`!LP +MZ!W`$8($&R0(`!LE!"C`$>,/`&$``!LD@``;)>0=P!$``!LD``$;)>0=P!$` +M`!LD``(;)>0=P!$(`%]P!```8=@=P!#__ALRV!W`$=0/`&'8'<`0``$;,-@= +MP!'0#P!A```;)0`!&R1<',`1````8=P=P!```!TD````(0$`6#$/10`B`%P` +M.?0EP!`!`1,R`0$3,P$`$V+O_P`R!```8@-@`&(``%@X`@!8,6D``&%X!<`2 +MZ!W`$0$`4B2T'\`0`@`3<`,``&$(`%@P"`!D,0T``&$/$U(B@@03)`@`$R4! +M`%)N!```88($$R0(`!,E!"C`$00``&&"!!,D&``3)00HP!$```!A"`!8;N4/ +M`&$``!,E```3)"00P!$`@!,D```3)3@!,B!`#*$0```20```$E!@``80]V$R(L2,<1#W@3(@``QA$#``$D```!)0]% +M`"(`7``Y[_\`,AP``&0`@!,D`0`3)3@@=P!`/$P1```?'P``")$``!P6```) +MD0``$`D```J1```#/P``"Y$``#T]```,D0``/3X```V1```_`0``$1`^2$@` +MX!`$````#2`$````81`B````($,Y`````."$`0``X1`!`````A"7RP4`,&`+ +M````#]($````&-+\__\?`7,0````">")AH2$"N"$A```"^"F5=<@#.`BBRPR +M#>"JB8>^PQ%^"2C(N*&."*B@``&>!^2><@&N`BBRPR&^"33; +M>^PQ)&`"`````G,`````$2`4A0$`&1`&````$=(#````,>#_MW8`,N#D)3\` +M,^`B4@X`-.`N````->``````-N`V-C8V-^`V-@``"1!N7P``&A``````,1"& +M`0``,A"0`0``,Q#(````-!!0````-1"`````.A!I````.Q#`````P1`````` +M)(``/```*N#YY>`>>^PQ*."+BXF)*>")B0``#&"# +M)0``.!!2````.1"6````08`!`````D;@<[G2X'.1P.![?;S08VFZT&-1KM +M!KO?\`C,Y7()2F4R"4@D\@C'X_$(1J.Q"$4BD0A$(G$(P^%0"$)A,`C!8#`( +MP6`0"$#@[P>_W^\'O]_O!S^?SP<^G\\'/I_/!SZ?KP>]7J\'O9[/!SZ?KP>] +M7J\'O9[/!SZ?SP<^G\\'/I_/![_?[P>_W^\'O]\/"$!@,`C!8#`(P6!0"$+A +M<`C#(9$(1"*1",6BT0C&X_$(QR,2"YG$X'N]V.!SQ>KP>^WP\(0&`P"$*B,0WI=#H-S6:S"_G\\'O]_O![\?$`A`8#`(P6`P",%@$`A`(/`'/Y_/![T>CP>\ +MW6X'NYU.!SJ=;@>[W6X'/!ZO!SV?SP>_'Q`(0&`P",%@,`C!8!`(0"#P![_? +M[P<_G^\'O]\/",!@4`A#HO$(R66S"XFZT&M)E,!K%8#`8T'`\(1"*Q",5BT0A&H_$(Q^/Q",?CT0A& +M8[$(12)Q",.A4`C!8#`(0"`0"$`@$`C`8#`(0:%P",,AD0C%8M$(1N/Q",?C +M\0C'H]$(1F.Q",4BD0A`'HX&,%@L!C&9;`:TFNT&.-UN![O=;@>U6JT&-=IL +M!C)9+`8Q&HX'P*+1",;C$0G(9%()2N5R"O@`9R``&R0`&R@`!S``%S0`%RP`$S@`#SP`*T``*T0`"T@`"TP`*U``* +MU0`"U@`"UP`*V``*VP"(W`"(W0"JW@#=WP``XP`(Y``(Y0`*Y@`*Z```ZP`( +M[``([0`*[@`,,0`D,@`F=P$P.`(P!`!,.```Y0%SY@$*I@)SIP(*^P#_CP$@ +M5@(@@P$`1`(`C@$/50(/D`$`3@(`D0%]D@%]DP%]3P)]4`)]40)]6@!56P!5 +M_0`!Z@$$_@`3_P`&;@`*>0`-=0`!?P`/AP`.F0#%F0#-?`$-@`$-/0(-00(- +M?0'_/@+_?P'_0`+_)P`<*``8*0`<*@`@('>P(0S@$#CP(#D0(` +MO0$)?@()QP$,B`(,O@$)?P()R`$&B0(&I`$0J@$2I0$0JP$290(0:P(29@(0 +M;`(2WP$!UP$`H`(!F`(`>@$!.P(!```T`0`V`0`^`5<_`69``7=!`9A"`0=? +M`:I@`:IQ`7D?`@`I`O\J`O\R`GFA`%NB`!NC`#"D`!*E`""F``>G`!NH`!*I +M``>J``"L``FM``:N``RO``FP``:Q``RR``>S``2T``JU``:X`%Z^`!G(``;) +M``;*``',``7-``7+``3.``//``K0``K1``+2``+3``K4``K5``+6``+7``K8 +M``K;`(C<`(C=`*K>`-W?``#C``CD``CE``KF``KH``#K``CL``CM``KN``PQ +M`"0R`"9W`3`X`C`$`$PX``#E`7/F`0JF`G.G`@K[`/^/`2!6`B"#`0!$`@". +M`0]5`@^0`0!.`@"1`7V2`7V3`7U/`GU0`GU1`GU:`%5;`%7]``'J`03^`!/_ +M``9N``IY``UU``%_``^'``Z9`,69`,U\`0V``0T]`@U!`@U]`?\^`O]_`?]` +M`O\G`!PH`!@I`!PJ`!RY`0>Z`1!Z`@=[`A#.`0./`@.1`@"]`0E^`@G'`0R( +M`@R^`0E_`@G(`0:)`@:D`1"J`1*E`1"K`1)E`A!K`A)F`A!L`A+?`0'7`0"@ +M`@&8`@!Z`0$[`@%B`<]D`<]F`<\L`L\N`L\P`L\0``0`"P````,![`$%`!`` +M!``1`!(``P`*``L`-`$=`C4!'@(V`1\")0````H`"P`$``\``P'L`1``.`#D +M`:4"2``2`",````-$2(#>!2``%04@`"H%(``3!2```,![`$"`>L!!0`$`!`` +M"@`+``8`"`!\`8`!/0)!`G,!=P$T`C@"EP%8`ID!6@*6`9@!5P)9`MP!G0(E +M`)H!6P*<`5T"```````````````````````````````````````````````` +M```````````````````````````!`````@`````````N$2\7,!`Q*#(1,_(V +M(C@1.1#AY.(@#4!`!,````<&@$`%````-AS```5````O+P``!8```"X=P``%P```,@Q!``8 +M````B`<$`!D```",#0``&@```/____________________\$````________ +M________`P```/____\``````````/____\``````````/____\````````` +M``,````0`````P```````````````````/\``````````````/\````````` +M`````&0```!D```````````````````````````!``````'_```"_P```P$` +M``7_```&_P``"/\```?_```)_P``"O\```O_```,_P$`_P,!`0```0$""@$" +M!00!`0;_`0$'_P$#"@`D``#P)```X"0`` +M(`D````)``#@"0``)`H````*``!@"0``0`D````````````````````````` +M``````````````````````````````````````````0"```````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +MF)6````````$`````@`````````!`````0```!X```````````````$!#@X` +M```````R"`(/`P`!``````````$!#@X````````C!`(*`````````````/0! +M````````````````````````J)>````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````0`````)`!````H``0)P``Z`,``.@#``#X'8``^!V``(C7@`"$ +MUX``A->``'S7@`"(UX``A->``(37@`!\UX``?->``(C7@`"(UX``?->``(C7 +M@`"`UX```````/__```!`0````````````$`````9`,$`&0#!`!D`P0`_`0$ +M`&0#!`!D`P0```4$`&0#!`!D`P0`G'P``&0#!``$@@``9`,$`&0#!`!D`P0` +M9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$`&0#!`!4B0``1(8``*")``!D +M`P0`9`,$`&0#!`!$@@``"(\``&0#!`#$A```N(0``&0#!`!D`P0`9`,$`,"% +M``!D`P0`9`,$`!`-!``4#P0`9`,$`,QW``#(=P``9`,$`&0#!`!D`P0`9`,$ +M`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0` +M9`,$`&0#!`!D`P0`9`,$`(A^``"$?@``@'X``&0#!`!D`P0`9`,$`&0#!`!D +M`P0`I'\``&0#!`!D`P0`9`,$`&0#!`!D`P0`=(P``&0#!`!D`P0`0((``#2" +M``!D`P0`9`,$`&0#!``\@@``9`,$`&0#!`!D`P0`9`,$`&0#!`!$?```4'L` +M`&0#!`!D`P0`9`,$`"B"``"`CP``9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0` +M9`,$`(2%``!D`P0`+((``&0#!``X@@``9`,$`&0#!`!D`P0`9`,$`&0#!`!D +M`P0`9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0`Z(H``&0# +M!`!D`P0`9`,$`&0#!`!T?```9`,$`&0#!`"$@```9`,$`(B```!D`P0`9`,$ +M`&0#!`!D`P0`9`,$`%!E!`!D`P0`9`,$`&0#!`#$?P``9`,$`&0#!`!D`P0` +M?(\``&0#!``@C```9`,$`&0#!`"<>P``9`,$`&0#!`!D`P0`,((``&0#!`!D +M`P0`9`,$`&R```!D`P0`9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$`&0# +M!`!D`P0`9`,$`("%``!D`P0`9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$ +M`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$`"2"``!D`P0`9`,$`&0#!`!D`P0` +M9`,$`&0#!`!D`P0`O'<``&0#!`",?@``9`,$`&0#!``,!00`9`,$`&0#!`!D +M`P0`9`,$`,A_```LA@``9`,$`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$`&0# +M!`!D`P0`9`,$`&0#!`!D`P0`9`,$`+R%``!D`P0`9`,$`&0#!`!D`P0`9`,$ +M`&0#!`!D`P0`9`,$`&0#!`!D`P0`9`,$``"%``!D`P0`9`,$`&0#!`"0B@`` +M"`4$`$A]``"\?```9`,$`&0#!`!D`P0`]'X``&0#!`!D`P0`9`,$``"+``!D +M`P0`9`,$`&0#!`!D`P0`9`,$`/PT!``8-00`;#4$`%@U!`"X,P0`^#,$`"PT +M!`#P,P0`=#0$`*PT!`!`-`0`I#,$````````````(#2``&=%(P$%`````@(" +M`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(" +M`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`0("`@("`@(! +M`0("`@("`@("`@("`@("`O\``!`"```````````````````````````````` +M``#0_(`````````````````````````````````````````````)```````` +M```````````````````````````````````````````````````````````` +M``````````````````````````#_________________________________ +M_________P````````````````````````````````W2&](N!XH'```````` +M```````````````````````````````````````````````````````````` +M````````````````````````````+!(```(````$````_-*````````````` +M`````(@2```%````!````/S2@``````````````%```#"0,)!0D,$0`````` +M```````````````````````````````````````````````````````````` +M```````````\4(J,CI0````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````8%$!```````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````#__________P`````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````!,"*``2`B@`&`&@```````_0'Z`?@!]0'R`>\! +M[`'I`>8!Y`'A`=X!VP'9`=8!TP'1``1T!&P$:`1@!%@$5`1,!$@$0`0X!#0$+`0H!"`$'`04!!`$" +M`0$!_P#^`/P`^P#Y`/@`]P#U`/0`\@#Q`/``[@#M`.P`Z@#I`.<`Y@#E`.0` +MX@#A`.``W@#=`-P`VP#9`-@`UP#6`-0`TP#2`-$`T`#.`,T`S`#+`,H`R`#' +M`,8`Q0#$`,,`P@#!`+\`O@"]`+P`NP"Z`+D`N`"W`+8`M0"T`+,`L@"Q`+`` +MKP"N`*T`K`"K`*H`J0"H`*<`I@"E`*0`HP"B`*$`H`"?`)X`G0"=`)P`FP": +M`)D`F`"7`)8`E0"5`)0`DP"2`)$`D`"0`(\`C@"-`(P`BP"+`(H`B0"(`(@` +MAP"&`(4`A`"$`(,`@@"!`($`@`!_`'X`?@!]`'P`?`![`'H`>0!Y`'@`=P!W +M`'8`=0!U`'0`'AX>'AX>'AX>'@`9'!X> +M'AX>'AX>'AX>`!X>'AX>'AX>'@`>'AX>'AX>'AX``08"!`("```$!`8$"`,` +M````&1X>'AX>'A@9'AX>'AX>&!@>'AX>'AX>'@`5'AX8%1X>&!@>'AX#"``` +M```&````````````_P4````````8&!@8&!T!!@8&!@`&```>`!X`'@`8``8& +M!@$!`0']!@8````````&`0$``!X```````````````$````````````````` +M%1@8&!@8&!@8&!48&````````````````````/[^_O[^`!06&!@4$A`8&``` +M`````````````````````````````````!48&!@8&!@4%1@8&!@8&!02&!@8 +M&!@8&!@```````$````!````$1@8%!$8&!04&!@8``````#[%!04%!08&!@8 +M&!@8&!@8&!@8&``8&!@8&!@8&!@8&!@8`!@8&!@8&!@8&``8&!@8&!@8&!@` +M&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&``8&!@8&!@8&!@8&!@8&!@8&!@! +M`0$!`0$````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````5E0``'L`````````6E0``#L`````````6E0` +M`'L`````````"B```#L`````````6E0``$,`````````"@````$````P,``` +M``````````````````````$````_````````````````````!P````````(" +M`````````````````0`"`@`!```"`@$``0(``@(``````0`!``("`0`````` +M```!`````````@(```$```$```$``````@`"`@`````"```````"`````0`` +M```````````"```!``(`!````````````````@`"``````````````````(` +M`@`!``````(````````````"``$"``("`@````````(``@```0`````````` +M``````````$```$````"``$"```````````#`@```````````@`````"`@`` +M``````````````````````$``@(```````````````````(``@$````````` +M```"``````(``@(``@````````(``````````````@("``````(``@("`@`! +M```"``````$"``("`@`"`0(````"`````@`!```"```"`0````````````(` +M```````````````"``````````````````$````!`@$"```"`@```````0`" +M```!``$``@```````````````````````````````````````@`````````` +M``(````"``0``@````(````"`````@`"``("`````````````@`````"```` +M``(```````4````"``$```$```$"```````````````````````!```````! +M``(````!``(``0`````"```````````````````````````````````````` +M`0`````````````````````````````````````````````````````````` +M```````````"`````````@````````````````````````````(``````"DI +M_____P`````````````````````````````````````````````````````` +M````'@$``"P+```````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````!`@,$!08'"`D*"PP-#@\0*BHK +M+"TN+TI+3$U.3U!K;&UN<'&+C(V.CY&LK:ZOL+',S,S-SL_0T=+3T]/3T]/3 +MT]/3T]/3T]/3TP!!```````````!`@,$!08'"`D*"PP-#@\0*BHK+"TN+TI+ +M3$U.3U!J:VUN;W"*BXR-CH^JJZRMKJ_*R\S-SL_0T-#0T-#0T-#0T-#0T-#0 +MT-#0T``^`0(#!`0%!@<("0H+#`T.*BLL+2XO2DM,34Y/4&IJ:VQM;F^*BXR- +MCH^0JJNLK:ZOL+#*RLO,S<[/T-'2T]35UM?8V=K:VMK:VMK:VMK:VMK:V@!# +M`@(#!`4&!@<("0H+#`T.*BLL+2XO2DM,34Y/4%!J:VQM;F^*BXR-CH^0JJNL +MK:ZOL+#*RLO,S<[/T-'2T]35UM?7U]?7U]?7U]?7U]?7U]?7UP!``@,#!`4& +M!P@)"@L,#0XJ*RPM+B]*2TQ-3D]/4&IK;&UN;XJ+C(V.CY"JJZRMKJ^PL,K* +MR\S-SL_0T=+3U-34U-34U-34U-34U-34U-34U-34U``\```````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````/]__W__?_]__W\`````````````````````_W__?_]__W__ +M?_]__W__?_]__W\`````````````````````JJH``/\```#_````_P```/\` +M``#_````_P```/\```#_````_P```/\```#_````_P```/\```#_````_P`` +M`/\```#_````_P```/\```#_````_P```/\```#_````_P```/\```#_```` +M_P```/\```#_````_P```````0````$````!`````0````$````!`````0`` +M``$````!`````0````$````!`````0````$````!`````0````$````!```` +M`0````$````!`````0````$````!`````0````$````!`````0````$````! +M```````````````````````````````````````````````````````````` +M````````````````````````````````?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_````````````````O@```+X````!``````````$```!?```` +M7P````(``````````@```"\````O`````P`````````#````&````!@````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````*````````````````````_P#_``````````````````````#_`/\` +M`````#0```````````````````#_`/\``````````````````````/\`_P`` +M````<````````````````````/\`_P``````````````````````_P#_```` +M``"9````````````````````_P#_``````````````````````#_`/\````` +M``````````````````$````!``````````$````!``````````$````!```` +M`````````````````0````$``````````0````$``````````0````$````` +M````````````````#___$"<``(P*```````````````````````````````` +M```,`P@`````````````````I@`````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````````$````````````````` +M```````````````````````````````````!#!ZV#C("$1ZY#C(#%AZ[#C($ +M&QZ^#C(%(![`#C(&)1[##C('*A[%#C((+Q[(#C()-![*#C(*.1[-#C(+/A[/ +M#C(,0Q[2#C(-2![4#C(.31[7#C(B4$`9(``D8$`>(#8F<$`C(#(H`$$H(#8J +M$$$M(#4L($$R(#8N,$$W(#$P0$$\(#8R4$%!(``T8$%&(#8V<$%+(#$X`$)0 +M(#8Z$$)5(#4\($):(#4^,$)?(#%`0$)D(#5D8$2^(C1F<$3#(C!H`$7((C1J +M$$7-(C1L($72(C1N,$77(C!P0$7<(C1R4$7A(@!T8$7F(C1V<$7K(C!X`$;P +M(C1Z$$;U(C1\($;Z(C1^,$;_(C"`0$8$(C2"4$8)(@"$8$8.(C2&<$83(C"( +M`$<8(C.*$$<=(C.,($$<^ +M(B^9"$A#)#.;&$A()#*=*$A-)#.?.$A2)"^A2$A7)#*E:$AA)#(````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````````````````````\`#P`/ +M``\`#P`/``\`#P`````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````!``$``````,``D`#0```````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````#_____```````````````` +M```````````````````````````````````````````````````````````` +M````````````````X````(``````````````````````````````@/0``(!+ +M````0```````````````````````````````Y````%P```!````````````` +M`````````````````(````````````````````"`````@("`@("`@("`@("` +M@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("` +M@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("` +M@("`@("`@("`@("`@("`@("`@("`@("`@(```@`````````````````````` +M`````````(```````/\```````````(````````````````````````````` +M``"```````#_```````````"````````````````````````````````@``` +M````_P```````````@```````````````````````````````(```````/\` +M``````````(```````````````````````````````"```````#_```````` +M```"````````````````````````````````@```````_P```````````@`` +M`````````````````````````````(```````/\```````````(````````` +M``````````````````````"```````#_```````````"```````````````` +M````````````````@```````_P```````````@`````````````````````` +M`````````(```````/\```````````(````````````````````````````` +M``"```````#_```````````"````````````````````````````````@``` +M````_P```````````@```````````````````````````````(```````/\` +M``````````(```````````````````````````````"```````#_```````` +M```"````````````````````````````````@```````_P```````````@`` +M`````````````````````````````(```````/\``````````````````($` +M````````@@````````"#`````````(0`````````A0````````"&```````` +M`(<`````````B`````````")`````````(H`````````BP````````",```` +M`````(T`````````C@````````"/`````````,`!```````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````````("(``/`A +M``!T(@``""(``'@B``#H(0``)"(``/\```#_````_P```/\```#_````_P`` +M`/\```#_````_P```/\```#_````_P```/\```#_````_P```/\```#_```` +M_P```/\```#_````_P```/\```#_````_P```/\```#_````_P```/\```#_ +M````_P```/\````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````8(*``'""@`"@@H``L(*``.""@`"`@H``D(*`` +M,""@`#0@H``\(*``0"&@`$0AH`!H(:``;"&@`'@AH`!((:``3"&@`'`AH`!T +M(:``?"&@`````````````````!0W`0`%```"!````/S2@``````````````` +M```$(```!0```@0```#\TH``````````````````=,4```4```($````_-*` +M`````````````````$#&```%```"!````/S2@`````````````````!4)``` +M`@````0```#\TH````````````#\TH``_-*``+0@H`!L(*```#```/^/__\` +M`````````!S3@``B%I +M(6DA5R%7(48A1B$U(0``)"$``"(``````"0`T0^$?B8`R0]&?B@`P0\(?BH` +MN0_*?2P`L@^,?2X`J@]/?3``H@\2?3(``````#0`DP^8?#8`BP];?#@`A`\? +M?#H`?`_C>SP`=0^G>SX`;0]L>T``9@\P>V0`Y0XH=V8`W@[Q=F@`UPZZ=FH` +MT`Z#=FP`R0Y,=FX``````'``O`[?=7(`M0ZI=70`K@YS=78`J`X]=7@`H0X' +M=7H`F@[2='P`E`Z=='X`C0YH=(``A@XS=((``````(0`>0[*[[ZMWN^^K=[OOJW>```````` +M``!4?@``9`,$`""```````````````$`````````!``````````````````` +M`&@T@```````$#`$`#0R!`!(,@0`J#($`+`R!`#0,@0`%#,$`"PS!`"@=0`` +M('0``"AU``!H=0``J'0```AU``!$=0``Z'4``)1W``"8=P``I'<``*QW``"< +M=P``H'<``*AW``#P=```U'0``!1T```!``````````4````````````````` +M````````^`J``/@*@``D"X``^`J``/@*@````````````#$T.C0P.C`Q```` +M`,D`````````!0(-``@$.A0Z```Z)#H`$`P0.CH<&#H@/#@T,"PH)"`<&!00 +M#`@$``0%!00"`@``'049`!,````##2Z`@#9`@("`@(!P@%9>`%)Y:$J`@("` +M@$!*&X!V=F4````$!@`&!`8&!@8&!@8&!@8&!@8"!@0`````"P<#`#LW,R\K +M)R,?&Q<3#PL'`P`[-S,O*R!2,%*`4M!3(%'P5D!6D%;@5S!7@%?05"!8<%C`61!9=%G$6A1:9%JT6 +MP18``/\``0(#!`4&!P@)"@L,#?___________________________P[___\/ +M____$/___Q'___\2____$____Q3___\5____________________________ +M__________________\6____%____QC___\9____&O___QO___\<____'?__ +M_Q[___\?____(/___R'_____(O___R/___\D____)?___R8````````````` +M````````````````;"0$``````!L)`0````````````"````!`````(````$ +M````!@````8``````0(#!`4&"`H+#`T.#Q`1$A,4%187&!D:&QP='A]65ZJJ +MJJJJJJJJJJJJ[JJJJJHH_P#,JJH``*JJ`,RJJ@```$``P`!``,``4`#P`%`` +M\``````````````````````````````````````````````````````````` +M`````*JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ```````````` +M``````````!L;6YO<'%R0`R`'D`#`! +MY`"8`.0`F`#<`MP";@'<`FX!Z`%N`?0`;@'T`+(%L@79`K(%V0+,`]D"Y@'9 +M`N8!1`%$`>8!1`'F`;`!Y@$<`N8!'`*(`H@"S`.(`LP#8`/,`S@$S`,X!,P# +MS`.R!.$````````````````` +M`````````````````+P7!`"<-P``O!<$`+P7!`"\%P0`;!\$`+P7!`!L'P0` +M`````#P9!````````````````````````````#0;!```````-!L$```````` +M````X!<$`+`W``#@%P0`X!<$```````@'@0`X!<$`"`>!```````X!<$```` +M````````````````````````M!H$``````"T&@0````````````````````` +M``````!\X0```````&`V@OH3V:'Q8IM)?0'CB.XS@PG'<1P'`0$!`0$!`0%!P0$!`0$!`0$!0<$!`0$!`0$! +M`4%!`0$!`0$!`0%!P0$!`0$!`0$!04$!`0$!`0$!`4%!`0$!`0$!`0%!00$! +M`0$!`0$!0D)!04%!04%!04%!04%!04%!04)"0D%!04%!0L)"0D-!04%!0D)" +M0T-#04%!04%!04)"0D%!04%"0D)#0T-!04%"0D-#1$3$04%"0D-$1,1&1@$" +M`P29F0,`G=B)G4[LQ$XT2(,T)W9B)QJD01H3.[$3$1B!$0_\P`\-TB`-"[W0 +M"QH`-`!.`&@`G`#0`.H`!`$X`5L!-@!L`*(`V`!$`;`!Y@$<`H@"T`)U`.H` +M7P'4`;X"J`,=!)($?`48!NH`U`&^`J@#?`50!SH()`GX"C`,"0D%!0D)#0T- +M#P4'"0L!`R@`*``T`#``+``L`$0`/`!5554!2V@O`555507C.(X#JJJJ`G$< +MQP&JJJH*QW$#P4`!0H*"@H* +M"@``"@H*"@H`"@\/"@H*"@`````````````````>"@4`"@`````%!0`````` +M`/;V^P````#V]A04%!0*"@H*\>SL[.P*"@````4`^^+8]O;V```````````` +M`````!04%!0C(R,`\>SGY^'AX>'@``]O;LXN(H'A0```#V +M\>SBXN+B```````````````````````````````````>%`\`!0H````````` +M"@H*"@#V`/OV^_OV]@`````````````````H'A0*"@H*```````````````` +M^_O[\>SL[!04"@`````````````\*!0*```````````````````````````` +M`!04"@`````````````\*!X```#V]O;V]O;V`````````````````!04%!04 +M%!04"@H*"@HH'A04`````````````````````````````!X>&104%!04%!0* +M"@HH*"@H*"@H'AX4%!04`````````````````!X>%!04%!04%!0*"@H\*!X4 +M%!04%!0*"@H*``````````````````\/"@H*```````````\,AX4"@`````` +M`````````````````````(P``0``````C``!``````",``$``````(P``0`` +M````C``!`!$```",``$`$P```(P``0``````C``!``````#D^0``%````(#[ +M```<````P`$!`!````!P`@$`$````"3_```*````)/X```H`````_P``$``` +M``#_```0``````````$```#_````P0```,$```!!`````````$$````1```` +M```````($``5&`L+"P\#"P`````````````````````<&P``+!L````````` +M````J!H``*0:``#L&@```````.P:``!,&@``3!H``````````0($!`8&"`@` +M```1````````````````````9````!````#_``P@"````!(````````````` +M```````L`0``$````/\`#"`"````$P```````````````````"P!```0```` +M_P`,(`<````4`````````$`&`````````0```!`````!``Q`!````!4````` +M````0`8````````!````$`````$`#$`#````%@````````!`!@````````$` +M```0`````0`,0`,````7`````````````````````0```!````#_``0`!``` +M`!@`````````0`8````````R````,@````$!S$`#````&0`````````````` +M``````$````!`````0$`@`$````:`````````````````````0````$```#_ +M_P"@!0```!L`````````$``````````!````$`````$"!``&````'``````` +M```$``````````$````!`````0`,``$````=``````````0``````````0`` +M``$````!``P``0```!X`````````!``````````!`````0````$``(`!```` +M'P````````````````````$````(````_P`,(`8````@```````````````` +M`````0````@```#_``P@`@```"$````````````````````!`````0```/\` +M#*`#````(@````````````````````$````!`````0(,@`$````C```````` +M`````````````0````$```#_``"@!@```"0````````````````````!```` +M`0````$"1``"````)0````````````````````$````0````_P`,(`,````F +M`````````-@``````````0```&0````!``@``@```"<`````````+`$````` +M```!`````0````$`#$`$````*``````````L`0````````$````!````_P`, +M0`0````I`````````"P!`````````0````$````!``Q`!````"H````````` +M+`$````````!`````0````$`#$`#````*P`````````L`0````````$````! +M`````0`,0`4````L``````````(``````````0````$````!``0`!0```"T` +M````````!``````````!`````0````$`#$`!````+@`````````L`0`````` +M``$```!I`````0`,0`,````O``````````````````````(``!(```#_``Q@ +M`@```#``````````,@````````!D````$````/\`#&`&````,0`````````L +M`0````````$```!N`````0`,0`0````$#`P(%!0$!$````"```````$````" +M````!````$```$````!``````0`!`!P```#_____!`$``!@```#^__]_!`(! +M`1@```#_____`0$!`1@```#_____`P```!P```#\_U+5`@```!P```#\_Z?J +M!0(``1@```#\_U+5`@$``1@```#\_Z?J`P$``1@```#\_U+5!0$``!@```#\ +M_ZEJ`$```!<```"X3```%````*Q.```5``````````$```#0Q@```````"1S +M```#````_$X```0```!`<@``!@```"1+```%````#%<```<```"T<```"``` +M`&AE```)````X&8```H````\6P``"P```"A<```3`````$T```````!T`3<,-TQ\.!X!-PLW2_PX'@$W"C=+?#@>`3<)-TK +M\.!X!-P@W2GPX'@$W!S=)_#@>`3<&-TE\.!X!-P4W2/PX'@$W!#=(?#@>`3< +M#-T?\.!X!-P(W1SPX'@$W`3=&?`T%!HP,!09,"P4&#`H%!`HB0(``V<8``0!F`"0` +M+R8`\%8`!0`G"#4(2B9```AQ`-A0<>`@Q0=">0'@4''@(,4'0GGO!^__`>`O +M+0$`0"5%``(F?/$``"```"A``>@@(@,O(`"`+R%+`%!QP""&`<(AA@#@?A,` +M(`!*(``02B!`$`XB0@`O(`L2SB!%@(HE_P\*``4`+RT!`$`E10`")GSQ```@ +M```H0`%*)D``Z"`B`R\@`(`O(4L`4''`((8!PB&&`$HF``!,(,"0SB""`40@ +M?I#.(8(!X'X!!\__X'@S`"``2B0```7-(=`AR*',*)<""2B(`$!H` +M!`#`(B$8RB4!@R\O00'`(F,0P"+#$4HG```*)<"`P"'@LHG)`!`)T<`"B7``4PG`(@`V1``)```V$AQ:'(`VT(G +M!X@*)$!Q*``!`$XG"HA^``$``"F``@$IP0$`*H4"H'$!*L(!`"N%`@$KPP&@ +M%,B0H'@?$XB`X@6``P``"G,``$I@0`!*(``X'^% +M>$XC`P`!*<``X'\B>>!XX'C@>`HD@/`%($0`X"#!!T0D_H!!*L0`A``"`"\D +M`O%"(0$!0B`#`>@@H@0$$00"!!$%`@01!@($$0<"!!L(`00;2`$$&X@!!!O( +M`2P`)0!$(CZ!/``B`$0B_(!`(<$`X"#!!T`CPP"H((`!`1&$`@$;"@$@(,`' +M!!$$`@01!0($&P@!U`?A_P0;2`%$(OR`!!$$`LD'[_\$&P@!0B%!`$(@0P"H +M((`!`1&$`@$;"@$@(,`'X<4(=1'PX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!X +MX'C@>.!XX'B`Y6&][_7@>.!XX'C@>.!_P<7AQ:"`88"`@0&!`"1,DP$@P`"` +MH@&BX'_!Q>!X8(!`@0&`4',A@'& +MX!XX'\`@/'`X<4H=$AU +M0(!A@"&!\@SO_P"$`*4)`N__(:5`@$XB`X`A@`#:`R)"`&"@X']!H&"`@($! +M@`(C`X,A@6"B`R!``.!_`:+@>,H)X!\`V>!^*'+!`>`?`=DH=$AS`MFU`>`? +MB7+QP.'%*'5(=)AS`]FIK>`GRSW```$4PJ@_O_P`0`2`KAPJ'!7T3"4X@ +MSW```$8PD@_O_P`0`2`KAP\A42`!YKT.%)$I`<__X'C/<8``-!R%Z`#8"*$9 +M\,]P@``4&I:`58!Q@(7L"PK%``GP#0N%``/8"*$+\!"`#0H%``+8"*$%\`B! +M^PB4@,]R@`"8UR""#0A```"B`=@#\`#8X'[/0+9"/+A$H$``X(0<0'9RB$N`.!_*'#CR8BX +MX'_C&ABPX'CQP'X*P`82"$`$2@R``0#8'@G@!@'9R@N``='`X'[@>/'`&@K` +M!@'8!@G@!@AQ,@R``='`X'[@>.T$@`%A!8`!\<#/<(``%!J:#*`!2!"```'9 +MSW"@```?/:#1P.!^X'CQP*(/S_\N#````-G/<*```!\]H-'`X'[QP+H/C__/ +M<(``%!H2@(/@`=C`>%(@#0"`X`'80"V.$^X/8`7`>`%M8@B@!0#9[KX!V,(@ +M`0`$N$\@P0#/<(``T,<"B(+@`=C`>`>X)7@0N(4@D@#/<:```"@!H=X+[_\! +MV,4'C__@>/'`<@N``<]Q``"4XL]P@`"$&09``#@$8``&0T!$!L-T1#B$8``$';8"J(!RB""`P7P +M=@G@!JEP.0>/_^!XSW"``#0<"("#X`'8P'BI`D`'X'CQP*X.K_\`V,]V@``4 +M&C>&529/%X#ASW6``)09RB!A``3R@>'*(*$`$@[/_T`5`18P<,H@(0`0\C>& +M0!T8$#5_`*<$N!1X0"4!'!EA-@]@!038`=C!!H__X<7/<(``-!P#@,]R@``8 +M"<]Q@`!,V&""XKC1(&*!&?+AN-$@(8#!*"$"TR!A`,P@H8`/]*+K`=@`H@#; +MSW*``)09:**#&M@`A!K8`!7P+0M1``#8`*+/<(``E!D@&(`/`/``\(,8F`__ +M_P``A!B8#___```!V`"A`($2Z,]P@`"4&:B`B8!J@$N`SW"@`(`?K*"15YQW&``%"3,]RIP``2!6B-A$`@7(1`8'(N`FY!"&!#P,``/XE>`RB'@]@ +M!$*`4*`"&-?X``F+K/<*```"!L$!`` +MA"\&%,]Q@`"$)S(A3@[/<8``;"8P(4`.)N@V;L]P@`!LP"!@H.B."F`@Z7"< +MZ-`5`!`"(``$+0A3`$,5`!8`VPOH0QW8$.EP!=D*N1H/X"`$V@CPSW$``-!V +MR7#J#"`A"-H)!8__X<4IVQ*[%7L`W`CP\"$``Q4C#0,`I0'D]0R$D.!_P<7Q +MP(8,K_^8<`#=#_"X911X="`/`2G>$KYBD$&0$+ME>O5^0*8!Y>D-1)#%!(__ +MX'CQP.'%"'52#F`&*'`"?<$$K_^O>/'`0@RO_P#:SW&A```&[[XD\`,4C#"1<2.H$02O_Z+` +MX'C@?N!X\.!XX'C@>`'G +MZP]$DZT#C_\,<1$A`(#*(($/``#_``[RSW&@```$#Z$#@2RXQ+C/<8``B-#P +M(0``X'[@>/'`&@N/_PAU*';/<(``L-H@@$$.$!%*#&`!R7!N#6`&#WC/<8$` +MD`PA@24(40"$+@84SW"``"PF,"!`#H#@SR%A`,\AX0#/(6$"!/)%(4$#`-L* +M\!9M=7@`(((/@0!@#B"B`>/Q"Q2$`-O/<8$`X`T6(4(#8*IAJ@'8`JH#V`.J +M:'(&\#ABMGADJ`'B^0H4@?4"C__QP((*C_\(=L(+8`$H<`AUN@M@`,F(T@@@"JEPSW>``-3>"&\F>E&M%_!%>3&M)8A^9B"N18@FB'1\66$@M""`C"$0@$3W +MBB$0`""@([D@I0"`*K@!I0#8SW&@```W"*$.C0&A!)4"H0^-`Z$%E02A$(T% +MH0:5!J$`A0>A`84)H1&-`*&Q`8__\(HB +M_P\`W`/P`>0;#!41,FPT><=Q@``@&&J!\0L.@`F!`O!(<.!^X'@`V0\('P`O +M*@$`3B*!!P#:SW.!`+`,%2-,`!`@0(!`I"6C!_(O*`$`3B""!P+P*')&HP#8 +M"/`/"0```=H5(PP`0*0!X/,(5('@?N!XX<7AQF*(@8B">V][IN/*)"L0A_8+ +M"S,.$=Q"(XP)`=[/=8``H#/%I<.(P;X)YFQ^8(@"B"=S`GMKI?0A``-L>,]Q +M@`"0F"]P"0I1`#^9`_`^F0QY+W`L'4`>P<;@?\'%#0A1`,]P@``4-`7PSW"` +M`*`SX'[QP.'%/@@@``#8SW6``)"8'K4R""```=A-`*__'[7@>/'`X<6&""`` +M`-C/=8``T)@`M7H((``!V"T`K_\!M>!X\<#AQ0HE`)`$V,H@8@$F"``&%>B& +M[:(,X`4&V`"8`_`0F!,(@@\``/P(&0X#<```N`O/<```C`H$\,]P``","N4' +M3_\/"0,`%PH#`!4*0P`#\`L*0@`H<@3P"0H#``AR0GC@?PYXX'CQP.'%"B4` +MD`78!_1"#,`%"'(`VP7PM@_`!2C;"'(`V`_J>6(`B2&)>F)"BH?MSW.``,`S +M&*LYJUJKI@_/_X$'3__@>/'`SW"``-PSD@X`"0+8S@P@"0#9T<#@?O'`SW&` +M`%![`8$W"%X``($;")X``=BN#"`)`-G/<8``,+H:B0'@&JD%\`#8E@P@"0AQ +MSW&``#"Z&8D!X!FIT<#@?N!XO0?/__'`"@V`!`^?,"\`#;:'#@?\'%X'CA +MQ4`I#`(E?$`L`Q2%>R<*-`((=`3P`1Q2$&&Z4R1^D/OU02J-`,&Z@"7_GP0< +MT!#\]0?J@"+_CP$<4A#\]>!_P<7@>/'`X<6AP8#@RB"!#P``RA2`!('_`-K/ +M<8``O@A`L<]S@`#`"`"C%/"`B*&(#+P$O:5\1+G#N25\0,3/<8``N`@@@0CA +M`,15>0'B@*'!XE#W(HC9"AZ`@X@0N0B\A7F$B`7@A7G3N4#!`*/I\?D%;_^A +MP.!XSW"``+@(X'\`@.!X\<#AQ0AUSW"``+P(0*C/<(``O0A@J"AP(@@@`&AQ +MV@_/_PAQJ7!Z#.`(!]I6#^__!VVU!4__X'CQP#H-3_\H=MH*X`%(=80N"!:` +M(`8.SW*``+@(+W&$+003)W$X8($%;_\`HO'`#@U/_PAU`-X1"-$`&@I`!H#@ +MRB9B$.X,8`:I<([NI@A@!JEPY@M`"+H)H"*I0;#!41,FPT><=Q +M@``@&&N!\0C!@`F!`O!(<.!^X'CQP"(.(`:BP<]Q@`#0F$#``YE!P`*9!+&+ +M<`C9D@R@"(HBTP^BP-'`X'[@>,]QH```,"2!X'\D>,]RH```,"2"!GDDHN!^ +MX'CQP-X+3_\(=L]UH```,`J%`=\$((`/``(``-=P``(```'8P'B`X%X)(`#` +M?T$5`98:<`#8BNF3%0&6!"&!#P````^,(1"`!/0(=0/P`=T$(9%/``0``,]P +M```('&(*0`0$((`/`(```$(@`(#*(&(`@.`!V\![!""`3P(```#7<`(````! +MVL!Z+R`'"(#@`=G`>>6^RB#"`\H@80`?Z.:^RB`"!,H@80`9Z..^RB!"!,H@ +M80`3Z.2^RB#"`,H@80`-Z.*^RB!"`\H@80`'Z.&^RB""`,H@80"#Z`#<"/#@ +MOLH@0@#*(&$`>>@!W%L,4!"`YP'>P'Y,(`"@`=C`>!MX!7Y,(0"@`=C`>`*X +M!7Z`XP'8P'@#N`4@@P.`Y0'8P'@$N`5[@.(!V,!X!;@%(,(`@.$!V,!X!K@% +M>@#(`1J8,`'@`!H8,/D";_^)<,]P@0"$#"&`SW"@```P!(`+Z00@@`\(```` +MUW`(`````=C`>`;PAB!_#X+@`=C`>.!^X'CQP.'%8@[O_PC8`-V(Z#()8`0D +MV/*XRB!!`P/R`=C!`D__X'C/<:```#`#@92X`Z'@?N!XX'[@>,]QH```,`.! +MB+@#H>!^X'CQP.'%@@_O_P'=@.#*($(#(_3/<:```"P%@:"X!:$`V)8*H`6, +MN`[P;'`E"!\`SW"@```P!X`A"%\&+R8'^`ST^@WO_UO8$$H@@`$\``6`4!ANOWJP;@$\``6@4!AN/WHX'X`VL]Q@0"0 +M#$"A`]@#J4&I0JD$&8`/````0`@9@`\```#`X']`J>!X\!^X'CQP+H(3__/=8``P!``A:#H+@]`!@/9SW"@```H(:!%@"&@)8`! +MVC!\0]MAH,6`8:!E@!YLP;@'K1QLP;@&K1ILP;@%K<&Y)*UHK4"EV0!/__'` +M9@A/_Z'!"'*1X`!Q$ +M,!$-`!"`)O^?U@?/_P#8`_`!V(T`;_^AP/'`X<7/=8``E!4`A8?H7@_/_VH. +MS_\!V`"E?0!/_^!X\<#AQ0AUSW*``-#'`8I$*#X+`"&`?X``(,<@@!<)7@`* +MB`*JL@P@`0'8P@P@":EP!/"F#"`!`=@]`$__X<5!@&:@X<(`W"##-PI>`L]T +M@`"(+;6$"+G/=(``9`B#C&1]I'P)O(5Y)7LLN@0B@@\````P97HC@$*@GKDC +MH"7P$PH>`D$JP0#!N0'A`=P*\!,*G@8\:\&Y`>$"W,.[`O`!V0*\%+L$(X,/ +M\`,``&&YA7EE>8>Y!"*"#_\#`-PFND5Y4B'!`R*@H<#@?\'%X'[@>/'`X<46 +M"B`&"'4M"%$`SW"``&ST!6'_SR`A`\]QJ@``4('@`=C*("X` +M"*%Q!P__+R@!`$X@@0?/<($`L`S@?R>@X'BAP4#`SW"``(@M.(#/``^"E;@/H@'8()(/"9X#`=K/ +M<8$`\`=)H>!^SW&``(@M/('LN3.CX'[AQ>'&SW6``*0'D(5`%8`0!"2"'P```!@K +MNE,DP1!$N%,@0P`2:A5X-'C/=H``G.,69L]P@`!LXVA@^[S,>)@5`!`$*'X. +M+W#"("($$/0#NGMC57IU>WIB66'/1#A(G@CN,'&X'_! +MQ?'`1@P`",8*``AB#D`%T<#@?N!X\"SN+6XN+C>&ABP!*'/<($`8!/$&ABPSW"``"C5Q1H8L)+-00@>`,]UH``` +M(#Z%SW"``(@M%H`"X6&X""$``!"E`=@''1B0$-@`I9H.H"$`WI+-)+@$()!/ +M,````%,@#P#H\-8,8`<`W<]P@`"$S@*`C"`"C8GWV@S@`!38SW"@```0J:"2 +MS<]UH```("L(WP-*(``@"G<*=LSPM@S@`!38`-G/<*```!`IH,]UH```(`'> +MOO`$V,D:&+`1A8#@BB`,`,H@@@\````"`*4$'9B?8````#X)P`/:R00@OH\` +M``\X!?(`V078%;@KH%T"```0A0QPDA(!MT,(7@7)R88@\8\;]`0AOH\```!0 +M!?($V)(:'+`F#$`'SW"``(3.`H!]"(6/``"T`-K)#0C>`@#9!=@5N"N@`=Z2 +M$@*W10H?`64*GP%$(CZ*7?)L<%\('@`,<%<(7P62S<]S@`"$S,]Q@`"$S74( +MW@"`V)(:'+"3S4,(W@(;@0'@&Z$`WA[PD\W/=:```"!3('Z`"O+%R<02`;;$ +M&ABP3@V@(<4:6+`!WTCP0@V@(0'?SW6@```@0/`3@0'@$Z%Q$P(&SW"```3. +M57A:@`'B6J`-"!`@&H$!X!JA@-H7\(HB!``2@9(:G+`!X!*A<1,#!L]P@``$ +MSG5X>H`!XWJ@"P@0(!F!`>`9H>>ZI/3HNM;TZ;KP]`0BOH\```!0"/)L<`T( +M'@`$V,D:&+"3S>^XSW6@```@YO3)R00@OH\#@.A37?4,CN#D`!,@U`"!J%"2<`$.3@ +MQO;0I=8-("(0V.3GR/?(%0$0,'GF"V`%$-@>R,]QH```+0*X`""##Z```"U8 +M@\L2#+8LO,2\(8$="@$#,""`#Z``9"X0(0$#*W@#\@/8&*,8@XHG"!`1\"\J +M00!.(H`'$"$!`""CA"@&!,]Q@`"$)\8.H`(R(4$.SW.``&C$((/MZ=JEX*41 +MA87HBB`$``"E!!V8GR``/P`''9B?`0#`_'8(``G/<8``="4`@0/HP*':R00@ +MOH\```\X!/(%V!6XRZ!B"^`#`=C_V<]P@`#\U""@40(/_Y/-!""`#P```!@[ +M"($/````"%8/X`/)<,]UH```(!$('@#)&IB_``@(`%[Q!-C)&ABP'L@"V@`@ +M@0^``'C&0*E2\7X*@`/$R:`0``#PN`#8!?)>"L`#`-B6N)X/0`D$V/\%[__) +M&ABP]@D@!HH@!`!."J`#`-W$R:`0``#PN*EP!?(N"L`#`-B5N&X/0`D$V,D: +M&+`)V,]UH```(!&E)/$."N`#`=@`V)"XV?'(%0(0SW&``"0(/Y$P*'!\<`2"0__H<$(=XX)H`4!V`HF +M`)#/=8``4'L/\D`E`1(F"*`(`MH";HMQ&@B@"`+:%9;#N`JM"/``V`2U"ZT` +M'(0_``#__P#9*'`2\$`@`@0`VP\C@P``%`(Q0"`,`A$B`(/+(\*#Q2'"``'@ +M#WC?"!*"`X4$>0#8(Z7RN=$AH84-]`0AOH\/````!_($(;Z/\````,H@8@"` +MYLHF(1`0\@0AOH\/````0I8`W@KT!"&^C_`````$].6ZRB9B$(#FS"`A@`KT +M`!0",<]P```B"08/+__I#B__R7&,)L.?!_0$A?A@`!@"!!'PC":#GP?T!87X8``8`@0)\"85@!#L +M>`.%)W;88``8`@0=``__X'B$Z0#8`*(/\(PA!(`%]`'8`*("V`?PC"$"@`;T +M`M@`H@'8`*/@?N!X\<#/@^@"$APT<#@ +M?N!X\<#/<8``?`\`@8#@]`ZB",H@0@``V<]P@`!L)2"@T<#@?N!X70>@`!+8 +MX'C/@"$APX'C/@ +M"$APX'AU!0`%\#J``$M@:#``%SW"``%![`(#BN(@,`@7/<*```"`[@,]S +M@`"@,T*##0F$`!N`0G@(\#N`#B*`#_____\X8/X,(`4#HRX,P`71P.!^X'BI +M!``%SW```,LH704O_X/9A"@&!,]R@``4)C`B0`X`VP\C`P`"N,]RH```(!5X +M9:+'<(``&-)"@$""0*$#@`"`X'\!H?'`((!&@(#ARB""#P``-A$(!0+_@((# +M\("$$0R`$&*`(H1B>?4)4H`AA`&D@*`AH`"A9(`F@!CA%0M>`&"!!^N"@&*# +M@GL)"U(``*$D@&:`'.,7"=X`((,&Z8*`(H&">0<)4@``HR&`"PI!`%(+H`@& +M@-'`X'[@>/'`^@W/_O8)8`$(=PH@@"^@``!(`_`Z#P`$SW6@``!%'H4$(+Z/ +M<````/?UBB#_#QRE&*7/=J```"`%'IB?`0``@`*'SW&``,36"*4$AVP1@@`% +MI0.'1"H^!Q#A!""`#P`"```Z#>``,R%!#@.'SW&``'0(!*7(%@`0"8=%@0>E +M!X>!X@:E`-C*(.$`!/*"XLH@(0$0N`4@@`\```8.`Z'/<(``."3P((``!*%Q +M$`"FK07O_@:AX'CQP$H-[_X`V0AV_!Q*L`*0BW4B""``J7(#EH#@RB%B`!`( +M(@#*(D(#(,"-!>_^H<#QP`X-S_ZAP0AW.G$:<@#>R74*\(MPC@D@"0'9(,`! +MY0=^SW[Q#<23!^X`$($@#R%!!``80B`Y!>_^H<#QP-X,[_X`VL]P@`#\V0"` +MSW&```C5X<`/\,]SH```#*BK`]@'HP"!`>)AN`"A`AR$'P```(!@@2OK`8%3 +M"@4`9)$"W4`CP`($((`/``#\_\]TH```$#`<&)#/=(``!-7`A`#8`!^`0P`? +M0D,`'\1``12#,``?PD!DD6&[<'N?"..`JXD`'T)#`>`0>/;Q#^O/<*```"!; +M@`J)&&`5>%E@SW"``-C2.@R`"*$$[_ZAP/'`*@S/_L]R@`#XVT""`]WAP@$< +M0C#/=Z```!`P'YB?`*`(`-@2`;9@P``?0$``P`+9`=Z>"V`#R7(P'YB?`*`( +M```?@$\`@````A^8DPAR\G/<:``@"P0H0#8":8Q`^_^L,#@ +M>/'`T@K/_@AV.G$:`*X,""`#Z``9"X>$@XVJ@[@"*EP(@S@!ZEP&G``W\]P```0 +M)QH+(`4/)T\3`-T%\)8*X`@!V`'E&0T%%`L@P,,%]&QP^P@>@`L@P,/S]6H. +MX`C)<+$"S_[@>/'`0@K/_AIPQLD`W04@``3&&ABP;@S@!PIP.G`(`1_QLD`W@0G!!`/)LX0 +M$0\`$09_!27-DP3RQ7DO><9ZY.I5A(#AIGH%(@`$%:2\"N((RB!"`"\E1Q0> +M"2`&J7!F#>`(J7`9`L_^\<"V"<_^&G`(=@#=!?#F>,8:&+#F?B/N+RB!`TX@ +M@0<]P@``$T?`@40``WP\G3Q`/"1$@QLGF>,8:&+`N"2`&*'#/<8``!!7P +M(0``"R!`A,;)W?/E>-SQG@O@!PIP&G`(D]Z +M'>HO*($`3B"#!V][]832:QW(,":.'Z``9"[$>,82#K8$?\M_`-@/(,``Z//& +M?P4ES9/F\P5Y+WGB\16$@.&F>!6DZ`GB",H@0@"&#.`(+R!'!$8((`8*<$4! +MS_[AQ0?P!GV@I!`AP0`O>0_I+RQ!$$XD@Q=O>\]T@``$%75\H(1PZ@5][_'@ +M?\'%X'CQP*X(S_XZ<"AU&G(3"E$`KWB6"R`&`=D`&00@&?``WA7PVWA`()(` +M`")`(P]X>@L@!@'9%"&/(P"W`B6`%`]X9@L@!@'9`;<"YML.!)2]`,_^X'CA +MQ07P(*,0($`##N@O*P$`3B.-!\]S@`"(T+5[=.K_W("C\_'@?\'%\<`N",_^ +M6G`:<4AV.G,*(P`A`-\:\!0BS2,@E00A@`,0=LLA0801\IX+H`4O(,<$(H!` +M+@,40)7/<```_!3"#N_^!2-#!`'GSP\$E#D`S_[/<:```"!;@9VXGK@_&1B` +MX'C@>.!XX'C@>.!XX'C@>.!XX'@;@>!^:B!``9BXX']K($`!\<"Z#Z_^F'.* +M)H00%'@(/_O'`>@^/_@AWR@C@`RAV"'60X,H@A@\``'0`SR!F`\HAQ@,, +M#N;^RB*&`[D'K_ZI<(0H!@0`(8)_@`"()GB*ENLA"5$`-8H"N`'A-:HTBD-P +M`>$TJA$0`08!X>!_$1A8`!:*`>#@?Q:JX'[@>/'`#@^/_@AWQ,F@D`&`0.7T +MN,`EHA`#Y<]RH```!"2"!"6-'P``_/\3">4#_64>R!MX0W`^$``'&6$.@@(E +M3A!9"(4#`]AB#^`$"K@%V16Y"X'*&ABP`-@+H<]PH```!`Z`#0B%`VQP\P@> +M@,K)!=D5N0NA;'`E"!X`'L@;>$-P/A`!!P78%;@DH,2@0]B,N.EQ,@WO_JER +MSW"@```$I*#5!H_^$P@>`,]Q@``$S@*!`>#@?P*A%0A>`,]Q@``$S@.!`>#@ +M?P.A(0C>`&QPSW&```3/#0@>`!6!`>#@?Q6A&X$!X.!_&Z$3"-X!SW&```3. +M`($!X.!_`*'@?O'`Z@V/_JS!2B``(,]U@0`P$\O)`!41$`0@@`_Q``#PQ!(" +MMD'`Q!(``(HA!C0$*'X&SW.``!`F,"-##C"*A>/,(^*!'O3/,\@(@,5](0H!0K/`40@ +M`00$\$0@@0`#N4/!SW:@```@.H8#Q&&%#^S`%@`0Q!("M@)[`B'``"\B""!V +M$@,!.V,2\(02$@%"D:Q884/J1X2`C9P>14C@"!>@%EA/J`;AL`6`1!X8")X1\`"A<]QH`"` +M#`*X+^`$(``%$*'8$@&V`!]`0"*%`!]"0!X2`384(T`@,(@`'T)``!_$0\3) +ME!`!```?0$`>R/`G`2``'T1``!_$0P`?P$,`'\!#`!_$0\3),(C/<(``'-8I +M8``?0D``'\)#RQ(!M@`?0$#$R2"05!```1"Y)7@`'P!`Q!("M@&"'P@>`3** +MSW"!`.`-4(I6>`"(AB!_#!QX!+@E>`+P@-@`'P)`Q,DPB#,0@``$N25X`!\" +M0,3)/)``'T1`Q!("MIP2``'FN`#8SR`B`\H@P0,O@L"Y#;DE>,T:&+`>R!0C +M`2``((P/@``XQAM[X+'@K`]]SW2``%36MGR`E)@9Q`,5)Q<@SW``*`@`0,#$ +M$@``J!G$`P0H?@;/<(``@"9@+P`GX`(L`P/A``!_<.!9#/<:```$4<@3B!`-T/"5\%!""^ +MCP`&```-\OJX`=W")4$3^;C*):(0];G*)2(2L@D`"9#M;'#@N,HE(1`*\@'9 +MSW"``"35(*`B#V`(*'`(W<]QH```"`2!_[C,)2&0TO,$[20<`#0S\`#8"1D8 +M@,O)SW*@`(`L#Z+$$@*VQ1(#MAJ22B5`(!JSQ!(``,0;``"D$@``I!L``!"* +M$*LD'``T#_``V`D9&(#+R<]RH`"`+`^B`=A`)54@&W9)P.EVSW"!`#`3`H!K +M#00@PP(```QP-P@?`\]QH```11R!.($`W0\)7P4$(+Z/``8```WR^K@!W<(E +M01/YN,HEHA#UN"``)SW>@```(%H$`J`20%>0+`!2$4`,42`;8$)(`@.!D`!0`1%P%0<]QH```11R!.($`W1$)7P4$(+Z/``8```[R^K@!W<(E +M01/YN,HEHA#UNUL<`T('P``W0WP@-VV\`'9SW"``"35(*`^ +M#6`(*'`(W0/8SW&@```$"J&`Y<]WH```"*+T`=@)H54F0!0$H4QP`0@?`@K` +MSW*@```("J(&P<]S@``VY``9``7%R7(0`0$")T`@!,$I8SA@!*("(T`F$*(# +MV`6B*\`1"!`'/-B,N)8.K_X+P``?`$`+P$`@4"#8&ABPQ1(! +MML3)`=K%&ABP`8'$&EBP]+C"(H$``)%6)@\25'@#X`0@@`\``/S_'V<"\`)_ +M'L@;>$-P/A``!_#PE?!00@OH\`!@`` +M#?+ZN`'>PB:!$_FXRB:B$/6YRB8B$@8.P`B0[FQPX+C*)B$0"O(!V<]P@``D +MU2"@=@M@""AP"-Y*(@`@`]G/=Z````@*'UB0@.;*)8(33";`HP_:RB*%!0RZ +M4R4!$K'-)7H0N$5X`!\`0*ETAB3]GD`@3B`3\E0?0!2QS1"X)7@`'P!`!!^` +M%)X+("`!YL]QH/Y@!078%;@DH,4-$!#/<*#^E`4*((`OH````!`8`""B#Z__ +MJ7`&\`C9`!]`0`'FSW"!`#`3`H#Q#@20SW"!`$`,!)`#V@*X,""!#Z``M"[- +MR25XSW&@```,`J%'H4>GSW&@```$"8$%Z$BA)!F`!`3PK@ZO_PMP"<`;Z"P0 +M`"#*&ABP+!B`),]PH```(#N`!\`P<&\A"P`,<(#AT2!AA?3SRLD%V16Y"Z%* +M(@`@`,#)&ABP",`B#J`$`-GA#5X0SW"@```@:!B`!&KP%0D0(%0?0!3/<8`` +M!,X`@0'@`*'/<($`0`P$D`/=`K@P(($/H`"T+LW))7C/<:````P"H:>A!!^` +M%,H(X"`(P)/-$PA>`,]VH```!`Z&P.`#]P#%//"UI@'8":;*"B`@Q$@(VQ1(!ML]RH```(+`1``%:@F3@IPB%@`/``,6!N!"X!7T`V%8* +MX`>8$0$`^@T@`P#8R1I8LQ[(SW&``"C&%'D`&80$F01O_JS`SW"@`(`@7!B` +M#P,`0`W/<8``&!4`@<]R@`!HT@'@`*$&@@.`(("6(4D,500@"$APSW"``&C2 +MW0,`".!X\``&1@+@!L<]P@`!H)*"@*'!$V7H,H`@>*#9H#J@O:!`&A@#`=@&H@#8!J+!QN!_P<7@>(#@`=K`>@6Z$N+/ +M<:P`@`!.H5BA@.`EVLHB(0P$\H3@RB+F!4^A6:'RVH#@RB*!#P``\P`&\H3@ +MRB*&#P``\0!3H5VAX'[@>.'%SW2``#`5`-D+\!0D0!!@B"O:$KH!B'5Z`*(! +MX?$)E(O@?\'%X'CQP`#9LNC/@"B`>$P>>$)TH``V<]P@``L%2"@T<#@?N!X +M\')`J$2>`:AXLD2>@.A1Z'C +M$@*V7Z%2>E:ASW*``(S((((!X2"BP[EW"5$#*KA3(($!4R"`000@0(`S\B\H +M`0!.((T'0"6`$@#9#R$!``LC0,`G]#)M,"&0#Z``B"#/<*```"#1@,]W@`!X +MQ""'"B*`+X``@,0*(8`O@`!\Q!D-01``$@`@$0@!!``1`"`0=K@/`2&@IP`: +M`"0`&8`C&0)/_N!XJB"!#`GHJR;!<@```0"J(`$"_P@?@N!^X'[@>.!^X'C@ +M?N!XX'[@>.!^X'C@?N!X\<#AQ?(/[_\(=7(.X!^I)8,X`+_V0'FX0X4E`#9SW"``-PBH0%O_B*PX'CAQ6"!8(,`W##K!/!B>`'D +M_0L$@"&!H($6O!3JNF13(DP%D7#"(@X`R_?'!_ +MP<4`V9ZY&7G5R29XX'_5&ABP`-F>N1EYT\DR>21XTQH8L-3))'C@?]0:&+#@ +M>/'`D@A/_L]PH`"`(%P8@`\#`$`-U1(/MNEU(_`(=R'P+RY!$Q$.U1;/<(`` +M2!?6>`"`B>C/<```]0[)<0H/;_ZI<@#8GKC9>`9]SW"``$@7UG@`@$!XU7A#=26>0!/_N!X`-F>N1EYU.!_U1H8L`#9GKD9>=/))7C3 +M&ABPU,DE>.!_U!H8L/'`U@\/_M02`K;/=J```"`O+8$0W!Z`'P,`0`V;YV>`"`0'B`V`<>&)`!`$_^X'[@>/'`X<4( +M=83@RB"&#P``@C`D#F;^RB%&`\]Q@`!(&!)M%'CA!R_^`&'QP$X/#_Y*(0`@ +M*G4$\$HA0"`!Y54-%1':""``J7`:G#O"`"$BB`&!`Q]SW:``!`F6G`P +M)D`>BB0&*-<,#J#A;<\/59&J""``Z7`9",`$!"^^%#`F01X1)$"@S"`"A-?U +M`>?P\2X/X!XJ<#4'#_[@>,]P@``@&!6`@N`!V.!_PB`.`.!X\<#AQ0AQ#WV% +MY,=P@``@&"J`"0F.`ZN``>(-"A4!C"7_G_/SZ08O +M_JEPX'CQP.'%"'6%X,H@A@\``&$`P"CF`0@-9O[*(48#@@VO_JEPR08O_@]X +M\<#AQ0AUA.#*((8/``"!,.0,9O[*(48#W@GO_JEPI08O_@]XX'[@>.!^X'C/ +M<*```!\<@.!_P+C/<(``1`AHB"F(SW"``#0<2(#/<(``D!CP((``.&`0!^X'CQP.'%SW6` +M`)09S!4`$`#9X[C*(6(#P"DB`L]RH`"`'1:")7@6HJ8)(```V"(/X`,0C0H/ +MX`,4C0D&#_[/%`-Z4OAL('@4F#\__ +M@>#*(&$`-`XA!/'`&@TO_@?8\@[@`THB0"`*((`OH``` +M($L8F*0`V#IPSW>@`(`?"Z?_WL]U@`"4&<]Q@``4&M*A`]C@'0(0XAV"$P+8 +M%Z$?H1VA'J$6"2``0!T8$/(,P`-S&%BD`-B>#>`#"'$P'X`?\/#P\'`?@!_P +M\/#P=!^`'_#P\/!\'X`?\/#P\&(*``"R#(`"SW$``-0\G@B@!P#8=!B`I*(. +MS__!I=4$+_["I<]P@``4&A.`4R`!``FYX;C/(>(!SW*@`(`=%H(E>!:BX'[@ +M>`38Y0`@``#9SW"``#0<*-G)!&`'SMK@>/'`1@P/_@AV@.$!W5(/X`3`?4`E +M@!*Z""``R7&5!`_^\<#/`"2B=``*7` +MT<#@?@AS*'+/<(```/N)!N`":'$&V/$'[_\`V0?8Z0?O_P#9SW```*W>X'Z` +MX,P@HH`']`'861H"L`#8!_`3"-$``-A9&@*P`=A:&@*PX'[/<(``T,<"B,]R +M@`!P!1UX4R`!``""H+@E>.!_`*+@>/'`X<7/`>X12``!A"XA2"2``&A.@\O_@'8SW"``!0:$X`+"-X`%86YN!6E%86U +MN!6E#0,/_O'`SW*``'`%((("@J.YA+D@HD4@``8B#.`#`J(!V%@:`K``V%D: +M`K`#V,]QH`"`'1VASW"``!0:$X`-"-X`%8&9N!6A%8&5N!6AT<#@?N!X\<#A +MQ<]R@`!P!0*"((*#N$8A`08@HJ2X`J(`W<]PH`"`';J@6!I"LP'8<@K@`UD: +M`K")`B_^6QI"L^!X\<#AQ0AU6A:RX#@T"6B$RGTSW"``-#'0HC/<8``<`4`@>&ZSR`B`-`@(0``H<]R +MH```('H:&("T$@&`&PF?`WT2`88)Z88@?XX)\A<-WQ*.O0?PM!(`@`L('@"K +MO?GQ`0(O_JEPSW.``)09W!,"`(#@!+K'`!\(%0(S)@!P@`",V$`G`7(4>0!Y!MH%\`3:`_`"VEO+ +MSW&``$P("6%(<+X)X`-#N<]P@`!P!2"`SW"@`(`=.J``A2\@`P#]`"_^`*7@ +M?N!XSW*``'`%`H)$(($!`()&((`!)7C@?P"B@.#*(&(`4R$"`5QZ@.'*(XD` +MRB,L`,]R@`#(&_`BP@#/,]S +M@`!P!4*#1B*"`45X`J,`@2\@`P#@?P"AH<'QP,(/S_VH="@<0#%:<+AQ&G(Z +M(L]T@`"!L(10#/=8``_-\R)4(4=7L%*CX##0M$ +M#A1X%PA%```E`"1`(%``"PR>)@/9&1M"(%$D@*;*(0($RB$A`!P;0"`*<`C< +M;P;/_>!X\<`N#L_]A"@&!``A@'^```@F*!`&```A@7^```@G0"$$`T`A!0E` +M(0<*42;`@(HB"`#*(B$`1AF$``#=$?#/=X``;.*O9\F`ZV-D?G6!Q'LO*\$` +M3B..!\MD<*H!Y5<-%1+I@,]S@`!$XJICSW2``/3C1'\O*L$#3B*.!\YD`"1" +M`\"JUH'D?B\N@1-.)H\7[F3(JJL.WH!H@(;ETR.F`"\KP0!.(XP'SW.``+C> +MBV/5\0#=$?!I@.EM@.7*)T$3[F;$>]6!Q'LO*\$`3B..!\MD<*H!Y5T-E1)) +M@,]V@`"`XJMFSW2``/3C9'HO*X$`3B./!^MD`"=/`V"O=H%D>B\J@0!.(H,' +M:V1`)`((NF)FJJ<.WH!H@(#ETR.A`"\KP0!.(XP'SW.``+C>BV/3\0#;%/`H +M@,]R@`"TWFIB`"7,`$1Y+RE!`$XA@@?/<8``N-Y)80'C(*S="Q2!.07/_?'` +MQ@S/_0AVD(C/<($`(`T6(`0#SW*!`.`-EGI`B@`4`0$`V!$*7P'/`P:%!""%#P```!@C#8`/````"`PE@(\````0 +MRB""#P``&!7*(($/``"P!`/P2]@%N!!QRB$&`'X6`A$`E6*56&!X8,]RH``` +M(%J"+.`0E!Q&)7*(88`9.`0<@X!#@#/<(``A,D#O)5\@&``WT$H +MP@7"NF6Z2"(0`#.XPK@-X`\G#Q`#%)$`\@S@(`:%"2#/`P:%`^?B#.`@!-D` +M*``$`^`$((`/``#\_\]Q@0`P$P.A`^!!*($`SW"@`(`L/J!T&$`$RQ(!MB*_ +M++G$N1BY'A("-IVY%+I%>9^YY7D[H,]Q@``$SQZ!`>`>H2QP_PB>A<]PH`"` +M+!R`SW6!`#`302@!!5,AD`%3(($$SW>``(3-`KE7")X'4PB4(`"6$.!+"$4` +M(*4('0`4F!8`$*8,H!]`)0(4`:7L%H`0/8@0'@'J'/<($`,!,!V2*@ +M`-AA`\_]X'CQP`8+S_WJ#8`$_@V@!`AU"NW/<8``4(N`X-4AX036(2(%#_"% +MZ,]Q@`!$C`GPSW&``%"-@>#9(>$%V"%B!L]P@`!0>P"`30B>!,]RI0``#(2" +M0-@$H@#;"/!M8<]PI@``@'5XH*`!X]+CN?=3$8``4A&#`#=H)7C/<:0``$!E +MH0:AA*+/<8``<+H)B0'@":GA`L_]SW```!()#0$/_N!X\"L_]"B"`+X`` +MF)4`W0+P`>4]#141\FWU?P)W`-X'\`'8U7EJ#&`%((D!YN<.E9!`)P$3=^T1 +M#5`0$0V0$.,-T9`#V/#Q`-CN\0+8[/'/<8``4+H=B0'@:0+O_1VI\<#:"<_] +MH\$*)4"0"B"`/X``8!R:<`CR$0U0$!,-D!`5#=`0/-@*\`'=F]@&\`+='M@$ +M\`/=#MA`P`CM$0U0$!,-D!`5#=`0<]@*\`'=U]@&\`+=/-@$\`/=@=A!P(HG +M_R\*)L`E".T1#5`0$PV0$!4-T!!8V0KP`=VTV0;P`MTLV03P`]T7V0?M$PU0 +M$!4-D!`5#=`0`=@(\`'=`-@&\`+=`_`#W:EPA@M@!2]Y`=XV"2``R7``W\]R +M```0)YX,[_WI<\]R``!`G!H+[_WIG$'[1,-4!`7#9`0&0W0$!G8"O!* +M(0`CR74'\`+=,M@$\`/=2]@Z!O`!W;3>!/`"W2S>`-A"P`AW"/!!Q@'``,8!YQYFW7Z7 +M#Q42!^T9#5`0&PV0$!L-T!`!V`OP`]T7WNKQ`=T`V`7P`M@"\`/8"'7&"F`% +MSWEV""``*G"Z!UY+WD(N(8@^P\E>,]QIP`` +M2`.ABB#$!`"A"0```.!X\<#N#X_]"B.`+X``8!R*)084J78*((`OI@``0``0 +M#R`A#Q\07@SO_0/8@.9AOOCUSW```*0HR-EZ#N_]4R<"$,]PIP"`2,"``!`/ +M("$/'Q`R#._]`]B`Y6&]^/7/<```I"C(V4X.[_U3)P(0SW"G`(1(H(``VIBZ +M`B:`$-=V@````,H@BP-"*,$'`B6#$-=U@````,HGRA#*)TL30B_2%PARM@KO +M_2AS&G`Z<>EP2G'IN`*A_]A+V78.8`(&N2O8$KB@H*&@"@YO_JEPSW6@```H +M!!V`'PP``@&*()$``:4$'8`?"`""!`0=@!\S`,(`:@A@!0'8!!V`'P$``DT$ +M'8`?`0!"AP0=@!^.`$)-!!V`'XX`@H<$'8`?"0""300=@!\)`,*']0:/_?'` +MX<4(=18,8`(!V:EPJ@IO_P'94-@/($`#$'@0N(4@A0#/<:```"@!H6()8`6I +M<,$&C_WQP`CH$0A0`!$(D``1"-```=@'\`#8!?`"V`/P`]@/"-``(@A`!0#8 +M`O`!V+X-``5J#.`$!-C1P.!^X'CQP/X-C_W/<8``8!PZ<6P1$@`>"2```-W" +M#L__`O`!Y001@"!_#040\FWU?T)W%!E`(Z"G`-@!IX#ES"5BD,PEHI`$\@D- +MT!``V`/P`]@"IX3@RB"-#P``C!G*(8T/``!E`%0,S?UB#^__J7``W@GPR7`B +MAZERU@@@``IS`>8%$8`@GPX%D$`G`!,5()`#!@_O_\EP`8?NZ`IP<@OO_ZEQ +M[O%R"```!@O/_P`1`"!G"!&`J06/_>!X\@+XOW*(2("`=@%I0#8`*4"V`JE`]@/I0"6"*4!E@.E`I8-I0.6 +M$J4`E@FE`98$I0*6#J4#EG$%K_T3I?'``=CB"V`""''V"6__`=@!V,(-(`4( +M<='`X'[QP`'8Q@M@`@#9V@EO_P#8`=BF#2`%`-G1P.!^\<#/=(``8!R;A`*Y +M-7F980SA\"$``!<*40`;>(P@!(#*((T/`````0;P"PJ1`!UX`O``V`"CC"`( +M@,H@C0\``(P9)`/-_='`X'[@>/'`X<7V#"`$`-C/=0^#*`,/Z(H0#0>O>0BY +M*+TE?8L0`0`BX*+DE>!"X!7U/)<$7SW"@```Q/J#/<(``4)*M!*_]JZ#@ +M>/'`Z@H/_L]R@`#0F`."!N@E@AX(X`1$@M'`X'[/<(``L)AI`2``%8@H$`(" +MSW&G``!(2*$!@`FAX'[@>.!^X'C@?P#8X'\`V.!^X'CQP-H+K_TH/'`X<4(=2AS(@@@`$AP"'&$ +M+0@6+W"$*P0#)W`X8-D"K_V`(`8.X'@O)@CP!-J+NDQX+W$%],]P@``XF@7P +M0GG/<(``/*+@?SA@X'CQP!X*K_T"V*X*(`2CP1IPBW%2"2`'"-K/=H``4),$ +MW1$($"``P`0@OH\/````#/3/<8``4'L`@:.X`*$`V"0>!)"3\`'9)!Y$D"#! +M$0D3`,]P``#!%(H(S_T`P$$H`0+#N4$H`@/#NH+AS"*L@,CVSW```,(4<@C/ +M_0#`02@!!,.Y-+A3(,(`@>',(N&`RB""#P``PQ10",+]`,)!*@$&P[D\NB8> +M0I`G'H*0@^',(NN`RB"*#P``Q!0L",K](<'0X!/`! +MYL]^LPY#E`#?^0_#E&+'%"!`(R.(8H@O*4$`3B&"!T]Z5>6P?1$.@1!BPXIQ +M;@LO_LER`>?O?^GQ#0&O_:/`\<"^"(_]"'0Z<1IS>-_L>B]P0@\@`(EQ@-X" +M)@$0"G#L>,]U@`!X^R"E+W`F#R``*G$")@$0`(41>O_8"0BE`"&EP*4Q>0D( +M10#!I=$`C_WQP$X(C_W('`BP0<&:C8< +M!#`$'X`?``##E@6'!!^`'P``PY8%APHC0"$0>S03(@BY!"&!#P```/\E>@]X!2"7`,]P``""9D;`!!^`'P,`@F;/ +M<```PI9'P`0?@!\#`,*6SW````)G2,`$'X`?`P`"9\]P``!"ETG`!!^`'P,` +M0I>>#N`'!=BN"0`%!/`!Y:]]@^48`0H`%0U2$`#``<'J"R``J7+^#```SW:` +M`'C["B:`+X``F/L!%H<@JG"*<4;:2'-*)```"B4``5(+(``*)@`!`X8(%A@0 +M2L``%H<@JG"*<4;:2'-*)```"B4``2X+(``*)@`!OMI*)````1:'(*IPBG%( +M8*(``*)@`!8H;#A@(C0`0`&@`@"\$"(0(F66$"(<&``B8`%``;`"`, +M\@(AP"!,>!8-(``O<`(A`2`"P""@"L`"(`(@`")!!@(A@8,,\@(@@"-,>/(, +M(``O<`(@`2`#P""@`!(`((#@>/,`$P`@@.!T\QD-TA``$@$@SW```+03`!," +M(/8,K_VI`?!$+@E>`&G02\`(@]X +M",$0N"5X`:`'!=@%!F_]KL#@>/'`Y@U/_0AWSW6@ +M``!%`!V`'P!```#@>`#8`*66"D`'BB#_#QRE&*4B#R```-C-A=X*````V.EQ +M"'(%VV8)(`!*)(`!!@\@``'8S:40OH^^F[[/<(``<`4`@)^^Q+@*N,5X#*5. +M"D`'Y05/_?'`7@U/_:3!.G!:<7IR:'8*)0`A"B!`A,H@8@`3>,&X0"!6`$PB +M`*%*($`@PB`!)!;:SW"``)C[FG`"V4"H(:A*<&IQX@L@`*IRSW>``'C[(N@` +MV$#`06O?4D-@Q47"1`@$PU2$`IP2G%F +M"2``J7)^"@``0"@`(=9XQW"``%"3)!`$`(#:*!`%`,EP`!2'(&IQ2'/2""`` +M"B9`!0F'N0A0@`F'#PA1`(#8`*3A@!+[88!0@0`4@A\=P@`"PDRBH(8R\D!P,J<3H-(`#(A5Y0*'O>2IP'@W@!,ER`-C/<:0``$`1H?_8%*$Z"@``Q0-/_?'`:@M/ +M_:'!"'8H=PL*,P%(=1,-4Q#/<```M1/Z":_]J7&+<,]Q@`#HVA8/;_T#VL]Q +M@`!HW@2)`1P",.AASW&``'C[)X$9"$$`ANY")$`PJ&`&\#)M:+DX8`]X=0-O +M_:'`X'B.X.$@S@?*("X!P.#A(,X'RB`N`/C@X2#.!\H@;@",(`*#X2#.!P+8 +M`]C@?O'`U@IO_2383@S@!`#?SW&E```<`H'/=J0``$"=N)ZX`J'^#.`$BB## +M+]4>V!//=:<``$CMI?*E\Z7LI50=@!\#`/_\^Z4"V!H*(`**(08$I=@0N`08 +M@`\``/__\:7QIE`>`!35`D_]@>`!V,!X,07@!`/9\<#AQ4H-X`0H=<]PIP`` +M2+R@S0)/_>!X\@SW"D``!#M:#/<*<` +M`$BQH)4"3_WQP"(*3_WJ#@`'BB#_#\]VH```11RF&*8#\%H+@`+/<*``@!\- +M@".X4B```.\('H#/<(``T)@BF,]P@`!0DSF@`-U&"R``J7`"#\__*/"$Y0'? +MP'\9#1$16@PO_P#8SW"@```H!!B`#P@`@@0!V*EQ`-I(@\AL]P``"Q$UB&2@B/_08,+_\`V`'EKWVS#5*1Y@H@``'8Y0%/_>!X +M\<"AP8#ARB"!#P``FQ,,`(']'@W@`8MR`,"AP-'`X'X`VX;I@.#,("*!!/)H +M<.!^@.+A(,('`-C@?P'8\<`V"6_]`-FEP<]P@`!X^RF@&=G/<*<``$@@H`(/ +MX`&*(`0+P@_@`8MP`,`!W14(W@4%((`/`/\``!-XBB7_'PBX@"`#`L]QHP`+ +MUP4H?@`*(,`.K'@!P`H@0"X!W14(W@4%((`/`/\``!-XBB7_'PBX@"`#`L]Q +MHP`+UP4H?@`*(,`.K'C/=X``>/LO=0+`I:<0'P`4`=X3"-X%!2"`#P#_```3 +M>(HF_Q^`(`,"SW&C``O7!2A^``H@P`[,>`/`"!]`'@'>%0C>!04@@`\`_P`` +M$WB*)O\?@"`#`L]QHP`+UP4H?@`*(,`.S'@O<@*'#!]`'A%X&>`%*#X`47@9 +MX"]Q!2@^``T))`0O<`\(10,&AP'@!J#")4$3_@SO_\EP&G#/<(``4'L`@`\(7@&!Y0@*X?_*(`$$`-@< +M\#1M%GG'<8``4).)@6J!"B$`@,HA8@#'<0``$M(IVA*Z"[P$)(P?/P``^,J[ +MA7LU>F"B`>`/>,L(DH``W03P`>6O?4,-TQ``W@3P`>;/?O$.DY``W_D/$Y)` +M*$$A-'D5;3A@=&X;8_1[QW.``+"3"1.$`*EPR7'I]P[5D*]XVWD`)$(P@W%AB;T\4T'+_VBP.!X\<#6 +M#@_]`-T"\`'E)PV5$`#<^PP5DM5HU'[U:=]GU&W^9I1^QW:``+"32*YIK@'D +M\?$-!P_]X'CQP.'%"'4`V((-X`&I<0#89@^@!*EQ`0!XX<7AQHATSW6` +M`%#G"&7/=:```"B`X!XHN`# +MV>$@Q0?*("4!Y.#A(,4'RB`E`/[@X2#%!\H@90",($*%X2#&!\H@1@`"V.!^ +M\<#V#0_]`-WR"J`#J7`#\`'E>0V5$`#;`O`!X_4+58$`V@KPBB0$$`#>@+'3 +M?L&Q!.`!XN<*U8!$+3X?,FLT><"`)W$5(8P``"2!'X``A)+5#IZ502Y,$\B\ +M)+[(ONB^Q2:"'P```/Z,)`*=SGZ%]HPDA9+#]HHD!!"Q#H*?___$_ZL.4I_2 +M\=D%#_WQP,X/3_W/<8``<+H!B0'@`:G1P.!^X'CQP.'%"'4H+Y\8$%#_W@?N!XX'[@>.!^X'C@?N!XX'[@>.!^X'C@?N!X\<#AQ<]Q +M@`#0'#H/(`"Z@40H/@M`)0`2SW&``*@0+W-X8`"ANV.UDU:3BYLWD\B\";W/ +M<`,``/X$?:5\SW6G``!(AJ6-DPFYR+P$>85Y/:4G@Q,)T``LDPFZR+E$>"5X +M!Z7/<8``4+H?B0'@]00O_1^IX'CQP$X,#_VEP=IRNG,*(0`A"B=`(`B,0`8PG?Y)&]@784!P`(*#P`X"+Z`2! +M#PA1`*""BB/#+Q#P#PB1`/_=`!(3``KP9]G/<```?AF^"F_]4!Q`('IU0,;* +M<*IQZ7*I?P\2$(4@`!P`6U +M!(7_V0\(40`"P`:U)[4$\":U`L`'M<4`+_VCP.!X\<".""_]4'C/=(``'`F@ +MA,BZ";C/=@,``/[$>$5XSW*G``!(!J(O(`@!4R0/`@FXQ'CE>!VB<'C(NPFX +MQ'AE>`>B%!J``4\E`0(@H@#8`^T`I.AP#@@@``3!G0`/_>!X\<`B"`_]&G`Z +M<8HE!A2I=@HB@"^F``!``!(/("$/'Q"2#"_]`]B`YF&^^/7/<```I"C(V:X. +M+_U3)P(0SW"G`(!(P(``$@\@(0\?$&8,+_T#V(#E8;WX]<]P``"D*,C9@@XO +M_5,G`A#/<*<`A$A`@`#;F+L")L`0UW:`````RB"+`T(HP0<"(LP`UW*````` +MRB8*$\HFBQ!"+LT7"'+J"B_]*',(=UIQR7"I<``-`<"B*`+Z`` +M`"!L$A$@:!<3$`#8&@P@`)IPU@D@`(IVJ@D```0;`"`#\`'F`8>)#@40H@D@ +M`,EP1"X^&P`C02ZZ<0*A=@B@``#9I@D@``#=Y@H@`,EP`H?5#060_@H@`*EP +MR7#J"R``J7$2;3B'%2`0```E`"0JL#:'(Z`WAR2@J7"&#"``R7%`)0`C`"`0 +M(.EP"G')__J7,!Y=+Q=@L@``'8 +M;!(`(!$(1`1L$@$@`B%!!`GP;!(`(`XA@2______&6$`&T`@`(__V',!PP+!`\($P`?O$'',(X&`Q_<(\!!QS".!@,3W +MI*8`V0WP`M@$I@#9"?"#X&79RB&"#P``9@`THH#ARB""#P``?AE@#`+]"0;O +M_*7`X'@`V8[@RB!.`.`@S@?`X.$@S@?*(&X`C"`"@>$@S@<"V.!_`]C/<(`` +MT)C@?P*8X'B9V0CH$0A0`!$(D``H<.!^X'\*V.!_--C@?W#8\_\#]C/ +M=J```"@$'H`?8`""900>@!]@``)F!!Z`'V``PI4$'H`?8`!"E@0>@!\,``)? +M!!Z`'PP``F`$'H`?#`!"CP0>@!\,`$*0!!Z`'P,`PEP$'H`?!P#"700>@!\# +M``*-!!Z`'P<``HX$'H`?!0#"900>@!\%``*6!!Z`'P4`0F8$'H`?!0""E@0> +M@!__``)W!!Z`'_\`0J<`W00>@!\``,)`!!Z`'P```GL$'H`?`P""0`0>@!\# +M`,)Z2B``(00>@!]L``(!!!Z`'P,`0@D$'H`?`0`"!#8.8`0!WP0>@!\#`()F +M!!Z`'P,`PI8$'H`?`P`"9P0>@!\#`$*7*]@2N*"@H:#/<:<``$CMH:2AXZ&^ +MH?BA/!D`!,]PI```0[6@SW&E```<`H&=N)ZX`J&TV+(+H`&*(0<(@03/_.!X +M+R8'\`#8RB!O``.X%'C'<(``\!Q3B#*(SW"G``!(4:`PH.!^\<#AQ0AU2-@/ +M($`#$'@0N(4@A0#/<:```"@!H:EP%@BO_@#9J7!R":`!`-E!!,_\<03/__'` +MX<4(="AP2''_V@#=1[!&L*6P0X0%Z@/9)*`%\*2@0@WO_VAR%03/_.!X\<#6 +M#H`#J@Z/_]'`X'[@>/'`B@O/_`AVAN'*(((/```-"2`*`OT`W0/P`>6P?4,- +M$Q'N#>__J7!$+3X;+W$`(8(/@`"PEP"B`-CC").`0I9R:'5[`"&,#X``D)>; +M8U>S0)8!X%BS0999LQ!X[_&9`\_\X'CQP.'%"'4"V`8*H`&I<1H(K_ZI<`+8 +MY@M@!*EQ?0//_/'`_@K/_*/!&G#/=H``T!PO)@?P`-C*(&\``[@4>$`F#1@= +M90Z-*'=`*`$"!"&!#P```/\E>,]QIP``2`NA>@Q@!!&-3XT`V%BF&:;I<.(- +M8`0PC0/P`N)8IEB&2PK5!1F&3WH!X!FFZ7#`$,(U`)`G``!("*<.P`4E@1,)ITIP`-H`VPHD0`3F"2``"B4` +M!`W`"*<.P`FG&0+O_*_`\<":"<_\>G!:<4`_\0"4"&`/`:G%>#>_\0"4"&DIP +M0"4!&.X.[_S)<@MP0"4!&N(.[_SILTDA:2 +MRKG*N`NX)7@`I162-Y+*N,JY"[DE>`&E2?!B#0``0,$@QD0H/@W$OL]S@``( +MEB]TGF;(8^>XSR`B`L\@8@+/(*("SW&``-B6SV'GO\\G(A+/)V(2SR>B$E,@ +MA`)3)XX20"[%$@4E#@'`I12R`12`,/:RQ+@:Y)A@"V/GN\\C(@+/(V("SR.B +M`@QAY[S/)"(2SR1B$L\DHA)3(X`"4R2!$@NY)7@!I76RE[((W)\'K_RAP.!X +M\<`R#X_\5@X@``AVSW"``%"7PA!!!\]P@```EM1X(+``W0OP8@X@`*EPR7`6 +M""``J7$!Y:]]\0V2D&4'C_S@>/'`Q@Z/_*K!0L!#P0#>2<;/=8``H/O0I=&E +MTJ5+`B``TZ789A1X`""2#X``<-X$$@$A"B>`+P```/\O>"]Y"+@$(,`%!2!3 +M``HE@"^G``!(+!W`)``2`"$"$ADA1,`O(`>QY0"`!!'"X1\``'4`> +M`85&P1-XZ7'2"6`!"G()P`0<0#03>>QY0"`$!'"X!!U`'BP=P"1`P`/`*W$& +MPPMR'!0%,`HF``%"#B``'!0',``6`"`@A0X2$R$X8`"E`!0`("&%!!Q`-#A@ +M`:40$@`A*G,/>0]X"+D$(<$%!2$7`"P=P"4%P`P2DB!`P`/`:G%*<@HD0`1. +M(04@"B9`!.H-(``*)T`!`!8!(``4`"`BI0.E,WCI<3()8`$*<@G`$WE`(!@$ +M['EPN$C``X4('4`>$WCI<18)8`$*<@G`!!Q`-!-Y['E`(`0$<+@,'4`>+!W` +M)4#``\!J<4IR"W,@%`4P"B8``88-(``@%`0)\!,#/R]P*!A`+@4KO@!`)0(:U7HT&$`NB@A@`>EQ0"4"'300`"#5>GH(8`'I<1`0 +M`"`PA3A@$*4<$``@,84X8!&E$H4H$`$@.&`2I300`"`SA3A@$Z6"#2``R7`! +MYL]^@^:Z!XER`>$O>=4)TH",(_^/&/(5)<$01(%">!QX$*41 +MA4>!0G@<>!&E2H$2A2V!0G@<>!*E$X4B>!QX$Z49\`/9R@\@`58E`A(1A0/9 +MO@\@`54E0A02A0/9L@\@`58E0A(3A0/9I@\@`54EPA0"P`/!$@@@`!#:\0.O +M_*K`X'CQP,8+C_Q:"]P.@\@ +M`2IQ$88!P1-X(GB#PBH/(`'I<40J/BT"PP/"+W!$*+XF)W"X8``@@0^```B6 +M8*D`(($/@`#8E@'E0*F)#9*6C0.O_*3`X'CQP#(+K_S*N8/H**,"\"FC`=@`HXHF!A3)=0H@@"^F``!``!`/(",/'Q"&#Z_\`]B`Y6&] +M]_7/<```I"C(V:()[_Q3)P(0SW"G`(!(`(#/=8``B-<`I0`0#R`C#Q\04@^O +M_`/8@.9AOO?USW```*0HR-EN">_\4R<"$,]PIP"$2`"`SW:``(S7`*8`A1?9 +M"@_@!:ER`(87V?X.X`7)<@"%&=D(N)8+K_P'N0"E`(89V0BXB@NO_`>YT0*O +M_`"FX'B.X.$@S@?*(.X`P.#A(,X'RB`N`(P@`H'A(,X'`=@"V.!^X'CQP#X* +MK_P/V,]UH```*`0=@!]@`()E!!V`'V```F8$'8`?8`#"E00=@!]@`$*6!!V` +M'PP``E\$'8`?#``"8`0=@!\,`$*/!!V`'PP`0I!*(<`@!!V`'P,`PEP$'8`? +M!P#"700=@!\#``*-!!V`'P<``HX$'8`?!0#"900=@!\%``*6!!V`'P4`0F8$ +M'8`?!0""E@0=@!__``)W!!V`'_\`0J<`W@0=@!\``,)`!!V`'P```GL$'8`? +M`P""0`0=@!\#`,)Z2B``(00=@!]L``(!!!V`'P,`0@D$'8`?`0`"!!H+(`0! +MWP0=@!\#`()F!!V`'P,`PI8$'8`?`P`"9P0=@!\#`$*7*]@2N,"@P:#/<:<` +M`$C$H>VAXZ%3VA&Z`!I`!-*ATZ&*(L\/SW"E```,1*!P&9@#Q:'>H?BA/!D` +M!,]RI0``'`*"G;B>N`*BQJ$<&8`/`0#__G09@`\!`/_^_]@9V6H(8`$'N34! +MC_S@>/'`#W@`VL]QIP``2%&A#PC1``/8$*$5V`/P4*$/V&X*``1:""`$`=C1 +MP.!^\<#AQ0AU2-@/($`#$'@0N(4@A0#/<:```"@!H:EPR@PO_@#9J7`F#B`! +M`-GU`(_\\<#AQ0#=K@@@`*EP*@[/_PWPSW"``)#>J&#."2```-DN">__J7`! +MY:]]ZPT2D88((``!V+T`C_SQP$((K_PH<@AUA.'*(((/```.">`.HOS*(2(! +M`-L$\`'C<'M/"Q,!`-H$\`'B4'KQ"I.``-@$\`'@$'CQ"%.``-GY"9.&1"L^ +M#>"5+W1$*KX&)W0\9``DCA^```B6X*[AE0`DCA^``-B6X*X!X3!YZ?$Y`(_\ +MX'CQP.'%"'4#V*X.(`&I<<(,+_ZI<`+8C@@@!*EQ)0"/_/'`D@]/_'IPNG&: +MD8,[_]J<,]W +M@`"(UP"'SW:``*#[%*;/=8``C-<`A2\A"`05IB\B2`0>#.__:G``AR\AB`06 +MI@"%%Z9J<`H,[_\H%`(Q`!<$$``5!1!@'@`1+!0&,&0>0!$4AC6&5H9>#:__ +M=X9-!T_\SW&``*#[0(&#ZD&!!>I"@8GJ0X&'Z@#:%7E$H4>A2J%-H>!^\<#N +M"<`&SW&``%"2BNC//'`E@Y/ +M_`AU*'8`W\]PH```$.F@5@X@`P'8CN4!V<(A30`HJ*FHRJCKJ`3N8KVIJ!`8 +M@`\```8\*@X``\$&3_S/<(``<)(PB%&(0"D`!(&XBKB-N,]SH```*`&C0"H` +M!`4@@`\``$(D`:,(N@0B@@\```#_17G/<*$```(EH,]Q@`!0NA>)`>#@?Q>I +M\<`.#D_\SW"``-"8PI@&"^`"!-@@B`*(SW6``#P="PD!``D)$PJJV=KF`-C( +M]D`A`@1/>1#8`:5(K<"ESW*``'"2,*HQJG(/[_\2JBT&3_SQP.'%"'4H.'%X<:$*`4*SW2``$R[`"1#'L]U@`#\T@#:)W1`I`;9)*//<0``_`LC +MHP6CIJ/!QN!_P<5]`0``SW"@```@&X#@?N!X\<`_\P(&DB +M`C*'`_`PA\EP'@^@'0+:3"``H,H@@@/*(8(/````!`@/HAW*(B("-FW/<(`` +M8,`H8!4(D`#/<0``A':I<`C:E@S@'0';X01/_/'``('/<8``U+N$*`4*-"%! +M#A,)7@`#V0JYQ@Z@'0G:`_#&"```T<#@?N!X\<#AQ:"!R@S@'02)J7`#V0JY +MH@Z@'0O:N01/_/'`X<6@@:X,X!T$B9(((`"I<*4$3_S@>/'`X<4H=<]Q``#L +M=02-$-H:#.`=`=MR""```(6!!$_\`($G@0?ISW&``'0=\"$!``/P!=D*N4D& +MH!T&VO'`X<6@@<]R``!$=@2)2'$0VA(,X!T`VS(((`"I<$4$3_S@>%.1`(&' +MZL]Q@`!D'?`A`0`&\,]Q@`"$'?`A@0`!!J`=!]K@>(0H!0H`(8!_@`!,NRT# +M``;@?N!X\<"2"V_\"'*@@02)A"T%&L]S@`!,NP`C3@XK"E$`+($5"5``SW$` +M`(1V"-IF"^`=`-L)\$H+P!THAJEPJ@V@'0':O0-/_.!XX'[@>/'`0@M/_`AV +M*'4`WRH(8`'I<:]]*PU1$%9N`"*!#X``:L#@J0/9"KER#:`=!=K/<($`$`?P +M(((#R7#I<0OPC"6"E`KRSW"!`!`'\"""`\EP`ME`>E4#3_SQP.X*3_P(=BAU +MU@\@`0#9KWT7#5$0SW"!`%`'\"""`\EP`-D+\(PE@I0*\L]P@0!0!_`@@@/) +M<`+90'H=`T_\\<"B"D_\.G`H=P#=D@\@`:EQ"':$*`4*SW"``$R[`"!0#AT/ +M41!`*8$A`"&`#X``:L"@J,EP4@V@'2IQ(!`!(,EPP@R@'0':N0)/_/'`7@I/ +M_`AW*'9*#R`!`-F,)H*4"'4(]`/9"KF:#*`=`-H:\`\.41#I<.!^X'C@?N!XX'[@>.!^X'C@?N!XX'[@>.!^ +MX'C@?N!XSW````,[$0"/_.!XX'[@>/'`0@EO_`;9I\&+$+`84SW6` +M`!`F,"5-'@T-D!$!XE6F`-@0(``#[?$$Z!$+@`#/<```!#`.#6_\:'%`*(`@ +M%'@`)A(0*!("("#P+RB!`$X@D0<5)DT4`(7Q<,H@@0\``!(PW`QA_,HA`00J +M<#X)H`,`V4(/H!P`A2@2`2#@I1`A0@0H&H`@XNHL$@`@%28-$'X.X`(%A>6E +M)!K`(Z3Q1L&&P$(,H``$V0T&+_RGP/'`X@TO_`;9SW:``'@8<@I@!LEP6@V@ +M``7=`=C)<0#:6@Z@``AS((8!A@4A/H`']".&!(8%(3Z``_*I<`+P#-@/>"H* +M+_X`V04&#_SQP)(-+_P"V<]W@`"4&28*8`96)T`6#@V``,]V@``4&C*&529- +M%R]X"0E1`'<(40"!X?_&0"XTR"B`<\A`@#0(0$`-+*AP-'`X'[Q +MP*;!SW"``-S:((`!@$3!1<"+<$8)8`8$V83`]@J@``C9IL#1P.!^\<`!V.'` +MSW"``#@B)@E@!AW9BW#6"J``!-FAP-'`X'[QP.'%`-W:&EBSVQI8L]P:6+/> +M&IB_T/X````6`$#:&ABP`!8`0-L:&+``%@!``!8`0,8+0`+:$@&V_[G,("*` +M$/+;R?^X0-C/(.('RB"!#P``T`#/(.$'!=D5N0NA!?`%V!6XJZ#/<*``@`Q` +M&(`/`*`(`-C)`MD`'P!``=B>"Z``"'(>"P`!800/_/'`X@LO_(H@_P\:<)P< +M"+"!P'8(8`8"V0+'!">`'P!P```\N%,GPA8;"'0!`<7/<:````0$@;A@!*&* +M('\/0,!6\,]Q@``TV/`A`0#/!EA@\!&#R_\!]H#QHONSW&@```$!(&X8`2A`!P`-"[P$!0# +M,1,-P!!##]\7$A2`,#L($`$2%(`P%P@1`87%J7#6#R`&:'%@?JEP)?#_O]$@ +M8H`(\LEPO@\@!FAQ`=A`P`[P&0@>``_MSW&@```$!(&X8`2ABB"_#T#`BW!2 +M":``!-D)\`'80,"+<`39R7*:":```KM!`R_\N<#QP++-A.#*(((/``";(7`! +M0OP!V<]P@`#D(B&@7@\@!@C@2@J``-'`X'[@>.!^X'C@?N!XX'[@>/'`G@H/ +M_,]W@```A`^'H<'_W0B]CNB+<"H/(`8!V0`4`#$$?4B]+R`'(`(4CC`*\!"' +M1!>.$`1]*+VO?2\@!R#2#P`!&PC0`!$.$!2I<`IQ_@I@`!",`! +M3R`"`L]PH`"`#$`8@`\`H`@`V,D"V0`?`$!(<$H)H``!VA$"+_RTP'S8-0!O +M_(VXX'CQP.'%HL&+=:EP(@X@!@+9I@]O_*EP!@F``.D!+_RBP.!^X'CQP.'% +MI<&"P/X-(`8#V0H4@C",(@2`B/:*(`X`_@\O_`D4@3``W1#PBW#&#B`&`=E` +M)(`PN@X@!@'9@<"R#B`&`=D!Y0H4@##A#020J@B``(T!+_REP.!X\<#AQ:+! +M`=U!Q8MPH@T@!JEQ`,`-"%$`B@\@`@#8!_`;"-$`?@\@`JEP@<`Z#V``!-D& +M#^`"`-@'\`#80<"!P"8/8``$V4$!+_RBP/'`H<&+.!^X'CQP)8(+_P$V:3!)@X@!HMP`A03,0#9!!0.,0P +M#F``J7-Y\(H@!`!G\`'8'@C@`#IP&0I1((+`9@Y@``C9"@C@`"IPG@Q``F?P +M!!<$$!<,$0"A"Q6D3NT`V&IQU@U@`JER-/`(%Q(1`"60$PL*!"0`V!OPSW&` +M`*C7(($`)(`#*0A```(7$1$`V&IQI@U@`@IR(8>(<-X.8`5*<@H?A!0.'T04 +MY_$J<"27`B!#(!T+4@!Y8<]R@`"HUX"")+>;8V"B!.@&EX+H);<"%``Q$0C1 +M``84`3'/<(``7!P@H%,E?I`(]`&'V&#^"R`&02V!$`7P`=@.'`0P(,`3"%$` +M#A0`,8#@@`VB_,H@0@."P(X-8``(V7D'[_NDP/'`H<&+<,8+(`8!V0#!SW"` +M`+"8I@Y@`#6HH<#1P.!^X'[@>.!^X'C@?N!X-0$`'.!^X'C@?N!XX'[@>.!^ +MX'CQP.(.[_L,V:/!BW82"R`&R7`#%((P*0H3",]P@`#D(@&`'N@&%(,P`A2! +M,!$+LP$!%(`P"0E3`B4($@0&%(`P`12!,`BX!7H"%(`P&+D0N`5ZD]B-N$(- +M+_Q%>0,4@3#/<(``@/46(%$`&\A4:5A@'!("-A0B4``APH#BSO(;"E``@N+* +M]`(4@C``(8`/@``T(T"HQ?`%%((PSW6``.0B$>I@@$&`17M"@`.`97H%(+Z` +MRB""#P``E`#<#"+\SR!B`P,4@3#/=Z```#!2:<=RH```+S02!``T&H`/"``` +M``#80(4/($``"WI(\@44@S`%ZUX((`7)<$#P.A<"EDHE0``$>E!P`12,,,(E +M00$"%((P!+R%>@`0#"$X>Y%R`=S")`$3FWP%)$(1DA<,EH1X<'`!V,(@`0`" +MN`5Z!Q2`,`01`R"6N'!P`=C"(`$``[@%>@84@S!3)(``$',!V,(@`0`$N`4B +M`H#*(((/``"5`"P,(OS/(&(#`Q2#,`#:`(4/(L(`17@`I0$4@#`5)0$0A($$ +MN$5\A*$"%($P`".,#X``-",&%(,P(*QU?7R%!7E%>WRE.A<#EF5Z.A^8D``8 +M1"`%%(`P`Q2!,#AXDA+,(B*`(/0#%($PE.'*($4`RB!&`(?(3 +M"D4#`-G["96!`!8`0`'A^_'*"T``K03/^^!X\<`F#,_[%@^@`J'!@>`!W3H/ +MH`+")4$3"''6"V`#J7#Z#J`""'6]9;1]A^@`)8\?@`"8Q`7P`"6/'X``[,2+ +M=LEPC@@@!@'9Z@Z``OX.H`(Z<#8/H`(:<`ASSW"``%!["A"$`"IQ`,`*$-P/A`"!Q)I@W!%H`'A\0D4@L]P@`"\=B"``H%-P`.!3L"I<&H) +M8`!$V8$#[_NQP.!X\<"WP8MPG@_@!1?9A@I``+?`T<#@?N!X\<#*"N_["]FK +MP8(/X`6+<,]PH/X8`@7:%;H$HB3`!<$$HB2B!L%3(,\`)*)$N%,@EP`5#S,4 +M`<%:"^``*'`!P1$(4`#/<```$#16"2_\),($%)0PSW"```@F0"`5`D`@$`>* +M(`8$!"P^(%IP,"5-+A-O(,$*(8`O@`"$R14@%@``(8XE`(:E"1\`$PA?`G/8 +MC;CI<0H)+_P%P@#9)!Y"$"JV/]@+MDIP!"P^((7E-"!`+LPEXI$&]">X"K8K +MM@_P&PT1$D$H`0,HN`=YP[DD%``Q!;DX8,BX"K8"P.ER`\%`)H,6*@M@!0HD +M``4O(`>@&O(1%(`P(!X`%8:X$1P",(H@_P]&P`"&!<&&(`H`*+G`N0>Y)7@` +MINEPO@XO_(IQ`=T*\`+="/#IN`'=RB4B$DH@`""!Y=ST)!0`,0RV2G`$+#X@ +M,"5!+@`6$Q`%P`;"&PD1`A<*'@)!*`$"P+E!*\,AP+MP<=`B(@*GND;"I[A% +MP`8C@2!$>`5Y(*87"QXBZ+G*(`$%RB'!`T@-81S*(N$'$12`,!X>PA4G"%X! +M(!0!,2(4`#$GM@BV"^D!%((PBG"`XNEQRB+A!QH-0!R6"F__`"9`)"#`"0@? +M``T($2`1%(`P$0A>``(4`3$FM@8-8`#IEP'A0",8IS8@DO_8HD`0"0X,HE)A':".`$Z7`@ +MP!$4@3`/"!X`*'2&)+V?)O($%A`0"L)!IAT)'@`$(@`$$'+*(((/``"C(4P/ +MXOO*(0($(8;I<`(-8``1%((PBG$!AAX(+_T`VB##Z7!2(P,`"L$*`07``-D/(<$#SW*``(@D88(?"!X!)7ODR6&B$2``AV&B"PL>(2"")'@`HN3)&0@.!0"&Y[C*("$`SR#!`^P*X07* +M(>$#(,**<%(B`@#I<;X+8!S`NL]PH`"`#$`8@`\`H`@`V,D"V0`?`$"I<(X/ +M(``!V@D`[_NKP/'`L,&+<'8,X`40V079SW"@_CP"%;D$H2#`!*$"%``Q!*$! +M%(`P!*'/<*``@`Q`&(`/`*`(`-C)`MD`'P!``=A"#R``"'*PP-'`X'[QP((/ +MK_L!V<]P@`#\V@&`H\%!P!H,X`6"P"+%"B&`+X``A,FI<%X,H```V5QM4R7/ +M$+-OM7T`(4XC((:*(`@@?HY:<,*Z"R$`A,PBP8#*(((/```'*_@-XOO*(<(# +M`89*<ER2G!B +M"F``)P`?Z7#)<:(-(`4PVH+`P@P@`$39`,`5"!X`Z7`""&_\,-FI"N`%`=G*#0``T<#@?N!X\<`N#J_[!-FDP5H* +MX`6+<"#``-TJZ('@=O*"X'_T@EPR7$N#2`%#-K/ +M<8``!-4"&80/````@/S8`*G/<*```"`[@`J.&&`5>!EASW"``-C2T@U`!:EQ +M6/#/=8``2-@@C0$4@#`0<&"`SW$!`+@\ +M#0M!`,]Q``!D)2"@`>+E"A2(&/``@P#:%:%`K1#PSW"``.PD57A@@,]Q``!D +M)0\+00#/<0$`N#P@H`'BXPH4B`#9"O"!P%X)X`4$V=X/K_R+<`AQ\@CO_"#` +M?06O^Z3`\<"AP8MPJ@G@!0'9`,&`X`L--10"81$*7@)VV(VX +M%@OO^ZEQSW:!`.`-R7"V>/((X`4"V<]P@0`@#4'`MGCB".`%`MD6;4+`"B>` +M+X$`8`X"Q^IP'V?I<,8(X`40V<]P@0"@#;5XN@C@!0'9Z7`6"J`%$-D6)ED3 +M`1&`,)#@RB"*#P``=P#/(&H#H`KJ^\HA2@.`V``EF!^``/#(`!@",`HC@"^` +M`&S<2B(`("/P!.@`&((T""14)#<($"$`P%X.8`(/>!,.]2`(<0\.$"`+#D0D +M"0E%!0#>@.;*(($/``!X`,\@80-,"N'[RB+!`T`B4B!,(@"D_``&``+`%2"` +M!#`G#R!!+X`3!">^GP`$``'"N`0G@A\````8,B,6($/'02K5`@'>9/(CP7,/ +M'A)!+\,0P;L!XT$O0!3!N``@T0"@XSW*``-![5I)3)X`0 +MY;K&(8*/___G_X_S>]B-`>_[C;A<:<&Z`6H$)X,?`@```#&[`"C1`%,GP!!` +M+<,@=7M:8E5Z>F(:8L]S@`#,XDIC`=Y1(L"!SW*``-![5I+`?N6ZQB&"C___ +MS_]G\X#8/0'O^XVX.G9D\0(1@#`R(P`@@>#*(((/``!Y`"`!XOO/(&(#`Q&` +M,#(C`2`!V(+AP'@+#%$@@>'*(&$`@.#*(($/``!Z`/0`X?O/(&$#5@J@!*EP +M`<+/<```&!6V>B"2"2$```"RP@D``$4"K_NDP.!X\<`F"J_["-FBP=@2#[;/ +M=:```"[5A48.H`6+"1X@.`!V,!X +M2WC*(($/``"F*(P(P?L`V!6EO@J@!3_8`,`$%`$Q%:5Z":`%@KG5I5()(`#8 +M&MBS(0*O^Z+`X'CI`X`;Y0.`&_'`J@F/^PAVSW>@```0#1<`EBAU0B``"$@@ +M`0!`)0`2$'$\"04&!VT$((`/``#\_YVXG[@P'QB0V,D`'P!`(KT%\``?`$`$ +MYF&]^PVUD`"&`MD""2```=JY`8_[\`/;SW*@```0!AK8@#`:F(\`H!@``MH@&H*PR!(#M@`?P$"1 +M$@*W`>*1&IRP`!\`0-@2`K;/<*```"``'X!``!]`0`'9):#/<8``&-("@4"` +M`!^`0`.!`(`"V2$`(``!VL]PH`"`#$`8@`\`H`0`V,D"V0D`(``!V@/;SW2@ +M```$:J3/=*````P'Z1,)4``1"9$``J0$\`BL`O`$M&>DSW"@```@`^IF&-B` +M.X#/<(```";@?R"@X'AE`8`!8(!`@1T+@0!BD$*1%0N!`&*`0H$-"X$`1I`& +MD0D*```!V`/P`-C@?O'`P@E@`0?8`=G/<*```!TKH-H)H`$H<-'`X'X#@`0@ +M@`\@````0B``@.!_RB!B``#;%PJ0`$.!`=OMND"!P'OMNL\C80!EH&"!08%@ +MH$&@8H%#@6*@0Z`!@<]R@``4&BBXQ;@5H@"!/+@C@<&X*+G!N3A@X'\6HO'` +MB@J``2X+@`'1P.!^X'CQP&8/3_L(=4AWO@F@`6AV@."0"*(!RB!"`Q,.41"I +M<*X*H`'I<;(+@`&E!T_[X'C-`X`;`]G/<*````0HH![(SW*!`)P,89+/<8`` +M&,84>022:+'$$@.VF!D$`*`3`0`#@H8APP\E>.!_H!L``.!X\<#AQ<]P@0#0 +M$@AU`(!/"%$`#'`]"%\&SW*``*0'+X+/<*``@$0+"=X"$H`"\!&`SW&@`(`@ +M,H%AN!D)!`"^$@`!$0D%``.%AB#/#YNX`Z6J"*_\J7``V`"E%0=/^^!X\<": +M#D_["';/=8$``!,`A1<(40"&"*_\J7``V`"E`87E!F_[`*9?V!$%K_N,N.!X +MX'[@>/'`.@U@`#S8SW&``"PB`*'1P.!^SW"``"@B`(#@?X8@_@_@>,]P@``H +M(@"`X'^&(/D/X'CQP.'%`-C/=8``*"+Z#&```*6&(/D/D09O^P"ESW"``(BZ +M+0-@`@"(X'[@>,]RH```'!.B-*+@?O'`K@Y/^^8-3_NFP1IP*'5.P8_#`-DH +M<@CP!./\$PR`$FJ#<("@`>+S"D2#!=H5NA`:``0&\!)I,"0`,`'A!*+W"42# +MSW:``*PB`X9`)9(00G",(,>/BW=*(4`@CO?/<*````PS@!2`#0D!`)8/``$J +M<`/P`-@(Z".&`"&`!`.F`=@&\`:&`>`&I@#8+^A3(,`D0"T!%@5Y`8;//S"T2#SW"@```@.X`! +MAA5Z(*(DA@'@"'2&),>?`>$DI@7R)88!X26FR+@!IB3<6P5O^Z;`X'CQP,]P +M@`#0_%790-K&#N_[B[KZ#"_]%MC1P.!^!0```/'`X<6TP8MUJ7#/<8```-JF +M"*_[4-H!P`GH?@N``0?H>@H``?X/X`"I<#$%;_NTP/'`L@Q/^PAW*'8`W0OP +M%0Y.$Q1OE@Y@`*5XD>`L"8(``>7O#122]01/^^!X\<#AQ0'9X<%`@"&`SW"` +M`(BZH(B$ZN(/``((<<]P@`!8>H0M`1/N#^`","!`#HMPK@KO_P39R01O^Z'` +M\/'`!@Q/^PAVSW6``.0B`84H=T`E$!0QZ/_9 +M"+D$)T`0,'#*(((/``"A(8P*HOO*(<(#\G_O?_`@@R,>\$5Y(Z4:\"\HP0!. +M((P'`-D/(0$#,G@$>P#>`_`!YAT.%1+/`.E +MY^OU`T_[X'CQP`ASSW"``.0B0"`,!`&`%.CP),`0%0H>`"1X'0D``,]P``"D +M(0?P$0D``,]P``"@(1(*K_MHR"C`>#Q"%2#X'_!Q>!X\<`J"T_[#'"]"-X%+'"Y")X#SW2J```$HH0' +MV$$M`1(O>8FYSW:``&0(:([/MHRZC((1`$H\` +ME.]02G!<,(A8@`'V`KP12G^ +M`D$I`7$&\"*Y!/``V0C8+J)!A"^C3*/DNLH@(@+ANLH@(0(/"IX!!-I#KDJ3 +M@KI*LQL(T0$5";0#!]C/(`RB!B``OP@.#*(&$`RB$!``7R&0A1``/9`-C//'`(@I/^PAV&WW/<*8``$``@!\('P".#F_[`]B` +MY6&]]?7/<```I"BB"*_[R7%A`D_[X'CQP.H);_L($?"94" +M$FD4>,=P@`#PZT"(\0N!@`&(Z0T!D`GPSW```,DH:'%J"*_[J7(`V0*Y-'D` +M(8(/@`#PZP*"SW.G``!(%J,/@R**H+@E>`^C#X,CBMZX'[DE>`^C!(K/=J0` +M`$`#IF(,``*!X!F&SR`A`-`@(@`9IJ]Y^@@@`.EPQ0%/^^!XSW*G`(!((((@ +MH"&"(:`B@B*@(X(CH"2"X'\DH/'`SW"``(P+K@RO^SW9@]@(N,]Q@`#\#'X, +MK_N@VM'`X'[@>/'`%@EO^PARSW"``,PC\""-`,]P@`#$(TY@H^G/=X``-"0` +MAX#@RB""#P``QRB4#V+[RB&"``'8`*<`V`[P]"4"$"G9$KGP(8(`SW&!`!`% +M%7E`H0'@$'CG"(*#%_``V`[P]"4#$"G:$KK/<8$`$`7P(0$`=7H@H@'@$'CG +M"(*#`-G/<(``-"0@H/4`3_O@>,]PI```0#.@X'[@>!"Y)7C/<:<``$@"H>!^ +MX'@M"+,#`-S/O0B0``S@R5X$Z,A +M\,]R@`##."$&,E>!.BX'[QP.'%)@@@``AU"B(`@,H@@@\``/\4G`YB +M^\HA0@-9`$_[X'C@?N!X\<#AQ0'=C>C/<*``@#`+@`'=!""`#P"```"`X,!] +MH@C``<]Q@`!0>TN)`-F`YXX'@'V<]R +MH```!"^B"?`N@@D@0P`D@F)X>6$DHOKHX'[@>/'`1@\/^PAV'A(!-L]P@``8 +MQC1X$8@0Z,02`;8!@1D(7@/$$0``SW&``+`D%7D`@1#@`*&*"4`>'@R@`A[( +MQ,D!V:`80`#)<`8-(!X=$@$VQ!("ML]S@`"$R1"*0",-!`.X%7A`(X$#&V,' +MDR\(4@!AN`>S4(H3:A5X$&&/Z`#8#R"``-()8`4?V<3)$(@S:#5Y,67AN40/ +M@AT9!P_[X'CQP*8.#_O/<8$`A`P@@3D)40#/!?6YX2#"!V38X']#2_[+'H:.,@@@#*(0(`-04/^^!^ +MX'CQP-(,#_NAP0HG`)`H=1IR0"`."":.!O()#4,0`X>-Z`"'0"T"$A"X!7K/ +M<```Z0YB"V_[17G/<($``'0="`0@SW"!``!Z$G#*((T/``#X#D`+;?O*(0T$ +M0(Z@K@*.0:X<'P`4#N@#C@GH((?OV!"Y!+BE>3(+;_MDC@'8`ZZ&\`'8`JY* +M(P`@BB3#+R2.`Q["%``6D1`&CAP7$!`,>4.'`"%`=`AB`-T)"``%H8<5?4:' +M%>I@P0(<0C0$[0&-`_#_V`$<`C`$[0.-`_#_V`,<`C"+<6!ZZ7`DCI)QS"4B +MD`ST`(<(N1"X!7G/<```Z`ZB"F_[!2%!!"2.08U*(D`@4''"(H$D-0F```6' +M`-H-Z"E@%PD`!0&'-7@CB`L)``4"A_`@0@"`XLH@0@3C(((`RB$"!/_8!*XC +MC1,)``4"A_`@0@`J<&!Z"G$W"A`@`8T$K@2'(8T`V@SH*6`5"0`%`8".( +M#0D`!0*'\"!"`(#BRB!"!.,@@@#*(0($`XX-"!&``A["%)T#+_NAP.!XX'\F +MH,]P@`!/'`2@LO^PAQA"@&!``AC7^```@FPH6%X,H@A@\```(T +MV`EF^\HBA@.%YLPFXI$`V`+T&86!`P_[\<#AQ8P@`H"8<`38&_)`+,T`M7W' +M=8``A,D`A88@]X_,(2*`RB""#P``_P`+](7H"(41"%0!*]@(N(();_N(<0B% +M10,/^^!X\<#*"@_["';/<*```""[@/8)X`0H<`(F`1`+"5(`/64#\,)X`GT1 +M`R_[J7``V`*C`=C@?P"CX'C@?N!X\`7<%;P(I!P<@!\`:@``:H0(I"9[97I) +MI!P<@!\`:0``X'[@>`79%;D(H1P9@`\`:@``"H'@?N!X!=H5N@BB*:(<&H`/ +M`&D``.!^X'C@?N!X\<#AQ78+K_XQV+1H;@NO_C78!7T8O9&]SW"``%#8-@V@ +M!)*]*+A1`2_[I7@`V0KP0-B?N,]R@`"8#S5Z`*(!X2$)%0@`VMK)#R)"`$MX +M"/+;R4MX[O70V)^X[O$`V.SQX'[@>/'``=GAP<]P@`!H)""@BW`$V0H)8`0H +M#`?38.X`2[?0#9SW*@``!(SW>@`(!$ +MSW"@`(Q$.*!D&IB/"`````C89!H8@,]VH```10`>@!\`0```X'@@IL]P@``H +M`1!X%*?/<(``"`,0>!6G--@1IQS8$J&HA0`%!*<``4B```,"X$WC!N(`@"`@J(@``RW-E!B_[ +M?-C@>.!^X'C?R8>XWQH8L.#)F[C@&ABPXLF'N.(:&+#CR8"XX'_C&ABPX'@" +M(0(`$PZ$<`"````P<`'8PB`-``+P`=C@?N!X#WD;"74!`-J$*08$`"&!?X`` +M""9@@0L(P`!(<`7P`8'["%&``=C@?N!_`-C/ +M!"2BX'[/<*```!P!@"QPSW"@```<08``V9VY!"%`0$MX!?+@R;VXX!H8L,]P +MH```'"6@X'[QP.H.S_K/=:```!PVA>/)SW*@```@)'B*)@00$0@>`G<2`(9N +M"<_\UJ4(\`T('@!V"D`$`=@6I1T'S_KQP*H.S_H`W<]T@``$"@`O`0WJD&[_K)<.!X +MX<4(<0#8"',0\,]R@```!O0BP@!/(4T"AB+P`P\@S`"Q$7"14$SW*````&]")"`,FZ[PB!@`+P$=G@?RAPSW.``,`E +M\",#``*X%'@`((P/@`"`)0*$#R#```*D.=@$'(`?``"`'`>X%0G>`,]P@`"` +M'`0<@!^``(`<"0D>`9BX`:0)"1X`@K@!I`/J@;@!I`L)'@*6N`&DX'[QP(H- +M[_H`V0AVSW"``/3:`8"BP4'``=A`P,]W@`"`)2"G1R;-%\2]%/`O*$$#3B"$ +M!\]Q@`#`)?`A``'_VA3A%7E`H8MQ3@MO^RAR$"4-$>WM2B8```HD@`$K\"\H +M@0-.((T'SW*``,`EWEG!!$%`/`B0`,B@04F1@$%)$0`^V-C@R"'%.)E +M>2"G%7J@HJ]YA"D&!``A@G^```@F0"(!!.X*;_L8XA`F3A/8[L]RH```*``: +MF(&S$@&&0"P``88A`PR&(/P#)7BS&AB`!!J`CSH$2G`9!>_ZHL#@>,'9SW"@ +M```HSW*@```E(:+/@`B@P^``(`E0H,5?!`B`@!"HT6$$PF!`/_9):2+<=H);_LH(0H!@3/<8``$"8P +M(4,.SW&``,`E\"$"`,]Q@``HY_`AP0`#NEAY`K@4>``@@@^``(PEX'\@HN!X +M)0@5!`#;SW*``(`%SW&````&%"$,`&"T%GI@HF&B(.$5>6"AX'[@>/'`X<4( +M=<]QH```)$J!(H$`V""E%NIW"=\'SW"``*0'/8`*V&3A,@I@!8RX#'`7"!X' +MSW&@_M0"!=@5N"2@']@E\"QP^+@`V!ST#'`5"%X'SW"@```,+8`+@"3@"0A$ +M`!C8#?`#V/()8`4`V6QP]0@?@`QP[0B?A`#8@.#*(.($SW&@```D(H$@I3$# +MS_K@>/'`SW&```"!'H&'Z`'8Q@M@`!ZA`_"V"0``T<#@?N!XSW*``/![0"(! +M!#`A@0\``#P(`-B/Z8`B%`0V@HOI-X*)Z3B"A^DY@H7I.H*`XP#=`">.'P``\`BPKB27"B"`+P``__\`)Y$?``"P"*D)(@16 +M)Y(5R@I@`0C8F0@#(*8*8`$(V,=P``#^_V"`;WF*(O\/5!F`(',)40`$(X$/ +M````#RBY9PE1``0C@0]_``#P++FIVE<)@0`$X"/P8(!*<<2[@"$6`+5Y8*E@ +M@`'E!".##P```/\HN\2[8:E@@*]]!".##_\````PN\2[8JD$$`,$!".##P#_ +M```XN\2[8ZF_#8*0`=@0\`38$*Y4&<`@#?`$EQ)P`MB(]B(*8`$(V`L(`00% +MV!"NR0'/^N!X\<`^"```"NC/<(``4'L$D!\(@P\``!$,(@@```OHSW"``%![ +M!)`/"((/```1#`'8`O``V-'`X'[@?P#8X'\!V/'`-@GO^@AS2'6Z#^__`-K/ +M=H``\'L4Z(#CS"%A@03R2'`2\)8FA!!=%@"6^N@F"D``"H8/#0`0`-@&\)8F +MA!#Y\0'870'/^O'`X<7/=8```(1$%8`0"PA1`0'8&*7/<(``Y"5F"(`$`-A> +M'1B0/0'O^ET=&)#@>/'`N@CO^KAPF'$^"6``2';/=8```'P(=Q,.$1$P)8`? +M``!8!8#@RB@BO_P#8@.#,)N&0 +M#_3/<(``."(5B!$(W@#/<*#^)`8Z"F__`-D!WXT`[_KI<`BX!""`#P```/\% +M><]R@```A`N",K(!X.!_"Z+QP/8/C_H(=2AW6G)H=@HA@"^```!\L.#,)R&< +M!?*`YJEPT@[O_\EQC.AL$0(@+R&*!%EA`>&5($@C`!A`(`4'C_KQP.!XX'C@ +M>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>-'` +MX'[@>,]Q@`"N>U(P@PX\`V1?RCN#A(,4'P"!E`);@P"BE`.$@Q0?"("4%HN#` +M**4`X2#%!\`@)0,+"-0)*'#@?@*X@B`"`N!_@"!"!>!XC"##CP#9$?*.X.$@ +MQ0?`(&4`JN#`**4`X2#%!\(@)06,($*-P_P`AC0\``+`(`=_SI$@T@`0C8#J4&V(`@52L`&`(@ +MP02O^LEPX'CQP%H,C_K/=H``4'N*#^__5B:/%=8*[_\(=0;H`=B`)Q49`*<0 +M[0(+S_\+Z+(,(`$(V`?H0"8!%'(,(`0GVDX*(`"I<'T$C_KQP`X,C_JBP0AV +M*'<*((`O@```?`#=B?"+<40@`P-"NP2[97G!N`:X!7D@P`IT!""#`$:["+ME>40@`PQ$NPJ[97E$(`,# +M0KL,NV5YP;@.N"5X`Q2!,(`D%!`$(8,`1KL0NV5XYMC`Z-$(0`#0KC! +MN0*Y!7D"%(`P!N8$((P`1KP$O(5Y1"`,#$2\!KR%>40@#`-"O`B\A7G!N`JX +M!7D%%(`P`>4$>D:Z#+I%>40@`@Q$N@ZZ17F&(/\,0K@0N`5Y(<`DHPAQ"'*& +M(?X/GFF&(OT/FWQ'NH5Z1"`,"$6\`KR%>D0@#`2&(/\-1+Q#N`.\!+A"N85Z +M!7H%N45Y):,`EP/@`+A)O%'B`(10`.&!#H"'"`Q2!,`BZ17D% +M%((P".40ND5Y)*`'%((P!A2!,`BZ17DEH``0`"$!YP3@`!@$(#(F@!\``&T% +MGP\$D*$"K_JBP.!X\<`V"H_Z&G#/=H``\'OZ".__*'6*)TH1@.`*<$`F`10; +M\FH*(`36V@IP@"`&"\EQ@"&&#U8*(`36V@IP@"`-!LEQ@"$-"T8*(`36V@"5 +M@""*``"U!_`V"B`$Z7(`E1]GX+4Y`H_ZX'CQP-8)C_H(=2C8_!P,L%8E@!*+ +M=H8/[__)<0`4`#$%X!!Y`!P$,!0E0!#/<8``4'LDD==Q```1#,EQA?;"#L__ +M`_""#<__`!0!,10E0!!:#.__R7$B#X__Z0&O^J'`X'C/$0HO@9">0`A3@Z,)@J9RB"&#P``)`G$#Z;ZRB&&`ZEP@"`6 +M`,Y@,B6`'P``;040=LH@A@\``"4)H`^F^LHAA@-=`:_ZR7#@>/'`U@B/^AIP +M"B*`+X``8'L`W5SP%")1(P`1#R&2"N__J7!Z<$`@`"$B"^__:G$(=@HD@)/* +M)&(0H+^%?X<.$!""Y@'8P'AS:,]R``#]_P0GCQ\``/7_9'I%?QMX!7\^#^__ +M:G`*Z`0GCQ\``-__@>8!V,!X!;@%?U`G@1$`V`\.D!"!YM$A(8$"]`'8@.#* +M(&(`!K@%>2\-M!,P?P@0`"`$(8$/``#_^4$HP@#`ND`JCP+/<@``__U$?R5_ +MY[C/)V$2`!G$(P'E30W4F6$`C_KQP!H(C_H(=@#=#O#2">__J7`(<9H)[__) +M<`AQ@@O@!*EP`>7I#=2970"/^O'`Z@]/^DAWSW"``/![0"`!!`#="':`)A04 +M"NL'V!^F'8:`X-P.@O^I<"/P3@Z/_U^&&>@S"L0#'88'Z`L/51'"#H__$_"` +MX,PG89$/]!\*Q`,P(8`/```\"(#@K`@!``7P"PK%`P'8`_#_I@#8Y0=/^N!X +M\<#/=(```(18%`.6`^L!V!CPA>+,(B*!$/1`*`("!"*"#P```/]SE"5Z$0K! +M`"8@`V-'`X'[QP`ASSW*```!\N@VO_P#9">@P(H`/ +M``!\!1!SRB!"``+T`=C1P.!^R>!$W,PA`8,+\M+@5=S,(0&#!_+%X$?/'`X<7/=8```(17A<]P@`#D)12Z)H!=>B.!(('*#B`$ +M66$!V#4';_I='1B0,F@T>0`A@`^```R!X'[@>/'`SW*``%![6!P(L``B@`\` +M`+`(_^G-N`)`(ZT<#@?N!X\<`^ +M#D_ZSW6```!\V@G/_S0ECQ\``%0%"-@$)XX?````_TB^[W^`)14?`*7)<+(( +M(`#I<8#@RB"!#P``(PG*(8$#L`RA^LHBP0/)<.EQ!]KN#:__`-M1!D_ZX'C/ +M=(``4'M6)(,5,B.##P``;`41"]`/A)0-#(,?``#__PAS!O"!XLPAXH'\]>!_ +M:'#/2"PX'[QP.'%SW*` +M``"$+((*H@'AR@[O_RRB`@^O_PAUC@SO_ZEP6@WO_ZEPW05/^L'@`=J']MK@ +M!?;!X8/VVN'"]@#:L.#,(2&,!O*`X,PA(8`#]`':X'](<.!XSW```*W>X'[Q +MP"(-3_JCP0AU`-X!@)F^X[C*)J(8P"XB%M$@(H'*)J(:P"XB%HMP0"4!&!`5 +M$A`4%1$0&!40$.>%R@BO^@S:(87)<$*%"B2`!&.%"B5`!`HF``22#"``^'=J +M"R``J7#/<```5549!6_ZH\#QP+X,3_H(=P&``-[:&ABP`H?<&IBSVQH8L-X: +MF+_0_@```(>+X,H@@B,$]`P7$!#""V__!=T5O(,]P@`!@ +M'0"`@.`L"@$`$@P``*X+```)\,]PH```1P`8@`\`@```1@P@``IPU@N``-H2 +M`;:`X"SN+6XN+@$I=X:&+`"\,NESW`` +M`%55?01/^N!X\<`BD`AS2"%!`0.0#+G+N(^X@H,%VA6ZBZ(E>!`3!``4$P4` +M(8-"@\X*(`!C@\]P``!55='`X'[QP-H+3_H(=0H@@"\``%554@H@``#>&7;X +M=LEWR7+)<+AVV'8/\".%#R6%`-P:6+`*((`O``"MWC_:!!R"`&AR`>!U")4! +M`"4$$`04@0#U"="/86I*(0`0BXT/(0D0"R1`D@#(O(4%000`84BA4.%#@H@ +M`&2%R7"""2``J''I`3@SW.@`(A&`-H'\/`@@0`! +MX@0;4`#Y"I2!SW```%55X'[@>/'`3@IO^HH@SP^TP00<@#^@````"!R`/Q\` +M__\,'(`_H``,!$3`%!R`/Z````Q&P!P<@#^@````2,`D'(`_H```<(H@WP]* +MP"P<@#^D````,!R`/P,`__\T'(`_J````#@<@#\#`/__/!R`/Z``$`!`'(`_ +MH``0``#>4<:*($0`4L!3P(MU\@[O_ZEP@<#)<8H+[_H@VDH/[_^I(/(2'"$+I%>044@C`8ND5Y +M*:#@?Z7`SW&@``!(`!F`CX``````V($9&("`&9B/`(```.!^X'BEP<]SH``` +M2``;`(`,&P"!+R)(`8$;F("`&YB/`(```.!_I<#/<:```$8`@44@P`$`H078 +M%;@L&(`/`(#0`.!^SW"@``!&(!B`#P,+`C\D&(`//S\*/^!^I\%"P\]QH``` +M1P"A"!0`,4@@``,0N`0@@`\/````!2""#T`&`(`*%``QR+A%>`&AX'^GP-H2 +M`K;;$@&V&PI``!UXP+@;>$4@00'/!^X'C/<:``@!T5@00@@`\!^/__%:$`V!:A':'@?N!X`]C/<:``@!T=H1:! +M12!`#!:A5!F`#Q````#@?L]SH`"`'3:#4"&"!).ZA.A6HP7PDKF3N3:CX'[/ +M3&#/$"`SW&@```?7J$!@!^AX'[/(8CQPN&(?@'!7DE>^!_8*+@>.'%SW2``'`%HH0E>`0E +MC1__P!C^!;J&(O@'!7H8NT5[97VBI.!_P<7/,]QH`"`'1:!M;@6H>!^X'C/<:``@!T6@;&X%J'@?N!XSW&@`(`<&J'@ +M?N!X\<#V#\__H@IO^@;8T<#@?O'`X<7/<:``@!RZ@=H/S_^&"F_Z!MAU!B_Z +MJ7#QP.X-#_K/=8``K"(#A4`HD("AP6WRSW:@```,[8::#^_^BW`*(8`OH``` +M$(/H/P\%%`"%0X5!*($`(GB?"(4`FP\4'H2%!H5`+P,4F&`&I1"\`,?/<*#^ +MW``"V85ZF@@@`.5[#@D``#GP0"#`(00@@`\``/S_G;B?N#`9&*``'X!/`(#W +M`,]R@`#0_`/PR+DBI62%(H7P(D``&.N`(_^/.+ADI0';PB/!``'C>&``V]\+ +M!8#P(D\``!_`0X.%`>%AO(.E`>/V\0'A`J8#V`>F`X4BI6&X`Z4AI2V&`(4" +MN`\)!0`#V<]PH`"`'2:@804O^J'`\<"Z#0_Z4FD/X@0B@@\``/S_SW.@```0 +M,!N8@)$2`K="P1"ZA2+##0`?@$"1$@*WT[@!X@0B@@\``/^_C[J1&IRP&+DE +M>``?`$"#P@#9"/`$XOP2#(`!X0`?`$,"P/4)!(#/<*```"`;@`(;&(`#V`<; +M&(#1P.!_J,#@>`#8SW&``*PB!*$#H0&!X'\"H>!X?0;/__'`<@P/^C()(``( +M=@AUR7"^"2``J7')!"_ZJ7#QP%-H5'K/``@C0^!`)`'0"4`$K(-K_H0 +MV0#8?00O^@&EX'CQP/8+#_H(=AISA"X&%,]P@``0)C`@0PX`(8U_@``()QR% +MGP@0`(3CRB)A`,HA(0#)<&(/[_\*`#R7`Z<#(*X`/)<+AP4R%`)<]RH```(%N"!"&!+\#_```"(@8$ +M`B4"```A@P]`````4'#*),4`RB1&`/JER7#R""``Z7$")8$!R7":">`#!2$! +M`6H,S_N`X%0+X?O*(.$"`_``V!JEF0,/^N!X\<`V"P_Z"'6$*`8$`"&`?X`` +M""9H=A,*4`!=@`4J?@!`*8%R/F8B@!-M%'C'<($`D`<`WQIP#0D1`>"@Z7$- +M\``0`""'Z-8.[_^I<`'9`!A`((HA!PT"O4-U"1U8$`*'-'@Y`R_ZPG@#N,]S +M@0"0!Q1X'&-`A!#J@H0!V@GP>6`(X?`A@0`!XC!TRB1&$/,*%(&3>>!_*'`) +M"7,``-HS>L]Q@0"0!P.X%'@;88&#.&`(X)5X0*`!;,&XX'\!H^!XX<4#N,]S +M@0"0!Q1X`F,.ZAD)$P``W0CP?&"U?$*$`>4Z8D*D]0T4D>!_P<7QP$X*+_I* +M(4`0HL$`W$HF``B)`'C;WOSZ`#: +M&73X=)ATN'0W\#(DCC"*)084K'[/<8``""8`(4`.-!`+`$`A"@P%)\<"SW>` +M`$@GO!``!T`G"QT()`P0K'XG=QR7"PT#`#87!1&L?C0C0!X()`0`K'XP(D`> +M@.#*(2$0K'XG<5,1``8!X@4@"!`+@4]Z!"8&`)<*PH#/&@2#W!I$@6`9``+9`2_ZHL"$*`8$ +M`"&`?X``""8B@`\)4`$1"=`!`-C@?N!_B!```.!_B!```.!XA"@&!``A@'^` +M``@F(H`3"5`!$PG0`1,)$`)DV.!^X'\=@.!_'8#@?QR`X'CQP.'%"'&$*`8$ +M`"&`?X``""9"@`#=&0H0`1D*$`+/<```%C2F#P_ZJ7`&\!Z`!/"$$```60$/ +M^O'`X@@/^L]V@``()L]Q``!H#'(*K_K)<`#=%/"$+084BB'_#X#:J7``)DP> +M(*0`(8%_@`"$)T"IM@F@&@#9`>7=#521_]G/<(``B"T!`2_Z.:#@>/'``-@" +M\`'@'0A5`80H!@3/<8``$"8P(4$.[PE1@2H-S_X#\`#8T<#@?N!XA"@&!,]P +M@`!0)S`@00[/<(``B"0`@.!_)'C@>`#:`_`!XA\*50&$*@8$SW.``!`F,"-# +M#NT(P8`!V$"A`O``V.!^X'CQP!8(#_H(=H0H!@0O=0`ED!^```@F,!``(``E +MCQ^``$@G!N@)V!JW+M@%\!38&K""("0F2`&&Y(*@!XD]ZZ0H2@04` +M#_KQP*(/S_D(=2AV`-\"\`'G*P\5$80O!A3/<(``$"8P($`.B.#,("*!\_5F +M#N__Z7#?#0&0X*8!V`+P`-C-!\_Y\<#AQ0AQA"@&!``AC7^```@F`H6%X,P@ +MXH'*(((/```U-.P-`OI`)0`6525!&V8.8`,&VD`E`!2I<8`A@@Y6#F`#!MI` +M)0`65B4!%D8.8`,&VHD'S_G@>/'`X<6$*`8$`"&`?X``""8J@`0AOH^``0`` +M4A`-!A#R0H`="A$"OKDJH`KP+RE!`TXA@`?B#N`"$"4-$/CM10?/^>!XSW*` +M`%C7()(E>.!_`++@>,]P@`"@TDD&@`/@>/'`K@[/^<]Q@``0QD"!A^@!V#H* +M(```V33P`-D*\,]P@`!L)/`@0``5(DP``*0!X>\)%($`W0?P`-@2"B``R7$! +MY:#M`-X/)DX3$PY0$(H@A`P_ZR7$2\,]R@`!L)`""*+A#@E,@P0!!*@`# +MP+@%>!X\<#AQ28*[_L(=1,-4!"*((0,H@PO^JEQ(_"KV<]P@`!L,R"@ +M(:`BH,]QH```(%N!3!$`AA!X&F(-VPCP3!$`AF&[$'@:8N!X]0M3@%,BP`#" +M&ABP02H``L&XPQH8L"$&S_G@>/'`I@WO^0ARH\$!VQ,(4`"*((0,.@PO^DAQ +M`-I(\`#:B>G#R4AQ`>#!N,,:&+!H/'`X<4(=07:SW"``!TT0*C/<(``0,@@H,]P@`"\TA8, +M@`.!Y/'`2@S/^<]U@``<-`"-BNC/<0``#__:#R`#`-@`V#/PG@_@`@+8 +MD>@`C<]R@`"@TF&X`*T&@@.`(("`(8(%#@R@`TAP(?``W=X/(`.I<,]V@`!4 +MUP"F"_!*#R`#J7'/<8``;"2U>0"A`>7Q#321`-C/<0``#_]Z#P`#*@_@`@+8 +M`(8>#<__,03/^>!X=0?/__'`N@O/^<]R@`!8UR"2`-V@LL]V@`!`R$"&!.I` +M>J"F!03/^?'`E@O/^<]V@`!8UP"6!^C/=8``'30`C8/H`-@_\.X.X`(!V)#H +M`(W/!X70?/__'`%@@@ +M``#8#@@@``'8T<#@?N!X\<#6"N_Y`-G."F_Z"'?/=H``H#,EIB"`SW6MWN^^ +M1PE``\]Q@`!\,TX*;_KI`/]@/9):8+ +MI@\/41#/<8``1"0`L07PSW&``-"8`K'=`L_YX'C/<```RR@5`2_ZBB$-"N!X +M\"L_Y;@IO^@#>A@I/^@'9!-S/"J_^J7&%Z``>@!^MWN^^#PU1$`#9H=@0 +MN"F@10+/^>!X\<#AQ<]P@`!0>P&``=TC"%X`SW*``/@S!H(#@""`QW$/`$!" +MK@F@`TAPJ7`"\`#8%0+/^0'9H=@0N"F@`MG/<*$```8AH$B`SW&``*`S!H!* +MH0FASW"@```@&X#@?P*A\<"&"D_Z`-C1P.!^!0`O^C_8X'C/<```K=[@?N!^ +MX'CQP.'%#@MO_@#=SW&``+QV(($Z""``(('J"D_^!>C."F_^`=@/\.X*3_Z` +MX`+8"_3/<*```#P/@(#@RB!!`\H@X@"%`<_YX'@*Z0#8SW*@```\%*)!*8`` +M8;@5HN!^X'@%V!^X'C/.!XX'C@>.!X`>+M"D2`X'[@>,]SH/Y@`07:%;IDH@#; +M#/#P(,(`0(+@>.!XX'C@>.!XX'@!X^T+1(#@?N!X\<`R#\__SW(`@!$$0MF" +MX,HA@0\``$(`RB*!#PB`$0S/(6$#$/*%X,HB@0\(@!$,RB&!#P@`0D`&\H/@ +MRB*!#P"`$12`X`#8!_+/<*```#PFH$"@`=C1P.!^X'@%VA6Z"X+/<:```$;* +M&ABP`('>N`"A`-@+HN!_`=C@>/'`X<4/'`X<4`W0SP!=@5N!`8@`^JJKN[*@SO^0;8`>7M#122$0#/^0AQ`-@(D1X0B``@.!_RB!B`.!XSW&@```@$*$! +MV`<9&(`0V`"AX'X"X3!Y06D-"@4`(G@0>`/P`MC/<:```"`0H0'8!QD8@!#8 +M`*'@?N!X\1&"$'@((0$` +M,'D"V`<:&(`QHN!^`N$P>4%I#0H%`")X$'@#\`+8SW&@```@$:&*(!@(`*$" +MV`<9&(#@?O'`H@ZO^8HB$```W\]VH```'.JF"B"`+X``>"4`$``@SW&@```@ +MSW6``"@TX*4*Z-P9@`\#`$`-`MA"H0"E!/!#H>EPSW&``'PE(($1Z<]P`0!@ +M462X$J;/<(``1`#/<8``;`5""$_^`(5%(``#A2!'!`"E<=@&N!H-K_[\V<]P +M@0"$#"*`SW"``&`D!.G@H`#9"/`#V1*Y`!B`#PP```#/<```3!SN#*_^G[D` +MA1?:SW&@```-0:&%(`@(`*4`$``@%.C/=X``D!4`AXSHSW&!``!T`-@/VA8. +M[_H#VP'8`*<$\/X-S_H`A0JF&0:/^>'$_!S(OOP<2+[AP.'!X<+AP_P<"+'\ +M'$BQ_!R(L?P@!0'V`JXP-D8N2X+K_X`VL]P@`!@)"*%`(`K>`'8 +MRB8B$SKT`(4A")$`3"``H,!^!/1F#D_^"':`YLHF(1TK\@'8*O`7"!X`$@NO +M_B#8#@NO_HH@"`!FWAWPC"`(@!CRD.`2\@?V'0@0`2D($0(\WA'PP.`*\HP@ +M!(`,]%3>"_"&W@GP1MX'\$S>!?!EW@/PA-X`V('@P`J!&>8*@!E"%`"FR7!` +MA0#9F@KO^2IST<#!Q&LDP!#!Q&LD@!#!Q)]T!!05-`04%#0$%!,T!!02-`04 +M$30$%!`TPSW>@```0 +M,!^8GP"@"```'X!/`(```#IPSW6@```,`J7'I<]PH`"`'<:@7@A@`!IPSW&` +M`+1U`*$H +M`D$HP0#!N6%I02A!!,&Y.V-!*($%P;G/Q$+=0(`V<]Q@`"'* +M((T/`0")#=4@3@#@?Z'`X'[@>/'`X<4'W0F]J7``V6(*(`",N3<-!1#/\=S@0!\!8*S`-R`LP(@@`\``/T-1B#``"*X`;.BHP'A(**5 +M`H_YX'CAQ0:X%7AR:75[>&``((,/@`!T=""SSW6``*C7`(7/=(``:#0"(`$# +M(;,GLT2S1;,!HQIB0*7@?\'%X'CAQ<]U@`!L=("%!"&##P#P``!2;%1ZQW*! +M`'P%/+MBL@0A@P__``#`+KM@LLFY(;(!X`*B`>2`I4APX'_!Q>!X\<"&"8_Y +MH\$(=RAVFG)Z$+`RB&P2`2!/(($"@.#*($(` +M!/``V(NX&0&O^:/`X'A3(OZ``-P)]`*S)+D@LR2Z0;.)<`+P!-C@?N!X\<"V +M"(_Y>@D``,]UH```(!N%Y@D``&H(````V`?9I@@@``FYSW>A``"`%2ZF$'@"I@2!,+@#I@6!$'@$ +MI@6!,+@2""``!:8;A;4`C_G@>*'9$+D!@:"X`:'@?O'`/@BO^0'9`-[/=:`` +M`"`;A:'8$+@AH%(/X`.*(`0+UW8``+@+`>8)]\]PH0``"!.`Z0A>@`#8`O`@ +MV#N%;0"/^>!X\<#Z#T_Y"'4H=@?PR+@$N"*X`>`=918)(`"I`*Y-7D980`A@`^``'1T`_``V.!^\<`(<0#: +MX@_O_TAP`^@!@`+P2'#1P.!^\<`(<0#:R@_O_TAP`^@$D`+P2'#1P.!^SW"@ +M```P$X`$((`/````(.!^X'C/>#N__`*'/<(``E-=-!V_Y`(`"N#`@@`^A``"` +MX'[QP)H.3_E*)0`@"B2`+X``;'0`'$`E"B.`+X``:#3/<(``J-<;<&8.[_\` +M&,`$"B$`L>SW&A```(9!E`!6`90`5<&4`%\@@@``HB0"46#,__(/`:[4`J +M@2`U><=Q@`!T=``9A`2S>!4@0`0!L4$M@A`"(8`@%2,"($&AI+$!V`:QNF(` +M&(`P0")2(`HE0"1S"A4D`-T*(4`EJ7<`%``@M0\%D!)O%'@`((X/@0!\!0*6 +M3PB!!`&60"@6`0"60BZ!(!4E%R`5(]`E"G!"""``0H;/<(``:'0@@`IP%2'! +M!<(-X`)"+H(@`98@ECA@!+BB>$@@`0`]92*Y`"%1(`'GSO%^#<__U05O^2MP +M\<"R#4_Y"'7Q#823\05/^?'`X<4` +MW0GPK@OO_ZEP`9`"N`'@'66N#N__J7`*(0"`]/6Z#<__G@[O_PAU"B$`@(0+ +MXO_*($(#S05/^?'`-@U/^8(D"#`:<#IQ6G)*)0`@SW"``%PTVG``&$`%BW!Z +M<-(.[_F*(0@`SW>A```(;!^`'R!.H`\!V`NG6!^`'U<@53!4'X`?(!(@$E`? +M@!\``0`!"B1`):IU"O``)0`4(@D@`/`B02,%)!0@`>7O#4249@@/^\]Q`0"@ +MANH+X`,`V`#:2'8@\&0?@!\``%4P8!^`'P``(!**(`0`%Z<`(@,$X@WO_VAP +M\"*!(!L)``!!*T$!%2-`(""`Q+L/(<$`(*`!Y@'BPPI$A$+P;!^`'R!.($X` +MW1+P`"4`%$$H00'P(T(@4R`!`1,*3@"6""``\")!(P4D%"`!Y=\-1)1D'X`? +M``!7(&`?@!\``"`2BB`$`!>G`-L:\``C``1!*$(!%2.!(*"!4R`,`0#:#R(" +M`ZMZ"_)2#<__\"+,(`\,`1``@6&^1G@`H0'CSPM$A`CN`!8!($%I=PFT@@`> +M@"!D'T`58!]`%5P?0!5J<(H-[_F*(0@`BG`)!&_Y@"0(,/'`Q@M/^:'!&G`* +M)D"0"B&`+Z```"!L$1(@`-@$]`4$;_FAP$#&(,#//'`O@I/^:;!`-T*)(`OH```(`H4`*;/<(``*#0* +M'%BC?@KO_Z"@@.#*("(HKO1L%``@"B6`+X``='2+<%4E029J#F_Y%-H!QL]P +M@`!P=`79(*B.[AIU-/"I<$IQ`-KB".__*G,%(!`@`>4J\`P4`#&+Z`@4`3$% +MV$*YJ7+"".__R7,:G"`YLPC(:`:\H#ERB:!%,HG@101"Q`@SW"` +M`%P"$Q4A@R"I<`(([__)<04@$"`A"Q&@!.<=#X64`-ZI#X64 +M`A0",14AP"-"NL]Q@`!H=""!^F)5>18+[_D0VD3H!.8$Y^[Q;!0`(!()S_\* +M#<_Z"G"%`6_YIL#QP.'%SW6G`(!)%PA1`"8,```0A48@P`%%(,``!/`0A48@ +MP`$0I9D!3_G@>/'`"@EO^2)Z>G!.?EIS%PXS$`HA`"%")D^0P"=D$/Q_!?!! +M+L\7WV?\?^U_`-@\Z8HA?P\P=\H@"R#*)TL0BO:)Y\HG:A+*(`H@1/93(A`` +M8V]*<"IQ5@@@`&IR"'4A"!`@9&]*<"IQ0@@@`&IR'64O)4:3P"5D$+Q]KGW> +M9M5^W66N?8PE/I#*((L/``#_`8KVC"4$FP#8!O;/<(``P'?T($`#O0!/^80H +M@0//=(``4'N*C"]P1"G^"2]Q1"I^`SA@)W!X8!,,D1#/<8``<.4S(0``!O#/ +M<8``..0S(0``X'[@>"T#[_D#V.!XSW&``(BZ`Z$!V,]Q@`!`>P"I`-@!J0*I +M`]G/<(``('I'&%@`X'^`(`,)X'BAP4#``A2!,`$4@#`-Z0,4@C!0(H$``KD" +MX>*ZPB!"`,`@00`/>.!_H<#@>/'`&0@S`0AQA"D!`\]P@`!<>C(@0`Z(Z.MR +MSW````H):@Y/^='`X'[QP`AQ#WB$*`$#`"&`?X``('H\$(,`3H`#ZQ$)@`#/ +M<```#@D^#D_YT<#@?O'`1@H@``]X8;@/>46YSW*``(@D-7HB@L2X`-L/(P,` +M*WL$\F9Y(J+1P.!^`=K/!"X17C/<:```#(` +MH>!^\<`F#R_YBB&)`$HB0"#\'(RT`AR$/P``'`G/=8``4'M>":_Y0"4`%,]Q +M@`!0A`:ABW`:<`39J7("%`,QBB3!"NX/8`(*)8`$SW6``)"+0"4`$RX)K_F* +M(4T%SW>``-"8.G<(IP+8`!P$,`(,]P@`!$).!_`)C@>,]Q@`#0F`L( +M40`!F0+P`)G@?N!X\<#R#0_YSW"``(BZH(@""R``J7`=Z`#>SW"@```0R:#/ +M<*```!P0&(`/(`````L-T!#)<`;P(@@``/L(48`!V(#@O`IA',H@00.^"P`` +M$08/^>!XSW"``(BZX'\#@.!X\<#AQ;8-[_\(=80M`1,`(8!_@``@>CT0@0`( +MX$0I/@?E!2_Y,B!`#O'`X<6.#>__"'6$+0$3`"&`?X``('H]$($`"N!$*3X' +MO04O^3(@0`[QP.'%9@WO_PAUA"T!$P`A@'^``"!Z/1"!``G@1"D^!Y4%+_DR +M($`.\<#AQ<]U@`"(NCH-[_\`C0&%?04O^0B(\<#AQ<]U@`"(NB(-[_\`C0&% +M904O^0J(\<#AQ<]U@`"(N@H-[_\`C0"-A"@!`\]P@`!?>D$%+_DR($`.\<#A +MQ<]U@`"(NN8,[_\`C0&%*04O^0F(\<#AQ<]U@`"(NLX,[_\`C0&%$04O^0N( +M\<#AQ<]U@`"(NK8,[_\`C0&%^00O^02`\<#AQ:(,[_\(=80M`1,`(8%_@``@ +M>BAP/A&!`$0I/@?1!"_Y)W#@>,]P@`"(NN!_`H#@>/'`-@P/^1IPSW6``(BZ +M9@SO_P"-`84!WBJ("B*`+Z```""!X_^!]@^&IBC`@_O_THA`"#/ +M=Z0``$#/=H$`D`P*(X`OH`"`,"<(40#*#>_^!]@9AX"X&:!X\`4```#QP,8(8!GAQ>(+@`"F"B`` +M!]@&"._Z"'7J"<_]S@^/_0'9H=H0NBBB!-O/<*$```9FH!P8@`\]```)**`` +MV`BBSW"@```=(J#2#._^J7!E`P_YX'C@?P'8&0@S`0#9A"@!`\]P@`!<>C(@ +M0`X)"%``*'`#\`'8X'[/<8``B+H@B8PAPX\`V`SRA"D!`\]Q@`!<>C(A00Z! +MX/'`F@H/^:8,S_\`V,]UH```*`:E!-G/<*``@!P[H/X. +M+_D&V,]PH```,`.`;PB?!@#>CKY>""_[R7#+>`'8PB`!``2X3R#!`,]P@`#0 +MQP*(@N`!V,!X![@E>!"XA2"2``&EN@XO^0'8*@@O^\EP@+@!I00=@!\S`,<` +M!!V`'P``PG($'8`?``#"G00=@!\``()M!!V`'P```J/_V2O8$K@@H"&@G@\` +M`%T"#_G_V,]Q@`"(N@"I`-C@?P&A\<`%Z*H-C_D&\`'9SW"``*P0(*#1P.!^ +MX'[@>/'`A"@!`P`A@W^``$!Z/8L`(8!_@``@>D0I/@<(X*()[_\P($`.'ZO1 +MP.!^\<"&"0_YA"@!`R]U`"6.'X``0'ICN"H'-A:<",)@``,>L]SH```(!N#`"5! +M%,8)+_XP(4$.`^@>CAVN6@GO_^EP78X`(4`C!"J^!"=P:0$O^008`"#QP!() +M#_D(=8X)K_\!V`GH!.#/<8``_'M*":`"`=IZ":__`=@(Z$#@SW&``&![-@F@ +M`B?:SW>@```@VX?"#^_Y`(6.#2`.!^X'C@?N!XX'[@>.!^X'C/<8`` +M&,0PD0#8#0E?`^"YRB!B`.!^X'CQP)(/S_@>$@(VSW.``!C&Q!(!ML]U@0"< +M#%1[48OPBQ,(W@'!:C(1C`#BK<.M994(\#$1C`#!;Y@3`P'"K4.M9+4`VS<, +MI1-CI<]Q@``$SQ4(W@$0@0P=@!]!`(,``>`0H0GP$8$,'8`?(0""``'@$:$B +M#0```X4*\!X-H!H$;0#8G;@,'8`?`"```&T'S_CQP.'%"'(/"%$`W@C/^@AU +M`O``W<]S@`!4&A"+"0T!$$,)40"PJX#ES")A@`?T!-G/<*``@!TXH`KP@>7, +M(F&`!O0$V<]PH`"`'3F@*@D@`*EPZ@TO^:EPZ@\O^:EP5@K/^AD'[_BI""``2'6!Y\P@(J#,)2*0-_+/=H``-!P0'@`4R7!>#F_]J7$? +MZ,EPJ7&J#F_]Z7(!V%X/[_\(<08(3_FJ#P_YW@TO^0'8!J;6#2_Y`M@'ID:& +MSW&``!0:7:'F">_Z'J%B#F_]J7"!X,H@80#*(2$`RB)!`+@.8?W*(P$`=0;/ +M^.!X\<">#J_^`=AZ#J_^`-A:#J_^`-C1P.!^SW*``(32!H(#@""`QW$/`$!" +MZ06@`DAPSW*``'`%`8)%(($%SW"@`(`?*Z#@?R&B\!A5`6_["(C@ +M?N!X\!A"@.`>PA-0=\]Q@``4&LH@ +M(0`&\@6`$'/'`;@S/^`AV&G'&""``]Q(-MH+@`-_*(<$#$O*R"```9MD= +M"-``SW"A`(`!$X`0>`4H@`\```D]02E!L]PH0"` +M`5J@X'[@>,]QH```,!P9@`\``@``"(&9N`BAX'[@>/'`V@OO^`#9SW"@```P +MQ(#/=8$`A`RI<(X-;_D,V@'8"0X>%`&E`_``I1T$S_C@>,]QH0"``1&!)KC! +MN`\(D0`W@88A_XS*(.(`X'[QP(X+S_AF"R__"'5^"P__7@F/^0AVBB$0`,]P +MH```,"&@`-AR#V_YB[B2"F`#525`%@8*``#%`^_XR7``V<]PH```,#*@@!B` +M#S(````-`8_YX'C/!R>BSW"@```<%!B`#P`(``#@?N!XSW"@ +M```P`X#`N('@`=C@?\!XX'CQP.X/[_\`V0;HSW"``'#$`("$Z"AP`_`!V-'` +MX'[@>/'`SW"!`(0,`8"AZ,]P```(''X)S_TW"-X'#'`O"%X$`]K/<:```!`P +M&9B/`*`(```?@$\`@````=@"&1B`!QF8@,]PH`"`'4:@T<#@?N!XSW&@```P +M`X&TN`.AX'[@>/'`@@_/_PWHSW"@`(`<&H`:#*_^1B#``=H/S_\$\`X,K_X$ +MV,]PH`"`,``8@`\R````T<#@?N!X\<#>#T_YG@[O^`;8E@[O^`;8D@[O^`;8 +MT<#@?N!^X'CQP,]PH```,`>`.PA?!L8/3_D>"6`#"M@/R,]Q@`#XT@'@#QH8 +M,`#8_QH8L,]PH```(!N`(($B>,]Q@`#TT@"A!?#^R0'@_AH8L-'`X'[@>,]Q +M@`#\VPEASW*@```P'8(0N00@@`_@____)7@=HN!^@.`!V,!X'+B9N,]QH``` +M,`FAX'[QP,]RH```,`."%PB>!B."ZW.\$@(`)@@O^8H@C`G1P.!^X'CQP%8) +MS_C/<($`A`P`@`#=$^C/=Z```#`$AW#>!O"^#>_X!M@!Y02'Q'@DN(PE@I7, +M(*6`M?>)`<_XX'AI`"``/]C@>/'`$@G/^"AV_@VO_0#9"'<"\*9^).XO*8$# +M3B&`!P#=#R4-$"8+X`&I<`#9!?"F>V"B`>$O>=\)4X%$+SX;`"&"?X``D#(V +M>DF*"WK/F""[?.E>^SQ'0'/^/'`M@C/^`AV$_`J"2``J7`/\"\H +M@0-.((T'KWWR"N`"J7`*(0"`$"9.$\]^[_7S[O$`S_@`V@3P`>)/>AL*4P%$ +M*3X+`"&#?X``D#)6>VF+Z0L.@`+P_]K@?TAP`-D`V@\B`@`"\`'A%PE5`<]P +M@`#P%/`@0`!+>/?S+W@"\/_8X'[@>`AQ`-@/\"\K00!.(X('3WH0(8$`SW.` +M`/`4\"."`"]Y17CSZ>!^X'CQP#D*4`!5"I``%PK0`,]P```%*YX.[_A(<='` +MX'Y$*#X+SW"``*#A`"&!?X``D#(&#R`"+-KS\8#ARB"!#P```RMH!L'X1"@^ +M"RAP`"&"?X``D#)(<>[Q@.'*(($/```$*T@&P?A$*#X+*'``(8)_@`"0,DAQ +MP@X@`BS:<@[/_\WQX'CQP'8/C_@(=@HE0)#*(($/```!*Q@.X?C*(8$#+RA! +M`TX@CP<0)18@@"-BD4"0$"7-$PL*XP"O?6"P +M8Y%!D`D*PP!AL&B)1(@'"L,`9*A%D2.0N0I"@-SM#0>/^`/8D01@`@#9\<"F +M#H_XF@FO_TH@0""!X"H-[__"(`$D`-A6#6__.G"6"8__J@FO_PAV"'56"&`` +M"G`*7, +M)2*:$_(9\",-$!XG#9`>$_!7)<$>(PE5!3,F07"``,#80">`!XR1J8OP```"`)`(_YX'[@>/'`X<4`W>'%BW$* +M#:_^"-@3Z+H,C_X`P8#@RB!"`+0*(OG*(4(#SW"``&PEH*``P#X((``!V94% +MK_BAP/'`X<6AP98+(`,H=0AQSW"``&![]"!``(#E`!P$,$@/(O[*(`('`!0` +M,64%K_BAP/'`R@R/^*/!&G"N#:_]*'>`X(;R&@YO^@IP+R4'((0H!B3/<8`` +M$"8R(50.0@BO_ZIP"'6R#&__`H`JC=IP"163$`'=`-@/($``+R('((MP.G`Z +M#B_Y"-DJ<,IQT@OO^4IR`-Y"QJ,,$"%##%`AH0P1(AKO@L$R#*_^!=@&Z`IP +MY@DO^"/`)W1#>!/"` +MY\HEXA`J<$IQJ7+)/'`8@NO^`AQ@B0",P]X +MA"@&!,]V@``()B]UOV92%P(6&G"`XLH@@@\``"$T[`G"^(MPU@^@`A?9E\#. +M#Z`"#-G89`V0`E +M@!^``(0G(*A5`Z_X@"0",^'%X<8`W,]R@``8QA0B`P"`LXBSF!L$`QUB(!T" +M$P]^SW&``%36UGD@D2@=`A-0&T0``=E@'4(0>.(5>H"BJ!L$`\'&X'_!Q1)Y +MSW*``(@D`((D>`"B`8(D>.!_`:+@>/'`C@J/^`AWSW6A```"`X7/=J```"C> +MN`.E`X7/=```PAJ>N`.E@>//<```0A%Z]`0>@!\$`,<`!!Z`'P@`@C@$'H`? +M,`#"&@0>@!^3`$(9`:8$'H`?)P""$00>@!\A`,(1^&<4>,=P@`#LQ("(Y.2* +M]@0>@!\!`$)>!!Z`'P$`@HX*\`0>@!\-`$)>!!Z`'PT`@HZ,)$*4DO8$'H`? +M#P""%@0>@!\/`,(6!!Z`'S\`PA@$'H`?"P`"&1+P!!Z`'U4`@A8$'H`?50#" +M%@0>@!\D`,(8!!Z`'P@``AD$'H`?%0#"'P0>@!\*`,)L!!Z`'PH``IT`B(P@ +M@H*+]@0>@!\4`()L!!Z`'Q0`PIQ`\`0>@!\>`()L!!Z`'QX`PIPX\`0>@!\$ +M`,8`@:8$'H`?LP!"&0&F!!Z`'RL`@A$$'H`?`P#"$00>@!^W`$(@!!Z`'P0` +MAA$$'H`?50""%@0>@!]5`,(6!!Z`'P$`@C@$'H`?#P"";`0>@!\/`,)L!!Z` +M'P\`PIP$'H`?#P`"G00>@!\0`,<4$+F!N8BYC+DAI@0>@!\'`$<1$+H%(H(/ +M``!&$4&F$0M1``0>@!\@`,81!O`$'H`?(`#'$00>@!\!`,85[@_@`@K8!!Z` +M'X``1A$$'H`?0`!"$@0>@!^``$<1!!Z`'P(`QA4$'H`?$``&&.H+(`#I<`0> +M@!\0``<8!!Z`'Q``QA3Z"R``Z7`$'H`?`@#'%0.%OK@#I(#@\<``V!CT"O`:8%1ZSW.``)C$ +M2F,Q"8```>#O")2##/`:8%1ZSW.``.S$2F,9"8```>#O"!2,SW```(89L@Z/ +M^`#8T<#@?O'`J@@``'X.C__6#P_Y#@@``-'`X'[@>/'`SW"``%!["H@1")$` +MSW"``(02F-D&\,]P@`#,$)+91@X/^7H.#_G1P.!^\<#AQ<]PH```,`6`4B`` +M`%$('P!>#@_Y3@M/_Y8-3_KNN`'8PB`!``2X3R#!`,]P@`#0QP*(SW6@```H +M@N`!V,!X![@E>!"XA2"2``&E[@NO^`'8$@M/_UH-3_J`N`&ES0=/^/'`X<7/ +M=:```#`#A9JX`Z5R#N`"!=@#A;.XNK@#I68.X`)DV*4'3_CQP"H/;_@(``.P4`(>`X,H@@@\``,8HJ`VB^,HA@@`! +MV`"G`-D5\/0F0A#/<(``E/D&ND4BS`#/<]RH```*"&B`>`0 +M>.$(0H,`V<]P@`#L%""@\09/^,]QH```*`09@`\D``!^ +MX'@*X!!X!;E%>3!Y!KB!N!"Y!7G/<*```"@AH.!^$+A/($(`A[J)NL]QH``` +M*$&AA2"+``&AX'[@>,]QH```*(OH!!F`#P0`Q@`$&8`/(`#'``GP!!F`#P0` +MQP`$&8`/(`#&`.!^SW&@```H!!F`#P,`!P$0>A"ZA2*$`4&A!!F`#P8`1P0; +M>!!X$+B%()$!`:'@?N!X@"#"#A!X!KB!N!"Y!7G/<*```"@AH.!^X'[@>/'` +MO@UO^%EB"B,`@$AP-'D(]``AC0^``)C$4-D$V@WP`"&-#X``[,1`C8#9C"(" +M@`+:RB+J`(&-SW:@```H$+P%)(P?```"$X&F$+F!N8JYC+DAIB*-$+D%(8$/ +M``""%"&F)(T0N04A@0\```(F(::^"N__(XVU!6_XJ7`#N<]RH```*"]Y@.!` +M*0`$Q2""#P``!@[%(($/```'#@&BX'X#N#5XSW&``)3=`&&`N,]QH```*`09 +M@`\&``<$$'@0N(4@D`$!H>!^SW&@```HA^@$&8`/$P`"!`7P!!F`#R4``@3@ +M?@6YSW.@```H17DP>8#@0"D`!,\@80#/(.$!SR`A`L\@8@#/(&("`:/@?N!X +M\<#AQ0AU0-@8V3X,+_DSVH'@RB""#P``BAG`>4`+HOC*(D(#_01/^$#8`=D9 +M!"_Y,]K@>`]Z1"H^"T0A@P,`(8)_@``@QWU[:*H;"1X`*'.&(_X#)+MIJH8A +M\0\GN2JJ`_!IJFJJSW&``-#'8JG@?P&IX'@Y!"_Y`MC@>,]Q@`#0QP&)1"@^ +M"\]P@``IQS(@0`X"J0$!8`(!V.!XSW&``-#'X'\`J>!XX'[@>*'!\<#Z"V_X +M"'.LP2AT2'4(V$3`#!R`/P"```#/<($`D`Q`B%#!1+K"N@ZZ!"2.'P$``,!+ +M?I#!%O+7=@```$#,)H*?````@,PF@I\!`````_0!@`+P`H"NO*^\L+P%?("A +M$,1!+($3PKD#PD`I``8%>D/"+PN>`03`!"2.'P```!A%(,``*[X$)(\?``,` +M`#B_Y7X`WP\GCQ-AOPJ_Y7A$P"$+'@'/<*```"`0@)NZ`KANN$@@``#)N$5X +M0\`&\`D+'@*=ND/"0<2+=LEP:')N"R_Y`=M%Q/'`"@M/^*'!Q@]O_8MP"B4`D.OT`,'@N>CR1"(`4XC@SW6``*0' +MO/0$(K[OP,#`P`?TSW"@```D`(#BN+#R`=@9I<]P@`"8#PN`#>@%V16Y"Z'> +MR0'@L[BUN+BXWAH8L`2ASW"@`(`@$H"&Z!25L@EO^L.XSW`$!`0$"R(`X!_R +M!""`C/_9#/(O*`$`3B"!!R.YSW"``-0E\"!!`,]U@`"D!YP=0!"$*08$SW"` +M`(0G,B!`#L`=`A`1\,]U@`"D!P.%S@S@`22%SW&``&0(`*DR#R_]`-F<'0`0 +M!"*^[P$!`0$%](#8P!T"$,`5@!!`*`$&APC?`4UP<0B>`\]P@`"D!P^`!""^ +MCX`:````V`/T`=C/<8``B"T\@0D)W@(`V(HAU@#/>[)$'$!V,!X`KB!N,]QH```)P"A`X4HE3"X$+DE>.T:&+!(=>CP +MXKF+\L]PH`"`(!*`SW"@```,#8#/<*```"A#$`&&!A`"AC,0`8;CNLHE8A0= +M]`QP^[C*):(4&?3/`@/8!Z(&\!7= +M!_`)"=X'`-T#\!?=D.W/"^"$+@E>`^B@.6D +M],]W@`"D!P^'SW:``(3-"B"`+Z```!`7"!X$/(>4V)(-8`'I`+I@F&.&`)IL]RH```*)(2`(8JA@';.&`*I@*&`]D!X`*F,!B8 +MKP"@"```'X!/`(````(8V*`'&%B@SW"@`(`=)J`$&IB/``#_?QO8!QH8@`^' +M\+B`#<(97/"*)@@080E>`L]U@`"X=@"%Y)!$OSH/8`!3)\`0`(6:#R``4R?! +M$,]Q@`"D!PAU"PB1!A6!@+@5H1N!SW*@```H`>`;H8(2`8;#N6T)`0`$&IB# +M@A(!AL.Y80D```,:F(,L\$T)W@`(V,]VH```*`0>&)"Z#L``"'5!"!`%SW*` +M`*0'`X(HDC"X$+D%>>[)$'$!V,!X`KB!N``>`)`#@BB2,+@0N25X[1H8L!G= +M!O`7V`X.;_B,N)GE5`3!_ZEPL0`!&!$!(,]V@`!D",]U@`"D!P"N%84$(+Z/$'`` +M`.@/@?P*(H`O`"```$01`"#/<8``F!4`H4$H`0-3(=,`((Y!*!0%%&D%(,`$ +M&G`-"=X!$H65N!*E8O":"$_]O0@5!,]Q@``@!O`A#P`*)(`/@`"`!2".R[\8 +MN8*YSW.@```H,AM8@`(DPB,`V8RY.F++ND`K#"/7<@````B0O$GW!20`(U,; +M&(`!V`NN2G`X\.5\4QL8@TD.A7```,`/0GD6)`(`8((A"34(`8(`V@\B0@!A +MNDXA#`@!*PX#.'ME>CAX!7X1\$(A`0@`V`\@0`!AN#A[!2,.`(HB_P\%\(HB +M_P](=@'8SW&``%`T`*D"&00$0:'"H4IP!/``V)RX-84%>4`A`"(UI1JE`MG/ +M<*```"<@H!01`"`8$0$A,+@0N25X[1H8L/4%+_@`V.!X\<">#0_X"'55(%($ +M`!(`(*/!0<`$%``Q02@3`P84`#$$(K[O`0$!`4(H$`%W\I/-[;C1(&*`!?+B +M#J_\@L#/<00$!`0+(D#@%_($(8&,_]@+\B\I00!.(8`'([C/<8``U"7P(0`` +MA"@&!,]P@`"$)S(@0`X%\`6%M@^@`2:%SW*``*0'P!H"``'9#PC>`3*"E;DR +MH@#9!+C/RB9"$),2`;<3"=X" +M$'(`W\HF(1#*)X$3'O"2S>.XS"8BD!+R1B'!`),:7+`>R`':`""!#X``>,9` +MJ1#8DAHX^"<`!D\U&((`"DQH +MR)(:7+``(($/@`!XQ@':0*G/<8``!,X$@0'@!*$1@15Y%H$!X!:AD\T/"!\# +M`-@(\`C89/`:V:RXDQH`4`Q!$*SX'184`)$$>0*%, +ME<]V@``ZRB(A`$#"`12#,,:ZQKMXJ5FI +MSW2``(3,OQ0!%GEAOQQ8$,`4`1998<`<6!!9`R_XH\#@>/'`X<4(=3"%H<$$ +M(;Z/`0$!`0#80?+)R00@@`\`"`@`:0@1`I/-4R!^@`;R2@RO_(MP"?`>R`': +M`""!#X``>,9`J1#8DAH@%EA/J`:V`#9'/#/<8``!,T,@0'@ +M#*$2\,]RH```(#&"#0D4!C&"U.&$]PAQ"O`1HA?8$:("V`<:&(`!V0#8C>D" +MVL]QH```)T"A(X5(E3"Y$+I%>>T:6+"M`B_XH<#/<(``)`@0D`#:8K@0N$4@ +M00'/<*```"<@H.T:F+#@?TAPX'CQP`H*#_@(=A"`HL$$(+Z/`0$!`0#6XSW&``(3,@_)`V)(:'+!5$0`&SW*```3.`>!5&1@`<1$`!A5Z%H+/<8`` +M&,8!X!:B'L@4><3)@*E6(`($2")$PE?`<]Q@``` +M[R.)"0G>``'<(.PIN\]QI@``!"2!P;LEN5,A3``)(PT#`B-!`Y%SSW.``*0' +M<(-O)0L0Z;O*):(09H+ZN\HE(1$%[078%;BDH"?P)^E0(\T"K+U`+,$2)7U` +MQ2#'P[M$O\&_P[EE>2<-GA;[9P.\=7N5?)MC.V//=(``S.)K9`\+W@%&)`@38PQD"`%H*K_R!P`#`*X@;C/<:```"<`H0.& +M*)8PN!"Y)7CM&ABP`-@1`2_XHL#@?PC8X<7/<*8```2D@,]R@`"D!T$M0!'* +M$H$`P;@P<,HD1A#*)`400"Q!$D\A`P20&L``$0T?$0T(``.0N9*YD!I``.!_ +MP<7QP.'%"'7/R&#`9`0<0C8"?<6""``J7"%Z""#8'FI<*T`#_C@ +M>"&`SW*``*0'P;D9"=$`SW"``"0(((`&@0'@!J$`V1_P/8+//'`X<7/=8``I`<5A00@OH\`<```)/(O*0$`SW"``.C']"!``#R% +M@KBV#"`!6H48Z!6%#0B>!V8+C_\'\`#9SW"``%`T(*CV#(`9SW"``(@M-H"@ +M%0`1$@AO_C1XZ0?/]_'`<@_/]S"`SW:``*0'!"&^CP$!`0$(=37R!"&!CP0$ +M!`04\B\I00!.(8`'([C/<8``U"7P(0``A"@&!,]P@`"$)S(@0`X&\`6%I@F@ +M`2:%P!X"$!$(W@$2AI6X$J8/AI>X#Z85A@0@OH\0<```"_21N,<:&+`0EQ4(`P$,E3"Y$+@% +M>>[);0D!`#"%!"&!CP0$!`04\B\I00!.(8`'([C/<8``U"7P(0``A"@&!,]P +M@`"$)S(@0`X&\`6%M@B@`2:%P!X"$!6&!""^CQ!P```6]`2'*0B?!"8/3_P5 +MAIZX%:9`)0`2&J8C/<(``I`<4D)X, +M[_G#N,]Q!`0$!`LB0.`@\@0A@8S_V`OR+RE!`$XA@`X +M@^H/I4UP[KC/(2("SR%B`L\AH@)%(0$&(_`#N!5XSW*``(3)`&*"N0T(GPX +M#Z7/<*``@"0RH`0BON\!`0$!SW6``*0'+X47\A25*PA?`0"5AB#\`(P@`X@- +M\I"Y6@UO_"^E!=C/<:#^``,5N"2@+X4DH!4)WP5-<`T(GP,/A?6XV`H"_L]P +MH```##2`SW"``/#'(*`$V<]PH```)"&@#X4$(+Z/+`````/T$X49Z`QP"PB? +M!"QP^P@>A@79SW"@_BP#%;D$H<]P@`!D"`"(!*$/"-\!R@CO_`#9:@K/_44$ +M[_<`V/'``-CAP!#9SW"@```D(:!V""_]BW"%Z"(*H```P*'`T<#@?O'`G@O/ +M]PAVSW"``(@MNH#/>,]Q@``\)H0H!@1""._\,"%/#AIPR7!^"N``Z7')<.EQ +MC@WO_`IR$26`DPP((@#*($(#O0//]_'`X<5B#*_X"'6F"F_XJ7!R"N``J7"^ +M#>_\J7"U`\_W\<#AQ0AUA>#*((8/``!9`,\@)@/0"2;XRB%&`W(*X`"I<`H/ +M[_RI<(D#S_?QP,]P@``X-*H,;_@8V<]P@`!('9X,;_@8V='`X'[@>/'`[@K/ +M]PAU`-_AQ\]PH```#`6`@>#*(.(#SR`B`WP)(OC*(4(#SW"@_J`#!=X5O@2F +MI*;/!@'8$0A1`,]Q@`"$S0"!`>`` +MH1$-T!1*#^_\BW`*(0"``_2I`'8"'&$\,]P@``D"""`"($!X`BA`-@!V7KPSW&``"0(0($'@@'@!Z(` +M@0>`!*8!@4!X`-AK\(X)P`#/<:```"0*@03H`M@!H<]P@``D"""`$($!X(H* +MH``0H>WQSW"``"0(((`,@0'@#*',\<]Q@``D"$"!`H(!X`*B`H%`>$;PSW&` +M`(3-`X$!X`.ASW&``"0(]?'/<(``)`@@@`.!`>`#H2;PI@Z@`0'8MO'/<(`` +M)`@@@`6!`>`%H0GPSW"``"0(((`$@0'@!*&2"```'O#/<(``)`@@@!&!`>`1 +MH9+QSW&``(3-#($!X`RA`-D!V`[PSW&```3-#H$!X`ZAF_%!V`H(+_B,N`'8 +M"'$'Z/()H``H<"H(P``$\`CIW@N/^,]PH```"`*`SW"``*0'#X`="-X$SW"! +M`&P%XZ#/<(``=-?AH,]P@`#<(N*PS@Y``'4![_>AP.!X\<`%V,]QH/Y(`Q6X +M)*#/<(``I`<]@&3A`@A@`@C8@@DO_@/8`_`R"@_]SW"@```D"H`%Z&QP\P@> +M@-'`X'[@>,]Q@`#8QPAA$0@>``0BON\!`0$!`=@*],]P@`"(+1R`X;@"V,H@ +M(0`%V16Y$!F`#.!^X'CQP$0B`%,Y"!$".@S/_`L@@(P\\L]Q@`"D!P&!"0@? +M``'8-?",(/^/_/4$D?4(@8\``/__#X&2N`^A]/%$(C[3SW"``(@M'(`>].&X +M`M@?],]P@`"D!P&`#P@?``0BON\!`0$!`_0`V`+P`=A!*@%1P[G/"S +MN+6XN+C>&ABP!*(`W\]U@`"D!_*E[Z7@M?.ESW*``&0(Y:H*(H`O@``(+O`2 +M`*#FJNNX`=C"(`$``K@6I?6ESW:``"0(_K:*(0(@`!I"!.>F;!``(/VE(G@> +MI3^E^+;/<(``'!;XH,]P@0#X#."@^Z7DJN2F!-G/<(``F!4@H`>*QQK8LZ"X +M!ZIR"^_\XJJ*(?\/SW"@``!%/*`XH(H@F`U8&P`@#!A`)`@80"3/<:```"@` +M&<"#BB`8"``8`"!($``@'0A>`#,1`(8$(+Z/`,````;R[`P^%B[@/I54AP`4`IL]P```P7`&FSW```#Q<`J8* +MV!"VW!(`H0;9'[;/<*``@!P[H!'P0"$``P"FSW```#1<`:;/<```0%P"IA#8 +M$+;>$@"A'[;/<:````P3@8HCF@`#I@V!$=Y"(``(2"`"`,]P@0"$#"&`SW`` +M`((.@.'*(,$`4'#*)BX0@.87].P2`*"`X%K8RB"A!PQQ$0E>!L]V@`"D!S^& +M%PA%`,]Q@``$SQV!`>`=H0/>:P(``(`6`1#/=8``],<`@4`E$A8!X`"A(-@B +M#F`!`*4!V,]WH```(`6GSW&``!C2`H%*(``@`!`1``.!`!`3`,8+8`$*<,`7 +M#!`"(0*C`R,#)$#".X>">()Y(:5"I6.E^@BO_@2EG@BO_@NU@>`!V,!X"K7/ +M<*4```SB@`HA@"^``&0(4R?"$`$9@B!3)T`0@^#*(&$%SR`A`S`,X??*(<$# +M02]!$\*Y"!E"(`^&YJ4`WXN_'PC>`@2Y"I6!N25X"K4'V`CP%2(,(``<`!0" +M\`38`>#U"!2"SW"``(BZ`8`&@.NXT`U"``^&2B!`(.MXPB`!),]P$``0$#(, +M(`+ZV0'>#'#VN)WRSW&``&0D`(%1(8##`>`/>`"A`=K/<*```!`D@,]P@`!D +M)`"`PB*!`#!PEO3/<*``@"`0@(P@@XX@`0T`$G*"],]P@`"D!V^`1PO>`L]Q +MJ@``!$2!SW&``/3'2J'/=(``2!T@C$1L+^FBC`#>#O#T(H\#%=P3O/`DSQ// +M=($`T`S5?."D`>;I#D20&/#/#O#T)(\3*=H2NO`B +MSP//N"B`>;I#D20SW*``/3'(:JBJL]R@``D"&,+WP(`V3.RSW6` +M`$0(*JW/=*0`@$'9A,]QI```0*(8A`,$)HX?__\``#"^I!B$`]V$SW.``/3' +MJ!B"`RB^J1B"`^,1``8QA,BY%;DE>`6B$80IC2FXQK@6L@B-"+DE>`>C(((" +MW@&!`>`!H1'P!""^SV`````$]`3>"_`,9.\X+FC/3/<:```!!L@0#8++O/<:``@"$D@<*[0,$@P>&[@FEDN4@A`0#* +M(@$`$O("%((P#0I$`%!TRB)F`$KW4'0`VLH@A@#*(&4`RB(E`."[RB0A$`#; +M$_(!%(,P$PM$`'!TRB1F$,HC)@!)]W!T`-S*(P8#RB-E`,HD)1#/<:0``$,Q +M@2]].+G.:0D-A1,`V0;P!N']"42#`=D&ZH3L!.F$ZP+:!O"`Y`#:RB)B`(#C +MS"(A@,HA@@#*(6$`@.#,(6&`RB&A`,]P@`!D"$FH*JC/<````1/N"2`"`-G/ +M<:#^:`(%V!6X)*`%V!6X$!@`"`0@OL^``0``!M@&]`QP_+@?V,H@(0+K")"` +MSW&@```0+X$%WH#ARB8!$(;FSW6``*0'.@8"``HA@"^``"0((!$`(0?>+X5B +MN.NY$'B6\L]RJ@``!&*""B"`+Z````Q!*P$"+WD*)(`/@`!D"`@4C`")N0Z\ +MA7DPI<]W@`#TQVVG+J<@@D`5C!`*)8`/H```$)3D*Z<9\@7V,PR1$B.Y%_`= +M#-`=[N01]$4I_@+GNT$IP7#"(6(`!]X+\$4I_@)!*0%Q!?`BN0/P`-D(WD&" +M+J5,IR^GY+K*)B(2X;K*)B$2$PJ>`03:`QR"`$J7@KI*MQ<.T1$1";0#!]Y0 +M%0(`!PI```C>;P[1$4HB`""*"N_]2G'/`>G!04@``IUSW&F```$(X$TN<&Y +M,!E$(`QR,!$!(1D*7P;/@^G.!]` +M$<*ZSW>``%3G2F<-"@0`3X6/ND^EA^9TI93TC>%N]"X9!"#/<8``+.0@@0/@ +M!2A^``H@P`X!X`*X%.`=I1()[_T4V#2%"?#V#*_W!MC/<*8```0@@#2E!"&! +MCP-````;]!D(7D;/<*``@"!0@,]P@`"D!Q^`"0H%``'8`_``V(OH#'`3"!\' +M;'#/=8``I`>["!Z`'0F!#P!`````V,]U@`"D!\0=`A``WY>_&_`;"8$/`0`` +M``'8SW6``*0'Q!T"$`#?F+\-\"<)@0\"`````MC/=8``I`?$'0(0`-^3OU2% +MSW&``/3'2J$-\,]PH`"`(#"`$H`#WB;P!!S"$0#?E[\`V!7H"M[/<`0``1&^ +M#N`!`-D$(,!#@.#*)N(1;'#@N,HF(A+O#I"2#/`NA1,)M`,'WL]PH```$!2` +M"0A```C>A^8B`P(`"B2`+X``9`@$%(`@SW>``*0'X;C3\@H@@"^F```($1`3 +MI@#>02N`(L*X`>!!*\(@P+I9>&&X02L#(1(0#:93(T.!4R4$$+UY4R$1`$$M +M@1!3(5(`4R-!(,PCXH\!V\HD@A,(]$$M#A'#OD$M#!+`O`#;@../]`2XQ7A` +M+$,#97@+N25X$;H%>A.\"!2`((5Z#KA%>%,B`2`;N25XFK@0IP'8`AP"(*X7 +M`!'/<8``+.0@@0/@!2A^``H@P`Y`(%``W@OO_1"'0!<$$'2X(K@"(`$@'PQ> +M`\]P@``PY`"`!2A^```A@'\``/\/,+@"($$$&0K1(`0DOH\&`````=C"(`$` +M`>`">0H@@"^F```($!``ILJX%0D``,]RH/Z4`@78%;A$H"2@F!]`$`7I;@A/ +M^`ZG!_``V1"'+J>4N!"G*'`7#9X4$PZ5$@\(E`,/#@5P"````!W>(_!`%X`0 +M1+C!N`'@(0C3`-"'!":.'P```!@&"6_^*[[1<,H@!@3*)N814/<*#0``"':4 +MX,HFXA,'\/X,```(=I3@RB:B&`IP((#/<(``],$0E`1P-N25XJ7&&(?,/#KD%>0@4@"#CO0ZX!7E$)8`0%+@%>:EP +MAB#^#Q6X)7B(N%(@0`40IT$MP1#`N0(<0B#*(H(/``#__\HB@0\``!`?+H=! +M*`,B4R-#A*X?1!!NIP/TE+@0IV$-GA1`%XP0$0P1&`0@OH\````8)O(/"!X" +M02C!`%,A?H`']`G>"KX$(($#-0F``T$H003!N2D)U0`5"9$`(0@>`D$HP0#! +MN0'A%0F1``D('@+,Y`;V"0N4`PD*Q0`(WB/P02C!`,&Y`>$?"=4`!""`#P`` +M`!BN#R_^02C.`@L(A`,0AQ4(G@*V"P``"':4X,HFXA,)\%`2`2`.AQ!Q!][* +M)F(2`!$!(,]P@`#TQRP8``0MH`(4@2"LH`>YB+E*D$5Y*K`NAR^@,(`,]PH```)0"` +MD1HBP.!X +M\<">"T_WSW"``(@M/(#/=8``I`?/=H``9`@"C@0A@0\```((3X64Z(Z%$PP1 +M&,G)"-N;NV1X%0C``!4,D1.2S>.XT2!A@03RD;I/I03IK[JQND^E[[K1(F&$ +M!?(LV!VE$/`0A0\(GP8NA8(,(!D`VAVE/87/<(``-,B""B``(;`/A1\(7P3& +M#D``!(X)Z,]P@`"(N@&`!H#KN)0+`@`0A0D(GP8`V"#PSW>@`(`0"(<3"-\& +M/86!V&3A^@G@`0RX"(<;"-X'$0B>!P#9(J[-N`ZEZO$!V`*NYO$,-@+@'K02! +MA2`!"`2A@-X(\`2!0MZ'N$H)(``$H<]P@`"(+1R`Z[C0)J(1T";B$<]QH``` +M*+`9F(,!V`$9&(`"C03H2@_/_@3P6@L``+$"3_<#V<]PH```#":@X'C@>.!X +MX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'@FH.!^X'BAP?'`$@I/]T3`%=U3 +M"-X`"-C/=Z```"0$IQH)``#/=J```"@]"!`%,H<3AS"Y$+@%>>[)$'$!V,!X +M`KB!N``>`)`2AS.',+@0N25X[1H8L`*'#PB?`((.;_R$P(+HJ7`C"%$%SW"@ +M```D`H`$P>*XRB!A`DP(H??/("$##@@@``3`"-S[`4_W\<#AQ<]QH```)&:! +M!-@$H1O8!Z$V#^__%=K/=:```"@6V"\+'P%#%0"6X+C*(.$%#_(+"%X`"PO> +M`!+8"?#/<(``)`@@@`:!`>`&H4APN0%/]^!X\<#!V"`:`K#/AD?)"A`_"$ +M>W"AR,D`'P!`-X(`'T!`T<#@?N!X\<#.#P_YSW"``*0''8`7Z,]QH`"`(#"! +M(GAJN$@@@0`;"=0`SW"@```D"H"'Z"QP^+C(#Z$!RB`A``#8T<#@?O'`X<7D +M$@&VYLDE>,]Q@`#TQT`9`@#_V&&)`ZFR:TSEP-@*"2``(!H"L,]T``#\_\]R +MH```$`/EI'PP&AB#R,D`'P!``-P'\/`A#0,`'T!#`>3Y#%24`-D)\,]P@0#0 +M#/`@3```'P!#`>'S"<2``-@"&AB`DX$+ME>`"B`8P"N%#@!*+/=8``)`@>E7F5>&!.""``&;49E0/@ +M!""`#P``_/^=N)^X`**1S0'@!""`#P``_[^/N)$:'+`8@0*B-(+/<8``B+HA +M@2:!Z[D@"`(``0!/]^!^X'C@?N!XSW"``#C(X'\`@.!XX'[@>.!^X'C@?N!X +MX'[@>/'`9@\/]R(,X``(=<]Q@`"D!P^!SW:@```DL+@/H0J&`^@"V`&F`-G/ +M<*````PLH!(.```*A@3H`M@!IH#EB`P"``X,(`$!V!X(C_V%!P_W`=G/<*`` +M`!`IH`#9SW"``(3.(J!1!N_X%-C@>/'`[@X/]Z+!BW:N"V_\R7`*)0"0'_3/ +M<(``6"0!@,]Q@`"D!TZ!@B`"`%!PRB7E&,]RH```)'Z"#H%P<,HEHA4`A@T( +M'@0"V+P9!``?@K@9!`"`Y>OT`,#IN(HB"`"2\L]V@`"X=@"&SW>@```D))#/ +M=8``I`=$N5,AT`!$IR^%60E>!$8.#_\*)0"0"O3/<(``J.86(``$((!@>0"& +M"'4*AP3H`M@!IQ`?@!\``/]_&]@'I_X+S__/<(``'!88@(#@'`B"`*T-D1;/ +M<(``+-;B#J`9`-U.\%H-;_\*<#IP`(:^#2__"G%"#B__"':(YLPFXI4#],EU +M&/#_#I"4%0D0('H*```*)0"0W`W!_P?PH@O/_P#8&:4(=1$.D1;/<(``+-:. +M#H`9I.T"AP#=0<`I")\`@@IO_('`"B4`D`[T`<+BNLH@H0+*(8$/``#^`%@, +M8??/("$#C.T$V`2G&]@'I\]P@``<%AB`@.!P#T(`@.7J]`'9SW"``&S$(*#U +M\."X]/+/<8``I`=.@;@1`P%B>F2ZNAF$`$^!`-B!"E\$SW$"`@("!")`8`#< +M$/`O*@$`3B*#!T$KS0#/#&__J:#/<8``I`<9H0L(T0"I`00BON\!`0$!#?(O((<*C"`"A@?TSW&``*0'#X&8N`^A(@D```HE +M`)"'],]V@`"D!P^&,P@>!#R&U-B2"6``R7((=U()+_D`V`"6AB#_#!$($0+/ +M<8``A,T"@0'@`J&`Y\@)PAB`%@$0!H$!X`:AP!:!$!\)WP&!AIP6`!!2)`P0 +M0)9*)```=)9."N`74R0%$!.&3X8-Z,]P@`"(+1B`#P@1`0#=2?!2"$__1/#/ +M<8$`\`<)@8#@T2)BA0/R#I$(Z`#8SW&@`(`<&:$PV!RAW@O/_P^&*P@>!A#8 +MDAHR`':`""!#X``>,8/AD"IN+@/IB"6_-I$>=#A@-S, +M(0*#%?0$(+Z/*`````3T$X8/Z$`F`!/_V3X(H```VH#@RB5A%07P>@G/_PAU +MJ7#=`R_WHL#@>/'`?@LO]P#8X<#/=X``I`<8IRX(;_R+<`HE`)`%\JEPQ0,O +M]Z'`SW"@```E(X!3(8``!"&.#__`7W^#"-$!37$/AV<)G@,$(+Z/`#0``"_T +M!""^CP`*```(\DQP_PB?@$QPX+C/)F(1SW&``*0'#X'YN,\F(A+/)N(2SR:B +M$Q?T(0C>!@4F@!\```!KTH$$)HX?`@```%(F3A0JO@5^!_"%)AP0`_#UN,!^ +MSW"``&0(`(C$N!BX!7X(\."YRB7A%03RX;G*):$4#'#RN,H@(@C`":(!P'G/ +M<(``I`?8H*'Q\<#AQ0#=!=@+N$(+;_VI<18.C_C/<(``I`7`?6QP)P@?``QP"PA>!2QP)PB>`PQP`-FA0GPN@@``,]Q@`"$S@*!`>`"H4$" +M#_?@>/'`DLV&(/^%/?+/<*```"``V3J@D\U&(,P`DLV3&ARS/PC>`(#8DAH< +ML,]Q@`"$S<]SH/[<`P7:%;H1#-X2&X$!X!NA:'`'\!.!`>`3H4`C``T$HI/- +MI[B3&ARP$_`G"%X!BB`$`)(:'+#/<8``A,T2@0'@$J$%V,]QH/X\!!6X)*"2 +MS00@OH\```!0"/+/<(``)`@?D`(*;_T`V='`X'[QP.'%`-C/=:```!`)I9H- +M+_<#V'((```!V`FE?0$/]^$'S_].V\]R@0`,#15ZX+E@HLH@P0`%\HH@A0,` +MH@L)W@*)N`"BX'X`VP[P+RD!`$XA@@?/<8$`#`WP(8$`$""``"5[].C/<*`` +M`!!PH.!^X'[@>`#:SW&!``P-%7G@?T"AX'@#VL]PH```$$Z@`-O/<8``9"1. +MH.!_8*'/<:``@`P!H<]P@`"\=@"``H`"H>!^X'@]`P`!\A`EC1`3:A5XQW"``(3)((!H@*]]#R;. +M$-4)7X*,(\./YO/J[94`+_?/>`#9$/`O*P$`3B."!T]Z$""```.Z57K/`D$HP0#!N0GP#0B>!B"-1+G!N0/P`-D$Z9ZX`*7/ +M<8$`X`W6>2")"PD>`)ZX`*5?")\'SW@`V5H,[_L:<80H!@0`(8!_@``()BJ` +M#P[1$P*`A.#*(0$$`(7/<@`$``$O"%\"%>E+>-$AXH71(>&`"?0;"1X&!""^ +MCP```!@'\OZYSR#B!\\@H0<`I00@OH\`!``!I?,_"!^"P[B>\54'S_;/<``` +MBB>9!0_WX'@!V@3P$"#``!OH+RD!`$XA@P=H<8`AP@&4X\HAQ0`"N3`AC`^@ +M`!@L,FLP(8$/H`"T+B]Y,'3`>N;J`-@"\`'8X'[@>/'`X<4$(8*/\/\``,]U +MH```,`7R-+IM'9B0%+C3N25XE!T8D`/PU@\/_)05`);["-Z'\0;/]N!X4FC' +M`,]P@`"`^!P:&#!9(@`('1J8/_]___\;&A@P#_!"(@`('!H8,,]P +M@``@]AL:&#`=&I@_#P#__\]P@`"`[P`9&(#@?N!X`-D2\"\K`0!.(X('3WH0 +M((```KHP(H(/H``T+\*Z#R&!`"]Y\.C@?RAPX'CQP)8-[_8`VN.(SW.@```P +M(8@/(L(#!A"1`!)OQW"@`#0O`!B`#Q@!``"2$P"&4GVD>)(;&(`Z$P"&SW:` +M`.0BI'@Z&QB``(:D>`"F`88BZ!4F4!`0$``@2WC*(($/``"?(?`+(??*(L$# +M$!`!(``G@!^``#0CI'D0&$`@_]D@J`.&I'@#IA4F3A0_V!=C/<:#^R`$5N"2@`-X*((`OH```,,]WH```+M6G#]T(O0/P,@X/_!.' +MI'B,(!"`^_,$&)BC`_`>#@_\$X>K>/WU(07/]L]TH`"`+%BD>:0,N)VXG[@% +M>3>DX'[@>(+@RB"!#Z$`'`0'\@\(40#/<*$`%`4!V2"@X'ZAP8+@RB&!#Z$` +M&`0&\B$(40#/<:$`$`4`@4#``,"`N`"A`(%`P`#`P+@#\`#8X'^AP.!X\"EH"WD`V<]P@0"P#,6`X<'/=8``I`T2YP;ED>CIBSW&``)3>]"&!`+0=1!#/<8``I-[T(8$`6?#/\*['0@1!0J* +M28I0<,HB!0!@P0#`&+H%>D#"$/`&[,]P@`#LXVA@"?"$+@84`"&`?X``%"=H +M8&#`(,$`P#QYPKG/_X,(EI`^_VH<"AP?'`S@K/ +M]@AUAB#\`XP@`X!:<1IR,?+/<8``I`><$0``SW*``!`FA"@&!#`B0@[`$8$` +MA>+,(N*!'/3/,\@(@,3](0H!0K/,N""&#X$!X`^A$@D@``IP!-D.\""$!X`VA +M!-D(\`#90(:.N0Z"`>`.HL]PH```"`08P`3(%P(0`"%`)4)X@.#*(,P$48<0 +M>#,(A``,$``@$!`"(3"X$+I%>.X:&+"@V`&G1!_`%!"68KBB!`>`7H0CPSW&```3/&($!X!BA +M`-H$V9+-AB#_A1OTC"4#D17R(0T1(,]P@`#0QV&(SW"``"#'1"L^"S`@0`X/ +M"%X`DAJ/'`_@Z/]CIP*'8:/]N!X(KD'\`00`P1AN0`?P$#\Z>!^X'CQP+H.C_:A +MP4AWSW*``(P50(((=<]V@`!H)`#8`NH\ZY'-0,%/(,$#`>`$((`/``#_OX^X +MD1H3"@"/"D>V5Y,*`$\`?EI'MPH`#! +M`=@`'T!``-D@IHD&K_:AP.!X\<#AQ0#=#O#/7/`]XX."L!\7_SW.``$3(`(,!X`"CU/$`V"$&K_;@ +M&@``X'[@>,]R@`!#R_[HL%&#R_[BB4($`AQ +MBW*!P\(-K_<`V`#`"B"`+P$``(`%N,]T@`"0R!MD((//=H``O'9!@V"F.F(B +M@QQD66%#@P>$.F(D@UEA18-F@SIB>F(`()$`SW"``(*``V!X:&#`(=Q7P +M`<#[>02X]'C/?=#Q22#"$` +MI%0/[?_*(*T``(8!@!!U1`_M_\H@[0#/<(`````L&(`/"````#`8@`\!``"` +M'06O]J+`SW&``&CL"&'/<:$`"`05>0"!H+@`H>!^X<'/<8``:.P(8<]QH0!` +M!!5Y`,#P(0``X'^AP.'!SW&``&CL"6'/<*$`0`0U>`#!-7A`H.!_H<#QP)X( +M(``!V)8((```V-'`X'[@>,]Q@`!H[`IASW&A``P$`=A5>0"AX'[@>/'`SW"` +M`'@S`("`X,H@@0\``"TST`+!]D!XT<#@?N!XSW&``&CL"6'/<*$```3P($`` +MX'[/#Z__`MBI.WQ9GCK\>!XX'\!V.!^ +MX'CQP$X+C_;/<($`T!((=PP8@`\`@```08`*(8`O_O__/P0B0@3APL]V@0"0 +M#`HB@"^``*0'`X[($H$@"WD<\L$2@2``W5IIP;H/)8T0!"4-D,&Y`-H/(D(` +M!"(0``/R"PB0(`IU!/#F#$_X?>@.O0#`I7@$\`&&17A`P`".`,-$N,*X#K@' +MV@ZZ!".,``M\BW$4\M=T````0,PD@I\```"`S"2"GP$````#]`&&`O`"A@0C +M0P1E>`"A`,%+>D.E`\-AI0T('@*=ND.E!?"*(`8&!*4` +MVD6EJ7`!W@(*;_?)'" +M&W-*(0`@;R9#$"IU2B#`)PHC0"0*(D`D*G=*<.EQ]@RO]@':`""`@P$A00/F +M#*_V"G)"(%"@0R,3(+)QS"`!A0GW`"*2HP$G3Q,")!2@`R55(,EPJ7'J#*_V +M`=H%('Z`"'8H==OU2G#I<4IRA@RO]NES`B86H$IP`R=7(.EQE@RO]@':!2;^ +MI0AV*'4/\@4F?I,-\@#``-G*`!$(($`1F2``$0@@0!&9(``1""!`$9D@`!$(($ +M`1F2``$0@@0!&9(``1""!`$9D@`!$(($`1F2``$0@@0!&9(``1""!`$9D@`! +M$(($`1F2``$0@@0!&9(``1""!`$9D@`!$(($`1F2``$0@@0!&9(``1""!`$9 +MD@"`(_^/`-JS]>!_P<7@>/'`(@B/]@AV4R!^@"AW2'4$]%,G?I`)\L]P```# +M/,EQM@ZO]NER(^T#;2*XP;TW#141,R9-4"&!!^0$`3F +M!!8!%`0?4!`$%@$4!!]0$`06`10$'U`0@"#_CP#=X_4A`(_VX'CQP+(/3_8( +M=BAW2'7@N-$G(9#*(((/```%/,HA@@-(#J+VRB+"`ZL-$!!`)<`3)+C#O9<- +M%10S)DUS@`#2!Y0)8"'Y00`N8"%@$5`A]4$`(6`14"'U00`A8! +M%0(?5!`"%@$5`A]4$`(6`14"'U00`A8!%0(?5!`"%@$5`A]4$`(6`14"'U00 +M`A8!%0(?5!`"%@$5`A]4$`(6`14"'U00`A8!%0(?5!`"%@$5`A]4$`(6`14" +M'U00`A8!%0(?5!"`(/^/`-VS]4T'3_;@>*+!\<#&#D_V.G!*P1IRB'"$*`8$ +M+W``(($/@``()D:!"B0`(5IS*!0/,1D*000ND1$)P0,`(($/@`"$)P`9`@1! +M*0`D0"\!%`5Y02D``B=X,+DG>,]V@```R:".4R"3`<6]D.7*((H/``#-&QP- +MJO;*(4H#`([FN`#8)/3/<8``!,P6(4`#!XBV>0"N`!E`!.*Q!AD"!``C@"^` +M``3)0(A'J4`HP2"@J#5Y`!I"(\=Q@`"$R2`9``4`@:FX`*$!V`S<7P9/]N!X +MHL'QP!(.;_:8<$7!%!0.,3"X0"X!%`5Y02D``B=X,+DG>,:X`""##X``!,D" +M\&=LH(N`WUD-WQ'/<8``!,PH=+9\!HSK"@&`SW"``*3)`[I5>D!@A"@&!"]P +MN'#'<(``""9&@!4*`0$.D!$.`1``)8`/@`"$)^"H!XRV>0"KSW"```#)0(B' +MO4>IH*@,W/,%3_;@>*+!0<$$%`(Q02@!!$`J`P0E>T$K`0)G>3"[9WG&N<]S +M@``$R2MC`_!GB8#9'0O?`<]Q@``$S'9Y8('Q",&`8I'I"L&`!HD#\"APX'^B +MP.!X\<#AQ0AQSW"``.3:`(#/=8``A,SAP$"%`-B&ZD&%@.+*(&$`'NC/<*`` +M``P-@$(@``A((```C"`*C9CWG=A@P)'-`AP$,`'@!""`#P``_[^/N)$:'+`> +M""```,``V`7P`84$Z&&X`:5!!6_VH<#@>/'`K@Q/]CIP&G$`WO8);_WAP(#@ +MRB"!`\HG@1,)\N8/#_V.#R_]"':>#R_]"'<0OL]U@`"$S,*E`!24,(HC`B<* +M(H`OH```$(HB"@P/#,$D,!J8KP"@L`(#\#`:F*``'T!$#0]1$"*%@;DBI03H +M`H6#N`*E"B&`+Z```"!L$0`@SW>```#OB1T8$`&/SW&``(3.0"4.$@WH2B!` +M(`#8`:]5(4`+`-GN#>_VBB($#0*/@.#`>,H@`00&Z`*%`-F`N`*E!/"*(?\/ +MSW.```3.OH/_@P#:!_``'P!`)'@$'A`0`>*,(H**`(:W]P(:&*`#V@<:F*`` +MAB1X`*8+#,$D9AF8H+ZC_Z/]`V_VH<"%!N__`-C@>/'`X<4(=3(((```VREH +M:'(-\"AE%0@2#!$(DPX.#L_YDFJ8>`5[`>)AN>L)$X#Y`V_V:'`(<@/P`>`@ +MB/[IX']">.!X\<#/<:```$4`&8`/`$```.!X`-@`H<]PH```'`6`[[@T"&(` +MRB!B`-'`X'[QP.'%SW6@``!%'(4XA9(*P```'8`?`$```.!X`-@`I02EE0-/ +M]N!X7@N/_,]QH```/`"!B+@`H6D@0`#^\>!X\<#AQ0#="?#6#2``J7`B""`` +M`>6O??4-$I'/<(``_-(."```8@[/]TT#3_;QP.'%"'4$\&(*``"^"B``J7#\ +MZ#4#3_;QP.'%K@H@``AUSW.@```@SW*@`(`A#.AB@`"")84$>02%)7@`H@*% +M8*`*\`6%(((D>`"B!QN8CP!\``#U`D_V\<#/<(``P/CL'`BPSW"``.CX0<#/ +M<(``Q`A"P,]P@`#("$/``-M$PPC8!-DH<@HD@`^``,P("B6`#X``;-!*)H`$ +MC@PO^THG0`"EP-'`X'X(.!X\<#AQ0AS4@@@`"ARA"L&!,]Q@``4 +M)C`A00[/=(``'-("N35Y(62`@5,B0053)$T5HGDX8(#ARB$+`,]P@0!@$G9X +M(*!!*H$%-KR">?$!;_8AH.!XA"@&!,]Q@``4)C`A0`[/<8``&-("N!5X`&$` +M@.!^X'B$*`8$SW*``!0F,")`#L]R@``8T@*X%7@`8B"@X'[@>/'`,@E/]J+! +M"'4H=TAV?@IO]XMQSW"!`(@2MGA@@`#"`8``(L*``<$!($``0/'`^@A/]J3!"'8H=4(*;_>+<<]P@0"($M9X((``PEEA`B&!@`'# +M(*`#)!_6&#@>(0H!@3/D)C8(("(<(` +MSW&!`(@2%GG@?T"A\""`` +M"-D`I@7M7@WO_P:'`=AU`$_V((`P<,HA(0#@?RAP\<#^#P_V"'6.#^__*'<( +M=N*E>@EO]ZEP30!O]LEPX'C/<*```!P<&(`/0````.!X;'`!")X%X'Y`@`/P +M0((/"(``9((K>_SS`O``VN!_2'#/6O?>T-$I$`V0OP`-K/<($`B!(V>$"@0:`!X2]Y\0E2@0#8&Z8` +M'H`?``P/``@>@!\```#P`!Z`'_X```"*(`@``J8!V,P>`!`>#,__A0 +M%\()(``"V"H)```/#5X7L@D@``/8'@D``!$-GA?/<(``_-(."0``'!Z`'P!\ +M```A!P_V%=C/<:```"!A&1@`"!F`#P,`X``)V!ZA'Z&(V-`9```$&8`/``0` +M``#8&Z$`&8`/``P`&>!^X'CQP'(.#_;/$/`R;C5YQW&``!C2 +MJ7#6#._W`=K@OA@.PO\!YL]^Y0X2D<]P@`#\TBX+S__"""```-@B"\__M@@@ +M``'8&@O/_ZX((``"V`X+S_^B""```]@&"\__&08O]@IP\<"R#0_V"'4B\`"& +M(88AH`"A`-@`I@0>@!^MW@(`!H9`(`\&((__"-D`IR.&8'G)<%X-[_^I<`HF`)`(\@.%((`"AB)XJPA2@)8* +M[_^I<+$%#_;@>/'`9@W/_\]PH```(`08@`\`!`\`#!B`#P```/#1P.!^A"@& +M!,]Q@``4)C`A00X%N0`A@`^``!S3X'[@>*+!\<#Z#`_V.G$:<@AWN@LO_&AU +M%@WO_T`HC@)3)4`5$';*((4/```U$EP\@KO_ZEQZ7"^#:`6`=D,W/\$#_;QP((/[_\(` +M"NIV#^__:'`#@""``H(B>`7PSW#_#___T<#@?N!XX'[@>/'`<@P/]L]P@`"8 +M#P.`#>@%V16Y"Z'>R0'@L[BUN+BXWAH8L`2ASW"``,0D`(`$((`/#P``X"\H +M`0!.($$$'AI8,`'=#PF0`<]P@``8Q@Z0'N@E"9$!SW"``!C&"9`,Z-8(K_8! +MV(P@PX\2\I#H'AI8,P[P&0E1`+X(K_8!V(P@PX\&\H3H!M@>&A@P'A(!-L]V +MH```!"^F"B"`+Z```"Y,$``@`]\6O^1X\7#*(((/``#U`*P*(OO`*&(!#H;` +MX-3W9@[O]LD:6+-,$``@Y'CQ<,H@@@\``/4`P"AB`80*(OO*(>(!"/`>R,]Q +MH`"((!5YH*'A`P_VSW*@``!%.(($(;Z/```((`#8!?0\@@D)7@8!V.!^X'C/ +M<8$``!-B@:'!!".##P_\G_]3(,(`%+HFN(8@_@=%>&5X`J'@?Z'`\<`$\((, +M3_O/<*```$4>@`0@OH]P````]O71P.!^X'CQP`X+#_8(=L]P@`#0Q]8/[_^B +MB`HA@"^@`(!$0!$`(,]WH```148@`0U`&4`@!(<*((`O@`"LUP0@@`__;__# +M!*<,AP0@@`__?__##*<`'X`?`$```.!X`-@`IQ-MI7@-IXH+[_:I<``0@"`- +M#0`0O@X`&0`80B-`$0$@!2&!#P"`-`!`&4`@*>X7#E`0.0Z0$(H@6@HN"6_V +MR7$?\!"]C[V;O<]P@`!P!0"`G[W$N`JX!7VLIRX/S_^*(/\/'*<8IPWP$+V/ +MO<]P@`!P!0"`G[W$N`JX!7VLIY4"#_;@>`#8SW*@``!(SW&@`(!$&*$9H1JA +MC]AD&AB`01J8CP!```!!&IB/`!```,]P@``0!1!X%J'@?N!X\<#Z"0_V"B<` +MD!IQRB"!#P``IQF4"$'VSW"!`)`,HXC"O0#>#_#P)X$302F``\*XI7@0=/'`L@DO]HHD$```VL]P@`"(+9:`SW6` +M`,#Z`X5-I8QXSW&@```@^X'/=H``!";`AB]PPG_Q<,]SH`"((,H@C@#$]SN! +MPGDB>(GDRB!B``CT02C!`":X`GDMI0+8V'``W$GP"PY1$,"7R+5`J,]V@``@ +MU0"&$!4%$1,(#@//<(``'-7@@$"F`>?@H,]PH```'0R`!"!``1EA%+4"(8`! +MT''*(&X`#'$A"0X#SW&``/S4((&,(<./!/(-#$`04R!`@,H@80"*(<\/"2!! +M`""C#'$/"0X#((,+"04!`!,$`,]U@`#`^D`E`165>0"A!.,`V@'D:0P5$D^E +M^0S0D2V%@.',)**1S"3BD`3T'L@`V1!T`(./?L]W@`!4UM9_Q(^DA;YFV6'/ +M=8``6,:4?8[H`"2`'X``>,;`B"L.D9#(E>&7VWZ`ON1^DO%4E0L*!0`X8KKQ +M%+4X8+CQ1*7!`"_VB'#QP$X(+_8(<@AV&G$`WQ'P+RF!`$XA@`#)H,"&! +M#Z``-"\0(@(`PKD/)T\0\NH:\"\HP0-.((T'+@P@`*EP>,H=$@(V`K@P(($/ +MH`!D+A`G3Q-$>0IP!@[@&,1Y"@UO_:EPY^\"#"``!]A%``_V\<#:#\_UL,$( +M=@/8&G#/=:````0(I1`5$1`.A<#@O_<`%@!``!8`0$#`(,"/'``@_/]5IP"'4*)(`OH```,`HC@"^@```N5!,5(`04%J9($Q`@ +MSW&@_L0%!=@5N"2@Y@DO_THA`"`%\#8,+_?I<"GM+RA!`TX@CP?O>1W(`KDP +M(8X/H`!D+A`ES1,$?@4AD2,*\#)H,"&!#Z``M"X`VO()+_](/'`:@[O +M]9AP"B#`H`#;#R,#``#`/ +M>!\(TP<`W@\F#A`K?L]T@``$T15\X(3O\V5_X*3P\8APY@PO_4AQ%P@1($PB +M`*#,)2*0*`PB]\H@0@,7"!$@3"(`H,PA(J"("R+WRB!"!"$($2`="A`@3"$` +MH,PE(9`(\NX/[_X%(4`C_@P/_?D%S_4=$@$V`K@P((`/H`!D+L82`K8D>`1Z +M`-@.\"\K@0!.(X$'+WD0(D(`SW.```31\"-!`"5X\^H)!<_^X'CQP&X-S_4H +M=@'<1@WO_@`L`!`(=2H-+_W)<,]R@`#D(B&"!.DC@@;PSW&@```N,H&D>*D% +M[_4D>,T`(`#_V.!X\<`N#<_U*';/<8``B"1`@2&!17D&($V`$/*I<,EQ)@PO +M]P':Z@SO_JEP"'72#"_]R7"R"B_WI'AA!<_U\<#R#._U`-H(=OX++_""``>>F>2"@ +M\0]4D=T$S_6GN`]X0"B!`N+))GCM`:_WXAH8L*>X#WA`*($"XLDE>-D!K_?B +M&ABP\4#S_7@>`#; +M!_``%H)``>,!&)(`^0M$@.!^\`!X`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0`!8` +M0`0?$!``%@!`!!\0$``6`$`$'Q`0`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0 +M`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0`!8`0`0?$!``%@!`!!\0$``6`$`$ +M'Q`0`!8`0`0?$!"`)O^?$-VK]>D"S_7@>/'`?@K/]0AU*';@N,H@@@\```(\ +M$`DB]LHA0@,`V0?P`!8`00'A`AT4$/D)A(.]`L_UX'CQP/8-S_^^"<_^`=G/ +M<*````PQH"6@T<#@?N!X\<`*"L_U2B,`($H@0"`*=P/P`>?P?XPG@ID\`0H` +M"P_2$_,/$IG!YX/VX^?S]@HE@"^``-"80"6!*D`E#BH5#_,3%2?-$\=U``!G +M";!]$?"")0(=E274$[!]%P\1&4`@0"`O(`@@0"-`("\C""!`*(`@%G@T(1$` +M%PUB%)IPSW"``!"2'I!AN!!XUP@"H$`K@"`6>!%AVG!:<3)QRB"!#P``!BLP +M"`'V`B6`%!%Y`B%`(Q%X$''*(8X$RB%-!%)QRB+!!,HB`@02:A9X'F8`)X`? +M@`!`C2)]+R=&H^"V0*B9\P#>`_`!YM!^*PZ3D`#=#/``V#)OU'FY80`A@@^` +M`*2/`*H!Y;!]WPV3D!)NM'BB<$`@`0LT(0`%-"&"!0(A@21">`BX#G@2"N_U +M+GD.>`0H_@4*($".W?,-"!,`@B`"@`3P@"`"@/_6P?9T-DY``WCCPWA@ +MU7@<86Z,&6%TJNR,#1'``-IP@.?*(($/```+*\HA00/<#N'URB)!!14FP",. +M?PL/PB,?#Q,0SW"``%@B$8@3"%X`SW"@_@`&#@IO^@#9"2?`%0YX2"`!`!)M +MU'AB<"S@@G`@L`'FT'Z'#I.0BB<%)#P1`R%`+<`@`!`!(!0F0A-"/]>'%SW*``.S: +M8((`V4&"^!S(L(L(\@!!PBCPBB/_#<]R@`#0F$`B``\U>&"@`=L*\(`D`I#_ +MW<`D1!-(O(^@`>,G"Q4!SW"``#S7:&`"N!9X6&`U>):0MY"B?`:\U0P3D((D +M`I#H\0'ALPF4@!GPSW"``#S7*F``W`[P$FH6>!0D0Q`S),,PQW"``-"8/."5 +M>&"@`>3G#)20`>'7"12!HL#@?\'%\<#2#H_USW"``%![`(#CN*+!A_)*(0`P +M!?!`(4`P+R$(,$PA`+'Z``H`?@PO^"MP0,`O(D!/`!YL]^[0[3D&'& +MW7]0)@`0%2``!4`IC2"V?<=P@`#0F"S@-"!0`T`H@#`4(``%^&#/<8``I(\S +M(1<`+R4')@IPZG$J<]H((``*)``%"'<` +MW7$-$YD")T(33WK)<&IQ2G/:#&_\"B1`!10F3",`M`'EKGWO\?4%K_6BP/'` +MX<56#B_\"-@(<8`AE@01Z,]P@`!0>P20&PB"#P``$`PH<,]Q@``\DOX-+_\# +MVA;P`-D#\`'A+WDE"9,``-CW"-.`%"%"`!IB_]P`(H,/@``\DH"K`>`/>/3Q +M\06/]?'`>@V/]:'!`-[R#2_\R7#/=8``4)(1Z!3@BW&J#2__`=H@P`BXAB#[ +M#T(@`(#*(&(``J4"\,*EK06O]:'`X'@X8`YX-F@4),``SW.``$#7,R,``$QX +M`"%`\`P``P""(`*`!/"`(`*`_]S`(`0#2+C@?PUX\<`*"B_\`MC/<8``5"0` +MH8#@RB"!#P``MA.,`\'U"=G/<(``$)(^L`'8T<#@?N!X\<#6#*_U`=A.#0_\ +MSW&``.R-"':`(`($"@TO_Z7:R7"`((<&SW6``%"/5"5!&?8,+_\%VL]P@`!4 +M)`"``(@7")(`R7"`(`<)0B6!%M8,+_\QVO$$C_7@>/'`>@R/]=T(E0,/"+0` +MBF@)"/0"`=T`W1YA`!;#$,]R@`!0C1]BG!_"$`X6PQ"J'\(0'>V;81P3PP": +M8K@:P@";8283PP!`(00(PAK"`!0D`P,0$\\`"B6`#X``$(X4)0(#[*H1$\,` +M;:JJ%L\0SW*``%"/&V)&&\*#N!;/$%0;PH/&%LX08AN"@Q+M`"$$`]04Q0"> +M8G`>0I'>%,\`>A["DY]AZ!?/$(0>PI-6(0X*'V8*%\\0'F;F&\*#@.48%L`0 +M]!L"@+KR@"$%")AA!A#``)IB`JJ981`1P``,JJ[P;K@/"/4%'7T!V@D('@`` +MVIAR$PAU!4$HC`!3('Z``=H"\@#:.7(`(0@`52'#!4(0SA``(((/@``NC@HE +M@`^``%"/P*HM#!``,R-#`P`E@A^``$B.8*I6(0(#M'H($LX`SW.``%".M'O$ +MJPD2P@!%JT\)$!!6(0($0"*&`3,B#@,`)(,?@`!LCL"K`-X*)X`/@`!PCD`G +MB@`(\!4F#Q,S)L,#07=@KP'F\PX4D91Z'A+.`!0G`P/:JQ\2P@!;J_(0PA`` +M)0,`CAN"@"AR@"((```B!@`,%L"`J!L"@",,$`!6(0\)N&<&$,<``"6.'X`` +M$(\"'L(1OV<2%\`0#JX?"1`0F&(^$,Z``"4``YIBVAB"@T02PH#@&(*`>A;` +M@!:K&0P0`"AP@"`&!3,@0@,`)8`?@`"`CT"H(0D0$(`A!@B880`0P@``)0`# +MF6$\&((`!A'!`$(80@"I`H_UY0-/^H0H!@2*)/P?`"&`?X``""9)@.:Z!"(# +M`\HA@0`#\E`BP0'ENL0A`@/DNM`C8@'CNM`A(@%5&-@`X']6&%@`X'@(<@0@ +MOH]@````'LC/<8``&,8`((,/@`!XQA1Y!?+$R1R0%PB>`@0B@@]A````$PJ! +M#P$`````V`"Q`=@<\)+-Q!("MAL(W@$!B3(2@@`-"($``-@!J?/Q`>`!J0OP +M`(DQ$H(`"PB!``#8`*GG\0'@`*D"V.!_`*O@?N!X\<#AQ0AQSW"``,3<+6", +M)<.?!?*,(4*)Q?;^V`X([_6+N-4!K_6IX=[@>8! +MW,(D`1//<````32`XY5XN`^"]6D!C_4`V@/P`>)!*($`_0I$@.!^"^F`N,]R +MH```(#"B`=D'&EB`$-D@HNT`S_;@>/'`X<6,(,^/RB"-#P``<`-D!XWU(-W/ +M@``!%N(>Z"<_Z&X8" +M(``$XPB#CP``$"?G#1Z5L0"/]?'`3@B/]0AVSW"@```@^X`%W16]"X7*&ABP +M`-@+I1OPRLD+I<]P``!$'/X.3_H(`#9(*#@?R&@```````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```4````]&8`````!`#QP`78%;@0&``(!=@5N!`80`C/<(``&!!N"&_F)-E" +M"\_DT<#@?N!XSW````B!SW(```Z!!O`IV1*Y\"$!``'@]PH%@.!^X'CQP,(( +M#^`(=WIQFG*Z4R#7`L]P```$'((/S^0;<,]U@`"`TI1FE!H%3(`(S&J4' +M@1"Z&Z46@1RE"('/<8``@-$=I7P9@`K/<*```$4>@(`9``#/<(```-($&``+ +MSW"```#2"!B`#,]QH`"`'#J!(Z#/<8`````D@22@+R&'!0BY)7HO(<<%17DE +MH,]P@`"`T[[YI(```BB(0`,]Q +MH```($.A!<&`X03T0L`&\('A!L)"P@7W0!`/8!AT8D"X(S^4%V16Y+!F`#P"` +M0`#/<*#^P``$H03`4R?!-0@4!#!3)<(U`!0%,%,FPS4$%`8P0O\`V`FESW`` +M`*W>I@F/X0C8`-G&#._DF;D6#(_AO0*/Z>!X\<#.#<_?SW"@`"0PK1`-A@80 +M#H8`V.8,;^1@$H&P.-C8$@&VJ7)F#"_@R7,-!L_?\<":#>_?`=L`%H%``!:" +M0``6B$``%H=`1">^@T0BC`/`>PH@`(+*(&(`0"!&`(#DRB!!`,!X@./*(P(" +MRB,A`!MC;W@Q"I\!`K@,X`0@@`\``/S_G;B?N,]TH`"`#!"DV,D`'P!``!^" +M0``?PD``VP`?Q$``V`;P9W@`I$`A0!#+"*4!.7!,(4"0RB3!$`4@1`,`%@Q`8;DO +M>97N`-@'\`3D"0J?`0`?@$,!X,"$#PA%`.\+'X``%@Q`]/$+"I\!`!^`0P8E +M/H$0\@#>!/`$Y`'F`!8`0`"D$0Y%$/4+'X``%@Q`]_$+)$"!M/,`V`/P!.0! +MX"$(10``%@Y`X(0#[>=^`O#E?L"DZPL?@``6#$#R\0`6`$!@A#D-$9!E>)GQ +M$PJ?`0'8`-GR"V_D"'(&\`/9SW"@```$*J"=!,_?P0-/Y+X+3^05`8_I+O'@ +M>/'`X<7/<*```"`;@*7!1,"+<+((+^H#V2#!%0G3`,]P``!&'[(*+^`!%((P +M`-T'\(/`D@@OZ@'9`>4@P&.X]0T$D(3`-@IOY`39403OWZ7`SW&``,PBSW`` +M`)HA<0(OX"&!X'@'V1X:6##/<*````0OH``6`4#/<(``F`\(@,L:6+`-Z`7: +M%;H+HM[)`>"SN+6XN+C>&ABP!*+/<*``@"PPH``6`$#8&ABP8G_81*!L(MR#0ER!$#%C"'#CXCVSW"``*`=\"!``(3H +M`=D>\!L)4@2.(<,/SW"``(`DSW.``(0D\"!```3PSW.``.0=*V-@$H&P$PG# +M`/`@0``%Z`"B`-D"\`+9@.&P"2+@RB`B#L]P@`",%0"``,&`X,PA(H`)\@?8 +M"KC`V1BYE@GOY#MZ`,!`>(#9SW"@```<)*#:R0T('@(%V!6XJZ`Y`^_?H<#@ +M>,]R@`!TQ""")7@`H@$"K^$9V.!X\<#AQ?H*[^8(=<]R@`!TQ"""!B%!@R"B +M!O2`X*`*HN'*(&(&^0+/WY$%S^:)!<_F\<#/<*```#`#@."X3`@"Y]'`X'[Q +MP%X*S]_&"```"B"`+X``'!4(=0`0`"`%Z&8-S^9>#<_FBB`0`,]VH```,`*F +MO@U/X26&"(92(0$`N;@(IN"YRB"B`#KTSW>@```@!1^8GP`(``#."@``'!Z` +M'P"2`0"F#H_A&X<-"$0#.X>B>0CP&X<.)8$?_____QEA`!`"(`#8">K/"Q`B``-!H",/'`E@GOWP?8SW6@```@"QT8D.8*+^9*(``@ +ME@@/YL]VH```,`J&N@S/YOX*K^D(=\]Q@`"$SD:!^F)('@`4`!V`'P````BU +M`>_?1J'QP#H)S]^:<<]R@``<%4""`=D(=0#8">K/`4H@`\` +M``D]02E`_F`-@*(P"@!?3]`._?:G`F#H_F*@_OYHIPSW&``"@T`('/=J```""A +MN`"A"AX8D(H@$``#I@0>@!\````)SW&@```P`X&IN`.A&X;S$@&V#0A$`/N& +M(G\(\!N&#B&/#_____\?9P`G@10`(4`$`"`0(!)URB".#P``@P/*(4X#RB(. +M!`0/[M_*(\X#`B4-%%H+[^:I<,]QH0"``5`9@`\`D1!1\1I8L_(:&+#T&MBS +M.X;/<(``^-+2"J_I(*"F\>!X\<`&",_?"'>EPI/__&EBS!>CR"P_BU@W/YC4`S]_@>/'`Q@^/WPAW +M*'7/<*```"`;@$AV\QH8L-=Q````$,H@C@\``$8#1`;.W^H,S^:I<"8+[^;I +M<40@/H,+\L]RH```$"F"@^D!V2FBY0>/WZEPR7'<_Q(-S__Y\>!X\/'`1@^/W\]UH``` +M,`.%#0B>!@.%NK@#I58,S^8*)@"0`_+N_PGPSW"@`(`<&H#J"*_E12#``5H/ +M#^<&"6_DR7`%%0"6@+@%'1B0:0>/W^!X\<#R#H_?HL&+<#X/;^F!P2(,K^8( +M=<]Q@`"(NL")*^W/<:```""[@0GH$FY#8H@20\`V@SPE@Q` +M``GP`-H#&I@PBB!)#XHA_P^K_]D&K]^BP/'`X<7/=8``-"(@A==Q(P%G1/'`/@Z/WV(*[^8`WJ((#^FJ +M#`_JX@O/Z2()3^1^#$_A-@E/Y(H@Q0_/=:```"`+'1B0SW&``'PE`('`N`"A +MSW&``'@E`('`N$X/[^4`H>'_O@U/X7H)#^G/<*```!#)H)H/C^A`V078%;@@ +MH%(+S_\>#T_I-@Y/Z58-C^B6"```5@J/YB(,3^%V"H_FB@B/X68)S^3V#(_H +M&@VOY@?8V/^."L_G.@H/Z<]PH```,`.`$PA?`,]QH0"``1R!H;B>N!RASW`` +M`/[*-@E/X;H,#^8*#P_D`H6$N`*EN@M/X-8*3^'@>.!XX'C@>&D@ +M@`%O(3\`:2```/;QX'C`_Z(-C^3X_]4#[]\]V.!X\<``V.0:&+#E&ABPYAH8 +ML!#8/@ROY><:&+`6#P`!T<#@?N!X\<#^#(_?"'/'`#@ROWP+9@B0"-8MUL@CO +MZ:EPM@HOZJEP\<\`W:EQS@TOX*C:BB$$"P?P$FU#%PE0 +M`(,)D`"#X9'R#=A6"N_?"KB[\/8-S^:BAQL+$2"&Y,@0@#* +M(,($!"N^(S`@02YJ<`'"D?^2#R`!(,"B#Z_G:G`*".`":G!>"T_D@_!`)!`R +M0"<`$@IQ!@LOZ1?:5211-E4G0!8J>#^_F,"!`#M8.[^8`P/H.K^=J<,X*3^&Z"0_D;0*OWX`D +M`C7@>/'`#@JOWP+9M,&R#J_IBW"R"J_D`,`*(8`O@``()@#!0"$.(HHE!A0? +M"%``+WBL>``A0RY`@\]P```#-"BZ3WJ:"._?88,@P%/`K'@P)E(>CL!J#J_I +M`=D!P1L)4`#5"9``U0G0`,]P```5-%H(S]]K\`[!`-Z1X8(K^4(V!;H`A"`(`#:`:\3P*QX +M`"%!+AF!0Z;'<````+`"IBS8!J;_V!RN7:X<@06F`(91P`[`#/""P`/PB,"& +M#:_I!MD.P%'`BB#_#U#``,!2P`#83\"/P"(/[^,0V14!K]^TP/'`Y!(!MN;) +M)7CI$@&V"WD!V`7R\@V/_P/P`@Z/_Y<#S__@>/'`G@B/WPAUYLF,)?^?!B4. +M$,H@@0\``!,T)`>!WQ[NJ7`*_^;)I7CF&ABP+RB!`TX@C0>O?80M!A3/<(`` +M$"8P($$.SW"``-C@\"!!`&!YJ7`0)DZ3[/7A_[$`C]_@>/'`Y1(!MI/IZA(" +MMH+BRB""#P``##38#H+?"?`O*4$`3B&`!QX-(`$/>.42`;;XZ=/__P+/_^!X +M\<#^#T_?"B,`@!IQ2'4`V.H:&+#E$@&V2/+G$@RVY,D$),*0A'CD&ABP"?1F +M>.0:&+"!"1$``]@]\`8B3@!%>>C)Y1I8L`8@@(#H&ABP^`XAX/'`2@]/WPAW#WV$+084SW"``!`F,"!.#MH/;^3I<('@RB""#P``"C3, +M#:+?RB'"`^?)#R!``^<:&+"""R`!J7#/<(``L.#P(($#@.'C($(`RB!"`UT' +M3]^$*`8$`"&`?X``""<\H`#9.Z#@?SJ@X'CQP-X.3]]^#V_D"'6`X,H@@0\` +M``DT<`VAW\HA00.O?80M!A3/<(``$"8P($X.Y\D0($`#YQH8L"8+(`&I<,]P +M@`#TX?`@@0.`X>,@0@#*($(#J7``V>7_\09/WZ+!0<$`W.02`[8$\'U[`>0K +M#%41$^OY"QZ`A"P&%``A@7^```@F1('E"(&`2I$$%`$QW0I!@`'8`O``V.!_ +MHL"$*`8$SW&``!`F,"%!#@#8A>',(>*!RB!A`.!^A"@&!,]Q@``4)C`A00[/ +M<(``<#(V>.!_`8#@>(0H!@3/<8``%"8P(4$.SW"``'`R-GC@?P"`X'CQP.(- +M3]\(=HH.;^0H=2D(4`#/>(0H!@0`(8-_@``()D"#SW````$V*+I/>LEQ?@RO +MWV�"U1$0`AD"^``"CE8!``(!!URB""#P``"#1(#*+?RB%"`P#?`"&`+X`` +MC.4(V6H-[^@&VGP0`"`@V0&IP:/'`;@U/WP#>Y!(- +MM@OP+RE!`TXA@``X*;^00)0T0!7[W[;4%;]_)<.!X`-@#\`'@`0A4`>!^ +MZ!(!M@\A`0#H&EBP+04OX038X'CQP&(,+^$$V.C)'_\`V`<`[__H&ABPX'CQ +MP.'%1@POX0/8Z\D`W>H:6+,'Z`W_Z\E`>.L:6+-A!4_?X'CQP.'%H<$(=83@ +MRB"&#P``!S1\"Z;?RB%&`XMQ)@UOY:EPBNC/<(``9->U>``8@`\(*'(9)05O +MWZ'`X'CQP*(,;]\(/'`A"@&!``A@W^```@F4A,,!@\D3!!2&Q@#@H///__'`"'*$*@8$SW"``!`F,"!`#AL($`+DR1$@@(#`>,\@0@#0 +M#F+IRB'B!^<&C__@>/'`"')J_PWHSW&``!PN%&H6>`!A@.!T#"(`RB""`,,& +MC__@>/'`P@MOWP#;"'4H=H0H!@0`(9!_@``()@@0#R``V.'`+(FI<*8/+^5- +MCH?GS"=BD0KTJ7#J_P#`8Q@8(*EP<@U@`,EQX0-OWZ'`X'B*(08$+'C/#,(.*!#O3$R0':Q!```"QX`-D`(8!_@`"()E>H-*C@?N!X`-@- +M\(HB_P_/<8``<#(6>4"A`-I!H0'@#WCM"!*!X'[QP"H+;]\(<80H!@0`(8U_ +M@``()L*%A>#*((8/```K-+@)IM_*(H8#$PX0$87FS";BD0#8!/09A0+P`=A9 +M`T_?\<#J"D_?"'6$+084SW"``!`F,"!.#H7ERB"&#P``*S3*(48#=`FFW\HB +MA@.'YLPF8I$+]$(,+^&IA`@``,0Z"\K`0!.(XP'A"P&%,]S@``0)C`C0P[A"U&!`=I`H>!_2'``V0\A +M`0#ER>!_)'@`V0\A`0#FR>!_)'CQP.'%,@IOY038SW&``(`L!-@Z"J_F`MJ6 +M#F_G!-C/<(``B"VZ@-X/+^6O>,H.;^>I<)4"3]_@>.!^X'CI$@&V$"$!`$T! +M[__I&EBPZ1(!M@\A`0`]`>__Z1I8L.D%@`#@?N!X\<#X<=ARA"@&!,]Q@``0 +M)C`A0@[/<8```.'P(8P`@.3*(<(!XR`"`\HB@@&S!(__\<"V"4_?&G`H=TAU +M:'8;\`IQZ7)@?,ES%?`O*4$#3B&`!P]XA"@&!,]Q@``0)C`A0@[/<8``;-WP +M(8P`$"4-$.CL[>W5`4_?\<#AQ0AUA"@&!,]P@`!0)S`@0`XV#&_I']E"#N`` +MJ7#)`4_?10;```AR`-@-\!<)40"$+`84SW.``)`G,"-##GA@$"("`P_J+RN! +M`$XCC`?OZ80L!A3//'`Z@A/WPAUBB8&%,]S@``()U4CQ`8/\"\J00-. +M(HP'CWS,?``C0@[[@A`E#1,_9_NB].TO*`$`3B"!!\QY,"1`#A%XC"`0@,CW +MM@D/X8#@H`@AX.0:&+#<_1\#C__QP`#9#R$!`.7),GD$ +M($"`Y1H8L.3))'CD&ABP"O3JR1$(40`*""_A`]@"V.H:&+#K`H__V03``/'` +M1(`#ZB:`A>F)!F_?BB"$!@L*00`T>2:@T<#@?N!XSW&``"`T%7G/<(``,"+@ +M?R"@X'CQP+X/#]\H=H0H!@0`(8%_@``()L]R@``P(D""E1&,`&&*"'4Q#.,0 +M`(&6$8,`(XHE"T,`)MF>">__`-K"H""`!+VV?0`E@!^``!PN(*!V#^_@"]C5 +M!P_?!+@6>`#:`""!#X``'"Y`H5D'[^`+V.!X\C/ +M<@0`Y!FI<-H,8`#)<1/PZ7#2"6_I']F$+084`"&`?X``B"8T@`8AP8,TH*`+ +MX0#*($$#.0!X\<`(=-ARC"##CX#:S"&!@`KRY,D1(`"#RB`"`VP/8@#*(H(!`P;/__'` +MU@T/WPAU`-[/<($`\`?4J&(.+^6I<(0M`14`(8!_@`#,,,]S@`#\TL"@!MI$ +MH,]Q!`!0)2.@I:!FH$`@#`?`I$2DSW$$`%@E(Z2EI&:D.!B(`T2@SW$$`%PE +M(Z"EH&:@:@Y@`*EPA"T&%,]Q@`!L)B]P`6$)Z<]Q@`"$)PEA6@B@`*EPO04/ +MW^!XA"@!!0`A@'^``,PPT03/Z/'`X<4(=31H-GD`(8`/@`#\+U@E/YU4%#]_@>-#QX'C.\>!X\<"R#`_?HL%(=VAV +MB'6$+084+W`:<``@E`^```@F^@WOX*EP-&TV><]P@`#\+0`@4P`@AP"&$'&X +M\@`@CR^``(@G@."I\L]Q@`"$)S(A`02&#V``J7`(%``@$0A1`00?@!\````0 +M!?"*(!```:>6V`*G`!00(`2&2B6`)!':$]D#Z.:&A>_M`F_?BB"$!O%PRB*" +M(`3T]'_FIEIQ0"B6`@J_"G!*<4(.K_\`VB"`.G``&T`@!!N`)`IP$MDJ#J__ +M`-H@@!IP$!M`(!0;0"7/<*```"!;@`J&(88"(@P`8H8`V`P6!!``(P.#`2`` +M`4'``B)``$##(PAR`"AS`O#"5AG$''Z!\__BB0($`(C#P,(&<`CY(:">109P",(&$`@)H9" +M>Q080"``P:EP>@[OZ`'""!0`((HB_P\U"-$!D!0!("APAB#]#XP@`H`!V,!X +M4R&#`0\)@``*Z!4+$P01"U(`"-D8&4`@&!A`(#`;@"`/\`#8`:<"IZEP?_\V +M"^_@"]@'\(#@.`OB_\H@@@.^"R_EJ7!%`R_?HL#@>/'`]@H/WZ3!P@_OXPAU +M6G"B"B_EJ7`Z<(0M!A3/<(``A"_H0"8`%P'`/0A1``D* +M$"`)"1`@`-@1\``D@"^``(@F-(#/<@0`7!H/(<$$-*"I<'X(8`!J<97H(0H0 +M(&IP`-G2_@_PSW"``.0F,"``!>3H)@^@`*EP!?#6#J``J7`U`B_?I,#QP.'% +M"'("@2,(40"$*@$%`"&-?X``S#`!@1H/[^-(<0AQV@GOZ*EP`_!(<"'_00(/ +MW^!X\<"F"0_?I,$(=78.[^-*)``@.G!2"2_EJ7`:<(0M!A3/<(``A"`1"(4/``"@#Z8/(``H<"_PA"D&!``A@'^``(@FF8B!X@'D +MF:CL$P"`#R!``.P;`(#*($$`8`\A`,HA80`7\&2$$0C!`('BG`KAX,H@H0`/ +M\$2%#PB!`(H@_P\$I0?P6(50<.P+80#*($$`60`/W^!X\<#2#^_>%-JEP0AV +M.G&$*`8$"B-`+@`AC7^``(@FBW#/<8``G-J2"R_?&G#)<&X(;^`J<4`E#Q5* +M(@`@"0E0("&/(/`8C93HY,DA"(X#R7!""^_DBB$0`,]Q@`"$)S(AP00*"6`` +MR7!:#L_G`8^%X'P*QN$ACPT)T@!J#0_FXO$*(8`O@``P(@`1`"!!B`\)@P!B +MCP.(-PL"``L)@@``CP+P`H]!P$#&`8\4V4+`!8]#P`IPK@\OZ*+:`=D3;A5X +M`"""#X``@!8@H@`1`2!!CP")#PH#`$*/`HDS"@(`SW&``!PN%&X6>`!AD>@( +M$@$@`B&!#P```$#)<,S]`KY#=A86`!8!X!8>&!`8'8(4'0?OWJ7`\<#.#N_> +M2'$`%H-P```$`,]R@``(+I1KEGQ"(@X#GF;@A@#=0"8,&#D(P0,`WNP2`(`/ +M)LX0QGCL&@"`A"L&!``AC7^``(@F&XV`X*`.X?_*(,$``-@;K8H,K__)<"GP +M)(8/"$$`W@COX`+8(?`@A#L(00"@I,]QH```(#N!:'"E_1?P-&V984B!(0B! +M`$F!`-L5"E`&%0J1!MR+(A."``D.@1``VDBA`>7=#920B0;/WN!XX'[@>/'` +M"@[/WJ/!"'>$*`8$SW"``(0G+W6N8,()8`#)<%IP-@VOZ.EP)6@*(``GZ7!* +M!X\&G&$*`8$SW&``($+@84 +M`"&`?X``""9A$`$&"B%`+@(E0A!`($$@,'(`V\HC;P"`X\HA@@#D&,`#X!A` +M`(KOA"X!%0`A@'^``,PP"@ROZ#C@?@V/X"+HSW&``(03/WO'`&@S/W@AW&G%(=BAPJ@[OZ`39@.8(=0`*HN+*(`($A"\&%``A +M@'^``&@G!NTO+4$33B6!%P/P_]E%!._>/ZC)!>__!8#@>`6`8O'QP,(+S][% +M@*/!%&X6>,]Q@`#\+3A@0"`2"(0N!A0O=0`ED1^``&@G;@\@`!P1@"!Z<.(* +MK^C)<*X,K^`:<`#?+N@0$@`@C"#_CRKT'Q&`((P@PX\D\@`E@A^```@F8!(! +M!@*X,""`#Z``M"X`(8,/````$`)[R[LE"$``C",$@$[W`((;V68-;__I3)#R6-$ZMX!O2B"*__R7`'Z*EP`-GN"F__ +M*'(Q`^_>H\#QP.'%F@^OXPAU%&T6>``@@0^``/PM(.$`VPGP%&LX8$B`!.H` +MVDB@`>/U"Y2`J7`G_RD#S][@>/'`X<5R"F``"'4`V0:]`"6`'X``&,`UH`D# +M[]XWH.!XA"@%"@`A@'^``)B[SW&@```@.X$IH`'9X'\LH/'`X<6$*`4*`"&# +M?X``F+I9$PP&%.S/=(``<,"V::1D@^P="A$#SW2!`%`,`*0DK$]Y5B/`!E8- +MK^.)(#@P'WV +M;L=W@``8P`?I%8>!X'0/X?_*(,$``-@5I\]P@0`0!]5X0*!H<,EQ!]K=_T4" +M[]ZI<.!XSW&@```@6X&$*`4*`"&`?X``F+LI@")Z+(`'Z2J`66$JH`#9+*#@ +M?O'`J@GOW@AS*'6$*`4*SW"``)2[,B!!#DH@0"""X0'8P'B`X,(@`B3V;<=W +M@``8P$AV".D5AX#@H`_A_\H@P0`!V!6GSW"!`%`'M7C`H&APJ7$(VKO_N0'O +MW@IP\<#AQ0AUA"@%"L]P@`"4NW9IQW.``!C`,B!`#IAQ".@5@X#@6`_A_\H@ +M00,!V!6CJ7"(<0G:K/^1`<_>\<`((0H!0H`(8)_@`"8NV""97FM!F__(*+@>/'`X<4( +M=<]Q@``8Q`N!#R!``PNAF@BOX`S8J7"`V?/__0#/WH0H!@3/<8``A""':$*`4*SW&``-2[`"&-?X``F+O^E0`A0`[N#._H"=G) +M<-O_$P^>$!Z5XKB8#^'_RB"!`QZ5"0A>`C.%`_`QA<]P@`!D'=5X(*`>E0L( +M7@(RA0+P,(7/<(``=!W5>""@R7#A_VT`S][@>/'`_@^/W@AWA"@%"@`AC7^` +M`)B[`(4!W@0@0P"`X,!^1"#"`B9X`*6&(#\-$>L'ZH#@*`_A_\H@P0,`A8#@ +M`=C`>(?N@."H#6+_RB#"`QD`S][@>/'`I@^/W@AVA"@&!,]P@`!0)S`@30X` +MWPKP+RA!`TX@CP?O?^EP-_\0) +MX'CQP`8/C]ZEP0AVUO^$+@4:+W``((T/@`"8NWB%SW*``'"[2B!`(*WK'V)` +MQ\]P@`#X^$'`SW"``"@)0L#/<(``+`E#P`#;1,,&V`/9#=H*)(`/@``P"0HE +M@`^``-#72B9`"?X(K^/X<\]Q!`!0+4H+K^/I<$8);^+)<&`=`!1D'0`4R7!` +MV7+_X0:OWJ7`X'@-!.__`]K@>/'`7@Z/W@AVFG%(=QIS"B$`(0HC0"%(<(8@ +M_`",(`*`A"X%&@':P'KMOP'9PB%!```AC7^``)B[`-@+I0L-$``BI0'8'O`- +MZL]QH```(#N!SW*``*0'7H)">2NE$O"$+@84SW"``!`F,"!`#@<(T`$CI0'8 +M6G"&Z6X(K^`"V$IP(>C/<(``I`<=@"B%.&`(I0T+$"#/<*```!`9@,]U@0!0 +M#!@=0!0<'<`4\+4B'004R7"*<03:U/Y`)0`66@\OWPS9\06/WN!X\<"J#:_> +M2B0``(0H!0H`(8)_@`"8NL]TH```()N$52)#"SUDGA(!!P'>AB%_#X+AT!(! +M`,!^`B5/$(#GRB<,$@&@X)]`X`@@+EA-@UOZ&APE06/WN!XSW"@```@6X`& +MN0`A@`^``'3`X']`H.!XA"@%"@#9`"&`?X``F+LHH.!_*J#QP/H,C]X(=H0H +M!0H`(8U_@`"8NQB%*'>`X,H@@0\```0!RB'A`(@+X=[*(H$#.84!V(;I&:7) +M<$#9`?_)<.EQY?_)<,]QG```0`K:P?_)<.?_R7"'_LEPZ7$+VHS^Y,D1(("# +MRB"!`T`+X?_*(<$#\02/WO'`A@R/W@AV*'(0H!0H`(8!_@`"8NT.``-F&Z@*`@.#*($$``_(!V.!^ +MX'\`V.!^X'CQP-(+C]X(=CIQ2'6$*`4*SW&``$R["B!`+@`A3PY`V;_^R7`@ +MV>[^*6U)"54!,R9!<(``E-A`)X!R-'@`>`3=BB`0``BG&O``((`O@`"8NSZ0 +M`MT+"5X"$H`(IP[P$(`(IPSP(!^`'P```"@%W0;P(!^`'P````S)<*_^SW"! +M`%`,K*#)<"IQ`=HY_J4#C]Z*(/\/"KDP<.!_;R`+`.!X\<`V"Z_>V'((=AIQ +MQ,F(=80N!1JP$`(!`"&`?X``F+LH@%EA**`O"Y`!R7"-_L]W@0!0#+*W)A^$ +M$2@?0!%KI\EP"G$%VB+^0"<`&9(,+]\,V88E_QR(Y'_RB$!!#4# +MC][QP,8*C]X(=<]Q@0#P!Q")0B`2@!&)RB)B(`#>".C/<(``B"T<@.*XRB9B +M$$V)+NHLB5D)@P"$+04:SW"``*0'"B"`+X``E+L`(8]_@`"8NSFO/H`*(4`N +M6*^`YB&GZ`QAX,H@H0#DR0'9(0A.`P@?@!3#IS(@0"0/")$`&H\+"!,!`>`: +MKR6GF0*/W@#;#PI0`!4*D`!H<@KP02D"`2BY(GH&\$$I`@$GN3IB4'`!V.!_ +MPB`.`.!X\<`:"J_>F'$(=X0H!0H`(8U_@`"8NP6%VP@0`$`L@0'/<(``;,`@ +M8,L($0``VV6E#(6["%$`Z7`#_BN%"H4B>`JE9Z4(A2J%387C_T`E#A<4Z`'8 +M!Z7/<(``=!WU>``8@`\!``"DSW"``&0=]7@`&(`/`0``I#'P"(4JA4Z%UO^$ +MZ!Z5,PA?`AZ5"PA>`C*%`O`PA<]P@`!T'?5X(*`>E0D(7@(SA0/P,87/<(`` +M9!WU>""@$?#/<(``=!WU>``8@`\``'P5SW"``&0=]7@`&(`/``!\%0&&!QH8 +M,`.&"!H8,.EPJ_WI<`G_Z7"(<0+:K_V1`8_>X'C@?N!X!(D`V@:X`""!#X`` +M:<#@?T"IX'CQP`H)K]XV:`AWSW"``#S`/6"X'$BSSW"``"#Y0<#/<(``Q`E" +MP,]P@`#("4/``-Y$Q@[8!-D)VLES"B2`#X``S`D*)8`/@`"PUTHFP`<2"V_C +M2B=``,]Q!`!0+5H-;^.I<&;'A<')<.'_"0&OWK+`\<"."(_>"'8H=<]P@0!0 +M#!IPQ*C)<'H-;^,`V3H-;^,(=PHB@"^``#S`0"Z1$8WH%PT0$D`M`180OL5Y +MBB`$!`8/K][E><]Q@`!PP#`A0`0'Z*]Y`")`)%X+;^,*/'`X<56 +M:,]Q@``\P%UA"-GC_P#8"J4L'0(0E0"OWBT=`A#@>`#;5F@`(H$/@`!JP&"I +M!-FT\>!X\<`""(_>SW6!`%`,(Z4`V2BU):4*(<"`1+7*(6(``>'1_\6%0"4` +M$GH)+]\0V4$`K][)$'3][QP.'%I@XOX!C8`-T2\'9M`".!#X`` +M&,!3@0KJ`-@3H<]P@`!HP&E@8'JI<`'EKWW?#1*4J0=/WO'`*@]OW@'9&G`D +M$H\`MFC'=8``&,#3A8'GPB%!``7AG?\'[@#8$Z4*<&!^Z7%A!T_>X'@$B0': +M!K@`(($/@`!IP.!_0*G@>.'%1(F#@79J`".`#X``9,"`H`#8`Z'/<(``3,B* +M(?\/57@@H.!_P<7QP$2(SW.!`%`,`=R%HV.`$NL&N@`B@P^``&C`(*MC@``B +M@0^``&3`8*$`V2.@F@XOX!C8T<#@?BAP`=GB\>!X*'"2V=[QX'CQP#9HQW&` +M`!C`Y+9[/'QP&(.3]XH=J2)J7#W_P.&%^@!V<]P@0!0#"6@ +M!KT`)8`?@`!HP""H(X8`)8`?@`!DP""@`-@#IBX.+^`8V)$&3][@>/'`'@Y/ +MW@AV*'4$B>;_R7"I<`-TN\!-M%7@`((\/ +M@``(_$#'SW"``$3Y0<#/<(``Z`I"P,]P@`#P"D/``-M$P\EP!]D+V@HD@`^` +M`$P*"B6`#X``^"%*)L`)`@AOX_ASSW$$`'`U3@IOX^EP`>8!Y:<-5)'Y!6_> +MI<#@>,]R@`"(+1J"$"!``"4"K^8:HN!X\"'8H=80I!@3/<(``$"8P +M($$.SW"``%#A\"!!`(#AXR!"`,H@0@/)<*EQ[_^U!4_>X'@-`"__*'#@>/'` +M.@U/WBAUA"D&!,]P@`"$)S(@3@[/<(``4"X'C//'`\@Q/WBAU`-Z%X,P@HH+*)F$0 +MBN[/<8``B"T:@1`@0`-V":_F&J&I<((,+__)<2T%3][QP+H,3]X(=RAUA"D& +M!,]P@`"$)S(@3@Y>"6_C*'"`X,H@0@-$"Z+_RB&"`^EPJ7'G__$$3][@>/'` +M>@Q/WCIP*':$*08$`"&0?X``""92$`TFU!``(`9]#/`O*$$#3B"/!^]_R7`& +M"Z__Z7$0)T`V=080"!8&%@@*G#)<:S_D01/WN!X\<#AQ2AUR@DO_RAP +M@.``#"+_RB!"`Y4$3][@>/'`&@Q/WBAUA"D&!``A@'^```@FPH!2$``&$@]O +MZ!_9A^:P#B'_RB!!`XH)+_^I<(#@P`LB_\H@0@--!$_>X'B$*08$SW"``%`G +M,"!`#MT&;^@?V:4!0`'@?N!X"'(S:#5Y`"&`#X``"/S)!B_C`-D(0`A@`^```C\H08OXP+9"'(S:#5Y`"&`#X`` +M"/R-!B_C`]D(0`A@`^```C\908O +MXP;9"'(S:#5Y`"&`#X``"/Q1!B_C!=D(O_J7#T_X4#3][QP.'%"'7L_ZEP]?]U`T_>"'(S:#5Y`"&`#X``"/P) +M!B_C"-D(0`A@`^```C\X04OXPG9 +M`[@5>,]Q@``L_`AA@^`!V.!_P'@#N!5XSW&``"S\"&&$X`'8X'_`>/'`#''/ +M<*````@]"1X#-H`$@!!X.&"*(1(*%GF.">_H@-@,<"$('@,!V<]P@``DU2"@ +M4@\OZ"APSW&```3/%8$!X!6A`-G/<*```$4DH`/9SW"@```()Z#1P.!^\<#A +MQ0`6`4`(=F'`>$@XV<(D!@0#<22;-$,$9`@,]"!\!SW"! +M`)`,`XC"N"4(T0`#@0/:#KH$((,`&0N``,]S@``8QM1[<8L)"QX`1W@#H0.! +M`!P``)#P$VL5>,]V@`"$R0!F/+A3($:`"/3/<($`X`UV>`&(`_")<,=U@0#@ +M#79]Q(VRB0@EC1,()0`0&F(`D==P``#O#TDBP@/1]\]P@`#PR&A@C"`"@,H@ +M@0\``%P`]`=AWL\@(0,)(@(`%FM5>,]U@0!@#@5ESW:```#O`(X(Z!R1AB#_ +M#`D($0*AA@0EOI\`!``!./(*((`?````&`0E`1)!*<<"Z+T#WLHG(A;*(.(! +MRB8A$`5]0"_``@5]*0V> +M%D`OP``Y815X-7DX8*!PSW&``,SB"&$1"-X!1B7`$T(E30`%?0`C@0^``(C$ +MA^K/<(``'-9H8`"I`O"`J0`<0`/U`$_>SW&```#O8XE6(`($4R-^@":""O+= +MN2:BX+O/(:('SR'A!R:B!"&^CP#````,]`&`%0@>`,S)"H#^N,\AX@?/(:$' +M)J+@?N!X\.7$(=@#85B$-!`>E5B'`!!X2`3;/BEQ48J( +M_P:%!""^CP`$``$)\@F%'!V`'X````"4N`FE3PX>$"EPW/\FA4>%%0F>!PF% +MA2(!!(RX":5'I1GPS,F`(`0`'0G>!RF%!2*"#T`!4`"-N2FE1Z4W@)ZY"/"4 +MNI:Z1Z4W@)ZYG[DWH"4`3][@>/'`K@\OW@#95B`-!$:%S!(,M@0B@P\````8 +M*[N`)`030"0.%C*E%0I>`AB-1+C!N`AFB;@($`'9 +M%NE`*T$"D;G6>`"(,J4`WQ$(7P'/<(```.\#B`<(W@`!WP;OB+DRI0+PPKI` +M)`$86&$&B%EA4(D(\#B-/'G"N3ADF6$(B%")/90E>@*E&+M%>U$'+]YCI2&` +M'0G>`#"(`[DU><=Q@`"$R4N1[!B"`"J1!O`_V>P80@``V>!_ZAA$`.!XH<'Q +MP)8.#]ZAP;IP3,`H=@0@OH\`!``!FG+:\A4-'B)3)8\@02W`(%,@5@!`V`GP +M+,!3)<\@1+A3(%8`@-@$)8TO````&"N],VT`)H(E-7E5>EEA^6'/)@'8&1P"(`IP`,&I`%\E,@`0`X +M8"D-7B//<8``<.,@@04I/@``(8)_``#_#RRZ0"+#`R2[`"-!!`;P%2$!(`#; +M:'),)`"@>?(`W!4<`B,9#5XCQ;J'X@':P'H4'((@`^,BNT)S!O``(@,@%!P" +M(W1[426`IF.[`!S`(%_R4FU5>O1ZSW.``)SC4F//T8F +MSA`BOA`<@",%*3YP@.4,'$`NRB#A`<`H800*\H'E`]C`*.$$RB#B`,`H8@7% +M>!`<`"`W\"S`20U>(B$(T@W`N,]Q@`#,WO`A```#O@4N/A`*(,`.`>`'\`D( +MD0(3;@/P$F[/<8``B"U5@2S!)'J&(O\.(KK`V5IY&6$3\`.^''C"N,]Q@``, +MY/`A```6Y@4N/A`*(,`.`>`"N$`@`04P>`C.7`H=Q`1 +MD@``WE8A#03,RBAPZ7%1BGS^Z7#8_B:%$0F> +M!PF%C+@)I5#8!Z4W\,S)@"`$`!T)W@`GKDWH"?P +MR:4<'8`?4````#>`GKF?N3>@'?`?"%X'5B?!%![(SW*``!C&%'HH<.EQ48IC +M_L>E!?`<'8`?4````!$)'A4D'8`?`@````/PR:41C\]Q@`#(Z\*X"F%6)P03 +MSW&``-#K%!R"`/`A`@`IA0:%17DII58G$!(5"%X""MHV&(0@.!B$(("Y*:47 +M\!#:-AB$('&%SW"``#`FA"L&!#`@0`X3"-X`"MHX&(0@@[DII0/P.!B$(.EP +MU?XIA40A?H)LC1?RSW"``(@M%8!D>$0@`@$<:\&X&F+/<(``O-[T()$`SW"` +M`)3>]""3``WP?'C/$QN,&X.&`3\#B-!""`#P(```!$N<&Y +M`>$QN``I%``$V14<0@#I<-?^!/`!V)IP0)<4%($`%12``%EA.&`FA1VU!"&^ +MCP$``,#*("$+Q`AAWL\@(0,I#%`@3"2`H,PDXJ#*(&(+I`!BWL\@(@//<($` +MX`T6((`$`X@(\,]P@0#@#18@@`0"B".%#K@E>`.E!H55)T(=/97&_BF%!"&^ +MCP```#`!M4#R0X4.E46E";4`'<04Q!(,MA\)'@,4V`BU/AA$)'@4`Q$"(<`@ +M&;42A<<:&+`*\`[8"+4^&(0C>!0#$0(CP"`9M1<)W@!XRL]S@`!4UA9[`Y,# +MZ)&Y*:4$(H(/``,``#BZ`]A&>(+B`-G*(0(`S,D+N5<0`@9%>5<86``,\":% +MP+4EI2^5/AB$(RFU/949M2BU/A`"(0"5(94:8@*566$X8%T!+]X8M>!X\<`6 +M"2_>2B8``%8@#`1)A!$*'@8[E,]PH```!"2@E_``%@%!/+``%@-!?;``%@5` +M5B`#`CP80`$`%@U!H+,`%@U`L:``%@U!I+-$(0T#/PT0$1C>V;,`%@]`\Z`` +M%@]!Z+,`%@]!ZK,S#1$2BB0,``0A#P$G#P$1'M[9LP`6#T#VH``6#T'NLPGP +M$-[9LPHD@`^!`)P,"AR$`2AWAB?]'(PG`I('].)N\'[YLP`6#T$"\`#?\+,+ +M#EX0`!8/000A@0\``(R`%PF!#P``B(`D;C!^.;,`%@%`.:`$(KZ/````1\HA +M(0`H\I_M/PT>`+"(SW&``(3)`[VU?:%A'0F>!^BZP'G/(>("!O3NN@'9PB%! +M``^Y)7I)I*BZKKI)I`#9.J`[H`CP`!8!0#J@`!8!0#N@"-D`D#YFPG@8LYBZ +M2:3/<*````0$@!NT-0`/WN!X\<`%V<]PH/ZH!!6Y!*'$R:`0```$H78,C^?/ +M<*```!P%@"D(W@,!V,]RH```"`:BX'C@>`#9)J)Z#,_GSW&``(3/`8$!X`&A +MSW&``#S(`($*Z`#8`*$L!\]R@``$SC&"-7HR@@'A,J*@$```#PB>!Y/-B;B3 +M&ARP`]G/<*````0HH*T$C__QP"8,S^0+Z,H)S^0'Z,]QI```0!F!@+@9H9$$ +MC__@>`0H@`\``"^Z0BG"=$0J_@("($`.+R`(@%![!/(!XE!["0@S`6"QA.@` +MV`/P@-C@?J'!\<"2#L_=*'9$P6AU0:.*(P0`)PD>`E$@P($!V,(@`0`'N$$N +M01%D>05Y&8V)N0VX)7B.N`*E8_`5C07H`VI&(,```:5!+D,4P;L$)H(?```` +M&"3!*[I$N<&Y`>$`*\Y7SKE5,F +MP!`*OP0GCQ\'``#\Y7Q!+D\3P+\5O^5\](T6O^5\^8T7O^5\0"Q/!^5\D[R4 +MO)Z\&PNU`(*E!.L3"94`@N',(JZ`S"!N@@#;PO$@.A`H4$H0_PSW&F```!$*$#A1.A`H41H02%$J$9C0/H!X44H0C< +MRP7/W:'!\_=B'.AP2AU1\$:<$AW`-[/<(``="7`H&T)7@("V<]PH`"` +M'#N@)\%3;^[A4'@$](MQF/\?\!$)T0T;>!!XBW&5_\EP%_`-"1$%''@`'`0P +M"_`+"9$"`!R$,`7P`!R$/P``__\`V`+P`>#_")2"`-@`%`(Q5=D1N>*A0*&" +MN`.A+_`$);Z?``0``0_R"G!/"-\!@./*(($/``!3`&`#(=[/("$#B/\;\,?) +M'0A>!$$H`0+`N2FXP;@:N1NX)7B=N,<:F+,#\,EP!;\%?U/8$;CAH,2@SW"@ +M`(`@$H`$)8`?````&"NX!"6-'P`#```XO:5XSW&```3.$:'/<*```$4$@`#> +M!""^CP`H``!*(4`@SW"@```@#H#"(4(D!/"*#0_CSW"@``!%O(`!WP0E@!^` +M````!"6$'R`````$)8(?``8```0@@4]@`@``UW$``@``P'_/$_6]S"(A@&WRSW.@``!%&(,$()&/``#[+S+R +M!""^CP```PP:\L]Q@`"$S0Z!`-X$);Z?````#`'@#J&J7!>"F_H*G$*\+H/3^?/<8`` +M!,\<@0'@'*$`WD\F`!8D\`43`(;PN,H@(0#/(*$#X`EAZ,HA(0#/<:```$58 +M@06!2W@`V!+R'($!V,]UH```"`:EX'C@>`#9)J6.#X_G`]@'I078F+B)Z!\( +MWR$#VL]QH```"$*A!_#/($`V96Y#PM?!00@OH\`!@```O(!VB1X#''LNA"@! +M`\]P@`!B>C0@5`[/=Z``@"T>R!VGS,F3$@VW@"$"`+H0$P=&)<`0DQH$@H`/PC@H/XUZ'^PK>A4<*G@53(L$" +M`KE!*@`#CN'#N-`BI069]\42`[9DN58C#`0HM'0;@@/`LW4;@@/'I!"KQ,G= +MM"&`AB'_#82Y(:,2B,FD$JNA"IX%Q1(!MA")E0@!!,3)`8"-"!X!&0I>!0#8 +M)/S%R:00```MN(8@_PL%?0WP5B'#!![(SW*``!C&%'IH<+(.;_]1B@`5`"`- +M"%\$Q1(!MB[PQ!(!MI@1``#HN,$HX@#3(&(`"O0/")X&F!&``$2XP;@"\`#8 +MQ1(!MI@1`@#HNL$JX@#3(F(`"O0/"IX&F!&"`$2ZP;H"\`#:B.@(ZKH2`"8! +MX+H:&""T\`&!QPC>`)@1`P"D$0\`S,F+<@AV@"8$$T`F#!)`)@065B!."24/ +M'A7HN],CH@#3(^$`:&;/$2ZP;J&(/\.6&#/,*X]",```&B$?!] +M>,*X"&3/"/`$X`BQ!-AU +M&@(``=X&@8`B`P4HD1[\Q1(!ME8A`@3I&8(#(I(!LCA@&++$R<]QH```(+`0 +M#`'`$0,`8GP`),,4F)*"C!RJ`;-_X)TAA@$`P01`""3&ERS`>`$ +M&0`@%0>OW:/`X'CQP-8.K]T`V\]Q@`"(NB")A"D!`\]Q@`!B>C0A3`[/<:`` +M`"!H$00`P!$"`$$($0'$R9,2`[=V$`T!@"`"`"<+'@%I@`\+'@7/!,-`9,2`[?DN]$C8H`&\H)X0G@")`,`$O`) +MAQ<('@7/89AMC`I<;8]QDD\T5"%X`Q,EV$``! +M8KB=8`OP:'7&\0\+<@!BOR,=P@``XQBB(`>$HJ`B( +M&P@R`<02`;:@&8`/`P"$`(H@"`#)&ABP"?"*(!``R1H8L*`9@`\"`80`X'[/ +M<*```$48@#L(WP//<8``A,T0@0'@$*$>R,=P@``XQB"(`>$@J""(SW"``)09 +M`(`3"$4`BB`(`,D:&+"*V)"X!_"*(!``R1H8L$+8F+C@?O'`*@V/W<]PH``` +M1;R`V(``V!T.7Q4$);Z?``8```CTSW&``"35((&A"1``S,G/<:```""Z$``' +M$:$@V`"A"PV>%LW_*_`;#5X6VO_$$@&VH!D``(8@?H\A\@'?(/#/<(``)-4` +M@`SHQ,F@&(`/!0```(H@"`#)&ABP$?`3#EX5SW&```3/&X$!X!NA[O$,!BR`-@`LGX9!``!DAFR`-A*"2_G)H)1`4__ +M\<#$R<00`@`PB(0J!@3/<(``$"8P($`.A>#,(.*!'?3/<(``;,!V:6!@@.`` +MV,\@(@,4](0J!0K/<(``E+LR($`.%PB1`&8/[_Y(<(#@RB!B``RX`O``V(4@ +M`P$#VL]QH```"$*A`!@$4,3)79``&(10Q,E1@``8@%#$R4@0`@$`&(10`-@! +MH<4`3__QP`(+C]W$R:+!I!`#`)@0`@!R$`$!$PL>`$AP+@QO_P#:"'4'\`'A +M2'`B#&__`-JL:/(*3^?/<*``@"#0@(MQQ,F!PHH);^?$$````,'"?0'`/65! +M:#!URB(&```80%,`&(!0`!8`0``6`$#$R<]TH```"%8@`P(XDVBY)*0XD\P8 +M0`-HN3BST!B``.$"K]VBP.!X\(QN,&X&F(.\!D(G@8@P@0@@`\"````1+K!N@'B +M,;@8>B$*4``3"I``@^(`V,H@X0'`**$#"O#/<($`D`P"@`;PSW"!`)`,`8`% +M>2:G#Y0A`0KJ(.;^(`V1&GV!J8M!&.RQI8 +MM,*XSW&``,CK"6'/`FG`)8X8#6*.&`=MY(* +M;__)<`2%&K?)?8/K]T%(@($'9<(MQ`=P!0/\!`=P!23S<]Q@`"$S48@P`*3&ARP&($!X!BA +M70&OW:'`\<`."8_="'10B0'8,Q&-``"L'A(#-L]V@``XQFYFSW"``!C&P:P4 +M(,\`T8]U>,.LT(_"K&R`8:3/`7*)SW>!`.`- +M5G]@KN"/_'_"OP2_Y7L#\(#;!+JE>F"N0:Y+$`K]W-&ABP\@R#`?F).M")`!++[$O@3P8@G/XI,7`);Y"!Z! +M$FXP(($/H`"T+LEP@"#"`93FRB8&$`*^,":`'Z``&"S/&T(-0(PVT`:@`\`H#``"0@4`0#:`_`!VMC)`!\`0&"%`!_`0&&%`!_`0&*% +M`!_`0&.%`!_`0&2%`!_`0&6%`!_`0&:%`!_`0&>%`!_`0"`5`Q(`'\!`884` +M'\!`S"(/[^$"V=D'3]UPHM3Q\<`S:#5YSW*``)+),6+X'$BP0<"+<`C9 +MT@^OYI[:HL#1P.!^\$@$VSW6``!C&5B7/$_`G01`DL,]QH``` +M!%6A`-ZX_Q[(Q!("MA0E`1#`L0&"7PB?`\BQJ!F$`Q"*SW.``(3)`[@5>$`C +M$`1`(X$#&V,'DSL(4@!AN`>S4(H3:A5X$&&5Z`#8#R"``.H)K^R0'@L[BUN+BXWAH8L`2B`]C/ +M=J````05I@'8":;$$@*VH!H``,P:0`"2S?$('@#""R__2'#$$@*V,(I3(<`` +M1+G"N<`:0@`S:#5Y$*K'<8``A,E@@3<+7P+&"F_B`-G$$@&VA"@&!,09```` +M(8%_@``()LP:6+!$*#X+3H$`(8%_@`"0,D"A&_!6(@,$"(.0N`BC_]@1HR01 +M@`#/$@,V0"`!#'1X2)"CZM",SW*``(3)`[[5?L)B5B0. +M%#L*7P)1B(7J1H9U>4"A48;/<8``L"3P(8(`7+:H$`$!!"*"#P``\/_#N45Y +MJ!A$``7PJ!```;@'0C`"(\O0F#P_DSW*``)`D8;@/ +M>46Y\")!`,2XQ!(,MAT)#@"@'(`?`0"4`,]Q@``$SQ:!`>`6H=CPR``(3)0">`%]5^R6#`%(`0$0A``*`<@!\! +M`)$`X?#/<($`A`P!@""4">C/<*````0.@!!Q`-@"]P'8C.B@'(`?``,``,]Q +M@`"$S1&!`>`1H"$(A0\`@```H!R`'P$`AP#/<8`` +M!,\2@0'@$J&;\!",`[@5>!]G`(<$(+Z/``"`$S[R5B0"%`\(7@(@&H`/`0"+ +M`(?P7P@?`P>7H>C/1!Q`=C`>`WH5B0!%`F!M+@)H0F1I[@)L0^1I[@/ +ML0GP`80/")X!H!R`'P$`C0`E\,G)(0@>`-H-+^?$%``0L7#*(48#Q!(,MLHA +M!0"H'$`0`_`Z@E8D`Q08DQ\)!0`@&X`/``4``,]PH/YH!`7:%;H$HAB3!*(D +MHE8D`Q0(@\]U`0$``*MX$/0)DU4D1!TE@TB3P@QO_WF3Q!(,MJ`4`1`E>*`< +M`!"K>`;R0@I/_]\'``#J"&__B7#)R<02`K96(@$$VP@>`!R2SW6@```@AB#] +M#(P@`H([],8/[^81@<02`;93($X%L!$``63@$0X%$`7:SW"``,#Z1*!V"&_C +MQ!$```#:"KC">(P@!(O$$@&VRB*&`X`A`@`*@1!RRB,&`,HCA0!X$H(PSW"` +M`%365G@#D!!SRB#%`(P@!XUKH4+W`-B(Z$F!L;I)H07P:H%KH?GQ"',$'8`? +M``,``,`5`A`A:C!SRB'-`$)Y.J4`'8`?``$``,02`K8,Z*02`0"3S?&YQ2"B +M!,\@80"3&ARP`8(/")X#D\V`N),:'+#$$@``BB4&%*QXSW:``!`F,"9#'C"* +MA>/,(^*!'_3/<\A(@,6](0H!0K/`U02`P&X$@$!P[ME>50:1``(<88A_0R,(0*"%_0P +MB@.Y-7G'<8``A,EGD1\+4@`HD1L)7@`3"U$`8!(!`82Y8!I$``/PC;@R,]Q@`#\U`"AQ,FD$`$`%0D>!1$)7P65N28+ +M;]^D&$``Q!(#MJ03``#K>%8C`@2^\O2X`=\(#D'_Q,FD$```TP@>`P'8//S$ +M$@&VE@XOWQVQQ,G/=Z````C$$`(`,(BL>C`F0!Z%X,P@XH$=],]P@`!LP'9I +M8&"`X`#8SR`B`Q3TA"H%"L]P@`"4NS(@0`X7")$`F@NO_DAP@.#*(&(`#+@" +M\`#8`]DBIX4@`@T`&`10Q,D]D``81%#$R2^`$PD>`,S))H``&$!0S,DND`;P +M`!A`4,3)0!`!`0`81%#$R3&`R!```/&XSR$B```80%#$R4@0`0$`&$10`-@! +MI\3)E!```.FX.`F!_[K\WP0```+8"?S$$@&V';'/<(``%-7@H-C\Q,F8$`$` +ME!A``,02`;:`(0(`#Y%=D0FQ2+&"#*_F)H'$R7@0``&9_(#@F@0"`"8([^&+ +M<,3)5B`#!%4@1`T)DR6#2)-*"6__89/XN#P,0?\="!X&`]G/<*````0HH(H@ +M$`!C!"``R1H8L,02`[:D$P``AB#UCU8C`@0&\@/9SW"@```4*:"I@O2]RB6! +M'Z````@A\L]T@0`P$\*$"9(9#K00)8)`A*X/+_]`)`,4*@B/WA,$``"GN`FR +MM+T)DJFB@",#!9(/+_](D@/8SW6@```(`J7$R<]R@`!8X#&(PKDK8L]R@``< +MXBEB!4(@0`V@0`80%#$R5P0`0$`&$10Q!(!MAR1AB#]#(P@`H(4]&`1 +M`0$`&$10Q!(!MAR1!""`#P``C(`1"($/``"(@#F!`!A`4,02`;:D$0``!""^ +MCP``0(@&\@&!\+CL"8+_$?`Z@0`80%#$$@&VI!$```0@OH\```!'!?([@0`8 +M0%`!V`BE`]@%I<3)`8`-"-X`/@P/WP3P,@P/W\]PH```13R`&(!7"%\%!"&^ +MCP`&```E]`2%+R8(\"'RQ,FP$`$!@"$/"I8+K^=`V`QP%0A?`\]PH```"`2` +M+R8(\`_R`=C/<8``)-5*"2_G`*'/<8``!,\5@0'@%:$F#T__!""^CP8`R@`( +M<1SRSW"``,PB`X"`X,H@X@K/("(#W`IBW$#0@3PX)\`8.;_\T(T\.`_!V$0\!D\U3('Z`!_+)R<42 +M`;8>$@(V4OS/=8``+-:I<,02`;:F_,3)R1(0ML]V@`!\)*`0$0`!V`"F,@]O +M_^EP`-D@I@KHAB!^CZWRQ,F@&$`$R1H8M,02`;;/A5['H-88!ZC`8&5"-X`M@LOY(#8"'((W)/-DAHXJ[BL +MN,02`[:3&ARPL(LS$XX`!+W%?<]V@0!`#)AUIK:A@PAQ/PV>$4\@P0*,N9,: +M7+#/<*```"[R@`SP+RC!`TX@C0<!X>YDQI`4H23P$-B2&ARPJ7#:_,3) +M`8`5")\#'L@!V@`@@0^``'C&0*F3S5,@?H`/\L42`;;/<(``B,10B4I@BB`$ +M`((.K^28$0$``-J3S2T(7@`O"EX'@[B3&ARPSW"!`)P,`8#$$@&VF!D``,G) +MW@WO_AX2`C8%\*.XDQH*(`0``*5Q`@_= +M\<#B"2_=]-J")`,]"'4Z<8MPSW&```3;L@TOW1IPSW"``)@/#8`%V16Y"^@+ +MH=[)`>"SN+6XN+C>&ABP!*$!V'IPSW>@```$":?/`6HL]P +MH/X8!02A0"D`)*5X!*'`?@;TJ@DOYP#8"'9XRL]QH```+C6!`K@=$@(V,""` +M#Z``9"Y$>`1Y!"%2!++PI!0`,+BXI!P`,$((+_\*<'()+^<`V`AVSW"``"S6 +MF'`*<0S\B'`^_)[P`]B:_A`-D#\/_8AB5_&\0<`#`=#5X0 +MH!R`/P$`C@#9#1X1H!R`/P$`A@!F\`;NH!R`/P$`C`!@\"3``[@5>'`@000H +M=(8D\9\-\A$)7@*@'(`_`0"+`$_PH!R`/P$`B`!)\%Z(P!2!,`\)@`"@'(`_ +M`0"1`#_P`<$1"9X&H!R`/P$`D``!W3CP)I`S%(`P10D.`,]R@`#D(@&"RQ(! +MM@KH++G$N0#8#R!``".")'@(\,#8&+@$>1!Q`=C`>`KH(L`1"%(`H!R`/P$` +MC0`!W13P"L&,(?^/$/+/<*```"`;@")X%0B%#P"```"@'(`_`0"'``'=@.;, +M)2&04_4@'P`5@.9D]5,E?I`$\@Z'@.!>]64-7A`!VDIP`_`0($``*>@O*P$` +M3B.!!RAS@"/"`93ARB-%``*[,".##Z``&"R2:3`DC!^@`+0NCWR1<\!ZY^K/ +M<(``Y"(`@`GH$2!`@,H@@0\``)PA1`X!W0#8`O`!V(#@+//)!^_<@"0#/?'` +MH<&+<3X/[^(%V`GH`,'/<(``L"05($$``)$"\`#8H<#1P.!^X'CQP.'%H<$( +M=8MQ$@_OX@78!^@`P<]P@`"P)#5XH*"U!^_4$IP'#@?Z'`X'BAP?P<"+3QP$+`!""0#P```!A!*-`B%PA> +M`\]P'$?'<04I/@`*(,`.`_!!*8```L$-"1X"4R&"`".Y!O!3(<(`(L%$N4`H +M@R!U>U1[SW*``)SC!<]V@0`P$R"&F@^O_D`F`A0! +MIAFU"_"`(@,%B@^O_CV5`;4BE1FU.&`8M0:%F0;OW`6EX'BAP?'`%@[/W*'! +M*'4(=CIR&G,$(;Z/`0``P(AW+_1`Q0'9&0T>$D$MP!#!N`'@02U!%,&Y&6$. +M\!D-GA8@P$2XP;@A:`0E@!\"````,;@8>2$)4``3"9``@^$`V,H@X0'`**$# +M"O#/<($`D`P"@`;PSW"!`)`,`8`%?((`+"D$``8`7"%``;'TP)$,>8-B,N-X++]VI<0#`SW&``+`D%0A0`!$( +MD0`(%``Q%2%,`P"D*'"U>%(+;^$,V6T%[]RCP/'`Z@S/W,02`;:*)P84Q!$" +M`,]Q@``8)NQZ0B$-`@`A3@[/<8$`X!,C@<]S@`#\XP0A@0\``P``12%!`^'! +M(,)<>L*Z]".#`,]RH```(%J"<+L;"N0`2B``(!!X<'L4V@HD``2:_PL('@8* +M<$;PQ,G$$`(`,(CL>C`E0!Z%X,P@XH$=],]P@`!LP'9I8&"`X`#8SR`B`Q3T +MA"H%"L]P@`"4NS(@0`X7")$`9@AO_DAP@.#*(&(`#+@"\`#8`]G/.!^X'C@?N!X\<#AQ0'8\!P(L`#=@P"`$2!`@,PF(I`%\MX.3]Y`?@'EVPW4D[D# +MS]Q`@,]Q@`!0>T"A`8`!H=[QX'[@>.!^X'C@?N!X\<#AQ80H!P,!V@`A@7^` +M`#2&0*'Z_P#="_#/<(``+.WP($`#@.#B(`(``>6P?>\-E)-Q`\_/'`P1("M@\B`0#!&EBPC^HZ"R_C!MB`X,H@@@\` +M`(T38`$"W=(*K]X&V-'`X'[@>.!^X'CQP,`2`K8/(@$`@.+`&EBP[`_A_\H@ +M80#O\>!XX'[@>.!^X'C`$@&V$"$!`.!_P!I8L.!X\,@/XO_*(((#M0+/W.!^```4```` +M)````,S,___QP`78%;@0&``(!=@5N!`80`C/<(``&!!N"&_F)-E""Q4````$ +M@`$```"````````1````XF$%```%````````2,*``-@Y@`"8`8$`U/"``!0I +M@`"`\H``````````````````````````````````;"#`$`\;"2+<'<`0"@`; +M0"``&VX*``!A@``;;A<``&$``1MN&```80`"&VX9``!A$``;;@$``&$G``!A +M(@``80``&R0@`!LEY!W`$7`%P!(!`!MP"```80\<'2($`!TFZ!W`$`$`&S#H +M'<`1@@0;)`@`&R4$*,`1XP\`80``&R2``!LEY!W`$0``&R0``1LEY!W`$0`` +M&R0``ALEY!W`$0@`7W`$``!AV!W`$/_^&S+8'<`1U`\`8=@=P!```1LPV!W` +M$=`/`&$``!LE``$;)%P!,B``#&$0,``20```$E#T4` +M(@!<`#GO_P`R'```9`"`$R0!`!,E.!S`$0]W$R+@',`1`@`!8@\!$R($",`1 +M!P`3)0<.$R0$*,`1@`C`$@0HP!&$",`2R$G'$0]P$R(!`!,P!"C`$8P(P!(8 +M*,`1#Q,#(@@`6#$#`!,D```3)00(P!$``!,D.$7`$04``&$``%@X!`!8,0`` +M$R0!`!,E.!S`$0``%20````AZ!W`$`\3!R(/9`$B"@`!0`@``7`;``!A"`!8 +M;@8``&$(``=P`@``80`"7#$"``!A`"!8,````&$!0A,D```3)00HP!&"!!,D +M&``3)00HP!'H'<`0YO\3,O__$S/H'<`1```!)`@``24/`6,B`0!2)`@`!VX" +M``!A```5)````"$4``!A<`7`$N@=P!$!`%(DM!_`$`(`$W`"``!A"`!D,>,/ +M`&$/$U(B#Q-2(@$`4FX$``!A@@03)`@`$R4$*,`1!```88($$R08`!,E!"C` +M$0```&%\.X"!``#`%@(!$V1"`1,D!"C`$3S'@($``,`6!@$38@0(P!`$`!-D +M#UP`(@H``$``!@!P&@``80``$R0``!,E``#`%R``6#'((,`0<$7`$!`(P!`` +M`!,E`P`3)!P(P!$<",`1```3)`0(P!$/%!4B!``5)@\P("+[_S`R`P`3)!@( +MP!$/%!4B`@`5)@\@,"(``!,D$$7`$1@(P!$0`%@Q#P`3(@$`$S`$*,`1#WP3 +M(@@`S!$``!,E```3)#1(QQ$/>Q,B`0`3,`0HP!$/%!4B`@`5)@]-$R($$,41 +M`@`3)/`1```?'P``")$``!P6```)D0``$`D` +M``J1```#/P``"Y$``#T]```,D0``/3X```V1```_`0``$1`^2$@`X!`$```` +M#2`$````81`B````($,Y`````."$`0``X1`!`````A"7RP4`,&`+````#]($ +M````&-+\__\?`7,0````">")AH2$"N"$A```"^"F5=<@#.`BBRPR#>"JB8>^PQ%^"2C(N*&."*B@``&>!^2><@&N`BBRPR&^"33;>^PQ)&`" +M`````G,`````$2`4A0$`&1`&````$=(#````,>#_MW8`,N#D)3\`,^`B4@X` +M-.`N````->``````-N`V-C8V-^`V-@``"1!N7P``&A``````,1"&`0``,A"0 +M`0``,Q#(````-!!0````-1"`````.A!I````.Q#`````P1``````)(``/``` +M*N#YY>`>>^PQ*."+BXF)*>")B0``#&"#)0``.!!2 +M````.1"6````08`!`````D;@<[G2X'.1P.![?;S08VFZT&-1KM!KO?\`C, +MY7()2F4R"4@D\@C'X_$(1J.Q"$4BD0A$(G$(P^%0"$)A,`C!8#`(P6`0"$#@ +M[P>_W^\'O]_O!S^?SP<^G\\'/I_/!SZ?KP>]7J\'O9[/!SZ?KP>]7J\'O9[/ +M!SZ?SP<^G\\'/I_/![_?[P>_W^\'O]\/"$!@,`C!8#`(P6!0"$+A<`C#(9$( +M1"*1",6BT0C&X_$(QR,2"Y +MG$X'N]V.!SQ>KP>^WP\(0&`P"$*B,0WI=#H-S6:S"_G\\'O]_O![\?$`A`8#`(P6`P",%@$`A`(/`'/Y_/![T>CP>\W6X'NYU. +M!SJ=;@>[W6X'/!ZO!SV?SP>_'Q`(0&`P",%@,`C!8!`(0"#P![_?[P<_G^\' +MO]\/",!@4`A#HO$(R66S"XFZT&M)E,!K%8#`8T'`\(1"*Q",5BT0A&H_$(Q^/Q",?CT0A&8[$(12)Q +M",.A4`C!8#`(0"`0"$`@$`C`8#`(0:%P",,AD0C%8M$(1N/Q",?C\0C'H]$( +M1F.Q",4BD0A`'HX&,%@L!C&9;`:TFNT&.-UN![O=;@>U6JT&-=IL!C)9+`8Q +M&HX'P*+1",;C$0G(9%()2N5R"'1L:&AHB(B`?'AT;&AH:(B(B(B`?'AT;&AH:(B(@ +M'QX=&QH:&B(B(B(@'QX=&QH:&B(B(!\>'1L:&AHB(B(B(1\>'1L:%Q'AX<&A@5$AX>'AX> +M'!H8%1(B(B(B(1\>'1P:&!@B(B$?'AT<&A@8(B(B(B$?'AT<&A@4(B(A'QX= +M'!H8%B(B("`@'QX<&Q@6$AX>'AX>'!L8%A0B(B(B(1\>'1P9%Q'AX>'!L7 +M%1(B(B(B(B`?'1L:&AHB(B(@'QT;&AH:(B(B(B(@'QT;&AH:(B(B(!\=&QH: +M&B(B(B(B(!\=&QH:&B(B(B`?'1L:&AHB(B(B(B$@'AP9%Q'!D6$B`@("`@'AP9%A0B(B$A(2$>'1P9%QO@`9R``&R0`&R@`! +MS``%S0`%RP`$S@`#SP`*T``*T0`"T@`"TP`*U``*U0`"U@`"UP`*V``*VP"( +MW`"(W0"JW@#=WP``XP`(Y``(Y0`*Y@`*Z```ZP`([``([0`*[@`,,0`D,@`F +M=P$P.`(P!`!,.```Y0%SY@$*I@)SIP(*^P#_CP$@5@(@@P$`1`(`C@$/50(/ +MD`$`3@(`D0%]D@%]DP%]3P)]4`)]40)]6@!56P!5_0`!Z@$$_@`3_P`&;@`* +M>0`-=0`!?P`/AP`.F0#%F0#-?`$-@`$-/0(-00(-?0'_/@+_?P'_0`+_)P`< +M*``8*0`<*@`@('>P(0S@$#CP(#D0(`O0$)?@()QP$,B`(,O@$) +M?P()R`$&B0(&I`$0J@$2I0$0JP$290(0:P(29@(0;`(2WP$!UP$`H`(!F`(` +M>@$!.P(!```T`0`V`0`^`5<_`69``7=!`9A"`0=?`:I@`:IQ`7D?`@`I`O\J +M`O\R`GFA`%NB`!NC`#"D`!*E`""F``>G`!NH`!*I``>J``"L``FM``:N``RO +M``FP``:Q``RR``>S``2T``JU``:X`%Z^`!G(``;)``;*``',``7-``7+``3. +M``//``K0``K1``+2``+3``K4``K5``+6``+7``K8``K;`(C<`(C=`*K>`-W? +M``#C``CD``CE``KF``KH``#K``CL``CM``KN``PQ`"0R`"9W`3`X`C`$`$PX +M``#E`7/F`0JF`G.G`@K[`/^/`2!6`B"#`0!$`@".`0]5`@^0`0!.`@"1`7V2 +M`7V3`7U/`GU0`GU1`GU:`%5;`%7]``'J`03^`!/_``9N``IY``UU``%_``^' +M``Z9`,69`,U\`0V``0T]`@U!`@U]`?\^`O]_`?]``O\G`!PH`!@I`!PJ`!RY +M`0>Z`1!Z`@=[`A#.`0./`@.1`@"]`0E^`@G'`0R(`@R^`0E_`@G(`0:)`@:D +M`1"J`1*E`1"K`1)E`A!K`A)F`A!L`A+?`0'7`0"@`@&8`@!Z`0$[`@%B`<]D +M`<]F`<\L`L\N`L\P`L\0``0`"P````,![`$%`!``!``1`!(``P`*``L`-`$= +M`C4!'@(V`1\")0````H`"P`$``\``P'L`1``.`#D`:4"2``2`",````-$2(# +M_!B``-@8@``L&8``T!B```,![`$"`>L!!0`$`!``"@`+``8`"`!\`8`!/0)! +M`G,!=P$T`C@"EP%8`ID!6@*6`9@!5P)9`MP!G0(E`)H!6P*<`5T"```````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````&```````````````````````` +M`````````````0````(`````````+A$O%S`0,2@R$3/R-B(X$3D7.A`[*#P1 +M/?)`(D$!2#A).$HN2RY4'%4<5AQ7'%HX6SA<.%TX8%AA6'@X>3B('(D````B`*!``$`````````I@*!``````#_```` +M_____P`````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````!S+```8RP``&,L````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````````````$A/```%```"!``` +M`,S#@``````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````6!X```````"P@P```0```*C2```" +M````+#8$``,````4-@0`!````,3*```%````M+@$``8````@RP``!P```)S- +M`0`(````?,P!``D```"`6`0`"@```$P1!``+````S`L!``P````\8@0`#0`` +M`'"J`0`.````+``!``\````LA@0`$`````P_`0`1````^"X!`!(```!LA0$` +M$P```)Q=`0`4````Q'\$`!4```"\[```%@```&19!``7````K%P$`!@```"4 +M*`0`&0```%0>```:```````````````````````````!`_\```#_`@#_``(! +M`_\"`P3_`@(*`0(""_\"!04"`@(`_P(`_@,!`/\$`0$"!0$"`?\!`@#_`0#^ +M!@,`_P<#`PH(`P,+"`,"`?\#!04"`P,"_P,#"?\#`@#_`P#^"00`_PH$!`H+ +M!`0+"P0$"`P$`@'_!`,$_P0%!0T$!`+_!`(`#@4%"@\%!0L/!08&$`4%`A$% +M`@`2!@#_$P8&"A0&!@L4!@0'_P8$`A4&!@G_!@(`_P8`_A8````````````` +M```P!`0`"@````0```#,PX```````#@`!`!<`00`-`$$`%0!!``@`00`,`$$ +M`"P!!`"X`00`%`($```"!`!X`@0`]`($`/P"!`#4`@0`?`,$`(`#!`"(`P0` +MC`,$`)`#!`"4`P0`P`,$``@$!`"X`P0`_____________________P0```#_ +M______________\#````_____P``````````_____P``````````_____P`` +M`````````P```!`````#``````````````````````````<'`0'(`,@```!A +M`%``D0"``.@`4@!Z`)8`O@!0````($X```````````````````0````"```` +M``````$````!````'@```````````````0$.#@```````#((`@\#``$````` +M`````0$.#@```````",$`@H`````````````]`$````````````````````` +M``#D?(`````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````$`````"0`0```*`` +M$"<``.@#``#H`P``[#2``.PT@`"PT(``K-"``*S0@`"DT(``L-"``*S0@`"L +MT(``I-"``*30@`"PT(``L-"``*30@`"PT(``J-"```````#__P```0$````` +M```````!`````'0D!`!T)`0`="0$``PF!`!T)`0`="0$`!`F!`!T)`0`0(P` +M`)R2``!T)`0`="0$`'0D!`!T)`0`="0$`'0D!`!T)`0`="0$`'0D!`!T)`0` +M="0$`'0D!`!T)`0`=*4``%RB``#,I0``="0$`'0D!`!T)`0`>)L``$2J``!` +MG@``&)\``.R=``!T)`0`="0$`'0D!`#8H0``="0$`'0D!`!L+@0`=#`$`'0D +M!`!TC0``O!($`'0D!`!T)`0`="0$`'0D!`!T)`0`="0$`'0D!`!T)`0`="0$ +M`'0D!`!T)`0`="0$`'0D!`!T)`0`="0$`'0D!`!T)`0`="0$`'0D!`#XE``` +M[)0``."4``!T)`0`="0$`'0D!`!T)`0`="0$`/B6``!T)`0`="0$`'0D!`!T +M)`0`="0$`+"G``!T)`0`="0$`,QV!`#L=@0`="0$`'0D!`!T)`0`D'4$`'0D +M!``4FP``1)L``'0D!`!T)`0`<)$``#R1``!T)`0`="0$`'0D!``TF```<*T` +M`'0D!`!T)`0`="0$`'0D!`!T)`0`="0$`'0D!`"(H0``="0$`#B8``!T)`0` +MU'8$`'0D!`!T)`0`="0$`'0D!`!T)`0`="0$`'0D!`!T)`0`2),``'0D!`!T +M)`0`="0$`'0D!`!T)`0`="0$`#RG``!T)`0`="0$`'0D!`!T)`0`=)(``'0D +M!`!T)`0`')@``'0D!``@F```="0$`'0D!`!T)`0`="0$`'0D!`!T)`0`="0$ +M`'0D!`!T)`0`&)<``'0D!`!T)`0`3)4``&RM``!T)`0`7*<``'0D!`!T)`0` +M5)$``+RF``!T)`0`="0$`.29``!T)`0`="0$`'0D!``$F```="0$`'0D!`!T +M)`0`="0$`'0D!```8```#_!P#`!P```/\@ +M``P0$``$`1`.$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0#Q`)$!`%"A`+$!`0 +M$`(0$`T0$!`0$!`0$!`0$`8#$!`0$!`0$!`0$!`0$!`($!`0$!`0$!`0$!`0 +M$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0 +M$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0 +M$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0!Q`0 +M$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!``````N-"````````` +M`````````````````````````````````````````````````````````/\` +M``#_______________\````````````````````````````````````````` +M```````````````````````````````````````$*@$`0,4``%`P`0!`Q0`` +M9,`!`$#%``#@KP``7*8!`%S8``!`Q0``0,4``'2J`0!TJ@$`=*H!`'2J`0!T +MJ@$`=*H!`'2J`0!`Q0``0,4``$#%``!`Q0``!%4``$#%``!`Q0``0,4``$#% +M``!`Q0``+-@``!38``!`Q0``0,4````````````````````````````````` +M`````````````0````$````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````$````"`````P````````#_````_P```/\```#_```````````` +M````````?-P```4```($````S,.``````````````````*3E```%```"!``` +M`,S#@````````````/\````````````````````#````'P`````````````` +M`````!!"`(!+2TM+2P`````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````_____P`````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``"``````````````````````````/____\````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````````````@``` +M``````````````````````#_____```````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````````````````(`````````` +M````````````````_____P`````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````````"````````````````` +M`````````/____\````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````@``````````````````````` +M`````````````````````````````/\````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````#_____`````/____\`````_____P````#_____```````````/ +M`#\``0````\`/P`!````#P`_``$````/`#\``0````\`/P`!``````````\` +M/P`!````#P`_``$````/`#\``0````\`/P`!````#P`_``$`````````#P`_ +M``$````/`#\``0````\`/P`!````#P`_``$````/`#\``0`````````/`#\` +M`0````\`/P`!````#P`_``$````/`#\``0````\`/P`!``````````\`/P`! +M````#P`_``$````/`#\``0````\`/P`!````#P`_``$````````````````` +M`````````````.H*H@I>"AT*X`FE"6T)-PD$"=,(I`AW"$L((@CZ!],'K@>* +M!P`````````````````````````````````````````````````````````` +M`````````````````````````````````````*PB```"````!````,S#@``` +M```````````````((P``!0````0```#,PX```````'(!``"H`@```PD#"04) +M#!$`````JJH#````AMU@`````"`Z_P`````````````````````````````` +M````````````B````&```````````````````````````@$````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````!P`````````'``````````<`````````!P````?````'````!\` +M```<````'P```!P````?````'````!\````<````'P```!P````?````'``` +M`!\````<````'P```!P`````````'`````````!Z`````````'H````````` +M>@````````!Z````?P```'H```!_````>@```'\```!Z````?P```'H```!_ +M````>@```'\```!Z````?P```'H```!_````>@```'\```!Z`````````'H` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````9F8.``````!F9@H` +M9F8&`&9F!@!F9@(`9F8"`&9F/@!F9CX`9F8Z`&9F.@``````9F8V``````!F +M9C(``````&9F#@```````````&9F!@`````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````````````````````0`!`0$! +M`0$!`0$``0`!```````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````&`&@``````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M^S6,`#.Q```````````S```````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````>'AX> +M'AX>'AX>'AX>`!D<'AX>'AX>'AX>'AX`'AX>'AX>'AX>`!X>'AX>'AX>'@`! +M!@($`@(```0$!@0(`P`````9'AX>'AX>&!D>'AX>'AX8&!X>'AX>'AX>`!4> +M'A@5'AX8&!X>'@,(``````8```````````#_!0```````!@8&!@8'0$&!@8& +M``8``!X`'@`>`!@`!@8&`0$!`?T&!@````````8!`0``'@`````````````` +M`0`````````````````5&!@8&!@8&!@8%1@8````````````````````_O[^ +M_OX`%!88&!02$!@8````````````````````````````````````%1@8&!@8 +M&!05&!@8&!@8%!(8&!@8&!@8&````````0````$````1&!@4$1@8%!08&!@` +M`````/L4%!04%!@8&!@8&!@8&!@8&!@8`!@8&!@8&!@8&!@8&!@`&!@8&!@8 +M&!@8`!@8&!@8&!@8&``8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8`!@8&!@8 +M&!@8&!@8&!@8&!@8&`$!`0$!`0`````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````````!65```>P````````!: +M5```.P````````!:5```>P`````````*(```.P````````!:5```0P`````` +M```*`````0```#`P`````````````````````````0```#\````````````` +M```````'`````````@(````````````````!``("``$```("`0`!`@`"`@`` +M```!``$``@(!``````````$````````"`@```0```0```0`````"``("```` +M``(```````(````!``````````````(```$``@`$```````````````"``(` +M`````````````````@`"``$``````@````````````(``0(``@("```````` +M`@`"```!`````````````````````0```0````(``0(```````````,"```` +M```````"``````("`````````````````````````0`"`@`````````````` +M`````@`"`0````````````(``````@`"`@`"`````````@`````````````" +M`@(``````@`"`@("``$```(``````0(``@("``(!`@````(````"``$```(` +M``(!`````````````@````````````````(``````````````````0````$" +M`0(```("```````!``(```$``0`"```````````````````````````````` +M```````"`````````````@````(`!``"`````@````(````"``(``@(````` +M```````"``````(``````@``````!0````(``0```0```0(````````````` +M``````````$```````$``@````$``@`!``````(````````````````````` +M```````````````````!```````````````````````````````````````` +M``````````````````````````````(````````"```````````````````` +M`````````@``````*2G_____```````````````````````````````````` +M```````````````````````>`0``+`L````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````$"`P0%!@<("0H+#`T.#Q`J*BLL+2XO2DM,34Y/4&ML +M;6YP<8N,C8Z/D:RMKJ^PLM@XR`A$>N0XR +M`Q8>NPXR!!L>O@XR!2`>P`XR!B4>PPXR!RH>Q0XR""\>R`XR"30>R@XR"CD> +MS0XR"SX>SPXR#$,>T@XR#4@>U`XR#DT>UPXR(E!`&2``)&!`'B`V)G!`(R`R +M*`!!*"`V*A!!+2`U+"!!,B`V+C!!-R`Q,$!!/"`V,E!!02``-&!!1B`V-G!! +M2R`Q.`!"4"`V.A!"52`U/"!"6B`U/C!"7R`Q0$!"9"`U9&!$OB(T9G!$PR(P +M:`!%R"(T:A!%S2(T;"!%TB(T;C!%UR(P<$!%W"(T`!&\"(T>A!&]2(T?"!&^B(T?C!&_R(P@$!&!"(T@E!&"2(`A&!&#B(T +MAG!&$R(PB`!'&"(SBA!''2(SC"!'(B(TCC!')R(OD$!'+"(SD4A'+R(`E6A' +M.2(SEWA'/B(OF0A(0R0SFQA(2"0RG2A(320SGSA(4B0OH4A(5R0RI6A(820R +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````````````"$$@$`,!8!`&`3 +M`0"`%0$`3!,!`#@2`0!`$P$````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````/``\`#P`/``\`#P`/``\````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````!``$``````,``D`#0 +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````X',$``H````$````S,.````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````````````/____]<$($````` +M``````"$L8``>"V!`!@`````````````````````````_____P`````````` +M```````````````````````````````````````````````````````````` +M`````````#8!``"J````!`$``((```````````````#@````@``````````` +M``````````````````"`]```@$L```!````````````````````````````` +M``#D````7````$`````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````+'P$`/!]!``$?`0`M'H$`!!\!``L>`0` +M5'L$`#AX!``D?@0`='H$`,A^!``````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````"DD]8````````````````` +M``````````#226L``````````+`M@0``````@````````````````````(`` +M``"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("` +M@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("` +M@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@``"```` +M````````````````````````````@```````_P```````````@`````````` +M`````````````````````(```````/\```````````(````````````````` +M``````````````"```````#_```````````"```````````````````````` +M````````@```````_P```````````@`````````````````````````````` +M`(```````/\```````````(```````````````````````````````"````` +M``#_```````````"````````````````````````````````@```````_P`` +M`````````@```````````````````````````````(```````/\````````` +M``(```````````````````````````````"```````#_```````````"```` +M````````````````````````````@```````_P```````````@`````````` +M`````````````````````(```````/\```````````(````````````````` +M``````````````"```````#_```````````"```````````````````````` +M````````@```````_P```````````@`````````````````````````````` +M`(```````/\```````````(```````````````````````````````"````` +M``#_```````````"````````````````````````````````@```````_P`` +M````````````````@0````````""`````````(,`````````A`````````"% +M`````````(8`````````AP````````"(`````````(D`````````B@`````` +M``"+`````````(P`````````C0````````".`````````(\`````````P`$` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````\#0``,`T``!$-0``V#0``$@U``"X-```]#0``/\```#_ +M````_P```/\```#_````_P```/\```#_````_P```/\```#_````_P```/\` +M``#_````_P```/\```#_````_P```/\```#_````_P```/\```#_````_P`` +M`/\```#_````_P```/\```#_````_P```/\````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````8(*``'""@`"@@ +MH``L(*``.""@`"`@H``D(*``,""@`#0@H``\(*``0"&@`$0AH`!H(:``;"&@ +M`'@AH`!((:``3"&@`'`AH`!T(:``?"&@``````#_```````````````````` +M`````````````````````````````````````/"&`0`%```"!````,S#@``` +M``````````````!4-0``!@````0```#,PX``````````````````\+$```H` +M```$````S,.``````````````````-R&`0`*````!````,S#@``````````` +M`,S#@`#,PX``M""@`&P@H```,```_X___P``````````[,.``.S#@`"D(*`` +M.""@``$```#X____```````````,Q(``#,2``*@@H``\(*``$````,?___\` +M`````````"S$@``LQ(``K""@`'@AH`!``0``/_[__P``````````3,2``$S$ +M@`"P(*``?"&@```,``#_\?__``````````#_````_P`````````````````` +M```````````````````````````````!```````````!``$``0`!``$``0`! +M``$`````````````````````````````````````````````"0`````````) +M````"0````$````)````$0````$````)````"0````D`````````"0`````` +M```)`````````````````````````!(````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````.0```"D`&0`:``D9"1GZ"OD)Z0#I```` +MV0```,D``````````````````````/W&=`"D.27&?`",.%W&A`!T.Y7"E`!`. +M@G#_````````````````````````````````````**Z``.`L@0`8```````` +M``$````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````__\``/__```````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````#P`_``$````/`#\``0`` +M``\`/P`!````#P`_``$````/`#\``0````\`/P`!````#P`_``$````/`#\` +M`@`````@`#``,``@`"``"@`&``(`$``0`!``$``(``H`!@`"``L`"P`+``L` +M"P`*``8``@````````````````````!(2#P\```````````````````````` +M````````2$@\/`````````````````````#_?P```````/]_````````_W\` +M``````#_?P```````/]_````````_W\``/]_``````````````````#H>=MY +MSWG#>;AYKGFD>9MYDGF*>8)YFW>2=XIW@G>;=9)UBG6"=9MSDG.**9X)G +MFV6298IE@F6;8Y)CBF."8YMADF&*88)A>V%T86UA9V%A85QA5V%284UA26&; +M09)!BD&"08HG@B>;)9(EBB6")9LCDB.*(X(CFR'H>=MYSWG#>;AYKGFD>9MY +MDGF*>8)YFW>2=XIW@G>;=9)UBG6"=9MSDG.**9X)GFV6298IE@F6;8Y)C +MBF."8YMADF&*88)A>V%T86UA9V%A85QA5V%284UA26&"09LEDB6*)8(EFR.2 +M(XHC@B.;(9(ABB&"(9L%D@7H>=MYSWG#>;AYKGFD>9MYDGF*>8)YFW>2=XIW +M@G>;=9)UBG6"=9MSDG.**9X)GFV6298IE@F6;8Y)CBF."8YMADF&*88)A +M>V%T86UA9V%A85QA5V%284UA26&"09LEDB6*)8(EFR.2(XHC@B.;(9(ABB&" +M(9L%D@6;>9)YBGF">9MWDG>*=X)WFW62=8IU@G6;"9YMEDF6* +M98)EFV.28XIC@F.;89)ABF&"89M%DD6*18)%FT.20XI#@D.;09)!BD&"09LE +MDB6*)8(EFR.2(XHC@B.;(9(ABB&"(9L%D@6*!8(%FP.2`XH#@@/\>>YYX7G4 +M>?QW[G?A=]1W_'7N=>%UU'7\<^YSX7/4<_QQ[G'A<=1Q_&_N;^%OU&_\;>YM +MX6W4;?QK[FOA:]1K_&GN:>%IU&G\9^YGX6?49_QE[F7A9=1E_&/N8^%CU&/\ +M8>YAX6'48?Q%[D7A1=1%_$/N0^%#U$/\0>Y!X4'40?PE[B7A)=0E_"/N(^$C +MU"/\(>XAX2'4(?P%[@7A!=0%_`/N`^$#U`/H>=MYSWG#>;AYKGFD>9MYDGF* +M>8)YFW>2=XIW@G>;=9)UBG6"=9MSDG.**9X)GFV6298IE@F6;8Y)CBF." +M8YMADF&*88)ABD>"1YM%DD6*18)%FT.20XI#@D.;09)!BD&"08HG@B>;)9(E +MBB6")9LCDB.*(X(CFR'H>=MYSWG#>;AYKGFD>9MYDGF*>8)YFW>2=XIW@G>; +M=9)UBG6"=9MSDG.**9X)GFV6298IE@F6;8Y)CBF."8YMADF&*88)ADD6* +M18)%FT.20XI#@D.;09)!BD&"09LEDB6*)8(EFR.2(XHC@B.;(9(ABB&"(9L% +MD@7H>=MYSWG#>;AYKGFD>9MYDGF*>8)YFW>2=XIW@G>;=9)UBG6"=9MSDG.* +M*9X)GFV6298IE@F6;8Y)CBF."8YMADF&*88)ADD6*18)%FT.20XI#@D.; +M09)!BD&"09LEDB6*)8(EFR.2(XHC@B.;(9(ABB&"(9L%D@6;>9)YBGF">9MW +MDG>*=X)WFW62=8IU@G6;"9YMEDF6*98)EFV.28XIC@F.;89)A +MBF&"89M%DD6*18)%FT.20XI#@D.;09)!BD&"09LEDB6*)8(EFR.2(XHC@B.; +M(9(ABB&"(9L%D@6*!8(%FP.2`XH#@@,``P4(```````````````````````` +M`````````````,S+S,O)R,G(S[[ZMWN^^K=X```````````````!XR@$``````-3*`0`````` +M%-\!```````D'(`````````````````````````````````````````````` +M``(!@``````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````+24``!T)`0`N)<```````#_`````0`````````!```````````````` +M````````````````````````````````````__\````````````````````` +M````````]%H$`!A=!``L700`'%X$`"1>!`!<7@0`H%X$`+A>!``4B@```(@` +M``B)``!DB0``B(@``.B(``!`B0``1%0$`(Q4!`#45`0`]%4$`$!6!`",5@0` +MP%8$`-!6!`#0B```M(@``/2'````````!0````````````````````````"8 +M#8``F`V``,0-@`"8#8``F`V```````````````````````!P@`0`!@````0` +M``#,PX``````````````````F!,!``@````$````S,.````````````````` +M`*`3`0`(````!````,S#@`````````````````#```2%Q47!A<)%PP7 +M#Q<`%P,``P`&!@8&!@8```````````,-+H"`-D"`@("`@'"`5EX`4GEH2H"` +M@("`0$H;@'9V90```(````!-&V,P``````8)"0D#"0D)``D)"1(````$!@`& +M!`8&!@8&!@8&!@8&!@8"!@0`````"P<#`#LW,R\K)R,?&Q<3#PL'`P`[-S,O +M*RMZ;;_:65*5+8.^ +MU-,A=%@I:>!)1,C)CFJ)PG5X>8[T:SY8F=UQN2>V3^&^%ZV(\&:L(,FT.LY] +M&$K?8X(Q&N5@,U&717]38N!W9+&$KFN['*"!_I0K"/E8:$AP&?U%CX=LWI2W +M^'M2(]-SJ^("2W)7CQ_C*JM59@:?P\@?SH>)I3LWTVF75O@4&'V(TT8K^IL2=4RXTH%7S +MHC+AB@5UZ_:D.>R#"ZKO8$`&GW%>41!NO?F*(3X]!MV6K@4^W4:]YDVUC521 +M!5W$<6_4!@3_%5!@)/N8&9?IO=;,0T")=Y[99[U"Z+"(BXD'.%L9Y]ONR'E' +M"GRAZ0]"?,D>A/@`````@X:`"4CM*S*L3G):;/O_#OU6.(4/'M6N/2%(49\5=,!W6O +MN]V9[OU@?Z.?)@'WO/5R7,4[9D0T?OM;=BE#B]S&(\MH_.VV8_'DN,K<,=<0 +MA6-"0"*7$R`1QH1])$J%^#V[TA$R^:YMH2G'2R^>'?,PLMSL4H8-T./!=VP6 +MLRN9N7"I^DB4$2)DZ4?$C/RH&C_PH-@L?5;OD#,BQTY)A\'1.-G^HLJ,-@O4 +MF,^!]:8HWGJE)HZWVJ2_K3_DG3HL#9)X4)O,7VIB1GY4PA.-]NBXV)!>]SDN +M]:_#@KZ`79]\D]!IJ2W5;[,2)<\[F:S(IWT8$&YCG.A[NSO;"7@FS?0866X! +MMYKLJ)I/@V5NE>9^YO^J",^\(>;H%>_9F^>ZSC9O2M0)G^K6?+`IK[*D,3$C +M/RHPE*7&P&:B-3>\3G2FRH+\L-"0X!78IS-*F`3Q]]KL00Y0S7\O]I$7C=9- +M=DVP[T-43:K,WP26Y..UT9X;B&I,N!\LP7]1948$ZEZ=736,`7-TA_HN00O[ +M6AUGLU+2VY(S5A#I$T?6;8QAUYIZ#*$WCA3X68D\$^ON)ZG.-LPP(G.2TV)#!5F1AA,M[<+8R +MU71<;$A"5[C04@EJU3`VI3B_0*.>@?/7^WSC.8*;+_^'-(Y#1,3>ZY0R +MIL(C/>Y,E0M"^L-.""ZA9BC9)+)V6Z));8O1)7+X]F2&:)@6U*1VYVEX51E>GC9V$D-BK`(R\TPKWY%@%N+-%!M`L'H_*/P\"P:^]`P$3 +MBFLZD1%!3V?M-87B^3?H''7?;D?Q&G$=*<6);[=B +M#JH8OAO\5CY+QM)Y()K;P/YXS5KT']VH,X@'QS&Q$A!9)X#L7V!1?ZD9M4H- +M+>5ZGY/)G.^@X#M-KBKUL,CKNSR#4YEA%RL$?KIWUB;A:11C52$,?:5C8\:$ +M?'SXF7=W[HU[>_8-\O+_O6MKUK%O;]Y4Q<614#`P8`,!`0*I9V?.?2LK5AG^ +M_N=BU]>UYJNK39IV=NQ%RLJ/G8*"'T#)R8F'?7WZ%?KZ[^M96;+)1T>."_#P +M^^RMK4%GU-2S_:*B7^JOKT6_G)PC]Z2D4Y9RW=1S]_>&NDY,] +M:B8F3%HV-FQ!/S]^`O?W]4_,S(-<-#1H]*6E433EY=$(\?'YDW%QXG/8V*M3 +M,3%B/Q45*@P$!`A2Q\>592,C1E[#PYTH&!@PH9:6-P\%!0JUFIHO"0<'#C82 +M$B2;@(`;/>+BWR;KZ\UI)R=.S;*R?Y]U=>H;"0D2GH.#'70L+%@N&AHT+1L; +M-K)N;MSN6EJT^Z"@6_924J1-.SMV8=;6M\ZSLWU[*2E2/N/CW7$O+UZ7A(03 +M]5-3IFC1T;D`````+.WMP6`@($`?_/SCR+&Q>>U;6[:^:FK41LO+C=F^OF=+ +M.3ERWDI*E-1,3)CH6%BP2L_/A6O0T+LJ[^_%Y:JJ3Q;[^^W%0T.&UTU-FE4S +M,V:4A841ST5%BA#Y^>D&`@($@7]__O!04*!$/#QXNI^?)>.HJ$OS45&B_J.C +M7G58)^?OQ'/3UZK&1DR.==7;HK&1DRE7-SYJ!@8,"8@8$9T4]/GG_< +MW*-F(B)$?BHJ5*N0D#N#B(@+RD9&C"GN[L?3N+AK/!04*'G>WJ?B7EZ\'0L+ +M%G;;VZT[X.#;5C(R9$XZ.G0>"@H4VTE)D@H&!@QL)"1(Y%Q7GR,N?GU4/(R(M9-S=NMVUMVHR-C0%D +MU=6QTDY.G."IJ4FT;&S8^E96K`?T]/,EZNK/KV5ERHYZ>O3IKJY'&`@($-6Z +MNF^(>'CP;R4E2G(N+EPD'!PX\::F5\>TM'-1QL:7(^CHRWS=W:&<='3H(1\? +M/MU+2Y;4E#.VFYLM(AX>/)*'AQ4@Z>G)2<[.A_]5 +M5:IX*"A0>M_?I8^,C`/XH:%9@(F)"1<-#1K:O[]E,>;FU\9"0H2X:&C0PT%! +M@K"9F2EW+2U:$0\/'LNPL'O\5%2HUKN[;3H6%BP7"PH)!00````!`0(!`@(# +M_P`!`@,$!08'"`D*"PP-____________________________#O___P____\0 +M____$?___Q+___\3____%/___Q7_________________________________ +M_____________Q;___\7____&/___QG___\:____&____QS___\=____'O__ +M_Q____\@____(?____\B____(____R3___\E____)@`````````````````` +M``````````"(1P0``````(A'!`````````````(````$`````@````0````& +M````!@```"C\``!(@P0```````````````````````````````````````\` +M/P`"````#P`_``(````/`#\``@````\`/P`"````#P`_``(@```P<(29!P`` +M`#H!`@'5`-\`.@&B`'4`?P#*`4H!X@#Y`,H!Z@""`)D``0,/!PH4-VYJ`1H! +MV0#H`&H!N@!Y`(@`=-%%%^BBBRX0&*``#!B@``@0$`(0"``````````````` +M```!`@,$!`0$!04%!08&!@8&!@8&!@8&!@<'!P<(``T%!PD+`0,#`P,```$% +M`P$(`@@(`0,!`P,"!0$$````F"6@`)PEH`"H):``K"6@`*`EH`"D):``Q"6@ +M`,@EH`#4):``V"6@`-PEH`#@):``Y"6@`.@EH`#L):``\"6@`$0%V89$!=F& +M@@/F640%V8:"`^99\\,B98(#YEG"G.A0@@/F6<*0`,`'D +M`)@`Y`"8`-P"W`)N`=P";@'H`6X!]`!N`?0`L@6R!=D"L@79`LP#V0+F`=D" +MY@%$`40!Y@%$`>8!L`'F`1P"Y@$<`H@"B`+,`X@"S`-@`\P#.`3,`S@$S`/, +M`[(%S`.R!1`%L@54!K(%5`8&!A(&$@P2'A(>```T`&@`:`#0`-``.`$X`3@! +MH`&@`6P`V`#8`+`!L`&(`H@"B`)@`V`#Z@#4`=0!J`.H`WP%?`5\!5`'4`?J +M`*@#J`-0!U`'^`KX"O@*H`Z@#@`!`@$#!@`````````````````````````` +M``"(2`0``````(A(!````````````````````````````,`+`0``````@#T$ +M``````"`/00```````````````````````````#$"P$````````````````` +M``````````````````````````````````````````!D100``````&1%!``` +M`````````,0Y!`#H2P``Q#D$`,0Y!`#$.00`]$$$`,0Y!`#T000``````$0[ +M!````````````````````````````%@]!```````6#T$````````````Z#D$ +M`$!,``#H.00`Z#D$``````"80`0`Z#D$`)A`!```````Z#D$```````````` +M````````````````V#P$``````#8/`0```````````````````````````#( +M"P$``````*0^!```````I#X$``````````````````\`/P`!````#P`_``$` +M```/`#\``0````\`/P`!````#P`_``$````````````````````````````` +M`(P^!```````C#X$``````````````````````````````````````"@/@0` +M`````*`^!```````````````_P``____``0(!!`0```H`"@`,``L`"P`*``\ +M`#0`+``L`#P`-``P`"P`5`!$`'__!P\?/P$#,````#8````,````$@```!@` +M```D````!@````D````%``<"`P0&!@T%!0D)"0D)"0D```$'#Q\_?_____\` +M`/____\```"`555550```$#07D)[:"^A/9H?%BFTE]`>.([C.!S'<1R]A/82 +MCN,X#AS'<1R.XS@.7D)["<=Q'``U\#3P-=BM>9-FNQ%CYT?0(F'^A7OZ[+)C@O[[$%GL_U?ZD6_ +M(_=3EN1;F\)U'.&N/6I,6FQ!?@+U3X-<:/11--$(^9/B5/%NW%AM>:56:4$<^*$.D&!('^\*!$>+HEXTOSHOY=P("*!:T_O"%( +M<`3QWV/!=W6O8T(P(!KE#OUMOTR!%!@U)B_#X;ZB-JS( +MY[HK,I7FH,"8&=&>?Z-F1'Y4JSN#"\J,*:?BO!T6=JT[VU9D3G0> +M%-N2"@QL2.2X79]NO>]#IL2H.:0Q-].+\C+50XM9;K?:C`%DL=*RWO\ +MJ-9M.BP``0($!`8&"`@```"5F9VAI0```!$```````````````````!D```` +M$````/\`#"`(````$@```````````````````"P!```0````_P`,(`(````3 +M````````````````````+`$``!````#_``P@!P```!0`````````0`8````` +M```!````$`````$`#$`$````%0````````!`!@````````$````0`````0`, +M0`,````6`````````$`&`````````0```!`````!``Q``P```!<````````` +M```````````!````$````/\`!``$````&`````````!`!@```````#(````R +M`````0',0`,````9`````````````````````0````$````!`0"``0```!H` +M```````````````````!`````0```/__`*`%````&P`````````0```````` +M``$````0`````0($``8````<``````````0``````````0````$````!``P` +M`0```!T`````````!``````````!`````0````$`#``!````'@`````````$ +M``````````$````!`````0``@`$````?`````````````````````0````@` +M``#_``P@!@```"`````````````````````!````"````/\`#"`"````(0`` +M``````````````````$````!````_P`,H`,````B```````````````````` +M`0````$````!`@R``0```",````````````````````!`````0```/\``*`& +M````)`````````````````````$````!`````0)$``(````E```````````` +M`````````0```!````#_``P@`P```"8`````````V``````````!````9``` +M``$`"``"````)P`````````L`0````````$````!`````0`,0`0````H```` +M`````"P!`````````0````$```#_``Q`!````"D`````````+`$````````! +M`````0````$`#$`$````*@`````````L`0````````$````!`````0`,0`,` +M```K`````````"P!`````````0````$````!``Q`!0```"P``````````@`` +M```````!`````0````$`!``%````+0`````````$``````````$````!```` +M`0`,0`$````N`````````"P!`````````0```&D````!``Q``P```"\````` +M`````````````````@``$@```/\`#&`"````,``````````R`````````&0` +M```0````_P`,8`8````Q`````````"P!`````````0```&X````!``Q`!``` +M``0,#`@4%`0$0````(```````0````(````$````0```0````$````#_0555 +M%0````"`B(@(`````0`!`!P```#_____!`$``!@```#^__]_!`(!`1@```#_ +M____`0$!`1@```#_____`P```!P```#\_U+5`@```!P```#\_Z?J!0(``1@` +M``#\_U+5`@$``1@```#\_Z?J`P$``1@```#\_U+5!0$``!@```#\_ZEJ`$`` +M`!<````D7```%``````````!````,/<```````"8@P```P```!A>```$```` +M$'L```@```!L>```#````(1J```1`````````!,```!$7```%@```-S!`0`` +M````4(,```0```!,O0$`!0```$1E```(````<'@```P````X;0``#0`````` +M```1````````````````````\((``,1;``!P9```,'@```````#(9@`````` +M`#!;``!H:0``*'L``#!>`````````0($_P@0__\````!`````@````0````( +M````$````"````!`````@````!L````V```````"!/\```7_```!_P(`_P(" +M`P7_`@`&`0(``0$#`/\#`P,%!`,$`_\#`@(%`P`&`0,``0$$`/\&!`0%_P0! +M!_\$``8!!``!`0$`_P"#$`A2B8`<&D@0`!*)@!P2B8` +M<$HF`'!*)@!P``````````````````````````#\'(BV_!Q(MOP<"+;\',BU +M_!R(M?P<2+7\'`BU_!S(M/P`3<--TS\.!X!-PPW3'PX'@$W"S=+_#@>`3<*-TM\.!X!-PDW2OP +MX'@$W"#=*?#@>`3<'-TG\.!X!-P8W27PX'@$W!3=(_#@>`3<$-TA\.!X!-P, +MW1_PX'@$W`C='/#@>`3'`X'\!P`HF`/"*(+\/RB!D`.!_+R`#`.!_BB#_#PHB +M0(``V>8``0`O)@#P2B9``$H`!@!+`"``BB7_#^!X"B)`@`#9Q@`!`&8`)``O +M)@#P5@`%`"<(-0A*)D``"'$`V%!QX"#%!T)Y`>!0<>`@Q0=">>\'[_\!X"\M +M`0!`)44``B9\\0``(```*$`!Z"`B`R\@`(`O(4L`4''`((8!PB&&`.!^$P`@ +M`$H@`!!*($`0#B)"`"\@"Q+.($6`BB7_#PH`!0`O+0$`0"5%``(F?/$``"`` +M`"A``4HF0`#H("(#+R``@"\A2P!0<<`@A@'"(88`2B8``$P@P)#.(((!1"!^ +MD,XA@@'@?@$'S__@>#,`(`!*)```!R'$`"\F0/!*)0``$``F`"\D!`$.($"! +M`R5!`(#C#@`#``XB0H$#)<,`!2.%@#`!`0!Y"RB%,B0H'@?$XB`X@6``P``2C,```I@0``*(``X'^% +M>4XC`P``*,$`X'\">.!X4R)"@>!\3B(#B!8`#```*.!X"B2`\`4@1`#@(,$'1"3^@$$JQ`"$``(`+R0" +M\4(A`0%"(`,!Z""B!`01!`($$04"!!$&`@01!P($&P@!!!M(`00;B`$$&\@! +M+``E`$0B/H$\`"(`1"+\@$`AP0#@(,$'0"/#`*@@@`$!$80"`1L*`2`@P`<$ +M$00"!!$%`@0;"`'4!^'_!!M(`40B_(`$$00"R0?O_P0;"`%"(4$`0B!#`*@@ +M@`$!$80"`1L*`2`@P`?AQ0AU$?#@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@ +M>.!XX'C@>(#E8;WO]>!XX'C@>.!XX'_!Q0#;"?#/,!&)(`]0M$@.!^AN#QP`#8#?3/<($`^!VF#^__!MGZR8*X^AH8L`'8 +MT<#@?N!X@^#QP`#8"?3/<($`T!V"#^__`]D!V-'`X'[@>/'`"''/<($`'"$D +MJ&8/[_\%X`'8T<#@?O'`@>#AQ0#8"?3/<($`]AT!W4H/[_^I<:EP_0+/_^!X +M\<"""L__A.``WN%*X9CA6N&HX6 +MK@'8O0+/__'`EN#AQ0#8C/?/=8``\#RI#N__#-D"%(`PG.@0V<]P@``@'""P +M!(TD;@"N(,`!K@,4@#`"KH'`>@C@"P+:!HT!X`]Y1B'"`">-P;A%>2>M!JT! +MV`T"[_^CP/'`X<7/<8``9`@NB3!P`-@*],]U@0"\'3H.[_]`)0`7`=@6M>D! +MS__QP!\(40#/<*``8`PHB,]P@0`<(A(((``DJ`'8`O``V-'`X'[/<(``8/\A +MD,]P@0`<(@2($0D``,]Q@``@'`"1@;@`L>!^X'CQP!X)S_^&X`#=RB!"`RGT +MSW:!`"0B"B"`+X$`9")6)A$2$A`/(?(/X`NI<`^F@^?*)T83^&<4>``@302I +M<*8-[_\&V0&5"N@`C0CHSW&``"`<`)&&N`"Q$AC$(P'8(0'/_^!X@.``V`CT +MSW&``"`<`)&"N`"Q`=C@?N!X\<"F",__"'7/<(``>$$"@!IQ`-YC"!`!A.5@ +M`"4`RB"%`\]W@0"\'4`G`!,Z#>__!-DNC]"O4R$``!&O02C`(*"Y-PAD``(@ +M0@!CO2L*10,+ZL]QH```#`2!8;I88`2A:!&```+P#X]3(((@`-D/(8$`)'@0 +MKP'8D0#/_^'$_!S(OOP<2+[AP.'!X<+AP_P<"+'\'$BQ_!R(L?P!2\I@0^````` +M"O`1"9X%+RF!#T`````$\"\I@0`AH,]P@``$/_`@0`!`>*8+P`$%\(HA_P\A +MH&8*0`+<'8`?`P!`#1N%28`#9#R$!`,') +M)'A"(`"`X'_*(&(`26@&(($`UW``@```']@&\B\I00!.(8`'X'[@>/'`Z@@` +M`8#9SW"@```<)*#1P.!^SW&``!0I`($!X.!_`*'@>.W)E;CM&ABP[LF;N.X: +M&+#PR8JXC;B0N.!_\!H8L.!XZ@^@(`#9X'XH";T2PY1$,]TH```#*2$ +M`-L8\&@4CA"$*0$L`"&!?X``;"X`(8!_@``,+DR)`>,#NEA^2(#'>DB@#(D! +MX,&X#*D")P`4SPL$@*2D`=@%!H__;0<@!0_8X'CQP)H-C_^BP0AU.G'/=X`` +MI`?`%X`0`-Y>#N`%R7&"Y1IPT_>I<"IQR7+)__`=D#A8"X`Z7I\1L)E`#/=8``\#Q`)0`2[@CO_P+9 +M`X6!N/+Q9.F+<-X([_\!V2#`SW6``/`\4R`!`"BM''C`N`FM[O&I"12!SW6` +M``PZJ7"V".__!-D"E8"X`K6_\<]U@`#XSP"%!X\<"2"X__SW"```PZ`I`Y"!X`SW"``&0( +M`(C/<8``2+H#N!5X`&$=")X'37`9")X#SW&!`+P=#($&Z!J1P.`$]`X(0`7/ +M=8``\#P#A2L(4`!_")$`SW"``&0(`(B,(`*`-?)*C0.X%7C'<(``2+H@@"KJ +MFKDJ\,]P@`!D"`"(C"`"@`#;(_)3:%5ZQW*``$BZ((*$E8HF1!#$?+&Y(*(- +M#($3D;D@H@7P@>3*(V$`@./0(2('T"%B!\\A80>Z".`*(*(%\+JYN[D@H`#8 +M`Z7/<8``T,\!@4<(G@#/<(``9`@`B(P@`H`9\H")+PS?$0.X%7C'<(``2+I` +M@%,D0Q`$(H(/_\/__QJ[97I$O,*\8;P`,]R@`"D!\$2@`#/<8``1@C!N/0A``#/ +M<8$`1"(9J4`2@``:J<8+8`X!V`"5Y+AX"T(.D0*/_^!X\<`:"H__SW6``/@I +M((5`)0X:$VD5>``@@@^``'@J$8(!X!&B!-@%I1)I%'@`9H#@RB"!#P``(C-< +M"\'_`(4DA0*X%'@$9@#>`87)&E +MQ:7&I?8+H`?'I1$"C_\G"(0/```V,Q\.!'```#HSSW*``/@I0((+"8$`C"'# +MCP[T"0//_QD(A`\``$8S$0X$<```23.+X>@"RO_@?N!X\EQ>G``EDHD +M0""&(/P`C"`"@,(D`B6,(`*`N`[A`A+`B``2B#`)`HE@"^!`+P=JG!*(0`C +M8@VO_RIQXJ4-V`"EC0P0(,]P@``\,(0K!B0F@``A@'^``'A!%>E#ABB6`H!' +M>0@5`B$G>@H5`2%'>2BE#0A1`>"E`=@"I0WP"M@`I0GP`H`+"%$!"]@`I0/P +M`!U`%,]R@0`P`4T2@0!,$H``"+DE>$X2@0`0N25X3Q*!`!BY)7@!X$P:`@`H +MN$T:`@`HN$X:`@`HN$\:`@``P4(@`",*"*`':G(*(`"@Q?3/<(``Q)\`B!$( +MT0#:"Z`'`]B:#\`(3"0`H+?R<@[@`6IP`(6`X,P@XH*O],]PH```(&P0$0`F +MA0\)901#A0(A0"`'\`(A000.(8`/_____X'#@L$%*+X``!G`#@`;0`X"P``B +MCB^``"PN`>`=>`2N!(X+")(`8;@/>`+P`-@%KB>..&`'K@B.`>`(K@R%`>`, +MI1@=0!0`AL]W@``\,&*' +M47H3">4`3WH@AQ<)A0`"V`7P(8<+"D0``]@`I0'8L.@*"H`'(X<+"$0`1(<" +M\$6')(4B>!%X!.H)"(4``-@%\`38`*4!V)SH;16`$`;H`-AM'0(0!]@3\"B% +M!X40<0;8#?0&APKHA"L&),]P@`"`03`@0`X)"!$!`=@`I0"%DN@&C@'@!JX+ +MA0'@"Z7/<(``/#`'@`;H$@[@`6IP"=@`I40K/B?/<(``9"TP($`.C^@$(K[O +M!`0$!`GR1"L^)P`A@'^``&PM`!A`!`IPJ09O_Z/`X'@`V86X#/`O*@$`3B*# +M!U)K0W+7$@*&$"#``$5Y]>B$N>!_W1I8L.!X\<`Z#D__&G``W:EV.G4E\/)N +M]'_'=X``A#()AXP@_X\:\@J'JW@)\L]P``!%,)(/K_\`$`$@*X<*AP5]$PE. +M(,]P``!&,'H/K_\`$`$@*X:]#A21009/_^!X"'+/<#02>%9AN0;P +M\")#`&&Y9WCY"1.`X'[@>/'`Q@U/_PAVSW"``,2?`8"$+@L2XH``(8U_@`"< +M9/<5`!;X',BS-0\`$&H)H`?)<`#:SW&``%QW8@B@!UFQ1QT8$$((H`/'`:@UO_P?8O@C`!N8)H`<(=L(*@`*B +M":`'"'4R;31Y%7G'<8``G'A@$0*!)!$`@0JZR;@$(H(/#P``_$5XSW*G``!( +M%:(F$0"!8A$!@FG2="2#``!2U`>'M"92`V01/__'`X<7/<(`` +MQ)\R#F`#H(B,)<.?"O+N"(`'".B>"6`)_/'`R@M/_QIP*'4`WA'PSW>!`,P/ +MU7\&AQ4-`1`@APCI8'D*<`#8`*<&V`:G`>;C#I21SW"!`/P/`-FU>""@)J#/ +M<8``""D`@0D-`1`&V`"AW0-/__'`SW"!`,P/E@U@`##9SW"!`/P/B@U@` +M!MG/<(``""D@H-'`X'X)`"``!8#@>/'`1@M/_PAWA"@%"@`AC7^``-2?SW"@ +M```@;!`0`(0O!A3/<8``]$(R(4X.SW&``-Q!,"%`#B;H-F[/<(``J*4@8*#H +MM@H@(>EPG.C0%0`0`B``!"T(4P!#%0`6`-L+Z$,=V!#I<`79"KFB"N`A!-H( +M\,]Q``!DB\EP[@T@(@C:*0-/__'`N@IO_U1H&G%6>L]Q@`!L20`AD@"$*`4* +M`=LO<0`AC`^``-2@^HS8C(/GGI3"(\4`SW*``"6A`-T-#)X0A.?*)680`-\` +M&,`CB.V`X\PF8I#*(,$#/?(9[2EB@.'*(($/``!:`]0#@?^$*`8$`"&`?X`` +M>$$+#E`0'X`"\!V`!2A^``HA0"X(\(0H!@3/<8``]$$P(5$.`!(`("IQ(@_@ +M'P#:"'<*(<"#RB%B```80"``V`WM$!(`("IQ`@_@'P#:#PY1$`'8`MH`&(`@ +MSW&``*BIH*$`V8#GS"`A@,H@00`#\@'8,0)/_^!X\<#2"4__"'8Z<<]W@`"D +M!\`7@!``W9H*H`6I<1IPSW"!`+P=`=DLH`^'"PA?!:EP'_#_#A25R7`J<:ER +MJ7-&"Z__"B0`!(#@$]@3\L]QH/[D`P78%;@DH,2@SW"@`&`,*(@(B`INJ7%R +M"6`'"G+%`4__X'CAQ2G;$KL5>P#<"/#P(0`#%2,-`P"E`>3U#(20X'_!Q?'` +M1@EO_YAP`-T/\+AE%'AT(`\!*=X2OF*009`0NV5Z]7Y`I@'EZ0U$D(4!3__@ +M>/'`X<4(=0H,8`/'`SW*!`!`<`(+/<8$`#!P`H0#$GH\]Q +M@`"0.V"!!>LA@F![0H+1P.!^X'C/<:0``$!)@<]P@`#$6D"@08'/<(``P%I` +MH$"!SW"``+Q:0*``V`FA_]@!H0"AX'[QP-H/+_\`V1IP"B.`+X$`J!S/<(`` +MX%<`$XP@0(`A#(,0!!.`(!D(@P`($X`@$0B#``P3@"`0R#R`-)-@")P$0SW>!`(P;-7\0CX[H`!6`(!"O`16`(!&O`!2`(!*O`A2` +M(!.O3"$`H,PF(I`Z\GH/(`U*<`AV<@\@#238`B8"$`'8K@IO_P#9SW:!`!`< +M089BAD1X9'D%('Z``!6"(`7R$(\;"@,``16`(%"O$:\`%(`@$J\"%(`@$Z\N +M#R`-2G`(=R8/(`TDV`(G`A`!V&(*;_\`V6&&0H9E>$5Y`:8BI@'E3PT5$0L- +M'Q!!;0+P26T5(U4CSW"``-17P(`5(Y0@`A2`(,]R@`#85T""`16!(%!P`=K" +M(HH`"PFB`P#<.G1V\0`5CB!DN?<.1)!N\<$&#__@>/'`:@X/_P#>.G9:=LEU +M&G9Z=@3P0"-3(%L+E2``WP/P`>?U#]61U@H@`.EP`-GU"16!SW"!`*@<-7A` +MB-#B`-O+]H&(T.3)]H*(T.3%]H.(T.3*(VD`#>M=94&(8H@`(I(@`X@`(=$@ +M`"`0(`'F`>'?\<]W@`#@5PHC@"^``-17"B2`+X``V%<*)8`O@`#<5Q7NJ7#) +M<6(+X`3I(#@ +MP"5A$`'GSW"``&RY&(C9#P20^0,O_ZEPX'CQP(H++_\(<<]UH```(/N%SW"` +M`%`)\"!``,]R@``H"?`B00#/=H``;`FR#6`'0(8;A>)X$0A4"L]Q@0`<'`2! +M`>`$H#R__!MC/.!^X'C/<```Y0Y-!&__W1(!MN!X\<#& +M"@__"'8H=<]QH/YT`078%;@DH`#?#/!R#&`%%2;`$^!XX'C@>.!XX'C@>`'G +MZP]$D_D"#__/<:````0%@02A`]@5H>!^#'$1(0"`RB"!#P``_P`.\L]QH``` +M!`^A`X$LN,2XSW&``%#!\"$``.!^X'C@?P'8\,]Q@0`()2&!)0A1`(0N!A3/<(``G$$P($`.@.#/ +M(6$`SR'A`,\A80($\D4A00,`VPKP%FUU>``@@@^!`,@U(*(!X_$+%(0`V\]Q +M@0!(-18A0@-@JF&J`=@"J@/8`ZIH<@;P.&*V>&2H`>+Y"A2!+0(/_\]Q@``T +M/"")*PD0!0#9!/`!X2]YSW*``##!0(H7"D(`=6G/O>*F(#@X@!\]XR8AB"2`- +MJ7#/=X``\.`(9RD($0)2"2`-R7`(9P#=%0@0`D()(`W)<`AGA^#*($(#$?0! +MV`_P+@D@#`/P`-A-`0__X'@$N,=P@``XX6"! +M@(!@I"*188`@HR""8H`@HR.``I(`H>!^X'CQP+H(#_\DB,]R@``L\,*Y*V(` +MV>:(#R'!`,]U@0"X'$`E#!)`)8X348V%[R9Z4:T7\$5Y,:TEB'YF(*Y%B":( +M='Q982"T((",(1"`1/>*(1``(*`CN2"E`(`JN`&E`-C/<:```#<(H0Z-`:$$ +ME0*A#XT#H065!*$0C06A!I4&H0"%!Z$!A0FA$8T`H94`#__QP.'%SW6``&!` +M(86/Z18/``?/<(``=!(`@`?H`=G/<*0`@$,PH`'8`*UY``__X'CQP.'%SW6` +M`&!`((T0Z2&%CNFR#@`'SW"``'02`(``V07HSW"D`(!#,*`@K44`#__QP.'% +M9@X@!__=@.#*($$#!_+/<(``Q)\6#J`!`(@E``__X'@(<0AT$?`O*D$`3B*# +M!X0K!@3/#S"%2!X'[@>`#9-*@UJ.!_*'#@>.'%X<9BB(&(@GMO>Z;CRB0K +M$(?V"PLS#A'<0B.,"0'>SW6``!1/Q:7#B,&^">9L?F"(`H@G2]P+!U`'L'&X'_!Q0T(40#/<(``B$\% +M\,]P@``43^!^\<#/<(``4$]."@`,`M@6#"`+`-G1P.!^\<#/<8``G%P!@3<( +M7@``@1L(G@`!V/8+(`L`V<]Q@`!\GPJ)`>`*J07P`-C>"R`+"''/<8``?)\) +MB0'@":G1P.!^X'B]!\__\<#F#(`&[@[@#(H@#PK/<(``G%P`@!4(G@#/<``` +MRRA^#R__@]D+\$8,@`;/<(``W'TV&(0/``#D#&(+@`;1P.!^X'@H'%`-T"\`'E$PV#$*M@K&&">R\CQX#Y\P+P`-MH<.!_P<7@>.'%0"D,`B5\ +M0"P#%(5[)PHT`@AT!/`!'%(08;I3)'Z0^_5!*HT`P;J`)?^?!!S0$/SU!^J` +M(O^/`1Q2$/SUX'_!Q>!X\P"C`>)/>F$*TP`IV\]P@`#$GP"($KN$*`L"SW"``#1G,"!,#@IQA"H( +M!H`D!A[/=8``B.8O<(0I!`,`(`$D-'E4>2=P-6688$`@#`(`V<#AH`?*_S]E +M\"1.$!4CSP/`IP'A,'GV\44%S_[QP.8,S_X(=0#>$0C1`#(+``>`X,HF8A#. +M#B`'J7".[KX)(`>I<$H)``H2#:`DJ7`0V%X.H`8`V1H)8`:I/'` +MH@S/_M(((`078-'C/,]QH```,"2!X'\D>,]RH```,"2"!GDDHN!^ +MX'CQP%,@0D'/<($`_"0!@(#@`-C/(.($RB"!#P``/'`X<6B"B`(`-JAV<]UH0"``1"Y +M+0C1`,]Q@``P%0"A&H49"-\'-X7/<```SBA:A8X++_^&(?\,%X6"N!>E-/`6 +MA1<(G@`6A0\(7@!;&9@/````"`':&H4/"-X'%X6"N!>E`]D3\!+J$X4$((`/ +M__\```4@@`\`@*0`$Z41A84@&``1I0'9`_`"V1&%@^'*(:$`AB`#``:YB+DE +M>!&E$86HN!&E#0+/_L]QH```,`.!B+@#H>!^X'C/#0H_L(!(.DHV#,&F(8(D(``B(!`%!P +MRB&-`"6C>0'/_O'`!@GO_C1H"'<]P@`!L20`@4`"$+P4:SW&``.R@,B%` +M#L]V@`"HJ8'@`=D`AL!Y2B$`((;H@.'*)4(4#_2$+P84SW"``.Q!,"!!#@`0 +M`""V#6`?`-H(=0"&@.``V`WRA"\&%,]P@`#T03`@00X0$``@D@U@'P#:`!Y` +M%(#ES"`A@`#8`_(!V-T`S_[@>/'`X<7V"V`$`=@N#N`A`-V&"@``.@G@#`K8 +M?@H``/H/@!^.#4`!"/#R""`,J7!*#>`*`>7U#121SW"``,S#.@W`"N(.0"*` +MX&@,`2`.#L`&(@B`(.X.0"!J#4`$SW&@```<'!F`#P$``/Q_V`2A$!F`#R`` +M``#/<0``7`I2#F`%!MC/<0``<`I&#F`%!]BR"V`!`=C/<:```#<`@48@P`$` +MH<]P@`!L+`"`@.#*(($/``"4`*`)(07*(2$&.0#/_O'`X<4`W38+8`2I!X\;,&X!ZT<;,&X!JT:;,&X!:W!N22M:*U`I<4&C_[QP%(.C_ZAP0AW +M*'5(=LH*[_X&V!9O12#``,]QH```*`&A18$!H26!,'BD>``<1#`1#0`0@";_ +MG]8'S_\`V`/P`=AY!J_^H<#QP.'%SW6``'@L`(6'Z%X/S_^*#L__`=@`I6D& +MC_[@>/'`[@V/_F8/P`0O"-\`SW6@```NU86*(/\/%:4KR,]QH``<+CF!!'DF +M>$X,(`P6V5X+``S5I24&C_[@>.!^X'CQP.'%SW6``("L`(4="%$`SW&``(2L +M((&(Z=8-S_]6"&`!`=@`V`"EBNC/<(``A*P`@`;H^@S/_P'8`*7E!8_^\<#/ +M`"J)%@@@#"*KT<#@?N'%08!FH.'" +M`-P@PS<*7@+/=(``^$BUA`BYSW2``&0(@XQD?:1\";R%>25[++H$(H(/```` +M,&5Z(X!"H)ZY(Z`E\!,*'@)!*L$`P;D!X0'<"O`3"IX&/&O!N0'A`MS#NP+P +M`=D"O!2[!".##_`#``!AN85Y97F'N00B@@__`P#<)KI%>5(AP0,BH*'`X'_! +MQ?'`X<7F".`&"'4M"%$`SW"``%S?J&"`X,H@X0<(!N'^SR`A`\]QJ@``4('@ +M`=C*("X`"*'U!(_^+R@!`$X@@0?/<($`4"7@?R>@X'CQP&(.@`$(Z"(.(`0% +MV&H-8"0%V-'`X'ZAP4#`SW"``/A(.(#/3.CX'[AQ>'&SW6``*0'D(5`%8`0 +M!"2"'P```!@KNE,DP1!$N%,@0P`2:A5X-'C/=H``Z.469L]P@`"XY6A@^[S, +M>)@5`!`$*'X.+W#"("($$/0#NGMC57IU>WIB66'/1#A +M(G@CN,'&X'_!Q?'`)@^`":8-@`DN#$`&T<#@?N!X\<"B"H_^SW"``*@4`X`- +MZ`79%;D+H>S)`>"SN+6XN+CL&ABP!*'/<($`2#O)&ABPSW"``'S'RAH8L)S- +M00@>`,]WH```(#Z'SW"``/A(%H`"X6&X""$``!"G`=@''QB0$-@`IT(/H",` +MWIS-)+@$()!/,````%,@#0#H\`X/X`@`W<]P@`!(OP*`C"`"C8GWU@T@`138 +MSW"@```0J:"OO`$V,X:&+`1AX#@BB`,`,H@@@\````"`*<$'YB?8````$X( +M0`3HR00@OH\```\X!?(`V078%;@KH$T#```0APQPG!(!MT,(7@7.R88@\8\; +M]`0AOH\```!0!?($V)P:'+!>#L`(SW"``$B_`H!]"(6/``"T`.C)#0C>`@#9 +M!=@5N"N@`=Z<$@*W10H?`64*GP%$(CZ*7?)L<%\('@`,<%<(7P6@```@0/`3@0'@$Z%Q +M$P(&SW"``,B^57A:@`'B6J`-"!`@&H$!X!JA@-H7\(HB!``2@9P:G+`!X!*A +M<1,#!L]P@`#(OG5X>H`!XWJ@"P@0(!F!`>`9H;4*WP'HNHGTZ;JC]`0BOH\` +M``!0"/)L<`T('@`$V,X:&+"=S>^XSW>@```@F?3.R00@OH\#@.A37?4,2#B`D$-CDY`$R7#/=Z```"`1"!X`SAJ8OP`("`"J\038SAH8L"S(`MH`(($/@``HK$"I +MGO%2#L`#R@```@ +M$:=P\48,8`0!V`#8D+C9\<@7`A#/<8``)`@_D3!RLO>ON)T:'+!>\4HE0`"> +M".`"B7`LR,]RH```+0*X`""!#Z```"UX@=02#+8LO,2\08(="P$#,""`#Z`` +M9"X0(@(#2W@#\@/8&*$8@8HE"!`1\"\J00!.(H`'$"$!`""CA"@&!,]Q@`#T +M0D(/H`(R(4$.SW.``*2I((/MZ=JGH*<1AX7HBB`$``"G!!^8GR``/P`''YB? +M`0#`_,X*P`O/<8``E#\`@0/HP*'HR00@OH\```\X!/(%V!6XRZ`R"J`$`=C_ +MV<]P@``DQR"@M09/_L]Q@`!TL0"ISW*``*0'+X(0VYJY+Z((V<4:0@#&&D(` +MSW&@`(`<>Z%$*#X-SW&``'RQ(($G<02!SW.@```8`J,#@0*C`H$"HP&!`J,` +MV`:CNA(``2"2:+BZ&@0`*'"&(/T,C"`"@@'8P'@/N(8A_XR6()P#$J,$]`'8 +M&:/U!8`,\<#6#6_^$-H(=@&(1"@^#<]P@`!\L:"``98G=0"U-!:`$`*M`8X# +MK4`F`!FV"V`*0"4!&4`F@!U`)0$5I@M@"@K:!&XD;9X+8`H0VO4%3_[QP,]P +M@`#$GSX)X`$`B`KH-@_@`PS8(@X@)`S8`=@%\*X/P`,`V-'`X'[@>/'`4@U/ +M_@HE`)`H=TAV&G,/\B45@!`G#R(0_]DF%8`0&PX"$#!V_MS,)@*3!_+/<``` +MZ@Z>#J_^R7&,)L.?!_0$A?A@`!@"!!'PC":#GP?T!87X8``8`@0)\"85@!#L +M>`.%)W;88``8`@1-!4_^X'B$Z0#8`*(/\(PA!(`%]`'8`*("V`?PC"$"@`;T +M`M@`H@'8`*/@?N!X\<#/@@ +MA@D*$2`H=0CP)@H@!:EP!.@@AOKQ0")2(.;QANU&#V`+"G`,\!@0`"`#@""` +M`B%!!+EAG@]@"PIPI0-/_H0H!@3/&6BQW"``.#"0H!`@D"A`X``@.!_`:'QP""`1H"`X`""#!NF"@"*!@GD'"5(``*,A@`L*00#"#V`* +M!H#1P.!^X'CQP*H*3_Z^#2`!"';/=:```$@$\+H)0`7/<:```$4>@00@OH]P +M````]O6*(/\/'*$8H<]RH```(`4:F(\!``"``H8(H02&!:$#A@2AR!(```F& +M`-H'H0>&!J'/<8``=`@%@8'@RB+A``3R@N#*(B$!$+H%(H(/```&#D.ASW*` +M`&P[\"(```2A<14`EHD";_X&H>!X\<`*"D_^"'8Z<1IR:'=Z#*`'B'4J#6`` +MR7#)<"IQ"G+I<]()(`28=4$"3_[QP.()3_X(=0]X`K@P((`/H`!D+BP2#C8: +M#>`+J7`J":`)J7`:<`#?SW```!`GR@H@!@\G3Q,`W07PJ@C@"P'8`>49#044 +M"R#`PP7T;'#["!Z`"R#`P_/UV@S@"\EPZ0%/_N!X\<#AQ1X(H`8(=8#@RB4A +M$!#R_@U`!@AQ?@@@`JEP"B4`D`CR(@O@`PC8:@H@)`C8R0%O_JEPX'C@?N!X +M\<`^"4_^&G#+R0#=!2``!,L:&+`Z":`)"G`Z<`ARSW2@```NJ7$?\"\H@0!. +M((,';WOUA-)K*\@P)HX?H`!D+L1X!'_+R0#>!"<$$`\FSA`1#P`1!G\%)2]YQGKDZE6$@.&F>@4B``05I)0(X@O*($(`+R5'%)X,H`>I<((+X`NI +M9XRQH8L*X,H`>+Q%82`X:9X%:3`#Z(+RB!"`*(*X`LO($<$Q@N@!PIP00!/_N'%!_`&?:"D +M$"'!`"]Y#^DO+$$03B2#%V][SW2``/0H=7R@A'#J!7WO\>!_P<7@>/'`N@\/ +M_@AVSW"``,2?*@Y@!@"(`-T.Z.X*(`S)<`HE`)`(\E8)X`,$V$((("0$V/4' +M+_ZI<.!X\MKO#/ +M<(``9-],(("@RF#H8*_T`B;`$P;@*0A5`S,F`'"``%S30">!_0!VA+P^N8-\HPF@I(-\HPFPI9Q]`7:"/``V@;P`MH$\`/: +M`O`$VL]S@`"<6$O>4DA`08RK3.MQW*``+QT$A+!`")X`!D"(!(2P0`1C2)X +M`1D"(!(2P0`6C2)X`AD"(!(2P0`7C2)X`QD"('OPSW````TKR7%N#F_^Z7*+ +M\6T(42#Q=@'9PB%)`")X;K@<>E!ZSW.``'QS6&,($,``7&,.K0@4S!!4>3]C +M%!?/$#MC_&2,K<=R@``\=!(2SP#X8`^M$A+``)A@#:T>$L``%*T>$L``%:T> +M$L``%!/!`#A@#WA)(``&/?!NNE!ZSW"``&IS,R"!`,]T@`"<="]X+*U;9'X3 +MP8":8AEA+:V8$\.`+W]RK9@2PH!3K<]R@`!<=UJ2;WD?ZHPF`I0=]C<.$AW/ +MWL)(P``#*T:$L``'A+"`%A@&W@)(,`##:U"%,`0&W@)($`` +M$JT3K8MQX@W@"\EP2B4```3P0"5%`',-U0``VOD*E8"$*@LB%")``;A@AH@` +M(8%_@``<9U1Y8YDO)(``"2,#`V]\9JACF<"("2.#`V]^8*ACF?*("2/#`V]_ +M++ +M\<$#+_ZAP/'`:@L/_L]P@`#$G\"(SW"``)Q<`8"AP:\('@&B#^`+`-VZ#P`& +M+@L@!HMQSW>``+#/%@[@"^EP`_`!Y;!]80V3$$H@`"`&\$`@0"`O(`@@ZPB3 +MH$HA`"#Q"1&@R7#6#.`+"G%2;10B`@2$+@L2"'$4(D($`"*`#X``W&8U)X00 +M*.`U($`.R7*I`,J04#+_ZAP/'`F@H/_CIP*'4:`8*H`%?#;>$`@D@``(D`C#WCJ":`'`=D4(8\C`+<" +M)8`4#WC6":`'`=D!MP+FVPX$E*D"#_[@>/'`3@HO_AS9&G``W<]V@`!LL:"F +MSW>!`!@M7@PO_^EP$?``V`\@0`,`V00@``0%('Z`"/(`AA4G#!`!X*"D`*8! +MY>,-U)%M`@_^X'CAQ07P(*,0($`##N@O*P$`3B.-!\]S@`!0P;5[=.K_W("C +M\_'@?\'%\<#B"0_^"'8H=0II`@H@#`]X02A!`?`F01#$N!$A`(#*(($/``#] +M%#`+8?[*(4$#'0(/_O'`F@D/_EIP&G%(=CIS"B,`(0#?&O`4(LTC()4$(8`# +M$';+(4&$$?)6#B`&+R#'!"*`0"X#%$"5SW```/P4_@IO_@4C0P0!Y\\/!)2E +M`0_^\"0_^2'9R"Z_^:'4(.!XX'C@>.!XX'C@>.!XX'@;@>!^\<#^ +M"`_^H(`:<`2%H<$/"+0`0"41%105$1``'(`_80``\(MP@@[@"039`(5Z#N`) +M!-D!A7(.X`DXV2*%`85`D`/I$0I%`,]P```#0CX*3_X#A58.X`DBA100@2`- +M"5(`1@[@"4`@`"$$A2OH`-[)<@3P`(`!XAYF!(4C"@4`%B&`((&`(("98>L, +M19`!%(\4SW.@`$`$X*OX\140@2`="5(`!@[@"4`@`",(\`#9SW"@`$`$(*@! +MYE,F?I#X]:$`+_ZAP/'`4@H@`N'%"B4`D`?R^@F@`P#8X@C@(P#8H0`O_JEP +M:B!``9BXX']K($`!\<`6""_^F'.*)H00%'@( +M#B`&Z7"$+P$3'-DZ<0`AC7^``'Q;78T`(9-_@`!<6RQZ!!`!(`HBP"0`(8YT +M'0E0```0`B!+"9``R0G0`,]P```)"=X(3_Z0\`CHSW````8)S@AO_@`0`B#) +M<*X*H`LK0'8'*W:#R`&Z7"2"&`&Z7`^\#@3`R!PK1RM +M0B!!("]X1;C/=8``C#X5?0*%Q+D`WP\G3Q`+?PCR:@S@(0IP`H7F>`*E?0;O +M_'@?Q\86``6B@'@X'\6JN!^X'C/<*``@"!<&(`/`P!`#<]Q@``4*0"!SW*` +M`%3#`>``H0:"`X`@@)8A20P)`B`+2'#QP,8-S_T(=L]Q@`"D"@"!L.@!W;X+ +M8`2@H<]Q@`````2ASW"@```P!8!2(```P+$+"!X``9&`N`&QSW"``.P\H*#/ +M=8``;"P`A8#@RB!!`,HA@0\``$0`H`NA"!XX<7AQBO:$KH& +MZ8#@"=C*(*($!O"`X`K8RB!B!`*B$-G/<*P`@``MH!+;;J`7WL^@,*"!W;.@ +M(MR6H#>@>*#9H#J@O:!`&A@#`=@&H@#8!J+!QN!_P<7@>(#@`=K`>@6Z$N+/ +M<:P`@`!.H5BA@.`EVLHB(0P$\H3@RB+F!4^A6:'RVH#@RB*!#P``\P`&\H3@ +MRB*&#P``\0!3H5VAX'[@>.'%SW2``#`I`-D+\!0D0!!@B"O:$KH!B'5Z`*(! +MX?$)E(O@?\'%X'CQP`#9LNC/@"B`>$P>>$)TH``V<]P@``L*2"@T<#@?N!X +M\<#>"\_][_)`J$2>`:A\,D2>@.A1Z'Q +M$@*V7Z%2>E:ASW*``/2Q(((!X2"BP[EW"5$#*KA3(($!4R"`000@0(`S\B\H +M`0!.((T'0"6`$@#9#R$!``LC0,`G]#)M,"&0#Z``B"#/<*```"#1@,]W@`"\ +MJ2"'"B*`+X``Q*D*(8`O@`#`J1D-01``$@`@$0@!!``1`"`0=H@,02.@IP`: +M`"0`&8`C@0//_>!XJB"!#`GHJR;!<@```0"J(`$"_P@?@N!^X'[@>.!^X'CQ +MP`H+S_T(=BAWLN'*((8/```S,\HAA@-T#";^RB+&`P38Z7'.#F`?R7((=0^0 +M[KC*(($/```T,\HA@0-0#"'^RB+!`P.^%2:`$P`@C@^``'@J#(8!X`RF&0/O +M_:EPX'CQP.'%*'4J":`>`-B!Y2P.80#*(.$"#0//_>!X\<#AQ<]Q@`!X*@J! +MSW6``/@I`>`*H0'8B@B@!`FA((6,(<./RB""#P``(3/<"P+^U0+/_?'`X<7/ +M=8``>"H+A<]Q@`#X*0'@"Z4!@8P@_X\D"$+^?@B`!`#8K0+O_0FE\<#AQ0AU +MSW```$DS?@AO_JEQ,FTT>0`A@`^``!@J`-D@H"&@@0+O_2*@X'CQP.X)S_T( +M=IIQ&G)H=\(.8!X*(P`A6G#/<```1S-""&_^2G%`*L`@%7C/=8``^"E`)1$9 +M5B6!%3A@#0_>$"*``>$BH`L/WA$D@`'A)*!M"%$@186`XLH@@@\``"@S*`LB +M_LHA@@1!A5!VRB""#P``*3,4"R+^RB&"`T`J@"`4>#`A#"`*[!+8!:7)<(IQ +M"G+I@`84=#@$0`(4#N!5X`""!#X``>"H4@0'@%@\O_A2A0"J`(!1X,"$,(`OL +M(M@%I_]Q:7@>/'`X<4(J7!9`<_]\<#B"._]"',H=DAUSW```#XS:'%F#R_^R7+/<8`` +M^"D!@0#:'PX!$`2!&PT!$`6!$PA?`/_8`*&*(/\/`:%&H4>AR7"I<<()H!X` +MV@HE`)`<#&(`RB#B`O4`[_VI<.!X\<`(<<]P```V,](.+_[AQ<]U@`#`1Y(+ +M(`"I<`'9SW"``/@I)Z#1`._]J7#QP`AQSW```#/'`SW$``+1*SW(` +M`"Q'/@J@'@38I@H```#9SW"``#A)(:`BH-'`X'[QP`AQSW*``/@I`((`VQL) +M`0`%@A,(7P#_V`"BBB#_#P&B9J)GH@383@F@'@#:)@M@``O8T<#@?O'`X<4( +MAJ7#N"*`>`-G:"F``"]B]!X_]X'CQP$(/K_T(-((8`L0V68(0".%!Z_]!"6`$^!X\<`&#X_]&G`H=4AW +M:';/<```2#-2#2_^"G&`Y0`A@`^``!@JH*#AH"4'K_W"H/'`P@Z/_0AVSW```#@S#@TO_LEQSW6``/@I +M1H6`XLH@@0\``#(S'`@A_LHA@0,N#\`%!X6!X$0.01\`V`:E\0:O_0>E\G,Z"V`>"B4`(0AVSW```$8SN@PO_LEQ$VX5>,]W@`#X*58G +MC14=90L+GB`!A0'@`:4-"YXA`X4!X`.E18>`XLH@@@\``",SJ`_B_(0&'C"#_CPWR +M`(<#N!5X`""!#X``>"H4@0'@Q@LO_A2AP*?/<*```"`;@`0?0!0"IVH*8!XJ +M<`:`$!^`%`.G`-VFIZ>G$=@%IR`4#"`J<$IQ"G)JSW>``'A!Z7"`(!D"SW&``'A'T*$!W3X((`"Q +MH>EQ@"$9#LEPA@D@!ZER[@R@(,EP#@V@(,EP706/_>!X\<#AQ9(*[_\(=8(- +MH""I<%4%C_WQP.'%"'7Z#J_^7-D!V`"E`-@!I4`E`1S/<(``;.#."J`)+-HM +M!8_]\<`(<@#;$O`3:Q5XQW"``$BZ((`3"5\""(`/"@$`;WB6"6`#_]D!X^$+ +M%(0`V<]P@``,.B*PT<#@?N!XX<5@@6"#`-PPZP3P8G@!Y/T+!(`A@:"!%KP4 +MZKID4R),!9%PPB(.`,OWQW)`````!"*"#\#_``";8P)[>F(5\`(E`A-3(DP% +M'&21<\`B!@!+]P(B@@]`````!"*"#\#_``!B?)IB0*'@?\'%\<`&#(_]"';/ +M=:```"`[A<]W@`"D!QZ'2B``(`)Y'8$$H@@+/<8$`_!T0X$"Q$'B`% +M"G'N#V`("G#/V"V`?4R0%$"8(0`4:#````-K/<8``I*D`@0\B +M@@-+>`CR1G@`H/'`X<4(=<]P@`"D!P"0AB#\`(P@`H`+VFWTA"T!'``A@7^```PN +M`(&&Z`&!^@^@`26!!.@!VE_PJ7"F"B`%`-D1>(P@`X+*(JT"#O?/<8$`O!T1 +MB8?H$(F%Z.(,(""I<`/H`]I'\`0BON\$!`0$RB*A`$'RM@W`!8#@RB)A`3OR +MA"T%&L]P@`#0H#(@0`Z"X,HB(@$O](8@/<`*],]Q@`!D"*EP$@P@("")!.@& +MVB/P(@^`!3(*``>`X,HBX@$;](0M!A0`(8!_@``,0@&(@.#*(FD"#_9$+3X7 +M`"&!?X``9"T#@4(/H`$B@8#@`-K*(B("1"T^%P`B@`^``&0M)W`PB(#B`>$P +MJ`'8M0*O_(0H`0P`V@`A@7^``"@N +MX']`H>!X\<"R"8_]"'>$*`$,`"&.?X``#"XEIA:&+W6&#*`%&:8$I@B&!Z;V +M""``Z7``V,=U@``L+@:M!ZWA`:_]"*W@>/'`;@F/_0AVSW"``*0'P1"``,]Q +M@`!,"(0N`1S!N`UA`"&`?X``#"X:<+B@)1"/``3P+@@@`&&_J7#)`4KA2.Q+@4KC:$C"$$@(CW +MSW```#`1*@KO_5>$!0&/_80H`0S//? +M"U2![06``.!X\<`>"*_]"''/<($`W!T:B`#="NC/<8``9-\)88PAPX\3\A?P +MSW:``/`\`X81"%X"@@N@!0".B>@`CN[Q!^D:"```T."#]ZEP`_!>#(`%/0"O +M_0]XSW"``*RM!H`$((`/````X/_9#PA>`\]Q@`!$""B)&PB>`\]R@`#(O5Z" +M#PI%`,]Q@`!$""F)&PC>`\]P@`#(O1^`#PA%`,]P@`!$""J(X'\H<.!X\WR*@C@`ZEQ"B"`+X$`O!TZ$)(@ +M"'`D`1@"`+")`"`-D"\`'9BB`&!`Q_6G`` +M(8!_@`#<0B"@,@X@'^EP"B.`+X``@$$7Z$0O/A?/<(``9"TP($`.@.#I<`KR +M#!"!(`T0@B"6#.`$>!$#(`7P%@T@'PIQ!"^^%`'9`"&`?X``^$&XJ+>HM:BV +MJ+2HN:@XJ#>HE@T@'^EP@.![\D0O/A?/<(``9"TP($`.OP@1`,]U@`#P/$.% +M*0I>`@".8(4#N!5XQW"``$BZ((#JN\\AH@;0(:$&T"'A!B"@J;I#I5<*'@(A +MA0H@@"^``$BZ1"$#@P".$/(S:#5Y<"$"!(3CSR)A!-`B8@0F#*`(0*$`C@#9 +M`_`!V0.X%7@`(`(@`(*`X=`@(@?0(&('SR!A!P"B`X6HN`.ESW"``"`<`)`I +M"%X`SW"``&PL`(`.Z,]P@`#XSP"`$0C?`\]P@0`<(FX/(`P$B,8,H`/I<*8. +MH`'I<,]Q@`"DJ0"!A"\!'`\@P`,`H<]P@`!L+C`@00ZJ">`$Z7`$+[X4,"-` +M+C,($`'/<8``R+T0@0'@$*$1\(0O!A3/<(``@$$P($`.$P@0`<]Q@`#(O0^! +M`>`/H<4%3_W@>`#9GKD9>=[)X'\D>`#9GKD9>=[))GC@?]X:&+``V@*YGKH9 +M>D-QUQ$`AD9XUQD8@/(2`;;TR=D&[_TE>`#9GKD9>=S),GDD>-P:&+#=R21X +MX'_=&ABPX'CQP!X-3_W>$@^VZ74B\`AW(/`O+D$3$P[5%L]P@`!H,-9X`("( +MZ,]P``#U#LEQ=@ZO_:ER`-B>N-EX!GW/<(``:##6>`"`0'C>R0<@_H/A]>'M +M-05/_>!X\<#AQ0#=$_#/<(``:#"V>$&`4'7*(((/``!W`,`H8@$H#J+]RB%" +M`P'EX0W4EA$%3_W@>/(2`K;T$@&V17DA!N_]!B$``.!X\A(!MO3)$0;O_25X +M`-F>N1EYWLDE>.!_WAH8L`#:`KF>NAEZ0W'7$0"&17C7&1B`\A(!MO3)X07O +M_25X`-F>N1EYW,DE>-P:&+#=R25XX'_=&ABP\<#AQ=T2`K8O+8$0F^7*((8/ +M``#B#I@-IOW*(48#SW"``&@PMG@`@$!X@-G/<*```!PGH&T$3_T0V.!_W1H8 +ML,]Q@`"P,@*X%'C@?P!AX'CQP.'%"'6$X,H@A@\``((P1`VF_"T_]2B$`("IU!/!*(4`@`>55#141M@D@`*EP&G#_ +MV'IP[P@`A(H@!@0,?<]V@`"`05IP,"9`'HHD!BC7#`Z@X6W/#U61A@D@`.EP +M&0C`!`0OOA0P)D$>$21`H,P@`H37]0'G\/&`?*G"%`T_]X'C/<(``A#(5 +M@(+@`=C@?\(@#@#@>#)H-'D`(8`/@`"H,N!^X'CQP!X+3_T(=0#>A>#*((8/ +M```&,(`,IOW*(48#`-D0\,]R@`"L,A)I%'@"8@#8#R!``T1X@.#*)H(0`>$' +M"14!<.Y)`V_]R7#AQ0#%A@@*`!X_4+%($$ +MV`2A`]I(H5*A$-@3H52AX'_!Q>!X#WH9"C4!`-D"NE1ZSW.``*@R0F,)"(`` +M*'`#\`'8X'[QP.'%"'$/?87ERB"&#P``"#"X"X;]Q@IO_JEPJ0)/_?'`,@I/ +M_0AVBB7_'X7@RB"&#P``!S"4"Z;]RB&&`P#:"_`2:A1XQW"``(0R*H`)"8X# +MJX`!X@T*%0&,)?^?\_-=`F_]J7#@>/'`X<4(=87@RB"&#P``80#`*.8!3`NF +M_.!^X'C@ +M?N!XX'[@>.!_`-@!V<]PH```'SV@X'[/<```K=[@?O'`6@E/_0'>R7``W8H, +MH`2I<<]PH`"`'=V@M:#/<(``B*T"B,]QH```*(+@`=C`>`>X@[@0N(4@D@`! +MH9X-;_W)<(4!3_W@>*'!\<#R"$_]J'0H'$`Q6G"X<1IR.G.(=0HC@"$$)(P? +M!@```$$L510%*'X!"B#`#B2X`2A`!4%H*!04,$`HA"`5)`0!"B6`#X``N.44 +M)$$$,B5#`QT,'B+/=(``Z.4T9(Q[`"E,=04J/@-"=`<)!7-(<``H4`49#)XF +MSW"``.CE,&`,>P4I/G0*(D`NSW"``"3B,&#/=8``W.%L>`IPBB$*`@4I/G`O +M=@'8)PFD`Q0E313/%@L/A!-4E27P*0Z$ +M.'P($$$ +M2G`%*'X`"B#`#H`@QP\TE2FX!2D^`"]RZ7$"(H,$2",#``4I/@`O<`(@@0-B +M>4@A#`"99#5Y0G@;"$4`SW6``!CB,B5"%'5[!2H^`PT+1`X4>!<(10``)0`D +M0"!0``L,GB8#V1D;0B!1)("FRB$"!,HA(0`<&T`@"G`(W)\'#_W@>/'`7@\/ +M_80H!@0`(8!_@`!X02@0!@``(8%_@`!X0D`A!`-`(04)0"$'"E$FP("*(@@` +MRB(A`$89A```W1'PSW>``+CDKV?)@.MC9'YU@<1[+RO!`$XCC@?+9'"J`>57 +M#142Z8#/5=#94228#/=H``S.2K9L]T +M@`!(YF1Z+RN!`$XCCP?K9``G3P-@KW:!9'HO*H$`3B*#!VMD0"0""+IB9JJG +M#MZ`:("`Y=,CH0`O*\$`3B.,!\]S@`#$X(MCT_$`VQ3P*(#/2\I00!.(8('SW&``,3@26$!XR"LW0L4@6D&#_WQP`(.#_TR"D`%1@I@ +M!0AU"NW/<8``G'"`X,`A(0_6(:($#_"%Z,]Q@`"`<0GPSW&``)QR@>#9(6$& +MV"%B!\]P@`"<7`"`30B>!,]RI0``#(2"0-@$H@#;"/!M8<]PI@``@'5XH*`! +MX]+CN?=3$8``4A&#`#=H)7C/<:0``$!EH0:AA*+/<8``G)\9B0'@&:G=!0_] +M\4]#141\FWU?P)W`-X'\`'8U7GN""`'((D! +MYN<.E9!`)P$3=^T1#5`0$0V0$.,-T9`#V/#Q`-CN\0+8[/'/<8``G)\-B0'@ +M<04O_0VISW"``)Q<`(`7"-X%SW"``)QW!X#/<:```#&?N!ZAX'[@?N!X*(#/ +M`!A"!D`(,]P@`!.!^X'@O)@CP!-J+NDQX+W$%],]P@`!T?P7P0GG/ +M<(``>(?@?SA@X'C/<(``G'<*D(?HSW&``)Q<`(&CN`"AX'[QP/8*#_W/<(`` +MG%P`@*'!MPC>``#=G@H@!:EPSW>E```,$!<0$!`?@!\"``$`7@\`!:X*(`6+ +M<<]P@`#$GV"((,*$*PL"SW"``#1G,"!`#B"`4''*(((/``#+%#`,0OW/<8`` +M7$!`B2#`$PB!`!`?`!1""B`%`=@G\"X-8`H`J<]VH```$"06$1"II@;P!@TO +M_JEP`>6O??<-DI`)AH#@RB""#P``PAG(`T+])!Y`%`(*(`4!V!`?`!3/<8`` +MG)\*B0'@"JF1`B_]H<#_V<]P@`!<0.!_(*CQP!X*#_T(=#IQ&G-XW^QZ+W#R +M"R``B7$$*/XC@-X")@$0SW6!`*0/(*4O<-8+(``J<0(F`1``A?_:$7@7"B4` +M(:4B%8`0P*4!X"(=`A`!V`FE,7D5"D4`(A6`$,&E`>`B'0(0`=@)I14"#_WQ +MP+H)#_T(=\]UH```10`=@!\`0```X'@`V`"E1@Q`"HH@_P\`RE_@M`"KD!#_WQP#()#_T:<#IQ>G)H=0HF`"$*(`"$`MG*(&(` +M0"!4`$PA`*%*(D`@PB*!)!;:SW>!`*0/SW"!`,0/NG!`J"&H`-X$\`'FSWY) +M#@,5%P@0(!,.4A!*<"IQ9@D@`,ERH@H``$`J`"&V>,=P@`"<>!00!`"`VA@0 +M!0"I<``5AR!J<4AST@@@``HF@`4)A[D(4(`)AP\(40"`V`"G`:<-\$`J`2&V +M><=Q@`"<>`V!+H%"AWH.[_]CAPF'DNA`*4`A%'A`*T$A.&`$O;A@%""`!2"' +MQW"``-QX.*@AASFHH0`/_?'`7@@/_0H@`*`H=4AV.G,*(P`A!_+/<(``F.`" +M"B``J&``V<]PIP``2#&@`O`!YCT.U1#)<)8)(`"I<0#?`_`!Y^\/E9#)<(X) +M(`#I<0HB0"3Q"X2D"G"I<4"A[WDJ<,(*X`;)<@#8SW&D``!`$:'_ +MV!2AO@D``.T'S_SQP)(/S_RAP0AV*'<+"K,`2'43#5,0SW```+43\@AO_:EQ +MSW"``+34`(C/<8$`I`]@P,]P@`"8X.A@)X$7"$$`A>Y")$`PJ&`%\#)M:+DX +M8`]XJ0?O_*'`CN#A(,X'RB`N`<#@X2#.!\H@+@#XX.$@S@?*(&X`C"`"@^$@ +MS@<"V`/8X'[QP`H/[_PDV/X)X`8`W\]QI0``'`*!SW:D``!`G;B>N`*A.@O@ +M!HH@PR_5'M@3SW6G``!([:7RI?.E[*54'8`?`P#__/NE`MAR"N`"BB$&!*78 +M$+@$&(`/``#___&E\:90'@`4"0?/_('@`=C`>&T#X`8#V?'`X<6&"^`&*'7/ +M<*<``$B\H`#9#R%!`Q-I)7C/`RB!@E`"M$&S_S@>/'`5@[/_`AV`-W.#^``J7'/<($`I`_'H,]PI``` +M0[6@SW"G``!(L:"9!L_\\<"AP8#ARB"!#P``FQ.,!P']B@N@`HMR`,"AP-'` +MX'[/_\`-FEP<]P@0"D#RF@&=G/<*<``$@@H&X-H`**(`0+<@C@`HMP`,`!W14( +MW@4%((`/`/\``!-XBB7_'PBX@"`#`L]QHP`+UP4H?@`*(,`.K'@!P`H@0"X! +MW14(W@4%((`/`/\``!-XBB7_'PBX@"`#`L]QHP`+UP4H?@`*(,`.K'C/=X$` +MI`\O=0+`I:<0'P`4`=X3"-X%!2"`#P#_```3>(HF_Q^`(`,"SW&C``O7!2A^ +M``H@P`[,>`/`"!]`'@'>%0C>!04@@`\`_P``$WB*)O\?@"`#`L]QHP`+UP4H +M?@`*(,`.S'@O<@*'#!]`'A%X&>`%*#X`47@9X"]Q!2@^``T))`0O<`\(10,& +MAP'@!J#")4$3;@WO_\EP +M&G#/<(``G%P`@`\(7@&!Y=@*X?_*(`$$`-@<\#1M%GG'<8``G'B%@6:!"B$` +M@,HA8@#'<0``$M(IVA*Z"[P$)(P?/P``^,J[A7LU>F"B`>`/>,L(DH``W03P +M`>6O?4,-TQ``W@3P`>;/?O$.DY``W_D/$Y)`*$$A-'D5;3A@=&X;8_1[QW.` +M`-QX&1.$`*EPR7'I@!\`0```X'@`'@`43@X`"HH@_P\@'8J7%E;Q8+[_]*)(`!"^_:#0`*">@\AL]P``"Q$UB&[@P/ +M_0'EKWVG#5*1`=U*""``J7#/<*```!"IH#0>0!1`*0$DC[F;N<]P@`!P!0"` +MG[G$N`JX)7@,IM8-``K/<8``?)\-B0'@#:EN#&`"!=AQ`\_\X'CQP.'%"'4` +MV`(.H`*I<0#85@V@!JEQ=0//_.!XX<7AQHATSW6``%#G"&7/=:```"B`X!XHN`#V>$@Q0?*("4!Y.#A(,4' +MRB`E`/[@X2#%!\H@90",($*%X2#&!\H@1@`"V.!^\<`"#4_]SW&``)R?$8D! +MX!&IT<#@?N!X\<"6#P``SW&``)R?$XD!X!.IT<#@?N!XX'[@>/'`*@K/_`AU +M&G%(=L]P@`#$G^"(G@@@!>EP"B&`+X``Y#(TZ+H*(`#I<`#9)*#/<8``B*TB +MB0X1`R$-"1X`<'7*(T4##0E>``P@P*#*(P4$"PF>`'!VRB.%`SR00"`""%,A +M30!`(`P-G65@K0'A=(H\L&VJ`=@(\`ED"PM#`"VJ*',!X/4(%($!`L_\\<"B +M"<_\"'4H=AIRSW"``,2?X(@2""`%Z7`SZ#8*(`#I<,]Q@`"(K2*)`-H/"1X` +M@.7*(DT#RB(N``T)7@!0=LHBC0,-"9X`#""`H,HB#00]D$`@#`A3(4T`0"`# +M#'UE0*T!X5",/;!/K`'8!_`)8PD*0P`OK"AR`>#W"!2!B0'/_.!X\<`B"<_\ +M"'4$@,]W@`#D,D`E#A@(Z$O8#*ZI<,H((```V0KP#8X(X`RN+(X'EPD(0P`, +MKB"%#(X'"04``*7N""``J7`$Z`J%`>`#\`#8"J4HA02/+'@FA4$IP'$P<&\@ +M"P"`X*EP"O)^""```=D`V`FE#XX.KC;PL@@``"F%@.#,(2*`)?(/CDZ.`N`/ +M>`L(@P`$A07H"H64X`#8PO7"PD$`(H@ +MR@\`IQV%`>`=I0'8":4`V`JE"O"`X3!RRB&&`,HA!0,-"F0`(*"*(8H/(*-`@"`3 +M@0`-"D4`BB$+`BNC/8!AN>!_/:#/<8``Y#)(@":)!H!,>4$IP7$0<0'8X'_" +M(`X``=C/<:```"`"H?`9``!`V.@9``#@?N!X\<#"#X_\SW"``,2?X(AF""`` +MZ7`^#.`$"'4(=L]P@`"<7`&`2B!`("<('@,%A1!V4`@B`,H@P@/%I4(-[_^I +M<`P=`!0`V`^EH@_O_Q2EV0>/_.!X\`$J7`(Z(H/[_^I<#>``>$W +MH$D'C_SQP.'%SW"``,2?H(A"#>`$J7`(Z&8/[_^I<#B``>$XH"4'C_SQP*(/ +MS__*#L__T<#@?N!X\<":#H_\"'?/=:```"#;A0.`@.#,(>*`*O+L%0$03X<- +M":0`-*<"(8``!_`.(H`/_____SA@,0X%<```H`^^"B``Z7"F""``Z7`%AX[@ +M+`WN_\H@S@//<8``?)\4B0'@%*D&\(PA_X]4#L'_>@A``AN%#0B$`QN%PG@( +M\#N%#B:`'_____\X8'D&K_P9I^!X\<#^#8_\SW"``,2?P(A^#.`$R7#/=X`` +MY#(>Z)H.[__)__$!U` +M%!((0`(J%X`0`>`J'P(0!0:/_,]T@`#D,FB`)8Q'@&QY02G!<5!Q;R$+`(#A +M'``"`">,;'E!*<%Q,')O(0L`@.&$``(`X'XBD,]R@`#D,@'A:9(P>0DAP0`B +ML&F2#0G"`(HA"P`@HB.0:Y(!X3!Y"2'!`".P8I`KD@T+0@"*(8L`(*(DD&V2 +M`>$P>0DAP0`DL&*0+9(-"T(`BB$+`2"B)9!OD@'A,'D)(<$`);!BD"^2#0M" +M`(HABP$@HCR`8;G@?SR@(I#/0@AP0`CL&*0*Y(-"<(`BB'+`""B))!LDF&Y,'D((<$`)+!B +MD"V2#0G"`(HA2P$@HB60;I)AN3!Y""'!`"6P8I`OD@T)P@"*((#@`-BA!*_\RB!"`^!X\<`B#(_\Q@SO_PAVSW6``.0R=@WO_\EQ*!6` +M$`'@<02O_"@=`A#@>/'`^@N/_,]P@`#$GZ"(:@K@!*EP"^B.#.__J7`(=D(- +M[_^I<88)[__)`A +M!*_\*1T"$/'`H@N/_*7!"'<*)(`/@`#D,D`@#@]6((T"BW+)<$H((`"I<0"% +M`*8!A0&F`H4"I@.%`Z8$A02F`,`$P0BG`L`X8`H4`0$,>0/``<$<'T`>.&`( +M%`$!#'D8'T`>K0.O_*7`X'CAQ8"!8(!P=,(DQA!&]PXCC0______O&2`HH&! +MH8`-#$03`B1#$P?P#B6#'_____^;8V&B@H&B@`L,1!,")$,3!O`.)8,?____ +M_YMC8J)C@:.`L7/"(T8#1O<.)8P?_____YMC8Z(D@62`<''"(<8`1O<.(X`/ +M_____QEA)*+@?\'%X'CQP+X*C_P(=1(.X`,%V`AV,@Y@`@"%0I4#E<]QI`"` +M0%2A%:%$E0656*$9H=X-X`/)/'`X<7/<8``%#,Z#R``NH%$*#X+ +M0"4`$L]Q@``H%2]S>&``H;MCM9-6DXN;-Y/(O`F]SW`#``#^!'VE?,]UIP`` +M2(:EC9,)N3VE)X,3"=``+),)NLBY1'@E>`>ESW&``)R?#XD!X(T" +MK_P/J>!X\<#F"8_\I<':`",/ +M`0#=$0\S'@(C$`&,)W^21O8%V%`<`""@\`.`B^@$@0\(40"@@HHCPR\0\`\( +MD0#_W0`2$P`*\&?9SW```'X9)@OO_%`<0"!Z=4#&RG"J<>ERJ7,*),`$2B#` +M,`HE``:*)L,/8@L@`$`D!S%`)!DS0,;*<*IQZ7*I/'`;@B/_*;!6G)! +MPXAU"B1`(0HA@"$$@0#>"B.`+X``%#,!WQ<(40``$0X@_]@`)E`3HG[:<+IP +M&O""X,P@XH`+]``1#B#_V0`F5A,")E43&G$H=@SP9]G/<```?AFJ">_\4!M` +M(-IV&G:Z=HPFA*T$]HPE`Z)&]@;84!L`((GP0,!YF!A:6 +M$`<6DQ!*(0`@$/#*<,(/;_P#V2\F!R!J<+8/;_P#V2\C!R!`(5$@!(Y+"04@ +M0"05,4`D%#(*<*EQ2G(`PPHD@`4*)4`%;@SO_PHF``4`WP6.O0\%D`IPJ7%* +M<@##"B3`!`HE0`72#>__"B8`!0'G\/$A"%(``<`%M02%_]D/"%$``L`&M2>U +M!/`FM0+`![5=!F_\H\#@>/'`)@YO_%!XSW2``*P*H(3(N@FXSW8#``#^Q'A% +M>,]RIP``2`:B+R`(`5,D#P()N,1XY7@=HG!XR+L)N,1X97@'HA0:@`%/)0$" +M(*(`V`/M`*3H<`X((``$P34&3_S@>/'`N@U/_!IP.G&*)084J78*(H`OI@`` +M0``2#R`A#Q\0*@JO_`/8@.9AOOCUSW```*0HR-D6#Z_\4R<"$,]PIP"`2,"` +M`!(/("$/'Q#^":_\`]B`Y6&]^/7/<```I"C(V>H.K_Q3)P(0SW"G`(1(0(`` +MVYB[`B;`$-=V@````,H@BP-"*,$'`B+,`-=R@````,HF"A/*)HL00B[-%PAR +M@@BO_"AS"'=:</'`U@Q/_,]W@``4,PHB@"^@```@;!(1(&@7$Q``V'(, +M(`":<-8)(`"*=JH)```$&P`@`_`!Y@&'B0X%$*()(`#)<$0N/AL`(T$NNG$" +MH28.8```V:8)(```W>8*(`#)<`*'U0T%D/X*(`"I<,EP0@P@`*EQ$FTXAQ4@ +M$```)0`D*K`VAR.@-X72\$`B@0P(80HG`)`$ALHG8A"EP;+H0"0',0'= +M0,4*<"IQ`-K_VYAS2B7``8X-[__8@!]@`,*5!!Z`'V``0I8$'H`?#``"7P0>@!\,``)@!!Z`'PP` +M0H\$'H`?#`!"D`0>@!\#`,)@!\'``*.!!Z` +M'P4`PF4$'H`?!0`"E@0>@!\%`$)F!!Z`'P4`@I8$'H`?_P`"=P0>@!__`$*G +M`-T$'H`?``#"0`0>@!\```)[!!Z`'P,`@D`$'H`?`P#">DH@`"$$'H`?;``" +M`00>@!\#`$()!!Z`'P$``@1*#2`&`=\$'H`?`P""9@0>@!\#`,*6!!Z`'P,` +M`F<$'H`?`P!"ERO8$KB@H*&@SW&G``!([:&DH>.AOJ'XH3P9``3/<*0``$.U +MH,]QI0``'`*!G;B>N`*AM-AN#2`"BB$'"!D"3_S@>"\F!_``V,H@;P`#N!1X +MQW"``#0S4X@RB,]PIP``2%&@,*#@?O'`D@E/_`AU`-X/)@X0,V[%><]PH``` +M12V@$+E/(<(#F[K/<8``<`4@@9^ZQ+D*N45Y+*`"#*`)A28!$M!^0"X`%(4@ +MA0#/<:```"@!H:EP$@QO_@#9J7">""`"`-FA`4_\X'CQP.'%"'0H<$AQ_]H` +MW4>P1K"EL$.$!>H#V22@!?"DH!(-[_]H/'`B@U`!'H.C__1P.!^ +MX'CAQ<]T@``4,UJ$9(0A@@(@30``V0CK>(RQ?0T-Q!`!V0YX`:(H<.!_P<7@ +M>.!^X'CQP,((3_S/<(``%#,$@"7HSW6@``!%S86Z"\__`=G/<*```!`IH,VE +M$+Z/OIN^SW"``'`%`("?OL2X"KC%>`RE)@N`"`0 +MJ=D`3_S@>/'`X<4(=0+84@L@`JEQ\@MO_JEP`MBB"B`&J7&]`$_\\<`^"$_\ +MH\$:<,]V@``4,R\F!_``V,H@;P`#N!1X0"8-&!UE#HTH=T`H`0($(8$/```` +M_R5XSW&G``!("Z$V"R`&$8U/C0#86*89INEP#@T@!C"-`_`"XEBF6(9+"M4% +M&89/>@'@&:;I__V',! +MP!>F`L`6I@'!@.#,(8&/\`B`T;8'Y?]8A@L*U`46V!BF]0#.__3XE:<,2Z!;VO?45]0"T. +M$D`D$3%`)!`]!26!$XHB"```VPHD0`0^""``"B4`!`W`SW>G``!("*<.P`4E +M@1,)ITIP`-H`VPHD0`0:""``"B4`!`W`"*<.P`FG80`"E%9(WDLJXRKD+N25X`:5)\)X(``!`P2#& +M1"@^#<2^SW.``$1[+W2>9LACY[C/("("SR!B`L\@H@+/<8``%'S/8>>_SR[ +MSR,B`L\C8@+/(Z("#&'GO,\D(A+/)&(2SR2B$E,C@`)3)($2"[DE>`&E=;*7 +ML@C)*(T`0"B*`+X``',EL +M$H(@PB/"$D0J/@=*`!B:!),(0DD +M#!!!*8`#PKC/=X``7-\(9X+@!MC`>`)\P8-="5X"+K["OLAGA"D!%DD@@``I +M:(H@OPT`)D(.@"("`#5ZR)HE@TF:,WDY83YFSGY982YY"22"$TYZ"21!$"YY +M`=P7"Q$0SW6``'0(A:5`)`$E,F@1`, +M\`T.GA93)L$0"/#=><*YSW*``$#F*6(88!5X:K@`($<`R'"`(`4)%"!``@`0 +MR@`3#A$@SW"``!C)`)A!<"\B!1"*)P$F!"G^%0`F0`Y`X!4@P`$@F`(040$% +M@Q-X&&`982)P+GD.>`DA`0,N>@@<1#`))`P0CGD*'`0S0"01,B\@R`%!P`'< +M!"8`$D$HR`($)@`602@8!@4@`#(0>-,+$1"7#A`@!"A^)0HG0`Y!+HP3PKR- +M9PT.'A)3)HP0#?`+#IX64R;,$`?PW7S"O,]W@`!`YHQGOV7U?VJ__&0$*/X% +M`"=`#L=P@`#<914@#P..GP`13R%LO#<,PA/HOM,FHA`,]/J^TR;B$`CTW7[" +MOL]T@`!`YLYDO66U?6J]W66U>`^8`A%,(6RX"P@#`P'<)?`"W"/P1PB1``0H +M?B4!Q0`A@'^``/QF%PVR$@@43C&FB"L-@Q,'B",(0P`'\*2(&PV#$P6(%PA# +M``#).>@'A+GF%A1)L%"#`!,=P@`",SP`0S@#:8DY^`1#```@@@GCQ/N?@@C +M**-T$LX@`!R"`\6%"!Q```0<@`//<8$`Z#H'H4FA#AP$``P#(!T```6%)!T```#``*'3\,]P@`#$GP`0 +MAP`!@$HA0!`(B,]R@``C(8.!@QL)7@(!V8;HSW"``'0():"@\.&_ +MP'GY\4$L@1/"N2IF#0P>$E,D@1`-\`L,GA93),$0!_"=><*YSW6``$#F*65: +M8E5Z:KI982\D2`""Q0':!"2!'P```!A!*<4"!"2!'P`#``!!*08&!29!`=$( +M$0"/"1`0A"\+`B]P02R"$\*Z2F8+#!X24R2.$`SP#0R>%E,DSA`(\)U^PK[/ +M=X``0.;.9U]B]7]JO_YFA"D!!B=PQW"``-QE%2"!`RZ9P)ULN3<)@@/HO-,D +MHA`+]/J\TR3B$`?TG7S"O,]Q@`!`YHQA6F)5>FJZFF)5>`^8(9ULN`L(0P`! +MVBCP`MHF\$T)D0"$+PL"`"&`?X``_&8=#+(""!1,,2:(,0D#`PH403$'B"D( +M0P`*\"2((0D#`PH403$%B!4(0P``V@CP1">`$OD(D(*W#U^0SW"``'0(1:`( +M$``0"*,-`"_\J<#QP.H/S_L(=L]P@`!<=UB0SW&``)Q<`(&$ZJ2X`*%:\(2X +M`*&R"R`$R7`(=P8+[_[)<"8,``0Z"\`)'@P`!%8+P`F$+@L2SW"``+AE+W6@ +M8(#@RB"!#P``"2L0"6'\RB&!`ZX,H`G)<.EP8@O@"*U?0?/^_'` +M0KC/QZSK@T@!$ZC@.`("H+\T<#@?N!X\<#Z#N_[%-K/<8``F'?^ +M#.`'`-TH\(0M`1,O<``@@@^``'Q;?(K/<8``7%L:ZUV*.&!$*CX'"."R""`$ +M,"!`#@AWH@H@!*EP"'96"B`$J7`(6O?;,-$I'Y +M!L_[2(#/<8``?G?U(8$`X'\BH/'`?@[/^PAU*'8`W\]PH```$.F@+@@@!`'8 +MCN4!V<(A30`HJ*FHRJCKJ`3N8KVIJ!`8@`\```8\]@_``ZD&S_O/<(``O'<@ +MB$&(0"D`!(&XBKB-N,]SH```*`&C0"H`!`4@@`\``$(D`:,(N@0B@@\```#_ +M17G/<*$```(EH,]Q@`")`>#@?P>I\<"J"8_\0B``@,H@8@#1P.!^X'CQ +MP.(-[_L!V,]U@`"`,R&%@>'`>`#>!+@2Z0@5PA#/<8``O'=`J4&I0@FO_`*I +MSW&``'R?"(G!I0'@"*GR#F`!`-@-!L_[X'C/<8``O'<`B2*)SW*``(`S(GA) +M!^__":KQP)8/#_W.#R_]NMC*#P_]SW"``(2L`(`:Z.X-@`//R079%;D+H6X- +M``76#@`"BB'_#^.XBB!)#P+:RB)A`(H.`!V!X`@.X@G*(*("T<#@?L]R@`"$ +MK"""!GG@?R"BX'C/#B`$$-B2#0`$T<#@?D(@ +M``S@?P]X\<#V#,_[SW"``/C/`(``W3T('@#/=H``6%L@A@61YN"6]@.1(QE" +M`P2QJ7<&\!(-H`1@V!T(4`"*[T"&(Y(%DCA@))*"(($)YPA%@!$%S_O/<(`` +MB$%Z"F`!8-G/<8``="Q="%$``($/"%$`P@\`"X/H`-_B\0'?Z7#/<8$`,`%` +M&0(`*+A!&0(`*+A"&0(`*+A#&0(`SW"``*0'3H!0&8(`*+I1&8(`*+I2&8(` +M*+I3&8(`%@I@"NEPP/&@H=OQ\<`V#,_[SW>``%A;`-TH\(0M`A4%D"=QE1&" +M`!#@)0BD``#>SW.!`$Q`5&W/<($`K!T4X8X(H`MZ8H#@RB9B$""'+R:'\T`A +M``.X8,"H!_(B$8```>`B&0(``>7/=H``],\@AD"!K0VDD`"'(A"!`)\)$``C +MD`+A([`ED&*Y);``W03P`(>FO>88+8`1PV'+H +MSW"``'0L`(`-"%$`P@X`"R_H`MC/C/.!^X'CQP.'%SW6```@I`(4W")4!SW"!`+P= +M%(@K"%``P@IO_@'80(7/<8$`_`]5>4:!%PB!``K8.@LO_BR!`-CN#F_\((4M +M`\_[X'CQP+(*[_L(<4AV`-T"\`'E$PV5$<]P@0`L$/`@0`/S"0&`AN7*((8/ +M```1*_P+!OR!Y@'8PB`!``'@J@YO_*EQW0+/^_'`\@Y/_,]Q``#HAL]R``"` +MAL]S```TADH++_X*V-'`X'[@>/'`0@K/^\]S@`!TU""#`-[P'$BP(I//:C#I41SW>!`/P/0"<-%M5_+(?M"$&`BPI1 +M`""'@>'*(((/```0*VP+`OP"V!IP`*?/=X``""G`IV8)+_X*V`AVBW!`)@$2 +MX@^@!P;:@L!`)@$4U@^@!P;:#]@&IA78!Z9$V`NF$-G/<(``>$*`(!H#(*!6 +M"2_^"M@(=@"'\"4!$"]X+@W@`RFN"*X`V`JN"ZX%I@"F!J80'@`4P@HO_@K8 +MV0'O^Z3`X<7AQH0H!0K/=(``B*``)$,>SW6``,S#`-HG=$"D!MDDH\]Q``#< +M%2.C!:.FH\'&X'_!Q;4!``#/<*```"`;@.!^X'CQP"8)S_O`@:2)R7"2"F`> +MJ7$:<(0N!1H`(8]_@`#4H`@7$1"F"2`"R7`NZ$P@`*#,(2&@*/(;"1`@'I<) +M"%X",H<#\#"'R7"F"&`>`MI,(`"@RB""`\HA@@\````$D`AB'LHB(@(V;<]P +M@`"`=L!`<_[\<``@<]Q@``0H80H!0HT +M(4$.$PE>``/9"KE."&`>"=H#\/X(``#1P.!^X'CQP.'%H('."Z`>!(FI<`/9 +M"KDJ"&`>"]K9`,_[\<#AQ:"!L@N@'@2)R@@@`*EPQ0#/^^!X\<#AQ2AUSW$` +M`%R*!(T0VAX+H!X!VZH((```A:$`S_OQP"H(S_L'@<"!".C/<(``:#3P((T# +M!/`%W0J]Z@Y@'LEP@.#*(($#RB%!`[@/(1[*(J$!80#/^_'`X<6@@<]R``#8 +MB@2)2'$0VOH*H!X`VTX((`"I<$D`S_O@>/'`S@^/^Z"!,Y&(Z<]P@`!8-/`@ +M3@,'\,]P@`!X-/`@3@"*#F`>J7"`X,H@00/*(8$#6`\A'LHBX0$!`,_[X'B$ +M*`4*`"&`?X``B*!1`\`(\7,)>*1RB"!`T0*(1[*(<$#I0>/^_'`A"@&!,]Q@`"` +M03`A00Z%XT<#@?N!X\<`>#Z_["'*@@02)A"T%&L]S@`"(H``C +M3@XK"E$`+($5"5``SW$``!B+"-K6":`>`-L)\+H)@!XHAJEPG@X@'@':20>/ +M^^!X\<#2#H_["'8H=0#?F@_@`>EQKWTK#5$05FX`(H$/@`"FI>"I`]D*N6H. +M(!X%VL]P@0#,'/`@@@/)<.EQ"_",)8*4"O+/<($`S!SP(((#R7`"V4!ZY0:/ +M^_'`V'&$*`8$SW&``(!!,"%!#H7AS"'B@;P.(1[*(8$!T<#@?O'`6@Z/^PAV +M*'4B#^`!`-FO?1<-41#/<($`#!WP(((#R7``V0OPC"6"E`KRSW"!``P=\""" +M`\EP`ME`>HD&C_OQP`X.C_LZ<"AW`-W>#N`!J7$(=H0H!0K/<(``B*``(%`. +M'0]1$$`I@2$`(8`/@`"FI:"HR7`F#B`>*G$@$`$@R7"6#2`>`=HE!H_[\<#* +M#8_["'R7#HI?:E +M,@[@'.!^X'C@?N!XX'[@>/'`[@RO^PC9 +MHL&+=4X(8`FI<"#&-@VO_:EP"'4`P`]Y@^'*((8/```+"3@&QOL!P2\)T0#^ +M"D_^`,&,(/^/RB""#P``!0DD#L+[(,$`VL]P@`",7#5X0*#.#&`AR7`!P#,( +MD0#/<*```"![@$"%`,!^8@]\SW&``(Q``#PPL@\@">EP`-XX\(0N`1S/<8`` +M#"X`(4T.`"%`;[P"@F`\]U@`"$,D`J@"`4>$`E`1D"88HG +M_Q\"(L"#`<'*(&(`0"47%1\)4`""X0##EO*#X9`"`0#/<```!3#>#._[:'*+ +M\`CHSW````$PS@SO^P#"`,%*(P`@+R='($`O@"`4>+A@.G`IH`H@P"0*),`D +M*_`5)A84"!8"($<*P`-`(U,@+R6'($PE0*'*((8/```4,(0,YOO*(08$%252 +M%0`2`B#Q``E%A`H%@`@!2"`!`<@@`2Z +M#>`"*!8"($;P`^@3"X``SW````0P2@KO^VAQ0"J.(-1^OF8KADIP*!80$/H- +MX`(*$+`84SW:``(!!,"9.'@T.D!$!XE6E`-D0(0$#[?%&P(;`2@S@``39 +M(0"O^Z?`X'CQP*;!BW#&"R`)!MEF#<``IL#1P.!^X'CQP,]P@`#<,JH+(`D" +MV7H.#_Y*#<``T<#@?N!X\<"AP8MPD@L@"0'9,@W``*'`T<#@?N!X\7/#121$@O```4&;_NAP/'` +M@@UO^XH@_P\:<)P<"+"!P$X)(`D"V0+'!">`'P!P```\N%,GPA8;"'0!`<7/ +M<:````0$@;A@!*&*('\/0,!6\,]Q@`"`T?`A`0#/!EA@\#F"*_[!]H#QHONSW&@```$!(&X +M8`2A`!P`-"[P$!0#,1,-P!!##]\7$A2`,#L($`$2%(`P%P@1`87%J7"N""`) +M:'%@?JEP)?#_O]$@8H`(\LEPE@@@"6AQ`=A`P`[P&0@>``_MSW&@```$!(&X +M8`2ABB"_#T#`BW#B".``!-D)\`'80,"+<`39R7(J">```KOA!&_[N<#QP,[- +MA.#*(((/``";(>`%@OL!V<]P@``8.B&@-@@@"0C@V@G``-'`X'[@>,]P@0", +M&Y$`X`!TV<]P@0`0'(4`X``,V?'`IL&+<)X/X`@8V0'`)0A1``/!SW"```@Z +M(*`$P<]P@`#DJ2"@!<'/<(``C#L@H`+!SW"``$0)\"!"``#8`,&*(_\/T@M@ +M`9AS;@G``*;`T<#@?O'`Y@MO^QC9K\%&#^`(@L#/<(``Q)_`B(MUJ7#J#6_\ +M"-GR"V`)(L#/<8``K%ST(0``0"0$/@`(-P$PE1`#(0@0`"'$(P,Q"``!#P!,&(Z2`0@0`"'$(P(1"```CP+!"!`"T0 +M@``"'$(P`QP",*EPI@^@``C9Q0-O^Z_`X'CQP$H+3_O/=X``3&4/AZ'!_]T( +MO8[HBW`.#^`(`=D`%``Q!'U(O2\@!R`"%(XP"O`0AT07CA`$?2B]KWTO(`<@ +MU@X``AL(T``1#A`4J7`*<8()8`+)<@7P`=A<'QB0>@]``DT#;_NAP/'`X<7/ +M<*````0#@+`<"+"+=:EPJ@[@"!39`,!AN(L(%04S)@!P@`"8TD`G@7(4>0!Y +M%@F@`JEP(_#R":`"J7`?\/(*H`*I$$;"#4!2(DA@0GIA>+,(N*!!?3&#H`=!?""P+8-X`@)V5H/@`"K +MP-'`X'[QP.'%I<&"P)X-X`@#V0H4@C",(@2`B/:*(`X`-@NO^PD4@3``W1#P +MBW!F#N`(`=E`)(`P6@[@"`'9@.!^X'A5!$`.!^X'CQP.'% +MH\&!P*X-X`@"V004`#%AN-L(50$S)@!P@`!4TT`G`7(4>0!YSW"@```$`X#/ +M<8``7'<"N!9X`""-#X``,'X7D0'@%[&I<(8,X`@)V:EP"-D%VDH/+_UHA6+P +MSW6``+QP0"4`%V8,X`B*(8T%SW.``!Q^0"4`%XHA304"VAX/+_UD@T[PSW"@ +M```$`X`N#0_^SW&``)QW"'4,D0'@#+&I<"H,X`B*(4@`,"6#'P````BI<(HA +M"`#F#B_]!-HP\,]U@`"<7*EP!@S@"(HAR0%6#X`$SW.``)QE0"4`%(HAB0`! +MVKH.+_UF@QKP`-T&\(MPQ@O@"`'9`>4&%``Q\PT$D,]P@`!D.0^(%0A>`,]P +MH/[4!P'9I@O@`(HB"`A6#8``20!O^Z/`X'CQP,H/+_MJV<]U@0!4(Y8+X`BI +M<`"%*0@>`,]V@`",*4`E`!)`)H$5L@T@!P3:0"4`$T`F`12F#2`'!MH`A3T( +M7@`EA8SARB"-#P``L@WX"(W[`-Y`)0\6#?!$AX3BRB"&#P``LPWH"*;[RB&& +M`P'F%.<%A><.!)#2#(``M0,=P@`!(NDB`"0R!$"*@`>/O"Q2$&O`K"%$`"A1` +M,0/9Z@\O_P':#!1`,039W@\O_P':#A1`,079T@\O_P':!/#J#R__A,!:#(`` +MJ<#1P.!^X'CQP-(.+_N*(#2`'!-KF#>`#0"4. +M%\8(X`3)<,EP.@[@`T#95B7`&#(.X`-`V:EP@"`%"R8.X`.`V0'9SW"``)BK +MD08O^R"@X'CQP,]P@`#P3WX)X`B*(1\%SW"``+!7,(BRX`"H2AP"@J@`(HA#`PQ!@_[\<"N#2_[#-FCP8MV%@G@",EP`Q2","D*$PC/ +M<(``&#H!@![H!A2#,`(4@3`1"[,!`12`,`D)4P(E"!($!A2`,`$4@3`(N`5Z +M`A2`,!BY$+@%>I/8C;C>#F_[17D#%($PSW"``(#X%B!1`"G(5&E88"H2`C84 +M(E``(<*`XL[R&PI0`(+BRO0"%((P`"&`#X``:#I`J,7P!12",,]U@``8.A'J +M8(!!@$5[0H`#@&5Z!2"^@,H@@@\``)0`>`YB^\\@8@,#%($PSW>@```P4FG' +MOZ#&`&R7!`\#H7 +M`I9*)4``!'I0<`$4C##")4$!`A2",`2\A7H`$`PA.'N1<@''!P`=C"(`$``K@%>@<4@#`$$0,@EKAP<`'8PB`!``.X!7H&%(,P +M4R2``!!S`=C"(`$`!+@%(@*`RB""#P``E0#(#6+[SR!B`P,4@S``V@"%#R+" +M`$5X`*4!%(`P%24!$(2!!+A%?(2A`A2!,``CC`^``&@Z!A2#,""L=7U\A05Y +M17M\I3H7`Y9E>CH?F)``&$0@!12`,`,4@3`X>)(7`98E>)(?&)``V0`90"`' +M%(`PEK@$&0`@!A2`,"'!D+B1N)*X`[D%>04A@0\8`1```Q2`,`*X"!0",<=P +MH```,*T8F(`T&$"`!?#2"V`&R7`APH'BS"(B@"#T`Q2!,)3ARB!%`,H@1@"' +MW,`@!@,"N#`@@P^@`!@L$FDP((`/H`"T+@]X$'/*(((/``"2`-P,8OO/(&(# +MR7":#V``!-FA`R_[H\#@>/'`/@L/^TH@`"C/=:```"`['1B4`!8`0,]VH``` +M%!"F`!8/0(#GRB"!#P``+"60#&'[RB'!`^JF3!W8DP/8$Z8!V$L=&)`\'1B4 +M>@B``%4##_O@>/'`[@HO^Q'9SW:!`#0MN@Z@",EP+H;/=8``2+H3:15X`F7I +MNLH@@@\``#,E1`Q"^T"&SW>``+#0;H9]"M\"`(>4Z!-K%7@`9?ZXRB""#P`` +M*"4@#&+[RB'"``'8`*?/'`@00.>N2"@+8:$X/'`\@DO^P+9IL'F#:`(BW`$%)*AS"$BH@CTSW```#HE"G'2"F_[*G),(P"@RB"!#P``*R6T"F'[ +MRB%!`P0M?A4`AP3@"B5`+B=P_@R@"`39`(=,)$"@HG#,(V&C!O0`&(0/```` +M$`3P`-D@L""'="%`!04@``4`L4"'=")!!4`N`!(E>`"R!O""P+X,H`@$V0`F +M@!^``'BQH*C*<00H?B#/<(``P$(P($$.$0D0@"\H00!.((('$VK/`MC$PN.`P`F@!^!`,@Y5GB@J!#8V'AK>`?R`":`'X$`R#E6>*2H$"&!`.'Q +M`@Y``)T`+_NFP.!X\`!W">`$J7". +M#"`#"'6]9;1]A^@`)8\?@`#HJ07P`"6/'X``/*J+=LEP#@R@"`'9?@P``Y(, +M(`,Z<,H,(`,:<`ASSW"``)Q<"A"$`"IQ`,`*/'`X<6D +MP8MUJ7!B"Z`(#-E:#,_],@G`!.H(8`.I<`'80\"#P,H+8``$V?4'[_JDP/'` +MH<&+<$H+H`@!V0#!SW"``%QWX@Q@`#JPH<#1P.!^\<#AQ;'!BW6I<,]Q@``( +MU!H++_M$V@0<@#\!``"`7@B```KH`,!"P,]P@`!46P"``(!#P`#9"O`[>$-P +M6A`"!Q)I@W!%H`'A\0D4@L]P@`!46R"``H%-P`.!3L"I<$(+8`!$V6D'[_JQ +MP.!X\<"WP8MPO@J@"!?97@Q``+?`T<#@?N!X\<"R#N_Z"]FKP:(*H`B+<,]P +MH/Y0`@7:%;H$HB3`!<$$HB2B!L%3(,\`)*)$N%,@EP`5#S,4`<%2#:`!*'`! +MP1$(4`#/<```$#0."&_[),($%)0PSW"``'A!0"`5`D`@$`>*(`8$!"P^(%IP +M,"5-+A-O(,$*(8`O@`!(NA4@%@``(8XE`(:M"1\`$PA?`G/8C;CI<<(/+_L% +MP@#9)!Y"$"JV/]@+MDIP!"P^((7E-"!`+LPEXI$&]">X"K8KM@_P&PT1$D$H +M`0,HN`=YP[DD%``Q!;DX8,BX"K8"P.ER`\%`)H,69@_@!@HD``4O(`>@'O** +M<-(-X`CI<1$4@#`@'@`5AK@1'`(PBB#_#T;``(8%P88@"@`HN<"Y![DE>`"F +MZ7!F"^_[BG$!W0KP`MT(\.FX`=W*)2(22B``(('EW/0D%``Q#+9*<`0L/B`P +M)4$N`!83$`7`!L(;"1$"%PH>`D$H`0+`N4$KPR'`NW!QT"(B`J>Z1L*GN$7` +M!B.!($1X!7D@IA<+'B+HNV"+8+Z0$4@C"*<(#BZ7'*(N$'_@J`'((.[_X`)D`D(,`)"!\` +M#0@1(!$4@#`1"%X``A0!,2:VH@J@`.EP$12`,!<('@$=%(`P`-D/(0$`+WG6 +M":``Z7`1%(`P'PC>`"?!Z7`>%`(QBG/F#._\BB0!`)#@RB4F$98*(`;I<"#` +M$12!,`\('@`H=(8DO9\F\@06$!`*PD&F'0D>``0B``00_+)8:(1(`"%RB!"`!P.8@C* +M(>(#"?`R>`1[8:(+"QXA(((D>`"B\LD9"`X%`(;GN,H@(0#/(,$#J`UA",HA +MX0,@PHIP4B("`.EQH@F@',"ZSW"@`(`,0!B`#P"@"`#FR0+9`!\`0*EP7@E@ +M``':Z0/O^JO`\<#AQ;#!BW6I<(H/8`@0V079SW"@_G0"%;D$H2#`!*$"%``Q +M!*$!%(`P!*':#&`&J7#/<*``@`Q`&(`/`*`(`.;)`MD`'P!``=@*"6``"'+A +M`^_ZL,#@>/'`5@OO^@'9SW"```#5`8"CP4'`)@]@"(+`(L4*(8`O@`!(NJEP +M$@P@`0#97&U3)<\0LV^U?0`A3B,@AHH@""!^CEIPPKH+(0"$S"+!@,H@@@\` +M``"*0!!Q$,`"` +M`<$B#>`&Z7)*<#H(H!SI`!0)#P$0@-@`H0#83@F@!`\@P`//<*``@`Q`&(`/`*`(`.;) +M`-D`'P!``=@:"&``"'+)`N_ZH\#@>/'`X<4`%@U`YLD>#N`&4R4!$,]Q@`!( +MO>&]`=C*("$`R0+O^@"AX'CQP$H*[_H"V;/!&@Y@"(MPCL&"QL]U@`"4J:EP +M/@C@!A#:2W>`)P$=Z7#)<2X(X`8PVH+`7@X@`$39`,`5"!X`Z7`N#._[,-FI +M<"8,[_L0V6$"[_JSP.!X\<#/<($`#`/"#6`(`=EF#P``T<#@?N!XEMA-`R_[ +MC;CQP*'!BW"F#6`(`=D`P8#ARB"!#P``B0`T"R'[SR!A`P#"SW.!``@E0ZM` +M*H`#`J,`V0/P`>$5"=4``-@/($``2WCZ\PZX`:,*#P``H<#1P.!^X'CQP%8) +MS_JDP0`6C4``%H%``"6`'X``<,@@J``6`$&I<#(*(`$!V8P@PX]*)``@&G`& +M]#8.H`!4V%$"```6#T_]SW&``$BZ0,`3;15X"PTU%`)A$0I>`G;8C;BJ"B_[ +MJ7'/=H$`2#7)<+9X[@Q@"`+9SW"!`(@T0<"V>-X,8`@"V19M0L`*)X`O@0#( +M-0+'ZG`?9^EPP@Q@"!#9SW"!``@UM7BV#&`(`=GI<,X,(`@0V18F61,!$8`P +MD.#*((H/``!W`,\@:@,T"BK[RB%*`X#8`"68'X``M+D`&`(P"B.`+X``7-]* +M(@`@(_`$Z``8@C0()%0D-P@0(0#`*@S@`@]X$P[U(`AQ#PX0(`L.1"0)"44% +M`-Z`YLH@@0\``'@`SR!A`^`)(?O*(L$#0")2($PB`*3\``8``L`5((`$,""'P```!@R(Q8@0\=!*M4"`=YD\B/!$D$O +MPQ#!NP'C02]`%,&X`"#1`*#AS"(A@!CR"0\>$A$+E0`)W`J\!"<"$QT*``,9 +M"-4`#0B1`!$/'A(-"Y$`#0\>$LSAQ/8`W@/P`=[/UIB57IZ8AIBSW.``!CE2F,!WE$BP('/`L,42"!XO^J3`X'CQP.H.K_H(V:+!YA(/ML]UH``` +M+M6%0@I@"(MP*\@`P<]SH``<+@8A`@"`X@':>8/`>F1X)'B`X`'8P'A+>,H@ +M@0\``*8H(`@!^P#8%:5>#B`(/]@`P`04`3$5I1H-(`B"N=6E!@P@`.8:V+/E +M!J_ZHL#@>/'`SW"``/C/1@I@"`?9Z@L```#9SW"``!C0(*C1P.!^\+M"A*"`I``VA>V2'$;\,]P@``8T&"(`"&`#X$`R#EV>&2(C"/#CPWR +M1"L^#<]P@`!\L0"`-"!`#@/H(*T!V@'A+WD)"1,!9>I!"E$`SW"``!C0((@` +MC<=P@0#(.39X)(C/<(``?+%$*3X-`(`D;03@)W"^"Z`&$-K/<(``)/]`)0$5 +M7@R@!@+:SW"``!@;0"4!%TX,H`9"VA"&!""^CP```S`6\C2&BB`9``DA```5 +MI@/@1B##`,]P@`!86T"`J7"*(04&_@D@`$J""O``V!6F%*:I<)()(`"*(04& +ML06/^O'`0@VO^A/9SW6``,P:"@E@"*EPJ@H``$`5`A'/<(``K#]`L$(5`1'/ +M<(``KC\@L)#BS"$LA,H@B0\```@"=`;)^@#8"?`,90`@@P^!`&@<@*L!X`]X +M\PB"@`#8"_!`)0(8"V(`(((/@0"('&"J`>`/>.\(0H`QA<]P@`"P/W*%(*!A +MH,]R@0`P`20:0@`HN24:0@`HN28:0@`HN2<:0@`H&L(`*+LI&L(`*+LJ&L(` +M*+LK&L(``=G/<(``:"SQ!*_Z(*#QP'X,K_H!V:'!2@A@"(MPSW6``"0<`,`@ +MA3A@$'B6X,H@B0\``+@AS`W)^@#>#?``A=A@A"@"!01M)W`6"&`()=D!YM!^ +M`,#I#@20K@D``,H,(`,`%``Q`(4`P3A@`*6)!*_ZH<#@>/'`SW"``!3_S@\@ +M"$K9A@D``)8-P`G1P.!^X'CQP,]P@``8&\8/(`A"V6H)``#1P.!^X'CQP,]P +M@`!@_YH/(`C0V5()``#1P.!^X'C@?N!X"0>`&P4'@!OQP+H+C_H(=L]WH``` +M$`T7`)8H=4(@``A((`$`0"4`$A!Q[`R%"`=M!""`#P``_/^=N)^X,!\8D.;) +M`!\`0"*]!?``'P!`!.9AO?L-M9``A@+9`@D@``':R0./^O'`5@N/^@AV*'<* +M(8`OH```$`T1`*8:?'?:5\]0^4 +MD;#L`-\'\.U@`1..!`'GQWVE?/04D3)#O\P#8'/#`@B"%08+'>85Y@84"OT=\!21,D`3G^V/R]4`D@@`(\$E@ +M`1.-!`'BIWDE?/4*E('F[`'8N0&/^O4&@!L#V<]PH```!"B@+,C//'`6@X``<8+#_W1P.!^X'CQP.'%"'7J":`"+W@: +M#8`%+@D@'*EPI@L/_?(.8!H&V(T`C_J5`P_]\<`."(_Z"'C^ZZ7"."2`<4B("`!4(40#/<(``C,,>#*`'0"5!$@/P0'XY +M`(_ZX'CQP,]P@`",PY8+@`?*"H`"T<#@?O'`M@]/^@AVSW>@```@NX>#X,H@ +M@0\``"XP$`'!^E()H`+/>((,@`4[APT)1`,"(4`#!_`.)8`?_____SA@`KY# +M=@8>&!#9!V_Z"AH8,.!X\<#AQ<]P@`#$GZ"(@^7*(($/```B,,0`P?I:"H`" +M`@F@`JEPN0=/^J4``!SQP$((`!RZ"@_]T<#@?N!X\<#AQ98*+_T(=:EP`-F^ +M""`<*'*-!T_Z\<#/<(``;"P`@(;HR@C@`#S8`_``V,]Q@``@.0"AT<#@?N!X +MSW"``!PY`(#@?X8@_@_@>,]P@``<.0"`X'^&(/D/X'CQP.'%`-C/=8``'#F& +M".```*6&(/D/,0=O^@"EP1(!M@\A`0#@?\$:6+#@>/'`SW*``"0Y`(*/Z,]P +M@`"`PF!SW*` +M`$`Y)H(C@2"!&6%""J`'2'#1P.!^X'CQP.'%SW"``,2?H(AJ#*`"J7`+Z,]P +M@`"<7`&`[+B\">+]RB!"`TD&3_K@>/'`SW"``)Q<`8#LN``*POW1P.!^\<#/ +M<(``G%P!@,]Q@`#D,AL('@,)@<]R@`!`.2:"(X$@@1EAT@F@!TAPT<#@?N!X +M\<#AQ<]U@`"<7`&%$0@>`W8.K_H,V(#@[`_"^P&%$PA>`V8.K_H-V(#@4`D" +M^]$%3_K@>/'`5@U/^@AVSW6``)Q<`845"-X!/@ZO^@?8@.#L"R+\RB""`P&% +M%P@>`BH.K_H(V(#@H`LB_,H@@@,!A14('@`2#J_Z`-B`X,@,8OS*(((#`847 +M"!X!_@VO^@38@.!`#2+\RB""`P&%%0A>`>8-K_H%V(#@>`CB^\H@@@,6"H`! +M005/^L]QH```,`B!GK@(H>!^X'CQP,]P@`#XSP"`*0@>`B#:SW&!`#`!0!F" +M`"BZ01F"`"BZ0AF"`"BZ(@@@`$,9@@#1P.!^I0:``X'@A]C`>,]Q@`!(PN!_ +M`:'QP`'9SW"``&`L(*#/<(``J,,`@`;HSW"``&0L(*`'\)(+@`,:#^_\"=C1 +MP.!^X'C/$H=(8DPY\!X`2E!/(%A0'@!:4O>2&E)-P# +M!&_ZIL#QP,]P@0#P%E79V@UO^XHB$0`2#^_\%MC1P.!^!0```/'`X<6TP8MU +MJ7#/<8``N-,V#V_Z4-H!P`GH`@L``@?H*@R``:X)H`&I<,$#;_JTP/'`X<7/ +M<(``9`@`B,]U@``,.HP@`H`@E4$I`P,0\B$)WP(S:#5Y`"&"#X``2+HFD@\A +MS`"0><(((`"&L@#8?0-O^@*UX'[@>/'`X<4!V>'!0(`A@,]P@`#$GZ"(A.JB +M#T`""''/<(``E%N$+0$33@A@!#`@0`Z+/'`D@IO +M^A-[2'6*(O\/@.#*(FH`RB,*`%-X,WR`X,D";_H`'4`>X'CQP$H*3_H(=L]U@``8.@&%*'=`)1`4,>C_V0BY!"=` +M$#!PRB""#P``H2&@"Z+ZRB'"`_)_[W_P((,C'O!%>2.E&O`O*,$`3B",!P#9 +M#R$!`S)X!'L`W@/P`>8=#A42SW*``&@ZBF+U#H&00X71#X^31'@#I>?K.0)/ +M^N!X\<`(<\]P@``8.D`@#`0!@!3H\"3`$!4*'@`D>!T)``#/<```I"$'\!$) +M``#/<```H"$F"Z_Z:'+1P.!^X<7//'`;@E/^@QPO0C>!2QPN0B>`\]TJ@``!**$!]A!+0$2 +M+WF)N<]V@`!D"&B.SW*``*0'#KME>3"BSW.``*RMK:,NHR"$0!*/`)3G*Z,8 +M\@;V,0^1$B.Y&/`;#]`=[N<2]$4I_@+GO4$IP7#"(6(`!]@*\$4I_@)!*0%Q +M!O`BN03P`-D(V"ZB080OHTRCY+K*("("X;K*("$"#PJ>`03:0ZY*DX*Z2K,; +M"-$!%0FT`P?8SW*@```05(('"8``"-B'X!@-0@41`4_Z`-G/<*4``!PFH.!^ +M\<`+Z8#@`=G*("$`RB'B`,H@8@`+\(#@RB!A`,HA`0`%\AD(40`#V0#8SW*G +M``!(.Z( +MNQ^\A7MOH@2(SW6D``!``Z7O?X#8SW*D``!#?PZS$X^X0PF1(,]P@`"D6=9X +M]7A@@'*B'(`3H@`G@!^``*!:U'@`B!6BSW"``.17UGCP(,`#%J+/<(``5%C6 +M>/`@P`,4\,]P@`#$6-9X]7A@@'*B'(`3H@`G@!^``(1:U'@`B!6B'-@6HGK8 +M&:(B&-@8HH#8&J(;HG'PNN8N\@[V0B:,&4L,510S)@QS@`"LTD`G`W*4 +M>P![[N8(\A/VON9FW,PF`I,5]"<($2$#V!6B2!J`#P@```!,&H`/"````$;P +MC";"E2ORC";"EC3R`-MUHG*B/5X((`CHAR`!J)+\&*B8Z)F +MHD?PC";"ECKRC"9"EBWRC";"E27R0B:,&6T,518S)@QS@`#`TD`G`'*4>`!X +M(:((&H`/```?\![P(:((&H`/``#?"E'8`Z(0&H`/40````:B'!J`#U$````; +M\&&B"!J`#P``#_`&\&&B"!J`#P``[PI1V`.B!J(-\&&B"!J`#P``SPKX\6*B +M8Z)DHF:B9Z*B"4`"@>`9A<\@(0#0("(`&:7)4"A`>`0>.<(@H,7\`#8#O#T)0,0*=H2NL]Q@0`P&_`A`0!U>B"B`>`0 +M>.<(@H,`V<]P@`!H.R"@Z00/^N!X"+@$((`/````_X4@@0O/<:0``$`)H>!^ +MSW"D``!`,Z#@?N!X$+DE>,]QIP``2`*AX'[@>"T(LP,`W,]SI0``@%.#!"*" +M#___`,!3H\]R@`#,Q15Z]")``#.#)7@3HR'PSW*```3&8FH#\`'DCWP3#!,< +MF60T>2EB\PA!@`+P`-S/.!^X'CQP.'% +M`=V-Z,]PH`"`,`N``=T$((`/`(```(#@P'W^"@`"SW&``)Q<2XD`V8#ES"`B +M@`/R`^HH<`+P`=CM`P_Z\<#AQ0AUSW"A```&%(`$((`/`(#_``"E1@KO^@"- +M`*U2"N_ZJ7`#C88@_0^]`R_Z1[C@>*'!\<`(V\]RH`"`#'"B`!\`0"AP`MG" +M"*__`=K1P.!_H<#@>`?9SW*@```$+Z()\"Z""2!#`"2"8GAY822B^NC@?N!X +M\<#^"@_Z"'8L$@$VSW"``,BK-'@1B!#HR1(!M@&!&0A>`\01``#/<8``R#X5 +M>0"!$.``H:H(P!\F">`#+,C)R0'9H!A``,EP)@R@'RL2`3;)$@*VSW.``$BZ +M$(I`(PT$`[@5>$`C@0,;8P>3+PA2`&&X![-0BA-J%7@088_H`-@/((``<@R@ +M!Q_9R&Y/`X"']$"#_K@>/'`X<7/=8``H#L`A1;HC@IO_`+8 +MSW"!`!`<9@PO^PS9SW"!`(P;6@PO^X39`-D@I<]P@0`<'"B@F0(/^L]PH``` +M(#N`SW"``&BQX'\@H.!X\<`*"@_ZSW:``)@[`(;/=:```"`!X`"F>X7/<8`` +M:+%@H8KJ`]G/<($`$!Q^">_Z(*!;\,]W@`"<.R"'@.',(**`)/3/X6`@@L+!`-[A8)[!_!;A0XD@Q______6V//=($`P"6DA"J[">U&@'IB +M#PV%$$6$"KI982*@`MB"#B_\`=F-`0_ZX'CQP,]Q``"LP<]R```DO\]S```0 +MOP(*;_P"V%#9SW"```@Z(*`$V<]P@`#DJ2"@SW"``(P[(*#1P.!^X'BCP?'` +MX<7/=8``7++/=(``W++/`#JP7P`-@#JP*KE!U` +M$)@=@!`*\`*+`>`"JP*+"0A1`0#8$+0R#H`=$-P/`0_ZX'CQP(X(#_K/=8`` +MW+(/E<]W@`!%>@0E1/HSW"@```@.X``AP)YU@KO^@'8"PB4`-"U!?"C +M'X(3S[7.M;D`#_K@>/'`6@S/^H7@`=C"(`4`T<#@?N!X\``*`[((=H=AIRB'6$Z04F?I,']#W8"+B" +M"6_ZR7+/<8``G#L`&4`$SW&``(@[`!D`!`#9SW"``)0[(*#/<(``F#L@H,EP +MR@NO^JEQSW&``%`T`*'/<8``D#L`&8`$`=C/<8$`'!P`IPBA!8$!X%(+[_H% +MH0+8F@PO_"[9SW&@```@.X$"X2*@`MCF#"_\`=G5!\_Y\`'V``H0'8`*+@?H?HSW&``,0-`($!X`"AX'X`V03P`>$O +M>14)4P'/D"2\0B!@`/P_]G@?RAPX'@`V<]P@``(#N!_(*!"*`(" +M3WG!X83VVN$!V&$]MKA`=G#]@#9A.D`V!+PUW```%I:S""" +MCP``4$%8W,PB`H,#]`'8`O``V/#H`=C@?N!X\<#AQ<]P@`#$#0"`SW,``%I: +M?0@T`0#:2'1H<`OPSW&``,@-E7F@D2&1@.'*($(#`>0+#!41ZPC`@%$(P0`$ +MW$AS!/`!VP'D)0P5%,]Q@`#(#95YH)$AD>T)@(!0<_YF'(H +M=B"(`8@(N0`@1@`O(X@!#@_O_VAP`=T[Z"".`8XG>"*.)W@CCB=X)(XG>"6. +M_]XG>``@A0^``%#]`!6/`#$/@!.N#N__:'`-"',!`-TA",,#!O`9#U(1%0P0 +M`,]P@`#(#?5X(9`!W6&Y(;`1[5X((`!H<``=`@`7"(`#SW&``,@-%7D!D0'@ +M`;$`&80!"07/^>!X\<#AQ0#=SW"``,0-H*#/<(``4/W_V=8.[_I!::EQ"/#/ +M<(``R`TU>*&P`>'U"12$X03/^0AQ`-R)<`?P09*`XLHD`1`!X!<(%03/F"2Z0G!@`7P_]B&Y,H@!@/@?O'`.@S/^<]Q@0#\)""!.0E1`,]R@``P +MQR""+0A```"BSW6``"`YP(4?V1"Y@.#%)D(0Q":!'^#___\\V-(-(`#)<<"E +M803/^?'`SW&``-P^(('/<```VPYB#2_ZYA("ML]P@`!L+`"`$0A1``78%;@L +M&(`/`(#0`-'`X'[/<8``R%!?6YX2#"!V38X'],;."2``J7`,P!;H +M"L``V@[H,B`!!!4)@`,!A35X(X@-"8`#`H7P($(`@.+`>.,@@@#*(0(``0// +M^>!^X'CQP)X*S_FAP0HG`)`H=1IR0"`."":.!O()#4,0`X>-Z`"'0"T"$A"X +M!7K/<```Z0[^"R_Z17G/<($``'0="`0@SW"!``!Z$G#*((T/``#X#MP++?K* +M(0T$0(Z@K@*.0:X<'P`4#N@#C@GH((?OV!"Y!+BE>4.'`"%`=`AB`-T)"``%H8<5 +M?4:'%>I@P0(<0C0$[0&-`_#_V`$<`C`$[0.-`_#_V`,<`C"+<6!ZZ7`DCI)Q +MS"4BD`ST`(<(N1"X!7G/<```Z`X^"R_Z!2%!!"2.08U*(D`@4''"(H$D-0F` +M``6'`-H-Z"E@%PD`!0&'-7@CB`L)``4"A_`@0@"`XLH@0@3C(((`RB$"!/_8 +M!*XCC1,)``4"A_`@0@`J<&!Z"G$W"A`@`8T$K@2'(8T`V@SH*6`5"0`%`8".(#0D`!0*'\"!"`(#BRB!"!.,@@@#*(0($`XX-"!&``A["%&D![_FAP.!X +MX'\FH/'`'@G/^0AU1"T^%\]P@`!D+3`@00X`V,]V@`#(O1*FSW*D``!`F!(` +M!L]W@`!(O1.FSW"E```,!8`9II7I>Q(`!A!Y!""`#___```PN-`?0!#4'P`0 +M%(8UABBX5H8HN1H/[_PHNL]Q@``D""(1@`#/,=P@`!(NBB`HL&$ +M*08$SW&``(1"`"%-#D`E$!8@@$`E$1?IN`D2YP;DR +M($$@B;D$\#QXPK@)9<]P@0!(-=9X`H@.N"5X`*/'`Q@^/^0AV +M*'7/<8``2+H3;15X`6'INO^0"FSW"``+C/X'\`@.!X\$'"A87@RB"&#P```C3("";ZRB*&`X7FS";BD0#8`O09 +MA:$'C_GQP.'%C"`"@)AP!-@;\D`LS0"U?<=U@`!(N@"%AB#WC\PA(H#*(((/ +M``#_``OTA>@(A1$(5`$KV`BX<@@O^HAQ"(5E!X_YX'@=>00A@0]55555(GC/ +M<3,S,S,$($(`(K@$>5EA02D``3A@!""`#P\/#P\$*(`/`0$!`>!_02D`=O'` +ML@Z/^0AVSW"@```@NX`>#^`%*'`")@$0"PE2`#UE`_#">`)]^0:O^:EPSW"` +M`(2LX'\`@.!X`-@"HP'8X'\`H^!XX'[@>.!_`=@%W!6\"*0<'(`?`&H``&J$ +M"*0F>V5Z2:0<'(`?`&D``.!^X'@%V16Y"*$<&8`/`&H```J!X'[@>`7:%;H( +MHBFB'!J`#P!I``#@?N!XX'[@>.!^X'C@?N!X\<`"#H_Y&G`*(8`OH```#`#> +M"/`0$0(@OF&Z8A`9@"`C;F$(1"#/<*``8`R(B&B(2(A`*@T"97W=#!&3@N7, +M)>*3S"4BE\HF0A`<],]W@0#\'8*O1*](B&.O"(A%KP:O$0WR$\)I!V]>"N_Y +M#=D-YA$-$1=`)P`53@KO^0W9#>80$0$@`B"`(QEA$!E`(-4%K_D!V/'`<@V/ +M^8P@!("*`"8`"'6##105SW>!`+P="B"`+X$`/!Y6)T`4#@KO^0+9"!``(6,( +M40!6)X`4^@GO^039Z7"`((("[@GO^0+9"A``(4<("O!5 +M)T`9U7C.">_Y!-EDO0'FSWX*$``AZPX"D%4GP!BV">_Y`MD,$``A#PAS`6*] +M`K@+#040`-@7\`#>"O!5)T`:U7B2">_Y!-EDO0'FSWX,$``AZPX"D,]QH``` +M#`2!N&`$H0'8%06/^>!X\<"@X`AQ`-@)]\]P@0"\'3F@6@GO^6C@`=C1P.!^ +MX'CQP'H,K_D!VHP@!(#"(HT`AN`Z<+0`)0#*(&4@"B.`+Z````QH$X`@SW>! +M`)P>0"=2$6@3@2``KP*/(:\989#A2B``(,H@CB!`)Q01`MYO"%$@`-T/\/8( +M[_D(X`*/`>4!X`*O`H^O?3-H-7DR(D$@/F8ACT<-0Q`#N!5X@G#."._Y`=DB +MCP.Y-7D`(8`/@0#$'KH([_D$V0*/`[@5>$)PJ@CO^0'9`H\#N!5X^&`EB*<) +M!`+P= +M"B"`+X$`/!Y5)T`;V@^O^0+9-!``(6,(40!5)\`;Q@^O^039Z7"`(((-N@^O +M^0+9-A``(4<("O!6)P`6U7B:#Z_Y!-EDO0'FSWXV$``A +MZPX"D%8GP!6"#Z_Y`MDX$``A#PAS`6*]`K@+#040`-@7\`#>"O!6)X`6U7A> +M#Z_Y!-EDO0'FSWXX$``AZPX"D,]QH```#`2!N&`$H0'8X0*/^>!X\46Y-7TBA<2X#R$!`$D"K_DBI?'`X<7R +M#*_],=BT:.H,K_TUV`5]&+V1O<]P@`"`TAX.H`62O2BX10*O^:5X`-D*\$#8 +MG[C/@"B`>$A"14(`-KHR0\B0@!+>`CRZ.[UT-B?N.[Q`-CL +M\>!^X'CQP(X)C_G"#:`!`=V!X,!]/@W@!KM]`-G/""FSW"``"@!$'@4 +MI\]P@``(`Q!X%:!X:B%``4$IP`!2(```P+@3>,&X@"`(""HB``#+__R7$[<`&'2,<@D(;E`H=` +MX88@?P\X8`/@!""2#P``_/_*)H$C"O+/<```!$+F">_YJ7&*)L,OB,!>":_Z +M.G!!A\]VH```!""2&6%"<""R6G`O(P@@+X;/<(``^*VZ<""@KZ92"B``RG`' +MZ/H*(`>IAU+R"',PMP`-E2".__^G%3 +M)L$0`[[5?L=V@`!(NEZ.A"@&!`2ZAB+^`P4B50`@A@`ACG^``'A!"'<5"5X" +M4A8"%L]P``##(=(([_GI/'`'@DO_`+8SW"``+0^8(#/#F_Y"'*HP8;@*';*)2$0"?+/<```!$*^#Z_Y +M2''_W8MQ2@H@`*EP2PA1``;"$+T%PR/`'A0!,:5Y,PI1`,]R@`"T/F"BSW*` +M`+@^`*K/<(``P#X@H,EPSW&!`$`<"@Q@!2C:A@DO_`+8`_!@>\ER609O^:C` +MSW&``#0\X'\(8>!XSW*``#0\"F(1"A`%SW*``##!"F()"D,``-@*\`>X%7@% +MN1EA`"&`#X$`-O +M>_+QT05/^>!X\$@LBT%3_G@>/'`!@M/^H#@`=C`>-'`X'[AQ0#:2',0 +M\)=HE7RU:[QDSW6!`'@4A&4)"0$#`>)/>@'C;WO/=(``,,$,9-T,PY!(<.!_ +MP<7@>/'`;@Q/^;H*;_HH=G4(,P4(=15M"B"`+X$`4`(5$@KWW/,]Q@``T/`EAX'].(0`%X'CQP#(+3_FHP6H.[_\(=8'@@`DA`\H@H0&+<:(. +M[_^I<"T(40#/=J````0/AL]U@`#XK0"E!M@/I@04`3$`P(()K_I"N0"%#Z8! +MV`/P`-A1`V_YJ,#QP-X*3_DZ#<__SW6@```$#X7/=H``^*T`I@;8#Z4R"$_Z +M'@D@`P;8`(8/I1T#3_GQP(;@"'$`V`?RSW````1"%@R/^?_8\@S/_X#@RB"! +M#P``_P`"\@*`T<#@?O'`?@I/^8;@"'<`V`CRSW````1"Y@NO^>EQ_]C/=J`` +M``0OAL]U@`#XK>^FK@SO_R"E((4OIH7H;R!#``+P!("E`D_Y\<#AQ0ARAN`H +M=0#8"/+/<```!$*B"Z_Y2''_V'(-[_^I<9$"3_G@>/'`AN`(<0#8!_+/<``` +M!$)^"X_Y_]C"#L__T<#@?N!X503/_^W)M;C@?^T:&+#@>.W)A[CM&ABP[LF; +MN.X:&+#PR8>X\!H8L/')@+C@?_$:&+#@>.W)E;C@?^T:&+#@>/'`M@E/^0HF +M0)`(=0/R&PT2&,]R@`#$%@@0L(P`!(<`7P`8'["%&``=C@ +M?G$%+_\!V.!XSW*@```<)((`@B1X`-F1N0<(7@0DHN!^SW"@```<`8`L<,]P +MH```'$&``-F=N00A0$!+>`7R[LF]N.X:&+#/<*```!PEH.!^\<#AQ<]UH``` +M'#:%\
(HA!``)"!X"-J4(\`T('@`:"@`%`=@6I2$!3_GQP*8(3_D`W<]T +M@`!HT:EV`O`!Y1D-%13`A,]W@```!KYFP[[T)X\3ZP]?DN%N.PTU%."D`-W/ +M=(``@`76?*"DH:0$N(8@^`.)N,.Y!7D*NR5[SW"````&%"",`V"T(.#5>$"@ +M`O`0WJ4`;_G)<.!XX<4(<0#8"',0\,]R@```!O0BP@!/(4T"AB+P`P\@S`"Q +M$7"14$SW*````&]")"`,FZ[PB!@`+P +M$=G@?RAPSW.``/@_\",#``*X%'@`((P/@`"X/P*$#R#```*D.=@$'(`?``"` +M'`>X%0G>`,]P@`"`'`0<@!^``(`<"0D>`9BX`:0)"1X`@K@!I`/J@;@!I`L) +M'@*6N`&DX'[QP(8/+_D`V0AVSW"``+C4`8"BP4'``=A`P,]W@`"X/R"G1R;- +M%\2]%/`O*$$#3B"$!\]Q@`#X/_`A``'_VA3A%7E`H8MQ9@XO^BAR$"4-$>WM +M2B8```HD@`$K\"\H@0-.((T'SW*``/@_WEG!!$%`/`B0`,B@04F1@$% +M)$0`^V-C@R"'%.)E>2"G%7J@HJ]YA"D&!``A@G^``'A!0"(!!`8.+_H8XA`F +M3A/8[L]RH```*``:F(&S$@&&0"P``88A`PR&(/P#)7BS&AB`!!J`CSH$2G`5 +M!R_YHL#@>,'9SW"@```HSW*@```E(:+/@`B@P^``+@_0H,5?!`B`@!"HT6$$PF!`/_9):2+,]QH```*$,1`H8R$0&&AB'CCP'8!O+KNM$BHH'*("$`X'[@>(0H!@3/<8`` +M@$$P(4,.SW&``/@_\"$"`,]Q@``HY_`AP0`#NEAY`K@4>``@@@^``,0_X'\@ +MHN!X\<#AQ0AUSW&@```D2H$B@0#8(*46ZG<)WP?/<(``I`<]@`K89.'2#2`' +MC+@,!X\<#/<8``3&(>@8?H`=BN"&``'J$#\$()``#1P.!^X'CQ +MP(X,#_D(=L]Q@``\72AW@"<4%!F'`"&0#P``$`@`W8/HJ7`1\(X.@`#]Z&`0 +M`"#YZ!V'B^@?A^L(5($>#2``R7#QZ`'8K00/^200`"$0=C@(00#G\>!XSW*` +M`#Q=0"(!!#`A@0\``#P(`-B/Z8`B%`0V@HOI-X*)Z3B"A^DY@H7I.H*`X3$"(``%VO'`J@LO^0AS2'6:#^__`-K/=H``/%T4Z(#CS"%A@03R2'`2 +M\)8FA!!=%@"6^NB"#P``"H8/#0`0`-@&\)8FA!#Y\0'8T0,/^?'`X<7/=8`` +M3&5$%8`0"PA1`0'8&*7/<(``'$`6#P`&`-A>'1B0L0,O^5T=&)#@>/'`+@LO +M^;APF'&*#B``2';/=8``3%T(=Q,.$1$P)8`?``!8!8#@RB#@?PNB\<`>"@_Y"'4H=UIR:'8* +M(8`O@`!,7;#@S"@_O_^EQ*!$`("L(``1"#R``"G``W1#P+R('!,EP_@WO_TIQ@>#*($$# +M4`_A_\HAP0,!W;H(@`+5`2_YJ7#@>/'`<@D/^0AU*'8*(8`OH```(&P1$B"` +MX@/?RB>"$"(/(`"I<(#@`=C`>"\@`(`*((`O@`!,72OTJ7#)<18.[__I.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@ +M>.!XX'C@>.!XX'C1P.!^X'C/<8``^EQ7(<`)R0?@!"?:SW.``$QE7!,"A@GJ +M3X,3LX#B<`4!`#$%C_W@?O'`>@@/^<]V@`!,7<((```(=8/@RB"&#P``)@G4 +M"6;YRB%&`X0MAAN]`"_Y`"&`<_'`X<5Z#.__"'6`X*EP!?(2"````_!2"``` +MI0`/^>!XC"##CP#9%_*.X.$@Q0?`(&4`EN#`**4`X2#%!\(@)06BX,`HI0#A +M(,4'P"`E`PL(U`DH<.!^`KB"(`("X'^`($(%X'B,(,./`-D1\H[@X2#%!\`@ +M90"JX,`HI0#A(,4'PB`E!8P@0HW#]RAPX'X"N((@`@K@?X`@0@7@>`L)-0,` +MV@"`,?`-"94#`(`BN"WP"0F1`TAP*O`+"54,`(`DN"/PP.$$]P"`)K@?\.#A +M!?<`@"BX&?",(0*$!?<`@"JX$_",(4*(!?<`@"RX#?",(4*)!?<`@"ZX!_"] +M#D3P``"U``"`,+C!N.!^X'C/<8``/%U`(0,$EB&$`%*1#0B!`%\1`88;"5`! +M-".!#P``5`4P,]R@`!,7`L(%`FPX`'8PO<`V.!^X'CQP-(.[_A!VL]U +M@`!,74)X1"B^!D)Y`"%.#HPF"IG*((8/```D"20(9OG*(88#J7"`(!8`SF`R +M)8`?``!M!1!VRB"&#P``)0D`"&;YRB&&`^T&[_C)<.!X\'-HSW(``/W_!">/'P``]?]D>D5_&W@%?SX/[_]J<`KH +M!">/'P``W_^!Y@'8P'@%N`5_4">!$0#8#PZ0$('FT2$A@0+T`=B`X,H@8@`& +MN`5Y+PVT$S!_"!``(`0A@0\``/_Y02C"`,"Z0"J/`L]R``#__41_)7_GN,\G +M81(`&<0C`>5-#=29\07/^/'`I@W/^`AV`-T.\%8-[_^I<`AQ'@WO_\EP"'&2 +M"N`&J7`!Y>D-U)G/<(``7'<8D##H`-TL\/(+(`&I<";HA"T!$\]P@`"96S(@ +M00X`(8!_@`!<6T0I/@<(X#X/X``P($`."'@N@!DHD``!J"._[J7`!Y:]]JPT2D7T%S_CQP!(-S_A(=\]P@``\74`@ +M`00`W0AV@"84%`KK!]@?IAV&@."0"<+_J7`C\.((S_]?AAGH,PK$`QV&!^@+ +M#U41=@G/_Q/P@.#,)V&1#_0?"L0#,"&`#P``/`B`X+P(`0`%\`L*Q0,!V`/P +M_Z8`V`T%S_C@>/'`SW2``$QE6!0#E@/K`=@8\(7BS"(B@1#T0"@"`@0B@@\` +M``#_A$*P0`F'(0?```I*>WQ-@@``.GH`-C1P.!^\<`(<\]R@`!,74X( +M[_\`V0GH,"*`#P``?`40<\H@0@`"]`'8T<#@?LG@1-S,(0&#"_+2X%7!'W,PA`8,#]`'8`O``V.!^X'CQP*X(S_\."```T<#@?N!X\<#AQ<]U +M@`!,95>%SW"``!Q`%+HF@%UZ(X$@@1X((`9980'8303O^%T=&)`R:#1Y`"&` +M#X``6&+@?N!XSW"``)Q<5B"#!4`@`00!V)4A20``H3`C@`\``%@(SW*``#A` +M)H(4N".!(($98=$'X`5(<,]Q@`"L7`#8E2%)`.!_`*'QP,]R@`"<7%@<"+`` +M(H`/``"P"'*00"(!!`0/'`_!P,L`(<0C``V`,<`C"+<`39-@F@!,G:H<#1P.!^SW2``)Q<5B2#%3(C +M@P\``&P%$0O0#X24#0R#'P``__\(+,(>*!_/7@?VAP\<#AQ<]U@`!, +M91*%#>@`V!*E1!6`$(7@3`^!_Q"%%@KO_T05@1`5`\_XX'C/2"PX'[QP.'%SW*``$QE+((*H@'AE@[O +M_RRBH@[O_PAUM@G/_]X+[_^I<*H,[_^I<+T"S_C!X`':A_;:X`7VP>&#]MKA +MPO8`VK#@S"$AC`;R@.#,(2&``_0!VN!_2'#@>,]P``"MWN!^\<`""L_XH\$( +M=0#>`8"9ON.XRB:B&,`N(A;1("*!RB:B&L`N(A:+<$`E`1@0%1(0%!41$!@5 +M$!#GA:H-[_@,VB&%R7!"A0HD@`1CA0HE0`0*)@`$D@P@`/AW:@L@`*EPSW`` +M`%55^0'O^*/`\<">"<_X"'Z!H8L`*'ZAJ8L^D:&+#L&IB_T/X```"' +MB^#*(((C!/0,%Q`0K@\O_P7=%;W+I0"'"0C0`1T('B#/<(``I#,`@(#@+`H! +M`!(,``"N"P``"?#/<*```$<`&(`/`(```$8,(``*<%X)@`#H$@&V@.',("*` +M$?+/<(``J!0?@`SH"Z7LR0'@L[BUN+BX!*7L&ABP`O#+I<]P``!555T!S_C@ +M>/'`(I`('`/3Q2B!`$/+Q@.+*(($O``"MWB+R%!4$$`&%(H5#A0X*(`!DA4!`BAP0=4!#Q#!22,8#/<*```$8EH`#8!_#P(P$``>`$&E``^0B4@`'9 +MSW"``*0S(*#/<```556]!X_XX'@$X,]SH`"(1@#:!_#P(($``>($&U``^0J4 +M@<]P``!55>!^X'CQP"X/K_B*(,\/M,$$'(`_H`````@<@#\?`/__#!R`/Z`` +M#`1$P!0<@#^@```,1L`<'(`_H````$C`)!R`/Z```'"*(-\/2L`L'(`_I``` +M`#`<@#\#`/__-!R`/Z@````X'(`_`P#__SP<@#^@`!``0!R`/Z``$```WE'& +MBB!$`%+`4\"+=?(.[_^I<('`R7'J"._Y(-I*#^__J7#]!J_XM,#@>/'`J@\/ +M_H#@RB!B``JX!."0N-'`X'[@>"9XQ;B?N,]QH```1@:AX'[/<*```$8(&(`/ +M``<``.!^\!^B;0:/^*7!SW2@``!' +M`J0%),(`4*1$'$`1X'^EP*7!0,!!P2#!`12`,`4A@0\````_$+@%>04A@0\` +M/P``SW"@``!&**`#%((P`A2!,`BZ17DAPA"Z17D%%((P&+I%>2F@X'^EP,]Q +MH```2``9@(^``````-B!&1B`@!F8CP"```#@?N!XI<'/!_I\#H$@*VZ1(!MAL* +M0``=>,"X&WA%($$!SW*@``!&`((E>`"BX'XF>,6XSW&@``!&`J'@?N!XX'[@ +M>,]QH`"`'!JAX'[@>/'`]@_/_S()[_@&V-'`X'[QP.'%SW&@`(`]Z`"*!#X``FJG`J<]Q@`!@0``G@A^``(1``!H"!$2! +M`-L/(\,#!.YF>D2A#/",)<.?97I$H0;R#0T!$"8,K_D#@74$C_CQP!(,C_@( +M=28*;_LH=CX,K_D(=\]Q@`!@0$2!96T0(L(`1*$8[L]S@`"$0*MC&PN%`PKE +M#R)"`T2A'0\!$-X+K_D#@0CP8[L-#L40"N40(D(#1*$E!(_XX'[@>,]R@`!@ +M0"2"!>`/(0$`)**M`Z_Y`X+@>,]P@`!@0*$#K_D#@/'`E@N/^/();_L(=@AU +MC"##C\H@@0\``($#RB&!`_@,X?C*(D$#E@\O^ZEPP@N/^8H*0!O/`."!_0%Z1X+K_FI<0/P1@N/^:D#C_C@>,]P@`!@0#4# +MK_D#@/'`X<4(=7X+K_E(<#5H!7D*N"5XG[C/<8``=$"U>8$#K_@`H?'``@N/ +M^`AU,@NO^4AV"'=."Z_YR7`U:`5Y"K@E>)^XSW*``&!`0"(!!8PEPY^U>0"A +M"O(1#<$3)((+>03RS@JO^0.")0./^`#:SW&``'1`%7G@?T"AX'B*(E`(SW.` +M`&!`)(,8>D9Y#R$!`.!_)*/QP)(*C_B$*`8$SW*``(1!,")`#H#A`K@5>``@ +MC0^``.#",7@`WLHF:A#*)PL0Q@Z@!``@C0^!`$P=0"4` +M$A(,K_D0V0#870*O^`&EX'CQP-8)C_@(=AISA"X&%,]P@`"`03`@0PX`(8U_ +M@`!X0AR%M0@0`(3CRB)A`,HA(0#)<&(/[_\*`$ +MR7"X<%,A0"7/``@@P^``&Q)"PI1 +M``"#"/`=A04H?@!`*8!R'V<$@VX-`!D:<`*%LVZT?<=U@0!,'0T($0$`V2"E +M'/#/<(``//``@(WH;@T/^R"%B>B'Z9X.[__)<`'8`*4RV0KP`(6&Z(X.[__) +M<`'8`*6*(0<-`KY#=A<>6!`($``@-'C1`*_XXG@#N,]S@0!,'11X'&-`A!#J +M@H0!V@GP>6`(X?`A@0`!XC!TRB1&$/,*%(&3>>!_*'`)"7,``-HS>L]Q@0!, +M'0.X%'@;88&#.&`(X)5X0*`!;,&XX'\!H^!XX<4#N,]S@0!,'11X`F,.ZAD) +M$P``W0CP?&"U?$*$`>4Z8D*D]0T4D>!_P<7QP.8/;_A*(4`0HL$`W$HF``B) +M`'C;WOSZ`#:&73X=)ATN'0W\#(D +MCC"*)084K'[/<8``>$$`(4`.-!`+`$`A"@P%)\<"SW>``+A"O!``!T`G"QT( +M)`P0K'XG=QR7"PT#`#87!1&L?C0C0!X()`0`K'XP(D`>@.#*(2$0K'XG<5,1 +M``8!X@4@"!`+@4]Z!"8&`)<*PH#/$G/<8``^$A,)@"`!-C*("$`%:%P +M&<`!4!E``E@9``'>&@2#W!I$@6`9``)Q!V_XHL"$*`8$`"&`?X``>$$B@`\) +M4`$1"=`!`-C@?N!_B!```.!_B!```.!XA"@&!``A@'^``'A!(H`3"5`!$PG0 +M`1,)$`)DV.!^X'\=@.!_'8#@?QR`X'CQP.'%"'&$*`8$`"&`?X``>$%"@`#= +M&0H0`1D*$`+/<```%C0.",_XJ7`&\!Z`!/"$$```\09/^`#9A"@&!,]P@`#` +M0C`@0@X4\"\H@0!.((,'$VL5>,=P@`!(NH"`#0S>$0>0"0A2``\AP0`0(L(` +M[>K@?RAPX'CQP#H.3_C/=H``>$'/<0``:`Q*"*_YR7``W13PA"T&%(HA_P^` +MVJEP`"9,'B"D`"&!?X``]$)`J:X((!H`V0'EW0U4D?_9SW"``/A(609O^#F@ +MX'CQP`#8`O`!X!T(50&$*`8$SW&``(!!,"%!#N\)48%B#H_^`_``V-'`X'[@ +M>(0H!@3/<(``P$(P($$.SW"``(P^`(#@?R1XX'@`V@/P`>(?"E4!A"H&!,]S +M@`"`03`C0P[M",&``=A`H0+P`-C@?N!X\)/ +M>ND*$H%=!4_X\<#Z#$_X"'4H=@#?`O`!YRL/%1&$+P84SW"``(!!,"!`#HC@ +MS"`B@?/U)@[O_^EPWPT!D."F`=@"\`#8)05/^/'`X<4(<80H!@0`(8U_@`!X +M00*%A>#,(.*!RB""#P``-304#H+X0"4`%E4E01N>"F`$!MI`)0`4J7&`(8(. +MC@I@!`;:0"4`%E8E`19^"F`$!MKA!$_XX'CQP&8,;_@(#*_^R7'> +M"Z_^&G`>Z%8)+_L*<$X/S_H/?Q2-'0A1`!(/8`#I<#6-,'#*(`($H`CB_LHA +MP@/ZR1$(G@!`%0`1W@P@``IQU*WZ&IBS37"&(/P#C"`#@`GR4``)`(P@`H`L +M\HP@`H@J]*8.@`8HZ,]P@`!@+`"`HN@(W<]Q@0`P`:EP0!D"`"BX01D"`"BX +M0AD"`"BX0QD"`$H((`@!V'X(X`:I<`SPC"`#A.#[[Y'"4`#SW&``/!.6@MO^>ER-PA``S>X"Z:"((2%`MDF`"0`):;] +MX`_V`]DEI@NF#P]1$,]Q@`!X.P"Q!?#/<8``W'T:L7T"3_C@>,]P``#+*(4# +MK_B*(0T*X'CQP/X);_@!V03/'`I@E/^`H+;_D(=0AV)@XO_JEQA>@`'H`?K=[OO@\-41`` +MV:'8$+@IH.D!3_C@>/'`X<7/<(``G%P!@`'=(PA>`,]R@`!L3P:"`X`@@,=Q +M#P!`0HX-8`5(<*EP`O``V+D!3_@!V:'8$+@IH`+9SW"A```&(:!(@,]Q@``4 +M3P:`2J$)H<]PH```(!N`X'\"H?'`J@I/^0#8T<#@?GD"K_@_V.!XSW```*W> +MX'[QP.'%!"*^[P@("`C/<8``I`?/\]RH`"`)'*B`MK/@GO_0#=SW&``%1;(($R""`` +M((%6"<_]!>C"#Z_]`=@+\%H)S_V`X`+8!_3/<*```#P/@*EPF0!/^.!X"ND` +MV,]RH```/!2B02F``&&X%:+@?N!XSW*@_@P!!=P5O$2D`-H,\/`@@P!DI.!X +MX'C@>.!XX'C@>`'B[0I$@.!^X'CQP'X/S__/<@"`$01"V8+@RB&!#P``0@#* +M(H$/"(`1#,\A80,0\H7@RB*!#PB`$0S*(8$/"`!"0`;R@^#*(H$/`(`1%(#@ +M`-@'\L]PH```/":@0*`!V-'`X'[@>`79%;D+@<\:&+``V`NA*0```.!X!=H5 +MN@N"SW&@``!&SQH8L`"!WK@`H0#8"Z+@?P'8X'C@?N!X\<#AQ0#=#/`%V!6X +M$!B`#ZJJN[NR"V_X!M@!Y>T-%)*9!P_X"'$`V`AS"/!2:T-RUQ("A@'C17CU +M"Y2!`-J>NCEZ1'A"(`"`X'_*(&(`X'C/<:```"`0H0'8!QD8@!#8`*'@?@+A +M,'E!:0T*!0`B>!!X`_`"V,]QH```(!"A`=@'&1B`$-@`H>!^X'CQP%#:SW.@ +M```@0:,`VE"C`B!"`%"C`=H'&YB`0-I`HP0@OL\``@`0L`_!_]'`X'X`V/L: +M&+#/<(``)`@0D,]RH```(&*X2"!``!!Y$8(0>`@A`0`P>0+8!QH8@#&BX'X" +MX3!Y06D-"@4`(G@0>`/P`MC/<:```"`1H8H@&`@`H0+8!QD8@.!^\<`R#@_X +M"'4H=DX/K_\H<`JX)^W/=*```"#(%`(0"KW/$$F@`Z0,+D0N"5X_!H8L$$& +M#_C@>.D#X!L!V.!X\<"Z#0_X.G`:<<]V@`"P5[&.`-\"\`'G$(XW#P40$V\5 +M>,]R@`#P3UA@0"`#"`83A0`D:`<3A`!$BP&(98N*#B`<"B9`!&GH`!C`(P+P +M`-W)!2_XJ7#@>/'`SW"!`"P]A@\O^8HA#`@`V<]P@`#@3B"@(:#1P.!^SW"` +M`#"N:0,4#X!L!V.!X\<#AQ<]U@``PKL]P@0`L/4`E`13>"R`$ +MR-K/<8``X$X`@0"E`8&%!2_X`:7QP`GHSW"``&`L`("`X(0(P?W1P.!^X'CQ +MP/(,#_BT:``EC!^!`"P]SW6``.!.$0@5","%#R8.$,"E"/#!A4(@``@/)@X0 +MP:62">`;B7`I!0_XX'CQP*X,+_B*(A```-_/=J```!SJI@H@@"^``*0_`!`` +M(,]QH```(,]U@`#$5^"E"NC<&8`/`P!`#0+80J$`I03P0Z'I<,]Q@`"H/R"! +M$>G/<`$`]O9DN!*FSW"``$0`SW&``&P%"@C/_0"%12```X4@1P0`I7'8!K@2 +M#F_^_-G/<($`_"0B@,]P@``L/`3IX*``V0CP`]D2N0`8@`\,````SW```$P< +MY@UO_I^Y`(47VL]QH```#4&AA2`("`"E`!``(!3HSW>``'`L`(>,Z,]Q@0`` +M=`#8#]K&"R_Z`]L!V`"G!/"N"P_Z`(4*IB4$#_CAQ/P'" +MX%;XL%A(0 +M+!Z`'P"`0`#/=Z```!P+ARJ'"B.`+Z```"`D>,]U@`#(5P"ESW```$0<\@QO +M_@0=@!`A`> +M@!<3AQ2'SW&``(`[`($$I@&!!*8L'H`4!]@*N,#9&+DF#&_^`-K/<(``+#PB +MA0"`*W@!V,HF(A,Z]`"%(0B1`$P@`*#`?@3TI@X/_@AV@.;*)B$=*_(!V"KP +M%P@>``H,;_X@V`8,;_Z*(`@`9MX=\(P@"(`8\I#@$O(']AT($`$I"!$"/-X1 +M\,#@"O*,(`2`#/14W@OPAMX)\$;>!_!,W@7P9=X#\(3>`-B!X-`)`1GB"0`9 +M0A0`ILEP0(4`V78+;_@J<]'`P<1K),`0P<1K)(`0P<2?=`04%30$%!0T!!03 +M-`04$C0$%!$T!!00-,''P<;!Q004"S0$%`HT!!0)-`04"#0$%``NJX&-C*("$(`_`DV(7ARB"- +M#P$`B0W5($X`X'^AP.!^X'BAV1"Y`8&@N`&AX'[QP/8(+_@!V0#>SW6@```@ +M&X6AV!"X(:"J"2`&BB`$"]=V``"X"P'F"??/<*$```@3@.D(7H``V`+P(-@[ +MA24!#_C@>,]PH```,!.`!""`#P```"#@?N!X\<#AQ<]Q@`#`T`"!&N@`W9H/ +M[_^@H<]PH0``"$2`)8#.#\__`^BI<`;P@.+,(2&`^_,!V,]Q@`#(T&8/[_\` +MH<]P@`#(T,T`+_@`@/'`X<7/=:<`@$D7"%$`>@P``!"%1B#``44@P``$\!"% +M1B#``1"EH0`/^.!XCN#*("P`R_;`X,H@;`#']HP@`H("V,H@Z0#@?P"IX'CQ +MP.(/S_<(=?0<2+!!PL]Q@`"D!R"1`-B&(?P`C"$"@$H@0"`"W@OT`<'/^D*)0`D2B(`(`HF@"^@```,"B2` +M)&@6`"$('`0P(L=?#1`@`=B%Y\PGXI+,)^*<`_0`V`HB`*`)%((P(?(!P(0H +M`0P`(8%_@`!L+FR)`"&`?X``#"X#NP`OS!!H@&=\B*!LB0'CP;MLJ0.[>'IH +M@&=Z2*`,B0'@P;@,J1`6%R`)%),P8KUY#>040"14(`(ES131=$"`!HA' +M#P$0(>IJ<&!Z`,$*(`"@,_(7#U$1SW"``#PP"H`%Z)(+;_H!P)3H`"/`)1`> +M`"`A#A&0(?!*(0`@C"=#E\HA82`9\,]P```Q$1T`3_@!P(0H`0P`(8!_@``, +M+B>`**`!P`'91"@^!P`A@'^``&0M(*`AH,]QH/[0`@7:%;I,(0"@S"`BH`#8 +M!?0H<`2B$]@XX22B$+T%)0T5I**!!N_WH\!Q`2_Y`]C@>(/@\!X +MH<%`P`(4@3`!%(`P#>D#%((P4"*!``*Y`N'BNL(@0@#`($$`#WC@?Z'`X'CQ +MP!D(,P$(<80I`0//<(``F%LR($`.B.CK*6@O>D6ZSW6``(P^57U"A<2Y +M#R9.$$M^!_)^"\`;`H7&>`*EO07/]^!X\<"AP0]X(@WO_XMQ`@KO^B#`H<#1 +MP.!^\<">#T`%,F@V>0`A@`^``#!^T<#@?N!XSW"``'@[X'\`F.!XSW&``-Q] +M"PA1`!F9`O`8F>!^X'CQP/H,S_?/<(``Q)^@B&H+(`"I/'`X<5V#N__"'6$+0$3 +M`"&`?X``7%L]$($`"N!$*3X'M03O]S(@0`[QP.'%3@[O_PAUA"T!$\]P@`"; +M6YD$[___`(T!A0'>*H@*(H`O +MH```(('AP'[;?B(.+_\'V#X:F*,.#^__2B$`(,]WI```0,]V@0`()0HC@"^@ +M`(`P)PA1`/H-+_\'V!F'@+@9IP&.+@FO^@"N*!,`((2X*!L`(!'PV@TO_P78 +M&8>@N!FG`HX2":_Z`*XH$P`@1"`!!"@;0"#:#<_X3!J8KP``554!V$L:&*!^ +M#.__`(U!A80H`2//<8``E%LP(4`.Q@^@`22"`84&@/^XM`A!_BO9$KD`&4`$ +M!!E`!`/8`J%U`L_WX'CQP(H*````V0OPA"D!`P#:`>$`(8!_@`!\6URH7:CO +M"12!T<#@?N!X!0```/'`E@@@&>'%'@R``7X+(``'V%X-[_D(=;8,C_U*"(_] +M`=FAVA"Z**($V\]PH0``!F:@'!B`#ST```DHH`#8"*+/<*```!TBH`(-+_^I +M<"4"S_?@>/'`>@DO^@/8`-D7"-``SW"``/0I`(B`X,H@00`"\@'8T<#@?AD( +M,P$`V80H`0//<(``F%LR($`."0A0`"AP`_`!V.!^SW&``,2?((F,(<./`-@, +M\H0I`0//<8``F%LR(4$.@>'*(&$`X'[@>/'`X<4(<0(.H`$`V&8-S_^!X`'8 +MPB`!`*H*H`']$@&V:@WO_PAUM@RO_26-A0'/]_'`X<4(<=(-H`$!V#8-S_^! +MX`'8PB`!`'H*H`']$@&V(@WO_PAU$0A1`#(-S_\EC6>Y!O`F#<__)8UCN6X, +MK_TO>4$!S_?@>/'`SW&``"P5`($'Z`#8F@SO^`"A&O#/0SH&0D$`'H+S__VX,H@B@\``,\H\`$*^&8+S__/HL]P@`#",_W8@O/_P#8SW6@```H!J4$ +MV<]PH`"`'#N@P@SO]P;8SW"@```P`X!7")\&#@]``2?HSW"``(BM`H@!WH+@ +M`=C`>`>X@[@0N(4@D@`!I8X,[_?)<,&E!!V`'S,`QP`$'8`?``#"<@0=@!\` +M`,*=!!V`'P``@FT$'8`?```"H__9*]@2N""@(:"2"0`!.0#/]\]P@`#$GP#9 +M(Z#/<(``?%P@J".H`8A$*#X'`"&`?X``0%S)`>_X'-G_V,]Q@`#$GP"I`-C@ +M?P&A\<`%Z&X+S_@&\`'9SW"``"P5(*#1P.!^\<"Z"@__]@OO]P;8T<#@?O'` +M%@G/_U(,P`*B#4_^T<#@?N!X\<"$*`$#`"&#?X``?%L]BP`A@'^``%Q;1"D^ +M!PC@)@GO_S`@0`X?J]'`X'[QP!H/C_>$*`$#+W4`)8X?@`!\6UR."B&`+X`` +M7%L(=PD*40`1#Q(1SW````0)?@@O^.EQSW"``,2?/8X:<%Z.X*@".__Z7!=C@`A0",$*KX$ +M)W#]!J_W!!@`(/'`R@Y@'03@S@T``='`X'[QP.'%`@KO_PAUA"T!$X'@`"&! +M?X``G%L*V,H@(@3Q!J_W`;'QP.'%SW&@`(`/'` +MX<76#N__"'6F#N__J7!:#^__J7#F#B`!J7`:"N__`=V!X$(*[__")4$3"'$2 +M#V`!J7#]&ABP`-G/<*```!`IH&H/S_\Q!H_WX'CQP+8-C_<(=DAUSW"``'Q< +M(Z@`VL]PH```$$F@M@Y@`0'8`=@"V=X)H`').!^X'C@?N!XX'[@>/'`9@V/]\]U@`!4J0Z%`>`.I>H/+_H,V`#> +M#?`O*D$`3B*`!P]X$"$!`$H)[_@KI05^*X7TZ8#FH`QB&,H@8@"1!8_WSW&` +M`%2I,)$`V`T)7P/@NU&+\(L3"-X!P6HR$8P`XJW#K665"/`Q$8P`P6^8$P,!PJU#K62U`-LW +M#*438Z7/<8``R+\5"-X!$($,'8`?00"#``'@$*$)\!&!#!V`'R$`@@`!X!&A +MK@[```.%"O!.#N`;!&T`V)VX#!V`'P`@``#A!(_WA^C/<8``X%H"@0'@`J'@ +M?HCHSW*``.!:-7H#@@'@`Z+@?N!X\(MQ$/`"$0(%3WLHN@B[ +M97I>9@T.WA?0>C"^7F9BN!!XY0B3@`T(4@``B0/PT'X>9D$N`)3\]=)X$'@E +M!*_WL<#QP+(+C_<(=0"(*':&(/P#X.``V0KT`I77<````!C,((*/````(`3R +M*'`G\`:-'PB1#A".C"##CPOR0"4`%D`F`12:#:_X$-H#Z`#8%?`@A@#8BNDA +MAHCI(H:&Z2.&@.'*(&$`B.A`)0`2R7%N#:_X$-KMZ`'8J0./]^!X\<`R"X_W +M"';/<(``6%L@@`J!XY$?9P"7C"`$@*W!,/0!EUT($0($CU4(D0$%CU$($0$# +MEXP@!(`B],]Q@0!4(P&!#^A`)X,3@)-"D0#8$0R!$&&30Y%0<\H@80`0Z$`G +M`Q:`DT21`-@/#($009,ED3!RRB!A`('@`=@#\@#8?P@0`$`G@!//=8``C"E` +M)0$8L@B@`P3:0"<`$D`E@1:F"*`#!MK/<(``I``!H<]P@``4T""`SW"``+!!A"D&!#`@3`Z+"B2`+X$`5"-`)`\F`_`!YA3G +M%!0`(#<.!1!`)0`>Z7'B"Z_X$-KUZ``5`"`5"%``&!*`(-L(48`9$H`@TPA1 +M@"2'`!M`(`'8`O``V`SH&,`#N!5X`"".#X$`7"0J<,X-[__)<=$($``YE2]X +M*+D(N`4A#P`2#>__J7"]#P$00"4`%$"``-F*ZD&`B.I"@(;J0X"`XLHA80#/ +M=X``H$^%Z6#9+:<&\"#8#:?/<(``J--`)P$8,@]@`Q#:..6I<$`G`10F#V`# +M$-JI<$`G`1X:#V`#$-I`)@`85"=!&0H/8`,&VJ8,[__I<`]Y*+@(N0]X)7@9 +MM\]P@``4T""`SW"``+!!A"D&!#`@3`Z+YP.!X\<#/<(``X%JN +M"J_X'-D^"T__!@P`&[X+P`71P.!^X'@%*(`/#P!`0L]P@`!\T@T`(```&$`. +MX'CQP%X(C_?/=8``?-)`A<]V_W\`_\]P@`!/'`8@]O]YAPSW&``"08%5^(*8! +MXOL*-($`V=$)%8(`C3IXP+@3>CAG0*A!C3IZP+I3>DBH`>'R\64'3_?@>,]P +M@0#,1"V0SW*``*"K`(+/D(1@``0N`5Z0Q&``!BX!7J,(A"`%/(% +M]HPB"(`-\@GP(PJ`#P````@A"H`/````$`#8#/"*(`@`"O"*(!``!O``V(NX +M!/``V(RXSW&``*"K(('/,]P@`#0T2T& +M``#@>`#9SW"``.S0(*C/<(``M-$5!@``\<#/<(``)-(*#@``SW&``*"K`($! +MX`"ASW&``(BK`($!X`"ASW"!``Q&(8#/<(``C*L@H-'`X'X$V'T`(`$`V0?8 +M=0`@`0#9\``%A;`(ED`SEL'T+#544`-A`\(DE`A!`*@`A%G@`()4/ +M@0#<04`EDR``V"(*(`>:<$`E`2APO=%URB9%$]!^BG($\`'B`>$!X$<*A0.2 +MXL`@`00%\J;BP"!!!$$JPP`R(\P@4R*#`'I\VPP>D("(8(D'(SZ#Y_,@AT`A +M``-"<``8`@4B$8``8;@B&0(`P?$!V/D$3_?QP+H,3_<:<,]V@`!86P#=(?#/ +M00@@`_P____`Z+/<($`K!T6"2`'>6$@AD`A +M`@@DX;EA`*D$Z`>*`>`'J@'EPPW4D`"&)Q"``*\($```WU8)(`?I<`"(SW6` +M`)2KP[@"N'2X`*4^"2`'"=@`B"\(D0$`A<]Q@`"DJT`@`@5`H28)(`<@X`"( +MSW&``*BKAB#\`T2X`KATN`"A`=]?#U$0((8#D0+@`[$%D6*X!;$`WP/P`>NA`A>]YSW.``*BK<-A>#N__8(-PZ,]P@`!T+`"`#0A1``8/ +M@`8+Z``8P",@A@.18K@#L061`N`%L14$3_?@>/'`L@M/]\]U@`#LT,]V@0", +M0R"-!8XQ"0(`BB((`,]Q@0`P`4`9@@`HND$9@@`HND(9@@`HND,9@@`%V%H. +MX```V37PSW"``(RK`("A%@$6SW*!``Q&(G@EDC$(1`"*(A``SW&!`#`!0!F" +M`"BZ01F"`"BZ0AF"`"BZ0QF"`$(.X``!V`C8W/%.#^```=@`C0'@`*T'C@0H +M@`\/`$!"SW"``+31[@H@`"]Q=0-/]^!X\<`""T_WSW:``.W0SW6!`(Q#((X$ +MC3$)`@"*(@@`SW&!`#`!0!F"`"BZ01F"`"BZ0AF"`"BZ0QF"``+8J@W@``#9 +M$_#B#N```-@`C@'@`*X&C00H@`\/`$!"SW"``"32@@H@`"]Q"0-/]^!X`=AY +M!>```-GQP,]P@`!`TL8*```!V<]P@`"3)Y0"D"!CN` +M+WD0N7N`66%O>@BZ*+ME>E)Z3WH(NEEA6X!/>`BX*+I%>`]X&6'/<(``H*L@ +MH`#8&@W@``AQT<#@?N!X\<`F"F_W!-JBP0AU*'8(X"8(8`.+<0#!SW?_`/\` +M!"'``RBY"+CD>25X0R@`!$#`!&V!P0((8`,$V@'!!"'``RBY"+CD>25X0R@" +M!$'"UPX0$('F@/*"YI[TSW&``(BK`!$$`)!RH/3/=8``H*L`PT"%%0N``,]P +M@0#,1`V06&`0`,H0KN'PY0$!\.D!!PV`4"K_>-N`/8<@O@``#9Z0!O]Z+`!MCY\0G8]_'@ +M>.'%`-H"\`'B20K5`!1J%GC'<($`W$$T:L=Q@0"L00#")`(P"')$#0`3AQ>'&SW&``%A;8($`W$.3)9-`(PX(66$">8.N!).)=07P06U/?4.N +M`>!":1\*!`!*@PIBC"+#C_7S#0V3$8.N`-WT\02S`=@#\`2S`-B`X`'8!_3/ +M<(``="R`H`#8P<;@?\'%'PD1`<]Q@`!4V@AA0"@"`@5Z0"@!!$5Y&+@E>`WP +MSW*``%36\"(```3P0R@``DAQ26E/>OOIX'[/"BY"+@E +M>&1H;WM6)`0SSW"!`&@"BY"+@O>>"5!2$1`!#G[W]`)L`2G,$. +M#"`#$-I6)`$TSW"!`(@<_@L@`T"5C,`:<)S"*G&F"2`&Z7//$<2@0`TWQBY)7@!X$0:`@`HN$4:`@`H +MN$8:`@`HN$<:`@`;CB"-6G``(),/@0#(.18C0"!$B,]V@`!\L>QZ((8!V"=Q +M`+$@C18C0"`$B.QX((8*<`?A)W%R"R`#*G)`C0"&%PE1(Q8C@2`DB>QY="!! +M#HRY(+`@C18C0"!$B.QZ`(9T($(.0"H!(D5Y(+`@C18C0"`DB.QY`(9T($$. +M@[D@L`'8704O]X`D`CCQP`(-+_>X<#IQ&G(^#R``*'#/=H``&-!`C@`ADB^! +M`,@Y%B*`(`2(SW>``'RQ((0SAH@H@`P;:`>6O?>L-$I35!`_WX'CQP&X,#_>BP0AW.G$:0SAX@D@`P;:`>?O?^T/$I0@C0'"%B-`("2(S'D`$@`@ +M`N`G<$"H((W/=X$`^"(6(T`@!(@`V`@0AOH\````C@<,F],#:1'A$>04@?H`@\CX3@``]$X$`"+@%>3\3@``0 +MN`5Y0!.``!BX!7F2Z4(3@`!!$X$`"+@%>4,3@``0N`5Y1!.``!BX!7D!V`/I +M`-@?Z(HB!`#/<8$`,`%`&8(`*+I!&8(`*+I"&8(`*+I#&8(`5@B@!4#8"_#/ +M<(``:"P`@`7H$0\1(`T-GA''`R```-B*(`(PY[W1)2*2T25BDO?S"0\0(.<- +M'I->%X`071>!$`BX!7DO>"BY"+@O>04A%@`*CTF/"+@%>@N/4R6$$!"X!7H, +MC\]Q_P#_`!BX!7H$(D``*+H(N"1Z17AFCT6/"+ME>F>/$+ME>FB/&+ME>@0B +M0P`HND1Y"+ME>4,I`@3/`(D$C3"1`@`HE@"^!`&@<5B0.-,#T2G!5)L$4A@_@`A#:2G`` +MV;H++_@0V@(1`2$JZIP$-F:">`%0"8$'P#8#/`99DP1 +M@@`99CP1@0`P`/>.T($H0`$`(@`-AJ<2X.H`9%DD`G0!M5)L$6)@_@ +M`A#:SW"!`(@<52;!%Q8/X`(0V@H@`">`(,$H:0\0(%4FP!8@V8HB!``*<^X+ +MX`4*)(`%5B0-.`IP0"4!$^8.X`+*<@R-C"!#AS'U#8UFN"\F""`.C8#@*?4/ +MC8_@)_40C8P@`HLC]1&-@>`?]1*-0"8!%U,@4`!`)0`5I@[@`LIR%O!5)L`6 +M(-F*(@0`"G.*"^`%"B2`!0IP0"8!%X8.X`+*4<0@@`8ND5Y`>%$&$(`*+E%&$(`*+E&&$(`*+E'&$(` +M0"8`%PIQZ7(-#A$HJ@O/_P3P$@O/_X()(`!J<*IP$-DJA:`$(#@&_5[%H`0C^`7]7P6@!",(`*+$_5]%H`0@>`/ +M]7X6C1!6)``X0"8!%U(-X`+*0'A1!A"`"BY11A"`"BY1AA" +M`"BY1QA"`$`F`!>I<>ER"PX1*&8*S_\#\-()S_]"""``:G"J/'`X<4(=0:-)8T(N`5Y+W@HN0BXQKFLN"5X#WDHN`BY)7@%K2BX!JT`V2AP +M81T"$"BX8AT"$"AP!ZTHN`BM0"5`%*H(+_@@VD`E0!P`V9X(+_@0VJEP0>`` +MV9((+_@(VJEP4>``V88(+_@0VL]Q@`"P/V&!SW#_`/\`!","`"B["+H$>V5Z +M0RH#!&FM*+MJK2B[:ZTHNT"!;*T$(@$`*+H(N41X!7E#*0$$+:THN2ZM*+DO +MK2BY`AV$'P```%]5!N_V,*T(

_VF'#/<8`` +M&-``B<]R@0#(.0`DC0"3:!9]!(W_VR<(P0``V`/P`>`/>!L($P1$*#X-SW:` +M`'RQP(8T)DX>]>X$K0#8%_`K"``!76#$;8YF'P[`$$0N/AW/=(``?+&`A`#? +M)W3@M,")UGV3;F2M`>`/>-<($H&U!<_VX'C/`"R"?`3")X&&)0`LAJ4`;(;E`*R`-@`H\]R +M@`!86R""&.G/<(``I`<.D%,@_H`+]$UP(((=")X"SW"``*0'#X`1"-X&`-I" +ML078%;A%H.!^X'CQP.'%HL&+<&X)8`6!P8C@"'78#T$`UW4``(B.'`V!!0#` +MAN@!P(#@<`@!^ZX/S_H5!>_VHL#@>.'%X<;/=(``J`J`A&=Z%21,$<"$1'E# +M+@T2!"6-'P#_`/]#+@X6!":.'_\`_P#%?:"D9WFY8<=Q@EJ9>4,HP`8X8,'& +MX'_!Q?'`3@SO]F=Z0"5-`\]V@`"H"L"&P[WP)D\30"4-`L.]\"9-$U,ES`#G +M?4`ECP##O_`FSQ-$>95^@(;G?:=\0RS,%X"F9WF98<=Q@EJ9>4,HP`9E!._V +M.&#QP/8+[_9'>4`E30//=H``J`K`AL.]\"9-$T`E#P+#O_`FSQ-3)`IIEAQW'9;J'K0RC`!@T$[_8X8.!X +M\<">"^_V0RC`!D`E30//=H``J`K`AL.]\"9-$T`E#P+#O_`FSQ-3)65YF6$"(8$/Y'`D0ZT# +M[_8X8.!X\<`^"^_V1WE`)4T#SW:``*@*P(;#O?`F31-`)0\"P[_P)L\34R7, +M`.=]0"6/`,._\";/$V=YE7Z`AN=]AWU#+53)7Z0PZ"@L"CT@8"B +M@,=\@:!#+,X3QWVBH+QD@:`$)(X?`/\`_RB^!"2/'_\`_P`(O^5^QWVBH+QD +M@:!#+$X7QWVBH+QD@:!#+(X0QWVBH+QD@:``W(.@`>-P>Y,+@H#1`L_V\"&@0J``V2"PX'\CH!/I88"% +M@(?K0X"%ZH"@(:`+\$"`>F(-#($0>6$AH`7P0X`Z8D.@`-DEH.!_)J#@>$"` +M(8`$@%EAX'\B>$*`(X``@%EAX'\B>$&``-F#Z@.``^@H<`+P`=C@?N!X08`7 +M"80`(H`@H".`(:``V2.@(J`&\")Z0:!`@%EA(*#@?N!X\<#AQ0AU`X`H%6&`4\(8/S_\@A1,(1`!Q +MZ'!PRB,%`&:E087P\0#8!ND-"<0`!:4'A6:EL0'/]O'`D@BO_.'%SW"@```= +M&!B`#P\`__\!V<]PH```"#F@SW```)@>BB&_"`#=J@HO_:ERH=@0N*V@=0'/ +M]N!^X'BU`0``X'[@>.!^X'CQP,]Q8PC0>P4H?@`*(,`.8;A/(,('SW&@```P +M4J'1P.!^X'C/<($`_"0!@(#@`-C/(*(#RB"!#P````0M!\_W\<#AQ:+!SW"@ +M```PM(!P@,]R```D](MQ@<`%*[X``!C`#@`90`X`P0'`*[D5N"5X'67/<(`` +MQ,,@@`(E0!`P=/'`6@C/]@AV&G'"""``!1(--H+@`-_* +M(<$#$O*N"```9MD="-``SW"A`(`!$X`0>`4H@`\```D]02E!_W"G"`X`38P'A5`,_VX'C/ +M<*```#`<&(`/`((!`.!^SW&@```P'!F`#P`"```(@9FX"*'@?N!X\<#*#Z_V +M`-G/<*```##$@,]U@0#\)*EP_@GO]PS:`=@)#AX4`:4#\`"E#0#/]N!XSW&A +M`(`!$8$FN,&X#PB1`#>!AB'_C,H@X@#@?O'`?@^/]A((K_X(=2H(K_X(=HHA +M$`#/<*```#`AH`#8S@SO]XNX)@C@!%4E0!9^"@``N0>O]LEP`-G/<*```#`R +MH(`8@`\R````^03/]^!X\<`N#X_VSW6@```P!X7(A01^SW"``)`_`(@?"%$` +M'!V`'X#7`0#/<*```!P4&(`/`"@``!#P_+[$#4(``-B>N`<.GA<'I<]PH``` +M'!08@`\`"```10>/]L]PH```,`.`P+B!X`'8X'_`>.!X\<#N#^__`-D&Z,]P +M@`"PJ0"`A.@H<`/P`=C1P.!^X'CQP,]P@0#\)`&`H>C/<```"!Q2"`_]-PC> +M!PQP+PA>!`/:SW&@```0,!F8CP"@"```'X!/`(````'8`AD8@`<9F(#/<*`` +M@!U&H-'`X'[@>,]QH```,`.!M+@#H>!^X'CQP((/S_\-Z,]PH`"`'!J`<@DO +M_D8@P`':#\__!/!F"2_^!-C/<*``@#``&(`/,@```-'`X'[@>/'`O@O/]X8* +M[_8&V'X*[_8&V'H*[_8&V-'`X'[@?N!X60/O]XH@"`#QP,]PH```,`>`.PA? +M!D(,S_>>#J`$"M@=R,]Q@`#(PP'@'1H8,`#8#1H8,,]PH```(!N`(($B>,]Q +M@`#$PP"A!?`,R`'@#!H8,-'`X'[@>,]Q@`!4WPEASW*@```P'8(0N00@@`_@ +M____)7@=HN!^@.`!V,!X'+B9N)ZXSW&@```P":'@?N!X\_V!M@%AL"X)X:Q<-$A(8?G]<]PH```'!08@`\`"```906/]N!X\<#/@```P!(=PW@;P.@GO]@;8`>4$A\1X)+B,)8*5S""E@+7W!06/]N!X +M:0`@`#_8X'CQP(X,C_8H=EH-[_P`V0AW`O"F?B3N+RF!`TXA@`<`W0\E#1!R +M#.`!J7``V07PIGM@H@'A+WG?"5.!1"\^&P`A@G^```!.-GI)B@MZSW*``.`H +M-7I@@NWSI7OL\9D$C_;QP#(,C_8(=A/P*@D@`*EP#_`O*($#3B"-!Z]]2@T@ +M!*EP"B$`@!`F3A//?N_U\^YM!(_V`-H$\`'B3WH;"E,!1"D^"P`A@W^```!. +M5GMIB^D+#H`"\/_:X'](<`#9`-H/(@(``O`!X1<)50'/<(``X"CP($``2WCW +M\R]X`O#_V.!^X'@(<0#8#_`O*T$`3B."!T]Z$"&!`,]S@`#@*/`C@@`O>45X +M\^G@?N!X\<`Y"E``50J0`!<*T`#/<```!2OJ#._V2''1P.!^1"@^"\]P@`#D +MXP`A@7^```!.8@F@`BS:\_&`X!X\<#R"H_V"'8*)4"0RB"!#P```2MD#.'VRB&!`R\H00-.((\'$"7-$Z]] +MR7#:#N__Z7$:<(P@PX_*(($/```"*S@,X?;*(8$#+-@,?UIP"B&`+X```$Y` +M(0`A)W`6(``$"B"`+X``J,@*<=9YH@B@`@C:*?!#L"?P+RA!`TX@CP?)<(8. +M[__I<4IQ+'\`(4%T%GD6((`C8I%`D!`ES1,+"N,`KWU@L&.109`)"L,`8;!H +MB42(!PK#`&2H19$CD+D*0H#<[8D"C_8#V-4'H`(`V?'`(@J/]F(.K_Y*($`@ +M@>`J#>__PB`!)`#8R@FO_CIP7@Z/_G(.K_X(=@AU3@U@``IP"G`:"V``J7%N +M#6``R7`*<,EQ.@Y@`/T2`K;HY5IP&_(/]K;E'?(&]HWES"4BFA/R&?`C#1`> +M)PV0'A/P5R7!'B,)504S)D%P@`!LTT`G@'(T>`!X`M\)\`/?!_`%WP7P@.8! +MW\HG(A$Z#H_^R7&X<,]P@`"<7`H0A`#I<*ERJ'-N#R_X"B6`!,EP$@UO_`42 +M@2`.#H_^SW&F```(`[C%>`"A4B``H,]RI@"```;RBB$*`"2B!O`0&H`/```` +M/,]QIP``2(#@`]C*($$$$*%]`8_V\<`N":_V%]D/?H0N!A0`(8U_@`!X00"E +MZ@P@!$`E`!(BA0D)E0*'Z<]P```&-'H*S_95)4`6S@P@!`S9?@LO_LEP`=A5 +M`:_V`:7@>,X:F+\````@,0;/]^!^X'CQP.'%`-WAQ8MQ+@LO_@C8$^C>"@_^ +M`,&`X,H@0@!,#V+WRB%"`\]P@`"$/Z"@`,!V""```=D1`:_VH<#QP.'%H<&^ +M"*`$*'4(<<]P@`"L7/0@0`"`Y0`/'`#@B/]J/!&G`"#R_]*'>`X(;RZ@TO^0IP+R4'((0H!B3/<8`` +M@$$R(50.T@RO_JIP"'7F":_^`H`JC=IP"163$`'=`-@/($``+R('((MP.G#^ +M":_W"-DJ<,IQ*@UO^$IR`-Y"QJ,,$"%##%`AH0P1(AKO@L$>"B_^!=@&Z`IP +M1@YO]\EQ@^C)=<]P@`"$/P"`@.#,)2&0-/)!WX#E$-[I=3;R[@H/^#+P@L'F +M"2_^"-@NZ`+`$@YO]\EQ*.@%[](*#_@;\)8/8`1J<,]V@`#PX`AF'P@0`H(/ +M8`1J<`AF$PC0`78/8`1J<`AFA."`"@+XSW"``(0_H*!!W0#>"/`)W1#>!/"` +MY\HEXA`J<$IQJ7+)'%&(+K_[I<`AU=@BO_@*`RHTZ<`#8#R"``R\@!R"+ +M=:EPD@BO]PC9J7`J<;X+;_@*ER`-M2#&_X"B2`!$$&;_:BP/'` +M#WA6#>__`-F&(/\-T<#@?N!X\<`/>$(-[_\`V<"XT<#@?@_P`A`#!6]\*+L( +MO(5[>F(+"MX'4'LPNGIB8KDP>><)DX`1"5(``(@(N`/P4'H:8D$J`(3\]5)X +MX'\0>,]Q@`#PT)4#8`(&VAIB,GDP>5EA02D`!#A@X'\0>.!X\<#/<($`%"7L +M'`BPSW"``-3[0<#/<(``^-!"P,]P@`#\T$/``-M$PP?8!-D+V@HD@`^``,P) +M"B6`#X``K*M*)H`'L@FO_$HG0`"EP-'`X'XH<@]YSW"!`!0E80*/_.!XSW"` +M`)RKX'\`@.!XSW"``+S0X'\`@.!XSW&``+S0X'\`H>!X\<#B#$_VSW"``)RK +M`(#_W@#=^!R(L^$($``2""__BW``P=4)@`,+Z2<)4``W"9``<-@R#J_VC;@> +M\,]Q@`#@6@B!SW6!`.A#`>`(H13PSW&``.!:"X'/=8$`/$0!X`NA"O#/<8`` +MX%H-@<]U@0!X10'@#:$*((`O@`"DJV()(`8`$``@@<$(=D`@#P3I<&H*8`(" +MVNEP`-F>#F_W`MK@E3X)(`8#V""0\G\O>"BY"+@E>``0`2`B>"&5+R`((!3A +M,'GP?P\)``3I<*(.[_\*<@AWR7`*<4X.[__I<@04`C%/>0BY*+I%>0T(00#) +M<-8)+_\`P5$$;_:BP.!XSW"``$#2SW&8`("6P0,/__'`Q@M/]@HF`)"")`(V +M`-T-\D$.4!!?#I`0<-B-N#H-K_;)<7IUFG4N\,]P@0",0R600"`-!P@0$P%` +M(0`"+R0((,]Q@`#@6@>!`>`'H1SPSW&!`,Q$&A$4`1@1$P'/<8``X%H*@<]U +M@0#X1`'@"J$*\,]Q@0",1`81%`%`(0T&!!$3`4`D`"PO(@@@SW"``*"K0(#/ +M25X +M0R@`!)0<`#!6)(`T0"4!&!H)8`($VE4D0#E`)0$9"@E@`@3::0Y1$,]W@0`, +M1B"/SW"``(RK,.$O>;EA[@A@`D&/SW&``)"K()%`)P`3`"$1``*/UW$````( +M0"`0#,H@B0\``'$`)`2I]L\@:0,`W@OP`"&`(P`@02/98:X(8`(!V@'F`X_M +M#@20+R?*%/!_0"4.&\EP`-G2#&_W`MI`)0`70"0!)3!YK@SO_^ER#WDHN`BY +M#W@E>)``#%]F7 +MP+8-X`,,V=AE^@MO]XHA!@1`*`$A-GD`(8`/@`!L2>(+;_=PV8H@_P\`IX#9 +M`"6`'X``]$(@J`4";_:`)`(SX<7AQ@#2"1*!T"$U`;1``!V6`=0A!XXA5Z@**H&P0#P<;@?\'% +M$GG/@!\P`,(:!!Z`'Y,`0AD!I@0>@!\G`((1!!Z`'R$`PA'X9Q1XQW"``#RJ +M@(CDY(KV!!Z`'P$`0EX$'H`?`0""C@KP!!Z`'PT`0EX$'H`?#0""CHPD0I22 +M]@0>@!\/`((6!!Z`'P\`PA8$'H`?/P#"&`0>@!\+``(9$O`$'H`?50""%@0> +M@!]5`,(6!!Z`'R0`PA@$'H`?"``"&00>@!\5`,(?!!Z`'PH`PFP$'H`?"@`" +MG0"(C"""@HOV!!Z`'Q0`@FP$'H`?%`#"G$#P!!Z`'QX`@FP$'H`?'@#"G#CP +M!!Z`'P0`Q@"!I@0>@!^S`$(9`:8$'H`?*P""$00>@!\#`,(1!!Z`'[<`0B`$ +M'H`?!`"&$00>@!]5`((6!!Z`'U4`PA8$'H`?`0"".`0>@!\/`()L!!Z`'P\` +MPFP$'H`?#P#"G`0>@!\/``*=!!Z`'Q``QQ00N8&YB+F,N2&F!!Z`'P<`1Q$0 +MN@4B@@\``$810:81"U$`!!Z`'R``QA$&\`0>@!\@`,<1!!Z`'P$`QA4."&`$ +M"M@$'H`?@`!&$00>@!]``$(2!!Z`'X``1Q$$'H`?`@#&%00>@!\0``885@P@ +M`.EP!!Z`'Q``!Q@$'H`?$`#&%&8,(`#I<`0>@!\"`,<5`X6^N`.E3087HSW"``.BI!/#/<(``/*K@?SA@\<"."```:@F/ +M_U((C_<."```T<#@?N!X\<#/<(``G%P*B!$(D0#/<(``"!>8V0;PSW"``%`5 +MDMGB#D_W%@]/]]'`X'[QP"(.#_;/<*```#`%@%(@```U"!\`^@YO]P'>SW"` +M`(BM`HC/=:```"B"X`'8P'@'N(.X$+B%()(``:5F"F_VR7#!I4D&#_;QP.'% +MSW6@```P`X6:N`.EE@X@!`78`X6SN+JX`Z6*#B`$9-@I!@_V\<"N#2_V"'+/ +M<(``'!GP((X`SW"``!@936"JZ<]W@`!P&0"'@.#*(((/``#&*/P.8O;*(8(` +M`=@`IP#9%?#T)D(0SW"``%#^!KI%(LP`SW.@```H@:-%@S1X0+"!HT6#`>%` +ML#!YVPE"@QSP`-@3\/0F`A#/<8``4/[T(0$`!KJ!NA"Y17G/`6Y17DP>0:X@;@0N05YSW"@```H(:#@?A"X3R!"`(>ZB;K/<:`` +M`"A!H84@BP`!H>!^X'C/<:```"B+Z`09@`\$`,8`!!F`#R``QP`)\`09@`\$ +M`,<`!!F`#R``Q@#@?L]QH```*`09@`\#``!"XA2"1`0&AX'[@>(`@P@X0>`:X@;@0N05YSW"@```H(:#@?L]QH``` +M**/H!!F`#Q``0FD$&8`/$@#":@09@`\0`(*9!!F`#Q(``IL$&8`/$``":009 +M@`\2`()J!!F`#Q``0ID$&8`/$@#"FB'P!!F`#QH`0FD$&8`/&@#":@09@`\: +M`(*9!!F`#QH``IL$&8`/&@`":009@`\:`()J!!F`#QH`0ID$&8`/&@#"FN!^ +MX'[@>/'`M@LO]EEB"B,`@$AP-'D(]``AC0^``.BI4-D$V@WP`"&-#X``/*I` +MC8#9C"("@`+:RB+J`(&-SW:@```H$+P%)(P?```"$X&F$+F!N8JYC+DAIB*- +M$+D%(8$/``""%"&F)(T0N04A@0\```(F(:8V"N__(XVM`R_VJ7`#N<]RH``` +M*"]Y@.!`*0`$Q2""#P``!@[%(($/```'#@&BX'X#N#5XSW&``#3@`&&`N,]Q +MH```*`09@`\&``<$$'@0N(4@D`$!H>!^!;G/3!Y@.!`*0`$SR!A +M`,\@X0'/("$"SR!B`,\@8@(!H^!^X'CQP.'%"'5`V!C99@QO]S/:@>#*(((/ +M``"*&Y*JH#\&FJ:JK/<8``B*UBJ>!_ +M`:G@>.$$;_<"V.!XSW&``(BM`8E$*#X+SW"``.&L,B!`#@*I\01@`P'8X'C@ +M?N!XH<'QP!H*+_8(/$V&_"K_E>$3`(0L>`<]PH```(!"`F[H" +MN&ZX2"```,FX17A#P`;P"0L>`IVZ0\)!Q(MVR7!H<@X,;_65YF'@%?A'P0B0,&`#8#R```V&XF'D%(0X`BB'_#P7PBB'_#RAV +M`=C/@%EA/J`: +MV`#9'/#/<8``R+T,@0'@#*$2\,]RH```(#&"#0D4!C&"U.&$]PAQ"O`1HA?8 +M$:("V`<:&(`!V0#8C>D"VL]QH```)T"A(X5(E3"Y$+I%>?L:6+`=!^_UH<#/ +M<(``)`@0D`#:8K@0N$4@00'/<*```"<@H/L:F+#@?TAPX'CQP'H.S_4(=A"` +MHL$$(+Z/`0$!`0#6XSW&``$B]@_)`V)P:'+!5$0`&SW*``,B^`>!5 +M&1@`<1$`!A5Z%H+/<8``R*L!X!:B+,@4>2")$PE?`<]Q@```\B.)"0G>``'<(.PIN\]QI@``!"2!P;LEN5,A3``) +M(PT#`B-!`Y%SSW.``*0'<(-O)0L0Z;O*):(09H+ZN\HE(1$%[078%;BDH"?P +M)^E0(\T"K+U`+,$2)7U`Q2#'P[M$O\&_P[EE>2<-GA;[9P.\=7N5?)MC.V// +M=(``&.5K9`\+W@%&)`@38 +MPQD"`+(,;_N!P`#`*X@;C/<:```"<`H0.&*)8PN!"Y)7C[&ABP`-B!!>_UHL#@?PC8X<7/<*8` +M``2D@,]R@`"D!T$M0!'*$H$`P;@P<,HD1A#*)`400"Q!$D\A`P20&L``$0T? +M$0T(``.0N9*YD!I``.!_P<7QP.'%"'7/R&#`9`0<0C8"?<6""`` +MJ7"%Z""#8'FI"&`SW*``*0'P;D9"=$`SW"``"0(((`&@0'@!J$` +MV1_P/8+//'`X<7/=8``I`<5A00@OH\`<```)/(O +M*0$`SW"``*"M]"!``#R%@KBR#V`!6H48Z!6%#0B>!\()S_\'\`#9SW"``#Q; +M(*@B#0`:SW"``/A(-H"@%0`1^@RO_31X603/]?'`X@O/]3"`SW:``*0'!"&^ +MCP$!`0$(=37R!"&!CP0$!`04\B\I00!.(8`'([C/<8``#$#P(0``A"@&!,]P +M@`#T0C(@0`X&\`6%D@[@`2:%P!X"$!$(W@$2AI6X$J8/AI>X#Z85A@0@OH\0 +M<```"_21N,P: +M&+`0EQ4(`P$,E3"Y$+@%>?S);0D!`#"%!"&!CP0$!`04\B\I00!.(8`'([C/ +M<8``#$#P(0``A"@&!,]P@`#T0C(@0`X&\`6%H@W@`2:%P!X"$!6&!""^CQ!P +M```6]`2'*0B?!'X)3_L5AIZX%:9`)0`2&J8`[(,``$(\,]P@`"D!P^`];BT#T+]SW"@ +M```,-(#/<(``J*T@H`39SW"@```D(:#/<8``I```*0'P!>`$`2A$0C?`2()+_P` +MV4H)3_T(=0^'"PB>!`#8M?"Z%P$1Q1>`$$HC`"`"(0X`"B2`+X``J*T`%``@ +M3H<$X5A@`B!1`,]P@0"\'5IP+@KO]F?9SW"``/`\$-DB"N_V&G'/<(``T,\6 +M"N_V"-G/<(``6#P*"N_VE-G/<8``(!P`&<0$`!0!("IP-AI$(#@:!"`*(H`O +MH```#$P2`2#/<(``]*T@H-(,X``J<`AR$!H`(!V'SW&@```@9.`0H0'8!QD8 +M@``9``3PV00B0%",(`*(,/)$``D`T."`W,P@`H,O]`#9SW"!`+P=.:"(&$0` +MM!A$`.(80@#A&$(`SW"!`+PA9!A"@&080@#)<$AQ)@XO]JER'?",(`.`#/*, +M(`.$X-S,(`*#"_3)<(X)+_9(<0_PR7!.#6_V2'$)\,]P```R$9((+_8$(8$* +M`-@?Z,]RH/X0!`79%;E$H02ASW*``*0'+X*@FO_(MP +MA>@6"J```,"AP-'`X'[QP*(.C_4(=L]P@`#X2+J`SWC/<8``K$&$*`8$)@_O +M^S`A3PX:<,EP#@O@`.EQR7#I<98.;_P*`(H0#8`=EZ\,]Q@``D"$"!!X(!X`>B`($'@`2G +M`8%`>`#8:_`V"L``SW&@```D"H$$Z`+8`:'/<(``)`@@@!"!`>`J":``$*'M +M\<]P@``D"""`#($!X`RAS/'/<8``)`A`@0*"`>`"H@*!0'A&\,]Q@`!(O@.! +M`>`#H<]Q@``D"/7QSW"``"0(((`#@0'@`Z$F\)X/X`(!V+;QSW"``"0(((`% +M@0'@!:$)\,]P@``D"""`!($!X`2AD@@``![PSW"``"0(((`1@0'@$:&2\<]Q +M@`!(O@R!`>`,H0#9`=@.\,]Q@`#(O0Z!`>`.H9OQ0=CV#>_UC+@!V`AQ!^B* +M"*``*'#2",``!/`(Z:8)#_?/<*````@"@,]P@`"D!P^`'0C>!,]P@`#P/*.@ +MSW"``-#/H:#/<(``##JBL-H.0`"1!*_UH<#@>/'`!=C/<:#^(`45N"2@SW"` +M`*0'/8!DX;X,H`,(V!8-;_T#V`/P)@N/_,]PH```)`J`!>AL@%VA6Z"Z+LR0'@L[BUN+BX +M[!H8L`2B`-_/=8``I`?RI>^EX+7SI<]R@`!D".6J"B*`+X``>$GP$@"@YJKK +MN`'8PB`!``*X%J7UI<]V@``D"/ZVBB$"(``:0@3GIFP0`"#]I2)X'J4_I?BV +MSW"````M^*#/<($`F"7@H/NEY*KDI@39SW"``'PL(*`'BLP:V+.@N`>JD@QO +M_.*JBB'_#\]PH```13R@.*"*()@-6!L`(`P80"0(&$`DSW&@```H`!G`@XH@ +M&`@`&``@2!``(!T(7@`S$0"&!""^CP#````&\OO)!.C\&ABP^QK8LT@8P",L +M<,]Q@`!(O3<(G@,/A8NX#Z55(<`%`*;/<```/&H!IL]P``"H;`*F"M@0MMP2 +M`*$&V1^VSW"@`(`<.Z`1\$`A``,`IL]P``!@:@&FSW```,QL`J80V!"VWA(` +MH1^VSW&@```,$X&*(YH``Z8-@1'>0B``"$@@`@#/<($`_"0A@,]P``""#H#A +MRB#!`%!PRB8N$(#F%_3L$@"@@.!:V,H@H0<,<1$)7@;/=H``I`<_AA<(10#/ +M<8``R+\=@0'@':$#WFL"``"`%@$0SW6``*RM`(%`)1(6`>``H2#8>@V@`@"E +M`=C/=Z```"`%I\]Q@`#@P@*!2B``(``0$0`#@0`0$P#F#Z`!"G#`%PP0`B$" +MHP,C`R1`PCN'@GB">2&E0J5CI6(-K_T$I08-K_T+M8'@`=C`>`JUSW"E```, +MXH`*(8`O@`!D"%,GPA`!&8(@4R=`$(/@RB!A!<\@(0,<"N'URB'!`T$O01/" +MN0@90B`/AN:E`-^+OQ\(W@($N0J5@;DE>`JU!]@(\!4B#"``'``4`O`$V`'@ +M]0@4@L]P@`#$GP&`!H#KN&@,0@`/ADH@0"#K>,(@`23/``/>_@U/_('F3O." +MYHSTSW&@```0;($`V"R[SW&@`(`A)('"NT#!(,'ANX)I9+E((0$`RB(!`!+R +M`A2",`T*1`!0=,HB9@!*]U!T`-K*((8`RB!E`,HB)0#@N\HD(1``VQ/R`12# +M,!,+1`!P=,HD9A#*(R8`2?=P=`#[D +M$?1%*?X"Y[M!*<%PPB%B``?>"_!%*?X"02D!<07P(KD#\`#9"-Y!@BZE3*4!4"``<* +M0``(WF\.T1%*(@`@'@XO_4IQSW*``$0(SW&D`(!!=H'/<*0``$"B'<00!".# +M#___```PNZ0=Q!!^@0H:@@2H'<(0*+NI'<(0XQ``!G&!)AF$),B[%;ME>!09 +M`"`1@2FXQK@L&00@*8H(B@BY)7@'IP4%(``*=<]QI@``!".!-+G!N3`91"`, +M03PA@T/_0?>2B<``,]T@`!D",]P +MI@``!&"``QS"$4$KP@3"NDBL02L``\.X0"J!`P4@10!`'4`14R/``D`5@1`. +MI>"YT2/BA\HF(1+/=X``K*UJIQ07!A%`*@0!!22"`4JW/'H/IS@?0!'"NL]W +M@`!4YTIG#0H$`$^%C[I/I8?F=*64](WA;O0N&00@SW&``(#F(($#X`4H?@`* +M(,`.`>`"N!3@':6F#"_]%-@TA0GP$@BO]0;8SW"F```$((`TI00A@8\#0``` +M&_09"%Y&SW"@`(`@4(#/<(``I`@!T)@0\`0````-C/=8``I`?$'0(0`-^7OQOP&PF!#P$````!V,]U +M@`"D!\0=`A``WYB_#?`G"8$/`@````+8SW6``*0'Q!T"$`#?D[]4A<]Q@`"L +MK4JA#?#/<*``@"`P@!*``]XF\`0_`-@5Z`K>SW`$``$1>@M@`P#9 +M!"#`0X#@RB;B$6QPX+C*)B(2[PZ0D@SP+H43";0#!][/<*```!`4@`D(0``( +MWH?F(@,"``HD@"^``&0(!!2`(,]W@`"D!^&XT_(*((`OI@``"!$0$Z8`WD$K +M@"+"N`'@02O"(,"Z67AAN$$K`R$2$`VF4R-#@5,E!!"]>5,A$0!!+8$04R%2 +M`%,C02#,(^*/`=O*)((3"/1!+0X1P[Y!+0P2P+P`VX#CC_0$N,5X0"Q#`V5X +M"[DE>!&Z!7H3O`@4@""%>@ZX17A3(@$@&[DE>)JX$*%!,.E1(/")0##PX%<`@````=WB/P0!>`$$2XP;@! +MX"$(TP#0AP0FCA\````8;@UO_2N^T7#*(`8$RB;F$5#WQ@P```AVE.#*)N(3 +M!_"Z#```"':4X,HFHA@*<""`SW"``*RM+!C`!"V@PA>!$*R@![F*N:SPX+@* +M(H`OH```$*WR"B&`+Z8```@"$1"F`Q$-IE,@@"&`V@0E@1`&N25X!"("!`2Z +M17A$)0$<#;DE>*EQAB'S#PZY!7D(%(`@X[T.N`5Y1"6`$!2X!7FI<(8@_@\5 +MN"5XB+A2($`%$*=!+<$0P+D"'$(@RB*"#P``___*(H$/```0'RZ'02@#(E,C +M0X2N'T00;J<#])2X$*=A#9X40!>,$!$,$1@$(+Z/````&";R#P@>`D$HP0!3 +M(7Z`!_0)W@J^!""!`S4)@`-!*$$$P;DI"=4`%0F1`"$('@)!*,$`P;D!X14) +MD0`)"!X"S.0&]@D+E`,)"L4`"-XC\$$HP0#!N0'A'PG5``0@@`\````8%@QO +M_4$HS@(+"(0#$(<5")X"<@L```AVE.#*)N(3"?!0$@$@#H<0<0?>RB9B$@`1 +M`2#/<(``K*TL&``$+:`"%($@K*`'N8BY2I!%>2JP+H +M`,]PH```)0"`FQH!4(P``5#)$3G,WCN-$@88$$\I&Z3Z4$Z:^ZL;I/ +MI>^ZT2)AA`7R+-@=I1#P$(4/")\&+H5."Z`9`-H=I3V%SW"``.RM+@H@`"&P +M#X4?"%\$<@C```2.">C/<(``Q)\!@`:`Z[@H"@(`$(4)")\&`-@@\,]WH`"` +M$`B'$PC?!CV%@=ADX:H.(`,,N`B'&PC>!Q$(G@<`V2*NS;@.I>KQ`=@"KN;Q +M#'#\N!_8RB"A![CHSW&``&0(`HG/.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!X)J#@?N!XH<'QP"(- +M#_5$P!7=4PC>``C8SW>@```D!*?*"```SW:@```H/0@0!3*'$X`*X@;@`'@"0$H/L:&+`"AP\(GP"2#^_[A,""Z*EP +M(PA1!<]PH```)`*`!,'BN,H@80(L#F'USR`A`PX((``$P`C<"P4/]?'`X<7/ +M<:```"1F@038!*$;V`>A-@_O_Q7:SW6@```H%M@O"Q\!0Q4`EN"XRB#A!0_R +M"PA>``L+W@`2V`GPSW"``"0(((`&@0'@!J%(<,D$#_7@>.!^X'CQP,]P@`"D +M!QV`%^C/<:``@"`P@2)X:KA((($`&PG4`,]PH```)`J`A^@L.!^X'C@?N!XSW"``/"MX'\`@.!XX'[@>.!^X'CQ +MP.H+#_5N"&`!"'7/<8``I`!X\48SW*@```D?H(. +M@7!PRB6B%0"�@>!`+8O!D$`!^"N!D$`(#EK_0`P.FXBB((`)/RSW>``%!; +M`(?/=J```"0DD,]U@`"D!T2Y4R'1`$2F+X59"5X$2@X/_PHE`)`*],]P@`"H +MYA8@0`0@@&!Y`(<(=0J&!.@"V`&F$!Z`'P``_W\;V`>F8@W/_\]P@```+1B` +M@.!`"L(`K0V1%L]P@`"`R*H.(!H`W4[PL@YO_RIP&G``A\(-+_\J<48.+_\( +M=XCGS"?BE0/TZ748\/\/D)05"!`@7@P```HE`)!<#L'_!_`&#<__`-@9I0AU +M$0^1%L]P@`"`R%8.`!JD[0*&`-U!P"D(GP#V#._[@<`*)0"0#O0!PN*ZRB"A +M`LHA@0\``/X`G`MA]<\@(0.,[038!*8;V`>FSW"````M&("`X)0)P@"`Y<3T +M`=G/<(``K*G9`R``(*#@N,H#`0#/=H``I`62YNAY$$"^&`-B' +M"5X$@.`9IGKRC@\/_PHE`)"D]$0B/M-V]$UPAB#\`XP@`H!0W,P@`H-N]`^& +MV0C>`L]P@0#<'1J(S0@0`,]Q@`#$GR&!*8F]"$``(G@1>&&XA.`#VLHB!0`` +MV`7P@GDO>2BK`>"A"),`SW2``)CF`""##X``1`@HB_`DC!#C#$20`-GO\<]Q +M`@("`@0B0&``W!'P+RH!`$XB@P=!*\T`SW*```Q`\")"`Q`@P``/)(P0\N@9 +M[`0A@8S_V`OR+RE!`$XA@`H +M`-DTJ`#9SW"!`+P=,@UO_RR@SW:``*0'AO$&"D__LP(``)P6`!#/<8``9"TZ +M<$0H/@$Z"8) +M0``)\`#8SW&@`(`<&:$PV!RAQ@O/_P^&*0@>!A#8G!H.AB#V_W`=@:#,("*@9`WB&,H@`@2>#T_W"'%`)@`3`@G@ +M``IR@.#*)6$52B``(""6AB'\`(PA`H"4](+@B_3`%H`0!@AO^P#9A"@!#``A +MC7^```PNX(4'[\]QH```(#N!9@U/]\]P@``\,`:`#.@A#Y43,R;/`#?Z7`(\`#?`M@&\!J%>N@!V`#?`=DZI1$(D`!,(`"@S"!A@`#= +M`_(5W:SMSW"``/C/((`*((`O`0```#T)'@3/<(``8"P`@)GH0@R@!`'8SW*! +M`#`!0!H"!$$H$")!&@($02@0(D(:`@1!*!`B$@JO^D,:`@0#\!7=#X93"-X$ +MI^W/<(``3-0`@$'`SW"@```,#8!"(``(@.#*(,P#C"`*C=?WG=AAP)O-!AP$ +M,`'@!""`#P``_[^/N)L:'+`!P.8)(`$`V<]P@`!(O_*@V@UO]RIP!/#Z",__ +M"'6I<&T&[_2BP/'`#@[O]`#8X<#/=X``I`<8I[X([_N+<`HE`)`%\JEP50;O +M]*'`SW"@```E(X!3(8``!"&.#__`7W^="-$!37$/AWD)G@,$(+Z/`#0```OR +MSW"!`+P=#(`VZ#X)0``%?C+P!""^CP`*```)\DQP`0B?`$QPX+C/)F(1SW&` +M`*0'#X'YN,\F(A+/)N(2SR:B$QKT(PC>!@4F@!\```!KTH$$)HX?`@```%(F +M3A0JO@5^"O"%)AP0"/`-"%X%6@A@`,EP"';/<(``9`@`B,2X&+@%?@GPX+G* +M)>$5!?+AN<]P@`"D!]B@D_'@>/'`X<4`W078 +M"[@N#J_\J7$2#\_VSW"``*0'#X"?"-X"SW"@```<$!B`#P`0``"V#>`"!=@0 +M\`QP%PC>!2QP$PB>`SX)(```W9H-X`(%V$H)+_4&V$,-%1$$(+[/,`````'E +MP'UL<"<('P`,<`L(7@4L<"<(G@,,<`#9G+F["!Z'SW"@```<)*`'\,]Q@`!( +MOP*!`>`"H>H(````V<]PI```02*@&?`,7`?6QP%P@?`.((+_4&V!\- +M%1$,<.<(7H4)\+H(``#/<8``2+\"@0'@`J&U!,_TX'CQP)S-AB#_A3WRSW"@ +M```@`-DZH)W-1B#,`)S-G1H$AN!`>`;H6AP!_`3@0'@$Z%`(P`-!**=S:>XG1H`8H@!`"< +M&ARPSW&``$B^$H$!X!*A!=C/<:#^%`85N"2@G,T$(+Z/````4`CRSW"``"0( +M'Y#N#*_\`-G1P.!^\<#AQ0#8SW6@```0":4.""_U`]AR"````=@)I?$#S_3A +M!\__3MO/N"Y8*+*(,$`!?**((4#`*(+"=X"B;@`HN!^`-L.\"\I +M`0!.(8('SW&!`*PE\"&!`!`@@``E>_3HSW"@```0<*#@?N!^X'@`VL]Q@0"L +M)15YX']`H>!X`]K/<*```!!.H`#;SW&``#`\3J#@?V"ASW&@`(`,`:'/<(`` +M5%L`@`*``J'@?N!XSW*``%1;0()"@EA@(G@"(($`4'#@?\H@1@#@>/'`<@Q` +M`M((C_O1P.!^X'@(<0#8"'0/\%-L57K'A`EC1`3 +M:A5XQW"``$BZ((!H@*]]#R;.$-4)7X*,(\./YO/J[;D"[_3/>`#9$/`O*P$` +M3B."!T]Z$""```.Z57K/`D$HP0#!N0GP#0B> +M!B"-1+G!N0/P`-D$Z9ZX`*7/<8$`2#76>2")"PD>`)ZX`*5?")\'SW@`V5X* +M+_L:<80H!@0`(8!_@`!X02J`#P[1$P*`A.#*(0$$`(7/<@`$``$O"%\"%>E+ +M>-$AXH71(>&`"?0;"1X&!""^CP```!@'\OZYSR#B!\\@H0<`I00@OH\`!``! +MI?,_"!^"P[B>\7D!S_0!V@3P$"#``!OH+RD!`$XA@P=H<8`AP@&4X\HAQ0`" +MN3`AC`^@`!@L,FLP(8$/H`"T+B]Y,'3`>N;J`-@"\`'8X'[@>/'`X<4$(8*/ +M\/\``,]UH```,`7R-+IM'9B0%+C3N25XE!T8D`/PW@^/^Y05`);["-Z'(0'/ +M].!X4FC'`,]P@`"`^RH:&#!9(@`(*QJ8/_]___\I&A@P#_!"(@`( +M*AH8,,]P@``@^2D:&#`K&I@_#P#__\]P@`"`\@`9&(#@?N!X`-D2\"\K`0!. +M(X('3WH0((```KHP(H(/H``T+\*Z#R&!`"]Y\.C@?RAPX'CQP,8/K_0`VN.( +MSW.@```P(8@/(L(#!A"1`!)OQW"@`#0O`!B`#Q@!``"2$P"&4GVD>)(;&(`Z +M$P"&SW:``!@ZI'@Z&QB``(:D>`"F`88BZ!4F4!`0$``@2WC*(($/``"?(?`( +M(?7*(L$#$!`!(``G@!^``&@ZI'D0&$`@_]D@J`.&I'@#IA4F3A0K>/WU40>/],]TH`"`+%BD>:0, +MN)VXG[@%>3>DX'[@>/'`V@Z/]`AVE@_O_RAUR7#N#>__J7$Q!X_TX'@PV<]S +MH`"`'#NC`]S/@```4(*?/<(``?+$`@`H@`"<`(%$. +M0"$-(<]V@`"D!P`1`2%,AE,A@`!*)$`CU[I!"-$`/@H@!"IPA.@`V"_P#X:; +MN`^F`A&!(#06@!!`(0(E%PA!``IPJ7'F"R``0"8#'(IP&/`2AI&XDK@2INCQ +M[+D!V<(A00`%V#9X+X:9N2^F((5%>4#!(85!P2*%0L$CA4/!`^`!IP'8B.@/ +MAI>X#Z9P&X`D$_``P`/9"ZGNA8`$0.G9!N`("FG +MZ06O]*3`X<7AQL]QH`"`'"#:6Z%6(`P$*82BP8L)7P97"=X!,8@%VB.YP+DV +M>L]SH```%`/9,Z,J@XWB0<$0WOMI8`E?:NCL8B&)?P?&+VE>3J@!_`-VB6`SW.@```4*Z,!V2"C`^)! +MHR:`+*,G@"VC*(`NHP/9)Z-P$``!`Z,)A)FX":2BP,'&X'_!Q>!XX<7/"\(G@'/;&3 +MSW.!`#0M4(./@U!US"$!@\\@[@'#]R^CL*/@?\'%X'CQP'H,C_1,`L@0(4/IF_T +MSW6``*SG\"7$$$`IAP,%)PT!&+JE>C(;F*`/"Y$`Q@PO]@IP6_"&)7^-'O($ +MCYOHSW&``"0('9&,IF2X';$$V`6O!J\9"]$`'!,`I@VF'9%DN!VQ#-@%KPC8 +M!J]&#.__"G`]\',+$0%`+HT!!;D`(58#G+@/IA#9$M@&K[H6`!$EKW*XNAX$ +M$,]PH`"`'#N@)@^O]`;8`-C/<:```!H!H00H/B4`$@`@)W!!@``AC250H4*` +M`"&1)5&A0X!2H02`$Z$!A0*A`H4#H0.%!*$0$0`@!:$#\)>X#Z8/A@L@0(4, +M\L]Q@`"LYT"/(($8ND5Y,AM8H+.X#Z9I`H_T\<`V"H_TI<$(=P*+*'9Y<*"+ +M9,`1'$(S`!($`0(2!0$$$@@^Y17D`(0(!4'D`'(0P1Y9'>3QZ#[DE>@`B00$P>@(<1#!<>0^Z17D!<3!Z +M!!Q$,%QY#[HE>N!R4'D&'(0P/'H/N25Z`")!`@@<1#`P>EQY#[I%>1EA,'@* +M'$0P4R6!$86Y"+DE?:"W()8G>!QX"+@%(,`"`;<`P`&G`<`"IP+``Z>!`:_T +MI<#@>`]Z2+@/>,]S@`#(Y_0C``!`*`$"2+@%>?0C@``P>>!_)WC@>!#:SW&@ +M`(`<6Z$!V\]RH```&&:BI!`!`!\)W@("V!FBSW&!`#0M!($"H@.!`J("@0*B +M`8$.\#R0AB'_C`+T>:(4X".`(J(B@"*B(8`BH@"``J+@?N'%!+E`(`(.QW&` +M`.#@@(%A@HHE#!!@I&228+1C@F"D:))@M&6"8*1LDF"T8)*D>PT+00-H@F"D +M@ +M```$A(88&BX$Z$`@`PXA@\]RH```&B>B)).*)`P0 +M+K(C@R>B*),NLB6#)Z(LDRZR().$>0\)`0,H@R>B,I,NLB"0`),,L@&3#+(. +MDPRR%),,L@N#!J(,@P:B#8,&HBRRX'[QP)X.3_0:<."(`9"S;UIPM7W'=8`` +M2+I"*`X"P;X/")X#$-G=K0'8!/``V`'9W*VZ<`$0D2`6)L`3QW"!`,@Y`"F4 +M`Q4@4P4;"M\@SW"``'BQR6``&T(@.XT%(0`%&ZT^\(8(+_8*0'8SW&!`%`EQ8'APB^# +MPB`!`%L)W@).@T`3@0`="A`%C.A$N<&YA"X&%``A@'^``(1"&.`I8$\A0`+/ +M@```@/!\8D)IUAB3\((HG`B45#,$E2B8`*,]V +M@``D"#86$1$/\`'942*`IL]V@``D",(A00`.V#06$1$5(%8``A`!(4`A`"41 +M"$4``B%!!"\E2"`$\$HE`"#/<(``E,0`B(#@Q-S,)`*C(/($(KZO``0``0_R +M42*`I@'8PB`!`!4F`2#/`/H1()(``*<`39#O`@A@V!`>`-H039"/``V4"& +MCKD.@@'@#J+/<*````@$&,`$R!<"$``A0"5">(#@RB#,!%&'$'@S"(0`#!`` +M(!`0`B$PN!"Z17C\&ABPH-@!IT0?P!00EF*XHG`1IP+8!Q\8D(#8`*`8H0#:!-F`)P:G+\` +M```0`_"<&ERP2'`(W/\!3_3@>.!^X'CQP,H)3_0(=2AV2'=3('Z`RB""#P`` +M!CPL"Z+TRB%"`\EPZ7$!VIX((```VX'@RB!!`\HA@0,0""$`RB)A`/4!3_3@ +M>"*Y!O``'\!`!.!AN?D)M8!@@,]PH```#&*@`]DGH,]PH```(`/J9AA8@#N` +MSW"``%1`X'\@H.!X\`$((`/``#_OX^XFQH< +ML,]PH```$`T0`(8"'$0P0B``"$@@`0!`)0`2`=H-"24`0*8&"D`"0(;/3"@"/"D>V5Y,*`$\`?EI'MPH`#!`=@` +M'T!``-D@IMD`;_2AP.!XX'[@>/'`9@A/],]QH```(#J!C"$"CT3WD0@0`,G) +MQ!```(0H!@0`(8U_@`!X0?H,+_<`WQ#8#=F.N3#:6-MV#>`9F'?F#"_W"';X +MOLH@P@,J]`/9SW"@```((J"(V@`8A%``&,131(4`&(!02I4`&(101(4`&(!0 +M2I4`&(101(4`&(!02I4`&(10`!C`4QK:!/``&(10`N+["A2,X:#V"(`8`=AN +M#`_W*0!/],]R@`"XSR""@ND`HN!^X'CQP*8/#_3>"._YHL'&"._YBB4($`AQ +MBW*!P[(*[_4`V`#`"B"`+P$``(`%N,]T@`#XL1MD((//=H``5%M!@V"F.F(B +M@QQD66%#@P>$.F(D@UEA18-F@SIB>F(`()$`SW"``+S/(*``V"P:&#`(=Q7P +M`<#[>02X]'C/?=#Q22#"$` +MI%0/[?_*(*T``(8!@!!U1`_M_\H@[0#/<(`````L&(`/"````#`8@`\!``"` +M/00"!H+@`H>!^\!^X'CQP,]P@`#L3@"`@.#*(($/ +M```M,_@'0?1`>-'`X'[@>/'`X<4(=<8/[___V9H([_\!V)8([_\"V*EPA@_O +M___9T08/]/'`0@X/]*'!FG!Z<>(*X!<:66\L]P@``4.@"`$^C/<8$`G!XAB0#8">G/<8``F#\@ +M@8#ARB!B`/(-(!A:<`/H`-YJ\(H@_P\#\*EPA@G`%XP@PX\(=1CRC@G`%\]V +M@`"LM[9^!!:$$`,6A1`B:`&(08YBCL8.(!@*)H`$:.CEC@0G3Q0$\`#?Z76+ +M<>H/[_M*<`0@0`0O(0<@!2'.(R\FAY,Z\HIP5@G@%VIQ$G@$?@1_+R3'@\]R +M@`#<3B"*!"$1(,5Y(*H>\L]Q@`"LM[9Y((G/<(``L+E`D`\B0@!`L#1M`"&` +M#X``#+B*<6IR&@K@%PISSW&``.A.`($/($`#`*$5"1`@`,"*<6IR"G,Z""_\ +M"B1`!,]Q@`#LMQN)RW@'],]P@`"@.O0#`I7@$\`&&17A`P`". +M`,-$N,*X#K@'V@ZZ!".,``M\BW$4\M=T````0,PD@I\```"`S"2"GP$````# +M]`&&`O`"A@0C0P1E>`"A`,%+>D.E`\-AI0T('@*=ND.E +M!?"*(`8&!*4`VD6EJ7`!WA(.;_7)'"&W-*(0`@;R9#$"IU2B#`)PHC0"0*(D`D*G=*<.EQA@XO]`': +M`""`@P$A00-V#B_T"G)"(%"@0R,3(+)QS"`!A0GW`"*2HP$G3Q,")!2@`R55 +M(,EPJ7%Z#B_T`=H%('Z`"'8H==OU2G#I<4IR%@XO].ES`B86H$IP`R=7(.EQ +M)@XO]`':!2;^I0AV*'4/\@4F?I,-\@#``-G*/U00$/].!X\<#2"`_T"'8H=TAUX+C1)R&0RB"" +M#P``!3S*(8(#.`IB],HBP@.K#1`00"7`$R2XP[V7#144,R9-4"6`A^4$`+F`A8!%0(?5!`"%@$5`A]4$`(6`14"'U00`A8!%0(?5!`" +M%@$5`A]4$`(6`14"'U00`A8!%0(?5!`"%@$5`A]4$`(6`14"'U00`A8!%0(? +M5!`"%@$5`A]4$`(6`14"'U00`A8!%0(?5!`"%@$5`A]4$`(6`14"'U00@"#_ +MCP#=L_5M``_TX'CQP,]R@`"0N0"")^@`V2"BSW"``)BY(*#/<(``B+E`@,]P +M@`"@N0"`SW2``(RYSW.```C2$PB%``)Z)H-`I".!(($980;P!H,@I`.`((!9 +M8>X+(`%H<-'`X'[@>/'`H@_/\P#<`O`!Y!4,51'/=8``U.F-9?,+08,!VP/P +M`-N`XW?R`-MH=0;P`=N)=6.Y`^!+"=0`P(B,)D.2`-Q4]N&($N\)\,]W@`#4 +MZ8]G#P[`$P'D]0Q4D0#<`O`!W(#D`-S*)&(09.P"$,P`0GR-?$@DS!%``)2Y`(`+9^@_O]\ER%/#/=H``G+D`%L`0$0T# +M$!-M#G@"V=X/[_RB8I$`SNSW"``)RYH*@!V2"GSW"``)"Y +M(*`?\,]R@`"8N2""`=@*Z<]Q@`"DN0`1P0`P=$%&@0HD`"%:4$I``(G>#"Y)WC/=H``Q+F@CE,@DP'%O9#ERB"*#P``S1N8#RKT +MRB%*`P".YK@`V"3TSW&``,B\%B%``P>(MGD`K@`90`3BL089`@0`(X`O@`#( +MN4"(1ZE`*,$@H*@U>0`:0B/'<8``2+H@&0`%`(&IN`"A`=@,W`L&S_/@>*+! +M\<"^#>_SF'!%P104#C$PN$`N`10%>4$I``(G>#"Y)WC&N``@@P^``,BY`O!G +M;*"+@-]9#=\1SW&``,B\*'2V?`:,ZPH!@,]P@`!HN@.Z57I`8(0H!@0O<+AP +MQW"``'A!1H`5"@$!#I`1#@$0`"6`#X``]$+@J`>,MGD`J\]P@`#$N4"(A[U' +MJ:"H#-R?!<_SX'@#N!5X`"""#X``2+J:BL]P@`#(O!8@`P-@@V"A6HI6>`*0 +MX'\"L>!XHL%!P004`C%!*`$$0"H#!"5[02L!`F=Y,+MG><:YSW.``,BY*V,# +M\&>)@-D="]\!SW&``,B\=GE@@?$(P8!BD>D*P8`&B0/P*'#@?Z+`X'CQP+H, +MS_,(=L]P@`"PU`"`SW6``$B]X@.#*(($#RB>!$PGRP@@/_&H(+_P( +M=GH(+_P(=Q"^SW6``$B]PJ4)#U$0@;["I0/H@[["I<]PH```(!N`SW:```#R +MB1T8$`&.SW&``$B_#.@!WP#8`:Y5(4`+`-DV#N_TBB($#1IW`HZ`X,!XRB`! +M!`7H`H6`N`*E*03/\^!X#0?O_P#8X'CQP.'%"'4R""```-LI:&AR#?`H914( +M$@P1"),.H@[/]Y)JF'@%>P'B8;GK"1.`!03O\VAP"'(#\`'@((C^Z>!_0GC@ +M>/'`X<7/=:```$4`"B`H5@H`KP!84@ +M@B1X`*('&YB/`'P``"T#S_/QP,]P@```_.P<"+#/<(``*/Q!P,]P@`!$"D+` +MSW"``$@*0\``VT3#"-@$V2AR"B2`#X``3`H*)8`/@``TP4HF@`3Z#N_Y2B=` +M`*7`T<#@?@AS*'+/<(```/RI!^_Y:''QP,]P@`!D+`"`@>"`"0']T<#@?DT$ +MS_7QP#X*S_//=8``C+D`A1SHSW&``*"Y(('/`+9F@KO]P':SW"@```@.X#/<(``J+D`@,]R@`"(N6""&V//<(``H+D`@")[ +MSW*```C2"PC%``)[8*6]\0:"P*4#@""`>6&Q\.!X\<#AQ0AS4@@@`"ARA"L&!,]Q@`"$03`A00[/ +M=(``Y,("N35Y(62`@5,B0053)$T5HGDX8(#ARB$+`,]P@0!(.G9X(*!!*H$% +M-KR">>T`[_,AH.!XA"@&!,]Q@`"$03`A0`[/<8``X,("N!5X`&$`@.!^X'B$ +M*`8$SW*``(1!,")`#L]R@`#@P@*X%7@`8B"@X'[@>.'%A"@&!,]S@`"$03`C +M3`[/Z"#`8,"(4&#`R("`!)L%7C'<(``X,)B@""C`X!`H.!_P<7@ +M>/'`\@^/\Z+!"'4H=TAVE@QO]8MQSW"!`'`ZMGA@@`#"`8``(L*``<$!($`` +M0/'`N@^/\Z3!"'8H=5H,;_6+<<]P@0!P.M9X((`` +MPEEA`B&!@`'#(*`#)!_6&#@>(0H!@3/D)C8(("(<(`SW&!`'`Z%GG@?T"A\<`>#X_S6G`H=<&".G-$)GZ1&G+SD33R +MT@O`$PAQ`H5'D0*A3R%`(05Z4'A'L0@0`R!AH2$.'A`+#QX03R+```>Q"P^> +M$(2X![$$V`:Q`Y6#N`.U'PZ>$`L/'A$'D8.X![$-#YX1!Y&$N`>Q!I&$N`:Q +M2G!."6```!`"($0FOI(T\FH+P!,(<0*%9Y$"H4\A0"$%>V>Q#!``('!Z8;@! +MH2$.7A`+#UX03R/"`$>Q"P_>$(2Z1[$(V`:Q`Y6CN`.U'P[>$`L/7A$'D8.X +M![$-#]X1!Y&$N`>Q!I&%N`:Q2G#B"&```!`"()$&C_/QP!H.C_.JP9IPVG'/ +M<(``T$#`@$H@`"`&@20<`#3/=X``,,-`)Q@5BNC/<(``;,0$@,)X$0B%#P`` +M`!`*(@`D"G$0\.X,(``$%@`@A.`(<V-B`>4)#141 +M\0L2B)H,``"$Y3IPRB%&!%/W`-TJ<0WP`8EA@88"#@)K:FV,)(X(`0Z`!AQ,(@0$>#"``J7`+ +M"#($"'&AIP'EP;U`)44`S0T4@0&'O0B`@4*'0"F1`L]U@`!LQ`"%_]E5"$$` +MA>K$I<6E(*65\`*%">A$A<]P```7,9`R```*69Z@'9>@EO]B*E +M`8"!P42%984V#2``2B0```'`@.!V`P(``\&*<.(.H``!VF<#(``%I0T*E``! +MA0L(00!*)0`@//`$A0HC@"\```!``";!%")X/[A2(`"`RB4A(!#R(@EO]@&' +M@<$!@,ER9(7:#"``2B1```'`..A*)4`@&!47$`6%`B#`!0T(4P`$A0`@UP3N +M"&_V`(6!P0&`ZG)EA:H,(`!*)$```<"(Z`/!BG!:#J```=H#P`6E88=`A5!S +MT?0%A<)X"PD%(`*'@>!V]`*%@>#"`B$`Q*4"AZ4(E``B=L6E:?`#P0%NAPD! +M`,H-(`#@A0"E8P\!$(8(3_9$A87!`8!EA4(,(`!*)```!<`+"%$`!85'P(8* +M(```A0?""K@99@(A@``_N%(@`(`(\D6%`B)``!\(4P!'P@OP!,%DA0`AP`0" +M>S^[4B,#@`/T2'$*\$?!"/`$PB2%`"+`!")X"0A2`$/!!_!#PDAQ`_`!AP"E +M):7$I0T"(`"*<"F%#0D1`0>%!:45\(+AS"&B@0WT"(5GA0#:$'/*(F\`@.+* +M(,$`!:4%\,=V!P``\,6E@[DII0'8`J7O\`'8$!4$$`*E`B2!`P#?CK\`(<`C +M%0D$`,2E!"&!+___`/#9826ES?'(R9)K@"`8`I1\@&!!"(4/````4/`@PS!B +M>`JX^V$Q",4`+0F$#P```(0")($/````1"6EQ*6*<.X,H``!VB"%@-@5(%@P +M`!@`,+7P4@\O]DAP@<%EA0`F0A0!@/MC"@L@`$HD```!P(#@Q*6C]`/!BG"V +M#*```=H#P`6EF_!*(P`@`=@"I/'`X<7/<(``T$"^"J_TJ-G/ +M<(``I#NR"J_T@-G/=8``;,2I<*(*K_0HV?_8`*4!I0#8Z0"O\P*E\2"@Z7$Z=WIW`_!( +M=LER&?"R;G`E`!<4Z.8([_,!WP#9#R$!`$EI17E`A4PB0*!%>2"E-6X987_< +MSB$!`\ER`>8)#A419^\E"Q$@`!A`($AT"/`2;'`@`P$__ +MR7(6Z`7!?]J,(?^/RB)"``3#"2)"!0(BP0`!X1L)(P1%P@PE@*#*("$`0")3 +M`,,(4(`/\""%#+MY80'A"!I`(`%J((4,N!EA#!I`(``:@",Q!F_SIL#/<(`` +M,,-!@`#;`_`!XQL+%0$!XLC)P;HR:H`@&`$T>2!@[0@4@>!_2'#@>/'`R@UO +M\PARI(`3D$D('@,&@BBX#W@T:,C)-'D$X``A`8`"@2BX#WX*\B@1@``(Z,]P +M@`"D._`@@`.(Z,]P```#,0H/K_-"@L]P@`"D._`@@`,=9>$%;_.I<.!X`-R' +MZF:`F.LFH.!_@*%H@(3K**#@?X"A@8%!@X)Z&0I2`&"AX'\HH$&!`81">!$( +M4P")3J+DGLZ"@H(6##1`0!I5_")``@@D@%`*%9(CO",Z@ +M#Y#G"-Z#!I6&(/^%[_,AA<]R@`#00``A@`\````0P()`(@P"PGB`X"RXRB`L +M`'_>"2"/`T$O0!'5:,)_U&L5?L!D"PC/`P>5B+@'M1)K<"`#!TKK0(*!@T)\ +M@.0LO,HD+!!">7D)4X``V;GQU01O\Z7`\!GY`)!+E +M?(.@[0H4@1`FSA#L[A3P`,-2:02[`"2`,'IB8X!"<@D)$"!6@@/P0H)E>D.@ +M4GI#H`'AW0D4@8'#0"0$,NIPJ'$`WOH*[__)`<(4@`CI0*% +M`B`!((#ARB`,(,3V"!T`%`(@@"4_N%(@`(`+\@02`"`+"($%`]@`I0/P`!T` +M%1$#;_.GP/'`P@I/\PAU*'<,B#IST!P(L$`E%1@$%8`@&G*,(,./RB"!#P`` +M_@`$\@H5@2`B>`(@``3"A4'`"(4HOB)P0"B4`@.5SWX-"!X!`<`!X$'``=A" +MP$HAP#``IP0?0!8$%8,@`<`3"P4`(H7/<```!3$*#*_S`<+/<(``I#O5>""` +M0\`'A0HG@"^``-!`"K@%*#X$3"``H``A4W``(Q8ERB&")9'I.@SO_ZEP)X4*N04I/@0G<`*G*(4*N3A@`Z<" +MV`"G"B&`)5IV-/``%Q(@`B+`)!<(4@``(X`O````"`(@@`0-"%,`:G9J<`;P +M`B:4)$IV2G`*%8$@DNDEA1#I"KD`(%"KD%*3X$)W`"IRB%"KDX8`.G:P(@``H@`#4$%P(@`B*` +M(#^X4B``@`OR`!]`%@#8`:<#V74"(``*(``UPGD?"5(`!16!(`T($2`$Z0L5 +M@"`">8#A3@(A`,H@`34`V#.5C[A$P"1X0B`$@`#8CKA%P"1XRB1B`$(@`(!* +M<D(B +M!(`%PLHD8@!$>$(@`(`JH+P0(AP``U +M"`,%EB$(``(F0!`_N%(@`(`0\ESJ#O`")L`0/[A2(`"`"\#L\V)XU0@"A6*G +M"\`#IPC`&PC1`!<,A2\'``#P`!]`%@07`"!`(%,`0($(@!(`%P,HD8@`$>D(B!8`` +MP,HE8@`J@N(*X`:<#AP(@0`0="%(`!!<` +M(`#;#"$`H,HC;P"`X\H@000#IP.'`B"8`,L)$0`")H`4*0A2``(F@!`_N%(@ +M`(`$\@/`0*`*\`&'$0B>``L5@""$Z`/`P*`#P".'P(`(A0JX'F8'A0JX!2@^ +M!"=V`B9`$'\(4@`$%P`@10D!`,8+S_7/<8``;,23Z`45@""1Z!.5'PC?`\.G +M2($")H`0#PA2``F!R*&!N`FA((8OI`L`!V0"G"!_`%`B%"KAB<`.G"?`!AR"'H;B#N`&G`_`@A\.G +M@^$!P`#>RB8"$)3I#"``M`T+40"`X,H@*P"&]HHCOP,((,```J(`V`6F +M08(5"H4/````4`&&\"4`$``@4``#\!IP0"<`%>(/+_00V0&&%7T`'0`4`88" +MI@2&!*<%!@_S\#B``J7'/<(``N*D`@*"` +M`O"@A8#E4`4!``*%0"44&"BX#WX>"^_U`X4O(0$+``-A! +MP,]P@`"D.T3`U7A%P`"`0\`$%!$P'/`&P#$(T0`(P0>'(G@A"%(`SW"``-!` +M`8`0<0P`#P`,CPT(40`)AR>G@K@)IP#8#*]`(5$@`L!%Z,]W@`!LQ`*'!N@E +MAP/`,'`2``\`AL&I<"IR`@KO_P#;!O`#V$;``\!(P`#8)X5"P`/`"KDX8$/` +M!L"`X';T,Y4(PL4)WP-@AXPCPX\']`G$`!]`%H6G1*0D)4@!$IR:'"<0")$`0 +M/0A2`-_Q1:#^X4B``@`0?0!8( +M\BR-!!(`(`\@0``$&@`@!L*#XD[S!\!$(#Z#[/(CE2T)7@$I"1$@)0B>`,]P +M@`#00`"`BL),P$W`"-A+P`'82L!*<*EQ?@QO_P#;'!06,`44E2`-#AX@3R:6 +M(!P<@#4-#EX@3R;6(!P<@#4#E>6XS"$AH`?T#P[>($\FEB`<'(`U$PD1(`\- +M$"`+%(`@`B45($0F@"""X$HC0"`%P,(CPB0GA0"`"KD%*7X$*(4G<`JY`"$0 +M`(;&2G"I<`2D)$"`%P">%R7(`@`JY!2E^!*EQ +M)W!(P`'81\!&P$IPU@MO_P#;#-A'P`#81L!*)D`@!_`#V$;`2B-`($`F5B#% +M"Q$@P0Y%)0;`N0@1``G!SW"``-!`08"6(0@``B&``#^X4B``@.?U#!68$`'8 +M1L!3E0HG@"\```"`!"+`!4(@!(`$(H(/````0,HD8@!"(@6`"W#*)6(`"G(6 +M#J__R7,&P)OH"<("(@`$"PA2``P>`!0*@0@P`5"(`.`*KK*(V(` +M"W#""R``"KH!AD4@``,!I@;`D^@)P`(@``0_N%(@`(`'\@?`2B-`((&X1\!* +M<*EQR7+Z"F__`-N?\9T+$2#/<(``T$`!@`(@``2-"%(`)!P`-`+81\`!V$;` +MR7(Y\`44@R"`X\PB8H`0\B.5Y;G,(2&@S"(A@`/T@KA'P%$(7@"#N$?`)/!% +M"E$`(Y5!"1X!/0D1((KK@;A'P,]P@`#00`"`2<`4\"4)7@'/<(``T$``@(K" +M3,!-P`C82\`!V$K`2G"I<6H*;_\`VX;"2G"I<5X*;_\`VP'`!L(!X`'!@N+* +M(0$``(>,(,./0<&>\H'B#/0$%(`@@^`D!,O_!12`((#@S"%!A)#T)X48$@X@ +M"KE`(4`@!2A^``*%"127("BX!,(/>/`B``!*)@`@2(4`($$."KHZ8@#8C+@` +M(A,``B$5`!07$!`"($`E/[A2(`"`5O("\,"&+NXAA@PE0*#V!\__*/"2#:`3 +M`H8A$($`*0G"!2:6-0G>`#V(END\B"D)T@`&@"&&"K@">0(@0""`X,H@22`/ +M\`>%"K@`)14@`",3(`'8$?`"($`E@.#*($DEP(8([B&&`B-`(#^X4B``@-/U +M`-BPZ,]P@`#00$"`#""`H!``#P#/<```%C'^"6_S"G%*<`IQ2B9`(,H*(`#* +M*8,(!,!I0>E +M`H:.Z,]P@`"XJ0"``("(Z`#8`J8GA0>1@;@'L2*&`-@%Z2F&X[G*(&$`!:4& +MA2"&(J`'A2*@!88GA0'@`:$'A0+9)K`'A0#9(*`GA0>1@K@'L2>%J7`A@>8) +M(``#VB>%J7`6"J__`-J&A<]P@`#00""`083'A0(B0``_N%(@`(!AA@OR`B.` +M``\(4@#DX`KW`(01#@$0SW````DQT@A/\QH*K_^I<*D'S_+@>/'`+@_/\@AW +MB@YO_RAVSW6``-!`P*4`)H(?!P``\$&ESW&``&S$Q*'%H<:A`"*`#R`````' +MH4BASW"``+BI`(#`@!#P`H8HN"\@!R`B":__R7#/<8``I#L5(0$$`*'`AO+N +M'>\`WL&GSW&``###`('CH0'@`*%^"R`3`*<&IP'9)K`&A\*@!H?`H""%!HQQ:?Y!L_RX'CQP((.S_)Z<$AT"B&`+X``T$``$0(@&G,"(8X` +M@.8LOLHF+!`\9&&\0GP-#%(002P-$P/P`-T"(8``/[A2(`"`RB"!#P``#C', +M#P'SPGWA;4$N4A%`*D`A`B8-$-AG8;C_X,H@C0\```TQRB&-`\HCC0\``'\` +MK`\M\\HBS0-`*P`A%2""!%\($"!`(0$B`"&0`"WPN&=AN$D@S@0084""B?@'FPG\`W07P5B'`(@`@D`#6[^T%S_+QP(8-S_(:<`:`FG+P +M'`BP(!``('IQ0("`0`"`-Z"&``B%!!3^Y4B$!@`?RO@D`$P#9(!A`($IPZ03O\J3` +MX'CQP+(,[_)*)$``X(&`@*&`\73!@<(D#@'1=0';P'O1=0'=PB5.$P\,P1.` +MX\HC8@`)](;M@./,)"*`!/("VP/P`-L5ZQ\+4``W"Y$`@("@@0&``B1,DR&! +M@*(#($```:(/\`#8`*(!H@OP@(&@@"&!`B1,DP&`@*(#(0$`(:*=!._R:'#Q +MP"X,S_(@@`AW`-@HZ4&')HWJ""__!H,]PH```'!P8@`]`````X'AL<`$(G@7@?D"``_!`@@\(@`!D@BM[_/," +M\`#:X'](<,]S@`#,PT:#".I"@D"@!H,#@`"A`=@#\`#8X'[QP%H+[_)\V?#) +M&+DE>/`:&+#/=J```"`''EB0`-T,\*EPX@LO_P#9J7!Z"R__`-D!Y:]][0T2 +MD0#9"_``VL]P@0!P.C9X0*!!H`'A+WGQ"5*!`-@;I@`>@!\`#`\`"!Z`'P`` +M`/``'H`?_@```(H@"``"I@'8S!X`$*H/S_Y)`\_RX'CQP-8*S_+/=J```!RG +MAA$-GA9>"R```-A&"0``#PW>%DX+(``!V#H)```1#1X70@L@``+8*@D```\- +M7A"0``$0V>%\]P@`#,PPX)```<'H`?`'P``.4"S_(5V,]QH``` +M(&$9&``(&8`/`P#@``G8'J$?H8C8T!D```09@`\`!````-@;H0`9@`\`#``9 +MX'[@>/'`-@K/\L]SH```(``;@`\`#`\`"!N`#P```/!^#N__"'4;@[A@&Z-L +M$Q```-D<\%)I57K'_R"G#QP'8)S_((=2+P`(8AAB&@`*$`V`"F!!Z` +M'ZW>`@`&AD`@#P8@AP\.01#&#>__`MD`IP:&0"`/!R"'#PY!$+(-[_\(V0"G +M(X9@>@```@R!#O2$+084SW"``(!!,"!`#@#>.G8)"!`! +M`=XK[B8,S_][AP#:`,$"(\,$`<``(<&``2("`$#!0<)^#^_^J7"$+084SW"` +M`.A","!`#A/H!,!,(4"@$WG*)P$0RB="$*EP\@PO^NEQ#R!`(Y8(H!3I<O\JC`X'B$*`8$SW&``(1!,"%!#@6Y`"&`#X``[,/@?N!XHL'QP#X/C_(Z +M<1IR"'=F"&_Z:'66"^__0"B.`E,E0!40=LH@A0\``#41RB%%`Z`()?/*(H4# +MZ7"^#^_^*G'I<%8/[_X*<>EPM@[O_LEQZ7`Z#N_^J7'I<*()8!0!V0S<0P>/ +M\O'`@@_O_PAS1X`*ZG8/[_]H<`.`((`"@B)X!?#/S)`>"SN+6XN+CL&ABP!*'/<(``W#X` +M@`0@@`\/``#@+R@!`$X@000L&E@P`=T/"9`!SW"``,BK#I`MZ`;>Z@MO^/%PRB""#P``]0#`*&(!E`_B^,HAX@$'\"S(SW&@`(@@ +M%7F@H0D&C_+@>,]RH```13B"!"&^CP``""``V`7T/(()"5X&`=C@?N!XSW&! +M`.@Z8H&AP00C@P\/_)__4R#"`!2Z)KB&(/X'17AE>`*AX'^AP/'`!/!^#(_Y +MSW"@``!%'H`$(+Z/<````/;UT<#@?N!X\<`R#8_R"';/<(``B*W6#^__HH@* +M(8`OH`"`1$`1`"#/=Z```$5&(`$-0!E`(`2'"B"`+X``Y=`$((`/_V__PP2G +M#(<$((`/_W__PPRG`!^`'P!```#@>`#8`*<3;:5X#:Y!(_RX'CQP(&`*'(`@`#;,@ZO\HEQ2'#1P.!^ +MX'@`V,]RH```2,]QH`"`1!BA&:$:H8_89!H8@$$:F(\`0```01J8CP`0``#/ +M<(``$`40>!:AX'[@>/'`!@R/\@HG`)`:<!$T$I@`/"N*5X$'7*(((/``"H&4@-PO(!YN<.!)0E!(_RX'CQ +MP+X+K_**)!```-K/<(``^$B6@,]U@0```P.%3:6,>,]QH```(/N!SW:``%A` +MP(8O<,)_\7#/2\H00!.((T'E1$3I@01$J8L$A`VSW>@```$ +MSZ=2"^_]@-CSV`6X@-GR"^_XG[EB#2``R7`#\`/8"J?.AQ'N?>Y!+H$0!/`` +M%@!`8;G]Z<&^!/``%H!`8;[][LZ'\?'SV*8+[_@%N-L(WXB.`!2&!@,H@@@\``,(A#`O"\H#9SW"@```<)*"5&=BD!!F8I,4!C_+@>/'` +M<@FO\@AR"'8:<0#?$?`O*8$`3B&`!P]X,F@P(8$/H``T+Q`B`@#"N0\G3Q#R +MZAKP+RC!`TX@C0>*#"``J7"PRBL2`C8"N#`@@0^@`&0N$"=/$T1Y"G"2"B`8 +MQ'E^#R_\J7#G[UX,(``'V&D!C_+QP/X(C_*PP0AV`]@:<,]UH```!`BE$!41 +M$`Z%P."_]P`6`$``%@!`0,`@P)S@RB!B#4@"XO+/("(#@<"B#"``#MD$%`\Q +M"A2`,`L4@3!`YPBY)7CDN,`GHA`#YP0GCQ\``/S_#NX,P`SH!=D5N0BA+<`) +MH0/`#*$<&8`/`&P$`%DG#A(#\*H/3_D.A?L(A(,B=^2E5!T`%`Z%&P@4`A2% +M3\`OP9SARB"B#=@)XO+/("(#`L`$((`/````0*$`K_*PP.!X\<`F"(_R6G`( +M=0HD@"^@```P"B.`+Z```"Y4$Q4@!!06ID@3$"#/<:#^:`<%V!6X)*#:"._] +M2B$`(`7P(@XO].EP*>TO*$$#3B"/!^]Y*\@"N3`AC@^@`&0N$"7-$P1^!2&1 +M(PKP,F@P(8$/H`"T+@#:Y@CO_4AS8NXO*8$#3B&`!P#9#R$!``L@0*`F?O;S +MZ_%*<-8.K_TJ<50;0"4$')BET0=/\N!X\<".#V_RF'`*(,"@`-L/(P,``-S* +M(@(CRB$"(\HE`A,6]`8B30`&(9$`B7`-\,]R@`#T*/`B`@!K>@7R#R0,$(]\ +M`>`/>.L(4H%:=`#8*'((\`8GSY#@I,8B@0,!X`]X'PC3!P#>#R8.$"M^SW2` +M`,S!%7S@A._S97_@I/#QB'"."N_[2'$7"!$@3"(`H,PE(I!0#B+TRB!"`Q<( +M$2!,(@"@S"$BH+`-(O3*($($(0@1(!T*$"!,(0"@S"4AD`CRX@ZO_04A0".F +M"L_['0=/\BL2`38"N#`@@`^@`&0NRQ("MB1X!'H`V`[P+RN!`$XC@01`B +M0@#//'`D@Y/\BAV`=Q&#*_]`"P`$`AUT@KO +M^\EPSW*``!@Z(8($Z2."!O#/<:```"XR@:1XS09O\B1X$0$@`/_8X'CQP%(. +M3_(H=L]Q@`",/D"!(8%%>08@38`0\JEPR7%.#B_T`=KJ"Z_]J7`(=7H*[_O) +M<-H,+_2D>(4&3_+/<(``G$]5!2_T`(#QP`H.;_(`V@AV&@XO]"AUM@NO_4-Q6A$`!T)X"/#/ +M<```QR+B#H_R`-C1P.!^I[@/>$`H@0+PR29X90&O]/`:&+"GN`]X0"B!`O#) +M)7A1`:_T\!H8L!MX0W!:$`$'SW"@```$#H#@?PX@0`#@>/'`%@U/\L]P@`!4 +M6P"`X(#/<*````@A&-B#@"<($`#='?#/=J````2OINVF+R!`(P`B`#1:$``' +M`""0)@RF:+A((`$`%6VN#J_XE2!=``#8":9:$``G`>4?9\L-%)(=!6_RZ7#Q +MP.'%"'4L&A@P]=@%N((.K_BI<<]PH```!*^@$05/\O'`E@Q/\@AW*'9&(``6`$`$'Q`0`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0`!8`0`0?$!`` +M%@!`!!\0$``6`$`$'Q`0`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0`!8`0`0? +M$!``%@!`!!\0$``6`$`$'Q`0`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0@";_ +MGQ#=J_6Q`T_RX'CQP$8+3_((=2AVX+C*(((/```"/*@,HO+*(4(#`-D'\``6 +M`$$!X0(=%!#Y"82#A0-/\N!X\<#V#<__$@B/_0'9SW"@```,,:`EH!X,S_?/ +M<8``5%L@@=8*+_H@@='`X'[QP-(*3_((=P#>!/`!YM!^@N86`0H`2B$`(`;P +M0"%`("\A"""%"9,@A@YO^NEP`KC4>")PSW&``.!T,R$0`.EP8@P@`"IQA"\+ +M$@AU,FX4(4$$`"&`?X``G&6PH`>`.7$(X#!@"B=`#@)P67`O(`802B,`$*D+ +M$9`)<*EQZ7+)#6_Z.G`$ +M*3XD$P>3)Q&`$*`(\)L@(`V/,(DX`@PQI@A"N!`%5Z:KH4($P#+W-$ +M+;X5.F+/=X``@!.#="=S>F*6C$IG/PV1$,]S@`#(&F"#,PM1``DDC!``(((/ +M@`#\9@;BRF()(@(#X0M`1;;8\=S@`#<91SC)W-`LP[P"22,$%)I%'J$ +M+0$6VF+'Q0@3`,[8R]R +M1"V^%<]W@`"`$X-T)W);8U",:V<]#9$0SW2``,@:@(0Q#%$0"2+"```@@P^` +M`/QF!./+8PDC@P!2:11ZA"T!%MIBQW*``-QE'.(GX0M +M`1;;8\=S@`#<91SC)W-`LP'@$'B_\5T-DQ``V@3P`>)0>E$*DP``V1/P!(@) +M"P,`:'!R:C1[A"T!%MMCQW.``!QF+.,!X2=S`+,P>=4)DX#/=(``@!-`(@,% +M1"V^%10A0`.#<"=S:V1BZ@J(R0L#@.'Q`>6P?1)U?@;,_\;P`-D$\`'A,'DR +M<1H!"@"1";("`-CQ").`(,,:8(0K@0!5>FJZ%"!,`R]S1"V^%3IBSW>``'@2 +M@W0G`0>+[Q:0B3@"#"&V"$*H$`=7L4($P#.V,O!*# +M="=R6V-0C&MG/PV1$,]T@`#(&H"$,PQ1$`DBP@``((,/@`#\9@3CRV,)(X,` +M4FD4>H0M`1;:8L=R@`#<91SB)W)@L@[P"2+"`')I%'N$+0$6VV/'X0M +M`1;;8\=S@``<9BSC`>$GH*B,<+`X#@\0'EL'T2=7P&S/^9!B_RI\#@>/'`X<6AP0H*;_HH=18. +M+_J+<2#`-&T5><]P@``X/"!@F08O\J'`X'BDX,HB*P"/]L3@RB)K`(OVY.#* +M(JL`A_:,($*%`]K*(BH!`-L.\'AC%7A4>,]T@`"8=S4D`!`4('%!"""#P```!@KN@0@@0\``P``.+DE>L]Q@`#$GX")02B! +M`\]S@`!'*(($`'7@/>,'%X'^AP/'`X<7/<8`` +MA,\@@03I;@@``#+P`-H$\`'B4'I9"I,``-GY"9.`SW.``,2?8(L4(8T`A"L+ +M`L]S@`"X93`C3`Y`)`,4,R--`\]S@`#Q0B#0//=(``G,\S)$P3 +M;'P5((,`-'L!X0`;1`XP>=GQ,04/\N!^X'CQP`AQSW"``,2?`(C/([@RB(K`(;VY.`!VLHB +MJ@#/=(``>'=*9&-LA"D+`D*Z`"&!?X``'&>.X$.QRB`K`(7VY.`!V,H@J@`( +M8T*XX'\$L>!X\<#/<(``Q)\`B(P@PX]D"`+TSW"``-Q].IC/<(``B,\@H!(- +MK_<$V-'`X'[QP.'%SW6``(#/((6)Z<]P@`#'&#@`C`*AT@B4"D`/P@"4"D/_8P"4$ +M$$B]A"H+`M-KE7['=H``G&4G=K1Y**;/<(``-,RT>`RF$FN4>,=P@`#<9@`@ +M0@ZXLH(E`16\LL'&X'_!Q?'`^@H/\M4(E0,/"+0`JF@)"/0"`=L`VQYA`!;" +M$``@C`^``!QS3*P.%L(06JP9Z[IA'!+"`,]W@``\<[QG2*RZ8282P@!`(00( +M4JP4)$(#$!+,`+1_G*\1$L(`7:^J%LP0`"""#X``G'0V&@*#N!;,$$0:`H/& +M%LP04AH"@Q'KO&'4%,\0`"6.'X``_'/@KMX4S!"*KKQAZ!3,$)2N5B$."AQF +M"A3,$!YFUAH"@Q@6S!"`X\]P@`!\=.0:`H.W\H`A!0BZ8082P@"X8%*HN6$0 +M$<$`/*BK\&ZX#PCU!1U[`=H)"!X``-JX$%)@.:Z!"(#`\HA@0`#\E`BP0'ENL0A`@/DNM`C8@'CNM`A +M(@%5&-@`X']6&%@`X'@(<@0@OH]@````+,C/<8``R*L`((,/@``HK!1Y!?+) +MR1R0%PB>`@0B@@]A````$PJ!#P$`````V`"Q`=@<\)S-R1("MAL(W@$!B3(2 +M@@`-"($``-@!J?/Q`>`!J0OP`(DQ$H(`"PB!``#8`*GG\0'@`*D"V.!_`*OA +MQ0#:_]P3:15X`""##X``8[J`JP[PSW"``'BQ2V``(H`/@0#(.39X9*A@J`'B +M3WKG"A*!X'_!Q>!^X'CQP.'%"''/<(``9-\M8(PEPY\%\HPA0HG%]O[8,@EO +M\HNX*0`O\JEP\<"J#\_Q"'7@B,&`A.?*((8/```2-!`)9O+*(<8#A"\&%``A +M@'^``'A!(8`!W('A0(`@A!^X'@+Z8"XSW*@```@,*(!V0<:6(`0V2"B#0;/\^!X\<#AQ8P@ +MSX_*((T/``!P`Y0`3?(@W<]SH```(**CU!L```#8X@WO\XVXHZ-]!\_Q\<#^ +M#L_Q*'4/"5\%!""^CP`&```>\CT-'Q7/=J```"!L%A`0%/`XAU8(;_**()H* +M#O#/=Z```$6XA_(-S_@;A@(@``3C"(./```0)^<-'I41!\_Q\<"N#L_Q"';/ +M<*```"#[@`7=%;T+A<\:&+``V`NE&_#/R0NESW```$0<2@A/^`ARSW```,XB +M_@\O\LEQ"_"""`_TSW`/`$!"1@LO]NEQU0A0@,]PH```#`V`0B``"$@@``#? +M"(2#S\D+I:T&S_'@>/'`'@[/\4AW0(D(=@&)&+H0N`=Z`HECA@BX1WA#B0=Z +M`(8'((D`!(E%B1BX$+I'>$:)"+I'>$>)!WH!A@<@A0`(B4F)&+@0ND=X2HD( +MND=X2XD'>@*&!R"$``R)38D8N!"Z1WA.B0BZ+XE'>"=X!WM*)$`A9/!V#J_Z +M`-EZ<,IP:@ZO^@'9!R,3("EP7@ZO^@+9!R,3(`EP4@ZO^@/9((8'(,`$!R$) +M`$$J`!8^#J_Z`-D9<.AP-@ZO^@'9!R`'`HAP*@ZO^@+9!R<'`*AP'@ZO^@/9 +M(88'(,`!!R$%`$$M`!8*#J_Z`-D(=&.&!WM!*0`6J@VO^@#9"'5!*P`$#WB>#:_Z`=D'?4$L``(/ +M>(X-K_H"V0=]+R!'`8(-K_H#V22&IW@'(1,`02T`!G(-K_H`V0AU02D`%`]X +M8@VO^@'9!WU!*P`"#WA6#:_Z`MD'?2\@!P%*#:_Z`]DEAJ=X!R$*`$$L``8V +M#:_Z`-D(=4$M``0/>"H-K_H!V0=]02D`$@]X&@VO^@+9!WUO>!(-K_H#V:=X +MIH8O(<T$M``(/>.(,K_H" +MV0=[+R!'`M8,K_H#V6=X9X:`)/^O!WL@YD$K``1!+0$2+R"'$D$K!R1!*P(" +M+R5'`T$J!A1!*PLB+R#'($$M%11!*A(2+R8'("\A1Q`O)\$$H`08@KT$H`00AKT$H`0(BKP.O02H`%@(,K_H$V00@ +MR`3H$$H`08DKT$H`00EKT$H`0(FKP>O02T`%JX+K_H$V00@S03(<*(+ +MK_H$V00@``4'?6EPE@NO^@39!"!``@=]"G"&"Z_Z!-D/>`=]`H:G>$$H`08H +MKT$H`00IKT$H`0(+KRJO02L`!F(+K_H$V00@PP2J<%8+K_H$V00@``4'>TIP +M1@NO^@39!"!``@=[*G`Z"Z_Z!-D/>`=[`X9G>$$H`08LKT$H`00MKT$H`0(N +MKY4"[_$/K_'`:@K/\:()(``(=0#;*-@7\!4EP1`5)0(0@(+`@8"AP**!@L&! +M@:'!HH*"PH&"H<*B@X+#@8.APZ($XV2XUPL"@`';J_`0%0`2.+C^"J_Z!-D/ +M>+X*K_H`V0AV`(4PN`]XZ@JO^@39#WBJ"J_Z`=D'?@"%*+@/>-(*K_H$V0]X +MD@JO^@+9!WX`C<(*K_H$V0]X@@JO^@/9QW@`I0&%.+BJ"J_Z!-D/>&H*K_H` +MV0AV`84PN`]XE@JO^@39#WA6"J_Z`=D'?@&%*+@/>'X*K_H$V0]X/@JO^@+9 +M!WX$C6X*K_H$V0]X+@JO^@/9QW@!I0*%.+A6"J_Z!-D/>!8*K_H`V0AV`H4P +MN`]X0@JO^@39#W@""J_Z`=D'?@*%*+@/>"H*K_H$V0]XZ@FO^@+9!WX(C1H* +MK_H$V0]XV@FO^@/9QW@"I0.%.+@""J_Z!-D/>,()K_H`V0AV`X4PN`]X[@FO +M^@39#WBN":_Z`=D'?@.%*+@/>-8)K_H$V0]XE@FO^@+9!WX,C<8)K_H$V0]X +MA@FO^@/9QW@#I0'CBN.J!LO_-0'/\?'`P@C/\4")"'4!B1BZ$+@'>@*)"+@' +M>@.)1W@`I42)!8D8NA"X!WH&B0BX!WH'B4=X`:4(B4F)&+@0N@=Z"HD(N`=Z +M"XE'>`*E#(E-B1BX$+H'>@Z)"+@'>@^)1W@#I0#?//##A4$N`!0/>#H)K_H$ +MV6"%!""`#P#_```'>T$N`!(/>"()K_H$V00@@`__````!WO/>!()K_H$V00@ +M@`\```#_!WM!+@`6_@BO^@39#WC/<8``@._P(<$#9W@G>"&%!*4G>"*%!:4G +M>".%!J4G>`>E$.4!YXT/DI)-`,_Q37#/<8``I`<`V@L(W@%4D<.Z@8'/<(`` +MS!K/`@'8`_``V.!^\`\<`C!`)!`TR7`*<18-K_T(VFIPJ7'"".__J7*I<(IQ`@VO_0C:"G#) +MH`V03P`>$O>1\)$P(`W`\D3!!+?/CSAGI6K65X)=J*"2```-L$\*(* +M(```V-4&C_'QP.'%SW"``!C0((C/2IBSW6```PI!+IA +MC88B_@,Z:T0C#`-BC0`5A!`(NWQD9(U&O*.-"+M]92\G2`,EV_0,.Y`=JX=%X((`#8`]QAQ`4<@C"$ZLEQ-_`7 +M"E``0PJ0`,]P``"Q#?(.[_%(`D<0C!(N`H<`C`+',(P2+MCP]SQ"3!X2+@''`(P(!0` +M,08<0C!BP$BX"1P",`;9SW"``!30`(#/=(``D$&$*`8$@<(&V$#`T-@`VYAS +MN',`)$8>U@P@`?AS706O\:3`X'CQP`#<]!P(LT'"0L,"VHESF'2X=-AT,@_O +M__ATH\#1P.!^X'C/<($`,`#A!J_RBB%%!N!X\<#AQ<]U@`!86P"%A.C*"4`! +M`*4)Z"*0A^GN"$`!^?':"4`!`*4%Z`*0^0@>@,X(0`&`X$0/(O3*(&("[02/ +M\?'`SW"``*RY`(#/<8$`T"VV#R`!BB(:#IH/S___VL]P@0`P`2P8@@`HNBT8 +M@@#1P.!^X'CQP.'%SW"``/C/`(``W0CHSW"``&PL`(`)"%``J7`&\.8.3_G\ +MZ`'8C02/\?'`SW"``!C0`(C>#._W`-G/<8``%-!R#>```*$R"@`!SW&``/C/ +M%XD3"%$`%HD'Z/H-S_\J""```-C/<(``F*L`@(#@Y`\"^]'`X'X`VL]Q@`#< +MSQ9YX']!H>!X\<#/<8``;"P@@0OI`=K/<8``W,\6>4&A7@\O]`C8T<#@?N!X +M\<#AQ0#=#?#/<(``W,^V>"&`"PE1``"`0'@!Y:]][0W2D,]P@`#XSQ:(@.`L +M#B'TRB`A`M4#C_'QP$H+C_$:<#IQ2B,`(``8P`1J<#X(8`$`&<`$"';/<8`` +M1-;"#B`!HY#/=X``6%N1Z,]Q@``TUJX.(`')<(#@S"6"GP``@3?,)8*?``"` +M\PGR((<#D0C@`[$%D6BX!;$6\,]Q@`!,UEH.(`')<$"')9()Z`.29+D$X`.R +M);((W0;P+WTHN0B]+WDE?7X.(`$`V,]V@0"L'8PE&)(*(H`O``"&W0>V!/(` +MWPSPSW"!`%0C`(#U"!Z`<@_O^0IP`=\=#8$4SW"!`%0C`(`1"%X`7@@O^BIP +M@.#*)V$01@\``3IPSW"``*0'`)!`(1`D%P@>`@IPR7&6":_]`]I`(8`B"/!` +M(0`AR7&"":_]`]H*<"9N>@FO_0/:IK:'[\]Q@``8*0`9P`1]`J_QJ7#QP"X* +MC_$(=\]V@0`P`4$6@!!`%H$0"+@%>4(6@!`0N`5Y0Q:`$!BX!7F`X$,6@1`8N25XAB#XA`[RZ@M/^0#8C@X@`0"E"@]` +M`&H,+_0)V!#PZWH.\IH,#_L(Z(H,#_N`X+`-(OO*(*(`#@T/]^4!C_'QP'H) +MK_&`V@AW!($H=B.X4R!!`4`F#18X90$8D@!.(<(/'0H5`J8+K_(`VP01!@`'(X\#`B:##S@7JDC[8YMC +M0"L,`S2[97Q<9`P@1"``'(T\#`""#'R`DVW#[8]MC0"M.!"^[Q7N; +M8PF)W:CFZ17N[8PB01$``'(@\# +M`B""+[MT40A?9_YF0"X"$S2^Q7IZ8@F)`*@X#-+I%?IYF!R4"$\1Z.!$$``]MC!R8/$V1_3X&'?P`B@0^T22$(^6&Y84`IC04J +MN:5Y>6$'(TT`Q'T')<\0`B:-#^$)GMK]9;QDM6P[O(5]/64'(4P#9'P')$\0 +M`B&,'[\_P$S\9)YF0"Y,$C>^Q7R\9`YMC!R3.$*1^!R8/$P(FCB])%E8X_F;984`I#@4LN<5Y>6$'(TX` +MA'X')L\0`B*.+]`IH^_^9MUEU6T[O<5]/64'(4X#9'X')D\0`"..'T0"4Q3^ +M9MQD0"Q.$C>\Q7R\9`YMC +M!R3.$*1^AWX"(X\O+!@X!-]G^6%`*0X%++DE?GYF!R./`X1_9W\`(($OX2'F +MS?EA/64U;3N]I7G980[MC!R7/$"1_IW\`(8PO6D7M +M%/QDGF9`+@P5++[%?'QD!R,/`Z1_9W\")XX/'%;[%OYFV6'5:3NYQ7F980[MC!R7.$"1^IWX")8\OU7)VL]]G_&1`+`X5++S%?'QD +M!R,/`Z=_`B*.+P4`OL;^9MEAU&D\N25^GF8')(\39W\"(8$OCGA_"?EA/65` +M+<$2-;VE>=EA!R&/`X=_`"*-'YUM(F']9;MC0"L-!#"[97T]902ZG/_F;984`IS@(UN<5YF6$'(0\#9W\")(XO1`F@M/YF +MW65`+0X4,+W%?3UE!R%/`X=_`B..'T!!D$/^9MMC0"O.!2F[Q7N[8P7EA!R'.`*=^`"*/#Z(?^'S?9_QD0"P. +M%#"\Q7P\9`[MCDGYE?@00R5[IWL")8\/\W!N,_MC?F9`+H,2-K[%>SMCLGYE?B=^`B./'Q``@PO?9_QD +M0"S.$S&\A7Y^9C)\Q7QG?`(FCP][>B^BGV?]94`M3!4KO:5\W&1R?85]QWT` +M(8\OJ&]/?K]G^6&V:3JY)7V=9=)YI7F'>0(B@@_3`2`966$[8T`KCP(VNV5_ +MOV>2>>5YIWD"(8(?_ESLO%EAV6%`*<(#,;DE>OIBLGE%>>=Y`">##PA.H1$[ +M8YMC0"M!!2N[97E98?)[)7M'>P(CC"^L"'Z!FV-]979M.KVE>SMC4GQE?"=\ +M`B*-'\5"RPV\9/QD0"R-$C:\I7Q\9#)^A7YG?@`@C1_7*KO2W66Z8D`JS0,Q +MNJ5ZFF)R?45]AWT"((XO>11O+-UEN6%`*4T%*[DE?5UEXG,A@&"@N6$AH"*` +M.F(C@$*@F6&!`6_Q(Z#QP#8)3_&")`,\&G`H=WIR6G,*)0`A"B%`(<#A5B04 +M-(MUTO;2""``J7"I<`IQ\@@@`.ER5B0`(Z(/K_^I<58D$",0WY;`VG``WLEQ +M5@MO\D':0"0`)\EQ2@MO\D':"G#*<0(/+_WI<@IP0"0!)_8.+_WI<&$(`P.:Q]UX((`"I<*EPRG%^""`` +M0-H`W@KP\"*!(S(E@B-J""``J7`!YO$.Q)0J^)JP@8@`^ZF/[<#!B`#S(0=E0`V22@X'\EH/'`+@A/\0AU2'=$@"AV%B+! +M`R2@"PFE``6``>`%I4$O01ER%0!/\>!XHL'QP$'"8L,*)0`!@<-`)`0R5@[O_P': +MT<#@?Z+`X'CQP,]P@`!86P"`!9#9"!0!?@S@``#8((B!X\KD(T0!>#.``!-@@B`'8@N'`>$\)4`""X?[$(2@0`0N25X0Q*!`!BY)7B,(`2`$/(0V`AQ0!I"`"BY01I"`"BY0AI" +M`"BY0QI"`(H,C__1P.!^\<"R#@_QSW6!`"0B!XT$Z`:-!:T`WC(((`#)<":- +M!8WU"0&`QJW%K?4&+_''K>!XSW&``&#_0)$)"B,``;%!L;T!P`#QP%H.+_$# +MV;+!0"00,7IQ!^BG"%``A0B0`&IUB/`*(H`O@0`D(@42C2`*<-)MU'Y"=@@6 +MD1`!V5X(;_HJ<@AW`O`H=P)O)]D@KP_9(:\`V2*H(:@FL"F.`>4@J"J.P;TC +MJ"9O0"8`$Q(,+_T(VA#8$*]`(T`D+R,((`82@"!`)T$4$PT`$-)MU'Y"=@B. +MMPA`A`4:0B/#\<]Q@0!D(A:)M(F'N!:I`^5`(8`%"G'."R_]J7(\\,]V@0!$ +M(@IPV@\O^EB.(]I`J`+:0:@B:,]P@`!@_T*0".!(8`"I&HYAN$4(]0,`W3,F +M`'"```S30">"&8ZB>`?=`:G#Y&,(02`NO<`VDAQ2'`4\``D +MCS#`CS(F#`#989EA+WD!X`PG`(``)$TP@(W*("X`@*_`K0'BC"($@*OW`-@( +M<0AT#O`!X`]X`"0.,*".`>2Y82]Y`"1/,$"/0*Z@K^<,1)$`W1GP`>`/>``D +M#C!`C@'E66$O>0`D3S"`CX"N0*\R)`PPFF)/>C(DC#!`BX=Z`1N2`-4-!)&Q +M!"_Q@"0$,.!X"'28<4AP:'$`VCT'[_^)<_'`'@PO\0#8SW&``&PL((&`X;[R +M1"(`4X3@N?+6#T__@."J\L]P@`!86P"`!NC/<(``8"P`@(;H1"(`4PD($`(` +MV*;PSW6``*0'PA6`$/KH0@D``&8)(``(V,]V@`!86P"&@.`5V#CRSW"``*BM +M`(#/<8``]*W:"&_\(('/<:````P$H0"&"H!B"&_Q+H4/A1,(7@8@A@.1!.`# +ML0619+@8\"$(W@8@A@.1".`#L061;+@%L0'9SW"``'0L(*`+\!,(G@8@A@.1 +M".`#L061:+@%L0#8"B``H$HA`"`*(X`O@``8*0`;0"0@AB_T*ND4E0':`!N` +M($D(W@&CD>61"/!B#B_Z`B>/%$)UL'TU#W(00"4"$P"&*H`R8D]Y"+DHND5Y +M);!`)8(3#N%#L$-IU0]ED$8BT@`$&$0$!/`F#@_ZJ@TO^@IP`(8*Z`*0".@1 +M"!$@O@^``$X/@``$\)8.@```$P`@@.`5V,H@(0!-<2$)G@$-\,]P@`"D!P"0 +MAB#\`-#@@-S,(`*#7/,5V.D"#_'QP,]P@`"LN0"`SW&!`-`MX@V@`(HB&@X` +MV<]P@`!86R"@T<#@?N!X\<`O"!$"37$G"9\!SW&``*0'88'/,.Y)=H__`-LB#F__`MC1P.!^\<#:"2_Q0"$" +M!:+!"'8H=0#9$?"$X6\@"P#P(@,`4R%,`$XDP!`#N!E[`"1`,&"H`>'E"12" +MSW>``%#3J7#I<0/PJ7`B;Z8)8``!V@6%AB#X`8P@!X#W]8MWJ7#I<8X)8``( +MV@#:#_!!*H``\"4`$%,B0P!.(\$``[DY>%QF`*P!XND*%(6I<`#9H@LO\@3: +MZ7``V98++_((VJD!+_&BP``8@`]%9P$C!!B`#\WOB:L(&(`/NIC^W`P8@`\R +M$'94$!B`#]+#\.$`V2:@X'\EH/'`"@DO\?APSW"``*@*(*``%P\`!!<.`.EP +M"!<)`,EQ#!<&`"ER$!<(`,AS"B0``D8,+_I*)0```"`-`D,NB!"I<.EQ"7(I +M""_Z2B4`"@`@C@%#+X80R7"I<#N_YBB4!```@C@%#+X80R7"I<_YBB6!`0`@C@%#+X80R7"I<_Y +MBB5!`@`@C@%#+XH0R7"I<4ER"7,*)$`"A@WO^8HE@0(`($\"0RV&$.EPR7'( +M_YBB4!`P`@ +MC@)#+X@0R7"I<0ER*7,*)(`!,@WO^8HE00,`((\!0RV-$.EPR7&I<@ES"B1` +M`A8-[_F*)8$#(7#8<$,NCA#I</'`Z@^/\`AV&G$%@$AW02C"`,6Z`6F#0CE`":&`>$FID$O +M0!7Q^EP`-[) +M<98)[_%!VE8D$C1`(@`HR7&&">_Q0=J*<.EQ.@VO_&IRBG!`(@$H+@VO_&IR +M@"`$(Q'P`"2`,UP0@0`!YD@&$(`P.:P]XMVM@VO +M_\EPR7#I!XA"@&!,]Q@0#8(@`A@'^``'A!0"`"!!C@0:$'H>!_#:'/=(``S!I4%`$6 +MSW"!`-@B(J#/`"U +M!XI&B@BX1W@!M4&)`(D(ND=X`K5#B0*)"+I'>`.U!(DEB0BY)W@$M0#?3?!3 +M)Q$0%"!.)$&.((X(ND=Y)WB^#"_\$'A@E4`A@B!X8!0@@2``M4")(8D(N4=Y +M)WB>#"_\$'AAE4`A`B%X8!0@@2`!M4")(8D(N4=Y)WB"#"_\$'ABE4`A@B%X +M8!0@@2`"M4")(8D(N4=Y)WAB#"_\$'@CE3A@`[5!CB"."+I'>2=X3@PO_!!X +M))498?EA`>

.]_)+5M#Q*2G06/\.!XH<'QP#H-K_`Y<:7!)!Q",0AT&7*X +MEP +M&@KO^0':BW'I<`X*[_D#VNEPJ'$&"N_YR7)^"N_YZ7#I<*EQM@KO^>AR"-P[ +M!:_PI<#QP+X,C_":"6``I,$(=R"0I&A`(!`$0(W/<(``%/_@NL`@(@3`("$" +M.G!$(0`#%0@1`BAPAB#\`XP@`H`"V$/W`-@8X.BYT2%B@@;9`O0`V3A@^&!` +M(!("SW:``%A;`(9B"6``!9``V4"7`B"`!.>ZRB5!``3R+)=3(<4`$'P*)@`' +M0"0',2IPJ7$*X +MSW*``*0'`-@#\A22P[A@B8*)"+OA@04DT!!!@L]Q@`#,&L]S@`#8S^"Z`MK5 +M(>(,RB)A`-4AX006>2"CTVK/<($`V")`(!$%>G`!@=1^6G(1#R008G81#P$0 +M`)$)"`($`-AB\`*&(P\!$!2.#.@#AD`E`16@IJH*K_P%V@"&XJ@`V!2N3_`! +MX-D/`9`4CAT(4``$AD`E`16@IH8*K_P%V@"&XJ@!V!2N#""`KP```(`!W^KV +M"B"`+X``Y-``$($@H*8/(8$$`!A"($HB`"``$(`@"W\<\D`JS2"T?0`ESA0$ +MAB.&.@JO_`7:`H:+`O)@CP:'4&L0OT!('I<@'@!*$`@R&#!.!N#.__ +M8X,!CRIQ`*X!C\:XA;@!K@"/`JX@V`.N`849#1454FU4>L]S@0`\/$)C +M\0F!@`3PBB7_'Q$-`1'/<```QB&6"\_P#O`R;31YQW&!`#P\0H$#ZF!Z(8'* +M"2``J7!Q`H_P\<#AQ0#=$?`2;11X`""!#X$`/#Q"@07J`]A@>B&!H@D@`*EP +M`>7E#12510*/\.!X\<``V@7PB@D@`$AP`>+["A2%T<#@?N!X\<"N"8_P`-X4 +M\+)NM'W'=8$`/#P`A8HG_Q\7",`#9@X/]T*%!.H"V&!Z(87@I0'FVPX4E>$! +MC_#QP%H)C_"IP5IP*'9(=4+##!P`,1`<0#$$'(`QSW"``!C0((C/<($`R#DV +M>""(SW"``'RQ1"D^#0"`SW&``/C/&!&4`"=P0"`0`0#?0"(3`@"0`".5)%,@ +M@(#,(&*`6O);"-$`0"01-:EP"G%*#N__*G+/<(``%-``@`HF@"^``!3_A"@& +M!``A@G^``'A!#H+@N,HDPB-`)0`O)@CP!K(+]&>2`>,O)LCP9[(% +M]&B2`>-HL@"U`-@"K2#8`ZT!D0C?`K4"D0.U""(SW"``'RQ`(!$*3X--"!7#@#?#0D1(L]P +M@`#XS_B(`L``W@/H4R>.(#X-+_?(%(`PE.`2`B8`2B%`,(HB_R]2=08"`0`* +M)8`O@``4T``5`2#RR0T(3@#"#B`2*'`4Z!\+$"`"O;1]QW6!`#P\"!W`%`0= +M`!0"V",@P`0*P1"IA>X1&8(%'_"#YLH@X0(5\H+FRB"A`A'R)0Y1$%$G`*,1&4(& +MRB!!!@3R"=@1J4(O`B+!N@:Z17@1J0+`%.&>#&_\$-H>P0_8*!F`!$`A`@@1 +M&H(%$JH$P#09A`7SJC89A`4MZ`;`*^B`%``PBB$&`B"P`!4!(,]P@`"P080I +M!@0P($`.@.=$(`$$@!0`,"RP@!0!,`R1RBF@MO_`;:%PD1(0MPAB#\`XP@`H0%]!#87\`( +M\(`4`3`#P!#A=@MO_`;:'L(`DA_!.&``L@#`SW$!`-3NB!P`,`'``-J,'``P +M!@X']$H("(8(D`V@\,P1"!B&&) +M"PS`$$AP!O!BB`*)^PL!@`'8X'\/>("08)$`V@\,P1"!D&&1"PS`$$AP!O!B +MD`*1^PL!@`'8X'\/>,]Q@`!86R"!2H$CD5EAX'\08>!XSW"``*RY`(`I`J_Y +M`-G@>/'`+@QO\)AR"'?/D^"H_Y$/`! +M@0#:!.A`@0>!&F+PZ@#8&_`:"J_YP(`()@`00"<.&^$(I(,@@RAP4@JO^C`H*6P0"`!"RJ@!A@$`0#9(K`B&$(`*01/\.!XSW"``*RY\0&O^0"`\<#/ +M<(``K+G/X&`AWV!@J1\A7NB@(*!AWV"@J1\A7N# +M@`.!!WP#@H1X!2#^@`'8P'C@?\'%X'C/<(``6%L`@.!_"H#/<(``6%L`@.!_ +M"H#/<(``6%L@@,]R@`"LN0""!0&O^2"!X'@(&#U`&_\F&#@>/'`SW.``*RY$@FO^0"#A>A`@P&" +M@^@`V`3P`((G@CA@T<#@?N'%X<;/<(``6%L`@,]R@`"LN8""()!'A*"$`B". +M`!T.8A,[9J)[H82B>QL+$@`#A!<+`P!88PKP0H1">T.$"PN#`#A@`O``V,'& +MX'_!Q>!X\<`3"%$`R@\/_^X/+_\`V`OP!-@`V2AR)@[O_RASSW&``%A;`*$F +M#\__M@[/_]'`X'X````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`!4```!$NP`````$``]YSW"!`$`#=08OY@#:X'C/<(``C#\`@(;HSW"``(@_ +M`(`%Z)D$K^(+V,7)@.#*(*$"Z//@?N!X\<`R"4``K@B/Y5H/(`$"V,7)!^@` +MV,4:&+#P_QWPSW"!`+P#`(`(@`GHSW&@```@.X$_MW\\/\,]P@0`X#PV` +M@.#*(((/```L,!P"0N!Z#"_MW\^:"*```-C_V<]P@0"\`R>@T<#@?N!X\<#A +MQ<]U@0!``^P<2+//<($`:`-!P,]P@`!`,4+`SW"``$@Q0\`!V$3``-@'V0S: +M`ML*)(`/@`!0,0HE@`^``"@R2B:`"\X,+^;X<,]Q!`!(!!H/+^:I<`#8"''. +M_Z4`+^"EP`#8Q1H8L'KQ*'(/><]P@0!``V4%#^;@>,]P```",'T!3^#@>(D' +M3^6)!T_E\<#AQ<]U@0"\`P&%!@ROX@*`"'$!A8(/;^4!@%4`#^`Q!B`!`MC@ +M>/'`U@_/W\]PH```(+N`7@JOX@O8$@Y@`*EP"B8`D,H@@0\``$@T@ +M`0+81_'QP.'%SW"@```@NX"F":_B"]A>#6``J7`B@(PAPX\;\@.``-D"($"# +MRB%O`(#ARB`A`-=P````$`78D_?/<($`O`,A@,]P@``(,A(++^TC@0CPSW"` +M``@RE@H/[0'89/\Q!\_?\<"R#L_?SW"@```@VX#/=X$`O`,!AX#@RB"!#P`` +M/C`(`$'@`=C/=8``B#\`I8PA_X]*(``@`(<&]`&`.@^@`0#9'F8`A\]R!`#0 +M(`&`7@YOY``8`+\,7)@.#* +M($$`!O+/<*```"`;@`'9">D`V<8:6+"&#B``Q1I8L*&&*@Y/Y<]PH```(#N` +M`H6,(,./$?(#A0(@0(``V/'`<@WOWP'8SW6``(P_`*7/ +M<($`O`,`@,&`SW"@```@&X#:#0```-D@I0KH%@DO[=_/!]B*(?\/1O\%\.(. +M(`#)<)T%S]_@>/'`X<4!V,]U@`",/P"ESW"@```@&X">#0``X@@O[=_/`-A] +M!>_?`*7/<($`O`,!@`*`C"##CP78RB!A`+T#S__@?N!X\<#/<8$`O`-`@8H@ +M_P^`XLH@@0\``#4P/`8!X":"&>DGD2\)'@`G@@3I1Y$/"A\`SW```%`P(08/ +MX!<*7P`!@<]QH```(#N!(GA((```T<#@?N!X\<#AQ3X*K^(/?<]Q@0"\`T"! +M(H(/>!T(00`!@A4(3@/C_]=P````(#@+[?_*(&T"U03/W_'`5@S/WPAW!@JO +MX@#=SW:!`+P#0(8/>&*"[W\`V8&"#R'!`R1\SW&@```@;!$0`$L(P0`C[`>" +M`8`"(``$/PA2`,[_"'7BA@+PX(<7[P"&!X`K#P`0!I?S")Z`D@B@``*'_A`! +M@><)WX$/D-\(WH.AAP(E#11()0T0003OWZEPSW"!`+P#`(`'@.!_`8#@>.!^ +MX'C//S"Y2`AJ*'HBJB'0?O[-_/X'CQ +MP.'%SW&!`+P#HX&`Y5@+@'M0#8 +M`*6)`^_?J7#@>/'`#@O/WPHE`)`B\L]V@0"\`R2&0($#Z0;JSW```#@P;@P/ +MX`2&H*"DIA'P!Y7@N,H@@0\``$HP3`PAX,HA00,'E:"X![6DIJ"%\NTM`\_? +M\<"Z"L_?`-T$Z$>0#PH?`,]P```I,!D$#^!I"E\`SW&@```@^X'!@$$*G@`& +MD!$(D0#/<($`O`,`@*&`%NU"#T_B@.``V`KTSW"!`+P#`(`!@"H+H`$!V0)^ +MSW&!`+P#`('$H`"!Q(`")L`3$0A2`-_/B@[O[,EQ`-@(\`'8!O`.#N_LW\^I +M<)D"S]_QP"H*S]\(=BBX#W@$N!1X`""-#X$`/`DE%8`0">C/<```!`+P#`(`(PD!`(8.3^*-Z`"'(84'@`&`(G@/"(4/ +M!P``\`'8*O`"AS4-`1`'E8:X![4"AX#@RB"!#P``/3```P'@`(`"I[/_MPA1 +M@,]QH```(#N!M@WO[-_/T_$`ATB`((4+#8$0**`#\``80"``WL"EJ7"3_\EP +ML0'/W_'`X<7/<($`O`,A@$"`(*!!H(#ARB"!#P``/#"D`@'@IH&BH`3M!Y43 +M"!\`(H'/<```-C">"B_@J7+/P5[P=@@A0:X +M(@HOX&5Z/(UBCP>6"PB>`2L+00`+\"<+00`CCQV-'PD!`/X5`)$7"!\!!A`` +M(5,@?H"@"*(`RB!"`\4`S]_@>/'`8@C/WPHE`)#*(($/``!",,`!`>"I=@?P +MX[E0#^+_RB""`\"&#.XFED0A``/O"!&#SW```#LPF0$/X*EP1O^-`,_?\<`> +M",_?"B4`D"AVRB"!#P``03!X`0'@SW"!`+P#)(!`@0/I!NK/<```0S!R"0_@ +M!H4'Z,EQXO\`V`:E!Z4(A07HR7'>_P#8"*7_V#T`[]\"I>!X\<#&#Z_?`-K/ +M=X$`O`/#ATAU$/`'E@'EX+C*(((/``!X,"`)(N#*(8(#`(;)<@AV\NX$AQ!R +M4-S,)0&3RB""#P``>3`$"2+@RB%"`^$'C]_QP'(/C]\:<,]V@0"\`P"&`=TF +M@.*`#^E'D1L*'@!"AA,)@0!(@`?J(8$@X"X(8`"IH#BRB4I +M$!$)@0//<($`.`\-@.7H60>OWZEPX'CQP/8.C]\(=87@RB"&#P``(S!<"";@ +MRB%&`\]V@0"\`R"&!X&`X,H@@0\``"4P0`@!X""&`8$/($`#`:$`V'X/+^4/ +M($`#'0>/W^!X\<"J#H_?"'6%X,H@A@\``"8P$`@FX,HA1@//=H$`O`,@A@>! +MB.@A@<]P```H,/X/[]^I``-@/($`#-@\OY2&!R0:/ +MW^!X\_LW\\'V%H- +MK_\BAP3PJ7#'_P:7X+@1\L]U@0"\`P"%1H!0=\H@@@\``&\PU`[BW\HAP@,` +MV`NECP,``(:X![?2"6```H?^$`"!Y[C,`@(`P@E@``*')I<(=40A``,1"!$# +MSW```%$PF@[OWT*'`86,(/^/"/3/<```=3!^#N_?((4&EX<(G@!9)0,2GY,A +MAT\D`!%=C1^S@.+,("&@%?1/)`(1W(V)NCT.\A!?LS4(GP)/)`(1B;J*NE^S +MSW.``*04`(,!X`WPZKC*(@$`"O*JN!^S$'K/`?X5`)&%N/X=!)`C%8`0C""#CTWV`>`C'0(0 +M"?`/"%X!_A4`D:6X_AT$D$P@0*".]`:7XKC1("&!/?+$C0#9"B&`+X$`O`,` +M$0`@#R&!`P&`"WGRR21X&_*2Z'X+8`')<([H:@M@`_?08(/E>^X``WB_\H@@@,5\`_H/@M@`_?08(/E>^XC`SA_\H@@0,&E^.XT2!A@4CRQ(T`V<]P@0"\`P"`#R&!`P&` +M"B&`+P```(`+>?+))'@;\HOH]@I@`\]P``!V,,EQK@SOWT"%'/`'Z+8*8`')<"^5!.@OE1T)WP,$(4$$ +M@.$!V\![SW```'$3`)I$3`)I<4'``T);G`N06Y)7A$ +MP(MP&-FJ"&_K*MH'EPD('P$`WE?PSW6!`+P#(84`%100`!$1``@1$@`(%!,@ +MZ@X@``*')I<(=E,A0`"#X,H@@0\``%DPK`O!WP:71"`^A42.$/+/<8$`.`]6 +M>9&!(NQ!*(,`P+L"NR2X4R`/``:_$O!$(#Z*%O+/<8$`.`]6>9*!$.Q!*,,` +MP+L#NR6XP+CW:",6A!`*<@"&(A:!$&!\Y7L`A0#>&0@!!0*`%0C!!"&%`($- +M"$$$`H$'"(`$`=[)$3"14!$FD4>`!B>^A*)4`@)?#-@PHC0"4'\``?0!0!V+IP +M>G#`AAON*!:`$(?HSW```$LPI@KOWR*&$Y;I"!^#)(8"(4`$UPA2@`\+$"`` +MAR)XSPA2@""GX_'S#1`@SW"@```@.X`2<0#8RB!O`(#@RB$!!,]P@`"D%`"` +M)!Q`((#@;`M"``#!0"0`)3(+;^RI<@*%A0B`!.X,#^(AA0AR)'@0<;)<18) +M(```V@CH!!0!(`*!4G#*)4(0!?"I<,EQ__VI<$D`K]^AP.!XSW*!`+P#!N@B +M@":B`(`%\/_8!J(`V`6BSW"@```@&X`(HN!_":+@>/'`>@HOX@O8K@YO_PK8 +M0P./_^!X\<#*#T_?SW"@```@^X``W<]V@0"\`P"&`-E(@(#BRB!!`"'R)H`6 +MZ2>1*0D>`"*&(.!!@5!W`-G*(6\`@.'*(8(`RB'!`VX((```V@5]"_`A@B#@ +M2B!`(%H((```V@5]"G#8Z`/M`-@;\`"&!H!]Z`>0]P@>@**&!.T'E1$('P#/ +M<```*C#&"._?J7&I<`'93O[KZ`*&">@`@`*F'OUK"!&`C0=/W\]P```],)4` +MS]_QP!(/3]\*)@"0&G$Z<@#86G#/=8``H#\`I03R`(:'Z,]P``!M,&T`S]\A +M@`(@0"`_N%(@`(!*<"_R)?!V"R```H`0:7AB#_A03R +M*'`#\`#8Y[K,(&&`#/3I<`#9+/X`A8CH!I?CN+@-HO_*(,(#`(4@A@WHX(8) +M[XGH08<"(($@/[E2(0&`U/79!D_?`($`I@`?@!3I<-S\`(7M\>!X\,(/^/]?.^"P_B((5!A6*%!^B,(@*`@-S,(PZ# +MQO?/<```&#":#X_?((U2:51Z`"*`#X$`/`]!A8"`G0H`@\]V@0`X"6"&X+O* +M(@(#`O1`H&"&"PM?`&*%8:`(ZD&`ANH$&(`/````4`#=#R5-$*5_M?%'(,`C +M%?`O*@$`3B*!!W)I='L`(X(/@0`\#V""!^L`VV"B8:(/)T\0$"!``.[H`-U, +MQ8S`T@GOY`39S0\0$,]V@0`X"0"&+P@?``'9SW"!`+P#*J`/\#)M-'G'<8$` +M.`\!@0'EA2@!"4$IP'$!H0.AZ0T4D6H,S^L:<`"&>PA?`'<(E"#_W@#=R7<# +M\`'EKWTY#1,14@DOXJEP!/"I=A`@0`!UZ"\J`0!.(H$'A"D&!,]R@`"`03`B +M0@[C"E"!A^+*)T$3[O'Q=LH@@@\``/\`S"8"D,PG`I`/\C#9`K[4?L]P@0!` +M#QYF(*98V0*_]'_X8""@SW6!`+P('H42<*`+0O]X'0`4#05OWZW`X'CAQ0AR +M,-R,><]Q@0`\":""`"%`#F"`&PA``T*0C'HG<6"A#>LB@2BY+WDBLP?P8*(% +MZP0;A`\``/__X'_!Q>!X">D`@0"B`H%`H2BX#W@"L@CP((`@HD"@!!J$#P`` +M__\@@@;I`H(HN`]X`K'@?N!X\<`Z#$_?&G#/=H$`.`\/AH#@RB"!#P``'#"8 +M!8'?(H`HN2]Y0"8`']K_"'7B@#8.;^`PV0%O#W@$)X\?````_^5X0"@!)B5X +M`J4NA@+P"'$#Z0"!_>A`)@`>J7+=_R^&$(80<``@C0^!`#P)0H45#H`0SW```!TPR7$.#:_?8Y7E`V_?J7#@ +M>/'`[?\(X-'`X'[@>/'`X<7\_PAU_A``@5,@?H`+]"`5@1#/<```,#`D%8(0 +MT@ROWV&%M0-OWZEPX'\XN"BXX'\/>.!X`B!#`!<+4@`3"I0`!/!`*H,">6$P +M``A32X#E<&X$0B0`,]P``!2,'H+K]\BA@.5AK@#M0*&SW6!`#@/*+@/>.QX +M&G``(4%T`Y'!N!,(4`#/<```+3!""Z_?(H%`)0`>"G%#_PAS`-D-A03P0(`( +M<4AP!^@I$XP`*1""`/,,@Y!`)0`=:')*_P.31B#``(&X`[-`)@`22G&Z_]$! +M3]_QP'X)3]\(=\]PH```(-N`SW"!`#@/#H`%\*"`R7''_ZEP_>B`YSP(0O^] +M`4_?X'CQP%();]\(;_Z7`*<='_\0!/W^!X\<"."&_?F'#/=8$`.`\MA0CP(H$HN2]Y +M0"4`'=O_R7$.Z2@1@`#`@?OH`Y'!N.<(D(#/<```+S#%`8_?B'"T_[D`3]]! +M*`("3WIT:G1[`"."#X$`/`DH$H,``-D$ZV*""0C``"AP"/`#DL&X^0B1@"H2 +M@`#@?N!X\<`6"$_?"'8H=:#ARB"&#P``93!X"8;?R7"I<=+^"'//=8$`.`\P +MA4`E`!]H9L2C7Y4A"A\!XY-%@`JZ%0\?$>B#"K_?9T)_@G\)#U(00G[$HT^0 +MP0H?@ZRY,[/>\4"`02H.`L]^H.;*((8/``!F,,P(IM_*(88#'Y45")X"JK@? +MM<]Q@`"D%`"!8;@`H<]P@0!L#\EQQ/^)!P_?X'CQP!X/#]\(=@#=UOXCD%,A +M0@`;"E$`*!A"`T$N`1+/<($`<`\O>;G_`_`+"I``J7`&\(>Y([`(X,7_`=A- +M!P_?\<#:#@_?2'5!*`("3WH$NE1Z`"*##X$`/`E`(PP(R(P`V@7NPH,+"(`# +M2'`B\..34R=.$/<.D9#S#QZ1RHSO"8&#I+^IO_!_I;\DC*B_X[,)#D$0V_\* +M\!.3$0@?`R>#!(,*N3A@!*.`Y50-`O\!V-$&#]_QP.'%*'72_X#ES"`B@#P- +M`O_-!@_?X'CQP$(.#]\(=RAU&G(`W@HB@"^!`#@/-!(!(`7PQO\%?BIQ&.D# +M@0`1$0#Y#P&0`H%!*`(&4'7_W,PE`I/R]2.1P;G="9"`SW```#$P=0=/WS@2 +M`2`#\+C_*G$8Z0.!`!$1`/D/`9`"@4$H`@90=?_#*((8/``!5,`@/9M_*(48#SW"!`#@/MGCQH.$%+]_2 +MH.!X\`BCN(I01O.&":#B_@#-D!YO,.%)&M +MIZZG0"``(0^G0B<`&[D$+]\0I^!X\#^X4B``@`GT((;/<```)S"J#6_?J7*BIBGP'(Y/ +M")(`0H8)\`6&"K@:8D*F`_#Y"QZ#`B6`$`\(4@#W#@3P````"`(E@1!!*<`' +M4B``@`;R&PF$#P````@0NR"6SW```"0P97E6#6_?J7,Q!`_?X'CQP+X+#]_/ +M<*```"#;@,]P@0`X#ZV`!_!`)0`2R7%`_J"%_.T%!`_?\<]P@`!X0E4@PP8G<)R`'0Q1 +M$)J`D7T2:0D-]!R#<("@3'DP(T(.1:`!X=,)%($*((`_@0`X#S00#3`*(D`D +M2_`+"1,`!P]2$/-_`(::#.``"G%")1,>/A,!(5T(40!1(4""0"46&DHA0#`` +MAL(A0C8"%H$@`-H'_QT(40`6(``TDH`*[`,6A"`K<@"&`A:!(&!\"-L^$P$A +M0H8="1\!`B+#`P(GP"`_N%(@`(`$\@`B0`4"I@*&XG@"IA4)'@$"(,`%#0A2 +M`(BY/AM$(`\B$B6@A2_M$Y7]"%Z#`Y4,%900#0C>`JNX`[4/(1$E0"R`('`@ +M`0>#Z06`;.B$+`8D`"&`?X``>$([@%J`0"4.$EEA!!:0$`6&%PDR`$`HE0(H +M=R$-PZ,")T\5_/$S?_KQ6@K@``4A@"1*<"X+X``!V44"+]^JP/'`*@H/WPAU +MSW"!`#@/S8`;\`#:!88DA@JX:(8X8$`KC`*88%A@QW`0````L7`8``\`$+M" +MAL]P``!C,&5Z>@MOWZESP(8C[A.6_0@?@P.6'P@>`1L('P(DAC!U$@`/`$*& +MSW```&LP3@MOWZESSW"``-P^*8!2(0$`!+DX8"2`R>E#@`*``GK&\0T"#]_@ +M>.!^X'AU``__\<"V#,__Q@T/_P#8`_`!X`]X_PA2@='`X'[@>/'`^?_F"`__ +M^?'@>#D`+_\#V.!X,0`O_P'8X'CQP)H/C^'/<8$`O`,@@2*!C"'#CPCR#W@- +M"0$``M@>"2__*VC=\>!XSW"!`+P#`(`A@,]P@``D,@"`)'@0<0'8X'_`>,]T +M@0"\`V"$`-EA@P':#PL.``:$C"##CP/T*'`"\$APX'[@>/'`[@@/WPAW`-T= +M\!1M%'@`(($/@0`X"061P;@E"%$`T(D1)X"3RB""#P``&S`\"F+?RB'"`\EP +M`-D6"^__*'(!Y/'`M_]""`__=?'@>#$' +M[_X(V.!X\"'8H=YIRNG,*(@`A"B-`(<]P``#(&YX);^4* +M(8`A4R#6`L]P``#,&XX)3^53(-<"SW````0@```@&H<*(8`O@`!L+`VE&X<.I1R'1!V`'P4` +MXF$/I1'8$*4`$0`@A>@&"6_E*-@"\`IP$J4`$0`@@.``V/`(0>43I5,GP'44 +MI>;)6!T`%Q>ESW&@```#\_>H\%$P$7! +MSW"MWN^^:2```(HB$`#/<:```"!#H07!@.$$]$+`!O"!X0;"0L(%]T'`0,`' +M\(+A!\)`PL+W",!!P,]Q@0`8`C`9P`\L&0`/*!G`#B09@`X@&4`.SW"!`!@" +M'!A`"\]P@0`8`A@8``O/<($`&`(4&,`*SW"!`!@"$!B`"L]P@0`8`@P8P`C/ +M<($`&`((&(`(SW"!`!@"!!A`",]R@0"8`<]Q@0`8`@`9``A\&L`'>!J`!W0: +M0`=P&@`';!H`!V@:@`9D&D`&8!H`!EP:P`58&H`%5!I`!5`:``5,&L`$2!J` +M!$0:0`1`&@`$[Z+.HJVBC*(L&L`"*!J``B0:0`(@&@`"'!K``1@:@`$4&D`! +M$!H``6.B:B```Q:A:B#``A6A:B"``A2A:B!``1*A:B```1&A:B#``!"A:B"` +M``^A:B!```ZA:B````VA:B"``1.ASW6@```0!14`E@T(4``,<`L(7@0#V`8= +M&)`%V16Y+!F`#P"`0`#/<*#^\``$H03`4R?!-0@4!#!3)<(U`!0%,%,FPS4$ +M%`8P0_\`V`FESW```*W>-@_/X,]P@`!L+`"`@.#*("$"RB$A`+@.(>7/(6$& +MSW"!`&04`8`-"!X`"@P/Z`3PZ@X/Z)H)#^%Q`0_K\<"^#,_>SW"@`"0PK1`- +MA@80#H8`V,8);^28$H&P.-CF$@&VJ7(F#B_?R7/]!,_>\<"*#._>`=L`%H%` +M`!:"0``6B$``%H=`1">^@T0BC`/`>PH@`(+*(&(`0"!&`(#DRB!!`,!X@./* +M(P("RB,A`!MC;W@Q"I\!`K@,X`0@@`\``/S_G;B?N,]TH`"`#!"DYLD`'P!` +M`!^"0``?PD``VP`?Q$``V`;P9W@`I$`A0!#+"*4!.7!,(4"0RB3!$`4@1`,`%@Q` +M8;DO>97N`-@'\`3D"0J?`0`?@$,!X,"$#PA%`.\+'X``%@Q`]/$+"I\!`!^` +M0P8E/H$0\@#>!/`$Y`'F`!8`0`"D$0Y%$/4+'X``%@Q`]_$+)$"!M/,`V`/P +M!.0!X"$(10``%@Y`X(0#[>=^`O#E?L"DZPL?@``6#$#R\0`6`$!@A#D-$9!E +M>)GQ$PJ?`0'8`-G2"&_D"'(&\`/9SW"@```$*J"-`\_>H0!/Y)X(3^3-!\_J +M+O'@>/'`X<7/<*```"`;@*7!1,"+<-H.;^P#V2#!%0G3`,]P``!&'W(,+]\! +M%((P`-T'\(/`N@YO[`'9`>4@P&.X]0T$D(3`%@\OY`3900/OWJ7`SW&``/@Y +MSW```)HA,00OWR&!X'@'V2P:6##/<*````0OH``6`4#/<(``J!0(@-0:6+`- +MZ`7:%;H+HNS)`>"SN+6XN+CL&ABP!*+/<*``@"PPH``6`$#F&ABPFG_F1*!L(MR#0ER!$#%C"'#CXCVSW"``)0T\"!` +M`(3H`=D>\!L)4@2.(<,/SW"``(0^SW.``(@^\"!```3PSW.``-@T*V.8$H&P +M$PG#`/`@0``%Z`"B`-D"\`+9@.%P"R+?RB`B#L]P@`!L+`"``,&`X,PA(H`) +M\@?8"KC`V1BY<@LOY3MZ`,!`>(#9SW"@```<)*#HR0T('@(%V!6XJZ`I`N_> +MH<#@>,]R@`"TJ2"")7@`HF4$;^$9V.!X\<#AQ78,+^<(=<]R@`"TJ2""!B%! +M@R"B!O2`X#@-8N'*(&(&Z0'/WGD`#^AQ``_H\<#/<*```#`#@."X5`L"Z-'` +MX'[QP$X)S][""```"B"`+X``'"D(=0`0`"`%Z$X(#^A&"`_HBB`0`,]VH``` +M,`*F-@O/X"6&"(92(0$`N;@(IN"YRB"B`#CTSW>@```@!1^8GP`(``#6"@`` +M'!Z`'P""`0`;APT(1`,[AZ)Y"/`;APXE@1______&6$`$`(@`-@)ZL]R@`#0 +MJ4""@.+*(&(``QI8,P7H!!I8,`/P!1I8,`W(B>C_R1X2`380<&A@P +M`=C]`,_>;,H!X+$"(`!L&@(P\<"*"._>!]C/=:```"`+'1B0S@NOYDH@`"#/ +M=J```#`*AL8/S^FG'/OWFIP6@_/YD(*+^B*<,]Q@`#$5P"!SW:@```@H;@`H0H> +M&)"*(!```Z8$'H`?````"<]QH```,`.!J;@#H1N&`1(!-@T(1`#[AB)_"/`; +MA@XACP______'V<`)X$4`"%`!``@$"`2=/'`_@Z/W@AW`=W/<(``'"F@H,]P@`#P+;H*[^LH=@8/ +MS^?J"$_D@N8!V/WN!X\<"Z#H_>*'7/ +M<8``8"P@@4AV"'<$V*'ISW"@```@&X#7=0```!`!&A@PRB".#P``1@/\!\[> +MZ@_/YZEP(@[OY^EQ1"`^@PORSW*@```0*8*#Z0'9*:+-!H_>J7#)<=C_"@W/ +M__GQX'CQP$X(#^C/<*``@!P:@(H)+^9%(,`!L@G/X`X)C^2B#$_DT<#@?N!X +M\<#AQ<]QH```,`.!"PB>!@.!NK@#H5H/S^<*)0"0!/+N_PKPSW"@`(`<&H!" +M"2_F12#``=H/3^@J"&_DJ7!E!H_>X'CQP-X-C]ZBP8MP;@KOZX'!=@SOY@AW +M"'7/<(``Q)_`B#CO"B"`+Z```"!L$!$@"NT2;D-P!A`/!@'8$1H8,`;P`-@1 +M&A@P`-\`P0`A@"\````0^&`">3<)4@"F#4``HN@`P1(:F#,"(4$$XGF*($D/ +M`-JO_RT(40`4[;H-+^3)<&P0`"`+&A@P#/!V#4``"O``VA$:F#"*($D/BB'_ +M#Z3_G06OWJ+`X'CQP.'%SW6``&`Y((77<2,!9T7*(((/``#!**`.PMX`'8`? +M5'80,I$%C][@>.!^X'CQP!(-C]Y&#>_G`-Y6#4_J*@V/[.X)3^QF"4_DY@G/ +MX'H)3^2*(,4/SW6@```@"QT8D"X(C^;G_Q((3^$.#D_JSW"@```0R:!6#,_I +M0-D%V!6X(*!."\__1@K/ZUX)S^OJ"<_IW@@``#8+C_]^"L_FM@S/X'X+C^0N +M"L_B3@Z``I(*S^8B"T_A1@Y/Y5X)S^D.#N_F!]C:_VH/C^(V"T_HH@\/Y%H. +MS^C>#P_D\@_/[/8.#^B6"@_N=@E``AX+S^?/<:```##/<*``@#$<&(`/S("1 +MP"`8@`]``0&@)!B`#S\`/0`#@14(7P#/<:$`@`$<@:&XGK@.!XX'AI((`!;R$_`&D@``#V +M\>!XM/_^"4_E^/])!>_>/=C@>/'``-CR&ABP\QH8L/0:&+`0V(H-+^;U&ABP +M1@F``='`X'[@>/'`H@N/W@AW*'9(=80H!@0`(9%_@`!X00@1$""%X,PF)9'* +M((8/```J-,HAQ@,`#>;>RB*&`ST-4!!Y#=$0SW6``.!-UGU,($"AS"#BH2[T +M`!$#($"%<'+*(((/```I--@,XM[*(8(#BB#_#P"E(O#/=8``X$W6?4P@0*', +M(.*A$/1`A8PB_X_*(((/```D-)P,XM[*(8(#`!$`(`"E"O`!A0\@P`,%\`&% +M$"#``P&E40./WO'`X<7/<8``^$BZ@05]4R7^D`?R&8&,(,./SR4"$+JA\@HO +MYJ]X=@SOZ*EP00.OWJEPX'CQP+(*K]X"V8(D`C6+=8X.+^RI<`8+K^RI7Y#121"AI8,`0:6#``P`4:6#`O +M(P<@SW6``'A!0"40$XHF!A0!P00KOB-`)1$>`"5/'A<)4`"#"9``@^&1\@W8 +MR@OOW@JXOO`>"0_HHH<;"Q$@AN7,)>*1S"4BD@?TSW```"PTG0//W@0KOB-J +M<``A02Z:#N_G(<+V#2_F:G#/<(``I.+P($$#@.'C($(`RB#"!`0KOB,P($$N +M:G`!PI'_V@F@`2#`0@OOZ&IP%@I@!&IP)@Y/Y(;P0"00,D`G`!(*<8H(K^H7 +MVE4D4395)T`6*G%Z"*_J#-J.""_H`,#BAP+"4'?*(((/```<-"0+XM[*(<(# +M!"N^(P`E4AYJ<$`B`2X*#N_G(<)F#2_F:G`,$@`@`\$7"$``:G`#VG+_#!(! +M(&IP`=IO_\]P@`"\X_`@S`,-[`0KOB,G=0IP0"4!$BIR525#%F!\"B3`!)X* +M[^AJ<`#8D?^"#4_D-/#F#@_AC"#_C\H@@@\``!@TE`+"WAX)H`$@P&IP`-F2 +M#>_G(<)J<".'`<)7_R*'SW"``!#D\"!!`(#AXR!"`,H@P@0$*[XCSW"``,!" +MD@\OZ#`@0`[*#B_H`,":"N_H:G`J#N_E:G`:#0_A1@[/XPD!K]Z`)`(U\<"J +M"*_>`MFTP8H,+^R+<&(/+^4`P`HB@"^``'A!`,%`(@XBBB4&%!\(4``O>*QX +M`")#+D"#SW````,T*+I/>@H*[]YA@R#`4\"L>#`F4QZ.P$(,+^P!V0'!&PE0 +M`.L)D`"#X8/RSW```!4TR@G/WHKP`-@*#"__.G`.P0AVD>'*((8/```F-*P) +MQMY`)@`2`@PO[`;9+Y87"=X#7(Z,(L./RB"!#P``*#24"<'>`=A`)@\8`*\` +MP`[!`:8*((`O@``DX3(@0"`!KP.&C"#_CR2O#O2*(`0+`Z;/<*```"`;@`*F +M#Y9%(``##[8/EA$(W@+/<*```"`;@`*F.PM1(I/!(@HOY@C8%^@"$(`@`:\3 +MP*QX`")!+AF!#!Y`%,=P````L`*F+-@&IO_8'*X='D(4'($%I@"&-@XO_P'9 +M`(91P`[`'_""P$H++^P&V0[`!<%B#"__!L*`X`[!RB!"`'P.(O_*(6(`"?"( +MP"8++^P&V0[`X@AO_P'9#L!1P(H@_P]0P`#`4L``V$_`C\!V"^_C$-EM!V_> +MM,#@>/'`\A(!MO3))7CW$@&V"WD!V`7R8@V/_P/P<@V/_U,#S__@>/'`_@Y/ +MW@AU],F,)?^?!B4.$,H@@0\``!,T5`#!WA[NJ7#Y_O3)I7CT&ABP+RB!`TX@ +MC0>O?80M!A3/<(``@$$P($$.SW"``!SC\"!!`&!YJ7`0)DZ3[/7A_Q$'3][@ +M>/'`\Q(!MI/I^!("MH+BRB""#P``##0(",+>"?`O*4$`3B&`!R(/8`$/>/,2 +M`;;XZ=/_NP+/_^!X\#D_>"B,`@!IQ2'4`V/@:&+#S$@&V2/+U$@RV\LD$ +M),*0A'CR&ABP"?1F>/(:&+"!"1$``]@]\`8B3@!%>?;)\QI8L`8@@(#V&ABP +MK`@AX$%8&%@`(H#/ +M<(``;./P($$`$";.$V!YZ7#F[O,2`;:,[0KI`=CX&ABP"0@0(/D:&+0!V`?P +M`^G(_P+PIO\`V!$&3][@>/'`J@U/W@AW#WV$+084SW"``(!!,"!.#DH,+^7I +M<('@RB""#P``"C3\#J+>RB'"`_7)#R!``_4:&+"`!J7#/<(``S.+P(($# +M@.'C($(`RB!"`[T%3]Z$*`8$`"&`?X``>$(\H`#9.Z#@?SJ@X'CQP#H-3][N +M"R_E"':`X,H@@0\```DTH`ZAWLHA@0//?80M!A3/<(``@$$P($\.]#R__*'+)S`\#J+>RB%"`ZEP`-G9_QT%3][@>*+! +M0<$`W/(2`[8$\'U[`>0K#%41$^OY"QZ`A"P&%``A@7^``'A!1('E"(&`2I$$ +M%`$QW0I!@`'8`O``V.!_HL"$*`8$SW&``(!!,"%!#@#8A>',(>*!RB!A`.!^ +MA"@&!,]Q@`"$03`A00[/<(``X$TV>.!_`8#@>(0H!@3/<8``A$$P(4$.SW"` +M`.!--GC@?P"`X'CQP`X,3]X(=RAUR@HOY5IR)PA0`.]XA"@&!``A@W^``'A! +M0(//<````38HND]ZZ7%Z#:_>88-`+5`1`""1+X``7.=@$0`@$'7*(((/```( +M-$0-HM[*(4(#A@_O_DIP"';/4#;][)\A(-M@OP+RE!`TXA@`!(,K^00 +M)0T0!7[W[=D#;][)<.!X\<#AQ0#=$_"I<`#9M@TO_RARA"T&%,]P@`!X03`@ +M0`[_V?8,+_\!V@'EX0U4D:T#3][@>/82`;8/(0$`]AI8L+$&[^`$V.!X\<"R +M#>_@!-CVR0;_`-A?!Z__]AH8L.!X\<#AQ98-[^`#V/G)`-WX&EBS!^CT_OG) +M0'CY&EBS70-/WN!X\<#AQ:'!"'6$X,H@A@\```"F_>"'(H=H0H!@3//$^1Y,'?*(((/```G-,HA@@#L"Z+>RB*" +M`Q*%3"!`H>9X$J7,(.*A(`VAXLH@@0.M`D_>X'CQP(0H!@0`(8-_@`!X05(3 +M#`8/)$P04AL8`X*#SW.``'SB\",#`X#CXB#"`&L&C__QP`ARA"H&!,]P@`"` +M03`@0`X;"!`"\LD1(("`P'C/($(`J`OBZ\HAX@<_!H__X'CQP`AR7?\-Z,]Q +M@`",211J%G@`88#@@`PB`,H@@@`;!H__X'CQP+X)3]ZAP0AU*':$*`8$`"&0 +M?X``>$$($`\@P@BOZXMQ+(ZI<$V.O@^OY0##A^?,)V*1"O2I<.G_`,!C&!@@ +MJ7!^#F``R7'9`6_>H<#@>(HA!@0L>,]R@`"`03`B0`Z%X,P@XH$.],G)`=K$ +M$```+'@`V0`A@'^``/A!5Z@TJ.!^X'@`V`WPBB+_#\]Q@`#@319Y0*$`VD&A +M`>`/>.T($H'@?O'`(@EOW@AQA"@&!``AC7^``'A!PH6%X,H@A@\``"LT@`JF +MWLHBA@,3#A`1A>;,)N*1`-@$]!F%`O`!V%$!3][QP.((3]X(=80M!A3/<(`` +M@$$P($X.A>7*((8/```K-,HA1@,\"J;>RB*&`X?FS"9BD0OTQ@[OX*EP_]D" +M($"`RB!B``/PJ7#>_P4!3][@>`':!O"&X\!Z$"```Q#H+RL!`$XCC`>$+`84 +MSW.``(!!,"-##N$+48$!VD"AX'](<`#9#R$!`//)X'\D>`#9#R$!`/3)X'\D +M>/'`X<72"N_E!-C/<8``\$<$V+8,K^<"VHH)K^@$V,]P@`#X2+J`/@COY:]X +MO@FOZ*EPC0!/WN!X-07/Y/<2`;80(0$`Y0#O__<:6+#W$@&V#R$!`-4`[__W +M&EBPU0'``.!^X'CQP/AQV'*$*`8$SW&``(!!,"%"#L]Q@`!$X_`AC`"`Y,HA +MP@'C(`(#RB*"`0<$C__QP*X/#]X:<"AW2'5H=AOP"G'I&`0(@(##^HO*X$`3B.,!^_IA"P&%,]S@`#\0C`C +M0P[P\>!^\<#AQ0AR*'4*\"\H@0!.((,':'"I<6C^$"+"`/?J80"'6*)@84SW.``'A"52/$!@_P+RI!`TXBC`>/?,Q\`"-"#ON"$"4-$S]G +M^Z+T[2\H`0!.(($'S'DP)$`.$7B,(!"`R/=>"\_@@.`@"N'@RB#A`O$&#][Q +MP.'%"'4H,]Q@`!L23A@((`1#4`0!(`)#0`02'`-\(0K +M!@3/<(``$$(R($`.@.``V,H@8@"]!@_>X'CQP`#:#R("`/3)1GCT&ABP!NGR +MR45X\AH8L,+]00@0(#S&ABP\LDD>/(:&+`*]/C) +M$0A1`(H)[^`#V`+8^!H8L#\"C_]U!@`!\<]P@`!<.>!_(*#@>/'`M@T/WBAVA"@&!``A +M@7^``'A!SW*``%PY0(*5$8P`88H(=3<,XQ``@981@P`CBBL+0P`FV68)[_\` +MVL*@((`$O;9]`"6`'X``C$D@H.H+[_X`V.X([^`+V,D%#][@>/'`5@TOW@2X +M%GC/<8``;$DX8$`@#0@`A0#>U@[O_LEQP*7""._@"]B9!0_>\<`B#0_>"'8: +MEP,P@0(%,(D2"$+084SW&``%!","%!#NMY +M!?32"T_I">C/<@0`"#RI<$X.8`#)<1/PZ7"*#J_K']F$+084`"&`?X``^$$T +M@`8AP8,TH"`-(0'*($$#%04/WN!X\<"R#`_>"'4H=GH-;^0`V<]R@`#80H0H +M!@0O<2-B"^XU#I$0SW($`(`\<@Y@`*EQ$O``VL=Q@`#X092!#R)"`T9\E*$% +MZQ6!17@5H03P@.34#`$!R00/WO'`3@P/WNX,;^0:<(0H!B0O=0`ED1^``'A" +MQW6``/A!%85($0$@!B$.`!!Q`=E@$0`@P'F=Z!WISW```!`UC05/WB\H@0-. +M((\'%(7O?Q`@P`,4I8P@PZ^`W,PG`9/*(`($/`YB`,HAP@,0)LX3Z^X`V36E +M8!E`(#4$+]XWI>!X\<`(=-ARC"##CX#:S"&!@`KR\LD1(`"#RB`"`]0*H@#* +M(H(!YP7/__'`L@L/W@AU`-[/<($`O!W4J.8.K^6I<,]Q!``L0\]R!`!D1>H- +M[_ZI<(0M`14`(8!_@``\3,]S@`#,P\"@!MI$H,]Q!`#(2".@I:!FH$`@#`?` +MI$2DSW$$`-!((Z2EI&:D.!B(`T2@SW$$`-1((Z"EH&:@L@F@`*EPA"T&%,]Q +M@`#<02]P`6$(Z<]Q@`#T0@EA#@R@`*EPA0,/WH0H`04`(8!_@``\3-D&#^OQ +MP.'%"'4T:#9Y`"&`#X``;$D6#2_?D-F&"V_KJ7#>#P_JJ7".#:__`-DJ#F_@ +MJ7"F"*``J7"I<.[_A"T!%0`AC7^``#Q,D@XOZT`E`!>*#B_K0"4`'IX,3^@A +M`P_>X'CQP.'%"'7G_]8(K^"I<`T##][@>,;QX'CQP&X*#]ZBP4AW:':(=80M +M!A0O<``@DP^``'A!`!,0(#IP/@COX*EP-&TV><]P@`!L20`@4@`@AP"&$''1 +M\@`ACR^``/A"@."U\L]Q@`#T0C(A000F"Z``J7`($P`@$0A1`00?@!\````0 +M!?"*(!```:>6V`*G`!,0(`2&2B6`)!':$]D#Z.:&A>]U`V_>BB"$!O%PRB:" +M(`3T]'_FIMIQ0"B4`@J_"G#*<5AG$''Z!\__BB0($`(C#P,(&<`CY(:">109P",(&$`@)H9" +M>Q080"``P:EP[@EOZP'""!,`((HF_Q\U"-$!D!,!("APAB#]#XP@`H`!V,!X +M4R&"`0\)@`,*Z!4*$P01"E(`"-D8&4`@&!A`('H/K_X!V,]Q!``L0\]R!`!D +M148+[_ZI<#`:@",<\*EP`-[)<3(+[_[)<@IP_]E^"N_^R7+!I\*GJ7!O__8. +M;^"I<$8,K^`+V`;P@.#$"N+_RB""`^H+K^6I<,T`+]ZBP/'`?@@/WJ3!*@EO +MY`AU6G#2"J_EJ7`Z<(0M!A3/<(``]$(R(%,."B1`+B8*H`!J<$#`Y@AOZJEP +M&G#/<(``%-``@!!UI`Y![38)(`&I<";HSW"``,!"`"25+X``^$%0%0X@,"`` +M!01^],D0($`#]!H8L!/P+RB!`TX@CP=0%0`@[W\0(,`#4!T`(*EPC@I@`.EQ +M$";.$_#N3@@@`:EP0"!!(8'#J7!^"6_D`,*$+0$5`"&.?X``/$RR"R_K0"8` +M'JH++^M`)@`7`<`_"%$`"PH0(`L)$"``V!#P`"2`+X``^$$T@,]R!`"`/`\A +MP00TH*EPD@E@`&IQE.@C"A`@:G``V;K^#O#/<(``5$(P(``%X^A&""`!J7`$ +M\/8/X`"I<*T'[]VDP.!X\<#AQ0AR`H$C"%$`A"H!!0`AC7^``#Q,`8&J"&_D +M2'$(<8X++^NI<`/P2'`,_[D'S]W@>/'`'@_/W:3!S@\OY`AU.G!V":_EJ7`: +M<(0M!A3/<(``]$(O=C(@DP/*"*``:G!`P(H/+^JI<%IPSW"``!30`(`0=00- +M0>T`)I0?@`!X0<=V@`#X01>&".CTR1`@0`/T&ABP:?#2#^``J7`CZ!6&4A0/ +M)DHE`"`&?_/)6!Q8)1`@0`/S&ABP$O`O*<$#3B&`!R\F!R`4AA`GCQ40((`% +M%*:I<.((8`#*8!XEFH +M[!$`@`\@0`/L&0"`RB!!`PP*80#*(6$`$?`$@A\/`!`$@P\/`1"*(/\/!*,' +M\!B#$'=,#V$`RB!!`[T%S]W@>/'`-@W/W:7!"'9:<80H!@0*)$`N`"&-?X`` +M^$$$N!9X`""3#X``>$G&":_^]!,`H$`E#Q4:<(MP.G#/<8``8-3B""_>%-K) +M<-H.[]]*<4HE`"`+"E`@(8]%\!B-EN@^"6_ER7#RR2$(C@/)<+(*;^6*(1`` +MSW&``/1",B$!!>8+8`#)<#8)#^D!CY3@N`X&X8((3^PACR'HSW"``&`L`("; +MZ#<)D@(`CR\(D@(Z"J_M`-@$V,]R@0`P`0AQ0!I"`"BY01I"`"BY0AI"`"BY +M5@IO[$,:0@`ACPL)T@"*#@_GN_$*(H`O@`!<.0`2`"!!B`T)@P!BCP.(20L" +M``D)@@``CP/P`H]!P$#&`8]"P`6/0\#/<(``;"P`@(#@RB!!!,HB@0\``*(` +M7`JAZ&!`8'4(5"03OW:7` +MX'CQP,(+S]T(=V((K_XZL]Q@`!X24(A`P-Z8D`B$`B7 +M"%```((]#P$0`-_L$0"`#R>/$^9X[!D`@(0N!A0`(8U_@`#X01N-@.#*(($# +M)`[A_\HA000`V!NM@@NO_^EP*_`$@E,/`!``$``@&P\!$`#9`!A`(,]QH``` +M(#N!R7!D_1GP`-X5\+1N`G4(A2$/`1#.#T_^*845"5`&%0F1!CR((A"```D) +M`0``V`BE`>;;#I2090//W>!XX'[@>/'`]@K/W:/!"'>$*`8$SW"``/1"+W6N +M8*(,8`#)<%IP8@LOZNEP)6@*(``GZ7!*!X\@`@ +M@0^``/A"0*'@?O'`D@G/W0AV&G%(=8H([_YH=SIP-@FO_\EP6G"$+@84`"&4 +M?X``>$%A%``F"B-`+@(E`A!`($`@$'(`V@WOZCC@"O"$+@$5`"&` +M?X``/$SZ#._J..!,(@"@S"$BH!+R#._/<*```"`;@`(E`1!A%``F$0A%``#9 +M7!A`(,X-;__)<+8-3^`BZ,]Q@`#W0C(AP`2,(,./&O+/<*```"`[@`(E0!`E +M#@-P````0(0N`14`(8!_@``\3`(E@1\```!`]@SOZAS@R7"N_^D`S]WQP*(( +MS]T(=QIQ2'8H<`X*;^L$V8#F"'4<"R+BRB`"!(0O!A0`(8!_@`#80@;M+RU! +M$TXE@1<#\/_9S0#OW3^H907O_P6`X'@%@#3Q\G"J""_JZ7#F#&_@&G`` +MWC;H$!(`((P@_X\R]!\1@"",(,./+/(`)8$?@`!X06`1`@8"N#`@@`^@`+0N +M`"*##P```!`">\N[-0B``(PC!(!6]P"!&]F^"V__R7+V"^_].G`(&0`@`!$` +M(!`:`"!R#F_^R7%&"V_@"]@!WJ?N2@@OY.EP(^A`($$ABW/I<"H)+^1J<@#` +M@."`#*'_RB#!`P'9`"6`'X``5$(@H`#=\LD/)``@C@^``&Q)0"80&`#= +M"_#4;0)V"(8&Z`#?R@BO_NEQZ*8!Y>\-E)`J<`?_H@UO_@'8;0>/W?'`X<6^ +M":``"'4`V0:]`"6`'X``5*4UH'$'K]TWH.!XA"@%"@`A@'^``-2@SW&@```@ +M.X$IH`'9X'\LH/'`X<6$*`4*`"&#?X``U)]9$PP&%.S/=(``K*6V::1D@^P= +M"A$#SW2!`"`C`*0DK$]Y5B/`!O(+[^.)(#@P'WV;L=W@`!4I0?I%8>!X'0/X?_*(,$``-@5 +MI\]P@0#,'-5X0*!H<,EQ!]K=_ZT&K]VI<.!XSW&@```@6X&$*`4*`"&`?X`` +MU*`I@")Z+(`'Z2J`66$JH`#9+*#@?O'`$@ZOW0AS*'6$*`4*SW"``-"@,B!! +M#DH@0"""X0'8P'B`X,(@`B3V;<=W@`!4I4AV".D5AX#@H`_A_\H@P0`!V!6G +MSW"!``P=M7C`H&APJ7$(VKO_(0:OW0IP\<#AQ0AUA"@%"L]P@`#0H'9IQW.` +M`%2E,B!`#IAQ".@5@X#@6`_A_\H@00,!V!6CJ7"(<0G:K/_Y!8_=\<`(@;P02D"`2>Y.F)0<`'8 +MX'_"(`X`X'B$*`4*`-D`(8!_@`#4H"B@X'\JH/'``@VOW9AQ"'>$*`4*`"&- +M?X``U*`%A=L($`!`+($!SW"``*BE(&#+"!$``-MEI0R%NPA1`.EPH_\KA0J% +M(G@*I6>E"(4JA4V%WO]`)0X7%.@!V`>ESW"``&@T]7@`&(`/`0``I,]P@`!8 +M-/5X`!B`#P$``*0Q\`B%*H5.A='_A.@>E3,(7P(>E0L(7@(RA0+P,(7/<(`` +M:#3U>""@'I4)"%X",X4#\#&%SW"``%@T]7@@H!'PSW"``&@T]7@`&(`/``!\ +M%<]P@`!8-/5X`!B`#P``?!4!AA4:&#`#AA8:&##I<$O_Z7#!_^EPB'$"VD__ +M>02/W>!X\<`*#(_="'3/<($`O!TPB$(A#8`QB,HE8A``W@CISW&``/A(/('B +MN``-"@`=H;"`X#HJ/#HRAG$0B1`!J+"0@3`0'@&JM%H_T#C]W@>(0H!0H` +M(8!_@`#4H%J("PIR``#9.ZC@?SJHX'B$*`4*`"&"?X``U*!@@F5Y:0-O_R"B +MX'CQP.'%"'7/<8``5*D+@0\@0`,+H=8.+^`,V*EP@-GS_[$#C]V$*`8$SW&` +M`/1",B%!#E4$[_\&VO'`'@NOW0G9"'6$*`4*SW"``!"A+W?^8,=W@`#4H!Z7 +M2B!`((8@_PZ$X,(@`B3.#B_KR7`>E^FXRB""#P```@%4!,+=J7#4_Q$($"`> +ME^*X>`_A_\H@00,>EPL(7@(SAP+P,8?/<(``6#2U>""@'I<)"%X",H<#\#"' +MSW"``&@TM7@@H""6J7`$(8$/````""8.[^14CJEPU?_I`H_=X'CQP((*C]T( +M=X0H!0H`(8U_@`#4H`"%`=X$($,`@.#`?D0@P@(F>`"EAB`_#1'K!^J`X/@. +MX?_*(,$#`(6`X`'8P'B'[H#@-`IB_\H@P@.=`H_=X'CQP"H*C]T(=H0H!@3/ +M<(``P$(P($T.`-\*\"\H00-.((\'[W_I<+[^$"7-$_?MQ@COX``!"A`"&-?X``U*`*($`NJ7#Z"Z_>/-D!V`ZE`M@- +MI0#8&:4`)P`4X@NOWB39"M@?M<8(8`#)<`#8#R"``Q)YSW*``%2I"H(D>`JB +M"X(D>`NBR7#_V<3_[0&/W?'`@@F/W:7!"'?5_X0O!1H`(8U_@`#4H!B%`"&1 +M?X``U)\!WK#H5B'`)AIP0,#/<(``!D"[_\#VN!X +M\<#F"*_=V'&H=$AQAB'\`(PA`H"$*`4*`=_`?^VZ`=G"(4$``"&-?X``U*`` +MWLNE`^PBI1?P#>_/<:```"`[@<]W@`"D!_Z'XGDKI0SPA"@&!,]V@`"`03`F +M3AX'#M`1(Z4!WAWNSW&``*0'W8$HA=EA**4%[,]QH```$#F!SW6!`"`C&!T` +M$8>E4+5QM#-FQ`(_=X'CQP$((K]U*)```A"@%"@`A +M@G^``-2?SW2@```@FX15(D,+/62>$@$'`=Z&(7\/@N'0$@$`P'X")4\0@.?* +M)PP1RB5,$,3V`=_0&D`#&>Z$[R"#E^F$*`8$SW"``/1",B!`#L]Q@`"HI0:X +M`&&)Z`:#@GT#@""`N6$*#*_J:'`M`(_=X'C/<*```"!;@`:Y`"&`#X``L*7@ +M?T"@X'CQP)8/3]T(=GIQ.G(:<\G)"B)`(80N!1JP$`(!`"&`?X``U*`H@(AU +M66$HH"D+D0$Z"\_K1"4!$R/HJ7"&(/X,R.`?\A$)$`*I<(8@_0R,(`*"%_3) +M!`"`CLK#-F&)?\< +MB.7*(($#8`_A_\HAP01=!T_=\<`.#T_="'>$*`4*`"&-?X``U*``(8Y_@`#4 +MGQB%&G&`X,H@@0\```0!RB'A`&@(X=W*(L$#.84!V(CI&:7@I@2NZ7!`V=?^ +MZ7`*<<+_Z7#/<9P``$`*VI[_Z7!H_NEP\/WI<`IQ"]KU_?+)$2#`@\H@P0/D +M".'_RB$!!/4&3]WQP)(.3]T(=BAW)@^OXP#=@>#*($(#&/3/<*```"!;@(0N +M!1K/<8``$J$&O\]P@`"PI30A00[@8!2Y.&`0<@#8RB!O`+4&3]T&N,]Q@`"F +MI>!_"&&$*`4*SW"``(B@`"!##L]PH```(!N`1X,X8`(@@0`)"5(`!Z/@?N!X +MX'\`V/4$``"$*`4*`"&`?X``U*!#@`#9ANH"@(#@RB!!``/R`=C@?O'`X<7. +M""``*'6(Z`:]SW"``*6EJ&`#\`#8309/W>!XX'[@>/'`P@U/W0AV.G%(=80H +M!0K/<8``B*`*($`N`"%/#D#9CO[)<"#9R?XI;4D)50$S)D%P@`#LTD`G@'(T +M>`!X!-V*(!``"*<:\``@@"^``-2@/I`"W0L)7@(2@`BG#O`0@`BG#/`@'X`? +M````*`7=!O`@'X`?````#,EP?O[/<($`(".LH,EP*G$!VIO]E05/W?'`X<56 +M"*_]*'4*O;%PI05OW6\@"P#@>.!^X'B$*`4*SW"``!"A-"!`#H8@]P^`X`'8 +MX'_`>.!X\<`(!X\<#AQ:"!SW&``%2I"H$/($`#"J$>""_@"MB$+04:`"&` +M?X``U)]#$`$&#NDLX":`(X$@@:X(K^J6(0H`J7#V".__`MG5!$_=\<#AQ:"! +MA"T&%"]PA"T%&L]Q@`#@H#`A0@[/<8``#$(X8`&(&PC2`*EPP@CO_P'9T@CO +M_ZEPF@CO_ZEP$?`9"%(`C@CO_ZEPJ7#B">_DBB$0``/PA>JI<(()[_\!V74$ +M3]W@>(@80`"!X0C9RB&B`73QX'CQP$0A`@.`X@';P'L`VH8A_`",(0.$X-S, +M(0*#RB)A`(0H!0H`(8%_@`#4GP+K"NJF_X#@RB!"`+@/XO_*(:(`6_'@>`"` +M`-J$*`4*`"&!?X``X*!`H1$![_\"V0?91/'QP.'%A"@%"@`AC7^``-2?A"@& +M!,]R@`"`03`B0`Z'X,HA80!`)0`;">DF@".!((&6#V_J@"$0``?P(@]/ZJEP +MZ?^I<.[_N0-/W>!X\<`^"T_=*'40D<"![;@!V0>%PB%!`!?HA"X%&@`A@'^` +M`-2@/I`+"5X",H`"\#"`S@SO_\EP,)7)<%&59H7&_P/PR7#<_V4#3]W@>/'` +M\@I/W<"!,Y&$+@4:`"&-?X``U)^(Z<]P@`!8-/`@@0,'\,]P@`!X-/`@00"& +M#.__R7#)<&?_@.#*($(#O`[B_\HA8@`9`T_=X'@`@80H!0H`(8!_@`#4GYX0 +M`0?AN__!-G@?N!X`(&$*`4*`"&` +M?X``U)]L\4$%[_\`@>!X\/'`N@E/ +MW0AVA"@%"@`AC7^``-2?=@UOZE8E0!)N#6_J0"4`%&8-;^I`)0`;7@UOZE4E +M0!;)<`(/K_\>V>D!3]WQP'H);]T*V0AVA"@%"@`AC7^``-2?J7`7_\EPZ?\` +MV2"E):TFK2NM)ZTHK2FM*JTCI58E`!0@H"&@(J"I`6_=)*W@>(0H!0H`(8!_ +M@`#4GYT%S__@?P#8A"@%"@`A@'^``-2?$03O_P#9X'@(<<]R@`!4J0F"#R!` +M``FBF03OWQ?8X'@(<<]R@`!4J0F"$"!```FBB0/OWQ?8X'@#\!`@@``1Z"\I +M`0!.(8('A"H%"L]Q@`#0H#(A00[G"9"``-@"\`'8X'[@>/'`D@A/W0HE@"^` +M`%2I-!4!("@5%B`!X30=0"`*\,EP!-DF_^EP"@ZO_P'9!"86):,.$"`O*($% +M3B"/!X0O!1H`(8U_@`#4H".%`"&.?X``U)\`V`\@P`,O)`H@Z.DH%0$@_!:` +M$`0A`04H'4`@P0B1@(0O!A3/<(``]$(R($$."!43$)H)[__I<#IPZ7#!_AIP +M'!42$,EP!-G%_H,)$:`7"A`@Z7"Z_X?H`-@'IC9!P_=A"X%&@`A +M@'^``-2?5B`"!"&""PG>`:>Y(:*Q"9^!W0E>@:6Y(:+J\?'`X<4(=18+;^I( +MX`"%N@RO_PC9`-BI!R_=@!T`$.!X\<`F#P_=P($H=X0N!A3/<8``]$(R(4T. +M$0B1`.!^X'CQP'H.#]W%@(0N!1H`(8U_@`#4GZEPL/[/<(`` +M5*DO@(#AXR!"`,H@@@.I<+#^N08/W>!X!8#!`Z__!-D$B0#:!K@`(($/@`"E +MI>!_0*G@>/'`)@XOW39H"'?/<(``>*4]8+@<2+//<(``W/Q!P,]P@`!@#$+` +MSW"``&0,0\``WD3&#M@$V0G:R7,*)(`/@`!H#`HE@`^```#12B;`!V(*;^-* +M)T``SW$$`&!3J@QOXZEP9L>%P*5`+I$1C>@7#1`20"T!%A"^Q7F* +M(`0$\@YOW>5YSW&``*RE,"%`!`?HKWD`(D`DK@IOXPIRJ04/W>!X\<#AQ59H +MSW&``'BE76$(V>/_`-@*I2P=`A"Q!2_=+1T"$.!X`-M6:``B@0^``*:E8*D$ +MV;3QX'CQP!X-#]W/=8$`(",CI0#9*+4EI0HAP(!$MJEP`>6O?=\-$I3%!`_=\?"(4$`!>&=_P?N`-@3I0IP8'[I<7T$#]W@>`2)`=H& +MN``@@0^``*6EX']`J>!X\<#V"P_=`($H=H0H!@3/<(``]$(R($`.!!&1`$.& +M#"$`H`'9P'E`*9(A`"*`+X``H*5`H`#=HZ;/<*```"`;@`BY`""%#P```'T( +ME@H@@"^``(BQ)7@HC@'?Z7*I"HG0,/W?'`1(C/+QX'@H<)+9WO'@ +M>/'`X<4(=<]P@`"DL/'`U@H/W2AVI(FI!X\<"2"@_="'8H=02)X/_)<*EQ +MG__I`@_=!(FZ\?'`<@H/W:7!`=X`W2[P$VT5>``@CP^!`)P30,?/<(```/U! +MP,]P@`"`#4+`SW"``(@-0\``VT3#R7`'V0O:"B2`#X``Y`P*)8`/@`#L.$HF +MP`FJ#B_C^'//<00`%&'V"&_CZ7`!Y@'EIPU4D6T"+]VEP.!XSW*``/A(&H(0 +M($``E0-OYQJBX'CQP.X)#]T(=BAUA"D&!,]P@`"`03`@00[/<(``E./P($$` +M@.'C($(`RB!"`\EPJ7'O_RD"#]W@>(4&K_XH<.!X\<"N"0_=*'6$*08$SW"` +M`/1",B!.#L]P@`#`0C`@0`X^"Z_J']FI<`8,;__)<>T!#]W@>,]R@`#X2!J" +M$"!```T#;^<:HN!X\?_90$/W>!X\<#N"`_=.G`H=H0I!@0` +M(9!_@`!X05(0#2;4$``@!GT,\"\H00-.((\'[W_)!X\<"*""_=!M@H=H0I!@0`(8U_@`!X03X.K^/BA8#@RB""#P``?##@"6+= +MRB&"`U(5`!96"J_J']F'YT`-X?[*(($#[@^O_LEP@.`D"N+^RB""`Z$`#]W@ +M>(0I!@3/<(``P$(P($`.(0*OZA_9:0&``N!^X'@(0`A@`^!`)P3104OXP'9"'(S:#5Y`"&`#X$`G!,Q!2_C`MD( +M0`A@`^!`)P3"04OXP39"'(S:#5Y +M`"&`#X$`G!/U!"_C!MD(0`A@`^! +M`)P3S00OXP?9\<#AQ0AUZ_^IS_J7#U_]$'S]P(0`A@`^!`)P3A00OXPK9"'(S:#5Y`"&` +M#X$`G!-Q!"_C"=D#N!5XSW&!`,`3"&&#X`'8X'_`>`.X%7C/<8$`P!,(883@ +M`=C@?\!X\<#V#L_S)`>"SN+6XN+CL&ABP!*'"$@&VP\E`*0T"!7W/=H``Z-``ABT-`!#3R88@ +M<8\1]!\)4`#.#0``%PA0`,8-```(`@#9!=@5N"N@S0;/W.!X\<#3R<]R@0"@+"\I`0!.(80' +MSW&!`.P"+XE0(`"``KDT>2EB`!I"L`7R6@L@`(AP!?!>#0``"PB1``'8&_!2 +M#0``%PA0`$H-```(<<]P``"7)X(/#]W#$@&V@.'*(((/``!Y)VP/`MW3R=,( +M'X`V#@``T<#@?N!X\<#:#<_<`=VV#2_?J7`Z#"``&G`(=]/)AB!QCP?T^@P` +M`,,2`;8M"%``P\D7"%$`SW:``,0^?@JOXP"&BB#_#P"FPAI8LP#8"'7#&ABP +M=O",)Q"0Q/:,(!"@&_<7"5$`SW6``,0^3@JOXP"%BB#_#P"EB@XOX]+)SW&` +M`,RI`*$`V-(:&+`#V<(:6+#>\:,)50$S)DIP@`#TTD`G`',4((`"`'@$V,,: +M&+``W<]V@0#L`@^.SW&!`)@L`K@4>`%A`=@B#"_?(($"ICCPTA(!M@#:C^D# +MV,(:&+##&IBP@@TOZ0#8SW&``"RN`*$F\"\I00!.(8`'$@U@`-$:&+##&EBS +MSW$$``1SSW"``$#'`-H`VQX,;^-*)(`!SW&``,0^`*$,\`38PQH8L`#=!O!/ +MV"H.+]T'N`'=!07OW*EPX'CQP(X,S]S3R88@<8\%],H+```5"%```=C"&ABP +M`-C#&ABP;/##R""_?%MDOCP*Y-'D]90"EQJ!L$P$@ +M(J`!A8"X`:4!V!X)+]\(<0`:0"0&\`/8PAH8L,,:&+!V#F_?#=@!V.T#S]SQ +MP,(2`;;/<```C"<:#2_=PQ("MJL%[_\`V.!X\``'09+W@6)TX3T@[OY"RN#:[/<8``R*D`@0#;#JY@H<]Q@`#,J0"! +M8*$/KM#)`-P"(`*@$WG*)&\0`"$`!(#DRB&"`,HA`0`$$0`@X;C*(<(`!(8X +M8`2F!.T`CPT(0P,X$@`AH*\#KRD#S]SQP.'%"'6:#6_?#=CJ#$_D5@F/W\]P +M@0#L`@^(S?]V#6``J7``V"D#[]S3&ABPX'CQP,]PH```(!N`PLD'Z-/)@;C3 +M&ABP`=@"\`+8@N"T#^+_RB"B`-'`X'[@>/'`PA("MH;J@.#B(`(`$?#/!X`-D$\`'A+WG/!X\<#AQ=/) +M)0@>`*"XTQH8L`'="@Q@`*EP9@M/Y-(/3]_/<(``&*Z@H*T!S]SQP#8)S]S/ +M=H``6+(`A@?H`-VN#:_GJ7"@I@+8Z__#R1<(40#/=8``Q#[>#6_C`(6*(/\/ +M`*7&"V_?#=CF_V4!S]S@>/'`X<4!W:EPW__Z"X_H">AJ#:_GJ7#/<(``6+*@ +MH$D!S]S@>,]P@0#L`N!_`(#@>/'`N@C/W`AV*'4:`AW0"6`$D`G +M`1*R#J_H!MI`)0`40"G`(;/R7`(=>]XT@OOY.FM"*T`V`JM"ZT%I0"E!J40'0`49@DO +MW\EP>0#/W/'`$@C/W`AW*'9(=1IS5@WOYP38"B$`@`"''-I`H!C8#!\`%`*G +MP:<`A0&F086-N$.F`:8O*$$`3B""!T]X4*X0(0(``O('ZL]P```*,TX)#]V+ +M_XH@_P\=`._<"J;@>/'`J@^/W`#>SW6!`,`E!95`)5`11B"!`X8@_@-$N!MX +M)7@O(0@@SW"``,RIP*#/<(``8+'`H`.%YHT%%9(02PA?`1CO4G?*((4/``![ +M)\HAA03H""7=RB+%`R2%"NDP=\H@C0\``'PGT`@MW0HB@"^!`+@J-")!("]XJ@KO +MY"FO"*_*K\NOQ:?`I\:G$!]`%$((+]\!V`#+*G$"N!1X-"(`(`':I__/<*`` +M`"`;@,]W@0"T*M`:&+``RP*X%'@`9Q$('P`CA26YP+D!X0/P`-DR($$@SW*` +M`"2N"KD@H@0@@`\?`/[_B@COXM(:&+``RS)H-'D@9^"X`]@+\M+)B.C/<``` +M!B@"""_=-")!(`+8PAH8L,,:F+/%!J_<`-CQP.'%"''/42 +M;11X#PVU$0-B`(/U"0&`!.L1#901SW```)(GT@_OW*ERL0:OW*EPX'@`V0/P +M`>$;"94!$FD4>,]R@0"<+`!B\0@>@`#8`O`!V.!^X'C3R8"XTQH8L`'8PAH8 +ML`#8X'_#&ABPX'CQP.'%SW&!`,`E`X$6W0L(7@&I`!X%=@"\!38.0:/W,]P``"1)S8/S]SI\0#9`_`!X1<)E0$2 +M:11XSW*!`)PL`&+Q"!^`AN$`V.!_RB!%`/'`B@V/W+)HM'T`)8\?@0!`*AV' +M%0@?`,]Q@0#`)2.!);G`N4%I`_``V@H@@"^!`,`E0"!!(4YA%0@>``0@@`\? +M`/[_9@[/XA1X'F;/<($`N"K6"._DJ&`5"%$`#!``(`L(7@$=APD('@`*YH$% +MK]S)<.!X\<#R#(_<\!P(L`HE@"^!`,`E!!6`(`HA@#^!`.P"#A&/,"AUXGA) +M(,``08*)P`F`<"3#@40CPL1(([_#!4! +M(!MP`-@9"5X!,F\T><]R@0"T*B%BX+G*(&$`>G#I<([_$!4!(!IP#^D`(0`D +M&PD%`*ON%!44($HA`"`!VL]Q@``@KD"A"B*`+X$`F"P!V(X([]X"P0AU0"B` +M,!1X`"(6(``>0",8'0`4N!4`)H7H"-@A'0(0#PX1D`/`0"R!(@"`.&"'\0ON +M#A&`,-A@#AD",`'8J@COW@#!R7!A`Z_/'`X<7/=8$`P"5#A9AQ%PI? +M`2(0@0`/"5$`SW.!`.P"#/#/!$!R/$PD!`/+^ +M"PA1`.EP`=FK_Q,*$"`!V,(:&+``V,,:&+`!A:&X`:4>_B,.41`H_@#+SW&! +M`+0J`K@4>`!AP+B!X`'8:@NOXL!X_0&/W.!X\<"J":_<`-E(=VAU&G'/<=Q@0"8+`AV`8$+#U`0Q0V>$:&X`:$`R\]Q@0"X*@*X%'@* +M#:_D"&'/=8$`P"F`X`':P'IR%0"7SW>!`,`ELFJT?0`@@0^!`+0HQW6!`.`E +M2(U`)P`6`=L?_DB-`=@`V?8)[]X/(8$`#_[/=8$`[`+/K>(,+]\-V`V-A^C/ +M<*```"`;@`&E!(%O"R;K1]QW6!`)@L"(T;#P$0`847"!X`((4!V.8([]X@@0&%H+@! +MI0'FV0Z4D<$`C]SQP%H(C]S/=8``6+(`A0?H`-[2#&_GR7#`I#:_G!-@(=<]V@`!`QP"&'-D@H`#+SW&!`+@J`K@4>$H+K^0( +M84HA0""`X,(A0B0*(H`O@0"`*"02`2$*(X`O@0"@*$`C`"4X8`.F&-@"IL]W +M@0#@+`"WSW.!`,`E0"F`(!1X&6,H@>&F>&`)@"&G`Z(5(D`D59`?"G(``=D4D$`E`Q)`HT`C`24X8`&C`)<" +MV1IB0+%88`"W)*81"5$` +M`(4%I@&%!J8#\*6F"0=/W.!X\<"Z#D_<*'4`$H&P"'>HXC*(L$#0"8`$P#9A@BOW8HB!0"5!D_<\<#AQ<]P@`"H%`J`2'4-Z`79 +M%;D+H>S)`>"SN+6XN+CL&ABP!*'"$@&VPQ("MH+AS")A@,H@@@\``(DG<`^" +MW-$2`;;2R1`@0`#2&ABP*87/<(``2%L@H"]Y!-@O"5``PN'/`@#9!=@5 +MN"N@!09/W/'`,/T3"%$`PLF`X`'8_P*O_\H@H@``V/,"C__//'`X<7"R;OHS@S/_\]Q@0#`)061AB!_#(7HT\F&N-,: +M&+`DB0#8`_`!X`$)`0#FR<]Q@0!`+!6A`=W"&EBS`-C#&ABPSW$$`(!OSW($ +M`'1PSW,$`'APS@VOWJEPJ7"V#Z__J7&$Z`S8W_\,\"8(C^*I!^SW&!`+0J(*#/<($`P"7@?P2(X'C/<8$`P"7@ +M?P2IX'CQP,]P@`"\N)H.;]W(V5(+``#1P.!^X'@!X,]Q@`#LMSF)_]HP<.!_ +MRB"&`,]Q@`"LMQ9Y`(E$*+X(`"&`?X$`^"7@?O'`-@Q/W!IP*'8`W0+P`>7/ +M<(``[+<8B",-!1#/=X``K+6V?PIPZ7$^#F_=!MKQZ`:/"PX$$`>/`O``V%T$ +M3]SQP/X+3]S/=8``;+D[C0AV@.'*(((/``!9*UP-@MP;C8#@S"9BD`?T&HT! +MX!JM`=@"\`#8-01/W/'`X<7/=8``;+DZC8#ARB",#P``8"LH#8S<&HUAN!T$ +M;]P:K?'`9@H@`.'%:@H@``AUSW&``*RX!J'/<*```"`;@+)]N&`!X`6A0"$` +M!+X/K^'(V>4#3]S/<(``;+G@?QF(X'C/<8``;+G@?QFIX'CQP.'%"'7/<(`` +M#+C/<8``U+@""F_H+-K/<(``K+BM`V_!X!]@` +MV?+QX'@`V`AQ[O'@>/'`SW"``*RUO@WOZ8HA"0C*#X_AT<#@?O'`SW&``)RR +M*(GFR0CI^@XOX@'9`=@"V>K_!?#J#B_B`MGN\?'`M@[/_XSHSW"``)P_`("& +MZ,]P@``4.@"`A>@%V`#9W__<\?'`SW"``-RR#HB`X,H@(@%H#^+_P'G0\?'` +MX<5V#N__"'6E>'H.[_\/>,]P@`"`]]5@[O_ZEPF.W/<(``G#\`@)3HSW"``!0Z`(`.Z,]P@`"#8#D'_\0%/W/'`X<4*#N__"'6K>`'8X0%OW,(@`0#@>,]P@`"< +ML@B(@>#,(.*``=C`>.!^SW"``)RR"(B!X`'8X'_`>,]P@`!,]P +M@`!`#9SW"``%RRX'\AH,]P@`"!X\<#6"$_D:==IU$O`!W0;O$([."6_<*YAB0/'(6P"_!2;51Z&F+I@@'EKK^OO["_Z:+Q#920 +M48Y;>E&N48Y3(KZ`!/0!VE&N*WKW\[1J-VJE>25\A;``W`KP,FPT>1EAR8%` +M*HT#Q7VIH0'D[PR4D*(+[_^!P`04%S``WTP@`*`!V,!X&[C'<``0``!`P%IW +M#O#/<9,#`(?B#2``R7`#Z("]`!A`(T`B4B`!Y\]P@`!LN1B($'?N``8`LF^T +M?0HD@"^``*RS@G72E1(*[^7)<&WHSW&3U@"DH@T@`,EPJ(4Z<"\CAR-B"V_D +M:G"@O4H@0"`&Z`IP(/`!W7;QX@\OZFIP>G#:#R_J)-@"(P(@"G`6"V_<`-F4 +M%0,@F!4"(&9X1GD%('Z`Z///<4EK`-).#2``R7``P2M]S"`B@`;T3"8`H,PA +M(J"S\T`J@"`4>``G$"`$&(0C,F\T>0`D0"`3D``D5"`&&`0@*!0`(`@8`"#/ +M<($`P"4#@"L(7X`$);Z?'P#^_X_S0@GOY(#@??7/<9/6 +M`*1\\88*[_]*<`#9SW"``-Q.(*C/<(``L+D@L,]P@`#H3B"@SW"```RX"@EO +MW;#9>@D/Y,]PH```(!N``!T`(`\*$2`(V`'9$O\#\)X)S__I!B_/'`U@T/ +MW,]U@`#(!^G.#B_<$(T!V`+I`-@:<(H@_P^4'@`0 +MF!X`$`#8#[7/<(``(*X!W^"@HQ:`$`T($@%:#0_B`NCOM14F#A0.ED\('@`0 +ME2/H#I5F#B_@B#0_B&>@NEL]P``!,P,]R@0#`)462/7E<>E(B +M`@!3(@,``MIT>L"YBB/_#QX-+^)*),`'!/`'V`#9K/Z-!0_<\<"N",__PO[= +M`L__SW*``%RR`8*#Z`2"!O"/$H``%2(!``J1`J(H\?'`\@POW(HA"PD`W\]U +M@`!``'8$+80EH?HHAW"$Z,=PA/NML]P@`#,LZX/ +MK^F*(0<(SW"!`*0HH@^OZ8HA"`2N"8_A&-L8NP#:"_`2:A1XSW&``,RS`&%K +M>,`G8A`!XA@3@"#K"@2`!!&!(`D)4@"([\]P``"9)WH-;]SIEEA`>%!P<]Q@0#`)2"!0L$E")``@@[/YX[HSW"``&PL`("0 +MZ(MP#-F2">_G;=JCP-'`X'Z+<`S9_@GOYVW:^?'W\>!X\7*((8/``!D*Y`,9MS*(48#?0,/W/'`!@L/ +MW*'!F@^O_RAU&G#/<(``W$Y2#J__P(@(<<]R@`!`!H@'8&/\#@>.X +MRB""#P``YP`8#*+_RB%"`\]P@`#H3G(/K_\`@(X-[^,`WP7P`-A`>0'G[W\I +M#Q,2`-@/(,`#SW&``$S@\"'!`P]X@.'+(`*@\?,+?NWS`=CL\?H)#^(N"H__ +MA>7*((8/``!C*_`+9MS*(48#S0(OW*'`\<#AQ0AUUO^I<`+9Q__1`@__]^0>/_^!X\<`Z"B_<#W@H=<]QH```(-N! +M5@H/ZL]Q@`"H,_`A```%Z`)^"0VE$P'8`-AY`@_<\<`V"@_JSW&@```@.X$! +MVH#ARB)"`,]Q@`"H,Q5Y0*&F#:_>%=C1P.!^X'CQP`H*#^H`VL]Q@`"H,Q5Y +M0*&*#:_>%=CQ\>!X\<#AQ<]U@`!(-"2-@.'*(((/``!6*R0+0MP$C8?H!8V% +MZ`'@!:T!V`+P`-@)`@_<\<#AQ<]U@`!(-"6-@.'*((P/``!8*_0*3-P%C6&X +MZ0$OW`6M\(S"A4*SW.``*@S57L@@WCI`B5,$,]PD]8`I.$,!9`X8`(@ +M00,P=LHF31#*)PT0Z/'?_XPF_Y\7\L]P_W\`_QUE$';*($8#RB#%`X#@`=W* +M)0(0"G`F#2_IJ7'/<(``*#2HH`;P`-G/<(``*#0HH)(+K]X5V"4!#]S@>'T$ +MK]X5V.!X\<"V""_<0"`"`T`@#P<`V0[P.+O"N\]T@`!X[VQDSW.``,`:H8,! +MX:5\@:-AD",)Q0#P(D,`4R/,!==TK```#\PD@I_R``!0Y?,!W@+P`-ZF[@#< +M!/"!ND"E`>0BD$$,11#P)P$34R'"!==RK```#\PB@H_R``!0$?0XN6&YSW6` +M`,`:U0FU@4"%,R9!<(``!--`)X-R-'L`>P'>@0`OW,EP@KK:\>!X\<`*""_< +M"-D(=PH@@"^``,`:(@HOW0IPSW6``)3^J7`2"B_=@-G/%7@!822YSKDO*T$`3B.`!P]X`-P/)`P0SW.``!SPC&,6)8,3 +MX8,0(0&`Y7R!H^[U`>;A$H0`Q0X$D0#1+#`41$VS/ +M<8$`Q!X5>`%A!"&!#_@!``!!*<&$[?,O*T$`3B.`!P]X`-X/)@X0SW.``!3P +MSF,6)0,3X(,0(0&`Y7[`H^[UW/'/<8$`/!X$D0;H5B)`!)__%_`:D0;H52)` +M"YS_$?`%D@`0`B`$$`$@@+KDN,4AH@3/(2$`"G`AH$"@`-AE!\_;X'CQP.X. +MS]L(=UIQ.G(:`_`!YN$5@!#/<8$`G!X[#@40$VX5>!EA!8GI#P&0SW"` +M`)3^UGA!@`LB0(3L\P"`"R``A.CS0"$``DIQA@@OW>ERX.@!V`+P`-B1!L_; +M\<#/<($`Q`+L'`BPSW"``,#[0<#/<(``E`I"P,]P@`"8"D/``-M$PPS8`]D& +MV@HD@`^``'P)"B6`#X``N"E*)@`%C@HOXDHG0`"EP-'`X'XH<@]YSW"!`,0" +M/0,/XN!X\<`-Z,]PH```(#N`SW"``-30(*`%V`#9]O_1P.!^X'CQP,]P@0!T +M`@"(*PA>``'9SW*``)P*SW"``&PL`(`@HH#@RB"!`,HB@0\``%0`T`N!Y^7Q +M\<"6#>_;%-G/=H$`=`)>":_IR7#/=8``L"FI<+X);^$(V9(+K_\"V#".@.'* +M(.$.W`XAW,`H(0(#V`#9V/\!CH+@RB"A``WR&PA1`,]PH```(#N`SW"``)`- +M(*`!V`#9S_\$C8'@:`_!_YD%S]O@>/'`)@W/VP#>R7#)<R7`(=3H,+][) +M<`'8"*W/<(``U@H`B,"E":W*K`2OSW:``-8*`(XDCP2X +M)7@$KQZ/)H_"N"5X!J\*((`O@`#8*000`"!"#J_I`X`->8CARB$L`,GVEN'* +M(2H.1?9HN3QY`[DO>5"-)Z\ICX'BSR&A`7^/P+L'NV5Y*:_/<8``U`I@B<]Q +M@`"P*2H=PA`@@1L*40`J%8,04R',`,.[!+R;8RH=PA!$N0CPG(_#N\.\!+R; +M8RH=PA`K'4(0&PI1`#,=`A``CC0=`A`&V#4=`A`0(+/<8``Q-``H3L%S__QP`8+[]L0V,(-3][/<8``U`H` +MB<]R@0!T`@'@#WP`J3P2@`!C:D\,`1#/=(``U0H`C,]U@`#6"@'@#WX`K`#8 +M`*DBBBD.01`CB@"L(*W/<8``E-$@@<]R@`"4#_;`*7QP,]P@`#0T`"`$PA1`,]Q +M@`"P*0"!`>``H<]P@`"XT`"`@."0#\'_=P//_\]R@`#0T`""%0A1`,]Q@`"P +M*0"!`>``H0#8`**V\>!X\<#/<(``N-``@"L(40``V<]P@`#4"B"HSW"``-4* +M(*C/<($`=`(CB,]P@`#6"B"H#?`D$H``$0A1``'9SW"``-#0(*":#&_>$-@+ +M`\__X'CQP,;_G@[OW0#8SW"``.#0((``V#()+]X@@>L"S__@>`'9SW"``+`I +MX'\DJ`+9SW"``+`IX'\DJ/'`SW&``+`I`(&'Z,]P@0!T`@.``*$`V'8-[]TH +MV<]Q@`#@T`"ASW$$`+"&SW($`,2'SW,$`/"'5@DOW@#8CP+/_^!X\<#AQ<]U +M@`#8*0"%'-D@H,]P@``X_&(*[]PXV<]Q@0!T`A&)084`LA")@>#,(**`!/0! +M@I2X`:(2@0.B3!$"`<]P@0!(-59X0HAAA0.##KI%>`.C3!$``1"K`M@R&P(` +M`=@:LQ")@>#,(**`'MK*(B(&$8E"I4)X!:5`(0`%6&!)`._;!J7@>/'`X<7/ +M<(``U0H@B,]U@0!T`@-M*6#/<(``U@H@J`#9SW"``-0*(*C4_Q"%SW&``.#0 +MA2@/"B"!02F`<@:ASW"@```@&X`"H025!"B`#P\`0$)"*8!R!:$`V,H,[]T! +MV>$'C]OQP&H/C]L(=BAU`-C/<8``L"D`H6/^R7"I<>'_N0>/V_'`SW"!`'0" +M`(@O"%X``-C/<8``G`H`H<]P@`!L+`"`@.#*($$`RB*!#P``5`!0#6'GRB%A +M`$/'`"@^/VPAW*'93_\]U@`#@T""%`-AN#^_=(($`V.8+[]THV0"E +MZ7#)<<;_10>/V_'`#''/<*````@]"1X#-H`$@!!X.&"*(1(*%GER#Z_I@-@, +M<"$('@,!V<]P@``\QR"@<@DOZ2APSW&``,B_%8$!X!6A`-G/<*```$4DH`/9 +MSW"@```()Z#1P.!^\<#AQ0`6`4`(==0:6+``%@)`YAJ8L)C+%P@0!\]SH``` +M!&2#SW```-P.Y@_/VZEP)@IOZ0[9P0:/V^!X\,]V@`!(N@!F/+A3($:`"/3/<($` +M2#5V>`&(`_")<,=U@0!(-79]Q(VRB0@EC1,()0`0&F(`D==P``#O#TDBP@/1 +M]\]P@`"TN6A@C"`"@,H@@0\``%P`"`?AV\\@(0,)(@(`%FM5>,]U@0#(-05E +MSW:```#R`(X(Z!R1AB#_#`D($0*AA@0EOI\`!``!./(*((`?````&`0E`1)! +M*<<"Z+T#WLHG(A;*(.(!RB8A$`5]0"_``@5]*0V>%D`OP``Y815X-7DX8*!PSW&``!CE"&$1"-X!1B7` +M$T(E30`%?0`C@0^``-2IA^K/<(``<,AH8`"I`O"`J0`<0`,Y!8_;SW&```#R +M8XE6(`($4R-^@":""O+=N2:BX+O/(:('SR'A!R:B!"&^CP#````,]`&`%0@> +M`-7)"H#^N,\AX@?/(:$')J+@?N!X\<"*#*_;.7$(=@#85B$-!`>E5B'`!"P2 +M`3;/BEQ48J(_P:%!""^CP`$``$)\@F%'!V`'X````"4N`FE3PX> +M$"EPW/\FA4>%%0F>!PF%A2(!!(RX":5'I1GPU!RF%!2*"#T`! +M4`"-N2FE1Z4W@)ZY"/"4NI:Z1Z4W@)ZYG[DWH&D$C]O@>/'`\@NOVP#95B`- +M!$:%U1(,M@0B@P\````8*[N`)`030"0.%C*E%0I>`AB-1+C!N`AFB;@($`'9%NE`*T$"D;G6>`"(,J4`WQ$(7P'/<(```/(#B`<( +MW@`!WP;OB+DRI0+PPKI`)`$86&$&B%EA4(D(\#B-/'G"N3ADF6$(B%")/90E +M>@*E&+M%>Y4#K]MCI2&`'0G>`#"(`[DU><=Q@`!(NDN1[!B"`"J1!O`_V>P8 +M0@``V>!_ZAA$`.!XH<'QP-H*C]NAP;IP3,`H=@0@OH\`!``!FG+:\A4-'B)3 +M)8\@02W`(%,@5@!`V`GP+,!3)<\@1+A3(%8`@-@$)8TO````&"N],VT`)H(E +M-7E5>EEA^6'/)@'8&1P" +M(`IP`,&I"B8`!9/H`!0$,&IP!2@^`0H@P`X$);ZO +M!@```"2X`>`%\E,@`0`X8"D-7B//<8``O.4@@04I/@``(8)_``#_#RRZ0"+# +M`R2[`"-!!`;P%2$!(`#;:'),)`"@>?(`W!4<`B,9#5XCQ;J'X@':P'H4'((@ +M`^,BNT)S!O``(@,@%!P"(W1[426`IF.[`!S`(%_R4FU5>O1ZSW.``.CE4F// +MT8FSA`BOA`<@",%*3YP@.4,'$`NRB#A`<`H800*\H'E +M`]C`*.$$RB#B`,`H8@7%>!`<`"`W\"S`20U>(B$(T@W`N,]Q@`#8X/`A```# +MO@4N/A`*(,`.`>`'\`D(D0(3;@/P$F[/<8``^$A5@2S!)'J&(O\.(KK`V5IY +M&6$3\`.^''C"N,]Q@`!@YO`A```6Y@4N/A`*(,`.`>`"N$`@`04P>`C<\P"O +MVZ'`\<"F"*_;.7`H=Q`1D@``WE8A#035RBAP +MZ7%1BGS^Z7#8_B:%$0F>!PF%C+@)I5#8!Z4W\-7)@"`$`!T)W@`GKDWH"?PR:4<'8`?4````#>`GKF?N3>@'?`?"%X'5B?!%"S( +MSW*``,BK%'HH<.EQ48IC_L>E!?`<'8`?4````!$)'A4D'8`?`@````/PR:41 +MC\]Q@`#\[<*X"F%6)P03SW&```3N%!R"`/`A`@`IA0:%17DII58G$!(5"%X" +M"MHV&(0@.!B$(("Y*:47\!#:-AB$('&%SW"``*!!A"L&!#`@0`X3"-X`"MHX +M&(0@@[DII0/P.!B$(.EPU?XIA40A?H)LC1?RSW"``/A(%8!D>$0@`@$<:\&X +M&F+/<(``R.#T()$`SW"``*#@]""3``WP?'C/$QN,&X.&`3 +M\#B-!""`#P(```!$N<&Y`>$QN``I%``$V14<0@#I<-?^!/`!V)IP0)<4%($` +M%12``%EA.&`FA1VU!"&^CP$``,#*("$+V`^AV\\@(0,I#%`@3"2`H,PDXJ#* +M(&(+N`>BV\\@(@//<($`2#46((`$`X@(\,]P@0!(-18@@`0"B".%#K@E>`.E +M!H55)T(=/97&_BF%!"&^CP```#`!M4#R0X4.E46E";4`'<04R1(,MA\)'@,4 +MV`BU/AA$)'@4`Q$"(<`@&;42A!0#$0(CP"`9M1<) +MW@"PRL]S@`"HR!9[`Y,#Z)&Y*:4$(H(/``,``#BZ`]A&>(+B`-G*(0(`U5<86``,\":%P+4EI2^5/AB$(RFU/949M2BU/A`"(0"5(94:8@*5 +M66$X8*$%;]L8M>!X\V;,`%@]`\Z``%@]!Z+,`%@]!ZK,S#1$2BB0,``0A#P$G#P$1'M[9 +MLP`6#T#VH``6#T'NLPGP$-[9LPHD@`^!`#PE"AR$`2AWAB?]'(PG`I('].)N +M\'[YLP`6#T$"\`#?\+,+#EX0`!8/000A@0\``(R`%PF!#P``B(`D;C!^.;,` +M%@%`.:`$(KZ/````1\HA(0`H\I_M/PT>`+"(SW&``$BZ`[VU?:%A'0F>!^BZ +MP'G/(>("!O3NN@'9PB%!``^Y)7I)I*BZKKI)I`#9.J`[H`CP`!8!0#J@`!8! +M0#N@"-D`D#YFPG@8LYBZ2:3/<*````0$@!NT>01/V^!X\<`%V<]PH/ZP!A6Y +M!*')R:`0```$H8((C^?/<*```!P%@"D(W@,!V,]RH```"`:BX'C@>`#9)J*: +M#H_HSW&``$C``8$!X`&ASW&``'"Q`($*Z`#8`*$LA*" +M`>`2H@B!#PB>!YW-B;B=&ARP"('[N'P/@N(#V<]PH```!"B@I02/__'`P@F/ +MXPOH4@]/XP?HSW&D``!`&8&`N!FAB02/_^!X!"B`#P``+[I"*<)T1"K^`@(@ +M0`XO(`B`4'L$\@'B4'L)"#,!8+&$Z`#8`_"`V.!^H<'QP,X*3]LH=D3!:'5! +MHXHC!``G"1X"42#`@0'8PB`!``>X02Y!$61Y!7D9C8FY#;@E>(ZX`J5C\!6- +M!>@#:D8@P``!I4$N0Q3!NP0F@A\````8),$KND2YP;D!X0`IS`!AO`0FA!\( +M````^(U!+,0$^W^&)WX0![SE?.N54R;`$`J_!">/'P<``/SE?$$N3Q/`OQ6_ +MY7STC1:_Y7SYC1>_Y7Q`+$\'Y7R3O)2\GKP;"[4`@J4$ZQ,)E0""X0.Z:KE5>CIB6&#/<8``&.4(888@_0\%(/Z`RB""#P`` +M5`#/("(#6`NBV\HA@@,`A5/9!;@1N0&A`84/#AX2`Z$"A02A#_#/<:8```$0 +MH0.%$Z$"A1&A!(42H1F-`^@'A12A"-P'`D_;H<'QP(X);]N(`@+9SW"@`(`<.Z`GP5-O[N%0>`3TBW&8_Q_P$0G1 +M#1MX$'B+<97_R7`7\`T)$04<>``)VX +MS!J8LP/PR7`%OP5_4]@1N.&@Q*#/<*``@"`2@`0E@!\````8*[@$)8T?``,` +M`#B]I7C/<8``R+X1H<]PH```102``-X$(+Z/`"@``$HA0"#/<*```"`.@,(A +M0B0$\)X/#^+/<*```$6\@`'?!"6`'X`````$)80?(`````0E@A\`!@``!""! +M3V`"``#7<0`"``#`?\]SH```(`#9%0D0(,@3#``-#-40@.?*(6$`!1,,A@0E +MOI\`.```!"2/'P```(#,(2&`P"9A$`4@``$%?P4GOI`$](D.E)(-#-X3];W, +M(B&`;?+/`.H9R^3O*=#5\0+,@`V0\A`0#/<(``.,<@H$3P%0C>`,]Q@`!( +MO@^!`>`/H4+>.O`(=(8D_9?1(*&!,_3MN`P,0N`3R8`%B3P!1,`AO"X +MRB`A`,\@H0.\#R'IRB$A`,]QH```15B!!8%+>`#8$O(<@0'8SW6@```(!J7@ +M>.!X`-DFI:8)C^@#V`>E!=B8N(GH'PC?(0/:SW&@```(0J$'\,]RH/[8!@79 +M%;E$H<]R@`!(OBV"`>$MH@C<_P8OVZ'`X'CQP`#:"MC/<:```"`0H0'8!QD8 +M@!#8`*%(RYS"(A@,P@(8`%]&QPS0@>@&QP(0@>``'9SW"``#S'(*`"":_H*'#/ +M<8``R+\5@0'@%:$,<.RX`-@*],]Q@`#(OQN!`>`;H0#8F+B-!T__\<#R#0_; +MR1(!MJ/!$!&0`,]P@`#$GP"(`-Z$*`$#SW"``)Y;-"!4#L]WH`"`+2S(':?5 +MR9T2#;>`(0(`NA`3!T8EP!"=&ARP"8'#L5,E?I"$N*`"(0`)H4`HP"`5>``@ +ME0^``$BZ#A4`(1,(40``%0`@AB#YCWP"`@`*(H`O@`!(O<]P@`!(OR"`.G`! +MX2"@`_"B#`_B7H?["MZ%1PJ>!5,BP0("N4$J``..X<.XT"*E!9GWRA(#MF2Y +M5B,,!"BT=!N"`\"S=1N"`\>D$*O)R=VT(8"&(?\-A+DAHQ*(R:02JZ$*G@7* +M$@&V$(F5"`$$RFAPJ@YO_U&*`!4`(`T(7P3*$@&V+O#)$@&VF!$``.BXP2CB +M`-,@8@`*]`\(G@:8$8``1+C!N`+P`-C*$@&VF!$"`.BZP2KB`-,B8@`*]`\* +MG@:8$8(`1+K!N@+P`-J(Z`CJNA(`)@'@NAH8(+3P`8''"-X`F!$#`*01#P#5 +MR8MR"':`)@030"8,$D`F!!96($X))0\>%>B[TR.B`-,CX0!H9L]S@`"`Y`"B +M'7C"N/0C```!HD/P-PM>`D$K``'!N#(D``")N$#`SW"``/A(%8`@PD1X1+K! +MNH8@_PY88,]R@`"@X/0B``!!P"?P!".^CP`$``$4\NB[TR.B`-,CX0"`((0, +M:&#/`@F!@+@)H0K8=AH$``CP +M$-AV&@0`")$)"Y\&`-X(\`3@"+$$V'4:`@`!W@:!@"(#!2B1'/S*$@&V5B$" +M!.D9@@,BD@&R.&`8LLG)SW&@```@L!`,`<`1`P!B?``DPQ28DH)SFF,Z@5!Z +M,'*H!LW_@G2&&`0#!!$`()T:7+,!X`09`"!1`R_;H\#@>/'`$@LOVP#;SW&` +M`,2?((F$*0$#SW&``)Y;-"%,#L]QH```(&@1!`#`$0(`00@1``6F`#PL>!<]S@0`8.X&#`O"!D&*00GP")``#"",#``3P8I"# +MD)MC:'0Q\('@S""B@#;TR1(#ME8C#P3`EPT(40!^$P`!!?``W`(D`P`2\`F'%P@>!<]R@0`8.P*""PB4`&&"`O!A +MEYAF&V,"EQMCW&2=S14(7@#)R780``%BN)U@"_!H=<;Q#PMR`&*]U/'`0@X/XPCHSW&D``!`&8&@ +MN!FA=0-/_RS(QW"``.BK*(@!X2BH"(@;"#(!R1(!MJ`9@`\#`(0`BB`(`,X: +M&+`)\(H@$`#.&ABPH!F`#P(!A`#@?L]PH```11B`,PC?`\]Q@`!(OA"!`>`0 +MH2S(QW"``.BK((@!X2"H`(@3"%(`BB`(`,X:&+"*V)"X!_"*(!``SAH8L$+8 +MF+C@?O'`;@D/V\]PH```1=R`N(``V!T-7Q4$)KZ?``8```CTSW&``#S'((&E +M"1``U%L__*_`;#EX6W/_)$@&VH!D``(8@ +M?H\A\@'?(/#/<(``/,<`@`SHR"F_;R7$`W\EPT@DOZ:EQ`][/=:````C'I0H* +M3^;/<(``@#X`@(#@S"<]P@`"4/R"@0-@!IL@6`1`P>8H) +M[^+I<,8,3^+%`"_;J7#QP,G)BB$&!*00#`#$$`(`SW"``.Y"8F@L>@T,'A`T +M($`.!/`T(T`.Y/^YZ`/9SW"@```$**`@V)P:'+#/<8``2+X4@0'@%*')R9@0 +M`0"4&$``R1("ME8B`00/D6"1";$=D0BQ"8&LN*VX":%^$@`!&V,8D6)X&+$` +MV`"Q?AH$``&1&;$`V/8+[^8F@#,(.*!'?3/<(``J*5V:6!@@.``V,\@(@,4 +M](0J!0K/<(``T*`R($`.%PB1`(8)K_U(<(#@RB!B``RX`O``V(4@`P$#VL]Q +MH```"$*A`!@$4,G)79``&(10R`$AP%@QO_P#:"'4'\`'A2'`*#&__ +M`-JL:%H+#^C/<*``@"#0@(MQR(QN,&X&F(.\!D(G@8@P@0@@`\"````1+K!N@'B,;@8>B$* +M4``3"I``@^(`V,H@X0'`**$#"O#/<($`""4"@`;PSW"!``@E`8`%>2:G#Y0A`0KJX.+^$`V1&GYAJ8M!&.U!I8M,*XSW&` +M`/SM"6'/`FG`)8X8#6*.&`=MWH*;__)<`2% +M&K?)<`[\/9=HEP/A!"&!#P``_/]0CG!QS"(!A`OR$+L0NC#8C+AE>?(.+]L% +M(@($'9<(MPF'AB#UC[@/(N;*(((#$!W`%`[P$!W`%)W-SW&``$B^1B#``IT: +M'+`8@0'@&*%Y!>_:H<#@>/'`*@W/V@AT4(D!V#,1C0``K"P2`S;/=H``Z*MN +M9L]P@`#(J\&L%"#/`-&/=7C#K-"/PJQL@&&DSW.``'#(2V-VK&&!0"0.&!T+ +M'@%RB<]W@0!(-59_8*[@C_Q_PK\$O^5[`_"`VP2ZI7I@KD&N7)%1M!Z`!+34 +MR0:D5!$``0ZT`)$/M*`1@@!)I,[)!""`#P(`00`-"($/`@```(BZ2:3.R88@ +MOH\$\HFZ2:2<$0`!`=I1(("!PB*!``^!#+K`N`VX17C-!._:UAH8L/'`X<4( +M=03P?@O/X<]QH```,),1`(;U"!Z!U,DP&1B`+,B&X,H@H0'<#6'ARB%!`Z4$ +MS]KQP#-H-7G/W/\LR,D2`K84)0$0P+$!@E\(GP/(L:@9A`,0BL]S@`!(N@.X%7A` +M(Q`$0".!`QMC!Y,["%(`8;@'LU"*$VH5>!!AE>@`V`\@@`!^#6_H']G)R1"( +M,V@U>30@02#AN40/PO^=S48@P`"=&ARPRL]Q@`"HR%9Y()&8'8034!U$$,D2`;85?P&!!""`#P```&#`IQT( +M@0\````@Q!$``,]Q@`#(/A5Y`($0X`"A90//VO'`^@KOV@#9SW"``#S'(*#/ +M<(``J!0!@,]U_P___Z'!S!I8L`SH!=H5N@NB[,D!X+.XM;BXN.P:&+`$H@/8 +MSW:@```$%:8!V`FFR1("MJ`:``#,&D``G,W@N'WR*@PO_TAPR1(!ME")4R+` +M`$2ZPKK`&8(`4VA5>A"IQW*``$BZ8((W"U\"4@LOX0#9R1(!MH0H!@3$&0`` +M`"&!?X``>$'5&EBP1"@^"TZ!`"&!?X```$Y`H1OP5B$#!`B#D+@(H__8$:,D +M$H``SW.``&RZ`>`D&@(`,(D3:15X"&.#X,H@B0\```@KF`L)VP2&R1(!MK09 +M!`#.R58);_\L$@(VR1(,MK`4`!&)"$4#!""^SV````#)$@*V5B(!!`?R(!F` +M#P`1```+\,]P@`!@0`&($PA1`"`9@`\`"0``-0,``%"*SW"``-2I2F`)D9X/ +MK^0E@1SP`!8`0-0:&+``%@%`YAI8L)C+G.#*(.()%`LBV\\@(@/)$@RVM!0` +M$02FE!0`$`T(7@)>#D__R1(,ML]P@`#(JRP2`S9`(`$,='A(D*3JT(S/`2H9WP$(P#N!5X'V<`AP0@ +MOH\``(`3.O(1"%X"(!F`#P$`BP"-\%L('P,'EZ'HSW.``!@Z08/4R0KJ++C$ +MN`#:#R("``.#!'H(\,#:&+I$>%!P`=K`>@;J(!F`#Q`!``!O\"`9@`\!`(@` +M:?`)@;2X":$)D:>X";$/D:>X#[%?\"`9@`\!`(4`6_!FES,4@!!7"PX`SW.` +M`!@Z`8/4$@ZV"N@LOL2^`-@/((`#8X-D>`CPP-@8N`1^$'8!V,!X"^@)@;2X +M":$)D:>X";$/D:>X#[$)\`&$#PB>`2`9@`\!`(T`+?#.R2$('@`V""_H$8') +M$@RVL7#*(D8#RB(%`%8D`11*H0/P6H(8D1\*!0`@&8`/``4``,]PH/YP!@7; +M%;L$HQB1!*-$H\]P@`!@0`&(#PA1`"`9@`\`"0``5B0#%`B#SW4!`0``JW@0 +M]`F3521$'26#2),6#6__>9/)$@RVH!0!$"5XH!P`$*MX!O*."D__UP<``#8) +M;_^)<,[)R1("ME8B`03;"!X`')+/=:```""&(/T,C"`"@COT6@WOYA&!R1(! +MME,@3@6P$0`!9.`1#@40!=K/<($```-$H&X/+^+$$0```-H*N,)XC"`$B\D2 +M`;;*(H8#@"$"``J!L!*#,!!RRB(&`,]P@`"HR'9X`Y`0,(J%X\PCXH$?],]S@`"HI99I +M@V.`X\!YSR$B`Q;TA"@%"L]S@`#0H#(C0PX;"Y$`=@\/_0HA`(#*(6(`#+G) +M$@*V`O``V1R2)7@0>1RRAB#_#'\($`$LR,]S@`!@K/0C```E>"&"'+(7"5X# +M5!(#`;@2`0'#NV5Y5!I$``AQAB']#(PA`H(7]#"*`[DU><=Q@`!(NF>1'PM2 +M`"B1&PE>`!,+40!@$@$!A+E@&D0``_"-N!RRAB#^#,C@SW&!`#PE!?0`V`6Q +M!?`*&80/````"*02```#W@R^RW@,](8@]8\*\@X/[^5(<`/9SW"@```4*:`" +M#D__!.CB#<_ENO`LR,]Q@``DQP"AR1(!MJ01```1"!X%#0A?!96XI!D``,MX +MRB6!'Z````B\\O2X`=Y8#D'_R`P'84/S)$@&VSW:@```(';'$ +M$0``['@P)4(>,(F%XLPBXH$;],]R@`"HI79I8F*`XL!XSR`B`Q+TA"@%"L]R +M@`#0H#(B0@X3"I$`'@X/_8#@RB!B``RX`O``V`/9(J:%(`(-`!@$4,G)/9`` +M&$10R!@/8SW&@```$"*&*(!``6P0@`,X:&+#)R:00 +M`0"&(?6/"/)B#<_E`]G/<*```!0IH,D2`[96(P($"8(C"!X%M+@)H@F2@",# +M!:>X";()DB6"`@AO_TB2`]@"I`F(*#^9^"R_FR!KH1``%DN)^X"J4\D0`81%#)R3V0`!A$ +M4,G)+X``&$!0R`5H78/3_\$(+Z/!@#*``AQ'?+/<(``^#D#@(#@RB#B"L\@(@-$ +M"N+:RB)"`,]Q@`#(OQ.!`>`3H078SW&@_O@&%;@DH.`*01#`"*(@8$Q!$!`,]P@`#N0F)H3'D+#!X0-"!/#@CP8@YO +M_S0C3PX$\'81#P&=S5,@?H`(\L[)RA(!MBP2`C9M_,]U@`"`R*EPR1(!ML3\ +MRB&('Z/K?+)R:`8``3. +M&EBTR1("MH(2``%^$@$!.&"`$@$!.&`0>RS(SW&``,BK%7D>@7A@'J$!@I4( +MW@#:"N_B@-@(<@C!X>YG1I`4H23P$-B<&ARPJ7#5_,G)`8`5")\#+,@!V@`@@0^``"BL0*F=S5,@ +M?H`/\LH2`;;/<(``U*E0B4I@BB`$`/H,;^28$0$``-J=S2T(7@`O"EX'@[B= +M&ARPSW"!`#PE`8#)$@&VF!D``,[),@[O_BP2`C8%\*.XG1H*(`0``*4)!T_:\S)`>"SN+6XN+CL&ABP!*$!V'IPSW>@ +M```$":?/`6HL]PH/X@!P2A0"D`)*5X!*'`?@;T'@WOYP#8 +M"':PRL]QH```+C6!`K@K$@(V,""`#Z``9"Y$>`1Y!"%2!++PI!0`,+BXI!P` +M,)8(+_\*<.8,[^<`V`AVSW"``(#(F'`*<2O\B'!=_)[P`]B:'`@000H=(8D\9\-\A$)7@*@'(`_`0"+`$_PH!R` +M/P$`B`!)\%Z(P!2!,`\)@`"@'(`_`0"1`#_P`<$1"9X&H!R`/P$`D``!W3CP +M)I`S%(`P10D.`,]R@``8.@&"U!(!M@KH++G$N0#8#R!``".")'@(\,#8&+@$ +M>1!Q`=C`>`KH(L`1"%(`H!R`/P$`C0`!W13P"L&,(?^/$/+/<*```"`;@")X +M%0B%#P"```"@'(`_`0"'``'=@.;,)2&04_4@'P`5@.9D]5,E?I`$\@Z'@.!> +M]64-7A`!VDIP`_`0($``*>@O*P$`3B.!!RAS@"/"`93ARB-%``*[,".##Z`` +M&"R2:3`DC!^@`+0NCWR1<\!ZY^K/<(``&#H`@`GH$2!`@,H@@0\``)PAK`V! +MV@#8`O`!V(#@+/-A!&_:@"0#/?'`H<&+<7X.[^$%V`GH`,'/<(``R#X5($$` +M`)$"\`#8H<#1P.!^X'CQP.'%H<$(=8MQ4@[OX078!^@`P<]P@`#(/C5XH*!- +M!&_:H<"AP4#`(,`BN1QXPKC/4$IP'#@?Z'`X'BAP?P< +M"+3QP$+`!""0#P```!A!*-`B%PA>`\]P'$?'<04I/@`*(,`.`_!!*8```L$- +M"1X"4R&"`".Y!O!3(<(`(L%$N4`H@R!U>U1[SW*``.CE!<]V@0`8.R"&[@^O_D`F`A0!IAFU"_"`(@,%W@^O_CV5`;4BE1FU.&`8 +MM0:%,0-OV@6EX'BAP?'`K@I/VJ'!*'4(=CIR&G,$(;Z/`0``P(AW+_1`Q0'9 +M&0T>$D$MP!#!N`'@02U!%,&Y&6$.\!D-GA8@P$2XP;@A:`0E@!\"````,;@8 +M>2$)4``3"9``@^$`V,H@X0'`**$#"O#/<($`""4"@`;PSW"!``@E`8`%?#&__R1(!MJ(-;_^I<'$";]JJP/'`X<6CP8MPP@WOYP/9 +M`<+/=(``>$%/?1L--1&*(P8$;'T`)$`>((`+"D$``8`7"%``;'TP)$,>8-B, +MN$8+K]JI<0#`SW&``,@^%0A0`!$(D0`(%``Q%2%,`P"D*'"U>-H-K]\,V04" +M;]JCP/'`@@E/VLD2`;:*)P84Q!$"`,]Q@`"(0>QZ0B$-`@`A3@[/<8$`R#LC +M@<]S@`!0Y@0A@0\``P``12%!`^'!(,)<>L*Z]".#`,]RH```(%J"<+L;"N0` +M2B``(!!X<'L4V@HD``2:_PL('@8*<$;PRC`E0!Z%X,P@XH$= +M],]P@`"HI79I8&"`X`#8SR`B`Q3TA"H%"L]P@`#0H#(@0`X7")$`\@KO_$AP +M@.#*(&(`#+@"\`#8`]G/.!^ +MX'CQP'H(3]K'$@&V@.'*(($/```("=@!@=H`W03P`>6P?4$-U1'/<(``".^V +M>,"`\0F.@^&`@.?*(($/``"/$\`)H=K*(H$#0'_'R1`@@8/'&EBP!_3N"N_< +M!MC'$@&VX.F`X/'`X<4`W0OPSW"``+#NMG@! +M@(#@XB`"``'E\0W4DKX)S]]=`$_:X'A`@,]Q@`"<7$"A`8`!H>;QV0$/WH0H +M"P(`V0`A@'^``)QD1QA8`*886`#@?_<86`#I`<_:\<#AQ80H"P(!V@`A@7^` +M`'QH0*'Z_P#="_#/<(``0._P($`#@.#B(`(``>6P?>\-E)/Q!P_:X'CQP(0H +M"P(`V@`A@7^``'QH0*'/<8``G%PA@>RYY`]"W='`X'[QP,<2`K8/(@$`QQI8 +ML(_J(@@OX@;8@.#*(((/``"-$Z``@MKJ"N_/'`Q!("M@\B`0#$ +M&EBPCNK/<00`@+K/!X\<#$$@&V$"$!@,0: +M6+",#&'`KR!B!`@\<:&+#0".'< +MRB"A`<3)JW@X#^+_RB""`V4&#]HM`,_:%0```"0```#,S/__#WG/<($`0`-U +M!B_F`-K@>,]P@`",/P"`ANC/<(``B#\B````!(`!````@```````$0```.)A +M!0```0````````R^@`#(-(``9/2``"#E@`!\'H```.>````````````````` +M`````````````````&P@P!`/&PDBW!W`$`H`&T`@`!MN"@``88``&VX\``!A +M``$;;CT``&$``AMN/@``81``&VX!``!A7```85<``&$``!LD(``;)>0=P!&( +M!^$8'P`(8@``&R4!`!LD```%)0$`!20`"`4Y`0`%8H@@P!$"``4D``@%.0$` +M!6*,(,`1!``%)``(!3D!``5BD"#`$0@`!20`"`4Y`0`%8I0@P!$0``4D``@% +M.0$`!6*8(,`1(``%)``(!3D!``5BG"#`$4``!20`"`4Y`0`%8J`@P!$```@E +M```()(@'X1F$!^$90`?`$@$`&W`(``!A#QP=(@0`'2;H'<`0`0`;,.@=P!&" +M!!LD"``;)00HP!&^#P!A```;)(``&R7D'<`1```;)``!&R7D'<`1```;)``" +M&R7D'<`1"`!?<`P``&'8'<`0__X;,M@=P!'.[@TE@ID-)`\--R)L(,`0#QLW +M(O__#24._PTD#PTW(J__`#(<``!D`(`3)`$`$R4X',`1#W<3 +M(N`Q,B`0`3,`0HP!$/%!4B`@`5)@]- +M$R($$,41`@`3)/`````'H@>B%H```!6````5HA6B`(!``"J````JHBJB/X!``", +M"@``5(Q4C*0?````````````````_@```0#_``(!_P$`_P$!`/X"`0,"_P$! +M`/\!`0'_`@#_`P(`_@0"`P+_`@(`_P("`?\#`/\%`P#^!@,``_\#`P#_`P,! +M_P```````````````*PR```*````!`````#`@``````````````````,,P`` +M!0````0`````P(```````````````````````````````````0```*C/``!4 +MT0``#-$``$#1``!8SP``4,\``(AZ!`#\>@0`4'L$```````````````````! +M"_\```4#```$`@``!O\```#_```,_P``!_\```C_```)_P``"O\```+_`0#_ +M``$"`!$!`0(!`0$#_P$!!`(!`04#`0$&!`$!!P4!`0@&`0$)#P$!"A`!``S_ +M`0#^_P(`_P<"`0'_`@(""`("`PD"`@0*`@(%"P("!@P"`@<-`@((#@(""0X" +M`@H-`@`,_P(`_O\```````````````````````#_!P```/\```?_``$)"``` +M"O\!`@```0,!_P$#`O\!`P/_`0$$_P$"!0`!`0O_`0(,_P$$!@8!`0?_`0`( +M_P$`"O\"`@#_`@,!_P(#`O\"`P/_`@$$`0("!0`"`0L!`@(,`0($!@8"`@<` +M`@`(`0(`"@$#`/\"`P,`_P,#`?\#`P+_`P,#!`,!!`4#`@4``P$+!0,"#`4# +M!`8&`P,'_P,`"`4#``H%`P#^`P0$`/\$!`'_!`0"_P0$`_\$!`3_!`0%_P0$ +M"_\$!`S_!`0&!@0$!P8$``C_!``*_P````````````#_`````0,``@("``,` +M`@``!?\```;_```$_P``!P0```C_`0#_`0$!``,!`@$"`0("`@$`!/\!`0<$ +M`0`(_P(#``8"`@(&`@`%_P(`!O\"``3_`@`'!P(`"`<#`P`&`P`!!0,"`@8# +M`07_`P`&_P,`!`<#``<'`P`(!P```````0#_`0#_``$``?\!`@+_`@#_`0(` +M`?\"`0/_`@,$_P(""O\"`@G_`@((_P,``?\#`0,*`P4%"@,$!O\#!@H(`P,) +M_P0`_P,$``'_!`$#"P0"!PL$`@@$!`,$_P0""@D$!`G_!`0&_P4`_P(%!`;_ +M!0$#!@4``?\%!0K_!04)!08`__\&!`;_!@$#!@8``?\&`P3_!@8)!P8&"O\` +M``````````````````````````````#\MH```0`#^+:```$``WP>@``!``'@ +MN8```0`#Y+F```$``]`,`0`"``0```````!54@``1T4``$Q)``!.0P``1$D` +M`%-5``!:6@``6EH``%I:``!:6@``6EH``%I:``!:6@``6EH``%I:``!:6@`` +M```````(!`P""@8.`0D%#0,+!P\!D0```3\```*1```^/0```Y$``#T]```$ +MD0``/P,```61```)$```!I$``!8<```'D0``'Q\```B1```<%@``"9$``!`) +M```*D0```S\```N1```]/0``#)$``#T^```-D0``/P$``!$0/DA(`.`0!``` +M``T@!````&$0(@```"!#.0````#@A`$``.$0`0````(0E\L%`#!@"P````_2 +M!````!C2_/__'P%S$`````G@B8:$A`K@A(0```O@IE77(`S@(HLL,@W@JHF' +M(@[@'GOL,1?@DHR+BAC@BHH``!G@?DGG(!K@(HLL,AO@DTVW(1S@'GOL,21@ +M`@````)S`````!$@%(4!`!D0!@```!'2`P```#'@_[=V`#+@Y"4_`#/@(E(. +M`#3@+@```#7@`````#;@-C8V-C?@-C8```D0;E\``!H0`````#$0A@$``#(0 +MD`$``#,0R````#004````#40@````#H0:0```#L0P````,$0`````"2``#P` +M`"K@^>7G)BO@(HLL,BS@<\YI*RW@'GOL,2C@BXN)B2G@B8D```Q@@R4``#@0 +M4@```#D0E@```$&``0````)'`8```!1@`````!(@E`,``!40^0B=````Z70Z +M#>FTD0C"8!`(0.#O![Y>CP<\WFX'.YTN!SD<#@>WV\T&-INM!C4:[0:[W_`( +MS.5R"4IE,@E()/((Q^/Q"$:CL0A%(I$(1")Q",/A4`A"83`(P6`P",%@$`A` +MX.\'O]_O![_?[P<_G\\'/I_/!SZ?SP<^GZ\'O5ZO![V>SP<^GZ\'O5ZO![V> +MSP<^G\\'/I_/!SZ?SP>_W^\'O]_O![_?#PA`8#`(P6`P",%@4`A"X7`(PR&1 +M"$0BD0C%HM$(QN/Q",[&XT&M9K-!C;;[08W'`X' +MN9Q.![O=C@<\7J\'OM\/"$!@,`A"HC$-Z70Z#_'Q`(0&`P",%@,`C!8!`(0"#P!S^?SP>]'H\'O-UN![N= +M3@KP<]G\\'OQ\0"$!@,`C!8#`(P6`0"$`@\`>_W^\'/Y_O +M![_?#PC`8%`(0Z+Q",EELPG-9K,)1"*1"$1A$`B_G\\'/I_/!SZ?[P>_'Q`( +MP:!0",+A<`C#X7`(0J$P"$$@\`>_G\\'/I_/!SZ?[P<_8%`(1"*1"+O=;@>[ +MW4X'N)NM!K293`:Q6`P&-!P/"$0BL0C%8M$(1J/Q",?C\0C'X]$(1F.Q"$4B +M<0C#H5`(P6`P"$`@$`A`(!`(P&`P"$&A<`C#(9$(Q6+1"$;C\0C'X_$(QZ/1 +M"$9CL0C%(I$(0!Z.!C!8+`8QF6P&M)KM!CC=;@>[W6X'M5JM!C7:;`8R62P& +M,1J.!\"BT0C&XQ$)R&12"4KE<@G+Y5()2F4R"4CD\0A&H[$(0!Z.!K%83`:R +MV8P&M5JM!@$````B(B`?'AT;&AH:(B(@'QX=&QH:&B(B(B(@'QX=&QH:&B(B +M(!\>'1L:&AHB(B(B(!\>'1L:&AHB(B`?'AT;&AH:(B(B(B$?'AT;&A<7(B(A +M'QX=&QH7%R(B("`A'QX=&QH7%"(B(1\>'1L:%Q0B(AX>'AX>'!H8%1(>'AX> +M'AP:&!42(B(B(B$?'AT<&A@8(B(A'QX='!H8&"(B(B(A'QX='!H8%"(B(1\> +M'1P:&!8B(B`@(!\>'!L8%A(>'AX>'AP;&!84(B(B(B$?'AT<&1<7(B(A'QX= +M'!D7%R(B("`A'QX='!D7%"`@(1\>'1P9%Q0B(B`@(!\>'!L7%1(>'AX>'AP; +M%Q42(B(B(B(@'QT;&AH:(B(B(!\=&QH:&B(B(B(B(!\=&QH:&B(B(B`?'1L: +M&AHB(B(B(B`?'1L:&AHB(B(@'QT;&AH:(B(B(B(A(!X<&1<7(B(B(1\=&QH8 +M&"(B(B(B(1X>'!D5$B(B(B$>'1L:%Q4B(B`@("`?'1H8%1(@("`@'QT:&!42 +M(B(B(B(A(!X<&A@8(B(B(2`>'!H8&"(B(B(B("`?'1L9$R(B(B`@'QL;&18B +M(B`@("`@'AP9%A(@("`@(!X<&184(B(A(2$A'AT<&1<7(2$A(2`>'!D7%R(B +M(2$A(1\>'!D7%"$A(2$?'1P:%Q0B(A\?'Q\?'!L8%1$?'Q\?'QP9&!41(B(` +M``````````````#,@`$`!0```@0`````P(`````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````'(;#0#A@0$`%Y\"```````````````` +M`#0!`#8!`#X!5S\!9D`!=T$!F$(!!U\!JF`!JG$!>1\"`"D"_RH"_S(">:$` +M6Z(`&Z,`,*0`$J4`(*8`!Z<`&Z@`$JD`!ZH``*P`":T`!JX`#*\`";``!K$` +M#+(`![,`!+0`"K4`!K@`7KX`&<@`!LD`!LH``H!!/X`$_\`!FX`"GD`#74``7\`#X<`#ID`Q9D` +MS7P!#8`!#3T"#4$"#7T!_SX"_W\!_T`"_R<`'"@`&"D`'"H`'+D!![H!$'H" +M!WL"$,X!`X\"`Y$"`+T!"7X""<O@`9R``&R0`&R@`!S``%S0`%RP`$S@`#SP`*T``*T0`"T@`"TP`* +MU``*U0`"U@`"UP`*V``*VP"(W`"(W0"JW@#=WP``XP`(Y``(Y0`*Y@`*Z``` +MZP`([``([0`*[@`,,0`D,@`F=P$P.`(P!`!,.```Y0%SY@$*I@)SIP(*^P#_ +MCP$@5@(@@P$`1`(`C@$/50(/D`$`3@(`D0%]D@%]DP%]3P)]4`)]40)]6@!5 +M6P!5_0`!Z@$$_@`3_P`&;@`*>0`-=0`!?P`/AP`.F0#%F0#-?`$-@`$-/0(- +M00(-?0'_/@+_?P'_0`+_)P`<*``8*0`<*@`@('>P(0S@$#CP(# +MD0(`O0$)?@()QP$,B`(,O@$)?P()R`$&B0(&I`$0J@$2I0$0JP$290(0:P(2 +M9@(0;`(2WP$!UP$`H`(!F`(`>@$!.P(!8@'/9`'/9@'/+`+/+@+/,`+/$``$ +M``L````#`>P!!0`0``0`$0`2``,`"@`+`#0!'0(U`1X"-@$?`B4````*``L` +M!``/``,![`$0`#@`Y`&E`D@`$@`C````#1$B`X`<@`!<'(``L!R``%0<@``# +M`>P!`@'K`04`!``0``H`"P`&``@`?`&``3T"00)S`73B('(D.D!`!,```!,N@$`%````&"I!``5````R$L!`!8```#`>00`%P```&1]!``8 +M````""H$`!D```!`+0``&@```````````````````````````0/_````_P(` +M_P`"`0/_`@,$_P(""@$"`@O_`@4%`@("`/\"`/X#`0#_!`$!`@4!`@'_`0(` +M_P$`_@8#`/\'`P,*"`,#"P@#`@'_`P4%`@,#`O\#`PG_`P(`_P,`_@D$`/\* +M!`0*"P0$"PL$!`@,!`(!_P0#!/\$!04-!`0"_P0"``X%!0H/!04+#P4&!A`% +M!0(1!0(`$@8`_Q,&!@H4!@8+%`8$!_\&!`(5!@8)_P8"`/\&`/X6```````` +M````````,`0$``H````$`````,"````````X``0`7`$$`#0!!`!4`00`(`$$ +M`#`!!``L`00`N`$$`!0"!````@0`>`($`/0"!`#\`@0`U`($`'P#!`"``P0` +MB`,$`(P#!`"0`P0`E`,$`,`#!``(!`0`N`,$`/____________________\$ +M````________________`P```/____\``````````/____\``````````/__ +M__\```````````,````0`````P````````````````````````#_```````` +M``````#_``````````````!D````9````````````````````````````0`` +M```!_P```O\```,!```%_P``!O\```C_```'_P``"?\```K_```+_P``#/\! +M`/\#`0$```$!`@H!`@4$`0$&_P$!!_\!`PH'`0$+_P$!#/\#`/\"`P,```,$ +M!00#!0;_`P,*!P,!"_\#`PS_`@#_`P("```"`@0&`@(%_P("!O\"`@?_`@0* +M!P(""_\"`0P%!`#_`@0$```$`0$)!`0$!@0$!?\$!0;_!`0*!P0""_\$`0P% +M!0#_`P4%```%!`C_!04'"`4#"?\%!0;_!04$_P`````````````````````% +M```````````````>````$````!``````(@`B42(1$0#P`/#`P,#`_/S\_/[^ +M_OZJJJJJJJJJJJJJJJZJJJJJ*/\`S*JJ``"JJ@#,JJH```!``,```````%`` +M\`!0`/"JJJJJJJJJJJJJJJJJJJJJ*/\`S*JJ``"JJ@#,JJH````````````` +M`%``\`!0`/"JJJJJJJJJJJJJJNZJJJJJ*/\`S*JJ``"JJ@#,JJH```!``,`` +M0`#``%``\`!0`/`'````#P`````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````__\``/__```````````` +M`/__``#__P````````````#__P``__\``````0````(````#````!`````4` +M```&````!P````@````)````"@````L````,````#0````X````.````K!L` +M`#`<``#T&P``\!L``-@;``"X&P``F!P``-P<``"X'```&!P``/@;```````` +M```````````````````````````````````````````````````````````` +M````!P```````````````!`0X.```` +M````,@@"#P,``0`````````!`0X.````````(P0""@````````````#T`0`` +M`````````````````````+1W@``````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````#_____```````````````````````````````````````` +M```````````````````0`````)`!````H``0)P``Z`,``.@#``#P+H``\"Z` +M`$3-@`!`S8``0,V``#C-@`!$S8``0,V``$#-@``XS8``.,V``$3-@`!$S8`` +M.,V``$3-@``\S8```````/__```!`0````````````$`````&"<$`!@G!``8 +M)P0`#"<$`!@G!``8)P0`$"<$`!@G!`"$T0``B-D``!@G!``8)P0`&"<$`!@G +M!``8)P0`&"<$`!@G!``8)P0`&"<$`!@G!``8)P0`&"<$`!@G!`"$]```9/$` +M`,ST```8)P0`&"<$`!@G!`!`Z@``S/X```CM``#@[0``M.P``*SB``#\X0`` +M_.8``*#P``"8)00`2/8```0P!``,,@0`&"<$`+C2```<$P0`4/D$`"C?```8 +M)P0`&"<$`!@G!``8)P0`&"<$`!@G!``8)P0`&"<$`!@G!``8)P0`&"<$`!@G +M!``8)P0`&"<$`!@G!``8)P0`&"<$`,S;``#`VP``M-L``!@G!``8)P0`&"<$ +M`!@G!``8)P0`"-\``!@G!``8)P0`&"<$`!@G!``8)P0`4/H``!@G!``8)P0` +MN)\$`-B?!`"LW0``&"<$`!@G!`!\G@0`&"<$`!@G!``8)P0`&"<$`!@G!`"4 +MUP``D-8``##9````V0``&"<$`##E``!(_P``&"<$`!@G!``8)P0`&"<$`!@G +M!``8)P0`&"<$`$CP```8)P0`T.4``!@G!`#`GP0`&"<$`"#<```8)P0`&"<$ +M`!@G!``8)P0`&"<$`!@G!``8V@``&"<$`!@G!``8)P0`&"<$`!@G!``8)P0` +MJ/D``)SI```8)P0`&"<$`!@G!`!@V0``&"<$`.3&!`!8P00`&"<$`&CC```8 +M)P0`&"<$`!@G!`"\R00`&"<$`!@G!``\^P0`&"<$`!SZ``",WP``&"<$`$C^ +M```8W0``1/\``!@G!`#(^0``&"<$`*CH``#DU@``R/4``!@G!``8)P0`(.D` +M`,37```8)P0`&"<$`%#C```8)P0`&"<$`!@G!``L^```&"<$`'C@```8)P0` +M&"<$`!@G!``8)P0`&"<$`/CO```8)P0`&"<$`!@G!``8)P0`&"<$`!@G!``8 +M)P0`&"<$`!@G!``8)P0`&"<$`!@G!``8)P0`&"<$`/#D``#<^@0`&"<$`!@G +M!``8)P0`&"<$`!@G!``8)P0`)*T$`)2M!`#PW0``&"<$``#[!`!,)P0`&"<$ +M`!@G!``8)P0`&"<$`+S@```,\0``(-(``!@G!``8)P0`&"<$`!@G!``8)P0` +M0/\``!@G!`!LXP``3-P``+#A```8)P0`&"<$`(#P```8)P0`&"<$`!@G!``8 +M)P0`&"<$`!@G!``8)P0`&"<$`!@G!``8)P0`&"<$`'CO```8)P0`&"<$`.3? +M``#P]0``2"<$`'S:``"HV0``V/H$`"3]```8)P0`6-X``!@G!`"0WP``&"<$ +M`,#Y```8)P0`&"<$`!@G!``8)P0`&"<$`(B%!`"DA00`$(8$`/R%!`!$A`0` +MA(0$`+B$!`!\A`0``(4$`#B%!`#,A`0`,(0$``$````````````````````` +M```````````````#0```%``````!````````4#.````````````````````` +M``````````````````#4!0$`!0```@0`````P(``````````````````Q`8! +M``4```($`````,"``&A0@`````````````$``````````@`````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````!G12,!!0````("`@("`@("`@("`@("`@("`@(" +M`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(" +M`@("`@("`@("`@("`@("`@("`@$"`@("`@("`0$"`@("`@("`@("`@("`@+_ +M```0`@``````````````````````````````````>!N!```````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````"0`````````` +M```````````````````````````````````````````````````````````` +M````````````````````````____________________________________ +M______\````````````````````````````````-TAO2'-("T@#2`40+T@[2 +M#=((T@G2$M(3TAO2'-(`@A'2$-(8T@_2`D<```W2$M(3T@S2%=(+T@+2$=() +M$`%`&](@````````!Z`````````'H`````````>@```'\` +M``!Z````?P```'H```!_````>@```'\```!Z````?P```'H```!_````>@`` +M`'\```!Z````?P```'H```!_````>@````````!Z```````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````&9F#@``````9F8*`&9F!@!F9@8`9F8"`&9F +M`@!F9CX`9F8^`&9F.@!F9CH``````&9F-@``````9F8R``````!F9@X````` +M``````!F9@8````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````$``0$!`0$!`0$!``$``0`````` +M`/\````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````3`B@`$@(H`!L"(`` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````#[-8P`,[$``````````#,````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`!X>'AX>'AX>'AX>'AX`&1P>'AX>'AX>'AX>'@`>'AX>'AX>'AX`'AX>'AX> +M'AX>``$&`@0"`@``!`0&!`@#`````!D>'AX>'AX8&1X>'AX>'A@8'AX>'AX> +M'AX`%1X>&!4>'A@8'AX>`P@`````!@```````````/\%````````&!@8&!@= +M`08&!@8`!@``'@`>`!X`&``&!@8!`0$!_08&````````!@$!```>```````` +M```````!`````````````````!48&!@8&!@8&!@5&!@````````````````` +M``#^_O[^_@`4%A@8%!(0&!@````````````````````````````````````5 +M&!@8&!@8%!48&!@8&!@4$A@8&!@8&!@8```````!`````0```!$8&!01&!@4 +M%!@8&```````^Q04%!04&!@8&!@8&!@8&!@8&!@`&!@8&!@8&!@8&!@8&``8 +M&!@8&!@8&!@`&!@8&!@8&!@8`!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@` +M&!@8&!@8&!@8&!@8&!@8&!@8`0$!`0$!```````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````````````````````````````%94``![```` +M`````%I4```[`````````%I4``![``````````H@```[`````````%I4``!# +M``````````H````!````,#`````````````````````````!````/P`````` +M``````````````<````````"`@````````````````$``@(``0```@(!``$" +M``("``````$``0`"`@$``````````0````````("```!```!```!``````(` +M`@(``````@```````@````$``````````````@```0`"``0````````````` +M``(``@`````````````````"``(``0`````"`````````````@`!`@`"`@(` +M```````"``(```$````````````````````!```!`````@`!`@`````````` +M`P(```````````(``````@(````````````````````````!``("```````` +M```````````"``(!`````````````@`````"``("``(````````"```````` +M``````("`@`````"``("`@(``0```@`````!`@`"`@(``@$"`````@````(` +M`0```@```@$````````````"`````````````````@`````````````````! +M`````0(!`@```@(```````$``@```0`!``(````````````````````````` +M``````````````(````````````"`````@`$``(````"`````@````(``@`" +M`@````````````(``````@`````"```````%`````@`!```!```!`@`````` +M`````````````````0```````0`"`````0`"``$``````@`````````````` +M``````````````````````````$````````````````````````````````` +M`````````````````````````````````````@````````(````````````` +M```````````````"```````I*?____\````````````````````````````` +M`````````````````````````````!X!```L"P`````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````````````````0(#!`4&!P@)"@L,#0X/$"HJ*RPM+B]*2TQ- +M3D]0:VQM;G!QBXR-CH^1K*VNK["QS,S,S<[/T-'2T]/3T]/3T]/3T]/3T]/3 +MT],`00```````````0(#!`4&!P@)"@L,#0X/$"HJ*RPM+B]*2TQ-3D]0:FMM +M;F]PBHN,C8Z/JJNLK:ZORLO,S<[/T-#0T-#0T-#0T-#0T-#0T-#0T-``/@$" +M`P0$!08'"`D*"PP-#BHK+"TN+TI+3$U.3U!J:FML;6YOBHN,C8Z/D*JKK*VN +MK["PRLK+S,W.S]#1TM/4U=;7V-G:VMK:VMK:VMK:VMK:VMH`0P("`P0%!@8' +M"`D*"PP-#BHK+"TN+TI+3$U.3U!0:FML;6YOBHN,C8Z/D*JKK*VNK["PRLK+ +MS,W.S]#1TM/4U=;7U]?7U]?7U]?7U]?7U]?7U]<`0`(#`P0%!@<("0H+#`T. +M*BLL+2XO2DM,34Y/3U!J:VQM;F^*BXR-CH^0JJNLK:ZOL+#*RLO,S<[/T-'2 +MT]34U-34U-34U-34U-34U-34U-34U-0`/``````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``#_?_]__W__?_]_`````````````````````/]__W__?_]__W__?_]__W__ +M?_]_`````````````````````*JJ``#_````_P```/\```#_````_P```/\` +M``#_````_P```/\```#_````_P```/\```#_````_P```/\```#_````_P`` +M`/\```#_````_P```/\```#_````_P```/\```#_````_P```/\```#_```` +M_P```/\```````$````!`````0````$````!`````0````$````!`````0`` +M``$````!`````0````$````!`````0````$````!`````0````$````!```` +M`0````$````!`````0````$````!`````0````$````!`````0`````````` +M```````````````````````````````````````````````````````````` +M`````````````````````']_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_ +M?P```````````````+X```"^`````0`````````!````7P```%\````"```` +M``````(````O````+P````,``````````P```!@````8```````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````````````"@`` +M`````````````````/\`_P``````````````````````_P#_```````T```` +M````````````````_P#_``````````````````````#_`/\``````'`````` +M``````````````#_`/\``````````````````````/\`_P``````F0`````` +M`````````````/\`_P``````````````````````_P#_```````````````` +M```````!`````0`````````!`````0`````````!`````0`````````````` +M``````$````!``````````$````!``````````$````!```````````````` +M``````````````","@``````````````````````````````````#`,(```` +M````````_P``````````````````````````````````````````````_P`` +M````````````````````````````````````````````_P`````````````` +M````````````````````````````````_P`````````````````````````` +M````````````````````_P`````````````````````````````````````` +M````````_P``````````````````````````````````````````````_P`` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````````````````````````````````$`````````&!.!```` +M`````````````````````````````'!7```*````!`````#`@``````````` +M``````````````````````````````````$,'K8.,@(1'KD.,@,6'KL.,@0; +M'KX.,@4@'L`.,@8E'L,.,@$B`'1@1>8B-'9P1>LB,'@`1O`B +M-'H01O4B-'P@1OHB-'XP1O\B,(!`1@0B-()01@DB`(1@1@XB-(9P1A,B,(@` +M1Q@B,XH01QTB,XP@1R(B-(XP1RB%I(6DA5R%7(48A1B$U(0``)"$``"(``````"0`T0^$ +M?B8`R0]&?B@`P0\(?BH`N0_*?2P`L@^,?2X`J@]/?3``H@\2?3(``````#0` +MDP^8?#8`BP];?#@`A`\??#H`?`_C>SP`=0^G>SX`;0]L>T``9@\P>V0`Y0XH +M=V8`W@[Q=F@`UPZZ=FH`T`Z#=FP`R0Y,=FX``````'``O`[?=7(`M0ZI=70` +MK@YS=78`J`X]=7@`H0X'=7H`F@[2='P`E`Z=='X`C0YH=(``A@XS=((````` +M`(0`>0[*<]YPWFX>:YYI'F;>9)Y +MBGF">9MWDG>*=X)WFW62=8IU@G6;"9YMEDF6*98)EFV.28XIC +M@F.;89)ABF&"87MA=&%M86=A86%<85=A4F%-84EAFT&208I!@D&*)X(GFR62 +M)8HE@B6;(Y(CBB."(YLAZ'G;><]YPWFX>:YYI'F;>9)YBGF">9MWDG>*=X)W +MFW62=8IU@G6;"9YMEDF6*98)EFV.28XIC@F.;89)ABF&"87MA +M=&%M86=A86%<85=A4F%-84EA@D&;)9(EBB6")9LCDB.*(X(CFR&2(8HA@B&; +M!9(%Z'G;><]YPWFX>:YYI'F;>9)YBGF">9MWDG>*=X)WFW62=8IU@G6;"9YMEDF6*98)EFV.28XIC@F.;89)ABF&"87MA=&%M86=A86%<85=A +M4F%-84EA@D&;)9(EBB6")9LCDB.*(X(CFR&2(8HA@B&;!9(%FWF2>8IY@GF; +M=Y)WBG>"=YMUDG6*=8)UFW.229XIG@F>;99)EBF6"99MCDF.*8X)CFV&2 +M88IA@F&;19)%BD6"19M#DD.*0X)#FT&208I!@D&;)9(EBB6")9LCDB.*(X(C +MFR&2(8HA@B&;!9(%B@6"!9L#D@.*`X(#_'GN>>%YU'G\=^YWX7?4=_QU[G7A +M==1U_'/N<^%SU'/\<>YQX7'4%MU&W\:^YKX6O4:_QI +M[FGA:=1I_&?N9^%GU&?\9>YEX6749?QC[F/A8]1C_&'N8>%AU&'\1>Y%X474 +M1?Q#[D/A0]1#_$'N0>%!U$'\)>XEX274)?PC[B/A(]0C_"'N(>$AU"'\!>X% +MX074!?P#[@/A`]0#Z'G;><]YPWFX>:YYI'F;>9)YBGF">9MWDG>*=X)WFW62 +M=8IU@G6;"9YMEDF6*98)EFV.28XIC@F.;89)ABF&"88I'@D>; +M19)%BD6"19M#DD.*0X)#FT&208I!@D&*)X(GFR62)8HE@B6;(Y(CBB."(YLA +MZ'G;><]YPWFX>:YYI'F;>9)YBGF">9MWDG>*=X)WFW62=8IU@G6;"9YMEDF6*98)EFV.28XIC@F.;89)ABF&"89)%BD6"19M#DD.*0X)#FT&2 +M08I!@D&;)9(EBB6")9LCDB.*(X(CFR&2(8HA@B&;!9(%Z'G;><]YPWFX>:YY +MI'F;>9)YBGF">9MWDG>*=X)WFW62=8IU@G6;"9YMEDF6*98)E +MFV.28XIC@F.;89)ABF&"89)%BD6"19M#DD.*0X)#FT&208I!@D&;)9(EBB6" +M)9LCDB.*(X(CFR&2(8HA@B&;!9(%FWF2>8IY@GF;=Y)WBG>"=YMUDG6*=8)U +MFW.229XIG@F>;99)EBF6"99MCDF.*8X)CFV&288IA@F&;19)%BD6"19M# +MDD.*0X)#FT&208I!@D&;)9(EBB6")9LCDB.*(X(CFR&2(8HA@B&;!9(%B@6" +M!9L#D@.*`X(#``,%"`````````````````````````````````````#,R\S+ +MR[[ZMWN^^K=[OOJW>```````````````````````````P9@``"@````0` +M````P(```@$``(`````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``````````````"(VP``&"<$`+#A````````_P````$``````````0`````` +M``````````````0```````````````````#QV```@0%B`@(#?@/D`SD$@P3% +M!``%-`5E!9$%NP7A!04&)@9&!F0&@0:P0`T'T$`.1]!`#4 +M?@0`W'X$`!1_!`!8?P0`<'\$`+C*``"DR```K,D```C*```LR0``C,D``.3) +M``#@____ +M'____R#___\A_____R+___\C____)/___R7___\F```````````````````` +M`````````*A?!```````J%\$`````````````@````0````"````!`````8` +M```&````?&,!`.2L!```````````````````````````````````````#P`_ +M``(````/`#\``@````\`/P`"````#P`_``(````/`#\``B`````````!```` +M`@+_!`8&-``>`!``;``Z`!X`Z@!Z`#X`U`'T`'H`.``>`!``<@`Z`!X``@,$ +M!0``X"($`*5%&`#*]"<`RO0G```!`@,$!08("@L,#0X/$!$2$Q05%A<8&1H; +M'!T>'U97JJJJJJJJJJJJJJKNJJJJJBC_`,RJJ@``JJH`S*JJ````0`#``$`` +MP`!0`/``4`#P```````````````````````````````````````````````` +M````````````````JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJH` +M`````````````````````&QM;F]P<7)S='5V,'"$F0<````Z`0(!U0#?`#H! +MH@!U`'\`R@%*`>(`^0#*`>H`@@"9``$##P<*%#=N:@$:`=D`Z`!J`;H`>0"( +M`'3111?HHHLN$!B@``P8H``($!`"$`@``````````````````0(#!`0$!`4% +M!04&!@8&!@8&!@8&!@8'!P<'"``-!0<)"P$#`P,#```!!0,!"`(("`$#`0,# +M`@4!!````)@EH`"<):``J"6@`*PEH`"@):``I"6@`,0EH`#():``U"6@`-@E +MH`#<):``X"6@`.0EH`#H):``["6@`/`EH`!$!=F&1`79AH(#YEE$!=F&@@/F +M6?/#(F6"`^99PISH4((#YEG"G.A0R`'(`>0`R`'D`#`!Y`"8`.0`F`#<`MP" +M;@'<`FX!Z`%N`?0`;@'T`+(%L@79`K(%V0+,`]D"Y@'9`N8!1`%$`>8!1`'F +M`;`!Y@$<`N8!'`*(`H@"S`.(`LP#8`/,`S@$S`,X!,P#S`.R! +M0GMH+Z$]FA\6*;27T!XXCN,X',=Q'+V$]A*.XS@.',=Q'([C.`Y>0GL)QW$< +M!P$!`0$!`0$!0<$!`0$!`0$!`4'!`0$!`0$!`0%!00$!`0$!`0$!0<$!`0$! +M`0$!`4%!`0$!`0$!`0%!00$!`0$!`0$!04$!`0$!`0$!`4)"04%!04%!04%! +M04%!04%!04%"0D)!04%!04+"0D)#04%!04)"0D-#0T%!04%!04%"0D)!04%! +M0D)"0T-#04%!0D)#0T1$Q$%!0D)#1$3$1D8!`@,$F9D#`)W8B9U.[,1.-$B# +M-"=V8B<:I$$:$SNQ$Q$8@1$/_,`/#=(@#0N]T`L:`#0`3@!H`)P`T`#J``0! +M.`%;`38`;`"B`-@`1`&P`>8!'`*(`M`"=0#J`%\!U`&^`J@#'022!'P%&`;J +M`-0!O@*H`WP%4``U\#3P-=B +MM>9-FNQ%CYT?0(F'^A7OZ[+)C@O[[$%GL_U?ZD6_(_=3EN1;F\)U'.&N/6I, +M6FQ!?@+U3X-<:/11--$(^9/B5/%NW%AM>:56:4 +M$<^*$.D&!('^\*!$>+HEXTOSHOY=P("*!:T_O"%(<`3QWV/!=W6O8T(P(!KE +M#OUMOTR!%!@U)B_#X;ZB-JS(Y[HK,I7FH,"8&=&>?Z-F +M1'Y4JSN#"\J,*:?BO!T6=JT[VU9D3G0>%-N2"@QL2.2X79]NO>]# +MIL2H.:0Q-].+\C+50XM9;K?:C`%DL=*RWO\J-9M.BP``0($!`8&"`@` +M``"5F9VAI0```!$```````````````````!D````$````/\`#"`(````$@`` +M`````````````````"P!```0````_P`,(`(````3```````````````````` +M+`$``!````#_``P@!P```!0`````````0`8````````!````$`````$`#$`$ +M````%0````````!`!@````````$````0`````0`,0`,````6`````````$`& +M`````````0```!`````!``Q``P```!<````````````````````!````$``` +M`/\`!``$````&`````````!`!@```````#(````R`````0',0`,````9```` +M`````````````````0````$````!`0"``0```!H````````````````````! +M`````0```/__`*`%````&P`````````0``````````$````0`````0($``8` +M```<``````````0``````````0````$````!``P``0```!T`````````!``` +M```````!`````0````$`#``!````'@`````````$``````````$````!```` +M`0``@`$````?`````````````````````0````@```#_``P@!@```"`````` +M```````````````!````"````/\`#"`"````(0````````````````````$` +M```!````_P`,H`,````B`````````````````````0````$````!`@R``0`` +M`",````````````````````!`````0```/\``*`&````)``````````````` +M``````$````!`````0)$``(````E`````````````````````0```!````#_ +M``P@`P```"8`````````V``````````!````9`````$`"``"````)P`````` +M```L`0````````$````!`````0`,0`0````H`````````"P!`````````0`` +M``$```#_``Q`!````"D`````````+`$````````!`````0````$`#$`$```` +M*@`````````L`0````````$````!`````0`,0`,````K`````````"P!```` +M`````0````$````!``Q`!0```"P``````````@`````````!`````0````$` +M!``%````+0`````````$``````````$````!`````0`,0`$````N```````` +M`"P!`````````0```&D````!``Q``P```"\``````````````````````@`` +M$@```/\`#&`"````,``````````R`````````&0````0````_P`,8`8````Q +M`````````"P!`````````0```&X````!``Q`!`````0,#`@4%`0$0````(`` +M`````0````(````$````0```0````$````#_0555%0````"`B(@(`````0`! +M`!P```#_____!`$``!@```#^__]_!`(!`1@```#_____`0$!`1@```#_____ +M`P```!P```#\_U+5`@```!P```#\_Z?J!0(``1@```#\_U+5`@$``1@```#\ +M_Z?J`P$``1@```#\_U+5!0$``!@```#\_ZEJ`$```!<````0G0``%``````` +M```!````0%\!``````#8Q0```P```*B?```$````[+P```@```!(N@``#``` +M`%RL```1`````````!,````PG0``%@```'0_`@``````D,4```0```!$+@(` +M!0```-2F```(````3+H```P````4KP``#0`````````1```````````````` +M````,,4``+"<````I@``#+H```````!\J````````*R9``!`JP``!+T``,"? +M`````````0($_P@0__\``@`````%_P```?\"`/\"`@,%_P(`!@$"``$!`P#_ +M`P,#!00#!`/_`P("!0,`!@$#``$!!`#_!@0$!?\$`0?_!``&`00``0$!`/\' +M`0$%_P$%`?\!`P@(!0#_"04%!?\%``@*!04#_P0"!`(``````0(0!`@````" +M$`0(``````$!``$"`0$!```````````````````````````````````````` +M`````````````.0&@0``````````````````````````@``````````````` +M```````````````````````````````````````````````````````````` +M$````!``````````````````````````P!$$``H````$`````,"````````` +M```````````````````````````````#``````#0_@`````````````````` +M````````````````````````$``````````0```````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````B````!``#```````@((`/``!``"`@@`\!`#A@(""` +M#P$`!"L@((`/```,"&D@``!I($``:2```&D@0``@((`/`0!P9&D@``!I($`` +M:2```$H@``!*(0``2B(``$HC``!*)```2B4``$HF``!*)P``2B``$$HA`!!* +M(@`02B,`$$HD`!!*)0`02B8`$$HG`!!*(``@2B$`($HB`"!*(P`@2B0`($HE +M`"!*)@`@2B<`($H@`#!*(0`P2B8`,`HD@#^!``!Z02R<,$`LG#!")!PT"B*` +M/X``<.4*(P`W&@Y`(4HF`'!I($``2B8`<$HF`'!*)@!P2B8`<``````````` +M````````````````_!R(MOP<2+;\'`BV_!S(M?P`3< +M,-TQ\.!X!-PLW2_PX'@$W"C=+?#@>`3<)-TK\.!X!-P@W2GPX'@$W!S=)_#@ +M>`3<&-TE\.!X!-P4W2/PX'@$W!#=(?#@>`3<#-T?\.!X!-P(W1SPX'@$W`3= +M&?`T%!HP,!09,"P4&#`H%!`HB0(``V<8``0!F`"0`+R8`\%8`!0`G"#4(2B9```AQ +M`-A0<>`@Q0=">0'@4''@(,4'0GGO!^__`>`O+0$`0"5%``(F?/$``"```"A` +M`>@@(@,O(`"`+R%+`%!QP""&`<(AA@#@?A,`(`!*(``02B!`$`XB0@`O(`L2 +MSB!%@(HE_P\*``4`+RT!`$`E10`")GSQ```@```H0`%*)D``Z"`B`R\@`(`O +M(4L`4''`((8!PB&&`$HF``!,(,"0SB""`40@?I#.(8(!X'X!!\__X'@S`"`` +M2B0```7-(=`AR*',*)<""2B(`$!H`!`#`(B$8RB4!@R\O00'`(F,0 +MP"+#$4HG```*)<"`P"'@LHG)`!` +M)T<`"B7``4PG`(@`V1``)```V$AQ:'(`VT(G!X@*)$!Q*``!`$XG"HA^``$` +M`"F``@$IP0$`*H4"H'$!*L(!`"N%`@$KPP&@%,B +M0H'@?$XB`X@6``P``"G,``$I@0`!*(``X'^%>$XC`P`!*<``X'\B>>!XX'C@ +M>`HD@/`%($0`X"#!!T0D_H!!*L0`A``"`"\D`O%"(0$!0B`#`>@@H@0$$00" +M!!$%`@01!@($$0<"!!L(`00;2`$$&X@!!!O(`2P`)0!$(CZ!/``B`$0B_(!` +M(<$`X"#!!T`CPP"H((`!`1&$`@$;"@$@(,`'!!$$`@01!0($&P@!U`?A_P0; +M2`%$(OR`!!$$`LD'[_\$&P@!0B%!`$(@0P"H((`!`1&$`@$;"@$@(,`'X<4( +M=1'PX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'B`Y6&][_7@>.!X +MX'C@>.!_P<4`VPGPSW*@`&`,2(H!XP$8D@!3('Z`!/+M"T2``-P)\,]RH``` +M#%J"`>0$&)```B'"`"*Z[0R$D)5["?#/(/@\<``V`GTSW"! +M`'@F@@_O_P/9`=C1P.!^X'CQP`AQSW"!`,0I)*AF#^__!>`!V-'`X'[QP('@ +MX<4`V`GTSW"!`)XF`=U*#^__J7&I/'`@@K/_X3@`-W*($(#$O3/ +M=H$`9"9`)L`5(@_O_P39%XZWKA2N&8X5KAJ.%JX!V+T"S__QP);@X<4`V(SW +MSW6```0ZJ7#V#N__!-D#A8FX`Z4!V*$"S__QP)K@X<4`V(SWSW6```0Z!&W2 +M#N__!-D#A8BX`Z4!V'T"S__@?P'8\<#AQ<]Q@`!P"BZ),'``V`KTSW6!`&0F +MH@[O_T`E`!"0@1`0'8 +M!?`+#141R7#E`<__SW>!`&0F0"<`$S(.[_\$V2Z/T*]3(0``$:]!*,`@H+DW +M"&0``B!"`&.]*PI%`POJSW&@```,!(%ANEA@!*%H$8```O`/CU,@@B``V0\A +M@0`D>!"OQ@M@$4`G`!/,\>'$_!S(OOP<2+[AP.'!X<+AP_P<"+'\'$BQ_!R( +ML?P +M!2\I@0^`````"O`1"9X%+RF!#T`````$\"\I@0`AH,]P@`"4//`@0`!`>)(. +M0`,%\(HA_P\AH/H(``3<'8`?`P!`#1N%28`#9#R$!`,'))'A"(`"`X'_*(&(`26@&(($`UW``@```']@&\B\I00!.(8`' +MX'[@>+X)X"``V>!^*'*U`>`@`=DH=$AS`MFI`>`@B7+QP.'%*'5(=)AS`]FI +M#!N`RI`B<`%,\+!("D +MI`'8/0>/__'`P@O@!P_8'@F@!`'8T<#@?N!X\<#.#H__"'4A@`:``=X0<0"% +M(84AH`"A`-@`I00=@!^MW@(`!H7`?D`@#P8@AP\-01!^"F`0`MD`IP:%0"`/ +M!R"'#PU!$&H*8!`(V0"G!>ZV#2`/!H4$A08F`7```@``[LDK>`CRSW#%[H+! +M`=F2#B`10X7!!H__\``+`)P!>`$`#>!@Z@",EQ@N4: +M<-+WJ7`J<">__`=D@P,]U@``$.E,@`0`H +MK1QXP+@)K>[QK0D4@<]U@`#\-*EP=@GO_P39`I6`N`*U)?"."^`#*'"BZ,]R +M@`"(S"&"@+DAHAKP6>G/=8``B,RI<$8)[_\!V0&%@K@!I0WP#>G/<(``6#DR +M">__`=D!V".'Y@Z@"$2'`-BY!*__HL#/<(``7#D2"<__`MCS\?'`4@R/_\]P +M@`#\-`*0.0@>`,]P@`!P"@"(SW&``.2S`[@5>`!A'0B>!TUP&0B>`\]Q@0!D +M)@R!!N@:D<#@!/2F#L`'SW6```0Z`X4K"%``?PB1`,]P@`!P"B"(C"$"@#7R +M2HT#N35YQW&``.2S`($JZIJX*O#/<(``<`H`B(P@`H``VB/R\=S@`#D +MLR"#A)6*)D00Q'RQN2"C#0R!$Y&Y(*,%\('DRB)A`(#BT"$B!]`A8@?/(6$' +MR@Z@#2"C!?"ZN+NX`*$`V`.ESW6``(C,`87@N&0)P@,!A4<(G@#/<(``<`H` +MB(P@`H`9\F"-+PO?`0.X%7C'<(``Y+,@@%,C0@`$(8$/_\/__QJZ17E$N\*[ +M8;L3S#!21X'](0`A@`^``,Q)0"`2 +M"(0N"!;/<(``,#\P($`.+-D^"&`A"G('I>*@!X4B@&@:0"`'A2"`8!I`(`>% +M`("R"6`@"G$2\`*"$'?*)0$4#?(`(4`@,G?*(,8#`J('A0"``@I@(`IQ:G4* +M[9X+X`,+V`(G0132"&`1R7"-`J__J7#@>#5H`"&"#X``H/,`V2"BM0!@$2>B +M\<`J"H__SW6``&P?((5`)0X:$VD5>``@@@^``.P?$8(!X!&B!-@%I1)I%'@` +M9H#@RB"!#P``(C,T"L'_`(4DA0*X%'@$9@#>`87)&EQ:7&I68,X`K'I2$"C_\G"(0/```V,Q\.!'```#HSSW*` +M`&P?0((+"8$`C"'#CP[TX0'/_QD(A`\``$8S$0X$<```23.+X<`!RO_@?N!X +M\``+`)P!>`$`#= +MY@B@"*EQ>G``ETHD0""&(/P`C"`"@,(D`B6,(`*`H`FA`\H@P02$*P$L`"&. +M?X``<",*(D`N&P@T)&P>0A,.V"IQ`-I(@;`B``2B#`)`HE +M@"^!`&0FJG!*(0`C<@VO_RIQHJ8-V`"F4PP0(,]P@`"@)80K""8F@``A@'^` +M`#`_%>E#ARB7`H!'>0@5`B$G>@H5`2%'>2BF#0A1`:"F`=@"I@WP"M@`I@GP +M`H`+"%$!"]@`I@/P`!Y`%`#!0B``([8(X`IJ<@H@`*#&],]P@`"4F@"(#PC1 +M`(H,X`H#V%((@`M,)`"@N/*2":`#:G``AH#@S"#B@K#TSW"@```@;!`1`":& +M#0EE!$.&`B%`(`CP`B%!!`XA@`______@<."P04HO@``&<`.`!M`#@+``"*- +M+X``D",!X!UX!*T$C0T(D@!AN`]X`_``V`6M)XTX8`>M"(T!X`BM#(8!X`RF +M&!Y`%`"&QP@1``&&B@R@!26&@.`%V$CT6!:!$&06@A``V")ZSW>``*`E8H=1 +M>A$)Y0!/>B"'%0F%``+8!O`AAPT*1``#V`"F`=BOZ+8*P`HCAPD(1`!$AP/P +M18`A`'V!+P*(8' +MAA!Q!M@.]`:'"^B$*P@FSW"``#@_,"!`#@L($0$!V`"F`(:1Z`:-`>`&K0N& +M`>`+IL]P@`"@)0>`!^@R":`#:G`)V`"F1"L^)\]P@`#((C`@0`Z.Z`0BON\$ +M!`0$"O)$*SXG`"&`?X``T"(`&$`$`=G/<(``.`PCH`IPZ09O_Z/`X'CAQ>'& +M02C"`,&Z02C,`2NX(HG/(JXC[@2O:5X`>)'H02AP<;@?\'%X'C/<*8``,`%@,]Q +M@`#,)06A"0@?`!'8`*'@?P"!\<`V#D__"'9*(``@`=U6#V`*9-BI=ZH*K_\& +MV,]PI@``P`2`SW&``,PE`:%L<@OM#'$3"=X%`-W/<:8```1@@2&!#>\,<1<) +MW@3/!^X'C/G#I<:ER"'-B#"`GF'#9"!\&)!:"$(0H""8`(8!_@``P/P/;SW&@```( +MFG%BH>#9&G$`&$!0,VHU>0`AE0^``.2S&A6"(`HF@"^``&2V%B:!($"!`!B` +M4!H5@B`6)H$@0I$`&(101(``&(!02I``&(101H``&(!0+I``&$10,Y8`&$10 +M$Y85V1#@$[8`&$102G#6#>__0"8!%@`8!%`PN``8`E#I<*EQ]@C@)6IR&A6! +M(`IR%B9#(.EQ;@A@$6"#SW&``'`F`8$`&8`$`>`!H2H((``J<`0XRB%!`\HA02-U\@-N +M1B#/`$`G`!0#VL]QH```#$:AI=D!VF8)(`Y(,#@ +MRB>&$,HG!1`9[P`E@!\```"TZ7'Z#.`'"G+]93)M`-H+\/`@@R``&,!0"0D0 +M(``?P$`!XO$*Q(,Y#4$5-0H0(#$.P10`)0`5*=H2NO`B````VP?P4VL!*(P` +M`!@"4P'C]PN$A`L)$"``'P!`0G%L<"L('P#/<*```$5<@!B`.PA?!00BOH\` +M!@``%_19"82#SW6``,PE!O`4V,]U@`#,)0"E`(4M"1`@%P@1!0/9SW"@```, +M)J`,\!G8\/$`V$`<&#!6)``X!-G>#^`-`=H`A>4";_^`)`0QX'CAQ5IB5'H4 +M(LT`SW*```C49FHT>;-C8[D98<]U@``RU#(E#!$#N"EB".`L?`0I_G`G<`?@ +M([C@?\'%X'CAQ>'&02B-`,&X`-JQVPB["_#/<:````R:@2G9$KEU>8"A`>,! +MXN\*1(,`VDAU"O#/<:``8`PHB9-MF'DZ8@'E\0T$D"G8$KAU>$"@P<;@?\'% +MX'CQP,]P@`#X)2"`Z+G*(((/``!>`$`*HO_/("(#T<#@?O'`\@E/_\]U``"H +M81,(40//"`>$GH@#> +MSW>``/@ETJ?&"B``R7$'AQ$(%`+N"```QZ?/=4P`0$O/@E/_Z+!"'8$(($/````&"NY!""`#P`#```XN`4@ +M4`#/=8``^"4P%8\0BW"&"&`(Z7'/<8$`""Q"@0#`02J!`\*YSW.``,32*6." +MX40`*P#*(*L"^K[*(&$`'/+/V*+8;D.NV5X0"@#)F5X`J4$N44A +M0`%`*,$B)7A%>)2XFKA>#F`*`Z4$I0#8"-Q/`6__HL#/<8``.-3@?_`A```` +MV<]P@`#X)26@)J`GH.!_**#@>,]P@`#X)>!_$H#@>`#9SW"``/@EX'\AH`0@ +M@`\!!`#8SW&``/@E`:'/<*```"`;@*'!"J'@?Z'`\<"*"$__&G#/=H``^"4& +MA@#=`>`&ID(@`"4BN!1X8[C@'`BP0<5#Q3_89L`#AA8<1#,$(($/````&"NY +M!""`#P`#```XN&8/[_\E>$3`&1Q",T?%9<4*)``'BB`$`".&J7**#^`FJ7,* +M)P"0#O3/<*````BAH`.&"-E-AEH,(!$*<^H/("8@V(3O`=@2I@/P#M_I<%D` +M;_^HP.!X\<#J#R__%]K/=X``^"4%A\*'`>`%ITHA`"#/<:#^/`(%V!6X)*#/ +M=:```"!`'4`4$-C)<3C;&@_@)@HD0`2*(`$E;0@?!@'9SW"``&3#(*`#V,]Q +MH```"`*A`!@$5&3:`!B$4$V'`!B`4%R7`!B$4$^'`!B`4$`7`A$`&(10,1>` +M$`*X`!@"4``81%0$&4`$38?)<,]Q9`!4`*(+(!$XVRX/("80V#N%*:<#\`W8 +MG0!_(*#/=(`` +M^"45)`,04X,!XE.CS0`@$0"DX'CQP.'%$-T&\`#=4@MO_P;8'PT1%`QP]0A? +MA6QP[P@>@`+=`-G/<(``^"4RH._QA>TN"T`,"'49!R__J7``V86X#/`O*@$` +M3B*#!U)K0W+9$@*&$"#``$5Y]>B$N>!_WQI8L.!X\:]#A21<08/_^!XSW&``*PLA>@` +MV`BA&?#/<(``C"J6@%6`<8"%[`L*Q0`)\`T+A0`#V`BA"_`0@`T*!0`"V`BA +M!?`(@?L(E(#/H+@`/1P.!^X'CQ +MP*(+P`H!V(X*X`H(<8(,@`/1P.!^X'A!!8`#O06``_'`SW"``(PJZ@R@`T@0 +M@``!V<]PH```'SV@T<#@?N!X\<"B#\__*@F```#9SW"@```?/:#1P.!^\<`" +M#0__SW"``(PJ$H"#X`'8P'A2(`T`@.`!V$`MCA-"#&`)P'@!;;8,8`D`V>Z^ +M`=C"(`$`!+A/(,$`SW"``/BH`HB"X`'8P'@'N"5X$+B%()(`SW&@```H`:$F +M"6__`=@-!0__X'CQP,(+@`//<0$`U';/<(``_"D:#@`'N@N``]'`X'[@>,]Q +M@`#P*$"!`8$%(CZ`"/1#@02!!2(^@`G8`_((V.T#H`,`V?'`5@P/_P8)H`HO +M?18)H`H(=A5X!>#/<8``#"KD&0``X!&``!D-`1`;#=$0XA&``!!V*`NB`\H@ +M@@,%\/X*X`JI<($$#__@>,]P@`"L+`B`@^`!V,!XG0"`"^!X\<#V"R__`-C/ +M=H``C"HWAE4F3Q>`X<]U@``,*LH@80`$\H'ARB"A`!(.S_]`%0$6,'#*("$` +M$/(WAD`=&!`U?P"G!+@4>$`E`1P988H+8`D$V`'8"00/_^'%SW"``*PL`X#/ +M!_P<4(/D)$X#@?N!X\<#6 +M"@__2B``(`IU+/!`+1(1SW"``*1/`"*/+X``!#7"AP&`/0B%`P&'A2@!"3IP +M+W"B"R__R7$`(H$O@`"85!6A6!E`!,]PH```(!N`UZ$8H4\@`"`O(`<@`-@! +MIP*G`>6O?:L-TI`7"!`@`MG/<(``F%0@H(393@^@#:':M0(/_^!X\"4`)T@U@"@AV^@\`!(X-8`H(=3)M-'D5><=Q@`!L +MP`Q?;DX`39RB%J`18F0A`^FCZV +M+H(NIAL(T2",($*%B?:,($*)!?8&G0*U$H8#\.*U`-@0I@#9#/`6)D(0#H(' +MZ!Z:=)T)(,``%+4!X>T)E(!=``__\<#AQ<]P@`"4FO8+(`6@B(PEPY\*\MH, +M0`H(Z-H*8`L!R/X*8`L!R$D`#__:X,]S@`!X+6ARS?8@@]#A2?8!V2&C"1/! +M`!#A**L`HPSPT.!*]B""VN'(]@+9(:()$L$``*(HJN!_`8+@?P#8\<"&#\_^ +M.G`:<0_8`-DH=2AV$/`$($P$!"$"!`4DOI`/)8\3RB7"$]X*+_\$V@'FY0[4 +MD;$'[_ZI<.!X\!\]S@0"0%/5[,!,$``'99H//<,7N +MA?(H!\]S@0"0 +M%/5[2!,$``'99H//<,7NA?$H0IP`-@`I0;8!J4!YKD. +ME)'/<($`D!0`V?5X(*`FH,]Q@`!X'@"!"P\!$`;8`*$5!\_^X'CQP,]P@0!@ +M%!H,H``PV<]P@0"0%`X,H`!@V0;9SW"``'@>(*#1P.!^"0`@``6`X'CQP'H. +MS_X(=H0H!0H`(8U_@`"DFL]PH```(&P0$`"$+@@6SW&``#1!,B%/#L]Q@`"4 +M/S`A0`XFZ#9OSW"``'B@(&"@Z`8(X"#)<)SHT!4`$`(@``0M"%,`0Q4`%@#; +M"^A#'=@0R7`%V0JY1@U@(@3:"/#/<0``*,SI<-H)X"((VET&S_[QP.'%!8"$ +M*`4*`"&-?X``I)IR"F`B$-FI<'X(H"(`V5$&S_[QP-(-S_[E@(0O!1H`(8Y_ +M@`"DF@`AC7^``*2;A!8`$`@5$!`Q"!\`SW&``("D(($`V(GISW&``'RD((&` +MX`/>@6NZ7"&#*`0`=GV"&`BZ7`ZC>EPQ@V@$`7:!8XS"%$! +M`=@&K@`G@1^``&2D`(F`N`"I'I6IN!ZUV@B@"NEP&P@0(,EP&@F@(@+9"_!, +M(`"@RB""`P79`_3)<`39S@]`(HT%S_[@>/'`X<5(=>H,X`<`V80H!0H`(8!_ +M@`"DFBF%+WM6(`($$0M1`"&"H+DAH@'9*:@)\)+;9'D;"<``(8*`N2&BSW&@ +M```@.X$CH'H/8"(!V5$%S_[@>/'`X<4(=1#@)H`C@2"!;@B@#Y8A"@``A4H( +M8"(0V2T%S_[@>/'`J@S/_J"`"'>$+04:`"&0?X``I)L($``@@.#*)H(?``!0 +M1LHF@1\``!`GJ7`2"&`B"-E6)T`2)H`%O2.!(($6"*`/V6$`V0@80"#/<*`` +M`"`[@``E@!^``*3SL03O_B"@X'CQP`AR[LGPN,H@@@_%[H*6:`QB$,HA8@#1 +MP.!^\<`R#,_^[A(,MHAV2'6HZ#G`'9 +MA7HR#&`0I7MM!,_^X'CQP.H+[_Y4:!IQ5GK/<8``S$D`(9(`A"@%"@';+W$` +M(8P/@`"DF_J,V(R#YYZ4PB/%`,]R@`#UFP#=#0R>$(3GRB5F$`#?`!C`(XCM +M@./,)F*0RB#!`SWR&>TI8H#ARB"!#P``6@/,`P'_A"@(!@`A@'^``#`_"PY0 +M$!^``O`=@`4H?@`*(4`N"/"$*`@&SW&``*P_,"%1#@`2`"`J<;((H!\`V@AW +M"B'`@\HA8@``&$`@`-@-[1`2`"`J<9((H!\`V@\.41`!V`+:`!B`(,]Q@`!X +MI*"A`-F`Y\P@(8#*($$``_(!V&$#S_[@>/'``@O/_@AV.G'/=X``L`G`%X`0 +M`-V^"N`'J7$:<,]P@0!D)@'9+*`/APL(7P6IP#<"/#P(0`#%2,-`P"E`>3U#(20X'_!Q?'`>@KO_IAP`-T/ +M\+AE%'AT(`\!*=X2OF*009`0NV5Z]7Y`I@'EZ0U$D+D"S_[@>/'`X<4(=9X- +M(`HH<`)]M0+O_J]X\<`V"N_^`-K/<:$```9R@<]W@`#@3].!^!S(L&'&,1_" +M$"B[,A_"$"B[,Q_"$"B[-!_"$,]S@```4-6K((@@Q`L)(@//?1$-0Q``&(`/ +MK=[OOB3P`Q2,,)%QRB+I``WV`A2,,)%QRB*I``?V`12,,)%QRB)I```D@3`@ +MB2&H`"2!,"&)P;HBJ#:K(8@WJR.(1B'!`$5Y(Z@%`N_^HL#@>/'`X<7/=8$` +MF"0@A<]P@0"4)""@`-O/<(``O#9@H,]R@0"D)`>":*(!X`>BSW"``/RKHA"$ +M`*,0A0"@$`8!`=A!A9X*H!!BA<]P@`"L-F"`!>L`A2&%8'M"A;4!S_[@>,]Q +MI```0$F!SW"``"A50*!!@<]P@``@54"@0('/<(``'%5`H`#8":'_V`&A`*'@ +M?O'`[@CO_@#9&G`*(X`O@0!@)<]P@`"\40`3C"!`@"$,@Q`$$X`@&0B#``@3 +M@"`1"(,`#!.`(!!RRB%I`(#AE_(`W6_P2B%`(`#>".H`%($@9+@P<,HF;A`5 +M)0$4SW"``,0*%2!!```1D@!F#J`02G`(=UX.H!`DV`(G`1#/=X$`%"0U?Q"/ +MCN@`%8`@$*\!%8`@$:\`%(`@$J\"%(`@$Z],(0"@S"8BD#KR)@Z@$$IP"'8> +M#J`0)-@")@(0`=C""^_^`-G/=H$`F"1!AF*&1'AD>04@?H``%8(@!?(0CQL* +M`P`!%8`@4*\1KP`4@"`2KP(4@"`3K]H-H!!*<`AWT@V@$"38`B<"$`'8=@OO +M_@#9889"AF5X17D!IB*F`>5/#141"PT?$$%M`O!);14C52//<(``L%'`@!4C +ME"`"%(`@SW*``+110((!%8$@4'`!VL(BB@`+":(#`-PZ=';Q`!6.(&2Y]PY$ +MD&[QU0>/_N!X\$"(T.(`V\OV@8C0Y,GV@HC0Y,7V@XC0 +MY,HC:0`-ZUUE08ABB``BDB`#B``AT2``(!`@`>8!X=_QSW>``+Q1"B.`+X`` +ML%$*)(`O@`"T40HE@"^``+A1%>ZI<,EQX@H@!^ER2G#)<=8*(`=J`HV,HBH0/*(*(#RB+" +M`,]TH```(-N$#O#/=(``S*SP)(P0`B8-$P7LL7'`(V8``>+I"@2`:'#!QN!_ +MP<7QP%(.C_X*((`O```/)PHB@"^@```@;!(`(`#=>G`Z<`GP;!(1(,]Q@`!8 +M+@"!`>``H0(AP"2!"(4/`0"PK0#>#?#/<($`\#/P((\#>@D@`.EP#@WO_^EP +M`>;/<(``4*H`@.,.!)!L$@`@SW&``+@V`B!`!!)PRB`%(+%P0('/<8``<*OP +M(8$`RB4-$)<)!8#/!^X'CQP`8-C_[/(`-T*Z=X-K_Z0$H``@.$8WL`N(18$\@#>G+X`WQ+P$F\4 +M>,=P@`!,K3*0"(#+>`?RP@@@"B]X@.#`)6$0`>?/<(``#+,8B-D/!)`-!:_^ +MJ7#@>/'`G@RO_@AQSW6@```@^X7/<(``7`OP($``SW*``#0+\")!`,]V@`!X +M"UH/(`I`AAN%XG@1"%0*SW&!`*0D!($!X`2AW@CO_@;8V@CO_@;8`-TK\`_M +M%29`$P"(SW&F```(`[B!N`"A`=G/<*```!`IH+(([_X&V,]RI```0'X2`0;/ +M<($`8"6U>""H@!(!!@'E(:C0$@$&(J@$(8$/````_RBY(ZBQ#121702/_N!X +MX'[@>/'`N@S`"*8,P`B2#,`(T<#@?N!XSW```.4.%03O_M\2`;;@>/'`R@N/ +M_J(((``(=@HE`)`J\AKN$0Y0$(+F8`\A`,HA80`A\+8.(``!V`:%@>#*($(# +M2`\B`,HA8@#/<(``E)H@B`WPE@X@``#8!H6`X,H@0@,H#R(`P'G_V<]P@``$ +M5BF@QJ71`X_^SW&@```$!8$$H0/8%:'@?@QQ$2$`@,H@@0\``/\`#O+/<:`` +M``0/H0.!++C$N,]Q@``4O?`A``#@?N!X\<`F"```C"##C\H@(0`*\A8(``#/ +M<8``A%4#N!5X.P.!^\<#AQ<]P@`"4FJ"(_]@0=()RB!"`UD# +MK_ZI<.!X\<"X<.[)*'/8X*(!!A@]'`X'[@ +M>/'`X<4*)0"0*'`*\CX-``ZI<@AQ!]@*"R`0`-L-`X_^\<#AQ0AUSW"!`'`[ +M4(!6($,"SW&``'Q5?&*`H7IB(8J)Z0*`\+C*(($/``#I'*@*P?[Z"H`&-@E@ +M(*EPS0*/_@4%`"3QP%(*C_X(=2AVSW"``$S1((!!#A`1Y@W@`LEP"@[@"0]X +MSW&!``@L(8$E"%$`A"X(%L]P@`!4/S`@0`Z`X,\A80#/(>$`SR%A`@3R12%! +M`P#;"O`6;75X`"""#X$`\#4@H@'C\0L4A`#;SW&!`'`U%B%"`V"J8:H!V`*J +M`]@#JFAR!O`X8K9X9*@!XOD*%($M`H_^!NC/<(``A%6@V03P*'`DV1T'``#/ +M<8``\#<@B2L)$`4`V03P`>$O><]R@``$NT"*%PI"`'5ISW*!`!89N4+ +M@8`"\/_9X'\H<`#:1:!$H/_9(J`LJ#RH0K`>&(0/``#__^!_0*#QP%()C_X( +M=O8,X`(H<`AU[@S@`LEP"':*(/\/$';,)0*0,/)J#N`)KWBIB&(.X`G/>,F( +MY@Y@$*EPSW>``%S5"&4%H:]]"B*`+X``F%2]#1*1)_!+"9$@`-T=\$`M$!$` +M((`O@``$->&`PH"%+P$9+W`>":_^R7$`(@$DG[@5H?:ASW"@```@&X#7H1BA +M`>6O?0HB@"^``)A4Q0W2D,]Q@`"85$D`K_X`&4`$`-D)\/_:%B!#`$6C`-I& +MHP'A]0G4@.!^\<#:#T_^)(C/\F>E&M%_!%>3&M)8A^9B"N18@FB'1\66$@M""`C"$0@$3WBB$0 +M`""@([D@I0"`*K@!I0#8SW&@```W"*$.C0&A!)4"H0^-`Z$%E02A$(T%H0:5 +M!J$`A0>A`84)H1&-`*&U!T_^\<#AQ<]U@``4/B&%C^FN#L`)SW"``/P4`(`' +MZ`'9SW"D`(!#,*`!V`"MF0=/_N!X\<#AQ<]U@``4/B"-$.DAA8[I2@[`"<]P +M@`#\%`"``-D%Z,]PI`"`0S"@(*UE!T_^\<#AQ?X-X`G_W8#@RB!!`P?RSW"` +M`)2:#@O@`@"(10=/_N!X"'$(=!'P+RI!`$XB@P>$*P@&SW*``#@_,")"#H;B +MT"3!$!`AP0#QZ8#DX'_*(`(#\<#/<8``.`PG@3!PS`@%`-'`X'[/<(``.`QU +M!2`B"(`=>8H@"05U`*`'PKGQP&X.3_Z@@`AV#PT>$=C87@B@!R*&(0U>$=38 +M4@B@!R&&`-C/<8``.`P"H0'8!:$!A@:A#PV>$0'9SW"``#@,)*"9!D_^X'C/ +M<*```"!;@,]Q@``X#`>!,PB5`,]P@`"$/@"`(8$X8`)Z@.(@`"D`RB"I`,]R +M@`#\#`:"`X`@@(`A#PJ-`2`/2'#@?O'`X<7/<8``.`RG@03:L7#*)8X0#`@- +M`#T&;_ZI<.!X\<#"#4_^"'7/<(``.`PC#;40IZ#/#S"%2!X'[@>`#9-*@UJ.!_*'#@>/'`Z@Q/_AIP +MSW"``*1/`("+")X`SW6```0U,!6`$'\('@#/=Z```"#;A[H)P`F!X,H@(0`+ +M\H;@RB!A``?RB^`"V,H@@@\``/\`C"##CR?R!+@=91<($"`!V/P?`!`('X`? +M"````,.E&?`CA1?I#!^`'P@````-#D00`B9`$`?P#B&`#______88"*%.&`" +MI?@7`1`!A3A@`:6U!$_^X'CQP$X,3_X(=L]P@`"4F@"(E0C0`,]UH```(/N% +M'>DEAA#I#0]$$`(G0!`'\`XA@`______^&`DACA@!*8`V`6FXZ8('8`?"``` +M`,]P`0"@AAH,```H\,]P@`#4SGH/P`X,'8`?"````".&%ND+#T00`B=`$`;P +M#B&`#______X8"*&.&`"I@#8`Z;X%0$0`88X8`&FR7!>"6__`-GEI@'8_!T` +M$!$$3_[AQ>'&8HB!B()[;WNFX\HD*Q"']@L+,PX1W$(CC`D!WL]U@`#@3\6E +MPXC!O@GF;'Y@B`*()W,">VNE]"$``VQXSW&``*QX+W`)"E$`-YD#\#:9#'DO +M<"P=0![!QN!_P<4-"%$`SW"``%10!?#/<(``X$_@?O'`SW"``!Q0L@[`#@+8 +M[@K@#0#9T<#@?O'`SW&``&Q7`8$W"%X``($;")X``=C."N`-`-G/<8``3)H* +MB0'@"JD%\`#8M@K@#0AQSW&``$R:"8D!X`FIT<#@?N!XO0?/__'`I@E`"48) +M8!"*(`\*SW"``&Q7`(`5")X`SW```,LH]@JO_H/9"_`&"4`)SW"``*QX-AB$ +M#P``Y`PB"$`)T<#@?N!X*')U`"```-GQP(8*3_X(=U,@?H`H=4AV!/13)7Z0 +M"?+/<```!#SI<;(*K_ZI<@#9`O`!X14)A0/P)T(0\"5`$/,*`(`!V`/P`-BM +M`D_^X'CAQ0#=`O`!Y1,-@Q"K8*QA@GLO(\>`^?,"\`#;:'#@?\'%X'CAQ4`I +M#`(E?$`L`Q2%>R<*-`((=`3P`1Q2$&&Z4R1^D/OU02J-`,&Z@"7_GP0!_P<7@>/'`SW&@```@.X'/$`H@0,!P,]W@`#LPR5X +M0<"$P)((8`X.H")`)0,6!84C +MA0"V`8:#N`&F`851Y)W`U99A@0"`,`@#9P.&@!\K_/V7P)$X0%2//`\"G +M`>$P>?;QK0!/_O'`3@A/_B8-C_\*)0"0*?(CA2+ISW*@```@VX(+#D00`B9` +M$`;P#B&`#______88"*%.&`"I0#8`Z7X$@$``84X8`&E`=C\&@``J7"B#2__ +M`=G#I<]P`0"@A@X(``!=`$_^X'C/078-'C/`>X)7@0N(4@D@`!I:X+;_X!V#X(X`("AH"X`:6) +M!P_^BB+_#P#<`_`!Y!L,%1$R;#1YQW&``)0H:X'Q",&`"8$"\$APX'[@>/'` +M.@J@":+!SW&``*QX0,`;F4'`&ID@9$H`@ +M@.#*)<(4#O2+<3H*;_^I<`AU"/"B#"``J7`(=0'8&QH"(``AD2^``+`_&!&` +M(!,(4```P(#@RB,A(,HBP20\\MX((!_I<)IP*@[@'@IP"'$*<)H/X!X`V@HC +M`*#,)2*@#O(*<`#9BG((VR,@0`5*)```?@I@'@IP!7WV#>`>Z7`(<>EP:@_@ +M'@#:"B(`H,PE(J`2\A@1@""%Z`'8&QD"(.EP`-F*<@C;(R!`!9AQ0@I@'NEP +M!7V""N`>"G`(=GH*X![I<`#!"0E1`$*&#/`7"9$`0H9B@`(C@0`)"5(`8J8# +M\$*@3"(`H,PC(:`-\HOMSW"@```@.X#/<(``D,SB".`.,N&I<&$%+_ZAP.!X +MSW&@```P)('@?R1XSW*@```P)((&>22BX'[@>/'`!@T/_@AUSW>@```P"H=* +M(4`@!""`#P`"``#7<``"```!V,!X@."J"2``PB%")!IP01<`E@#>B^B3%P"6 +M!""`#P````^,(!"`RB9B$"H-P`PGZ,]P``!$'*8.(`<`WP/:$+H$(($`4''* +M(>$`P"DA!L0@00#,($&`RB=A$`WOSW```+`>>@X`!\]Q_P<``"1X"PA```#? +M!_`!WP7P!"&/3P`$``#/<```"!Q2#@`'!""`#P"```!"(`"`RB!B`(#@`=G` +M>00@@$\"````UW`"`````=K`>B\@!PB`X`';P'OEOCCOCBO8#B`=C` +M>`6X!7F`XP'8P'@&N`5Y$L@3&E@P`>`2&A@PT0,O_HEPX'C/<($`_"LA@,]P +MH```,`2`"^D$((`/"````-=P"`````'8P'@&\(8@?P^"X`'8P'C@?N!X\<#A +MQ1(.[_\(V`#=B.@B#2`')-CRN,H@00,#\@'8F0,/_N!XSW&@```P`X&4N`.A +MX'[@>/'`X<7*"^`)`-JAV<]UH0"``1"Y+0C1`,]Q@`"T&`"A&H49"-\'-X7/ +M<```SBA:A28+;_Z&(?\,%X6"N!>E-/`6A1<(G@`6A0\(7@!;&9@/````"`': +M&H4/"-X'%X6"N!>E`]D3\!+J$X4$((`/__\```4@@`\`@*0`$Z41A84@&``1 +MI0'9`_`"V1&%@^'*(:$`AB`#``:YB+DE>!&E$86HN!&EW0(/_L]QH```,`.! +MB+@#H>!^X'CQP.'%W@[O_P'=@.#*($(#*O3/<:```"P%@:"X!:$`V%H+(`F, +MN`[P;'`S"!\`SW"@```P!X`O"%\&+R8'^!/T>@K`#(#@`=C`>!MX^@SO_X4@ +M009JZ`'8!O`U`F_^BB"-"@#890(/_O'`Z@D/_L]SH```!*2#18,5($X`:!(, +M-P(F#Q/1=,HFSA/$HP6C6&3">`(@#@,0=,HDCA/*)`T0(KP`V`7P`!8.0`'@ +MT*/["`2#I*-HS!IB&")"``(B`0!0<,HAC0`EH_$!#_[QP'X)+_XT:`AW-GG/ +M<(``S$D`(%``A"\%&L]Q@`"\FS(A0`[/=H``>*2!X`'9`(;`>4HA`""&Z(#A +MRB5"%`_TA"\(%L]P@`"D/S`@00X`$``@C@Z@'@#:"'4`AH#@`-@-\H0O"!;/ +M<(``K#\P($$.$!``(&H.H!X`V@`>0!2`Y!X\<#.""_^`-H4 +M\!0BC@#?8&&/H(\(NV5]'F9BCI9M@;P0NX5[SW2@```H8:0!XE!ZVPI"@`$! +M#_[QP.'%SW6@```H!!V`'\4`0B;^#N`/"M@$'8`?S0!")@0=@!\0`,<`!!V` +M'P$`Q@#>#N`/"M@$'8`?`P#&``0=@!\0`,8`!!V`'P\`PG($'8`?#P#"G00= +M@!\/`()M!!V`'P\``J.J#N`/'MBA``_^\<`J"`_^SW6``,@8`(6@Z-X*P`D# +MV<]PH```*"&@18`AH"6``=HP?$/;8:#%@&&@98`>;,&X!ZT<;,&X!JT:;,&X +M!:W!N22M:*U`I4D`#_[QP-8/S_VAP0AW*'5(=DX,+_X&V!9O12#``,]QH``` +M*`&A18$!H26!,'BD>``<1#`1#0`0@";_G]8'S_\`V`/P`=C]!^_]H<#QP.'% +MSW6``-PA`(6'Z%X/S_^*#L__`=@`I>T'S_W@>/'`<@_/_0AU`-@`I<]V@`#X +MJ`".#PA1`/8+0`F!X`'8`O((C0FMN0?O_0*N02B!`L&Y02@#`\&['7K"NL]T +M@`#$TN"X2F3A(,('RB"B`'!Q`=C"(`$`4'$;>.$@RP?/("L`X'[QP`8/[_U* +M)```"'8:<4AUN@_O_RAP"'@I +MC@IP(JA1!L_]X'CQP.'%"'7/``J( +M`JJF#6`"`=@J".`.J7`$\)H-8`(!V"D&S_WAQ4&`9J#AP@#<(,,W"EX"SW2` +M`#!)OX0(N<]T@`!P"H.,9'VD?`F\A7DE>RRZ!"*"#P```#!E>B.`0J">N2.@ +M)?`3"AX"02K!`,&Y`>$!W`KP$PJ>!CQKP;D!X0+65YA[D$(H(/_P,`W":Z17E2(<$#(J"AP.!_P<7@?N!X\<#AQ:'! +M"'7/<($`<#4V>`&(5FD5>L]P@0#P-4%@W@N@)8MP`,``I6D%[_VAP.!X\<#J +M#,_]"'<`V,]V@`#,)0"F`=T>"6`*X<5*#T_^0"8`&+(/[_\D%H$0>@@```[H +MSW&``.PW`($!X`]X`*%V#F_^BW``I@3PH*:I<(3H2@Y/_@"FB.@[CH;IBW!* +M#V_^Z7$`I@#!ANG/<:```!"IH8/@RB4A$`WR4@B/_@"&B.B>"2`")!:`$`#= +M`_`AW=(.3_YN"H`/J7"Y!._]H<#@>/'`@-G/<*```"`CH"*@9@W@"!G8N@@O +M_@;8!""`3P`"``!3(P%`!2$^@/;ST<#@?O'`X<6V"&`)"'4M"%$`SW"``,32 +MJ&"`X,H@X0@X'CQP%H/P`((Z*8((`8%V`()X"4%V-'`X'ZAP4#`SW"``+!) +M(H#/``^"E;@/H@'8 +M()(/"9X#`=K/<8$`9"9,H>!^SW&``+!))H'LN3.CX'[AQ>'&SW6``+`)D(5`%8`0 +M!"2"'P```!@KNE,DP1!$N%,@0P`2:A5X-'C/=H``3-H69L]P@``)@5`!`$*'X.+W#"("($$/0#NGMC57IU>WIB66'/1#A +M(G@CN,'&X'_!Q?'`[@O`"R8*P`O&"\`(T<#@?N!X\<`:"L_]SW"!`$`^RQH8 +ML,]P@``DQ,P:&+"@S0#=1P@>`,]RH```(#Z"SW"``+!)`(`"X6&X""$``!"B +M`=@'&AB`$-@`HDH(("5*(``@H,TDN%,@#0`$())/,`````#>:?!.#L`*"''/ +M<(``L`FF#R`(&8`:<,]P@`#DN`*`C"`"C8GW&@L@`A38SW"@```0J:"@S2,( +MWP-*(@`@2G5*=DGP_@H@`A38`-G/<*```!`IH`'>/_`$V-`:&+#/<:```"`1 +M@8#@BB`,`,H@@@\````"`*$$&9B/8````$H.``8]!```#'"@$@&W-0A>!=#) +MAB#QCQ3T!"&^CP```%`%\@38H!H +M#8`":@]`#`<"``"AS5,@?H`#]`'=T_',R[)%P@>`,]PQ>Z".@'9H@A@#]`2`K:@S0HA@"^``.2VSW>``.2W6PC> +M`(#8H!H`EN'[LD!XENG`-XA"!X`SW.@``!%;8//<,7N@T%>"&`/ +M`=D$\!.'`>`3IW$1`2;/<(``9+@U>#J``>$ZH#D*$"`:AP'@&J<6\(H@!`"@ +M&ARP$H=Q$0$F`>`2I\]P@`!DN#5X.H`!X3J@#0H0(!F'`>`9IZ#-1PC?```38T!H8L*'-[[A=\\]QH`"`(%*!SW&` +M`#`*/Y$PX-H`D`V@8)P`7+R0#9H!```/"X*'`%\BH+ +M0`8`V):X-@Q`#P38T!H8L`OQR@I@"8H@!`#:".`%`-_+R:`0``#PN.EP!O+Z +M"D`&`-B5N`8,0`\$V-`:&+`)V<]PH```(#&@'/'>"F`&`=@`V)"XV?'+$@&V +M')&&(/\,%P@1`G8-X`$0B0\(40#+R>X,X`$0B!J&"2$`(.3@QO;PIBH/8"40 +MV(PA`:G']\@6`1`P>4H(X`@0V,O),!(&-L00`P`PB*00#``X$`0!6I`!V!,, +M'A7/<($`0#L($`4``O"X<&APC@@@!,ASUA("MD$J``/$N#)H,"&!#Z``M"X( +MR\D"`#/<,7NA$0!V85['@X@#P4D1`$PR,]QH``` +M+0*X`""##Z```"U8@]82#+8LO,2\(8$="@$#,""`#Z``9"X0(0$#*W@#\@/8 +M&*,8@XHA""`1\"\J00!.(H`'$"$!`""CSW&``#1!A"@(!KX.X`,R(4$.SW.` +M`'2D((/MZ7H(P`;ZI@`>0!01AH3HBB`$``"F!!Z8GR``/P`''IB?`0#`_#X) +M@`[/<8``*#T`@13H[LG@H24('@`PR,]Q@`!0IT`H`P3T(0(`SW#%[H)(`=E> +M#2`/97JI<-(*(`@*<2H/0`P*"*`&`=C_V<]P@`!`^XAB'_C)8@G`,2HP3T`=@9 +MH^!^X'CQP'8,K_T0V@AV`8A$*#X-SW"``&"JH(`!EB=U`+4T%H`0`JT!C@.M +M0"8`&9(-H`Q`)0$90":`'4`E`16"#:`,"MH$;B1M>@V@#!#:E02/_?'`SW"` +M`)2:N@D@`P"("NCR".`%#-C>"*`E#-@!V`7P:@G`!0#8T<#@?N!X\<#V"X_] +MSW"``(15I!`.``/P$"9.$R+N+RB!`TX@C0<2""`"J7`V#L`!=>@O*0$`3B&# +M!X0K"`;/<8``.#\P(4P.,VTU>0`C@@^``*15.F*`JA`@P`#K\04$C_WQP.'% +M`-T?\(0M`1//<(``:%8R($`.%>C/<8``A%6D$0``#R!``Z09``#"#^`(J7`S +M;35Y`"&"#X``J%4`J@'EKWW)#=*0SW"```16"8!3(`$`1"""`"5Z1"`!`88@ +M_PU%>04@?H`!V*D#K_W"(`$`\<`F"X_]"B4`D"AW2'8:/'`X<7/ +M=8``B*H:"2``'84!V"$#K_T4I<]PH```#`V`0B``".!_2"```.!XSW"``+`) +MPA"``(#@X'_*(&(`X'CQP,]P``!L'&(,@`8%N-'`X'[@>/'`SW```&@<3@R` +M!@6XT<#@?N!X\<"6""```-BB""```-AJ""```-AR""```-C/<```6!PV#*`& +M`-G1P.!^X'CQP,]P@`"(JE8@@0,4@('@S"`B@!7T>@@@`/`A```N""``BB#_ +M#T8((`"*(/\/SW```%@)$'S_\(<<]P``!D'-D# +MH`8EN>!X"''/<```;!S)`Z`&);G@>$$H00'CV`6XG;F>N;4#H`:?N>!X"''/ +M<```:!RE`Z`&);G@>,]Q@`!X52"!(H$"><]P``!0'(T#H`8P>?'`SW```%P< +M?@N@!H#9SW"!`/PK`H"`X,]P``!8'`SRSW$1@!$`8@N`!L]P``!0'`39`_`` +MV5(+@`;1P.!^X'CQP$8)C_T(=<(.[_\H=H7N`^@-#0408@_O_ZEPE0&/_?'` +M)@F/_0AUM@[O_RAVA>X#Z`T-!1!F#^__J7!U`8_]\<#/<8``B*I4@0#85J&! +MXA2A$`@B`,H@8@#1P.!^X'CQP`;HN@[/_]'`X'Z&#L__$0A?1`/9SW"@`(`= +M)J#V\?3QX'CQP,]QH```($`9@`\``!`G`=@'&1B`$-@`H03PP@M`!Q,(7D3/ +M<```"!R&"H`�C>!VQPZ0@>@%(C`$#`N-'`X'[@>!#P+RM!`$XC@@<0(8$` +M-*@#W#)J-7D`(8,/@`#XIX"C-(CQZ<]P@``HS]D#``[@>/'`1@B/_0AU"B"` +M+X``^*@`$(`@(PA1`-(,P`@;"%$`SW"@```@&X`)I<]P"@!@KL8(``!,\%(, +MX`$0C7(*X`$`WJ2X"B2`#X``^*<4K0_PA"P(%L]R@``X/S`B0@Y@H87B`=K` +M>@'B1*D:Z"\I`0!.(8P'`=L0(``#4FQ5>@`B`0%`(0("Q:D`W\D/TY`5(L4# +M`!V``P'G[W_Y\<]R@``HSP:"`X`@@,=Q!@"`&D8+(`Y(<,]PH```(!N`*(T) +MI0(80B`$&(`CQJ7'I=T'3_WQP,]P@`#XJ`&(1"@^"P`A@'^``$BH'@_/_\H) +M8`X!V-'`X'[/`@.+,(2&`!O0HB,F($0F!`P7P"0FD``+>`=Y)B$`@`0@/#H`0 +M`]I(J0CP>X$.)($?_____WEASW,&`(`:,0G$ +M``8.S__R#Z`!$=@A\"\L@1!.)(X7`=T0(H(#3WH"OM5^`":,'X``^*>@I/'J +M2(C/<(``^*A"J,]R@``HSP:"(GL#@""`>6'>"2`.2'"9!D_]X'@4B!'P+RH! +M`$XB@0<0($``#W@$VP*Y-7D`(8(/@`#XIV"B\NC/<(``*,^)`0`.X'CQP,]P +M@`#XJ`&(1"@^"P`A@'^``$BH;@W/_UH/H`$1V-'`X'X(<<]P@0"(-*D"8`8` +MVN!XA.D`V`"B#_",(02`!?0!V`"B`M@'\(PA`H`&]`+8`*(!V`"CX'[@>/'` +MSW*``!`7`(*+Z`:"`X`@@,=QDP,`ARX)(`Y(<-'`X'[@>/'`SW&``!`7`(&` +MX/0((@[*($(``-G/<(``%#T@H-'`X'[@>/'`6@U/_<]V@`!0+@"&BB7_'PT( +M0`.Z#<`&H*;/=H``G%$`A@L(0`.F#<`&H*:9!4_]X'CQP!X-;_T`V:K!SW>` +M``B[0"<"%`>/2,&`X`78P"@A`\!XSR!B`Z*"C"40D$CWBB40$**B#!J`#P`` +M`"0=90&"1\$`(%`#QW4!````!-A`P&'`SW"@```@&X`JO4/`1L4!WD7&0L8. +M)8`?`````D3`BW")P8X.(`V(P@C`#>@)P`J]21\8$`P@0*/*)0442A]8$\EP +M`O``V.D$;_VJP.!X\<#/<8``"+P+@:2X"Z$1"%\`SW`!``SM8@D``-'`X'[Q +MP%H,3_T(=L]U@``XO`"%"B&`+X``"+L:<0?H`-]Z#B`>Z7'@I<]P@`#HNMX/ +MX`T*<<]WH```(!N'$PB%`SN'`B9`$$$HD`(#\$H@`"`?"!`@`!$`(![9I@D@ +M'P':((`HI3N'&!@`!"*@21$`)@(F`1!*$0`F$PAD``(@3P`/#X4?`0````#? +MD+\)V,8*(`$MV2"`[Z4LI<*@*K_FH,]Q`0#X[<]R`0!@Z\]S`0!PZFH/(`$) +MV*X*(!X!V/T#3_WQP)X+;_T(<<]U@``(NP@5$!#/Z7"2#*`!"]A+%0`6H+A+'1@0Y@WO_^RF`_".#(`,SW*``!!) +M%((O(0<$$"!``!2BSW"``&RJG@[`#7$#3_W@>/'`\@I/_;IPSW6```B[(H7/ +M;8/X`=*<(P@PX\Z<`KT +M0"H!)$*%SW```&4T!@NO_45YSW>```0\`(<`80J""8`(8!_@`"00!8@ +M0`0UB!K8`J<`(8)_@`!P0!8B0@0;D@P?`!4$N!8`;LD.'#)(E +M>`RR`8`6GZ7"J<=H+H`9*)(`!SW&``%`N`*%+%0`6@KA+'1@0_0%/_>!X +M\<"^"6_]`-C/=H``"+OBAKX,8`L/(,`#V@U`"PAU2Q8`%N"XP'C/(,(#G`MB +M#LHAX@!X\<#/<(``"+L"@`'<`"P`$(8+8`X?V<]P`0`,[0H.S__1P.!^ +M\<#/<(``;*J*#,`-SW"``#B\+(`'Z2X,(`$)V$X-[_\!V-'`X'[@>%D"H`$2 +MV.!XSW*``!Q0!H(#@""`@"&%!7$$X`U(<.!XSW*``!Q0!H(#@""`@"$*"UD$ +MX`U(<.!X?0<`"/'`#@F@`1+8)@X`",]P@`!L5P"`XKB4#@((SW"@```@.X#/ +M,"!`#@'G-P\5$<]V@`!<5_5^((9XZ0(*X`8J<.GH +M((8)"A$@*'4(\`H*X`:I<`3H((;Z\4`B4B#F\8;M9@O@#0IP#/`8$``@`X`@ +M@`(A002Y87(+X`T*.E?`0:$`-O +M>_,+1(#@?\'%X'CQP&H/#_T`W8HD_Q^`HH"C`O`!Y10A3P/`CXPFPY\,\H&/ +M\P@%@P@F#A#`H@&/`*,!V`/P`-B=!P_]X'CQP.'%"'4F@`"`@.#*(((/```V +M$50'0OU@@0/P8(,1"T``0H4"@T)X]0A2@`&#H:-@I0&EH*!$A0:%&.`5"EX` +M0(`'ZF*%0H)B>@D*4@"@H`2%1H4!X\<":#@_] +MO@H@`@AVSW>@``!(!/"F"0`'SW6@``!%'H4$(+Z/<````/;UBB#_#QRE&*7/ +M<*```!P4&(`/`0``@`*&SW&``,C%"*4$AFP1@@`%I0.&1"H^!Q#A!""`#P`" +M```>">`!,R%!#@.&`-H$I0F&!Z4'A@:ESW"``(`*)8"!X!X\<#�_]"'8Z<1IR:'=6""`)B'7>"N``R7#) +M<"IQ"G+I49#044"R#` +MPP7T;'#["!Z`"R#`P_/U`@E@#LEPI04/_>!X\<#AQ5(,H`@(=8#@RB4A$!#R +M(@J`"`AQ%@[@`JEP"B4`D`CR^@E@!0C85@H@)0C8A04O_:EPX'C@?N!X\<#V +M#`_].G#-R0#=!2!`!,T:&+!&"F`+*G`:<`AQ"B*`+Z```"ZI=B#P+RA!`$X@ +M@@=/>E02`R"2:B_(,"2,'Z``9"Z$>,T2#+9D>`0@#P,`VP\C@P`3",`#AG@% +M)0V0`_)E?L]^9GGAZ502`""`YJ9X!2!!!%0:0"!D"R(.RB""`R\E!Q0.""`) +MJ7">#R`.J7#NR2\('@!4$@,@SW"@```<@X#0?@:\!"2,'_\```#/<,7NA$4! +MV2AR>@R@#@4F!!.1!`_]X'CQP#(,#_T:<`AU`-\%\,9XS1H8L,9](^TO*$$# +M3B"!!R]YSW"``)"]\"!1``#>#R9.$`\)$2#-R<9XS1H8L.H/X`@H<,]Q@`!D +M'O`A```+($"$S+Q%8:`Y>9X%:9<"B(.RB!"`XX.(`XO($<$`@_@"`IP +M[LDO"!X`=8;/<*```!R#@+!]!KP$)(P?_P```,]PQ>Z$10'9`MIV"Z`.!24$ +M$Y4##_W@>.'%!_`&?:"D$"'!`"]Y#^DO+$$03B2#%V][SW2``&0>=7R@A'#J +M!7WO\>!_P<7@>/'`"@L/_0AVSW"``)2:\@F@"`"(`-T.Z#8/8`[)<`HE`)`( +M\L(/(`4$V*X/X"0$V$4#+_VI<.!X\<"^"@_]H<$(=2AV2'<:MKO#/<(``S-),(("@RF#H8*_T`B;`$P;@*0A5`S,F`'"` +M`%300">!_0!VA+P^N8-\HPF@I(-\HPFPI9Q +M]`7:"/``V@;P`MH$\`/:`O`$VL]S@`!L;EEC#!'``!0@C"`0K0P1P0``))`? +M@`",;@H0S"`5(Y,@`"1$$`X=`A%<8PP4S!``(\$$$A'/`&)S_&2,K0`BCP^` +M`"QO"A?!$!EA,:T*%\40`"4!`2^M"A?!$#QDC:T0%\$0-JT0%\$0-ZT*$,$@ +M$!?,$)EA+WE)(0$&-*TUK1`7P1`2$\,`>6$O>4DA`08RK3.MQW*``(QO$A+! +M`")X`!D"(!(2P0`1C2)X`1D"(!(2P0`6C2)X`AD"(!(2P0`7C2)X`QD"('OP +MSW````TKR7&&"&_]Z7*+\6T(42#Q=@'9PB%)`")X;K@<>E!ZSW.``$QN6&,( +M$,``7&,.K0@4S!!4>3]C%!?/$#MC_&2,K<=R@``,;Q(2SP#X8`^M$A+``)A@ +M#:T>$L``%*T>$L``%:T>$L``%!/!`#A@#WA)(``&/?!NNE!ZSW"``#IN,R"! +M`,]T@`!L;R]X+*U;9'X3P8":8AEA+:V8$\.`+W]RK9@2PH!3K<]R@``LWL)(P``#*T:$L``'A+"`%A@&W@) +M(,`##:U"%,`0&W@)($``$JT3K8MQW@E@#LEP2B4```3P0"5%`',-U0``VOD* +ME8"$*@LB%")``;A@AH@`(8%_@`#L851Y8YDO)(``"2,#`V]\9JACF<"("2.# +M`V]^8*ACF?*("2/#`V]_++\1$'[_RAP/'`N@[/_`AV*'5(=QIS"B$`(0]XV@A@ +M#FAQSW/_?___`-D$\`'A+WG4X4OV%"!,`$&,]0V!D$",[0^!D`+P:''/``#=`O`! +MW4HF`"`W\&L+CB5`+H$@-7D`(D`@0(!"<0&`!;H%()$`0"Z`(``D%3`($1`` +M+R%'!"\B!P3I<*ES_@[O_PHD@`4(=@@=`"`C"($/_W___[M\!22,%7)OSW`` +M`!`K*G$*PDFP14('4`@0"96()<.E*#/<(``@`H%@!UX%20!(`+` +M8($3>!1[`\!"@1-X%'HAB@&+"+DE>``8!#``BB"+"+@E>``9!#`(W&,%[_RH +MP/'`.@W/_,]P@`"4FL"(SW"``&Q7`8"AP:\('@%J"F`.`-WR"4`(8@T@"(MQ +MSW>``%S,T@A@#NEP`_`!Y;!]80V3$$H@`"`&\$`@0"`O(`@@ZPB3H$HA`"#Q +M"1&@R7`2#R`."G%2;10B`@2$+@L2"'$4(D($`"*`#X``K&$U)X00*.`U($`. +MR7*I%J8SW&``,C%&YAT&8(`'*'/ +M<(``-,Q`H,]Q@`!,F@R)`>`,J=4$[_RAP/'`:@S/_#IP*'4:$(, +MX`@!V0`9!"`9\`#>%?#;>$`@D@``(D`C#W@F#.`(`=D4(8\C`+<")8`4#W@2 +M#.`(`=D!MP+FVPX$E'D$S_S@>/'`'@SO_!S9&G``W<]V@`!0JJ"FSW>!`/`S +M?@FO_NEP$?``V`\@0`,`V00@``0%('Z`"/(`AA4G#!`!X*"D`*8!Y>,-U)$] +M!,_\X'CAQ07P(*,0($`##N@O*P$`3B.-!\]S@``4O;5[=.K_W("C\_'@?\'% +M\<"R"\_\"'8H=0II:@G@#@]X02A!`?`F01#$N!$A`(#*(($/``#]%,@+(?W* +M(4$#[0//_/'`:@O/_%IP&G%(=CIS"B,`(0#?&O`4(LTC()4$(8`#$';+(4&$ +M$?*."&`(+R#'!"*`0"X#%$"5SW```/P4E@LO_04C0P0!Y\\/!)1U`\_\\<`N +M"\_\2'8F"._]:'4(N,]QH`"`'!^AX'C@>.!XX'C@>.!XX'C@>.!XX'C@?N!X\<#."L_\H(`: +M<`2%H<$/"+0`0"41%105$1``'(`_80``\(MPC@O@"P39`(6&"^`+!-D!A7X+ +MX`LXV2*%`85`D`/I$0I%`,]P```#0M8*#_T#A6(+X`LBA100@2`-"5(`4@O@ +M"T`@`"$$A2OH`-[)<@3P`(`!XAYF!(4C"@4`%B&`((&`(("98>L,19`!%(\4 +MSW.@`$`$X*OX\140@2`="5(`$@O@"T`@`",(\`#9SW"@`$`$(*@!YE,F?I#X +M]7$"[_RAP/'`8@[@`N'%"B4`D`?RY@[@!`#8S@Z@)`#8<0+O_*EP:B!``9BX +MX']K($`!\<#F">_\F'.*)H00%'@( +M`-WEOM$F8I+*)6(0&NV`X\HD81`%N``@@P^``*#S0",-`I#J`-@*\$:#`>`5 +M)8X0(*8!XL&Z1J-))`(1[0B$@,'&X'_!Q>!X#0R7<)\`"% +M#0A1`/H.+_WI<`'G2P\5$80O!1K/<8``X)L5;P`@C0^``*#S-"%!#@#8Y;G1 +M(6*"RB!B`&;HZ7#>#2_]J7$@A83I"0@5`6+I7^C^#2_]Z7`(=MSQ30'O_,EP +M\<#>",_\"'<"#&`&*'8(=9#@RB"&#P``=`#/(&8#RB'&`P@))OW*(H8#'0'O +M_*EP\<">",_\&G#@B)X/(`CI<(0O`1,""_]`!`"(,EP(@S@#1S9`!`!(#@;0"`=C1ZM`=@?`X$P,@<'+,(&&`RB""#P``!PE4"`+]5@P@".EP&G`= +MC4X@00`^K3Z-!"F^!``A3G3)<,(+X`T46YSW6``-0[-7TBA<2X2B$`(`\A$2`+(4"@"/)V#^`A"G`"A08@0`0" +MI6X)X`CI<`'8-_`X$PP@SW.``)2:8(N1K1RM0B%!("]X1;C/=8``U#L5?0*%Q+E* +M(``@#R!0(`L@`*`(\@(/X"$J<`*%!B``!`*E`MAB"Z`'Z7%M!Z_\R7#@>(0H +M"`8`(8)_@`"P/WB*ENLA"5$`-8H"N`'A-:HTBD-P`>$TJB,0`08!X>!_(QA8 +M`!:*`>#@?Q:JX'[@>/'`X@Z/_`AVR\F@D`&`0.7TN,`EHA`#Y<]RH```!"2" +M!"6-'P``_/\3":4#W64PR!MX0W!B$``'&6$.@@(E3Q!1",4#`]C&#Z`'"K@% +MV16Y"X'1&ABP`-@+H<]PH```!`Z`#0C%`VQP\P@>@-')!=D5N0NA;'#@N,H@ +M@@\``$,`SR`B`\HA@@.D#N+\RB)"`\]PH```!*2@L0:/_!,('@#/<8``9+@" +M@0'@X'\"H14(7@#/<8``9+@#@0'@X'\#H2$(W@!L<,]Q@`!DN0T('@`5@0'@ +MX'\5H1N!`>#@?QNA$PC>`<]Q@`!DN`"!`>#@?P"AX'[QP,8-C_R")`0_SW6! +M`$`[`(5*(``@0L#6R4`D$3\$((`/\0``\,L2`;9#P,01``"*(0@V!"A^!L]R +M@``X/S`B0@XPB87BS"+B@1STSW*``'B@=FEB8H#BP'C/("(#$_2$*`4*SW*` +M`*";,B)"#A4*D0#Z#@`@@.#*(&(`#+@#\`#81,#+R?X+H`@0B$;`SW"``(#F +M(H"AS0L)'@%$(`$$!/!$(($``[E%P<]VH```(%J&!<,AA0_KP!8`$,L2`[8" +M>0(B0``O(P@@=A,!`5EA%/#+$@.VA!,3`6)Q'0A>`(PB`X+']U8C@"(O(P@@ +M4.$$\*&XH1H*X.H`<"V4HE0"`*(H`OH```""0:0"4@ +M&D`E2B?`(`@:P"4*)(`OH```!!@4`"!`P$#@$!P`(,O),8A3(98`I!`!``0A +MOH\```!!!O+.""`+`-\,\.JYRB""#P``'27(!,+\`-\Y'MB3`!8`0$`K`200 +M>`5Y!,#/=(``;%4%(00`R\G/<8``[-I`D"\@@@7`N`MA1\!(PP?!6V/P)$$0 +MSW"``.[:2<$G:PHF@"\``/S_@X4$(8$%""$8`R@:P"`)Q(AS8*3+$@.V`2X17@#\(#8`!\"0,O)4(@S$(`` +M!+I%>``?`D#+R5R0`!^$0,L2`[:<$P`!YK@`VL\B(@/*(L$##X/`N`VX17C8 +M&ABP,,@4>0`@@@^``&"GX+'@J@]\SW*``%3%EGI`DI@9Q`,5)04`SW``*`@` +M0<#$$P``J!G$`P0H?@;/<(``,$$T($`.`!W``TO`$!0`(%`9A`!,'``@`84B +MA5X/8`Y`A0*%RQ(!M@4@@`_%[@`W3,`!@?2XRB>B$`#`P)%`X/YF`^8$)HX5 +M'F8"\`)^,,@;>$-P8A``!_<.!9#/<:```$4<@3B!`-T1"5\%!""^CP`&```. +M\OJX`=W")4$3^;C*):(0];G*)2(2E@B`#H_M;'#@N,HE(1`+\@'9SW"``'3# +M(*`^#&`-*'`(W<]QH```"`2!_[C,)2&0T?,%[30<`#0R\`#8"1D8@-;)SW*@ +M`(`L#Z++$@*VS!(#MAJ22B9`(!JSQ!(``,0;``"D$@``I!L``!"*$*LT'``T +M$/``V`D9&(#6R<]RH`"`+`^B`=A`)E8@0,9-P.EVSW"!`$`[`H!I#@0@Q0(` +M``QP.0@?`\]QH```11R!.($`W1$)7P4$(+Z/``8```[R^K@!W<(E01/YN,HE +MHA#UN@```(%H$`K`20%>03`!2$5`,P2`;8$)8`@.!E`!0`1&`%0@```(H_0!V`FA529`%`2A3'`!"!\"SW*@```( +M*!I`!@G!SW.``.[:`!E`!<]QH```11R!.($`WA$)7P4$(+Z/``8```[R +M^K@!WL(F@1/YN,HFHA#UN2B,`(`/9SW>@```("A]8D(#FRB6"$P;`#]J/X,HB!0`,NE,E +M`1+5S25Z$+A%>``?`$!`(%`@J72&)/V>`!D`($`A#B$7\E0?@!35S1"X)7@` +M'P!`!!X0$`0?P!1N#J`B0"!0(,]QH/ZT!P78%;@DH,\-$!#/<*#^Z`<*(8`O +MH````!`9`"!2#Z__J7`)\`C9`!]`0`0>4!!`(%`@SW"!`$`[`H#M"`2@SW"! +M`+@K!)`#W@*X,""!#Z``M"[8R25XSW&@```,`J''H<>GS@N`"L]QH```!`F! +M!NC(H209P`0%\%H.K_\`P`W`&N@L$0`@T1H8L"P9P"3/<*```"`[@`K`,'!O +M(0L`#'"`X=$@887U\]')!=D5N0NA2B,`(`'`T!H8L`O`,@Y@!P#9XPU>$,]P +MH```(&@8P`1I\!<*$"!4'X`4SW&``&2X`($!X`"ASW"!`+@K!)`#W0*X,""! +M#Z``M"[8R25XSW&@```,`J&GH00?P!2"#&`C"\"AS1$(7@#/=J````0.AL#@ +M!/"^`B,!("-LP2`;;/,]P +MH`"`(%P8@`\#`$`-SW&``'P>`('/.'%X<8KVA*Z!NF`X`G8 +MRB"B!`;P@.`*V,H@8@0"HA#9SW"L`(``+:`2VVZ@%][/H#"@@=VSH"+!^X'CAQ<]T@`"4'@#9"_`4)$`08(@KVA*Z`8AU>@"B`>'Q"92+ +MX'_!Q>!X\<``V;+HSW*``)`>`(*`X,H@@@\``,@HD`*"_`'8`*(1\,]P@`"$ +M'O`@0@`KV!*X\"""`,]P@``@]#5X0*`!X3!YXPG2@!GPSW"``(0>\"!#`"O: +M$KK/<(``(/3P($``=7H`H@'A,'GA"=*``-G/<(``D!X@H-'`X'[@>/'`Y@E/ +M_/')SW&@```<`*$2>`2A\LD!H1)X!:'SR0*A$G@&H?3)$GH#H4>A]1("ME^A +M4GI6H<]R@`!XJR""`>$@HL.Y=PE1`RJX4R"!`5,@@$$$($"`,_(O*`$`3B"- +M!T`E@!(`V0\A`0`+(T#`)_0R;3`AD`^@`(@@SW"@```@T8#/=X``D*0@APHB +M@"^``)BD"B&`+X``E*09#4$0`!(`(!$(`00`$0`@$';(#,$CH*<`&@`D`!F` +M(XD!3_S@>*H@@0P)Z*LFP7(```$`JB`!`O\('X+@?N!^X'C@?N!X\<`2"4_\ +M"'8H=[+ARB"&#P``,S/*(88#1`FF_,HBQ@,$V.EQB@[@'`,IB$!;_RI<.!X +M\<#AQ2AUK@_@'`#8@>7L":$`RB#A`A4!3_S@>/'`X<7/<8``[!\*@<]U@`!L +M'P'@"J$!V!8*X`4)H2"%C"'#C\H@@@\``"$SK`B"_-T`3_SQP.'%SW6``.P? +M"X7/<8``;!\!X`NE`8&,(/^/'`Z"_`H*P`4`V+4`;_P)I?'`,@A/_`AUSW"@ +M```@VX!`)0\8`(^IP1IQ$PA0`,W8((4&N%X(K_Q$CP&%(H5`P`&/0\%AP`:% +M1L`%A4?`'(U%P`^5!""`#P```$!"(`"`RB!B`$+`T7$#A0H`(P!$P$/&BW"( +MP;()(`P*<@C`*0!O_*G`\<#AQ0AUSW```$DS`@ZO_*EQ,FTT>0`A@`^``(P? +M`-D@H"&@%0!O_"*@X'CQP((/#_P(=IIQ&G)H=[8,X!P*(P`A6G#/<```1S/& +M#:_\2G%`*L`@%7C/=8``;!]`)1$95B6!%3A@#0_>$"*``>$BH`L/WA$D@`'A +M)*!M"%$@186`XLH@@@\``"@SA`]B_,HA@@1!A5!VRB""#P``*3-P#V+\RB&" +M`T`J@"`4>#`A#"`*[!+8!:7)<(IQ"G+I@`84=#@$0`(4#N!5X`""!#X``[!\4 +M@0'@F@RO_!2A0"J`(!1X,"$,(`OL(M@%I/'`X<4(AR7"I<>(/X!P`V@HE`)!H#V(`RB#B`HD&+_RI<.!X\<`( +M<<]P```V,U8,K_SAQ<]U@`"81_H+(`"I<`'9SW"``&P?)Z!E!B_\J7#QP`AQ +MSW```#/_8T<#@?@#8_?$!V/OQ +M`]CY\038]_$%V/7Q!MCS\0?8\?$(V._Q"=CM\/'`SW$``'1]SW(``)AY%@@@'038K@H```#9SW"``)!)(Z`DH-'`X'[Q +MP`AQSW*``&P?`((`VQL)`0`%@A,(7P#_V`"BBB#_#P&B9J)GH@38)@_@'`#: +M'@Y@``O8T<#@?O'`X<4(AJ7#&#N`<`-G2#6``"]C]!`_\X'CQP((, +M+_P(&8.(`T0V=X/@"/%!"_\!"6` +M$^!X\0`A@`^``(P?H*#AH&4$+_S"H/'``@P/_`AVSW`` +M`#@S/@JO_,EQSW6``&P?1H6`XLH@@0\``#(S)`QA_,HA@0/N#(`'!X6!X*`- +MP1T`V`:E,00O_`>E\<"B"P_\.G!:<1IR>G/:".`<"B4`(0AVSW```$8SZ@FO +M_,EQ$VX5>,]W@`!L'U8GC14=90L+GB`!A0'@`:4-"YXA`X4!X`.E18>`XLH@ +M@@\``",SL`MB_,HA@@,2;A1X`"<4$"`4`""`X,H@@0\``"8SC`MA_,HA@0,+ +M"%`@8PN>(0&'C"#_CPWR`(<#N!5X`""!#X``[!\4@0'@]@BO_!2AP*?/<*`` +M`"`;@`0?0!0"IPH(X!PJ<`:`$!^`%`.G`-VFIZ>G$=@%IR`4#"`J<$IQ"G)J +M8)S_\""&`@J7#E`@_\\$O`3;A5XQW"``.2S((`3"5\""(`/#0$0SW@R#6`$_]D!YN$.%)0`V<]P +M@`#\-!4"+_PBL.!XX<5@@6"#`-PPZP3P8G@!Y/T+!(`A@:"!%KP4ZKID4R), +M!9%PPB(.`,OWQW)`````!"*"#\#_``";8P)[>F(5\`(E`A-3(DP%'&21<\`B +M!@!+]P(B@@]`````!"*"#\#_``!B?)IB0*'@?\'%\<`N"0_\"';/=:```"`[ +MA<]W@`"P"1Z'2B``(`)Y'8$$H@@+/<8$`I"80X$"Q$'C&"B`'"G'&">`) +M"G#/`CR +M1G@`H/'`X<4(=<]P@`"P"0"0AB#\`(P@`H`+VFWTA"T!'``A@7^``'`C`(&&Z`&! +M(@T@`B6!!.@!VE_PJ7">"*`&`-D1>(P@`X+*(JT"#O?/<8$`9"81B8?H$(F% +MZ'()H!^I<`/H`]I'\`0BON\$!`0$RB*A`$'R9@N`!X#@RB)A`3ORA"T%&L]P +M@`"@FS(@0`Z"X,HB(@$O](8@/<`*],]Q@`!P"JEPH@B@'R")!.@&VB/PL@Q` +M!\8/P`>`X,HBX@$;](0M"!8`(8!_@`#$/P&(@.#*(FD"#_9$+3X7`"&!?X`` +MR"(#@6H,(`(B@8#@`-K*(B("1"T^%P`B@`^``,@B)W`PB(#B`>$PJ`'8W0?O +M^\!X1"@^!P#9`"&`?X``R"(@H.!_(:#/(0H`0P`V@`A@7^``(PCX']`H>!X +M\<#:#L_["'>$*`$,`"&.?X``<",EIA:&+W4."F`'&:8$I@B&!Z;V""``Z7`` +MV,=U@`"0(P:M!ZT)!^_["*W@>/'`E@[/^PAVSW"``+`)P1"``,]Q@`!8"H0N +M`1S!N`UA`"&`?X``<",:<+B@)1"/``3P+@@@`&&_J7#)`4KA2.Q+@4KC:$C"$$@(CWSW```#`1 +M&@XO_%>$+0;/^X0H`0S//?"U2!R00` +M`>!X\_["''/<($`A"8:B`#="NC/<8``S-()88PAPX\3\A?PSW:```0Z +M`X81"%X"$@E@!P".B>@`CN[Q!^D:"```T."#]ZEP`_#N"4`'907O^P]XSW"` +M`+BI!H`$((`/````X/_9#PA>`\]Q@`!0"BB)&PB>`\]R@`!DMUZ"#PI%`,]Q +M@`!0"BF)&PC>`\]P@`!DMQ^`#PA%`,]P@`!0"BJ(X'\H<.!X\<"*#,_["B"` +M+X``<`H`$(`@"B*`+X``L`F,(`*``-W4\D(,X`2I<<]W@0!D)CH7D1`(=@T) +M$"!6"4`',G"W]#P2`"`-"-X"0!*`(`D(D`(`V0/P`=F*(`@&#'XZ<``A@'^` +M`!Q!(*!:#:`=R7`*(X`O@``X/Q;H1"X^%\]P@`#((C`@0`Z`X,EP"?(LCTV/ +MC@I@!G@2`R`$\#H,H!WI<00N?A0!V0`A@'^``+`_N*BWJ+6HMJBTJ+FH.*@W +MJ,8,H!W)<,T($`!$+CX7SW"``,@B,"!`#I4($0#/=X``!#HCART)7@(`$(,@ +M0(<#NW5[QW.``.2S`(/JNL\@H@;0(*$&T"#A!@"CJ;DCIU<)'@(AA\]U@`#D +MLT0A`X,`$(`@$?(S:#5Y<"%"`X3CSR)A!-`B8@2>#N`)0*$`$(`@`-D"\`'9 +M`[@5>!UE`(6`X=`@(@?0(&('SR!A!P"E`X>HN`.GJ@G@!,EPG@P@`LEPSW&` +M`'2D`(&$+@$<#R"``P"ASW"``-`C,"!!#E(.(`;)<`0N?A0P(T`N,0@0`<]Q +M@`!DMQ"!`>`0H1#PA"X(%L]P@``X/S`@0`X1"!`!SW&``&2W#X$!X`^A&0// +M^\]R@`#,)322#R$!`.!_-++@?N!XSW*``,PE-)(0(0$`X'\TLO'`K@K/^PAU +M*0D>`,]V@`#X)3`6@!`=#0`0Y[B0"@$`L@F/_$H+K_PP'D(3#]@`IND"S_NA +MP>'%X<;/"[X$(H$#*[FD?BN^ +M'0Y$$%`B002RN00E@A\!``#`D[HE>HEQ!_`#V07P`MD#\`'9-7LZ@P'A.J-` +MH,'&P<7@?Z'`\<`6"N_[BB`/"C(+X`8`W0KPA@[O^P;8SW"F``#`"X!$((T` +MA.UL<.L('H#/=H``^"4KA@CM\@JO_`#8*@FO_`.&!?#B"J_\#-BZ#T_\-0+/ +M^^!X\<#AQ<]Q@0#P-0:X,@BO_`!A"B4`D`7TM@F/_`AUB>W/<(``^"4.":_\ +M!(`(=87MN@J/_`AUE.W/#6`,2'``V<]P@`#X +M)2>@!?!R#V_\J7#/<8``^"4Q$8```>#%N#$9`@#!`>_[H*'@>,]S@`#X)3`3 +M@@``V0L(@0``@PL(T`,H<`+P`=C@?N!XX'[@>/'`'@GO^Q/9"'8`W>'%SW"` +M`'`*0(C/=X``^"4P%X`0"PH!`#8(C_R#Z"AU<_#_#A24BW"F#>_[`]D`P4(F +MQ1`KIS$7C!!3(8@`02G"`,*Z02F``5,@1P!!*0`"4R!&`$$I@P+`NT$I``-3 +M(+Z`02F`!,6X`=X4)LD0LJ='](\)W@.+"`$#@PG?`G\(E1!["E$`=P[5``.' +M!""`#P```!@KN&<(P0$)<$AQZ'+(<](-;_P*)$`"L'#,)8Z/``#\!T``#0#/ +M=Z8``,#4IZ>G+R```D\@`0!`+T`")7A`+L$"!7E`*8`3)7@(IPF'H;B`N`FG +M=@]/_,8-;_RH<,>G"_``P0;8!/`%V`+P!-@F":_\$]W^#4_\J7!M`._[H<#@ +M>/'`X<7/=8``&"8PC1D(00#/<(``4+]R"T`,+@]/_!"-A[@0K5$`S_L`V9ZY +M&7G@R>!_)'@`V9ZY&7G@R29XX'_@&ABP`-H"N9ZZ&7I#<=D1`(9&>-D9&(#V +M$@&V^,D)`:_\)7@`V9ZY&7G>R3)Y)'C>&ABPW\DD>.!_WQH8L.!X\":V>`"`B.C/<```]0ZI<9X/[_OI +M<@#8GKBY>`9_SW"@```@.X#/<(``B`L@H,]P@`!X)K9X`(!`>*EP<@U@#8HA +M!`#@R0<@OH/3]=7O>0>/^_'`X<4`W1/PSW"``'@FMGA!@%!URB""#P``=P#` +M*&(!.`_B^\HA0@,!Y>$-U)99!X_[X'CV$@*V^!(!MD5Y.0"O_`8A``#@>/82 +M`;;XR2D`K_PE>`#9GKD9>>#))7C@?^`:&+``V@*YGKH9>D-QV1$`AD5XV1D8 +M@/82`;;XR?D';_PE>`#9GKD9>=[))7C>&ABPW\DE>.!_WQH8L/'`=@Z/^]\2 +M`K8O+H$0F^;*((8/``#B#J0.YOO*(88#SW6@```@.X7/<(``B`L@H,]P@`!X +M)M9X`(!`>,EP@@Q@#0#9@-@''1B0F0:/^^!X$-C@?]\:&+#QP.'%"'4&D*;! +M$PA>`,]P@`#$\'H+;_THV>[)2P@>!&>51I7/<8``Q/`#@0@1!P!`P`2!!!$& +M`$'`!X$`$04`0L`(@005!!!#P"01@``0NT3`!H%E>D7`SW#%[HV4`=GJ#2`- +M8H4M!J_[IL#/<8``P"@"N!1XX'\`8>!X\<#AQ0AUA.#*((8/``"",-`-YOO* +M(48#SW&``+PH$FT4>/4%K_L`8?'`8@V/^THA`"`J=03P2B%`(`'E50T5$5() +M(`"I;[RB%&`P#9$/#/(#@ +MRB:"$`'A!PD5`7#N#06O^\EP#WH9"C4!`-D"NE1ZSW.``+@H0F,)"(``*'`# +M\`'8X'[QP.'%"'$/?87ERB"&#P``"#"H#,;[]@XO_:EPT02/^_'`6@R/^PAV +MBB7_'X7@RB"&#P``!S"$#.;[RB&&`P#:"_`2:A1XQW"``)0H*H`)"8X#JX`! +MX@T*%0&,)?^?\_.%!*_[J7#@>/'`X<4(=87@RB"&#P``80#`*.8!/`SF^\HA +M1@.&#B_]J7!E!*_[#WCQP.'%"'$/?83ERB"&#P``"3`8#,;[O@QO_:EP002/ +M^_'`X<4(=83@RB"&#P``@3#X"^;[RB%&`YH,;_VI<"$$K_L/>.!^X'C@?N!X +MX'[@>,]PH```'QR`X'_`N,]P@`!0"FB(*8C/<(``K"Q(@,]P@``(*?`@@``X +M8!!S`=C@?\(@#0#@?N!XSW&@`(`=1!F`#QX````3@84@#``3H16!N;@5H>!^ +MX'CQP$(+C_O/=8``#"K,%0`0`-[CN,HF8A/`+B(2#MC*(8(/``"``,H@H0/* +M(8$#8@\`#<]QH`"`'1:!Q7@6H0H*(```V(H+X`40C7(+X`44C5T#C_OQP.H* +MC_L(=L]U@`",*AN%#N@"V`#?)@\@#>EQ^Z4-#I$09@E`!P3P/@E`!R4#C_OQ +MP+X*C_L(=L]U@`",*AN%'PA0``+8]@X@#8#9`=@;I0L.D1#Z"$`'`_#&"$`' +M_0*/^^!X\<"*"H_[SW6@`(`=%X4`WI2^&P@>!=X.S_^!X,H@80"D#R$'RB$A +M`-FES0*/^^!X\@`(`?"Z?/=H``#"K/<8``C"JRH0/8X!X"$.(>0A,"V!>A'Z$= +MH1ZA1@D@`$`>&!`F"<`%&XSR'B`<]RH`"`'1:")7@6HN!^X'@$V!4! +M(```V?'`X<7/=8``K"RI<"C94@X@"L[:`-B:N-[9J7('VU8-(`V*)`\,S0&/ +M^^!X\",`%SW"``.PJ50&O^Z*HSW$```__U0-@"@#8 +MSW$```__V01@"@#8\<#/<($`4!/L'`BPSW"!`'@30<#/<(``("E"P,]P@``8 +M*4/``-M$PPG8!MD-V@HD@`^``"@I"B6`#X``@"Q*)D`-D@Q@!$HG0`"EP-'` +MX'X(%,@`0``@J"X)7@`HDT#(`T%V.!X\<#AQ<]R@`!`!P*"((*DN(.X1B$! +M!B"B`J(`V<]UH`"`'3JEH!I"L`'8/:4V#Z`%H1H"L,]P@`#XJ`*(SW&@```H +M@N`!V,!X![A%(``&$+B%()(``:$N#*_[`=C/<(``C"H3@!,(W@`5A;FX%:4. +MV-X+(`T`V16%M;@5I?D'3_OQP.'%SW*``$`'((("@J.YA+D@HD4@``86".`% +M`J(!V*`:`K``V*$:`K`#V,]UH`"`'1VESW"``(PJ$X`3"-X`%869N!6E#MB& +M"R`-@-D5A96X%:6A!T_[\<#AQ<]R@`!`!P*"((*#N$8A`08@HJ2X`J(`W<]P +MH`"`';J@H!I"LP'88@Z@!:$:`K!M!V_[HQI"L^!X\<#AQ0AUHBBRX#@T"6B$RGTSW"``/BH0HC/<8`` +M0`<`@>&ZSR`B`-`@(0``H<]RH```('H:&("T$@&`&PF?`WT2`88)Z88@?XX) +M\A<-WQ*.O0?PM!(`@`L('@"KO?GQY09O^ZEPSW.```PJW!,"`(#@!+K'0"%P+F@N"5X`*4>"2`-!]@` +MA<]QH`"`':2X&J$Y!D_[\<#AQ<]S@``,*MP3`0#/`!\(%0(S)@!P@`#0!Y!MH%\`3:`_`"VJ/+SW&` +M`%@*"6%(<)8-H`5#N:X((`T&V,]P@`!`!R"`SW"@`(`=.J``A2\@`P#!!6_[ +M`*7@>(D`(`T(V.!XSW*``$`'`H)$(($!`()&((`!)7@`HFT`(`T#V(#@RB!B +M`%,A`@%<>H#ARB.)`,HC+`#/6)Y,.&`XP4I/G0*(D`NSW"``)#6,&#/=8``2-9L>`IPBB$*`@4I/G`O=@'8)PFD`Q0E +M313/%@L/A!-4E27P*0Z$4@A#`"99#5Y +M0G@;"$4`SW6``(36,B5"%'5[!2H^`PT+1`X4>!<(10``)0`D0"!0``L,GB8# +MV1D;0B!1)("FRB$"!,HA(0`<&T`@"G`(W!\#3_O@>/'`W@I/^X0H"`8`(8!_ +M@``P/R@0!@``(8%_@`"P0$`A!`5`(04+0"$'#%$FP("*(@@`RB(A`$X9A``` +MW1'PSW>``!S9KV?)@.MC9'YW@<1[+RO!`$XCC@?+9'"J`>57#142Z8#/5=#94228#/=H``,-FK9L]T@`"LVF1Z+RN! +M`$XCCP?K9``G3P-@KWB!9'HO*H$`3B*#!VMD0"0""+IB9JJG#MZ`:("`Y=,C +MH0`O*\$`3B.,!\]S@``PU8MCT_$`VQ3P*(#/2\I00!. +M(8('SW&``##526$!XR"LW0L4@>D!3_OQP'()3_L(=I"(SW"!`+`T%B`$`\]R +M@0!P-99Z0(H`%`$!`-@1"E\!SW*``(#F0XH'"MX``=A6)@T4(.@)A3T('@,& +MA00@A0\````8(PV`#P````@,)8"/````$,H@@@\``!@5RB"!#P``L`0#\$O8 +M!;@0<&#/`/(A(@`Q21``:%%@_@(@IQ"2"`!`/@02B2``:%`@_@(@39^'@#X`0@@`\` +M`/S_SW&!`$`[`Z$#X"*XSW*@`(`L'J)T&D`$ULDLN,2X&+A/($$',,@4N`5Y +MG[D%(8$$.Z+/@@'@'J(L<`$(G@7/<*``@"Q<@.[)*PC>`,]SH``` +M(,]PH`"`'`08@`_%[H0X>X-AH"&@0"@!(D&@!2%!!"&@02H`!5,@D`%3(H$$ +MSW6!`$`[SW>``.2W`KE5"IX'40B4(`"6$.!)"$4`(*4('0`4F!8`$&H,H"%` +M)0(4`:7L%H`0/8@0'@'J'/<($`0#L!V2*@`-C5!P_[\<"&#P_['@R` +M!C(,H`8(=0KMSW&``&QK@.#`(2$/UB&B!`_PA>C/<8``4&P)\,]Q@`!L;8'@ +MV2%A!M@A8@?/<(``;%<`@$T(G@3/*"@`>/2X[GW4Q&``%(1@P`W:"5XSW&D``!`9:$&H82BSW&``&R:&8D!X!FI +M80!:F`!$/(",/'Q`*"V_[`]B`Y6&]]_7/<```I"C(V;X.;_M3 +M)P(0SW"G`(1(`(#/=8``S'@7IL]P@`"4F@"(Q@@@``:M:P@0(!>&-H8X8`BX +M*[@`V@/P`>(=>/\(%8C/`]X''@%K<]Q@`!LFA:)`>`6J1H, +M(``%C3D&#_O@>/'`_]G/<(``S'@GJ!(((```V#H*0`/1P.!^X'C/@```H`:>."6_[J7": +M"N_^`-@$V,H.H`,`V0/83@Q@!P#9SW&@``!%38'/<(``V"Q`H,VASW"E```0 +MP:#/<:<``$BMH6P9``2\H7H/8`<0V#(/8`<$V`0?@!\!``8$!!^`'R``!@&I +M<*8,8`#Z`#B[GY!`_[X'@*V2O8$K@BH!G9SW"G``!((*#@?O'` +M>@P/^PH@@"^``*1U`-T"\`'E/0T5$?)M]7\"=P#>!_`!V-5Y*@U@!R")`>;G +M#I600"!<]P@`!L<@>`SW&@```QG[@>H>!^X'[@>/'`SW&` +M`&Q7(8'ON0`-PO_/<(``S'@:"B``!8C1P.!^*(#/`!A"!D`(,]P@``(QA28#!D$(`6&%!G`(Q`9`"!A`@_[ +M\<#AQ0HE`)`)\D(,[_\`V%(,[_\`V&X.``,:"^__J7!&#B`##]A9`@_[X'B9 +M!,__107/_^!^X'CQP+8(K_^AP<]P@`#,>`6(!-E`P(MPG@Z@"0K:H<#1P.!^ +MX'@O)@CP!-J+NDQX+W$%],]P@`!$>@7P0GG/<(``2(+@?SA@X'C/<(``;'(* +MD(?HSW&``&Q7`(&CN`"AX'[QP&8)#_O/<(``;%<`@*'!MPC>``#=<@E@!JEP +MSW>E```,$!<0$!`?@!\"``$`-@Y`!H()8`:+<<]P@`"4FF"((,*$*PL"SW"` +M``1B,"!`#B"`4''*(((/``#+%&@)0OO/<8``]#U`B2#`$PB!`!`?`!06"6`& +M`=@G\#X+X`L`J<]VH```$"06$1"II@;P#@CO_*EP`>6O??<-DI`)AH#@RB"" +M#P``PAD``4+[)!Y`%-8(8`8!V!`?`!3/<8``;)H*B0'@"JD!`2_[H<#_V<]P +M@`#T/>!_(*CQP(X(#_L(=#IQ&G-XW^QZ+W#R"R``B7$$*/XC@-X")@$0SW6! +M`,@3(*4O<-8+(``J<0(F`1``A?_:$7@7"B4`(:4B%8`0P*4!X"(=`A`!V`FE +M,7D5"D4`(A6`$,&E`>`B'0(0`=@)I84`#_OQP"H(#_L(=\]UH```10`=@!\` +M0```X'@`V`"E5@K`"XH@_P\`RE#@K`"RD`#_OQ +MP*(/S_H:<#IQ>G)H=0HF`"$*(`"$`MG*(&(`0"!4`$PA`*%*(D`@PB*!)!;: +MSW>!`,@3SW"!`.@3NG!`J"&H`-X$\`'FSWY)#@,5%P@0(!,.4A!*<"IQ9@D@ +M`,ERH@H``$`J`"&V>,=P@`!L<=Q@`!L4"A[WDJ<%H.(`?)<@#8SW&D``!`$:'_V!2AO@D``%T&S_KQP`(.S_JA +MP0AV*'<+"K,`2'43#5,0SW```+43*@XO^ZEQSW"``'S1`(C/<8$`R!-@P,]P +M@``$U>A@)X$7"$$`A>Y")$`PJ&`%\#)M:+DX8`]X&0;O^J'`CN#A(,X'RB`N +M`<#@X2#.!\H@+@#XX.$@S@?*(&X`C"`"@^$@S@<"V`/8X'[QP'H-[_HDV)8- +M(`<`W\]QI0``'`*!SW:D``!`G;B>N`*AT@X@!XH@PR_5'M@3SW6G``!([:7R +MI?.E[*54'8`?`P#__/NE`MBV#V`#BB$&!*78$+@$&(`/``#___&E\:90'@`4 +M>07/^H'@`=C`>`4'(`<#V?'`X<62#R`'*'7/<*<``$B\H`#9#R%!`Q-I)7C/ +M`RB%@^`"T$%S_K@>/'` +MQ@S/^@AV`-U^""`!J7'/<($`R!/'H,]PI```0[6@SW"G``!(L:`)!<_Z\<"A +MP8#ARB"!#P``FQ/$!`'[9@A@`XMR`,"AP-'`X'[/(HF_Q^`(`,"SW&C``O7!2A^``H@P`[,>`/`"!]`'@'>%0C> +M!04@@`\`_P``$WB*)O\?@"`#`L]QHP`+UP4H?@`*(,`.S'@O<@*'#!]`'A%X +M&>`%*#X`47@9X"]Q!2@^``T))`0O<`\(10,&AP'@!J#")4$3;@WO_\EP&G#/<(``;%<`@`\(7@&!Y=@* +MX?_*(`$$`-@<\#1M%GG'<8``;'.%@6:!"B$`@,HA8@#'<0``$M(IVA*Z"[P$ +M)(P?/P``^,J[A7LU>F"B`>`/>,L(DH``W03P`>6O?4,-TQ``W@3P`>;/?O$. +MDY``W_D/$Y)`*$$A-'D5;3A@=&X;8_1[QW.``*QS&1.$`*EPR7'I8+``?/<8``;)H,B0'@P0+O^@RIX'CQP%(*S_K/<8``;'>Z$4`' +MSW:@``!%%1D8@`#8X@@@`!IP-!81$+H,[_\*=2#PSW"@```H!!B`#P@`@@3[ +M>@'8J7%E;SH+[_]*)(`!#N\.#(`+">@\AL]P``"Q$UB&2@H/^Q(/+_\`V`'E +MKWU'#5,1A.4!W\!_R0T1D2H/+_\`V``>@!\`0```X'@`'@`4%@R`"XH@_P\< +MIABFSW"@`(`?#8`CN%(@``"'"!^`S@R`!/7Q`=U*""``J7#/<*```!"IH#0> +M0!1`*0$DC[F;N<]P@`!`!P"`G[G$N`JX)7@,IL(+@`O/<8``3)H-B0'@#:G* +M#>`"!=B]`<_ZX'CQP.'%"'4`V"(+8`.I<0#8I@@@!ZEQP0'/^N!XX<7AQHAT +MSW6``+C;"&7/=:```"B`X!X +MHN`#V>$@Q0?*("4!Y.#A(,4'RB`E`/[@X2#%!\H@90",($*%X2#&!\H@1@`" +MV.!^\<#*#X_[SW&``&R:$8D!X!&IT<#@?N!X\<"^#P``SW&``&R:$XD!X!.I +MT<#@?N!XX'[@>/'`=@C/^@AU&G%(=L]P@`"4FN"(8@\@!NEP"B&`+X``W"PT +MZ-X*(`#I<`#9)*#/<8``^*@BB0X1`R$-"1X`<'7*(T4##0E>``P@P*#*(P4$ +M"PF>`'!VRB.%`SR00"`""%,A30!`(`P-G65@K0'A=(H\L&VJ`=@(\`ED"PM# +M`"VJ*',!X/4(%(%-`,_Z\<#AQ<]P@`"4FJ"(W@X@!JEP!^AB"B``J7`!V22@ +M30#/^N!X\<#*#X_Z"'4H=AIRSW"``)2:X(BR#B`&Z7`SZ#8*(`#I<,]Q@`#X +MJ"*)`-H/"1X`@.7*(DT#RB(N``T)7@!0=LHBC0,-"9X`#""`H,HB#00]D$`@ +M#`A3(4T`0"`##'UE0*T!X5",/;!/K`'8!_`)8PD*0P`OK"AR`>#W"!2!L0>/ +M^N!X\`#\`#8"J4HA02/+'@F +MA4$IP'$P<&\@"P"`X*EP"O)^""```=D`V`FE#XX.KC;PL@@``"F%@.#,(2*` +M)?(/CDZ.`N`/>`L(@P`$A07H"H64X`#8PO7"PD$`(H@R@\`IQV%`>`=I0'8":4`V`JE"O"`X3!RRB&&`,HA!0,-"F0`(*"* +M(8H/(*-`@"`3@0`-"D4`BB$+`BNC/8!AN>!_/:#/<8``W"Q(@":)!H!,>4$I +MP7$0<0'8X'_"(`X``=C/<:```"`"H?`9``!`V.@9``#@?N!X\<#J#8_ZSW"` +M`)2:X(AF""``Z7#."B`&"'4(=L]P@`!L5P&`2B!`("<('@,%A1!V4`@B`,H@ +MP@/%I1X-[_^I<`P=`!0`V`^EH@_O_Q2E`0:/^N!X\<">#8_Z&@@@``AV"'7. +M""``R7$`V/4%K_H#I80H"P(`(8!_@``(8N!^X'CQP/(/[__AQ0AUV@IO_'C9 +M7]@`I5#8`K6`V`.U4M@$M9;8!;4`V0CP7]I`)0`<.&!`J`'A]0D4@:T%C_KQ +MP.'%`-T&\+X/[_^I<`'E^0T4D94%C_KQP.'%SW"``)2:H(@&#"`&J7`(Z(H/ +M[_^I<#>``>$WH'$%C_KQP.'%SW"``)2:H(CB"R`&J7`(Z&8/[_^I<#B``>$X +MH$T%C_KQP*(/S__*#L__T<#@?N!X\<#"#(_Z"'?/=:```"#;A0.`@.#,(>*` +M+?+L%0$03X<-":0`-*<"(8``!_`.(H`/_____SA@,0X%<```H`_""B``Z7"J +M""``Z7`%AX[@+`WN_\H@S@//<8``3)H4B0'@%*D&\(PA_X]4#L'_D@T@#.EP +MN@G``AN%"PB$`QN%PG@'\#N%#B:`'_____\X8)T$K_H9I_'`(@R/^L]P@`"4 +MFL"(&@L@!LEPSW>``-PL'NB6#N__R7`4$!(`"'4,$!``$!`1`)(.[__)`$`'@*A\"$"D$C_K/=(``W"QH@"6,1X!L +M>4$IP7%0<6\A"P"`X1P``@`GC&QY02G!<3!R;R$+`(#AA``"`.!^(I#/$P>0DAP0`CL&*0*Y(- +M"T(`BB&+`""B))!MD@'A,'D)(<$`)+!BD"V2#0M"`(HA"P$@HB60;Y(!X3!Y +M"2'!`"6P8I`OD@T+0@"*(8L!(*(\@&&YX'\\H"*0SW*``-PL8;EHDC!Y""'! +M`"*P:)(-"T(`BB%+`""B(Y!JDF&Y,'D((<$`([!BD"N2#0G"`(HARP`@HB20 +M;))AN3!Y""'!`"2P8I`MD@T)P@"*(4L!(*(ED&Z28;DP>0@AP0`EL&*0+Y(- +M"<(`BB'+`2"B/(`!X>!_/*#QP.'%SW"``)2:H(B6"2`&J7`(Z!H-[_^I<#6` +M`>$UH`$#C_KQP.'%SW"``)2:H(AR"2`&J7`(Z/8,[_^I<#:``>$VH-T"C_KQ +MP.'%@^`!W<(E01-."2`&#WB`X`#8Q0*O^LH@0@/@>/'`1@J/^L(,[_\(=L]U +M@`#<+'(-[__)<2@5@!`!X)4"K_HH'0(0X'CQP!X*C_K/<(``E)J@B`8)(`:I +M<`OHB@SO_ZEP"'8^#>__J7%>">__R7!:#X`"3@Z@`@S850*/^O'`X<7/=8`` +MW"Q"#X`"*16`$`'@10*O^BD=`A#QP,8)C_JEP0AW"B2`#X``W"Q`(`X/5B"- +M`HMRR7!*""``J7$`A0"F`84!I@*%`J8#A0.F!(4$I@#`!,$(IP+`.&`*%`$! +M#'D#P`'!'!]`'CA@"!0!`0QY&!]`'M$!K_JEP.!XX<6`@6"`<'3"),801O<. +M(XT/_____[QD@**!@:&`#0Q$$P(D0Q,'\`XE@Q______FV-AHH*!HH`+#$03 +M`B1#$P;P#B6#'_____^;8V*B8X&C@+%SPB-&`T;W#B6,'_____^;8V.B)(%D +M@'!QPB'&`$;W#B.`#_____\9822BX'_!Q>!X\<#B"(_Z"'72">`$!=@(=BH+ +M(`,`A4*5`Y7/<:0`@$!4H16A1)4%E5BA&:&>">`$R7`=`8_ZX'CQP.'%SW&` +M``PM.@\@`+J!1"@^"T`E`!+/<8``K!@O3R+P)O<]P +M`P``_@1]I7S/=:<``$B&I8V3";G(O`1YA7D]I2>#$PG0`"R3";K(N41X)7@' +MI<]Q@`!LF@^)`>"Q`*_Z#ZG@>/'`"@B/^J7!VG*ZG5`QLIP +MJG'IERJ7,* +M),`$2B5``8HFPP\^"R``"B=`!@'`J7,#P@HDP`0$P0(@DH`"Q\IP`R=/$$#& +MJG$*<@HE``:*)L,/$@L@`$`D!S%`QLIPJG$*"2`` +M0"0'-`3"`L$%PP(B0H`#P`,C`P`")HZ@`R#/(`4F_I,%]`384!L`("WP`"*" +MA:EP`2,#!$H@`"#""*_Z"G')50L`O)H?T`-C*(&\` +M`[A`(`XH%'@>9@86EA`'%I,02B$`(!#PRG#F#6_Z`]DO)@<@:G#:#6_Z`]DO +M(P<@0"%1(`2.2PD%($`D%3%`)!0R"G"I<4IR`,,*)(`%"B5`!6X,[_\*)@`% +M`-\%CKT/!9`*<*EQ2G(`PPHDP`0*)4`%T@WO_PHF``4!Y_#Q(0A2``'`!;4$ +MA?_9#PA1``+`!K4GM03P)K4"P`>U@01O^J/`X'CQP$H,;_I0>,]T@``P#:"$ +MR+H)N,]V`P``_L1X17C/.5X':)P>,B[";C$ +M>&5X!Z(4&H`!3R4!`B"B`-@#[0"DZ'`.""``!,%9!$_ZX'CQP-X+3_H:<#IQ +MBB4&%*EV"B*`+Z8``$``$@\@(0\?$$X(K_H#V(#F8;[X]<]P``"D*,C9`@RO +M^E,G`A#/<*<`@$C`@``2#R`A#Q\0(@BO^@/8@.5AO?CUSW```*0HR-G6"Z_Z +M4R<"$,]PIP"$2$"``-N8NP(FP!#7=H````#*((L#0BC!!P(BS`#78!AXD.!1"B"2`` +MR7!$+CX;`"-!+KIQ`J&*#F```-FF"2```-WF"B``R7`"A]4-!9#^"B``J7#) +M<$(,(`"I<1)M.(<5(!```"4`)"JP-H')*"I<-8,(`#)<4`E`",`(!`@ +MZ7`*<!D`!>EP"G')__V'-`)`D +MI@#9#?`"V`2F`-D)\(/@9=G*(8(/``!F`#2B@.'*(((/``!^&;0)@OK%`6_Z +MI<#@>`#9CN#*($X`X"#.!\#@X2#.!\H@;@",(`*!X2#.!P+8X'\#V,]P@`"L +M>.!_&IC@>)G9".@1"%``$0B0`"APX'[@?PK8X'\TV.!_<-CQP!8);_H/V,]V +MH```*`0>@!]@`()E!!Z`'V```F8$'H`?8`#"E00>@!]@`$*6!!Z`'PP``E\$ +M'H`?#``"8`0>@!\,`$*/!!Z`'PP`0I`$'H`?`P#"7`0>@!\'`,)=!!Z`'P,` +M`HT$'H`?!P`"C@0>@!\%`,)E!!Z`'P4``I8$'H`?!0!"9@0>@!\%`(*6!!Z` +M'_\``G<$'H`?_P!"IP#=!!Z`'P``PD`$'H`?```">P0>@!\#`()`!!Z`'P,` +MPGI*(``A!!Z`'VP``@$$'H`?`P!""00>@!\!``($E@B@!@'?!!Z`'P,`@F8$ +M'H`?`P#"E@0>@!\#``)G!!Z`'P,`0I,=P@``L+5.(,HC/<*<``$A1H#"@X'[QP+8/#_H(=0#> +M#R8.$#-NQ7G/<*```$4MH!"Y3R'"`YNZSW&``$`'((&?NL2Y"KE%>2R@Q@D@ +M"X4F`1+0?D`N`!2%((4`SW&@```H`:&I<"X,[_T`V:EP+@V@`@#9Q0__:'*A!P_ZX'CQ +MP!8,@`5Z#H__T<#@?N!XX<7/=(``#"U:A&2$(8("($T``-D(ZWB,L7T-#<00 +M`=D.>`&B*'#@?\'%X'C@?N!X\<#F#@_ZSW"```PM!(`EZ,]UH```1H(``O^"F`" +M"-C/<8``3)H0B0'@$*G]!@_ZX'CQP.'%"'4"V$H(X`*I<0X,[_VI<`+8R@U@ +M!JEQX08/^O'`8@X/^J/!&G#/=H``#"TO)@?P`-C*(&\``[@4>$`F#1@=90Z- +M*'=`*`$"!"&!#P```/\E>,]QIP``2`NA@@Y@!A&-3XT`V%BF&:;I<.H(H`8P +MC0/P`N)8IEB&2PK5!1F&3WH!X!FFZ7#."*`&,(U`)`<=Q@``L+;")7@SO_T^) +M6G#$N@6]KWU%?4`M#A)`)!$Q0"00/04E@1.*(@@``-L*)$`$/@@@``HE``0- +MP,]WIP``2`BG#L`%)8$3":=*<`#:`-L*)$`$&@@@``HE``0-P`BG#L`)IX4% +M+_JOP*'!\<`J#2_ZB'*AP:AU$>LTDA:2RKG*N`NX)7@`I162-Y+*N,JY"[DE +M>`&E2?">"```0,$@QD0H/@W$OL]S@``4=B]TGF;(8^>XSR`B`L\@8@+/(*(" +MSW&``.1VSV'GO\\G(A+/)V(2SR>B$E,@A`)3)XX20"[%$@4E#@'`I12R`12` +M,/:RQ+@:Y)A@"V/GN\\C(@+/(V("SR.B`@QAY[S/)"(2SR1B$L\DHA)3(X`" +M4R2!$@NY)7@!I76RE[((W-<$+_JAP.!XCN#A(,X'RB#N`,#@X2#.!\H@+@", +M(`*!X2#.!P'8`MC@?N!XSW"``"QR&)"'Z,]Q@`!L5P"!I+@`H>!^\<"J"P_[ +MY@X/_='`X'[@>,]Q@`!."R_Z"'.X<@':W!R( +ML,]R@`!L5T""Y+HT!"$`B'#/C'!4```FC&!4```BC`(6`X)8%`0#/&AQ;!.#```A0`Y,>]X,(`DG<0#8)*(T`@PB/!)$PC`*!*)D`@SW*``#3-H(+")H(E4R4"$('B +M2B-`$`HB@"^``,C%;!*"(,(CPA)$*CX'2G*`X``AA'``V`KTR\G/``,32"&>"X`;8P'@"?,FE>`BZ^ +MPK[(9X0I`19)((``*6B*(+\-`"9"#H`B`@`U>LB:)8-)FC-Y.6$^9LY^66$N +M>0DD@A-.>@DD01`N>0'<%PL1$,]U@`"`"H6E0"0'+%EPS_#AO&JX`"!' +M`,AP@"`%"10@0`(`$,H`$PX1(,]P@`#$Q0"807`O(@40BB!A@&6$B<"YY#G@)(0$#+GH('$0P"20,$(YY"AP$ +M,T`D$3(O(,@!0<`!W`0F`!)!*,@"!"8`%D$H&`8%(``R$'C3"Q$0EPX0(`0H +M?B4*)T`.02Z,$\*\C6<-#AX24R:,$`WP"PZ>%E,FS!`'\-U\PKS/=X``I-J, +M9[]E]7]JO_QD!"C^!0`G0`['<(``K&`5(`\#CI\`$4\A;+PW#,(3Z+[3)J(0 +M#/3ZOM,FXA`(]-U^PK[/=(``I-K.9+UEM7UJO=UEM7@/F`(13"%LN`L(`P,! +MW"7P`MPC\$<(D0`$*'XE`<4`(8!_@`#,81<-LA((%$XQIH@K#8,3!X@C"$,` +M!_"DB!L-@Q,%B!<(0P``W`?P1"6`$OL(D(*_#5^0SW6``(`*A:5`)`@H<1#!((@$`%B8``^N`]"=!$`FY2"8/$`J`07;T +M(,`#SGX%>4%R4"0&$``ACS^``*QA0"<`'T`G"!XU((\13GH()X\3[GX(',0S +M4"0/$#4@P`,0@HE1X08C4?,&,"+H` +MB,5ZP(P(N,5X2:,'HRBC=!+.(``<@@/%A0@<0``$'(`#SW&!`!`[!Z%)H0X< +M!``,'(0`&!P``Q0<1`((@\]Q@`!DSQ@=```)@QP=```'@R`=```%A20=```` +MP`"AT_#/<(``E)H`$(<``8!*(4`0"(C/V`@"FC)Y+/=H``Q-(GHR&#@8,;"5X"`=F& +MZ,]P@`"`"B6@H/#AO\!Y^?%!+($3PKDJ9@T,'A)3)($0#?`+#)X64R3!$`?P +MG7G"N<]U@`"DVBEE6F)5>FJZ66$O)$@`@L4!V@0D@1\````802G%`@0D@1\` +M`P``02D&!@4F00'1"!$`CPD0$(0O"P(O<$$L@A/"NDIF"PP>$E,DCA`,\`T, +MGA93),X0"/"=?L*^SW>``*3:SF=?8O5_:K_^9H0I`08G<,=P@`"L8!4@@0,N +MF<"=;+DW"8(#Z+S3)*(0"_3ZO-,DXA`'])U\PKS/<8``I-J,85IB57IJNIIB +M57@/F"&=;+@+"$,``=HH\`+:)O!-"9$`A"\+`@`A@'^``,QA'0RR`@@43#$F +MB#$)`P,*%$$Q!X@I"$,`"O`DB"$)`P,*%$$Q!8@5"$,``-H(\$0G@!+Y")"" +MMP]?D,]P@`"`"D6@"!``$`BC,0;O^:G`\<`.#L_Y"';/<(``+')8D,]Q@`!L +M5P"!A.JDN`"A6O"$N`"A/@I@!&UR@E@!LTH,8`5.HX#@J`S"^M'`X'[@>/'` +M'@WO^13:SW&``&AR7@[@"`#=*/"$+0$3+W``(((/@`!,5GR*SW&``"Q6&NM= +MBCA@1"H^!PC@-@\@!3`@0`X(=RX)8`6I<`AVX@A@!:EP"'+I<,EQJ7-^"R`+ +M2B0```'EKWVS#1*1'07/^4B`SW&``$YR]2&!`.!_(J#QP*(,[_D`V<]PH``` +M$"F@SW:@```H)J8`WXZ_G@UO_NEP"'7K>`'8PB`!``2X3R#!`,]P@`#XJ`*( +M@+V"X`'8P'@'N"5X$+B%()(``:;:""_Z`=BAIO_9*]@2N""@(:"I!,_Y\<`^ +M#,_Y"'4H=@#?SW"@```0Z:!.#B`%`=B.Y0'9PB%-`"BHJ:C*J.NH!.YBO:FH +M$!B`#P``!CP6#@`%:03/^<]P@`",<]PH0```B6@SW&``&R:!XD!X.!_ +M!ZGQP.8+S_I"(`"`RB!B`-'`X'[@>/'`H@OO^0'8SW6``'@M(86!X`(J<(/X`$`V,T# +MS_G@>,]Q@`",<@")(HG/"TB>$D'[_\)JN!^X'CQP$H-8`40V#X,0`71 +MP.!^0B``#.!_#W@-Z,]RH```('N"`B-"`!,.A'``@```#PB$``#8!/#_",6` +M`=C@?N!X\<"8<.[)N'+\N,H@@@_%[H7RRB%B`,HBH@`0"V(+P'O1P.!^\<#: +M"L_YSW6``'@>`(5=")4!SW"!`&0F%(A1"%``>@WO_0'8((7/=H$`D!05)D(0 +M)H(Y"$$`"MC6#:_]+(+NR2"%(0@>!S5^,!8$$,]PQ>Z%\F:&`=D$VJX*8`M* +M)4```-@F"^_Z((7=`L_Y\8!V,(@`0`!X.(*[_JI<9D"S_GQP'H+S_K/ +M<0``+,?/<@``Q,;/!XG1-@+ +MIQ#9SW"``+!`E2!("R"@>@NO_0K8"'<`$0`@\"8!$"]X2@T@!2FO"*\`V`JO +M"Z\%IP"G!J<0'P`4-@VO_0K8[LDE"!X'SW"!`*@4\"!#`\]PQ>Z%\@'9`-H* +M)(`$/@E@"PHEP`1-`>_YI,#@>.'%X<:$*`4*SW2``%B;`"1#'L]U@```P`#: +M)W1`I`;9)*//<0``J"(CHP6CIJ/!QN!_P<7E`0``\<`(=.[)2',7"!X$0"D" +M!,]PQ>Z#F@'9W@A@"X5ZT<#@?N!X`('/<:```"!;@06X`""!#X``I//@?T"A +M\<""",_YP(&DB`C*'`_`PA\EP<@\@'0+:3"``H,H@@@/*(8(/ +M````!%P/(AW*(B("-FW/<(``;*`H8!4(D`#/<0``W,NI<`C:K@N@'0';70#/ +M^?'``('/<8``X)N$*`4*-"%!#A,)7@`#V0JY&@\@'0G:`_#^"```T<#@?N!X +M\<#AQ:"!X@N@'02)J7`#V0JY]@X@'0O:-0#/^?'`X<6@@<8+H!T$B/'`X<4H=<]Q```,RP2-$-HR"Z`=`=NJ""```(7]!X_Y\<"&#X_Y +M!X'`@0CHSW"``&PN\""-`P3P!=T*O6X.8!W)<(#@RB"!`\HA00.$#B$=RB*A +M`;T'C_GQP.'%H('/<@``G,L$B4AQ$-H."Z`=`-M.""``J7"E!X_YX'CQP"H/ +MC_F@@3.1B.G/<(``7"[P($X#!_#/<(``?"[P($X`#@Y@':EP@.#*($$#RB&! +M`R0.(1W*(N$!70>/^>!XA"@%"@`A@'^``%B;80)`"O'`U@Z/^0AV*'>$+@@6 +MSW"``#@_,"!-#H3FRB"&#P``"0'X#N;YRB&&`X7ES"7BD',(>*!6`D!'='`X'[@>/'`<@Z/^2AU +MP('DB80N!1K/<8``6)L`(5`.-PA1`!H*(`8`V`R%&0A0`,]Q``#/'`(@Z/^0AV*'4`W]X- +MH`+I<:]]*PU1$%9N`"*!#X``=J#@J0/9"KDJ#2`=!=K/<($`A"7P(((#R7#I +M<0OPC"6"E`KRSW"!`(0E\"""`\EP`ME`>C4&C_GQP-AQA"@(!L]Q@``X/S`A +M00Z%X/'`E@V/ +M^0AV*'52#:`"`-FO?1<-41#/<($`Q"7P(((#R7``V0OPC"6"E`KRSW"!`,0E +M\"""`\EP`ME`>L4%C_GQP$H-C_DZ<"AW`-T.#:`"J7$(=H0H!0K/<(``6)L` +M(%`.'0]1$$`I@2$`(8`/@`!VH*"HR7#B#"`=*G$@$`$@R7!"#"`=`=IA!8_Y +M\<`_Y"'(0#:1:ZI<,X*8`L! +MV0B.C0@0`!4('B%$)0`C#0@1`@#:1ZX4\">.3"$`H-$@(J$2\@F.$.@*CH[H +MSW"``'RD`("(Z`'A+WHGKJEPB@I@"P+9!XY)"-(`/!(!(:FY/!I$(`03`2"' +MN00;0"">"F`=J7#)<`\,$"`R#R`=`MD$\/8-(!T$V0'8"Z['=8``9*0`C8&X +M`*T`V`>N`-D+CBBN*:Z@Z%$@`*',)R&0S"8AH`_R3"0`H,PG(9`&\@@:0"#) +M<`79#O#)<`39"O!`+X`ASW&``'B@`&&&Z,EP`]F6#0`='0./^?'`[@J/^:"` +M"':$+04:`"&/?X``I)L(%Q`03@[@'*EP.H^I#X.8`6I<8P@PX_*("$`%/+/<8``#-$@ +M@80M!1I`P3(D`#``V0\A`0#/<(``_)LR($`.)'@:Z,O)5B8!%*`0`@`!@1$* +M40"@N`&A`=@)K@3P@+@!H<]PH```(!N``Z;)<+8,(!T"V0OPZ7"&(/P`C"`# +MA#@-H?K*(($#:0*O^:'`A!`!`$"`I;F$&$``SW"``!`?80(@`_`@@`#@>!D# +M8!TH<.!X*06O^BAPX'CAQ>'&A"@%"@`A@7^``*2:5B%,`L]S@```P`#>P*0& +MW:2DSW(``%@C0Z0%I&:D$!F(`Z2ASW(``#0C0Z$%H6:AP<;@?\'%X'CQP'() +MC_D:<"AW5B$.!`"&H(&"X(0M!1K/<8``_)M*(4`@PB%")#(A0`X*)$`N4R#3 +M`(0M"!;/<(``-$$R(%(.S@P@"E8G0!+&#"`*0"<`%*EPO@W@'!C90"J`(<]Q +M@`!XH`!AI>BI<((+(!T$V0;HS@^O_*EP'?#/<8``L)LP(0`%E^@7"]`C"0@0 +M(`\)$"#I<"8((``"V0OPJ7!Z#.`<"-D!AH6X`:8."&`=J7`9`8_YX'CQP-8( +MC_G`@,]U@`#T'H`80`!+"9``;PD1`80N"!;/<(``-$$R($0.SW"@```@FX"$ +M+@4:SW"``/N;QW0```!]"-DR($,.$=@(N`':N'1*)@``C@O@`OAU%?#/<*`` +M`"";@`S9`"2$'P```'T`V(RX`=K)0"AC"#_CP'8G0"O^<(@`0#@>/'`)@BO^2AP +M*'4B#N__P(%F"Z_ZJ7#)<"X(8`L!V0#9SW"``'RD(*#/<(``@*1E`*_Y(*#Q +MP`"!#@A@"P#9I@O@!0#8T<#@?O'`V@]O^2AP*'7:#>__X($`WH`=@!/I<$H, +MX!P(V?;)$2#`@W0+X@7*(((#%0"/^?'`J@]O^0C9HL&+=78+H`JI<"#&Z@ZO +M_*EP"'4`P`]Y@^'*((8/```+";P'AOD!P2\)T0"2"\_]`,&,(/^/RB""#P`` +M!0FH#X+Y(,$`VL]P@`!<5S5X0*!R"V`AR7`!P#,(D0#/<*```"![@$"%`,!^ +M8@]\SW&``%Q7E7G`H8;JA@Y@&F"E!_#/<(``-+_:#@_\L@]``7T';_FBP/'` +M"@]O^2S9SW>``*`EV@J@"NEP`-XX\(0N`1S/<8``<",`(4T.`"%`@K@`4`E`A/2"*_]R7`!YI4.5)$^ +M#V_]`-@:#T`!W09/^>!X\$`F`1D"88HG_Q\"(L"#`<'*(&(`0"87 +M%1\)4`""X0##E_*#X9("`0#/<```!3!B#J_Y:'*,\`CHSW````$P4@ZO^0#" +M`,%*)0`@+R='($`O@"`4>-A@6G`IH`H@0"6J=2KP%2$6)`@6`B!)"L`#0"55 +M("\CAR!,(T"ARB"&#P``%#`,#J;YRB$&!!4FU!0`%`(@\7+*(((/```*,/`- +MHOG*(<(%"!8!(`\ES10`'$`@0"!0(*\(U*`H&D`C%PT1(``1`2#/<```"S#& +M#:_Y)!("(!01`2`O($<@3"``H*=XFG`=\"\H`0!.()('2G"*#&`%`-GP)H`4 +M&0C!`P`1`2#/<```$#!Z#*_Y*!8"(`#8Z@M@&@\@@`00(X`D"B,`H./U*!Y` +M(Q01`2`O>`\(-0'P)P(@,PF``,]P```1,$(,C_D1\"\H00-.()('#PV.)/(/ +MX!KP)H`42G`>#&`%`=D0)8T4\>U>#2_Z*G`0\"\H`05.(),'%2;2%#8((!L` +M$@`@`!K`(Q`DU"3E#!&@`!$`(.(+8!JI<2P6`2`*<.8/H`,H%@(@1?`$Z!$+ +M@`#/<```!##."Z_Y:'%`*HT@M'W=92N%2G`H%1`0`@C@`PIR(?`O*($`3B"1 +M!Q4F4Q0`$P`@\7#*(($/```2,)0+H?G*(8$$*G"""V`%`-FV#^`:`!,`(`J% +M`!O`(Q`@0`0*I4J%X.H+A14F$1#^#:`$%!$`(!09P"-*FE`-@Z +M$*`@F +MSW&``#@_,"%`#@T(D0':"^`;"G`&Z!6&`-T!X!6F$"4-%.CQ&!Q`-(;`"@I@ +M`039S0)O^:?`\<"B"F_Y!MG/=H``\"C6#F`*R7`B"V`!!=U*#N`*R7`!V,EQ +M`-H>#&`!"',@A@&&!2$^@`;T(X8$A@4A/H`$\JEP`_`,V`]XZ@GO_0#9P0)/ +M^>!X\`*5B=`%L]V@`",*C*& +M529-%R]X"0E1`'<(40"!X?_&0"XTR"B`<\A`@#0(0$`-+*AP-'` +MX'[QP&();_D`V.`<"+#/<(``H-(`@,]Q@`"DTD'`@L`B#6_Y&-K/=8``A%6I +M<+(.[_JHV8MP`=EZ#6`*&G$`P4`E$147"=\`SW"``*1/(*`$X%X-8`H%V<]V +MH`"`(!V&BB&.`21XSW>@```@"0A``#VF`,`K"-X`0L"#P#8-8`H%V0+`#PA1 +M`$(([_H!V$?PA.`T".'ZRB"A`$'PSW"``*1/`(!3(+Z`#?0,'X`?"````'P> +M`!0!V/X.K_H`V2_P7P@>``'8[@ZO^@#9#!^`'P@```!\'@`4_@R/^S\(40": +M#(_[SW"``)2:`(B,(,./$O0`V`WPI!4!$`\)#@!;AS-H-7DB<4"A`>`/>.T( +M$H$%\)8,K_H"V!N'0<"!P*X/(`$$V0#`$PC>`,]P@`"85(39'@W@!Z':C0!O +M^:C`\<#AQ:/!BW6I<,]Q@`"8T?(+;_D,VJEP[@M@"@S9:@]@`:EPH@A``7T` +M;_FCP.!X\<#AQ:/!BW6I<,]Q@`!`T<(+;_D,VJEPO@M@"@S9#@F@`:EP<@A` +M`4T`;_FCP.!X\<"FP<]P@`#HT""``8!$P47`BW#^"V`*!-F$P!(/(`$(V:;` +MT<#@?O'``=CAP,]P@`!4--X+8`H=V8MP\@X@`039H<#1P.!^\<``VNP:F+#M +M&IBP[AJ8L/`:F+_0_@```!8`0`7;$GCN&ABP`!8`0``6`$``%@!`SW"@`(`, +M0!B`#P"@"`#JR16[`!\`0$NCSW&@```\#X$1H5*A+!N`#P"`P@`#V`+9U@\@ +M`0':"@B``M'`X'[@>/'`X<6AP8MP4@M@"@'9`!0`,<]Q@``DI"(.X`H0L0#= +M&_"*(0@&+'T`(8!_@``P/T*``8`0Z(?BS")B@0ST+'W/<(```$$P($`.@."D +M"J(/'`W@P/^7X) +MH`2")`(S@>!*($`@SW"``"QR&9#"(`$DANC/<(``*,8-B`/P`-A$*#X'SW>` +M`,C%BW;)<``AS7,6"N_ZC-G)<.X.8`JI<9AP`!7`$$#`'(=!P`#?+?"$A7-O +M>7R/?!4CP@"#5-GEZ>`]X":+/ +M<(``E)H`B'9[A"@+`CMC`"&!?X``[&$&@0'G>&`(X/0@``/P?PJBJP^2D,EP +MA@L@`8S9@00O^8`D`C/@>/'`&@PO^1C9K\'F#R`*@L#/<(``E)K`B(MUJ7!N +M">_Z"-F^"2`+(L#/<8``?%?T(0``0"0$/@`(-P$PE1`#(0@0`"'$(P,Q"``!#P!,&(Z2`0@0`"'$(P(1"```CP+!"! +M`"T0@``"'$(P`QP",*EP\@H@`0C9^0,O^:_`X'CQP.'%K,&+=:EPO@\@"@K9 +M`<$5"5``&PG0`$/8J@MO^0BX"_"*P>(/H`2I<`7PBL$^".`$J7"*P*H*(`$( +MV;T#+_FLP/'`.@L/^<]W@``<8`^'H<'_W0B]CNB+<&H/(`H!V0`4`#$$?4B] +M+R`'(`(4CC`*\!"'1!>.$`1]*+VO?2\@!R"^"L`"&PC0`!$.$!2I<`IQ:@W@ +M`LER!?`!V%P?&)!B"P`#/0,O^:'`\<#AQ<]PH```!`.`L!P(L(MUJ7`&#R`* +M%-D`P&&XBP@5!3,F`'"``(#/0">!@D@!*EP`_#J#P`#3R!"`L]PH`"`#$`8@`\`H`@`ZLD"V0`?`$!(<.X*(`$! +MVJT"+_FTP'S8:0)O^8VXX'CQP.'%HL&+=:EP8@X@"@+9/@JO^JEPJ@H``84" +M+_FBP/'`X<4`W2X-H`&I<``6`D``%@-``!8!0,]PH`"`#$`8@`\`H`P`ZLD` +M'P!`#^D7"5``+PF0`,]P``"I&0X*3_D(\$"C`!]`0P3P((,`'T!``=@(<6(* +M(`$(U@T@"HMP`,'/=8``%#XA +MI0'``Z4)Z2,)4``5"9```]@#I<&E#/`#V`.E"O#6"(`$`=@`K03PG@B`!,"M +M[@D``<$!+_FBP.!X\`0#;#?!3 +M(DP"B[R/O$`L#A3%?(&A5'I$L0'C-0L3`3)K`"1",$."-'G'<8``8`R,(L^/ +M0*'H]T$J3`')O$\DCA*+OH^^0"X,%,5\Y?$'PL]Q@`"$/D"A4R`"`,]Q@``X +M#$*A$P@>`%8*K_J!N%H*K_JI<"T!+_FHP/'`J\&+@Q`'`7P@L#&#"`*"=D6"0`!J\#1 +MP.!^\??#Y20"12`,`.X%7@#PMA@!,%(H"F@"Q2!,!$) +M40#_V=(-K_H@VB[P5@VO^B#9`-@@\``6`4$!X``<1#``%@)!`AR$,``6`T$G +M>@0D$J`0)'>2]Z([H)%(,PVF(#NW5[6V-`B\*Y#R)"`$"K"A2!,+\( +M1(#/<*````2JH"((``'M!^_XI<#@>/'`X<6BP0'=0<6+<+8+(`JI<0#`#0A1 +M`&8.X`,`V`?P&PC1`%H.X`.I<('`L@[@``390@B@!`#8!_``V$'`@<">#N`` +M!-FQ!^_XHL#QP#8/S_BGP8MV#@[@`,EPD@W@`,EP`!0`,<]QH`"`#`*X"^`$ +M((`/``#\_YVXG[@0H>K)`!\`0``4`3$`'T1``\`(Z,]PI@``0`"`^0A1@`+` +M#.@`%@!!!L$$Z0`6`4%Z#>``R7$3\`#=#/``%@%!`^H`%@!!['+R#.```<`! +MY0`4`#'I#220!L(&P(?H`!0`,0L('@``%@!!N@S@`,EP`=@(<3X/X``(-P>P'F`!0!,>L.1)`1\``6`4$$Z@`6 +M`$$!P``6`D!&#>```>8`%`$QYPYDD`;"!L"%Z`L)'@``%@!!SW"@`(`,0!B` +M#P"@"`#JR0`?`$`6#.``J7`!V`+9F@[@``AR50;O^*?`\<"AP8MPL@D@"@39 +M:@[``*'`T<#@?N!XL0,`&O'`K@W/^++!SW>``)2:5@I@!``7E!"!X$HB0"#B +M"R`$PB*!)!IPBW`!V=X)(`IZ<0#=O@B@`:EP[@GO_8IPSW"!`'`Y0!`1``IP +M2G%2"&`**G(`P<]V@`#(Q5IP:PE1`('`I@D@"@/9`_`!Y:]]@N4(`0H`$FV# +M<"&`"2&,!`#:`_`!XD]ZYPK3@`#;]PL3A0"/,FN$*`L"M'DO<(0J`08^8,=V +M@`"L8!SF)W:`MHKJ$0N3`,=Q@`#L8"SA&6&`L0'C;WOD\:L)D0!$'$0S1AQ$ +M,X'%J7`R"2`*#]D;"!`@521$-%0DQ3B*<*EQ*G)^#N_[2G,3\`;`!\(%N`5Z +M`<`(N@+!!;@E>$5X1!P$,`C``\$(N"5X1AP$,$04`#%&%`(Q!K9'M@G`!,$) +MN"5X`J9/>$]Z"+@$((`/````_P5ZSW&G``!(2Z$"AG$9&``!P0#80@\@!2+" +M`=@&P38/(`4GPL]Q@``L#,``(I9$(8`#''@$N`5Y +M1"&``QQX![@E>`*V`=@`I\]P@`!850#9(*`(V(H*K_P8V<]Q@`!D50"A`"6! +M'P````@BH"&.)J`ACB6@(Y8\J`C8Q@JO_`'9SW"``%Q5V@FO^J"@R0//^/'` +MX<6CP8'`@@@@"@+9!!0`,6&XVPA5`3,F`'"``$S00"1>1`>`7L:EP6@_@"0G9J7`(V07:X@_O^VB% +M8O#/=8``C&M`)0`7.@_@"8HAC07/`,L:EP_@[@"8HA2``P)8,?````"*EP +MBB$(`'X/[_L$VC#PSW6``&Q7J7#:#N`)BB')`2H*P`3//'`+@KO^`#85@U@`:'!`!:. +M0``6C4``%@!!%@L@`P?8&G"[>`?@@N;*(*(!`^`$((`/``#\_YVXG[C/<:`` +M@`P0H>H2`;:'Y@`?0$``'X)#.@$-`#(FBG.``,3/0">```6`4`` +M%@!`@+G/<*```"@AH(_P`-H2\``6`$$`%@%!!K@`'$0P`!8#0(&X$+DE>,]Q +MH```*`&A`>+?"D2#>?``'T)#`-D5\``6`$`!X1!X`!8"0`:X12#"`,]PH``` +M*$&@98!!H$6``!R$,``?A$#;"42#7_``%@%`SW"@```H)J``%@!`5?``VASP +M`!8`0``6#$!!*`$$$'@&N$4@SP#/,]QH```*`&A`>+="D2#!_#/<```J1GF""_YR7&*"2`#"G`!V`#90@G@``AR +M[0#O^*'`\<"""._X`-BBP<]VH```$.F&H@M@`1IP\@M``X#@RB""#P```@F< +M``+YBW6I<)X,X`D"V78*(`0!V``4`C%3(@$`**@"%`$Q$!B`#P```A0IJ$(J +M`0+!N4JZ*JC"NCH*(`1+J.FF!!P`-*EP>@^@``C9=0#O^*+`\<"IP8MP3@S@ +M"0G9`,":Z`@403$!Q$*YSW"``$YRE'@@L`#;"_`3:Q5XQW"``.2S2(`)#($0 +M(J`!X^\+%(0:\"L(40`*%$`Q`]F*"N_^`=H,%$`Q!-E^"N_^`=H.%$`Q!=ER +M"N_^`=H$\(H*[_Z$P#8(P`"IP-'`X'[@>/'`E@^O^`+9HL'."^`)BW``W0WP +M7@S@`*EPQ\D1($"#U`VB(,H@0@,!Y5D-U1<`P+EX^0@>@`'!"^G="5"`&PF0 +M`,]P``"S$XX/S_CN\:8+X`"I<.KQ`=C/=H``:!\`K@L-41'6#,_]"?`-#1$2 +M1@B/_@7PC^5X"8']`-@`KM;Q`<",Z,]P@`"L>-8,X``:F,?)@.`H"H(@D@^` +M`&4'K_BBP.!X\<#F#J_X#-FCP8MVN@K@"I/8C;C>#N_X17D#%($PSW"```#M%B!1`"W(5&E88"X2`C84(E``(<*`XL[R +M&PI0`(+BRO0"%((P`"&`#X``C#5`J,7P!12",,]U@``\-1'J8(!!@$5[0H`# +M@&5Z!2"^@,H@@@\``)0`>`[B^,\@8@,#%($PSW>@```P4FG'N""^`&R7!`\#H7`I9*)4``!'I0 +M<`$4C##")4$!`A2",`2\A7H`$`PA.'N1<@''!P +M`=C"(`$``K@%>@<4@#`$$0,@EKAP<`'8PB`!``.X!7H&%(,P4R2``!!S`=C" +M(`$`!+@%(@*`RB""#P``E0#(#>+XSR!B`P,4@S``V@"%#R+"`$5X`*4!%(`P +M%24!$(2!!+A%?(2A`A2!,``CC`^``(PU!A2#,""L=7U\A05Y17M\I3H7`Y9E +M>CH?F)``&$0@!12`,`,4@3`X>)(7`98E>)(?&)``V0`90"`'%(`PEK@$&0`@ +M!A2`,"'!D+B1N)*X`[D%>04A@0\8`1```Q2`,`*X"!0",<=PH```,*T8F(`T +M&$"`!?!:"N`&R7`APH'BS"(B@"#T`Q2!,)3ARB!%`,H@1@"'W,`@!@,"N#`@ +M@P^@`!@L$FDP((`/H`"T+@]X$'/*(((/``"2`-P,XOC/(&(#R7#J"Z``!-G9 +M!*_XH\#@>/'`=@R/^$H@`"C/=:```"`['1B4`!8`0,]VH```%!"F`!8/0(#G +MRB"!#P``+"60#.'XRB'!`^JF3!W8DP/8$Z8!V$L=&)`\'1B4R@R``(T$C_C@ +M>/'`)@RO^!'9SW:!``PT7@C@"``$3-;H9]"M\"`(>4Z!-K%7@`9?ZXRB""#P``*"4@#.+XRB'" +M``'8`*?/'`@00.>N2"@+8:$X/'`*@NO^`+9 +MIL&*#Z`)BW`$%)/'`K@F/ +M^%(.X`.AP8'@`=UV#N`#PB5!$PAQ:@^@!*EP-@[@`PAUO66T?8?H`"6/'X`` +MV*0%\``ECQ^``"REBW;)<+H-H`D!V28.P`,Z#N`#.G!R#N`#&G`(<\]P@`!L +M5PH0A``J<0#`"G*""V_[N'?)<*8(H``$V94!K_BAP.!X\<"BP5X,(`$`V(MP +M;@V@"0'9@`#`,"*"8``HL#1P.!^X'CQP.'%I,&+=:EP#@V@"0S9!@]/_5H/ +M@`2J"B`$J7`!V$/`@\`B"*``!-E>#>_\`-@M`:_XI,#@>/'`H<&+<.X,H`D! +MV0#!SW"``"QR,@F@`#JPH<#1P.!^\<#AQ;'!BW6I<,]Q@`"@T%(,K_A$V@0< +M@#\!``"`I@R```KH`,!"P,]P@`!X50"``(!#P`#9"O`[>$-P8A`"!Q)I@W!% +MH`'A\0D4@L]P@`!X52"``H%-P`.!3L"I<)(/8`!$V:$`K_BQP.!X\<#AQ;?! +MBW!>#*`)%]F#P,]U@`"(JJEQ5@F@!U#:@*(`@&!"P^(%IP +M,"5-+A-O(,$*(8`O@`#DLQ4@%@``(8XE`(:K"1\`$0A?`G/8C;CI<8X/K_@% +MP@#9)!Y"$"JV/]@+MDIP!"P^((7E-"!`+LPEXI$%]">X"K8KM@[P'0T1$D$H +M`0,HN`=YP[DD%``Q!;DX8,BX"K8"P.ER`\%`)H,6N@N@!PHD``4O(`>@'_** +M<'H,(`KI<1$4@#`@'@`5AK@1'`(PBB#_#T;``(8%P88@"@`HN<"Y![DE>`"F +MZ7!F#._YBG$!W0GP`MT'\.FX`=W*)2(22B``(('EX_0Z#6`$Z7`D%``Q#+9* +M<`0L/B`P)4$N`!83$`7`!L(;"1$"%PH>`D$H`0+`N4$KPR'`NW!QT"(B`J>Z +M1L*GN$7`!B.!($1X!7D@IA<+'B+HNV"+8+Z0$4@C"*<(#BZ7'*(N$'\@T`&EH)K_X`)D`D +M(,`)"!\`#0@1(!$4@#`1"%X``A0!,2:V"@K@`.EP$12`,!<('@$=%(`P`-D/ +M(0$`+WE&">``Z7`1%(`P'PC>`"?!Z7`>%`(QBG/:#*_[BB0!`)#@RB4F$>(( +MH`;I<"#`$12!,`\('@`H=(8DO9\F\@06$!`*PD&F'0D>``0B``00D&@]LD1(`"%RB!" +M`(0/8@G*(>(#"?`R>21Z0:`+"QXA0(!$>2"@]LD9"`X%`(;GN,H@(0#/(,$# +M^`YA"/'`/@MO^`+9L\%Z#V`) +MBW".P8+&SW6``&2DJ7!N#&`'$-I+=X`G`A'I<,EQ7@Q@!S#:@L!J"F``1-D` +MP!4('@#I<'((+_HPV:EP:@@O^A#950-O^+/`X'CQP-8*;_B*(40'@B0$.$`D +MS3`&#V`)J7`AP)8*8`$`V1IPSW&``#`_A"@(!@/`,"%1#E8@$PJ+=X/&"G"& +M#^`"(<&,(,./0"02-P'""O1`*`$DSW```&0TT@JO^$5Y`<(CCPL)TP`1"A0$ +MSW```%`TP@J/^&*&(X8+"V0`088#CX7H`B'``!4*!0`0N\]P``!1-*(*K_AE +M>0`2`2"8X*(D0'!<`&PF)P>@WO^@`BP01A\!4)40`1"-X` +MBB'_#R"FH[@+IP'`SW&``.2S`[@5>`!AHPC?`0"&C"#_CTOTJ7`G;NX*8`>* +M(D0'>@SO^BIP-.@J0!1F""`9`=@I\"?IJ7`G;J8*8`>*(D0'`<`!W``L`!"R"V`)']D# +M%(`P%PA1``N'A;@+I\]P`0`,[28.S_H-\,]P@`!LJJH,P`@%P<]P@`#,NKX, +MX`AB<:H)0`!5`6_X@"0$..!X\<#R"&_X&=F^P8MU.@U@":EP"L#/=H``>+P` +MIHO`)&[R"F`'#MI`)@`?"@U@"2*6&@[@&2#`B.C/<```8#0*":_X`,$DC83A +MRB")#P``833T"(GX`-X9\!8E@!,HB,]R@`#DLQ-I%7@`8E$@0(+`*2($RB"" +M#P``8C3,"*+XQ2&"`P'FSWX$C=$.`I`@P(HE"!9:<*QX"B&`+X``<$!`(9,L +M-"-`+O_96<":P#X.[_D0V@#9SW"``)!`0"`0!$`@!`5`($4$$/`$*GXC`"$" +M<#9Z58H`(4-T2:PV>UN31;0!X2]Y2G*L>B]T,B`"(SL)@P`:9#9Z5(IR:8-S +M:!N$`")T-GQ;E&H;A```VB'$U0H#@Y-J@W3HC&@3#@&M#L"3`>)/>O3Q!.HA +MP)#H!"I^(P44@3`&%``Q`"5%#@`=0@``(U,N`!L$("'"&0I2``0J?B."P`.Z +M`"1!#KH)8`/KS#K@!H[8/``"AP-'`X'[@>/'`X<7/=8$`<#NI<'H,[_F*(0L$ZLD`I01M +M/@M@"1'95B5`$L8*8`DBE5H,K_D/A5D'#_CQP+8.+_@!V:3!`!:.0``6@$`` +M)H\?@``8Q0"O`!8`088.(`')<(P@PX]*)``@&G`&])H*X`!4V),"``!."H_\ +MSW&``.2S0,`3;A5X"PXU%`)A$0I>`G;8C;C2#F_XR7$*)X`O@0!P->IP%B"2 +M`TIPL@I@"0+9SW"!`+`T0<`6()$#*G">"F`)`ME`+ID1SW"!`/`U0L``(0TP +MJ7"&"F`)$-D*(X`O@0`P-6IPU7AV"F`)`=FI<,()(`D0V>[).0@>!<]QH`"` +M'`09@`_%[A=SP:$`CP&A\".`(P&A2G`Z"N`)`MDJ<#(*X`D"V:EP*@K@"1#9 +M%B>7(P$7@""0X,H@B@\``'<`SR!J`Q@.:OC*(8H#@-@`)I@?@`!0LP`8`C`* +M)8`O@`#$TDHB`"`C\`3H`!B"-`@D5"0W"!`A`,"N":`##W@3#O4@"'$/#A`@ +M"PY$)`D)Q00`W8#ERB"!#P``>`#/(&$#Q`UA^,HBP0-`(E(@3"(`I/H`!@`" +MP14A@#0'84$O@!,$)[Z?``0``<*X!">"'P```!@R)18@0\=!*M,"`=UC\B/! +M<0\>$D$OPQ#!NP'C02]`%,&X`"#1`*#AS"(A@!?R"P\>$A,+E0`)W`J\!"<" +M$Q\*``,;"-4`#PB1`!,/'A(/"Y$`#P\>$LSAP_8`W0+P`=W/UIB57IZ8AIBSW.``'S92F,!W5$BP('/`(#(E`""!X,H@@@\``'D`F`1B^,\@8@,# +M%X`@,B4!(`'8@N'`>`T,42"!XEQ`-TB#Z``J7#/=H``4,T`AH#@>_2I<0_P`"&"#X``[&T,$L```>$&X`RJ +M&A+``"]Y!N`:JN<)DH,`V0_P`"&"#X``#&X($L```>$&X`BJ$A+``"]Y!N`2 +MJN<)4H(`V`OP`"""#X``+&X.$L$``>`&X2ZJ#WCO"%*&`-@+\``@@@^``$QN +M"!+!``'@!N$HJ@]X[P@2@P#9"_``(8(/@`!L;@P2P``!X0;@#*HO>>\)DH$` +MW2CPA"T!$R]P`"""#X``3%9\BL]Q@``L5AKK78HX8$0J/@<(X'(-8`,P($`. +M.G!J#V`#J7`:"FB@L` +M`$4#+_BBP/'`Y@HO^`'9SW"``$P>'@\@"0#=,?"$+0$3+W``((,/@`!,5ER+ +MSW&``"Q6(^J$+0L2SW*``$IC,B)"#C<*D0!=BSA@1"H^!PC@[@Q@`S`@0`X( +M=^(.8`.I<`AVE@Y@`ZEP"'+I<,EQJ7,V"6`)2B1```'EKWVC#1*1!@L``-$" +M#_C@>/'`8@HO^`C9HL'J$@^VSW6@```NU84F#B`)BW`OR`#!SW.@`!PN!B$" +M`(#B`=IY@\!Z9'@D>(#@`=C`>$MXRB"!#P``IBA@"D'X`-@5I?(((`D_V`#` +M!!0!,16EK@_@"(*YU:66"B``ZAK8LUT"+_BBP.!XX'[@>-4'`!G1!P`9\<#A +MQ0AU*@@@"A38M@I@`@6%20(/^.!X"B,`@/'`#/(C"U``)0N0`'#8C;CZ"6_X +M:'$'\"G8$KCP($```*+1P.!^%=@3N/KQ*]@2N/;QX'CQP.'%(8``W0WI%PE0 +M`!<)D`!NV,();_B-N*EP!/`"V`+P`=C/<:``@!P;H;(/X`D4V-D!#_C@>/'` +M6@D/^`AU`8$H=XGH()"?#L<@&';@_O_ZEQ`>6P +M?0'F`)?O#@20B0$/^``6`4$@L``6@4!3(4(`0:!!*<(`4B("`,"Z0J!!*8(` +MP+I#H"2YP+DFH``6@4#/<:``@!PZ@>!_):#@>/'`"N@7"%``&0B0`&_8$0%O +M^(VX*=@2N`?P%=@3N`7P*]@2N$]Z-7A`H-'`X'[@>`?9SW"@`(`<.Z#U!N`) +M%-CQP*((#_@(=L]WH```$`T7`)8H=4(@``A((`$`0"4`$A!Q?`_%"0=M!""` +M#P``_/^=N)^X,!\8D.K)`!\`0"*]!?``'P!`!.9AO?L-M9``A@+9`@D@``': +ML0`/^/'`/@@/^`AV*'<*(8`OH```$`T1`*8: +M#L_W"'5(=\8.H`)H=H#@F`VB`LH@0@,3#E$0J7"V#Z`"Z7$>"<`"G0;/]^!X +M%04`&0/9SW"@```$**`PR,]R@0`4+&&2SW&``$"G%'D$DFBQRQ(#MI@9!`"@ +M$P$``X*&(<,/)7C@?Z`;``#@>/'`X<7/<($`X#H(=0"`3PA1``QP/0A?!L]R +M@`"P"2^"SW"@`(!$"PG>`A*``O`1@,]QH`"`(#*!8;@9"00`OA(``1$)!0`# +MA88@SP^;N`.E!@^O^JEP`-@`I0T&S_?@>/'`D@W/]PAVSW6!`!`[`(47"%$` +MX@ZO^JEP`-@`I0&%W07O]P"F7]BA!2_XC+C@>.!^X'C%`$`#\<#""$`#8@\` +M`]'`X'[@>/'`2@W/]PAV!@]@`2AU&@\/_,EP'@@@`*EQG07/]^!X\<"^#D`! +M7@X/_-'`X'[@>/'`X<4(=2H/(`,O>$(/P`7"#V`9J7`^#@_\T@O@%P;8;07/ +M]RT&#_SQP.X,S_<(=RAUQ@XO_$AVSW"@```@6X#)<:)Z/[KI<"((H!E2(@(` +M%0A1`,]P@`!LOV8(H`A`)4$2`_!`?AD%S_?@>/'`SW"``&R_*@B`"`H(0`/1 +MP.!^\<"6#,_W"';/=Z```""[AX/@RB"!#P``+C"X!`'XD@X@`\]XJ@[`!3N' +M#0E$`P(A0`,'\`XE@!______.&`"OD-V"AX8$+D$[_<.&A@PX'CQP.'%SW"` +M`)2:H(B#Y/'`SW"``&Q7`8`3"-X#6@LO^`_8@.!D#`+XT<#@?N!X\<#/<(``;%/'`BB#_#\$:&+#/<(`` +M;%/'`X<7/=8``;% +M`2X*+_@'V(#@%`VB^LH@@@,!A1<('@(:"B_X"-B`X,@,HOK*(((#`845"!X` +M`@HO^`#8@.#<#^+ZRB""`P&%%P@>`>X)+_@$V(#@U`ZB^LH@@@,!A14(7@'6 +M"2_X!=B`X/0-XOG*(((#\@K``24"S_?QP*8)S_?/<(``&*D@@`H@@"^``+`) +M.!`"($HA`"`*(H`O@``P"CH2`"$Z8@3@`GK/=8``##0('4(4SW:@```,,X;/ +M<(```*H@H-(+X`5(<`AW!(84AN2F=!``(,]QH```(&3@$*$!V`<9&(`0V`"A +M.A(`(9'@RB!,!,GVZ7``V0C:X@D@`*ES".>,Z""-JMH1"8$`(8T-"8$`(HT) +M"=```-DA\".5+0D0`HPA&((0\O$)@8\``(;=Z7`&V0':I@D@`$`E`Q('YR/9 +M#?`@V.KQZ7`)V0':C@D@`$`E`Q(*YPS92(TA"E$$.A("(6)I&0N%`.EP`MIN +M"2``0"6#$H#@RB`A"/T`S_?QP*X(S_?%D,]Q@`"T,P#<%0Z`'P``___/8.Q;WPED'>*<'$6BM`@80`'\@T(7@`)#%$0H+@6JK$`S_?AQ>'&SW2```PT +M`Y3/<8``]#.,(!B"SW*``+0S=8D6]!:)*0A>`'>)%B+```"`SW&``!PT%*(5 +M(<(``((!X`"B#($!X`RA)O`(C$D(4006B4$('@``V`3P`>`/>#4(DP(8ZQ8B +M`0"BD2\-41##D:648;OI#D&3SW.``!PT%2,,``"$`>``I`J#`>`*HP"!%*+! +MQN!_P<7%#=&0PY&EE&&[N0Y`D\]S@``<-!4C#```A`'@`*0+@P'@"Z/J\?'` +MSW"``+0S4!B`#P\`___/<8``M,T`@0'@N@WO_P"A"P@1""(/S_\`V-'`X'[@ +M>/'`2@^/]PAU*'9(=SIS.&*I<0#:2'.N#^_WF'*`X$H@`"`3V`ORW67/<*`` +M``RDH"IPW@OO]^EQ"G!Q!X_WX'CQP!8/K_$!W)2K-:LIB(60"0E>`)>K99"! +MD!8BP0"#L260@)`6(D,`@K,ED`&`-GH`H@#8X'_!Q>!XSW*@```<$Z(THN!^ +M\<`J#X_W8@ZO]RARIL$:<$[!C\,`V`GP!./\$PR`,FB#<8"A`>#U"(2`BW4` +MV):X"G'B""`"J7,.QL]W@`#(-`.'0":2$$)PC"#'CTHA0"".]\]PH```##.` +M%(`-"0$`*@_``2IP`_``V`CH(X<`(8`$`Z`(=(8DQY\!X22G!?(EAP'A):?(N`&G)-SC +M!:_WIL#@>/'`SW"!`'@;5=E`VF8+;_F+NL(.[_L6V-'`X'ZI`<`!\JES[@P@"04D!`.,)@*0 +M$?(?#=\2$VX5>,=P@`#DLR:0#R'"`U!Y1K"V""``R7#Y!(_WX'CQP(H,C_<( +M=RAV`-T+\!4.3A,4;T((8`&E>)'@_`I"`0'E[PT4DLT$C_?@>/'`X<4!V>'! +M0(`A@,]P@`"4FJ"(A.IN"0`#"''/<(``9%:$+0$3:@_@`S`@0`Z+<(X+K_\$ +MV:$$K_>AP/'`)@RO]Q-[2'6*(O\/@.#*(FH`RB,*`%-X,WR`X%T$K_<`'4`>X'CQP-X+C_<(=L]U@``\-0&%*'=` +M)1`4,>C_V0BY!"=`$#!PRB""#P``H2'\"^+WRB'"`_)_[W_P((,C'O!%>2.E +M&O`O*,$`3B",!P#9#R$!`S)X!'L`W@/P`>8=#A42SW*``(PUBF+U#H&00X71 +M#X^31'@#I>?KS0./]^!X\<`(<\]P@``\-4`@#`0!@!3H\"3`$!4*'@`D>!T) +M``#/<```I"$'\!$)``#/<```H"&""^_W:'+1P.!^X<7//'``@N/]PQPO0C>!2QPN0B>`\]T +MJ@``!**$!]A!+0$2+WF)N<]V@`!P"FB.SW*``+`)#KME>3"BSW.``+BIK:,N +MHR"$0!*/`)3G*Z,8\@;V,0^1$B.Y&/`;#]`=[N<2]$4I_@+GO4$IP7#"(6(` +M!]@*\$4I_@)!*0%Q!O`BN03P`-D(V"ZB080OHTRCY+K*("("X;K*("$"#PJ> +M`03:0ZY*DX*Z2K,;"-$!%0FT`P?8SW*@```05(('"8``"-B'X/0+@@6E`H_W +M`-G/<*4``!PFH.!^\<`+Z8#@`=G*("$`RB'B`,H@8@`+\(#@RB!A`,HA`0`% +M\AD(40`#V0#8SW*G``!(.Z(26E&!T`$>!_P<7@>/'`D@F/]PAT*'=(=AIS"B$`(0#9 +M`O`!X1T)E0(2:11XQW"``)SB0(CO#(&0`8CK#P&0"O#/<```R2B)<:H)[_?I +M<@#9$FD4>,=P@`"/5X8(!R +MHAR`$Z(`)X`?@`!\5-1X`(@5HL]P@`#`4=9X\"#``Q:BSW"``#!2UGCP(,`# +M%/#/<(``H%+6>/5X8(!RHAR`$Z(`)X`?@`!@5-1X`(@5HAS8%J)ZV!FB'-@7 +MHAC8&**`V!JB&Z)Q\+KF+O(.]D(FC!E+#%44,R8,^[F +M"/(3]K[F9MS,)@*3%?0G"!$A`]@5HD@:@`\(````3!J`#P@```!&\(PFPI4K +M\HPFPI8T\@#;=:)RHG.B/_`;"!$@`]@5HD@:@`\\````3!J`#SP````2\!T( +M42$#V!6B2!J`#PP```!,&H`/#`````;P`-@5HA*B$Z*`V(^X'?`["!$A`]@5 +MHD@:@`\$````3!J`#P0````.\)L($:`#V!6B2!J`#SH```!,&H`/.@```,]P +M``!_?XHCSP]VHAFB`-O/B0PZ3$S<)D2``)X`?@`#0P-1X`(@! +MHL]P@`#,P=5X]"#``P*BSW"``.S`UGCU>""`(Z(<@`:B2_!BHF.B9J)'\(PF +MPI8Z\HPF0I8M\HPFPI4E\D(FC!EM#%46,R8,"&B"!J` +M#P``'_`>\"&B"!J`#P``WPI1V`.B$!J`#U$````&HAP:@`]1````&_!AH@@: +M@`\```_P!O!AH@@:@`\``.\*4=@#H@:B#?!AH@@:@`\``,\*^/%BHF.B9*)F +MHF>B@@O``H'@&87/("$`T"`B`!FER7!>"2``Z7$=!T_WSW*G`(!((((@H"&" +M(:`B@B*@(X(CH"2"X'\DH,]SI```0DB#0*`)@^!_`*'QP,]P@``,$18,K_@] +MV8/8"+C/<8``?!+F"Z_XH-K1P.!^X'CAQ0RX)7C/``(PV`(>`X,H@@@\``,!.C(?#/2/?!,,$QR99#1Y*6+S"$&``O``W,]RI0`` +M@!."!""`#___`,`3HIAD%'@S@A!C)7@3HN!^SW*D``!`A1(`!L]QH`"`'`&A +MAA(`!L]SI```@`&A!X,!H0F#`:%V$@`&`:'@?N!X\<#AQ28((``(=0HB`(#* +M(((/``#_%`P-HO?*(4(#,05/]^!XX'[@>/'`X<4!W8WHSW"@`(`P"X`!W00@ +M@`\`@```@.#`?'EA)*+ZZ.!^X'CQP/H+3_<(=C`2`3;/<(`` +M0*!&($.C+$@&V`8$9"%X#Q!$``,]Q@`!8/!5Y`($0X`"AN@L`']X.8`,P +MR,O)`=F@&$``R7!:#^`>+Q(!-LL2`K;/!!AC^@`V`\@@`#:#6`(']G+R1"(,V@U>3%EX;FT +M"((>S0-/]^!X\<#AQ<]U@`"\-@"%%NA*#B_[`MC/<($`F"2R""_Y#-G/<($` +M%"2F""_YA-D`V2"ESW"!`*0D**"5`T_WSW"@```@.X#/<(``3*K@?R"@X'CQ +MP`8+3_?/=H``M#8`AL]UH```(`'@`*9[A<]Q@`!,JF"ABNH#V<]P@0"8)$8) +MK_@@H%OPSW>``+@V((>`X`#H6&"SW"!`!0D(H)AH"*@"/`"@0'@`J$!@0'@`:'N"(_X +M`(=?"%$``(97")4``MAB"2_[+MD[A<]R@``HJ@+A(J![A8"""PL$`WN%@GL' +M\%N%#B2#'_____];8\]T@0"8+*2$*KL)[4:`>F(/#840180*NEEA(J`"V'8) +M+_L!V8D"3_?@>/'`SW$!`-`8SW(!`"@6SW,!`!06O@TO^P+84-G/<(``^#0@ +MH`39SW"``-2D(*#/<(``J#8@H-'`X'[@>*/!\<#AQ<]U@`#\J\]T@`!\K,]S +M@`"/'`B@E/]\]U@`!\K`^5SW>``/RK`-X5Z!"5 +M$^C/<*```"`[@`"'`GF^"J_X`=@+")0`T+4%\*,?@A//M`!V,(@!0#1P.!^X'CQP"X,C_B,X`'8PB`.`-'`X'[@>/'`#@E/]QIP +M.G'/=H``O#8@AFAW6G(*(P`AA>D%)_Z4!O0]V`BX1@FO]^ERSW6``+@V`!U` +M%,]Q@`"D-@`9@`0`V<]P@`"P-B"@SW"``+0V(*#I<#X);_AJ<<]Q@`!4+@"A +MSW&``*PV`!D`!`'8SW&!`*0D`*8(H06!`>`V"Z_X!:$"V(H/[_HNV<]QH``` +M(#N!`N$BH`+8U@_O^@'9SW"``/RKHA"$`*,0A0"@$`8!`-@@A0ARL@D@"0AS +MJ0!/]_'`5@A/]\]PH```(/N`W!B`#P,`0`W/=H``L#8`A@#=`>#/$FH]<*40#/<8``6"Z@H<]Q@`"X-B"!$PE1`('@!]G*(8(/``!X``+P +M_]G/<(``5"X`@"1XW@MO^@#9`=G/<(``%*<:<""@`M@&"B_[.G"@H*BHSW&` +M`,0*(($*&$($*:C/<8``>`L@@2NHSW&``*0V((&EH"2@IJ"^"R_[`MA^#F_X +M`!A`(P"&@>`0"('X0@F/^'(*C_C/<(``3*H@@`L/1!`")T`0!O`.(8`/____ +M__A@SW*``"RJ(((3"5``SW&!`)@L)8$*N1T)!0#/<(``**K@H*"B!O`#V<]P +M@0"8)""@I0C/<8``3!``@0'@`*$!V`"BX'Z'Z,]Q@`!, +M$`"!`>``H>!^`-D$\`'A+WD5"5,!SW*``%`0-7I`DO$(@8`#\/_9X'\H<.!X +M`-G/<(``D!#@?R"@0B@"`D]YP>&$]MKA`=G#]@#9"ND/><'AA/;:X0'9P_8` +MV83I`-@2\-=P``!:6LP@@H\``%!!6-S,(@*#`_0!V`+P`-CPZ`'8X'[@>/'` +MX<7/<(``3!``@,]S``!:6GT(-`$`VDAT:'`+\,]Q@`!0$)5YH)$AD8#ARB!" +M`P'D"PP5$>L(P(!1",$`!-Q(:"1(9'M"8"` +M4''*(RT`RB!-`\HB30#O\0D*U``9"U$`SW&``%`0"9$#Z`B1!/#/<```6EJ" +M#\``C08/]_'`$@XO]YAR*'8@B`&("+D`($8`+R.(`0X/[_]H<`'=.^@@C@&. +M)W@BCB=X(XXG>"2.)W@ECO_>)W@`((4/@`#,\0`5CP`Q#X`3K@[O_VAP#0AS +M`0#=(0C#`P;P&0]2$14,$`#/<(``4!#U>"&0`=UAN2&P$>U>""``:'``'0(` +M%PB``\]Q@`!0$!5Y`9$!X`&Q`!F$`>4%#_?@>/'`X<4`W<]P@`!,$*"@SW"` +M`,SQ_]E*"^_X06FI<0CPSW"``%`0-7BAL`'A]0D4A+T%#_<(<0#`7"!4$SW*``%`0%7I@DND)P8`%\/_8AN3*(`8#X'[QP!8-#_?/ +M<8$`_"L@@3D)40#/`IX)@`)`+@,2$+@%>Z]ZSW#%[H)D`=G&#*`(97K]!`_WSW*``,0V +M)H(C@2"!&6$E`.`'2'#/<8``;#P@@<]P``#;#K4$;_?J$@*VX'CQP&(,#_<( +M=<]P``#(&T(.``!3(,X"SW```,P;,@X``,NX#0X$$`(F`1`(\,]Q@`#@-R"! +M`GG982"ESW"``.`W`(`BN!!QS"'F@`'8RB`F`'T$#_?/<8``I%$B@0#8$PF> +M!?6YX2#"!V38X']"R_W+'H:.,@@@#*(0(`=0,/]^!^X'CQP!(+#_>AP0HG +M`)`H=1IR0"`."":.!O()#4,0`X>-Z`"'0"T"$A"X!7K/<```Z0XZ"V_W17G/ +M<($``'0="`0@SW"!``!Z$G#*((T/``#X#A@+;??*(0T$0(Z@K@*.0:X<'P`4 +M#N@#C@GH((?OV!"Y!+BE>0H+;_=DC@'8`ZZ&\`'8`JY*(P`@BB3#+R2.`Q[" +M%``6D1`&CAP7$!`,>4.'`"%`=`AB`-T)"``%H8<5?4:'%>I@P0(<0C0$[0&- +M`_#_V`$<`C`$[0.-`_#_V`,<`C"+<6!ZZ7`DCI)QS"4BD`ST`(<(N1"X!7G/ +M<```Z`YZ"F_W!2%!!"2.08U*(D`@4''"(H$D-0F```6'`-H-Z"E@%PD`!0&' +M-7@CB`L)``4"A_`@0@"`XLH@0@3C(((`RB$"!/_8!*XCC1,)``4"A_`@0@`J +M<&!Z"G$W"A`@`8T$K@2'(8T`V@SH*6`5"0`%`8".(#0D`!0*'\"!"`(#B +MRB!"!.,@@@#*(0($`XX-"!&``A["%-T!+_>AP.!XX'\FH/'`D@D/]PAU1"T^ +M%\]P@`#((C`@00X`V,]V@`!DMQ*FSW*D``!`F!(`!L]W@`#DMA.FSW"E```, +M!8`9II7I>Q(`!A!Y!""`#___```PN-`?0!#4'P`0%(8UABBX5H8HN68);_PH +MNL]Q@``P"B(1@`#/`%AZ;G*(((/``#*(O@(8O?*(D(# +M%FW/<8$`\#4`8>FXBB$(!`*(#K@E>/4`+_<`IL]P@`!L +MS.!_`(#@>/'`=@@O]PAQA"@(!@`AC7^``#`_PH6%X,H@A@\```(TG`AF]\HB +MA@.%YLPFXI$`V`+T&86M``_W\<#AQ8P@`H"8<`38&_)`+,T`M7W'=8``Y+,` +MA88@]X_,(2*`RB""#P``_P`+](7H"(41"%0!*]@(N$8(;_>(<0B%<0`/]^!X +M'7D$(8$/555552)XSW$S,S,S!"!"`"*X!'E984$I``$X8`0@@`\/#P\/!"B` +M#P$!`0'@?T$I`';QP+X/S_8(=L]PH```(+N`0@J@!BAP`B8!$`L)4@`]90/P +MPG@"?04`+_>I`.KD*6,+L0ND4E0!*$V65Z`@O@ +M""#;D@[@'2IP`=TY\`#=!)8*<0#?Z7(`%Z7//<8``Y+<<@>ZN`>`DFD'!R`'P!I``#@?N!X!=D5N0BA'!F`#P!J```* +M@>!^X'@%VA6Z"*(IHAP:@`\`:0``X'[@>*+!\<#/`2IL02```+IAN""J8+"9X! +M_@V@!P'8`=@/"%$``\&@I@3`(:8"I@S<>P7/]O'``@W/]L]U@``@.`Z%\0@? +M`2"%2PE0`$H@`"!I"9``T0G1``F%S0@0`!:%)!T`%`'@%J4"A<]Q@`!\.$&% +M`:$$A4"A`J$'A4B%0G@%H06%1H5">`.A*'``4I0*%SW&` +M`$PY`:'/<(``6#D`B$"A`J$H<`S99MHV\!6%(84!X!6E`H7/=H``F#@!IL]W +M@`!8.02/(*8"I@6/0"8!'`.F9-@%I@>F0"<`%)X-X`6$V@J%*X5GVB)X;[@( +MI@R%+84B>`JF)I<%EQ"Y)7@&IB27`Y<0N25X!*8*<`FF"Z;)<+39_@B`!0#8 +M`*4#I>X,H`<$I6D$S_;QP&((@`*,(/^/!_(`V<]P@`#P.2"@T<#@?N!X\<#F +M"\_V0@B``HP@_X\^\GD*40#R#:_Z!M@(=[X-K_H&V!IPSW6``/`Y`H4`W@*G +MN@\@`@F-Q:<(K\:G$!^`'P``!CS`IP_9&!A`(!79'!A`($`@`2)`)0`3W@S@ +M!0;:+!B`(T&%!M@`V08/K_H/(8$`SW&``!!)%(%$C0\@@``4H6X/K_H&V,$# +MS_;QP%8+S_8:<`HA@"^@```,`-X(\!`1`B"^8;IB$!F`("-N80A$(,]PH`!@ +M#(B(:(A(B$`J#0)E?=T,$9."Y!`*0F@J]$KTB( +M8Z\(B$6O!J\1#?(3PFD';[(/[_8-V0WF$0T1%T`G`!6B#^_V#=D-YA`1`2`" +M((`C&6$0&4`@*0/O]@'8\<#&"L_VC"`$@(H`)@`(=8,-%!7/=X$`9"8*((`O +M@0#D)E8G0!1B#^_V`MD($``A8PA1`%8G@!1.#^_V!-GI<(`@@@)"#^_V`MD* +M$``A1PAS`6B]`K@_#000`-X*\%4G0!G5>"(/[_8$V62]`>;/?@H0`"'K#@*0 +M52?`&`H/[_8"V0P0`"$/"',!8KT"N`L-!1``V!?P`-X*\%4G0!K5>.8.[_8$ +MV62]`>;/?@P0`"'K#@*0SW&@```,!(&X8`2A`=AI`L_VX'CQP*#@"'$`V`GW +MSW"!`&0F.:"N#N_V:.`!V-'`X'[@>/'`S@GO]@':C"`$@,(BC0"&X#IPM``E +M`,H@92`*(X`OH```#&@3@"#/=X$`1"=`)U(1:!.!(`"O`H\AKQEAD.%*(``@ +MRB".($`G%!$"WF\(42``W0_P2@[O]@C@`H\!Y0'@`J\"CZ]],V@U>3(B02`^ +M9B&/1PU#$`.X%7B"<"(.[_8!V2*/`[DU>0`A@`^!`&PG#@[O]@39`H\#N!5X +M0G#^#>_V`=D"CP.X%7CX8"6(IPERB`;F2B``(!`3`2`"(8`C&6$0&T`@60'O +M]@IPX'CQP!8)S_:AP0AU*'9K#301`-B+<+H-[_8$V0#`UW#R!0!0'O(*]D,( +M@0_R`0!0J7!.""``R7$A\!L(@`^:"5!O)PB!#YH34&^I<'H.+_C)<1/PJ7!B +M#>__R7$/\*EPU@[O_\EQ"?#/<:````P$@62]N&`$H0'8#0'O]J'`\<"2",_V +MC"`$@(H`)@`(=8,-%!7/=X$`9"8*((`O@0#D)E4G0!LN#>_V`MDT$``A8PA1 +M`%4GP!L:#>_V!-GI<(`@@@T.#>_V`MDV$``A1PAS`6B]`K@_#000`-X*\%8G +M`!;5>.X,[_8$V62]`>;/?C80`"'K#@*05B?`%=8,[_8"V3@0`"$/"',!8KT" +MN`L-!1``V!?P`-X*\%8G@!;5>+(,[_8$V62]`>;/?C@0`"'K#@*0SW&@```, +M!(&X8`2A`=@U`,_VX'CQP,(/C_9:<0#=SW*``#1!BB$(!CIQ+'C:"B_[,B)0 +M#@AW!O`&"L`'$">/$Q;O+RC!`TX@C@<$+GX4`"&`?X``,#]T$`$&`H`E?=T( +M$(+)<)X((!H*<>KQSW:``-0[`(:E>`"FJ7#2">`'']FR"R`"2G!AN`]Y1;DU +M?B*&Q+@/(0$`G0>O]B*F\<#AQ1H,[_PQV+1H$@SO_#78!7T8O9&]SW"``&C/ +M?@_@!9*]*+B9!Z_VI7@`V0KP0-B?N,]R@``P%S5Z`*(!X2$)%0@`VNS)#R)" +M`$MX"/+MR4MX[O70V)^X[O$`V.SQX'[@>/'`X@Z/]GX+(`(!W8'@P'TR"J`' +MNWT`V<]RH```2,]WH`"`1,]PH`",1#B@9!J8CP@````(V&0:&(#/=J```$4` +M'H`?`$```.!X(*;/<(``_`$0>!2GSW"``#@$$'@5IS38$:<!^`'X````!\ +M'X`?@````&`?@!\`1C@`;!^`'P`&&P"9!H_VX'AJ(4`!02G``%(@``#`N!-X +MP;B`(`@(*B(``,MS90;O]GS8X'CQP-X-C_:NP0AW&G'Z"N`%Z7')<"(*8`'I<0`A@"^``&A``Z4!A1C9(+!/)\`@ +MA+A!A8VX`:(`P$.%A2`!`@"R(J4`A1S9(*`AA0&!I+@!H0&%$!B"!0&%,QC" +M!`&%*!A`!@&%,1B"!`&%,AB"!`&%-!A$!0&%#.!""Z__BG$X$``P,0@>``&% +M&MD@L"*E(X4`D189Q`2'N`"Q4R#`(`RQ(84!@:VX`:$AA0&!E+@!H>T#K_:C +MP.!X\<"R"X_V]!P(L'IQ&G)H=@HE`"'(=8(.(`%H<`AW4R#!`%-H57K'BH0N"!8$N(8@_@,%(%0`(((*(D`N'0E>`L]P@```03`@@@3/<```PR'2 +M"^_VR7,!A4HF`"#*<5();_@XVD`D$3'I<(()X`4J<%`$QI7DS +M"E$`SW*``/P[8*+/`6Y&6$`(8`/@0#X&.!^X'C1!^__`-G@>/'`X<4`W03P +M`>6O?3L-4Q`4V0`E@!^``/`W(*@`VP`E@!^```2[8*CA"Q.%%VT5>#5K&6$` +M(8`/@0#X&$((#_@!XV][\O$=`H_VX'CQP)X)K_8`VPAW`">%'X``\#<`%8(` +M*'"`XLH@@0______-_(W"A,%"B2`#X``!+L#\`'C;WL`),$#@(D;#,(0UV_5 +M?K5KW67/=H$`%!FN9KR(XPY#DP'D@*EAN@`=@@"W;[5]!;M]9<]V@0#X&-EE +M>@J@!2#:SW*``,[`()(>YKYF(+80OP4G0!`!X2"R>0&/]N!X\-O>\]T +M@``$NPQDW0S#D$APX'_!Q>!X\<"Z"(_V&@_O]RAV=0@S!0AU%6T*((`O@0#X +M&`IW^&#)<>X)H`4@V@`6$1`3\-5M0"8`&/A@^6;6":`%(-H`((`C`!A`!`)V +M(I8!Y0`A42"O?<]S@``$NP"+UPT"D`6X]@[O]_A@`(L)"%(`8;@`J\]Q@`#P +M-P")`>``J0'8`_``V)D`C_;@>/'`+@B/]@`@D@^```2[`""1#X``\#<`$8(@ +M`!*0()3BRB`A`$/RMVC/?O?P`2@2#5#T*08;D`&D(@0"A`(;A@-@[O]]A@`!&` +M(`'@`!D"(`'8X0=/]N!X\<".#T_VJ,%Z#N__"'6!X)@*H0+*(*$!BW&R#N__ +MJ7`M"%$`SW:@```$#X;/=8``!*H`I0;8#Z8$%`$Q`,!F#6_X0KD`A0^F`=@# +M\`#8K0=O]JC`\<`Z#T_V2@W/_\]UH```!`^%SW:```2J`*8&V`^EO@O/]S8* +MH`(&V`"&#Z5Y!T_V\<"&X`AQ`-@'\L]P```$0CH/C_;_V`(-S_^`X,H@@0\` +M`/\``O("@-'`X'[QP-H.3_:&X`AW`-@(\L]P```$0@H/K_;I__J7'M!D_VX'B%!,__\1L)=0$`VH0I"`8`(8%_@``P/V"!"PC``$AP!?`!@?L(48`!V.!^ +M_0`O_P'8X'C/!"2BX'[/<*```!P!@"QPSW"@ +M```<08``V9VY!"%`0$MX!?+RR;VX\AH8L,]PH```'"6@X'[QP%X-3_;/=:`` +M`!PVA?7)SW*@```@)'B*)@00$0@>`G<2`(:R"L_ZUJ4(\`T('@"J"$`%`=@6 +MI9$%3_;/WN`NV1Y.&"@&@``X'[QP-8,3_8`W<]T@`"( +MSJEV`O`!Y1D-%13`A,]W@``,"+YFP[[T)X\3ZP]?DN%N.PTU%."D`-W/=(`` +MC`?6?*"DH:0$N(8@^`.)N,.Y!7D*NR5[SW"```P(%"",`V"T(.#5>$"@`O`0 +MWM4$;_;)<.!XX<4(<0#8"',0\,]R@``,"/0BP@!/(4T"AB+P`P\@S`"Q$7"14$SW*```P(]")"`,FZ[PB!@`+P$=G@ +M?RAPSW.``(`]\",#``*X%'@`((P/@`!`/0*$#R#```*D.=@$'(`?``"`'`>X +M%0G>`,]P@`"`'`0<@!^``(`<"0D>`9BX`:0)"1X`@K@!I`/J@;@!I`L)'@*6 +MN`&DX'[QP+8+;_8`V0AVSW"``(C1`8"BP4'``=A`P,]W@`!`/2"G1R;-%\2] +M%/`O*$$#3B"$!\]Q@`"`/?`A``'_VA3A%7E`H8MQJ@KO]RAR$"4-$>WM2B8` +M``HD@`$K\"\H@0-.((T'SW*``(`]WEG!!$%`/`B0`,B@04F1@$%)$0` +M^V-C@R"'%.)E>2"G%7J@HJ]YA"D(!@`A@G^``#`_0"(!!$H*[_<8XA`F3A/8 +M[L]RH```*``:F(&S$@&&0"P``88A`PR&(/P#)7BS&AB`!!J`CSH$2G!%`V_V +MHL#@>,'9SW"@```HSW*@```E(:+/@`B@P^``$`]0H,5?!`B`@!"HT6$$PF!`/_9):2+<38)[_,]Q +MH```*$,1`H8R$0&&AB'CCP'8!O+KNM$BHH'*("$`X'[@>(0H"`;/<8``.#\P +M(4,.SW&``(`]\"$"`,]Q@`"0V_`AP0`#NEAY`K@4>``@@@^``$P]X'\@HN!X +M)0@5!`#;SW*``(P'SW&```P(%"$,`&"T%GI@HF&B(.$5>6"AX'[@>/'`X<4( +M=<]QH```)$J!(H$`V""E%NIW"=\'SW"``+`)/8`*V&3A@@\@"(RX#'`7"!X' +MSW&@_L@$!=@5N"2@']@E\"QP^+@`V!ST#'`5"%X'SW"@```,+8`+@"3@"0A$ +M`!C8#?`#V$(/(`@`V6QP]0@?@`QP[0B?A`#8@.#*(.($SW&@```D(H$@I3D! +M3_;@>/'`SW&``!Q='H&'Z`'8K@A@`!ZA`_!""0``T<#@?N!X\<"6"$_V"';/ +M<8``#%@H=X`G%!09AP`AD`\``!`(`-V#Z*EP$?`N#,``_>A@$``@^>@=AXOH +M'X?K"%2!'@T@`,EP\>@!V+4`3_8D$``A$'8X"$$`Y_'@>,]R@``,6$`B`00P +M(8$/```\"`#8C^F`(A0$-H*+Z3>"B>DX@H?I.8*%Z3J"@.'*(.$`X'[QP#X( +M```*Z,]P@`!L5P20'PB##P``$0PB"```"^C/<(``;%<$D`\(@@\``!$,`=@" +M\`#8T<#@?N!_`-C@?P'8"''/<(``'%B4(-`$(+`$(8`/````_TBX+WDQ`B`` +M!=KQP+(/+_8(#*)6$1'/*I<'H/[__I +M<2@1`"`K"``$0@\@``IP`-T0\"\B!P3)Q+T-"".+P``5`4$)HT?````_TB]SWX/#U`1,""/ +M+P``?`4!V^]ZJ7#2#N__R7&,Z&P1`B`O(8H$66$!X94@2",`&$`@-04/]O'` +MX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@ +M>.!XT<#@?N!XSW&``,I75R'`"2$'(`4GVL]S@``<8%P3`H8)ZD^#$[.`XG`% +M`0!)`0_]X'[QP((,#_;/=H``'%C""```"'6#X,H@A@\``"8)I`QF]LHA1@.$ +M+88;Q00O]@`A@'/QP.'%>@SO_PAU@."I<`7R$@@```/P4@@``*T$#_;@>(P@ +MPX\`V1?RCN#A(,4'P"!E`);@P"BE`.$@Q0?"("4%HN#`**4`X2#%!\`@)0,+ +M"-0)*'#@?@*X@B`"`N!_@"!"!>!XC"##CP#9$?*.X.$@Q0?`(&4`JN#`**4` +MX2#%!\(@)06,($*-P_$0H +MO@9">0`A3@Z,)@J9RB"&#P``)`GT"F;VRB&&`ZEP@"`6`,Y@,B6`'P``;040 +M=LH@A@\``"4)T`IF]LHAA@/U`B_VR7#@>/'`;@H/]AIP"B*`+X``?%<`W5SP +M%")1(P`1#R$6#N__J7!Z<$`@`"&F#N__:G$(=@HD@)/*)&(0H+^%?X<.$!"" +MY@'8P'AS:,]R``#]_P0GCQ\``/7_9'I%?QMX!7\^#^__:G`*Z`0GCQ\``-__ +M@>8!V,!X!;@%?U`G@1$`V`\.D!"!YM$A(8$"]`'8@.#*(&(`!K@%>2\-M!,P +M?P@0`"`$(8$/``#_^4$HP@#`ND`JCP+/<@``__U$?R5_Y[C/)V$2`!G$(P'E +M30W4F?D!#_;QP*X)#_8(=@#=#O!6#>__J7`(<1X-[__)<`AQD@]@!ZEP`>7I +M#=29SW"``"QR&)`PZ`#=+/!R"*`!J7`FZ(0M`1//<(``:58R($$.`"&`?X`` +M+%9$*3X'"."F"V`!,"!`#@AWF@U@`:EP"'9.#6`!J7`(6O?:L-$I&%`0_V\<`:"0_V2'?/<(``#%A`(`$$`-T(=H`F +M%!0*ZP?8'Z8=AH#@D`G"_ZEP(_#B",__7X89Z#,*Q`,=A@?H"P]5$78)S_\3 +M\(#@S"=AD0_T'PK$`S`A@`\``#P(@."\"`$`!?`+"L4#`=@#\/^F`-@5`0_V +MX'CQP,]T@``<8%@4`Y8#ZP'8&/"%XLPB(H$0]$`H`@($(H(/````_W.4)7H1 +M"L$`)AR$'P``*2GM\38(``#IZ`#8T<#@?O'`"'///'`X<7/=8``'&!7A<]P +M@`"D/12Z)H!=>B.!((&."Z`&66$!V%4`+_9='1B0,F@T>0`A@`^``"A=X'[@ +M>,]P@`!L5U8@@P5`(`$$`=B5(4D``*$P(X`/``!8",]R@`#`/2:"%+@C@2"! +M&6%!`Z`&2'#/<8``?%<`V)4A20#@?P"A\<#/V)B!AR",%\0`H8''((P)]I"P@#;!_#T(<(` +MDFN#=$.D`>/W"]2)#X"'Z(MP@\(,V>8.[_VH+H`3)VJ'`T<#@?L]T@`!L5U8D@Q4R(X,/``!L!1$+ +MT`^$E`T,@Q\``/__"',&\('BS"'B@?SUX']H!XSW*``&Q70"(,!%0BPPLP)((? +M```$"0?J]"-"`""017D@L.!^\<#AQ<]R@``<8"R""J(!X98.[_\LHJ(.[_\( +M=;8)S__>"^__J7"J#.__J7#%!L_UP>`!VH?VVN`%]L'A@_;:X<+V`-JPX,PA +M(8P&\H#@S"$A@`/T`=K@?TAPX'C/<```K=[@?O'`"@[/]:/!"'4`W@&`F;[C +MN,HFHAC`+B(6T2`B@!`3!``4$P4`(8-"@V8+(`!C +M@\]P``!55='`X'[QP$(-[_5`(`0!"'4*((`O``!55>8*(```WAEVN';)=\ES +MR7#X=MAV"/!#A0\GQP#N&IBP*',!X&L(E0$R)`(`]PK0CR%K2B$`$(N-#R$) +M$`LD0)(`W,\DPA#*)"$0A7Z*C0LD0)(`W,\DPA#*)"$0Q0KU@H5_,R:"<(`` +M=,]`)XQR5'P`?`\GSQ#6\<]RH```1P`2!@`/)<4`SO%*($`0RO&`X\H@@0\` +M`*W>(O(4%000`84BA4.%M@H@`&2%R7`J"B``Z''I<&(+(`"H<1`5!!#(4!`BAP0=4!#Q#!22,8#/<*`` +M`$8EH`#8!_#P(P$``>`$&E``^0B4@`'9SW"``)PM(*#/<```5559!,_UX'@$ +MX,]SH`"(1@#:!_#P(($``>($&U``^0J4@<]P``!55>!^X'CQP.'%>@O@`+3! +M)>BB""``BW5*""``J7``VF'"/]D%'$(P!AQ",`C8!QP",&+!"1Q",`P<@#]. +MT*_KBB"(!$3`_]@+'`(P"AR",$7"-@[O_ZEP[0/O];3`\QK44V`>U$!V$'P``_P]>"V_WJ7#EI8H@_PL&I0'8!Z4@'8`?_\/_ +M_P;8":4H'8`?`0!K_\"E$@WO_ZEPB0//]>!X\<`>"^_UBB#/#[3!!!R`/Z`` +M```('(`_'P#__PP<@#^@``P$1,`4'(`_H```#$;`'!R`/Z````!(P"0<@#^@ +M``!PBB#?#TK`+!R`/Z0````P'(`_`P#__S0<@#^H````.!R`/P,`__\\'(`_ +MH``0`$`<@#^@`!```-Y1QHH@1`!2P%/`BW5&#N__J7"!P,EQ<@BO]R#:G@[O +M_ZEP[0+O];3`X'CQP*H.S_V`X,H@8@`*N`3@D+C1P.!^X'@F>,6XG[C/<:`` +M`$8&H>!^SW"@``!&"!B`#P`'``#@?O'`/@KO]0#98H`%VA6Z:Z+_W"AR$/`6 +M((T`QH5R:L=SH`"`1\"C984!X@\AS0"1<\HA0@/C"M2`SW*@``!''X*&(,,/ +M)7@?HET"S_6EP<]TH```1P*D!23"`%"D1!Q`$>!_I<"EP4#`0<$@P0$4@#`% +M(8$/````/Q"X!7D%(8$/`#\``,]PH```1BB@`Q2",`(4@3`(ND5Y(<(0ND5Y +M!12",!BZ17DIH.!_I<"EP<]SH```2``;`(`,&P"!+R)(`8$;F("`&YB/`(`` +M`.!_I<#/<:```$8`@44@P`$`H078%;@L&(`/`(#0`.!^I\%"P\]QH```1P"A +M"!0`,4@@``,0N`0@@`\/````!2""#T`&`(`*%``QR+A%>`&AX'^GP"9XQ;C/ +M<:```$8"H>!^X'C/<:```#<`@:"X`*'@?N!XSW&@```W`(&`N`"AX'[@>`': +MSW&@```W2*%!H0*A1Z%)H4"AX'[@>,]QH`"`'16!!""`#P'X__\5H0#8%J$= +MH>!^X'@#V,]QH`"`'1VA%H%%($`,%J%4&8`/$````.!^SW.@`(`=-H-0(8($ +MD[J$Z%:C!?"2N9.Y-J/@?L]SH`"`'3:#4"$"!96ZA.A6HP7PE+F5N3:CX'[/ +M.'%$P@0`02X%'@`(($/@`!HU`#:#?#/ +M<(``^-1,8,]SH`#0'?`A@`"5>P"C`>+K"A2#X'_!Q>!X0(#/<:```!]>H0&` +M'Z'@?L]R@`#XJ$**!;E=>E,B#`#/25[X']@ +MHN!XX<7/=(``0`>BA"5X!"6-'__`&/X%NH8B^`<%>AB[17ME?:*DX'_!Q<]R +MH`"`'3R"Q;A&(<$/)7@!RBX'[/<:``@!T6@;.X%J'@?N!XSW&@`(`=%H&UN!:AX'[@>,]QH`"`'1:! +ML;@6H>!^X'C/<:``@!P:H>!^X'CQP/8/S_^6"^_U!MC1P.!^\<#AQ<]QH`"` +M'+J!V@_/_WH+[_4&V&D'K_6I)\(A0";#Q0>A(4& +MA4`O`Q288`:E$+P`Q\]PH/Y8`0+9A7J:""``Y7L."0``.?!`(,`A!""`#P`` +M_/^=N)^X,!D8H``?@$\`@/<`SW*!`'@;`_#(N2*E9(4BA?`B0``8ZX`C_X\X +MN&2E`=O"(\$``>-X8`#;WPL%@/`B3P``'\!#@X4!X6&\@Z4!X_;Q`>$"I@/8 +M!Z8#A2*E8;@#I2&E+88`A0*X#PD%``/9SW"@`(`=)J!5!J_UH<#QP*X.C_52 +M:0_B!"*"#P``_/_/$!I/L)A(#@?\'%X'CQP!H-C_4(=RAV"@DO^AIR +M)@XO]PAU[WH`(H$/@`!JI,"ISW&``!0^`">"'X``.#X`&@($1($`VP\CPP,$ +M[F9Z1*$,\(PEPY]E>D2A!O(-#0$0M@TO]P.!)06/]?'`P@R/]0AUK@@O^BAV +MS@TO]PAWSW&``!0^1(%E;1`BP@!$H1CNSW.``#@^JV,;"X4#"N4/(D(#1*$= +M#P$0;@TO]P.!"/!CNPT.Q1`*Y1`B0@-$H=4$C_7@?N!XSW*``!0^)((%X`\A +M`0`DHCT%+_<#@N!XSW"``!0^,04O]P.`\@@O^@AV"'6,(,./RB"! +M#P``@0/*(8$#<`SA]!XSW"``!0^Q00O]P.`\<#A +MQ0AU#@TO]TAP-6@%>0JX)7B?N,]Q@``H/K5Y,02O]0"A\<"R"X_U"'7"#"_W +M2'8(=]X,+_?)<#5H!7D*N"5XG[C/#"_W`X+5`X_U`-K/<8``*#X5>>!_0*'@>(HB4`C/A1*'8V"D%K_Y( +M#"_W`=AA`X_U\<#//'`M@J/]<]V@``X#`*&H<$`W2+HBW4(V)H. +M(`"I<8GH!]B2#B``J7&#Z`2&`^@"V`+P`]BB#`_W`-T3"!`!`KC/<8``8`P4 +M>`5ASW"``/P,Z@T`!JEPS0*O]:'`\@`V`.E +MSW:@```@!!8`EE,@_H!4#"'WRB!A`(#GS"`AH`/R&X8!I7T"C_7@>/'`X<7/ +MI<*EP +M70*/]>!X\<#/<8``.`PB@8#AS""B@3@+(O?`>-'`X'[@>/'`P@F/]80H"`;/ +M`#>RB9J$,HG"Q!>#2`&RB=*$.EP +MJ7'N#V_YR7+I`8_U\<"""8_U1@D@``AV"'7)<`8*(`"I<=D!K_6IL]S@0`$)D)C$.J$*`@&`"&`?X``($%&#._Y(*"`X(0*X?G*(.$"T<#@?O'` +MX<4#N!1X`""-#X$`!"9`)0`2D@XO]Q#9`-B-`:_U`:7@>/'`!@F/]0AV&G.$ +M+@@6SW"``#@_,"!##@`AC7^``+!`'H6U"!``A./*(F$`RB$A`,EP8@_O_PIS +M"'<1#Q,0R7`V"2``Z7$(=\]P@`!XY`"`A^B^"\_Y@."*(+\#`_**("`,"P_3 +M'&T/`Q"N"2`%R7`Z<$H*(`7)<+AP4R%`)<]RH```(%N"!"&!+\#_```"(@8$ +M`B4"```A@P]`````4'#*),4`RB1&`/RER7!&"2``Z7$")8$!R7"N"2`%!2$! +M`4X+S_F`X)`)X?G*(.$"!/``V!RED0"/]?'`,@B/]0AV:'>$*`@&`"&-?X`` +M,#\$N!9X`""##X``S$D+"E$``(,(\!V%!2A^`$`I@'(?9P2#_@P`%AIP`H6S +M;K1]QW6!``0F#0@1`0#9(*4<\,]P@`!XY`"`C>C:"L_Y((6)Z(?IG@[O_\EP +M`=@`I3+9"O``A8;HC@[O_\EP`=@`I8HA!PT"OD-V&QY8$`@0`"`T>`$`K_7B +M>`.XSW.!``0F%'@<8T"$$.J"A`':"?!Y8`CA\"&!``'B,'3*)$80\PH4@9-Y +MX'\H<.X2`K8A"AX$SW*@```@SW.@`(`!MA@8,X8`C@E7A`H`%LP;C@?P&CX'CAQ0.XSW.!``0F +M%'@"8P[J&0D3``#="/!\8+5\0H0!Y3IB0J3U#121X'_!Q?'`Z@YO]4HA0!"B +MP0#<2B8`"(ES#O`O*0$`3B&"!T]]`"3!,$"I$"!``P]X`>-O>_/H`-D9=/AT +MN'28=#SPSW"``/!`0"`+#T`@D`\R)$\PBB4(%JQ_SW*``#`_0"(.#2]P,"81 +M$$`B"@S/=H``,$$09@4G1P0()`P0K'\O@.#*(2$0K'\G!E``@`80`&#L`08!`$(&``"909O]:+` +MA"@(!@`A@'^``#`_(H`/"5`!$0G0`0#8X'[@?X@0``#@?X@0``#@>(0H"`8` +M(8!_@``P/R*`$PE0`1,)T`$3"1`"9-C@?N!_'8#@?QV`X'\<@.!X\<#AQ0AQ +MA"@(!@`A@'^``#`_0H``W1D*$`$9"A`"SW```!8TV@V/]:EP!O`>@`3PA!`` +M`/4%3_4`V80H"`;/<(```$$P($(.%/`O*($`3B"#!Q-K%7C'<(``Y+.`@`T, +MWA$'D`D(4@`/(<$`$"+"`.WJX'\H<.!X\<#AQ0AQA"@(!L]P@```03`@30Z` +MY(*0`(8%_ +M@``T04"I_@@@%P#9`>7?#521_]G/<(``L$GU!&_U(Z#QP((,3_4`WLEU$/"$ +M+0@6SW"``#0_,"!`#@\(40#R"V_^J7`%?@'EY0U4D<$$;_7)<.!X\<``V`+P +M`>`="%4!A"@(!L]Q@``X/S`A00[O"5&!O@M/_@/P`-C1P.!^X'B$*`@&SW"` +M``!!,"!!#L]P@`#4.P"`X'\D>.!X`-H#\`'B'PI5`80J"`;//'`U@M/]0AVA"@(!B]U`"60'X``,#\P$``@`"6/ +M'X``\$`&Z`G8'KMS+8'[?^"2__R7`>EP`E@1^``#!!&N``L7(( +M(`?)<+((+_K)<#@0`"`E"!X``-H.\``E@!^``'`_5G@@B`D)D@!AN2"H`>)/ +M>ND*$H&]`T_U\<`('%A"@(!L]T@`"00$`D`!0OW2+]0G!@`/P_]C@?\'%X'CQP/(*3_4(=2AV`-\"\`'G*P\5$80O +M"!;/<(``.#\P($`.B.#,("*!\_4:#>__Z7#?#0&0X*8!V`+P`-@=`T_U\<"V +M"F_U"'&$*`@&+W8`)HT?@``P/P*%A>#,(.*!RB""#P``-330"H+USW"``&A` +M'F8D;D`E`!;&"V`$!MI`)H$20"4`%+H+8`0&VD`F`11`)0`6J@M@!`;:R0)/ +M]>!X\#,(.*!RB""#P``-S1P"J+U +MRB&"`,]P@`!H0+E@!.')<&8+8`0&VH$"3_7QP.'%A"@(!@`A@'^``#`_*H`$ +M(;Z/@`$``'00#080\D*`'0H1`KZY*J`*\"\I00-.(8`'$@U@`Q`E#1#X[4D" +M3_7@>/'`R@E/]5\(D0""#&_Y`=B>#*`9"'?/L]Q@0#$*<2)SW6!`&0J/P[4$(/JT.`;]*EP@B#"!G(++_Y`(P$#9!6"$"MN +M627`%"(-8`3I"``;!?"0X(0.0?N]`4_UX'CQP$H)3_5^ +M#\_^/>C/<(``<`H`B,]V@0!D)@#=2PC?`?8(;_ZI<;H(;_X:`$`6`!': +M"F``"G&TKOX:6+--<(8@_`.,(`.`#_(&]HP@`H`X#$'Y"?",(`.$X-S,(`*# +M=`R!]1T!3_7@>,]R@`!HS""2)7C@?P"RX'C/<(``I+\I!,`%X'CQP)X(3_7/ +M<8``$*=`@8?H`=@Z"B```-DT\`#9"O#/<(``%#KP($``%2),``"D`>'O"12! +M`-T'\`#8$@H@`,EQ`>6@[0#>#R9.$Q,.4!"*((0,C@BO]/'`X<4>#Z_Y"'43#5`0BB"$#"H(K_6I +M<2/PJ]G/<(``1$\@H"&@(J#/<:```"!;@4P1`(80>!IB#=L(\$P1`(9ANQ!X +M&F+@>/4+4X!3(L``R!H8L$$J``+!N,D:&+`1`$_UX'CQP)8/+_4(##N,@:&+#)R<&D`>#!N,D:&+`!VDAQ +M#.K(R<]P@`!$3RNH2'!5!R_UH\#QP-X.#_4(=RAV`-W/ +M<0``#__2"2`$J7`%V<]P@`!<4""H`=G/<(``6%`@H,]P@``,I\"@SW"``!"G +MX*#/<(``9,R@H,]P@`"DOQX*P`7Y!@_UX'CQP.'%"'4%VL]P@`!=4$"HSW"` +M`&BJ(*#/<(``P+_V"<`%@>7*(((/```R`:`.8O7*(4(#S08/]?'`SW*```RG +M8(('Z\]R@``0IV![0(+1P.!^X'CQP#8.#_7/=8``7%``C8SHSW$```__B@D@ +M!`#8@@WO_P#89?!V#:`#`MB1Z`"-SW*``*2_8;@`K0:"`X`@@(`A@@6>">`% +M2'!1\`#=B@D@!*EPSW>``&3,SW:``!0Z`*<)\`#8[@@@!*EQ%29,$P"D`>7S +M#121`-B:N-39R7(%VZX)X`9*),`#SW$```__$@D@!`#8Z@R@`P+8!@WO_P"' +MSW6```PJ`-B:N-#9J7(*)(`/_P#__WH)X`89VU8E`A0`V)JXT=D,VV8)X`:* +M)-\/J7*`(@8+`-B:N-/9"B2`#P``_S]*">`&#]NU!0_UX'@1!\__\#0_USW>``&C,`)<' +MZ,]U@`!=4`"-@^@`V$CP9@R@`P'8D.@`C<]R@`#`OV&X`*T&@@.`(("`(8(% +MB@C@!4AP./``E\]U@`!$3R,('@`!V`#9`@@@!$"%`=@(@C@!DHDP`'""Z`#`=@!V#(/S__5!`_U30?/__'`X<7/<8``L$DF +M@0'8APD?`,]U@`"P"2"5BB(,`$1YC"$(@#3TSW"``.PH`(`'Z`6%/@G@%B:% +MK.@`V0+P`>$?"94`$VD5>,=P@`!43VB`0X7O"X&`4I`(E><*`8`U"94``I5# +ME0.Y1WA$E35Y1WA!*`("1W@/>B.ZQW*``%1/*6+"N`T)#@`!V`7P!PF!``/8 +M300/]>!X\<#*"P_U*'7/<8``I$\@@5,AOH!2\COHI0A0`)T(D0#/=X``!%8) +MATH@0"`0($`#":<#O;5]`"6!'X``A%7:":_V`-@)AU,@`0!$(((`)7I$(`$! +M17F&(/\-!2!^@`#>#_3/<(``U,[N#H`%SW&@```@#!F`#P@```#\&0`$`"6` +M'X``J%7`J!CPTVW5?L]W@`"$5?EF@@FO]@#8I!<`$`\@0`.D'P`0=@]@`*EP +M`":!'X``J%4`J74##_73;=5^`":!'X``A%5.":_V`-CN\?'`X<7/<8``I$\@ +M@5,AOH`X\L]Q@`"4FB"):0G0`,]S@``D-5"+70H?`,]Q@``$5BF!4R$,`$0A +MC0"%?40A#`&E?(8A_PT%(3Z#'/)AN#4(50$S)@!P@`!$T$`G@7(4>0!YV@YO +M]@#8#/#2#F_V`=@(\("Z4*L&\*"ZI@_O]5"K]0(/]?'`%@@@``#8#@@@``'8 +MT<#@?N!X\`/]@/9):8+I@\/41#/<8`` +MG#8`L07PSW&``*QX&K%M`@_UX'C/<```RR@]`F_UBB$-"N!X\<#N"2_U`=D$ +MW,]S@`!L5^"#H=@0N`#>SW*A```&SW4]```)XK\IH,HA8@(HHH:BIZ+)H`"# +MX;CD#H+V*@F`!$X(```1`@_U\<`6""```-@.""```=C1P.!^X'CQP)8)#_5* +M#J_V"'4(=AH-K_VI<87H`!Z`'ZW>[[X/#5$0`-FAV!"X*:#9`0_UX'CQP.'% +MSW"``&Q7`8`!W2,(7@#/,]P``"MWN!^\<#AQ00BON\("`@(SW&` +M`+`)SW*``'`*#/0`BL]RH`"`)!BX@K@2H@^!L[@/H3;PSW&!``PT8($`V,*[ +M;*K/=(``3-6)C`VJCJH0W<]TH`"`'+ND@N/*("(.R`!B]<\@(@//=(``%-R& +MA`B[0(J%>QBZ17O/!X"ND`V,]RH```/!2B +M02F``&&X%:+@?N!X!=G1R16Y"Z'/<:```$8`@9^X`*'@?N!XX'[@>/'`A@_/ +M_\]R`(`1!$+9@N#*(8$/``!"`,HB@0\(@!$,SR%A`Q#RA>#*(H$/"(`1#,HA +M@0\(`$)`!O*#X,HB@0\`@!$4@.``V`?RSW"@```\)J!`H`'8T<#@?N!X!=H5 +MN@N"SW&@``!&T1H8L`"!WK@`H0#8"Z+@?P'8X'CQP.'%'-T>\"""SW```)DA +M2(*.#P_U%O#/NCEZ +M1'A"(`"`X'_*(&(`X'C/<:```"`0H0'8!QD8@!#8`*'@?@+A,'E!:0T*!0`B +M>!!X`_`"V,]QH```(!"A`=@'&1B`$-@`H>!^X'CQP%#:SW.@```@0:,`VE"C +M`B!"`%"C`=H'&YB`0-I`HP0@OL\``@`0L`_!_]'`X'X`V/\:&+#/<(``,`H0 +MD,]RH```(&*X2"!``!!Y$8(0>`@A`0`P>0+8!QH8@#&BX'X"X3!Y06D-"@4` +M(G@0>`/P`MC/<:```"`1H8H@&`@`H0+8!QD8@.!^\<`:#L_T"'4H=C((K_\H +M<`JX)^W/=*```"#(%`(0"KW/.!^X'CQ +MP*H-[_2*(A```-_/=J```!SJI@H@@"^``#@]`!``(,]QH```(,]U@`"@4>"E +M"NC<&8`/`P!`#0+80J$`I03P0Z'I<,]Q@``\/2"!$>G/<`(`HD!DN!*FSW"` +M`$0`SW&``!@'S@X/_0"%12```X4@1P0`I7'8!K@Z#^_]_-G/<($`_"LB@,]P +M@`#H-P3IX*``V0CP`]D2N0`8@`\,````SW```$P<#@_O_9^Y`(47VL]QH``` +M#4&AA2`("`"E`!``(!3HSW>``-@A`(>,Z,]Q@0``=`#8#]KR"B_X`]L!V`"G +M!/#:"@_X`(4*IB$%S_3AQ/P'"X``06!!#/<*#^,`#<%P,0`]E^ +M#2_]0(81$X`@-0A>`,]P``#(&\H-S_U3(-,"SW```,P;N@W/_5,@Q0)BAL]P +MH/Z8``39*G)_]"B3`!$`4`*8`A@L('@(L'8`44@R`!DX)P`8'V`JXP-D8 +MN5X-[_T`VL]P@`#H-R*&`(`K>`S8-O0`AAD(D0!,(0"@P'AD#X']@.#*("$- +M*O`9"!X`9MU.#>_](-A&#>_]BB`(`*EP'O",(`B`%_*0X!'R"/8;"!`!)P@1 +M`CS8$O#`X`ORC"`$@`OT5-@*\(;8"/!&V`;P3-@$\&78`O"$V$"&`-EF"R_U +M"G/1P,'$:R3`$,'$:R2`$,'$GW0$%!0T!!03-`04$C0$%!$T!!00-,''P<;! +MQ004"S0$%`HT!!0)-`04"#0$%`*F(-\"#!`-I$N<&Y86D$(($/`@```#&Y.'L1"W4"`-G/<8`` +M,-YI85EA$0@>`NJX&-C*("$(`_`DV(7ARB"-#P$`B0W5($X`X'^AP.!^X'BA +MV1"Y`8&@N`&AX'[QP"(*[_0!V0#>SW6@```@&X6AV!"X(:!^".`&BB`$"]=V +M``"X"P'F"??/<*$```@3@.D(7H``V`+P(-@[A5$"S_3@>,]PH```,!.`!""` +M#P```"#@?N!X\<#AQ<]Q@`!4S0"!&N@`W9H/[_^@H<]PH0``"$2`)8#.#\__ +M`^BI<`;P@.+,(2&`^_,!V,]Q@`!"6_^`(6*(/\/`*71`<_TX'CQP%8)S_3/<(`` +M6%4`B"AU%PA0`,]V@`!0/+();_X`AHH@_P\`IL]P@`!D50"`'(@0=4P/8?;* +M(&$`B0'/].!X\<#/<0$`Q&C/<@$`W&?/V#*_X"-C/<(``W+]Z#$`% +M`-G/<(``J!@@H-'`X'[@>/'`X@C/]`F"SW&``%A5`*$/>*'!+0A1``'80,#/ +M"J_X0(4*Z`"&((4!V@"`"-LJ#^__2B0``.$`[_2AP.!X\([@RB`L`,OVP.#* +M(&P`Q_:,(`*"`MC*(.D`X'\`J>!X\",P(4$.A.F:<`GPSW&``*`E)H%Z +MZ0HD`"1*(P`@"B:`+Z````QH%@`A!!P$,"''6PP0(`'8A>?,)^*2S"?BG`+T +M`-@*(P"@!12",!_RA"T!+``A@7^``-`C;(D`(8!_@`!P(P.[`"_,$&B`AWMH +MH&R)`>/!NVRI`[MX>FB`9WI(H`R)`>#!N`RI$!87(`44C3!"(H`@=0A$`P(@ +M4@,,(H"CRB8N$-AEZG%J$"`!HA##P$0'^JI<&!Z`,$*(`"@.?(9#U$1SW"``*`E"H`&Z`X. +MK_BJ<)3HXG40'D`C)PX1D"GP2B$`((PG0Y?*(6$@(?#/<```,1&-!L_TA"T! +M+``A@'^``'`C)X#/(/@\<`4#D+VT<#@?L]Q@`"4F@.A`=C/<8``3%<`J0#8`:D"J0/9 +MSW"``"Q61QA8`.!_@"`#">!XH<%`P`(4@3`!%(`P#>D#%((P4"*!``*Y`N'B +MNL(@0@#`($$`#WC@?Z'`X'CQP!D(,P$(<80I`0//<(``:%8R($`.B.CK +M*6@O>D6ZSW6``-0[57U"A<2Y#R9.$$M^!_*Z#,`9`H7&>`*E706/].!X\<"A +MP0]X)@WO_XMQ,@NO^2#`H<#1P.!^\<"J#X`%,F@V>0`A@`^```!YT<#@?N!X +MSW"``)PVX'\`F.!XSW&``*QX"PA1`!F9`O`8F>!^X'CQP)H,C_3/<(``E)J@ +MB((+(`"I<"3H`-[/<*```!#)H,]PH```'!`8@`\@````"PW0$,EP!O`N"``` +M^PA1@`'8@.#D"*$__`(T!A__`(T!A;$#K_0*B/'`X<7/=8``E)JF#>__`(T` +MC80H`0//<(``:U:-`Z_T,B!`#O'`X<7/=8``E)J"#>__`(T!A74#K_0)B/'` +MX<7/=8``E)IJ#>__`(T!A5T#K_0+B/'`X<7/=8``E)I2#>__`(T!A44#K_0$ +M@/'`X<4^#>__"'6$+0$3`"&!?X``+%8H<#X1@0!$*3X''0.O]"=PX'C/<(`` +ME)K@?P*`X'CQP((*C_0:<,]U@`"4F@(-[_\`C0&%`=XJB`HB@"^@```@@>'` +M?MM^2@OO_@?8/AJ8HP(/[_]*(0`@SW>D``!`"B.`+X$`""S/=J``@#`E"%$` +M(@OO_@?8&8>`N!FG`1.!()(.[_@`&T(@"H:$N!'P`@OO_@78&8>@N!FG`A.! +M('8.[_@`&T(@"H:&(/\+"J9V"D_V3!J8KP``554!V$L:&*!N#.__`(U!A80H +M`2//<8``9%8P(4`."@W@`"2"&@^O^`IP`84&@/^XZ`K!_2O9$KD`&4`$!!E` +M!`/8`J']`8_TX'CQP)(*````V0OPA"D!`P#:`>$`(8!_@`!,5ERH7:CO"12! +MT<#@?N!X!0```/'`@@G@%>'%J@C``(8+(``'V-X.+_@(==8*#_T^#L_\`=FA +MVA"Z**($V\]PH0``!F:@'!B`#ST```DHH`#8"*+/<*```!TBH"8*[_ZI<*T! +MC_3@>/'`;@MO^`/8`-D7"-``SW"``&@?`(B`X,H@00`"\@'8T<#@?AD(,P$` +MV80H`0//<(``:%8R($`."0A0`"AP`_`!V.!^SW&``)2:((F,(<./`-@,\H0I +M`0//<8``:%8R(4$.@>'*(&$`X'[@>/'`X<4(<;(*X```V%8-S_^!X`'8PB`! +M`+X.H``!$@$V6@WO_PAU$@LO_26-#0&/]/'`X<4(<8(*X``!V"8-S_^!X`'8 +MPB`!`(X.H``!$@$V$@WO_PAU$0A1`"(-S_\EC6>Y!O`6#<__)8UCN/'`SW&``+`8`($%Z`#8`*$1\,]R@`"L>#J:`=OPX<(CR@`!V%R: +M=7A">3%Y!>@+"00`+@E/]F(+S__/HL]P@`"L>#N8/Z+*#:_\&IC1 +MP.!^X'CQP/8/3_1:"\__`-C/=:```"@&I039SW"@`(`<.Z!:#*_T!MC/<*`` +M`#`#@&\(GP8`WHZ^U@@O^`>X)7@0N(4@D@`!I18,K_0!V*((+_G)<("X`:4$'8`?,P#'``0=@!\``,)R +M!!V`'P``PIT$'8`?``"";00=@!\```*C_]DKV!*X(*`AH#H)0`"Y!T_TSW"` +M`)2:`-DCH,]P@`!,5R"H(Z@!B$0H/@<`(8!_@``05YD$+_8__,"!`#A^KT<#@?O'`F@Y/](0H`0,O=0`ECA^``$Q67(X* +M(8`O@``L5@AW"0I1`!$/$A'/<```!`G&#J_TZ7'/<(``E)H]CAIP7H[@J!S8 +M6G`C"8``#'K/__"'6$+0$3 +M@>``(8%_@`!L5@K8RB`B!'$&;_0!L?'`X<7/<:``@!RZ@<8.C_YF"J_T!MA5 +M!F_TJ7#QP-8-3_0:"$`%`-K/<*```!!)H"O9$KE`H4&A`]@"H<]PH```(-N` +M/@M``,]U@`"4FB(([_\`C1H([_\`C0&%SW>``&S-"8@`I\]P@`!PS<"@)@KO +M_Z"-@>`!V__`=V!X!H*[__")4$3"'$."Z``J7`!&A@P`-G/<*```!`IH%H/S_\N +M"F__`MB9!4_T\<`B#4_T"'9(=<]P@`!,5R.H`-K/<*```!!)H*X*H``!V`'8 +M`MER#J``R7*O>`.X@;C/<:8```@`H;H.0`)1!4_TX'CQP-X,3_3/=8``)*0. +MA0'@#J4"#:_X#-@`W@WP+RI!`$XB@`!`A`0#R#2_V*Z4%?BN%].F`YI0, +M(A7*(&(`"05/],]Q@``DI#"1`-@-"5\#X+G*(&(`X'[@>/'`A"@%"@`A@7^` +M`*2;?I&BP0':1*$C"QX#8<"$*`@&SW&``#1!,B%`#D#`BW`(V3()(`-XVJ+` +MT<#@?O'`0@Q/]#`2`S;/<8``0*?+$@*VSW6!`!0L='GQB=")$PC>`6%O,A*, +M`,*M8ZTEE0CP,1*,`&%NF!$!`6*MXZTDM0#9-PSE$".ESW&``&2Y%0C>`1"! +M#!V`'T$`@P`!X!"A"?`1@0P=@!\A`((``>`1H1(.```#A1#P7@I@`!"*"'($ +M;0(-H!K+$@&V`-B=N`P=@!\`(```$01/],]Q@`#P.2"!,'`!V,(@`0#@?Q-X +MSW"``/`Y`("`X,H@8@#@?Q-XX'CQP'X+3_0(=N8/[_\H=XP@_X\!W0/TH:& +M(J`HAB.@*88FH"^012'!`"^P!MAV"B_XJ7$`V`&G@0-/]/'`%@MO]"ARHH"@ +MH8#ERB"!#P```4,\`X'T6@_O_ZEPC"#_CP3T`M@!HA/P`-[!HL]W@`#P.4&' +M!M@`V28(;_@/(8$`!M@*#B_XJ7'`IS$#3_3@>/'`X<4(<@\(40`F#X_X"'4" +M\`#=SW.``,PJ$(L)#0$00PE1`+"K@.7,(F&`!_0$V<]PH`"`'3B@"O"!Y`!3)<"8+;_RI<1_H +MR7"I<7(+;_SI<@'87@_O_PAQ?@X/]2(.#_56#"_U`=@&IDX,+_4"V`>F1H;/ +M<8``C"I=H7X([_@>H2H+;_RI<('@RB!A`,HA(0#*(D$`@`MA_,HC`0`U`D_T +MX'CQP&H)K_X!V$8)K_X`V"8)K_X`V-'`X'[/`$2'#/,]P@`"(O_4$P`3@>,]R@`!`!P&"1B"!!<]PH`"`'RN@X'\AHL]Q@`", +M*ER!@>+,("&`!O0`V(T%+_D/'`>@ZO_.'%SW"@```=&!B`#P\`__\!V<]PH``` +M"#F@SW```)@>BB&_"`#=4@IO_:ERH=@0N*V@\0!/].!^X'B-`0``X'[@>.!^ +MX'CQP,]Q8PC0>P4H?@`*(,`.8;A/(,('SW&@```P4J'1P.!^X'CQP.'%HL'/ +M<*```#"T@'"`SW(``"3TBW&!P`4KO@``&,`.`!E`#@#!`<`KN16X)7@=9<]P +M@`#XOR"``B5`$#!URB!.`W4`;_2BP.!X\<#R#P_T"'8:<;(((``)$@TV@N`` +MW\HAP0,2\IX(``!FV1T(T`#/<*$`@`$3@!!X!2B`#P``"3U!*4%RSW"@`(`P +M`(`PN#A@/."`(`\*'66Q=@'8PB`.`(#@"-@'\HX*+_8*<(#@!-C`>.T'#_3@ +M>,]QH```,!P9@`\``@``"(&9N`BAX'[@>/'`<@\O]`#9SW"@```PQ(#/=8$` +M_"NI<#X-[_4,V@'8"0X>%`&E`_``I;4'#_3@>,]QH0"``1&!)KC!N`\(D0`W +M@88A_XS*(.(`X'[QP"8/#_2N#R__"'7&#P__P@P/]@AVBB$0`,]PH```,"&@ +M`-CB"2_VB[AR#2`&525`%MX)``!=!R_TR7``V<]PH```,#*@@!B`#S(```#- +M`P_VX'C/!R>BSW"@```<%!B`#P`(``#@?N!XSW"@```P`X#` +MN('@`=C@?\!XX'CQP.X/[_\`V0;HSW"``(2D`("$Z"AP`_`!V-'`X'[@>/'` +MSW"!`/PK`8"-Z,]P```('"X(3_T/"-X'#'#QN.0-P@+1P.!^X'C/<:```#`# +M@;2X`Z'@?N!X\<"J#\__#>C/<*``@!P:@.8.;_Y&(,`!V@_/_P3PV@YO_@38 +MSW"@`(`P`!B`#S(```#1P.!^X'CQP,8*#_9>"F_T!MA6"F_T!MA2"F_T!MC1 +MP.!^X'[@>/'`SW"@```P!X`["%\&4@L/]B8,(`8*V"'(SW&``/R_`>`A&A@P +M`-@1&A@PSW"@```@&X`@@2)XSW&``/B_`*$%\!#(`>`0&A@PT<#@?N!XSW&` +M`+S2"6'/!VBX'Z`X`'8P'@/'`%@T/ +M],]P@0#\*P"``-T3Z,]WH```,`2'<-X&\'X);_0&V`'E!(?$>"2XC"6"E&D`(``_V.!X\<#2#`_T*':2#"_]`-D(=P+PIGXD[B\I@0-. +M(8`'`-T/)0T0!@I@`JEP`-D%\*9[8*(!X2]YWPE3@40O/AL`(8)_@`!@3C9Z +M28H+>L]R@`!0'C5Z8(+M\Z5[[/'=!`_T\O?7X-(`6I<`HA`(`0)DX3SW[O]?/NL00/]`#:!/`!XD]Z&PI3`40I +M/@L`(8-_@`!@3E9[:8OI"PZ``O#_VN!_2'``V0#:#R("``+P`>$7"54!SW"` +M`%`>\"!``$MX]_,O>`+P_]C@?N!X"'$`V`_P+RM!`$XC@@=/>A`A@0#///IX'[@>/'`.0I0`%4*D``7"M``SW````4K]@MO]$AQT<#@ +M?D0H/@O/<(``4-@`(8%_@`!@3N(,(`,LVO/Q@.'*(($/```#*\`#0?1$*#X+ +M*'``(8)_@`!@3DAQ[O&`X +M#"`#+-IR#L__S?'@>/'`-@L/]`AV"B5`D,H@@0\```$K<`MA],HA@0,O*$$# +M3B"/!Q`ES1.O?2(,(`,(VBGP0[`G\"\H +M00-.((\'R7"&#N__Z7%*<2Q_`"%!=!9Y%B"`(V*10)`0)#V__"'8(=;H*8``* +M<`IPZ@\@`*EQV@I@`,EP"G#)<:8+8``!$@(VZ.5:`+?"?`# +MWP?P!=\%\(#F`=_*)R(1Y@Y/_\EQN'#/<(``;%<*$(0`Z7"I`(JP#8`*,!HP7P`-@`HP&C +M"*ONR3\('@#(BT`J``(0<0'8P'@0O@0@C`\```#_Q7P`@\&#KWT"((,#%KM" +M>3!^SW#%[H-'`=D%)0(3^@B@!<5[-0$/].!X\<#"""_T%]D/?H0N"!8`(8U_ +M@``P/P"EZ@P@!4`E`!(BA0D)E0*'Z<]P```&--8(3_15)4`6S@P@!0S9J@RO +M_LEP`=CI`"_T`:7@>-`:F+\````@108/]N!^X'CQP.'%`-WAQ8MQ6@RO_@C8 +M$^@*#(_^`,&`X,H@0@#T#F+URB%"`\]P@``4/:"@`,!V""```=FE`"_TH<#Q +MP.'%H<'J#>`%*'4(<<]P@`!\5_0@0`"`Y0`/'`H@_/\Z/!&G`."J_]*'>`X(;R5@MO^`IP+R4'((0H +M"";/<8``.#\R(50.S@QO_ZIP"'7:"6__`H`JC=IP"163$`'=`-@/($``+R(' +M((MP.G#B#*_U"-DJ<,IQ[@HO]TIR`-Y"QJ,,$"%##%`AH0P1(AKO@L%*"Z_^ +M!=@&Z`IP[@UO]"/`) +MW1#>!/"`Y\HEXA`J<$IQJ7+)'%%X+;__I<`AU:@AO_P*`RHTZ<`#8#R"` +M`R\@!R"+=:EP=@NO]0C9J7`J<8()+_<*ER`-L6"B_W"B2`!-4% +M[_.BP/'`#WA6#>__`-F&(/\-T<#@?N!X\<`/>$(-[_\`V<"XT<#@?O'`5@WO +M\PAQ@B0",P]XA"@(!L]V@``P/R]UOV9T%P(6&G"`XLH@@@\``"$T>`T"](MP +M;@D@!1?9E\!F"2`%#-G898X*K_6*(0@&0"@!(39Y`"&`#X``S$EV"J_U<-F* +M(/\/`*>`V0`E@!^``#1!(*A)!>_S@"0",^'%X<8`W,]R@`!`IQ0B`P"`LXBS +MF!L$`QUB(!T"$P]^SW&``%3%UGD@D2@=`A-0&T0``=E@'4(0>.(5>H"BJ!L$ +M`\'&X'_!Q1)YSW*``-0[`((D>`"B`8(D>.!_`:+@>/'`@@S/\PAWSW6A```" +M`X7/=J```"C>N`.E`X7/=```PAJ>N`.E@>//<```0A%Z]`0>@!\$`,<`!!Z` +M'P@`@C@$'H`?,`#"&@0>@!^3`$(9`:8$'H`?)P""$00>@!\A`,(1^&<4>,=P +M@``LI8"(Y.2*]@0>@!\!`$)>!!Z`'P$`@HX*\`0>@!\-`$)>!!Z`'PT`@HZ, +M)$*4DO8$'H`?#P""%@0>@!\/`,(6!!Z`'S\`PA@$'H`?"P`"&1+P!!Z`'U4` +M@A8$'H`?50#"%@0>@!\D`,(8!!Z`'P@``AD$'H`?%0#"'P0>@!\*`,)L!!Z` +M'PH``IT`B(P@@H*+]@0>@!\4`()L!!Z`'Q0`PIQ`\`0>@!\>`()L!!Z`'QX` +MPIPX\`0>@!\$`,8`@:8$'H`?LP!"&0&F!!Z`'RL`@A$$'H`?`P#"$00>@!^W +M`$(@!!Z`'P0`AA$$'H`?50""%@0>@!]5`,(6!!Z`'P$`@C@$'H`?#P"";`0> +M@!\/`,)L!!Z`'P\`PIP$'H`?#P`"G00>@!\0`,<4$+F!N8BYC+DAI@0>@!\' +M`$<1$+H%(H(/``!&$4&F$0M1``0>@!\@`,81!O`$'H`?(`#'$00>@!\!`,85 +M*@G@!0K8!!Z`'X``1A$$'H`?0`!"$@0>@!^``$<1!!Z`'P(`QA4$'H`?$``& +M&((-(`#I<`0>@!\0``<8!!Z`'Q``QA22#2``Z7`$'H`?`@#'%0.%OK@#I<$" +MS_/@?N!XSW&@```H!!F`#P,`1@F&Z`09@`\"`$<)X'[@>(#@\<``V!CT"O`: +M8%1ZSW.``-BD2F,Q"8```>#O")2##/`:8%1ZSW.``"RE2F,9"8```>#O"!2, +MSW```(89/@H/]`#8T<#@?CEA-'F%Z,]P@`#8I`3PSW"``"REX'\X8*'!\<`( +M<1$(40#F"R```-@+V0_P#PF1`-8+(``!V`G9!_`9"=$`R@L@``+8`]G/<(`` +M-,T@H!'PB^D"V<]PH```*#&@J@L@``'8`-GQ\1W8R@DO]`FXT<#@?Z'`\<"J +M"```/@R/_^8)S_4."```T<#@?N!X\<#/<(``;%<*B!$(D0#/<(``C!J8V0;P +MSW"``-08DMEV",_UJ@C/]='`X'[QP.'%SW"@```P!8!2(```40@?`(X(S_6" +M#@__,@I/^.ZX`=C"(`$`!+A/(,$`SW"``/BH`HC/=:```"B"X`'8P'@'N"5X +M$+B%()(``:5N#>_S`=A&#@__]@E/^("X`:5-`<_S\<#AQ<]UH```,`.%FK@# +MI3H/H`4%V`.%L[BZN`.E+@^@!638)0'/\_'`J@CO\PARSW"``*`<\"".`,]P +M@`"<'$U@JNG/=X``]!P`AX#@RB""#P``QBC`""+TRB&"``'8`*<`V17P]"9" +M$,]P@`#,\@:Z12+,`,]SH```*(&C18,T>$"P@:-%@P'A0+`P>=L)0H,<\`#8 +M$_#T)@(0SW&``,SR]"$!``:Z@;H0N45YSW*@```H(:(!X!!XX0A"@P#9SW"` +M`/0<(*!Q`,_S$+G/$!SR%A`L4A@@\``,("(:+@?N!X +MSW&@```H!!F`#R0`!P$0>!"XA2"$`0&AX'[@>`K@$'@%N45Y,'D&N(&X$+D% +M><]PH```*"&@X'X0N$\@0@"'NHFZSW&@```H0:&%((L``:'@?N!XSW&@```H +MB^@$&8`/!`#&``09@`\@`,<`"?`$&8`/!`#'``09@`\@`,8`X'[/<:```"@$ +M&8`/`P`'`1!Z$+J%(H0!0:$$&8`/!@!'!!MX$'@0N(4@D0$!H>!^X'B`(,(. +M$'@&N(&X$+D%><]PH```*"&@X'[/<:```"BCZ`09@`\0`$)I!!F`#Q(`PFH$ +M&8`/$`""F009@`\2``*;!!F`#Q```FD$&8`/$@"":@09@`\0`$*9!!F`#Q(` +MPIHA\`09@`\:`$)I!!F`#QH`PFH$&8`/&@""F009@`\:``*;!!F`#QH``FD$ +M&8`/&@"":@09@`\:`$*9!!F`#QH`PIK@?N!^X'CQP(X.K_-98@HC`(!(<#1Y +M"/0`(8T/@`#8I%#9!-H-\``AC0^``"RE0(V`V8PB`H`"VLHBZ@"!C<]VH``` +M*!"\!22,'P```A.!IA"Y@;F*N8RY(:8BC1"Y!2&!#P``@A0AIB2-$+D%(8$/ +M```")B&FF@GO_R.-A0:O\ZEP`[G/8#@0"D`!,4@@@\```8.Q2"! +M#P``!PX!HN!^SW&@```H!!F`#P<`!PX0Z#$(4`!!")$``MK/<(``@`H$&8`/ +M!``&#N!_1:``VL]P@`"`"@09@`\```8.X']%H`':SW"``(`*!!F`#P,`!@[@ +M?T6@X'[@>,]QH```*`09@`\&``<$$'@0N(4@D`$!H>!^X'@#N#5XSW&``)S3 +M`&&`N,]QH```*`09@`\&``<$$'@0N(4@D`$!H>!^SW&@```H!!F`#S``!P00 +M>!"XA2"0`0&AX'[@>`6YSW.@```H17DP>8#@0"D`!,\@80#/(.$!SR`A`L\@ +M8@#/(&("`:/@?N!X\<#AQ0AU0-@8V2H-K_4SVH'@RB""#P``BAG`>30-XO/* +M(D(#606/\T#8`=D%!:_U,]K@>/'`S@R/\PAU+R`'(`]X1"@^"P`ACW^``$BH +M,@@@`"AVSW"``/BHH:C=>,*X"*_I<`L(T2`R#8_U!?#)<8X-K_6I/'`X<7/=8``^*A!C40J/@N,(L./`"&`?X``2*@4\L]QH```(#N!(Z`3"M`` +M-@X/]L]P@``,S]X/``2Z#._W$=C_V`&MO02/\_'`0@R/\PAVSW6``/BH08W/ +M<(``E)I@B(PBPX_,(^*`RB"!#P``EAIP#.'SRB&!`P&-1"@^"P`ACW^``$BH +M`(>.[D,($0()CP*M8@Y@!`+8`8<`IT(-+_;I@4CX#@L`TB +M]LH@P@,`AP&G"-@`IPJ/`JTN#F`$`M@I!(_SX'C1!:_U`=C@>,D%K_4"V.!X +M\<"N"X_SSW:``/BH`8Y$*#X+`"&-?X``2*@`A2D(7@`4C9+H`(X1"%$`(@@/ +M_X'@`=@#\@F-(HX-"$```J[6#6`$`=C5`X_S\58FC1(G=5$($"``A6,(D``4C8#@Y`PB]LH@0@,`V0WP*G`,>0`F0!Y4@`L* +M$0)5@%2@`>$O>>T)$H$`A5$@`,,!I038`*4!V`*O`=C"(`$``>`-\`&%`*44 +MC0;H&@PO]JEP!/`)C0*O`=@B#4`$#0./\^!X\<"R"H_SSW"``/BH(8C/=H`` +M^*=$*3X+5B:-$HPAPX\G=]I@`()D>2T(D`!-"-``018`%D4(4`#LZ12-BNC/<(`` +M*,_*#0`$_@HO]JEPI0*/\Q2-9'@4K02*8H(%*/X`!H4G<`:E!(IC@@4K/@`' +MA2=P!Z4%\!2-!'MTK0#8`*+=\:'!\<#^":_S"'.LP2AT2'4(V$3`#!R`/P"` +M``#/<($`""Q`B%#!1+K"N@ZZ!"2.'P$``,!+?I#!%O+7=@```$#,)H*?```` +M@,PF@I\!`````_0!@`+P`H"NO*^\L+P%?("A$,1!+($3PKD#PD`I``8%>D/" +M+PN>`03`!"2.'P```!A%(,``*[X$)(\?``,``#B_Y7X`WP\GCQ-AOPJ_Y7A$ +MP"$+'@'/<*```"`0@)NZ`KANN$@@``#)N$5X0\`&\`D+'@*=ND/"0<2+=LEP +M:'*&"Z_U`=M%Q/'`#@F/\Z'!P@\O +M_8MP"B4`D+`#`@``P>"YWO)$(@!3B.#/=8``L`FM]`0BON_`P,#`"/3/<*`` +M`"0`@.*XH_(!V!FESW"@`(`@$H"%Z!25!@LO^,.XSW`$!`0$"R(`X![R!""` +MC/_9"_(O*`$`3B"!!R.YSW"``)0]\"!!`,]U@`"P"9P=0!"$*0@&SW"``#1! +M,B!`#L`=`A`2\,]U@`"P"0.%Y@Z@`B2%SW&``'`*`*DJ"*_\`-F<'0`0!"*^ +M[P$!`0$$](#8P!T"$,`5@!!`*`$&B0C?`4UP=PB>`TH)P`'/<(``L`D/@`0@ +MOH^`&@```-@"]`'8SW&``+!))H$'"=X"`-B*(=8`SW*@```H;QI8@`/;SW&@ +M```,9Z':"H_U!-@!&AB`!"*^[P$!`0'/=8``L`DT\L]PH```(!J`KNCF"8_[ +M%864N!6E*/!%(0$'SW"@`(`D,J#/\0^%L[BUN`^E37#NN,\A(@+/(6("SR&B +M`D4A`0;/<*``@"0RH,+Q`-@9I<]Q@`!DMPZ!`>`.H1#9SW"@```D(:"."F`% +M`-@#A1G:*)4PN!"Y!7D`R!!Q`=C`>`*X@;C/<:```"<`H0.%*)4PN!"Y)7C_ +M&ABP2'7O\.*YE_+/<*```"@&$`*&,Q`!AN.ZRB5B%!WT#'#[N,HEHA09],]R +MH```#'2"$X(="P``SW"``+!)!H`-"-X"`]@'H@;P%=T'\`D)W@<`W0/P%]V0 +M[<]R@`"P"2&R!"&^CP,````!V,!X+X(0N"5X#Z*Y#1$0SW>``+`)#X?/=H`` +MY+<*((`OH```*!<('@0\AY38J@_@`>ERA@[O]P#8=@P`!<`7@1`A"=\!@8>< +M%P`04B0,$$"72B0``'27O@A@%5,D!1#/<*```!`Y@`?I"X8!X`NF"88X8`FF +MDA``IBJ&.&`*I@*&SW&``/BH`>`"IB&)G!<`$$0I/@O/<8``7*@R(4$.$2$` +M@&`*0@+F#0`"!!B8KP``_W\;V`<8&*`/A_"XR`Z"&6#PZ@L`!5SPBB8($&$) +M7@+/=8``=%4`A>201+_"":``4R?`$`"%I@A@`%,GP1#/<8``L`D(=0L(D085 +M@8"X%:$;@<]RH```*`'@&Z&"$@&&P[EM"0$`!!J8@X(2`8;#N6$)```#&IB# +M+/!-"=X`"-C/=J```"@$'AB0,@H``0AU00@0!<]R@`"P"0."*)(PN!"Y!7D` +MR!!Q`=C`>`*X@;@`'@"0`X(HDC"X$+DE>/\:&+`9W0;P%]BF#:_SC+@!V&H. +M(`(`V9GE2`3!_ZEPJ05O\Z'`X'CQP#X-3_,(=0#?SW:``,PE,(#@I@0AD(\! +M`0$!RB#!`S'R!"&!CP0$!`05\B\I00!.(8`'([C/<8``E#T5(0```(C/<8`` +M-$&$*`@&,B%!#@SP!85F"Z`")H4(<0.X%7C/0A!$%8$0[+8ZKONN3"``H,H@(0#0#T+U%05/\^!X\<"6#$_S!"*^[P$! +M`0&:<+WRSW$$!`0$"R)`X!?R!"&!C/_8"_(O*4$`3B&`!R.XSW&``)0]\"$` +M`,]Q@``T080H"`8R(4`.!_`4%``@V@J@`A@4`2#/=H``<`K/=8``L`D`KA6% +M!""^CQ!P``!4#D'["B6`+P`@``!$%``@SW&``.`A`*%!*`$#02@3!0".4R'2 +M`$`H$`$%()$D#0C>`1*%E;@2I6OPT@_O_"IPSP@5!,]Q@``L"/`A#P`*)(`/ +M@`",!R".R[\8N8*YSW*@```H,AI8@`(CP2,`W(R\F6'+N4`J`R/7<0````B0 +MNTGW!2/#!%,:V(`!V`NN,_#E>U,:V(!'#D5P``#`#R)\%B0"`"""(0PU&`&" +M`-L/(P,#8;M.)`(8`2F.`)AY97F8>`5^$/!")`P8`-X/)@X38;Z8>25^BB'_ +M#P3PBB'_#RAV`=C//\:&+!!`V_S`-CQP/(*3_,(=E4@400`$0`@H\%!P`04`#%!*!,#!A0`,00B +MON\!`0$!0B@0`77RH<]P``#__Q!R`-_*)T(0H1(!MP\)W@(0<@#=RB=!$Q[PH,WCN,PG(I`2\D8A +MP0"A&ERP,,@!V@`@@0^``*"G0*D0V*`:'+`:W7#P`=W/<8``9+<,@0#?`>`, +MH9WOE@J``J'-1B"``J$:'+`5\,]QH```(!&!#0@4!A&!U."%]P#=J7<)\`#? +M\:$7V!&A`M@'&1B``=T!EH\($0<$$1(@"!$1()?M`X8HEC"X$+D%>0#($'$! +MV,!X`KB!N,]QH```)P"A`X8HEC"X$+DE>/\:&+`F[\]P@0"X*P20"G%*`JNX$-FA&ARP,,B@&ERP`""!#X``H*#:``>$VH*'-#P@?`P#=!_`(W8?P&MVLN*$:'+"`YX'RSW.``.0A +MX!,!`$0I/@=%A@`C0`Y`H$R6`>%"L,]R@`!P"H"*SW:``!C%B*@)&,($0"@" +M(46P#!B`!,]R@0"X*T22$!A`!(QF2K":J.`;0`!`*@$#G;D%(0$$SW>@```P +M-Q]8D`*Z,"*!#Z``M"[/D07PY[[* +M)B$00,8!%($P4R:0$<:Y.*@9&`($R\EZ<1"(-@\O_PIRSW*``.2VOQ(!!@`A +MP`2_&A@`P!(`!@)PP!H8`.[)-P@>`L]PH```(,]QH`"`'`09@`_%[H97&X`! +MH3<7`)8!H009@`0$&4`$4R;`%`&A-+[!H:EP:0!O\Z/`X'CQP!X(3_,(=C"& +MH<$$(;Z/`0$!`0#84/+0R00@@`\`"`@`AP@1`J'-4R!^@`7R8@IO^XMP"/`P +MR`':`""!#X``H*=`J1#8H!H`6H3#(SW&``$"GA!(#`15Y'H$: +MW7A@'J$0B@'9.@XO_RARJ7``V1OPSW&``&2W#($!X`RA$_#/6XSW&``.2V@?)` +MV*`:'+!5$0`&SW*``&2X`>!5&1@`<1$`!A5Z%H+/<8``0*V"+$PM?`<]S@`"`YF.+"0O>``' +M%OMG`[QU>Y5\FV,[8\]T@`!\V6MD#PO>`48FSA-AN25^$@W@&L:B&@@@!,EP +MSW&``+`)$($-"%X"!-C#&0(`5@AO^X'``-P'\*P1```!W`'@K!D``)CL`X4H +ME3"X$+D%>0#($'$!V,!X`KB!N,]QH```)P"A`X4HE3"X$+DE>/\:&+``V`4& +M+_.BP.!_"-CAQ<]PI@``!*2`SW*``+`)02U`$:EPH04/\^!X(8#/`&H0#9'_`]@L]RH```(&3A,*(!V0<:6(`0V2"B(8"$Z6QQ +M^PD>@"&`P;G+"="`(8#@N0#9RB'A!0&`X;C*(:$$X'\H<.!X\<#AQ<]U@`"P +M"16%!""^CP!P```D\B\I`0#/<(``$*GT($``/(6"N)8-H`%:A1CH%84-")X' +MW@B/_P?P`-G/<(``2%4@J"H-0!G/<(``L$D@@*`5`!&6#2_^-'C=!`_S\`1*&E;@2 +MI@^&E[@/IA6&!""^CQ!P```+])RX!@XO^Q6F0"4!$CJF`-@!L;06`!&@%@$1 +M.&!BN!"X@+C/<:```"<`H06%+)4PN!"Y)7C_&ABP*00O\P#8X'CQP+(+#_,( +M=<]PH```(!&`+R0(`!"%!""^CP$!`0%6\B6%SW:``+`)SW>``#`*&0D>`/(- +MS_\EA:"Y):4$AY&XSAH8L!"7%0@#`0R5,+D0N`5Y`,AM"0$`,(4$(8&/!`0$ +M!!3R+RE!`$XA@``+H<]Q@``P"AJ1,)$X8&*X$+B`N,]QH```)P"A!84LE3"X +M$+DE>/\:&+`I`R_S`-C@>/'`J@H/\TUPSW"@`(`@$H"(Z,]P@`"P"120Y@RO +M]\.XSW$$!`0$"R)`X"+R!"&!C/_8#/(O*4$`3B&`!R.XSW&``)0]\"$``(0H +M"`;/<8``-$'/=H``L`DR(4(.SW&``'`*5@RO_4"I"'4,\,]V@`"P"0.&O@A@ +M`B2&P!X"$`#=P!:`$!4(WP'Z"2_\`-DJ#*_]G!X`$`AU!"*^[P$!`0$']`&& +M"P@?`(#8P!X"$,`6@!!`*`$&/0C>`0^&3R#"!4^FL[A2AK6XE;I2IL]R@`#( +MP$""E[B#Z@^F37#NN,\A(@+/(6("SR&B`D4A`08C\`.X%7C/A@78%;C/<:#^(`4DH,]W@`"P +M"<`7@!`1"-\!F@@O_`#9R@J/_0AU#X<+")X$`-VQ\+H7`!'%%X$0"B.`+X`` +M&*D"($X``!,!($Z'!.!980(A$0#/<($`9"9:<`8.K_1GV<]P@``$.A#9^@VO +M]!IQSW"``(C,[@VO]`C9SW"``%@YX@VO])39^@J`&``3`2!*<#NP.!A$!`HB +M@"^@```,3!(!(,]P@```JB"@J@H@`2IP"'(0&@`@'8?/<:```"!DX!"A`=@' +M&1B``!D`!/#9!")`4(P@`H@R\D8`"0#0X(#`,H/ +M#_L(=8D'[_*I<.!X\<``V.'`$-G/<*```"0AH.(-K_R+<(7H>@J@``#`H<#1 +MP.!^\<`2#\_R"';/<(``L$FD@,]XSW&``&0_A"@(!HH.[_LP(4\.&G#)<,8( +M(`'I<H*+_4(=8()K_2I +M<+H((`&I<`8+K_RI<"D'S_+QP.'%"'6%X,H@A@\``%D`SR`F`]P.)O/*(48# +MN@@@`:EP4@RO_*EP_0;/\O'`SW"``#!5[@NO]!C9SW"``(0MX@NO]!C9T<#@ +M?N!X\!@'8$0A1 +M`,]Q@`#DMP"!`>``H1$-T!2R#*_\BW`*(0"``_2I<48,H``H<$MIH.(.`0T` +M,B:"<(``(-!`)P!R5'@`>`'8"'&!\,]P@``P"B"`"($!X`BA`-@!V7?PSW*` +M`#`*((('@0'@!Z$!@D!X`-AL\-8/P`#/<:```"0*@0/H`M@!H<]P@``P"B"` +M$($!X-X+H``0H>SQSW"``#`*((`,@0'@#*'.\<]Q@``P"D"!`H(!X`*B`H%` +M>$7PSW&``.2W`X$!X`.ASW&``#`*]/'/<(``,`H@@`.!`>`#H27PF@^@`P'8 +MN/'/<(``,`H@@`6!`>`%H0CPSW"``#`*((`$@0'@!*&."```'?#/<(``,`H@ +M@!&!`>`1H93QSW&``.2W#($!X`RA`-D!V`_PSW&``&2W#H$!X`ZAFO%!V!8- +M+_.,N`'8"'$(Z)(-H``H<'8.P``%\`?I@@H/]<]PH```"`*`SW"``+`)#X`? +M"-X$SW"```0ZPZ#/<(``B,S!H,]P@`#\-,*P*@]``/4$[_*AP/'`!=C/<:#^ +M/`45N"2@SW"``+`)/8!DX<(*X`0(V(H-[_T#V`/P>@^/_,]PH```)`J`!>AL +M$@P@],]P@`"P"0&`$0@?``0BON\!`0$!!/0`V`/P`=A!*@%1P[G/ +M``+`)LJ>OIZ"WLZ?/ +M<8``<`JEJ0HA@"^``+!)&!$`(*:IZ[@!V,(@`0`"N!:GM:?/=H``,`J^MHHB +M`B``&8($IZ9L$``@O:=">!ZG7Z>XML]P@`!D(KB@SW"!`'`LH*"[IZ2II*8$ +MVL]P@`#@(4"@!XG.&EBSH+@'J=X(K_RBJ8HA_P_/<*```$4\H#B@BB"8#5@; +M`"`,&(`D"!B`),]QH```*``90(.*(!@(`!@`($@0`"`="%X`,Q$`A@0@OH\` +MP```!O+_R03H`!H8,/\:6+-(&$`C+'#/<8``Y+8W")X##X>+N`^G52'`!0"F +MSW```!2L`:;/<```A*X"I@K8$+8$$0`A!MD?ML]PH`"`'#N@$?!`(0`#`*;/ +M<```.*P!IL]P``"HK@*F$-@0M@81`"$?ML]QH```#!.!BB.:``.F#8$1WD(@ +M``A((`(`SW"!`/PK(8#/<```@@Z`X@```@!:?/<8``I+X"@4HB`"`` +M$!,``X$`$!``>@I@`DIPP!<,$$IR`B,!HP,@@R!`P5N'@GB">D&E(J5CI4(. +M+_X$I>H-+_X+M8'@`=C`>`JUSW"E```,XH`*((`O@`!P"E,GPA`!&((@4R=` +M$(/@RB!A!<\@(0-@"2'SRB'!`T$O0!/"N`@8`B`OAN:E`-^+OQ\)W@($N$\@ +M00`*E25X"K4'V`CP%2$,(``<@!0"\`38`>#U"!2"SW"``)2:`8`&@.NXB`F" +M``^&2B!`(.MXPB`!),]P$``0$`X/H`3ZV0'>#'#VN+3RSW&``.PW`(%1(8## +M`>`/>`"A`=K/<*```!`D@,]P@`#L-P"`PB*!`#!PK?0*)(`/H```(,`4``", +M((..2@$-`!)RE_3/=H``L`D/AD<(W@+/<:H```1$@<]Q@`"XJ4JASW.``(0M +M((M$:R_I@HL`W0[P]")/`Q7;$[OP(\\#SW.!`$@LM7O@HP'EZ0U$D!CPSW*` +M`#!5((ID:A?I@HH`W0[P]"-/`RG:$KKP(L\#SW*!`$@LM7K@H@'EZ0U$D,]R +M@`"XJ2&J@JK/=(``,`J-"-\"`-O/Q!,$ +M)X\?__\``#"_I![$$_V%SW&``+BIJ!["$RB_J1["$^,0``;1A6JJR+X5OL5X +ML84%I"F]"(I)BL:]"+I%>`>A[LESM+:T*0C>`L]PH`"`'`08@`_%[H92;!0" +M`$&@)H$AH*&@,90AH#*4(:!AH""$`MX!@0'@`:$2\`0@OL]@`````_0$W@KP +M#'#\N,HFXA<&]&QP"0@>``/>/@J/_('F./."YHOTSW&@```0+($`V"RY4R&" +M`,]QH`"`(22!X;I`P2#!@FEDN4@A`0#*(P$`$O("%(,P#0M$`'!TRB-F`$KW +M<'0`V\H@Q@#*(&4`RB,E`."ZRB0A$`#:$_(!%((P$PI$`%!TRB1F$,HB)@!) +M]U!T`-S*(@8#RB)E`,HD)1#/<:0``$,Q@2]].+G.:0D-A1,`V0;P!N']"42# +M`=D&ZX3L!.F$Z@+;!O"`Y`#;RB-B`(#BS",A@,HAP@#*(6$`@.#,(6&`RB&A +M`,]P@`!P"FFH*JC/<````1.:#*`$`-G/<:#^G`0%V!6X)*`,<`0@OL^``0`` +M!M@']`QP_+@?V,H@(0+M")"`SW&@```0+X$%WH#ARB8!$(;FSW6``+`)2@8" +M`,]W@``P"A"7!]XOA6*XZ[D0>+;RSW.J```$0H,*((`OH```#$$J`0(O>0HD +M@`^``'`*"!2,`(FY#KR%>3"E"B&`+X``N*DT&8`@.!E`(""#0!6,$`HE@`^@ +M```0E.0L&4`@&/(&]C$,D1(CN1CP&PS0'>[D$O1%*?X"Y[I!*<%PPB%B``?> +M"O!%*?X"02D!<0;P(KD$\`#9"-Y!@RZE,!F`(#P90"#DNLHF(A+ANLHF(1(5 +M"IX!!-H#'((`%!$"(8*Z%!F$(!4.T1$/";0#!]Y0%0(`"0I```C>"P[0$6T% +M(``*=4HB`"!R#J_]2G'/<(``4`K/<:0`@$%V@<]RI```0*(=Q!`$(X,/__\` +M`#"[I!W$$'Z!"AB"!*@=PA`HNZD=PA#C$@(&<8$F'X04R+L5NV5Z,8%%IRFY +MQKE(B`F(-K<(N`5Z[LD<&8`@E0C>@L]PH```(,]RH`"`'`0:@`_%[H92&X`! +MHA@1`"`!HB&B$903PL@V/_0?>2B``$,]R@`!P"L]PI@``!&"``QH" +M`D$KP`3"N`BJ02L!`\.Y0"B,`P4A!`-`'0`14R/!`D`5AA`NI5$F`(#1(^*' +MRB8A$L]T@`"XJ6JD%!0'$4`H!0$%)<`!"K0O(($!+Z0X'``1PKC/=(``O-L( +M9`T(1``/A8^X#Z6'YG2EC_1,)D"#:?0WM\]P@`#DV@"``^$%*3X`"B#`#@'@ +M`K@4X!VES@RO_138%(4)\"(([_(&V,]PI@``!`"`%*4$(("/`T```!OT&0A> +M1L]QH`"`(%"!SW&``+`)/X$)"D4``=D#\`#9B^D,<1,)'P=L<<]U@`"P";L) +M'H`="($/`$````#8SW6``+`)Q!T"$`#?E[\;\!L(@0\!`````=C/=8``L`G$ +M'0(0`-^8OPWP)PB!#P(````"V,]U@`"P"<0=`A``WY._5(7/<8``N*E*H0CP +M`]XE\`0:`@(`WY>_`-@4Z`K>SW`$``$1/@F@!`#9!"#`0X#@RB;B$6QPX+C* +M)B(2\0Z0D@WP+H45";0#!][/<*```!`4@`<(0``(WH?F^@("``HA@"^``'`* +M!!&`(,]U@`"P">&XO_+/<*8```1$$!,``-Y!*X$BPKD!X4$KPR#`NWEY8;E! +M*P(A\H!3(D*!4R<$$/UX4R`2`$$O@!!3(%``4R-%(,PBXH\!V,HB@@,)]$$O +M#A'#OD$O`A+`N@#8@.![]`2YQ7E`+$`#)7A`+<$")7@1NV5X$[H%>@@1@"#/ +M<8``Y-H.N`5Z4R``(!NX17B:N!"E`=@"&0(@KA4`$2"!`^`%*'X`"B#`#D`@ +M40!.#Z_]$(5TN"*X`B$!(!"%(0A>`\]R@`#HVD""!2I^```A@7\``/\/,+D" +M(8$$%PC1(`0@OH\&`````=K"(H$``>)">9@=0!`&Z?(.C_0.I0?P`-DNI92X +M$*4H`="-,`T(4$ +M)HX?````&!8.[_TKOM%PRB;F$4_WX@T```AVE.#*)N(3!_#6#0``"':4X,HF +MHAC/<*8```@@@,]P@`"XJ2P8P`0MH,(5@1#LH`>YBKFL\."X"B*`+Z```!"M +M\@HC@"^F```(`A,0I@,3#Z93((`A@-H$)X$0!KDE>`0B`@0$ND5X1"40G@!`4N`5YZ7"&(/X/%;@E>(BX4B!` +M!1"E02_!$,"Y`AE"(,HB@@\``/__RB*!#P``$!\NA4$H`R)3(T.$KAU$$&ZE +M`_24N!"E80^>%$`5C!`1#!$8!""^CP```!@F\@\('@)!*,$`4R%^@`?T"=X* +MO@0@@0,U"8`#02A!!,&Y*0G5`!4)D0`A"!X"02C!`,&Y`>$5"9$`"0@>`LSD +M!O8)"Y0#"0K%``C>(_!!*,$`P;D!X1\)U0`$((`/````&+X,[_U!*,X""PB$ +M`Q"%%0B>`HH,```(=I3@RB;B$PGP4!(!(`Z%$'$'WLHF8A(`$P$@SW"``+BI +M+!@`!"V@`A&!(.R@![F(N4J017DJL"Z%+Z`PA2Z@SW6@```,'0[1$>X(```( +M=L]P@`"P20:`Z[BL"F($RB!B`(;N[@T``(#@RB8A$.[)'PC>!M#)!""^CP,` +M0``'](3FE`\"`(#F6`\!`(WNSW&``+`)&8$-"-$``-@9H17>`_``WH#FZ`BB +M_\H@@@-*(,`@'!T`%,]W@`"P"<<7@!`3"!X`SW"@```E`("?&ARP&@B``*#- +MAB#YCPGTA.;,)N*0!?2@&IR_````@##8SW&@```@/!D8@%.%C!<`$#$(@``4 +ME\.X)0@5`0&'#P@?`+H7`!'4X,KVN@@/_`7HP@^/^@;PB@A``03P9AD8A,EP +M"0=O\J+`\<"Z#D_RSW"``+!))H#/=8``L`G/=H``<`H"C@0A@0\```((3X64 +MZ(Z%$PP1&-#)"-N;NV1X%0C``!4,D1.@S>.XT2!A@03RD;I/I03IK[JQND^E +M[[K1(F&$!?(LV!VE$/`0A0\(GP8NA>(*X!@`VAVE/87/<(``^*DR"R``(;`/ +MA1\(7P3.#<``!(X)Z,]P@`"4F@&`!H#KN(P,`@`0A0D(GP8`V"#PSW>@`(`0 +M"(<3"-\&/86!V&3A7@Q@!`RX"(<;"-X'$0B>!P#9(J[-N`ZEZO$!V`*NYO$, +M- +M@+@'K02!A2`!"`2A@-X(\`2!0MZ'N-X)(``$H<]P@`"P20:`Z[C0)J(1T";B +M$<]QH```*+`9F(,!V`$9&(`"C03H8@S/_@3PL@X``,T%3_(#V<]PH```#":@ +MX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'C@>.!XX'@FH.!^X'BAP?'`+@U/ +M\D3`%=U3"-X`"-C/=Z```"0$IZX)``#/=J```"@]"!`%,H<3AS"Y$+@%>0#( +M$'$!V,!X`KB!N``>`)`2AS.',+@0N25X_QH8L`*'#PB?`)8++_R$P(+HJ7`C +M"%$%SW"@```D`H`$P>*XRB!A`@`-H?+/("$##@@@``3`"-P7!4_R\<"J#&_R +M!-BCP<]UH```*,]SH```)!@3!P"R%0^6!*,;V`>C)@_O_Q7>42<`@A&#,+Q`*`4$$H,`V;.#02@&!,]S@`"P +M"0Z#$+U!P!"#!24%`T+`?8//<,7NB5TV#.`#!29&`\EP901O\J/`SW&``%`* +M"(D#Z!-Z`_"*(CP`"8D#Z!-X`_"*(#P`*HD#Z3-Y`_"*(3P`""(``.!_""!` +M`/'`P=@\&@*PSW*``+`)%H).(`$!#H(B>!>B#.`&"B``LAH$`+(2`P'/=``` +M_/_/<:``@`P#XP7H9'R0H0/PA'MPH<_)`!\`0#>"`!]`0-'`X'[@>/'`?@WO +M]N'%SW"``+`)'8`CZ,]QH`"`(#"!(GAJN$@@C0`W#=00SW"@```D"H"5Z"QP +M)P@?!N[)[[C*(((/Q>Z"5@E@!*EQD0-O\@#8\<`6 +M"T_R]A(!MOC)SW6``+BI)7A`'0(0.@TO]O_80@T/]D&-`ZW2:DSFP-A&"2`` +M/!H"L,]S``#\_\]QH```$`/FQ'LP&=B`S\D`'P!``-L&\/`ES!``'P!#`>/W +M"U2$`-L*\,]P@0!(+/`@S```'P!#`>/Q"X2``-@"&1B`G\W/<:```"4!X`0@ +M@`\``/^_C[B?&ARP`*'I`D_R\X$+DE>`"E`8H"N%#@!*7/DCF2 +M.&".""``&;+YD@/G!">/'P``_/^""@`!SW&``(BJ!.@;@0?H`-@;H9V_G[\" +M\)V_X*7NR24(G@+/<*```"#/<:``@!P$&8`/Q>Z#5!N``:&?S0&A&(8!H9_- +MSW&``)2:`>`$((`/``#_OX^XGQH.!^X'C/<(``_*G@?P"`X'C/<*0`@$$Q@,]R@``DJ1F`(K(/>3"X#W@(N"5X +M`[(,!L]R@`"P"5"""PJ>`B*P([`DL.!_,[#@>/'`2@EO +M\@;;SW*``+`)+I+/=8``)*D@M3""2B``(*3!C;L1"5\"SW&E``"!(8$#\`IQ +M(Z4*(8`OI```0'D1`28O?S"Y+WD`',0S`AQ$,`BY)7\P@N.U*PE>`I\1#"93 +M)(X0WF9`+`$2U'Z%><]^(;5`+@$2WV`B.Y +M4R%^@`;RSW&E``"!(H$#\`IQ)*4`W`SP*=D2N?`AS@!`)0$3M +M#)20()(+I32USW:``+BI0"8`%D`E`1Z2"F`!"-K/<(``,`HRD%&0$+E%>3"E +M,Y`%@#&E#Z4'AAVE5B7`$KH)[_I5)<$5DQ$`)F@=`!0;I<]PI```@`"`9!T` +M%!REJ7"4V1X-X`#$VHD`;_*DP.!XX'[@>,]T@``DJ0:D)Z0!V!.T,]Q@`!DN@"AA10`%@2AAA0`%@6ASW"E```,`H"= +M@@0@C0\```#@D'P'O"V]!+VE?,.XA7@=HQF"SW*D``"`'J,'@@*A"8(#H<]P +M@`!4NDH)P`//<(``E)H!@`:`Z[@@#\+_O00.`@!:"2`#`=A^"$_]50FH@C/_\]P@`!D(AB` +M@.`X#,(`$PV1%L]P@``HQ5X+8!D`W>[)TPA>`L]QH`"`'`09@`_%[H1B>!$" +M(,]SH```($&A&X-">,@3`@!">`&A`(<"@`&AH:%1\&X);_\*<`AU`(=6""__ +M"G':""__"'<`VHCGS"?BE03TZ748\/T/D)0([78,```*)0"0!`O!_P?P$@CO +M_P#=9!F`(!$/D1;/<(``*,76"D`9I.T"A@#=0<`I")\`!@SO^X'`"B4`D`[T +M`<+BNLH@H0+*(8$/``#^`'P-8?+/("$#C.T$V`2F&]@'IL]P@`!D(AB`@.!8 +M"\(`*@@@!`#8@.7-]`'9SW"``'RD(*#G`P``X+C4`P$`SW:``+`)#H:X%@$1 +M(GADN+H>!!`/AO&XP'U`],]Q`@("`@0B0&``W!'P+RH!`$XB@P=!*\T`SW*` +M`)0]\")"`Q`@P``/)(P0\NB`Y,HE(1`:\@0A@8S_V`SR+RE!`$XA@``L]P@0"$)AJ(+>C/<8``E)HA@2F)3PA``")X$7AA +MN(3@`]K*(@4``-@&\()Y+WDHJP'@+PB3`,]T@```VP`@@P^``%`**(OP)(P0 +MX0Q$D`#9\/'J#N`#`-B6#`__L0(``)P6`!#/<8``R"(Z<$0H/@`"H8#GY`M"&(`6`1`&@0'@!J'`%H$0 +M'PG?`8&&G!8`$%(D#!!`EDHD``!TEDX-X!-3)`40#X;SN+@)POP3A@SHSW"` +M`+!)XH`N">_\Z7"$Y\HE(1#A\L]W@0!D)@R'">@/A@\(7@46EX7H3@E```CP +M`-C/<:``@!P9H3#8'*%*",__#X8K"!X&$-B@&ARPSW"``"C%(@A`&3#(`=H` +M(($/@`"@IP^&0*FXN`^F():&(?P`T.&`W,PA`H,#\@#8;?$$(+Z/*`````3T +M$X9YZ"X-+_8!V!IP%(^!X,P@(J#T"6(7RB`"!&H-#_8(<4`F`!-F#^``"G*` +MX,HE815*(@`@():&(?P`C"$"@&[T@N!I],`6@!#R"2_[`-F$*`$,`"&0?X`` +M<",`$`\@!^_/<:```"`[@3(+#_;/<(``H"4&@`SH(0^5$S,FSW.``!#00"<` +M.@!V`#?`=IH&(`@"0B0``D*$"`5W07P +M@>#*)2$0K^W/<(``B*I;H`^&4PC>!,]P@`#DT`"`0<#/<*````P-@$(@``B` +MX,H@S`.,(`J-U_>=V&'`G\T&'`0P`>`$((`/``#_OX^XGQH``+`)&*>V#Z_[BW`*)0"0!?*I<%4!+_*AP,]PH```)2.`4R&` +M``0AC@__P%]_G0C1`4UQ#X=Y"9X#!""^CP`T```+\L]P@0!D)@R`-NA:"4`` +M!7XR\`0@OH\`"@``"?),<`$(GP!,<."XSR9B$<]Q@`"P"0^!^;C/)B(2SR;B +M$L\FHA,:]",(W@8%)H`?````:]*!!":.'P(```!2)DX4*KX%?@KPA28<$`CP +M#0A>!78(8`#)<`AVSW"``'`*`(C$N!BX!7X)\."YRB7A%07RX;G*):$4#'#R +MN,H@(@B`#N(#P'G/<(``L`G8H)/QX'CQP!((+_(%V`#>SW>@```@NX<+N#H) +M+_W)<1X,C_7/<(``L`D/@)L(W@($'YB?`!```%H.X`,%V!#P#'`7"-X%+'`3 +M")X#@@D@``#>/@[@`P781@PO\@;80PX5$00@OL\P`````>;`?FQP)P@?``QP +M"PA>!2QP)PB>`PQP`-FA0GP +M_@@``,]Q@`#DN`*!`>`"H>[))PB>`\]PH```('N``-FB>\]P@`"P"3P0!`#/ +M<,7N@UQ&#V`#J7)Y!\_QX'CQP*#-AB#_A4KRSW"@```@`-DZH*'-1B#"`*#- +MH1J`3H<]QH/X$!@78%;@DH*'-I[BA&ARP +M%/`E"%X!BB`$`*`:'+#/<8``Y+<2@0'@$J$%V,]QH/XP!A6X)*"@S00@OH\` +M``!0"?+/<(``,`H?D+X/[_P`V='`X'[@>/'`X<4`V,]UH```$`FEQ@HO\@/8 +M<@@```'8":6I!L_QX0?/_T[;SW*!`(0L%7K@N6"BRB#!``7RBB"%`P"B"PG> +M`HFX`*+@?@#;#O`O*0$`3B&"!\]Q@0"$+/`A@0`0((``)7OTZ,]PH```$'"@ +MX'[@?N!X`-K/<8$`A"P5>>!_0*'@>`/:SW"@```03J``V\]Q@`#L-TZ@X']@ +MH<]QH`"`#`&ASW"``'A5`(`"@`*AX'[@>,]R@`!X54""0H)88")X`B"!`%!P +MX'_*($8`X'CQP!H/P`(.#T_[SW`/`$!"Y@C/^M'`X'X(<0#8"'0/\%-L57K' +M@T/\ACP+RA!`TX@@@=/>A`EC1`3:A5XQW"``.2S((!H@*]]#R;.$-4)7X*, +M(\./YO/J[6D%[_'/>`#9$/`O*P$`3B."!T]Z$""```.Z57K/`D$HP0#!N0GP#0B>!B"-1+G!N0/P`-D$Z9ZX`*7/<8$`<#76 +M>2")"PD>`)ZX`*5?")\'SW@`V0(,[_H:<80H"`8`(8!_@``P/RJ`#P[1$P*` +MA.#*(0$$`(7/<@`$``$O"%\"%>E+>-$AXH71(>&`"?0;"1X&!""^CP```!@' +M\OZYSR#B!\\@H0<`I00@OH\`!``!I?,_"!^"P[B>\2D$S_$!V@3P$"#``!OH +M+RD!`$XA@P=H<8`AP@&4X\HAQ0`"N3`AC`^@`!@L,FLP(8$/H`"T+B]Y,'3` +M>N;J`-@"\`'8X'[@>/'`X<4$(8*/\/\``,]UH```,`7R-+IM'9B0%+C3N25X +ME!T8D`/PA@Z/^Y05`);["-Z'T0//\>!X4FC'`,]P@```\"X:&#!9 +M(@`(+QJ8/_]___\M&A@P#_!"(@`(+AH8,,]P@`"@[2T:&#`O&I@_#P#__\]P +M@```YP`9&(#@?N!X`-D2\"\K`0!.(X('3WH0((```KHP(H(/H``T+\*Z#R&! +M`"]Y\.C@?RAPX'CQP'8*[_$`VN.(SW.@```P(8@/(L(#!A"1`!)OQW"@`#0O +M`!B`#Q@!``"2$P"&4GVD>)(;&(`Z$P"&SW:``#PUI'@Z&QB``(:D>`"F`88B +MZ!4F4!`0$``@2WC*(($/``"?(6@*(?+*(L$#$!`!(``G@!^``(PUI'D0&$`@ +M_]D@J`.&I'@#IA4F3A0_Q!=C/<:#^I`$5N"2@`-X* +M((`OH```,,]WH```+M6G#]T(O0/PX@R/^Q.'I'B,(!"`^_,$&)BC`_#.#(_[ +M$X>K>/WU`0+/\<]TH`"`+%BD>:0,N)VXG[@%>3>DX'[@>##9SW.@`(`<.Z,# +MW,]RH```&!0:&(,!V`&BB!H8`P#8&:,\H^!^X'CQP%8)[_$@V:3!.G'/=:`` +M@!P[I0#;SW:@```48*9$*#X-SW"``&"J@(`*)``')W3/=X``L`D,AR1L0)13 +M(,4%4R*``$H@0",Q"-$`#X=`)`(5F[@/IX*,-!>`$!,(`0.(<.8+(`!`)P,< +M"G(9\!*'D;B2N!*G&/`!V.RZPB`!``7:%GH/AYFX#Z=@@04C0`%`P`&!0<`" +M@4+``X%#P`/B0:8!VX?K#X>7N`^G'&SW&@`(`<(-I;H58@#`0IA*+!BPE? +M!E<)W@$QB`7:([G`N39ZSW.@```4`]DSHRJ#C>)!P1#=RB7B$084#C&,)L.? +M"?0$%`XQT77,)NJ0`=U"]@#=Z^VE@"5]JZ.QB(8E_!\8O:5Y.J`'\`W:)8#/ +M`+:,H@"ZC`]DGHW`0``$#HPF$F;@)I*+` +MP<;@?\'%X'CAQ<]S@0!D)BR#.>DVDS?I"'&&(1P`3R%"`@Z3BKK/`<]S +M@0!D)E"3+Y,0ND5YL9///'`7@^/\4QP_P@?@4$JS4#`O0:]3R7.$TD.GA'/<(``T`GD@"6``-CP?]H* +M[_$0VL]R@`!8JF"*SW*``&"J1"L^#4""Y7@GO\]KZ8="@$`"B6`+X````"$XP'=PB5!$Q>]#X8=\`0E@(\` +M`/P`T21BEP;T@.#1)&&7`-@#]`'8"B6`+X````"`X`'=P'T/AA>]I7B$XP'= +MP'T7O:5X"R!`A0^F;_3/=8``%-SP)<000"F'`P4G#0$8NJ5Z,AN8H`\+D0`* +M"2_T"G!;\(8E?XT>\@2/F^C/<8``,`H=D8RF9+@=L038!:\&KQD+T0`<$P"F +M#:8=D62X';$,V`6O"-@&KUX,[_\*<#WPX((``'((`!@'`O)`@``9;>""``!R```:!P+R4(``*6S@@@``<@ +M0`'@<"\@"!`#EKX((``'(``"(7`O)P@`!):N""``!R#``4%P+R$($`66G@@@ +M``<@0`+`<":6$'@'>3QZ#[E%>0`A`@%0>0`0%Q,'H$'$0P7'D/NB5ZX')0>08@^Y)7H`(D$""!Q$ +M,#!Z7'D/ND5Y&6$P>`H<1#!3)8$1A;D(N25]H+<@EB=X''@(N`4@P`(!MP#` +M`:.!X$-K/<:``@!Q;H0';SW*@```89J*D$`$`'PG>`@+8&:+/<8$` +M##0$@0*B`X$"H@*!`J(!@0[P/)"&(?^,`O1YHA3@(X`BHB*`(J(A@"*B`(`" +MHN!^X<4$N4`@`@['<8``3-6`@6&"BB4,$&"D9))@M&."8*1HDF"T98)@I&R2 +M8+1@DJ1[#0M!`VB"8*1RDF"T,=P@`#DLPL)'@`]B`+P/(@6 +M:[5I'67'=8``L,S/=Z````2$AS#(0.(;>$-P8A``!YA@:+@3IS2RSW"@`$`$ +M)+"*E96RBI6$L(N5EK*+E82PC)67LDR51+!-E42P3I5$L$^51+!0E42P495$ +ML!8A@`/'<($`\#EU>*"(!KL%N7EA`"&.#X``L,P0V,]WH`"`'!NGT@ZO\0;8 +M`]@9IP'8SW*@```:`:)EA@#9!H8`(P.$`2!``&6F!J9$+3X=SW"``&"J`(`G +M<"&`,*(B@#&B(X`RH@2`$Z(!A@*B`H8#H@.&!*($A@6B60*/\>!X0"`##B&# +MSW*@```:)Z(DDXHD#!`NLB.#)Z(HDRZR)8,GHBR3+K(@DX1Y#PD!`RB#)Z(R +MDRZR()``DPRR`9,,L@Z3#+(4DPRR"X,&H@R#!J(-@P:B+++@?O'`@@F/\1IP +MX(@!D+-O6G"U?<=U@`#DLT(H#@+!O@\(G@,0V=VM`=@$\`#8`=GE"*7U`(_Q@N#*(($/H0`< +M!`?R#PA1`,]PH0`4!0'9(*#@?J'!@N#*(8$/H0`8!`;R(0A1`,]QH0`0!0"! +M0,``P("X`*$`@4#``,#`N`/P`-C@?Z'`X'CQP&X(C_'V$@&V^,D!W"5X*6@+ +M>0#9SW"!`"@LQ8#AP<]U@`"P"0^%PB0!$UL(W@(.A4`5@1`="!`%C.Q$N<&Y +MA"X(%@`A@'^``,1`&.`I8$\A0`+/*X(+_8PB7T';_&AP*'!\<#B#D_Q6G"&(/P#C"`#@#IQ2'8S +M\L]Q@`"P"9P1``#/#0``@.#*(.(`?`XB`,!Y2B4`(17PSW"``"`X +M`(`CAFX/;_I$AB"%#8$!X`VA\O$`V$"%CK@N@KIP`>$NHL]PH```"`08``6# +MAD`K`21(EC"\$)40N@(@`R`J<`4A@01>"6`#A7K(%P$0`"#`)")X@.#*(`P% +M,8<0>"\(1``CA@B6,+D0N"5X`!H8,*#8`:=$'P`5$)5BN&)P$:<"V`(#@RB`,!1&G`M@''QB0 +M(-@`I\]Q@`!DN1F!`>`9H0[PSW&``&2Y%X$!X!>A"/#/<8``9+D8@0'@&*$` +MV4HE`"&@S88@_X4:](PB`Z$6\A\+$2#/<(``^*A!B,]P@`!(J$0J/@LP($`. +M$0A>`*`:G+\````0!/"@&ERU*'`(W%\$3_'QP#8,3_$(=BAU*'!(<0#:Q@D@ +M`$AS@>#*(($#RB%!`S@)(0#*(B$`>01/\?'`_@M/\1IPSW&``$A5`(D-Z,]P +M@`#@(<&!XH$"$1$!H(`TO2KP`@\/^\]QH```*`(1`(;S")Z!51$"A@#=51E8 +M@P+8!!D8@"\H@0!.(($'$>K/<(``C`,"`X8#/<(``#`CT(%$`(.#P($T` +MR[T$\*EWJ78Z=000`2``&$!0"!`!(0`81%#/<8$`<"P`@0;H0H$`V``8@%`` +MH<]P@`"4F@&`!H#KN,H@@@/*(<(#RB)"`RP+(O_*(T($4R'!(`RY0"T`%25X +M@K@`&`!0`!B`4P`8P%.I<"IQR7(2#R`#Z7-]`T_QX'CQP!X+3_$(=2AV2'=3 +M('Z`RB""#P``!CQ("Z+QRB%"`\EPZ7$!VIX((```VX'@RB!!`\HA@0,0""$` +MRB)A`$D#3_'@>"*Y!O``'\!`!.!AN?D)M8!@@,]PH```#&*@`]DGH,]PH``` +M(`/J9AA8@#N`SW"``-P]X'\@H.!X\<"B"D_Q"'4H=DAW4R!^@,H@@@\```8\ +MS`JB\`$((`/ +M``#_OX^XGQH3"@"/"D>V5Y,*`$\`?E +MI'MPH`#!`=@`'T!``-D@IBT";_&AP.!X\<#AQ0#=#O#/7/`]XX."L!\7_SW.```"K`(,!X`"CU/$` +MV,4!;_'@&@``\C"!``R\G$$```A"@(!@`A +MC7^``#`_1@\O]@#?$-@-V8ZY,-I8VVH((!F8=S(/+_8(=OB^RB#"`S/T"=A& +M#>`"@-D#V<]PH```""*@B-H`&(10`!C$4T2%`!B`4$J5`!B$4$2%`!B`4$J5 +M`!B$4$2%`!B`4$J5`!B$4``8P%,:V@3P`!B$4`+B^PH4C.&@4@F@%P'="=CN +M#.`"`-FI<)(.#_;Y`$_QX'C/$4%C_,#V<]P@`"(JN!_-*"!X`'9PB%! +M``'8-'C/<8``B*K@?Q:AX'@!V,]Q@`"(JNT&K_,4H>!XQ0:/\_'`X@ZO\P#8 +M`]G/<(``B*HTH-'`X'[@>/'`*@Z/\S8,``#1P.!^X'C/<(``B*H4@('@S"`B +M@`'8P'C@?O'`A@\/\0AV0PA?1`(-C_//=X``B*K:#^__%Z?/=:```"`/Z!>' +M&PX%$/H,C_,3#@40&X5R#:_S&*%0GD/"24`BB(/"B)X"0H$`$AP +M`-[&#:_SR7':#*_SV*5I!P_QX'CQP.H.#_$(=L]U@`"P"0"5.G&&(/\,B.!* +M($`@SW>``(BJ-(?"(`(DA.',)F61B/>*((X$"@]O\<%0`0A.`!V,H@ +M`02&Z0;H%H:"ZH`KP:'#*#*_S`-FI<.(,K_,!V7$& +M#_'QP/H-#_'/=H``B*H9A@SH`-VF#*_SJ7$:AKFFN@RO\ZEQNJ9!!@_Q\<#& +M#0_Q#@IO^:+!]@EO^8HE"!`(<8MR@0#`\"$``.!_H<#AP<]Q@``4XPEASW"A +M`$`$-7@`P35X0*#@?Z'`\<">""```=B6""```-C1P.!^X'C/<8``%.,*8<]Q +MH0`,!`'857D`H>!^X'CQP,]P@`!03P"`@.#*(($/```M,Z@$0?%`>-'`X'[@ +M>,]Q@``4XPEASW"A```$\"!``.!^SW*``!3C"F+/<*$```15>""@X'[QP.'% +M"B(`@"AURB""#P``*S-L#&+QRB&"`,]P@`!03Y$$+_&@H.!X\<#AQ0AU=@_O +M___93@NO_P'82@NO_P+8J7#^#N___]EI!`_QSW&``!3C"&'/<:$`"`05>0"! +M@+@`H>!^\<#6"R_Q`K@!WA5XSW6``/BGN6``V!/P`""##X``4`J(BQ4A`@#B +M@@'@_&2"HDB+#WB,(@.,RB8K$.$(TH`%B0'@#WH+"C,!!:D9#E$0`M@`H?X, +M;_41V`3N`=A!'1@0W0,/\?'`SW"!`(@T[!P(L,]P@0!$D%K_,%V.!XSW"``(BJ%H"!X`'8P'@U!:_S`^`M!:_S`MC@ +M>"4%K_,`V.!X'06O\P'8X'CQP-H*#_%Z<%IQ9@@@%AIR"'<-"!$@R@]/_!IP +MS@O`%0HE`)`$\E8*`!:$Z`+8@_"!Y8#RSW"``#@U`(`2Z,]Q@0!$)R&)`-@( +MZ<]Q@``L/2"!@.'*(&(`(@Q@%CIP!.@`WE3PBB#_#P+PJ7`&#\`5C"##CPAU +M&/(.#\`5SW:``$RQMGX$%H00`Q:%$")H`8A!CF*.]@Q@%@HF0`1GZ`6.!'\$ +M\`#?Z74O)L>3+O)J<.X.X!5*<1)X!'[D>"\D!X#/<8``/$\`B<5X`*D>\L]P +M@`!,L;9X((C/<(``3+-`D`\B0@!`L#1M`"&`#X``K+%J<4IRM@_@%0ISSW&` +M`$!/`($/($`#`*'/<8``C+$;B*(`0&!*<`V`6GZ7`6"R_S2'/I<'X-[_4"V0#! +M`=AP&D`@`*?Y`"_QH<#@>*'!\<"B"`_QSW*!`!`[2'4,&H`/`(```,]R@0`( +M+("*0\%$O,*\#KP$(8X/`0``P(M^@\,5\M=V````0,PF@I\```"`S":"GP$` +M```#]$&"`O!"@JZYK[FPN25Z0*,#P0C:+KG"N42E0X5`*0,&97I#I0/#8:4- +M"!X"G;I#I07PBB`&!@2E`-I%I:EP`=YJ"B_SR7.I<-(,[_7)<<"E"-QS``_Q +M\<#:#\_PVG":H*+_$!V@4F_J4(=BAU#_(%)GZ3#?(`P`#9RG*N"B_QZG/)'W"82#(P]0$!4/D!`E#]$0`-G/<*``0`0@J`#9SW"@`$`$(*@` +MV<]PH`!`!""H(0?/\.'%JPH0`$`BPP,DN\.ZEPH5!#,F@G"``)#00"<,!X6&!980;P_Q"#@F&Z_QG*@/OJX'[QP/(-S_`(=E,@?H`H=TAU +M!/13)WZ0"?+/<````SS)<1X.+_'I/U +M\07/\.!X\<""#<_P"'8H=TAUX+C1)R&0RB""#P``!3S*(8(#L`TB\4"6`A^4$`+F`A8!%0(? +M5!`"%@$5`A]4$`(6`14"'U00`A8!%0(?5!`"%@$5`A]4$`(6`14"'U00`A8! +M%0(?5!`"%@$5`A]4$`(6`14"'U00`A8!%0(?5!`"%@$5`A]4$`(6`14"'U00 +M`A8!%0(?5!`"%@$5`A]4$`(6`14"'U00@"#_CP#=L_4=!<_PX'CQP,]R@``P +MLP"")^@`V2"BSW"``#BS(*#/<(``*+-`@,]P@`!`LP"`SW2``"RSSW.``$3/ +M$PB%``)Z)H-`I".!(($980;P!H,@I`.`((!9808(H`%H<-'`X'[@>/'`4@S/ +M\`#<`O`!Y!4,51'/=8``/-Z-9?,+08,!VP/P`-N`XW?R`-MH=0;P`=N)=6.Y +M`^!+"=0`P(B,)D.2`-Q4]N&($N\)\,]W@``\WH]G#P[`$P'D]0Q4D0#<`O`! +MW(#D`-S*)&(09.P"$,P`0GR-?$@DS!%``#2S`(`+9A@[O]LER%/#/=H``/+,`%L`0$0T#$!-M#G@"V6H.[_8!V@`6P!`0 +M=0'>RB8I$`SNSW"``#RSH*@!V2"GSW"``#"S(*`?\,]R@``XLR""`=@*Z<]Q +M@`!$LP`1P0`P=4$I``(G>#"Y)WC/ +M=H``8+.@CE,@DP'%O9#ERB"*#P``S1L0"RKQRB%*`P".YK@`V"3TSW&``&2V +M%B%``P>(MGD`K@`90`3BL089`@0`(X`O@`!DLT"(1ZE`*,$@H*@U>0`:0B/' +M<8``Y+,@&0`%`(&IN`"A`=@,W+L"S_#@>*+!\4$I``(G>#"Y)WC&N``@@P^``&2S`O!G;*"+@-]9#=\1SW&``&2V*'2V +M?`:,ZPH!@,]P@``$M`.Z57I`8(0H"`8O<+APQW"``#`_1H`5"@$!#I`1#@$0 +M`"6`#X``-$'@J`>,MGD`J\]P@`!@LT"(A[U'J:"H#-Q/`L_PX'@#N!5X`""" +M#X``Y+.:BL]P@`!DMA8@`P-@@V"A6HI6>`*0X'\"L>!X`[C/<8``_K,5>`EA +MSW"``&2V-G@@@(PA_X\(]`*0UW```/__`=@#\@#8X'ZBP4'!!!0",4$H`01` +M*@,$)7M!*P$"9WDPNV=YQKG/6"! +M\0C!@&*1Z0K!@`:)`_`H<.!_HL#@>/'`/@G/\`AVSW"``'C1`(#/=8``Y+;A +MP(H)+_43V""%`-B&Z2&%@.'*(&$`'^C/<*````P-@$(@``A((```C"`*C9GW +MG=A@P)_-`AP$,`'@!""`#P``_[^/N)\:'+``P!H((`#)<0#8!/`!A0/H8;@! +MI3D![_"AP/'`K@C/\#IP&G$`WLX/+_SAP(#@RB"!`\HG@1,)\IH-#_Q"#2_\ +M"'92#2_\"'<0OL]U@`#DML*E`!24,(HC`B<*(H`OH```$(HB"@P/#,$D,!J8 +MKP"@L`(#\#`:F*``'T!$#0]1$"*%@;DBI03H`H6#N`*E"B&`+Z```"!L$0`@ +MSW>``(#FB1T8$`&/SW&``.2X0"4.$@WH2B!`(`#8`:]5(4`+`-D&#F_RBB($ +M#0*/@.#`>,H@`00&Z`*%`-F`N`*E!/"*(?\/SW.``&2XOH/_@P#:!_``'P!` +M)'@$'A`0`>*,(H**`(:W]P(:&*`#V@<:F*``AB1X`*8+#,$D9AF8H+ZC_Z/] +M!Z_PH/'`X<4(=3(((```VREH:'(-\"AE%0@2#!$(DPYJ#,_V +MDFJ8>`5[`>)AN>L)$X#Y!Z_P:'`(<@/P`>`@B/[IX']">.!X\<#/<:```$4` +M&8`/`$```.!X`-@`H<]PH```'`6`[[BP":(!RB!B`-'`X'[QP.'%SW6@``!% +M'(4XA=H-@`(`'8`?`$```.!X`-@`I02EE0>/\.!X\<`:#X_PSW6``(`'((4( +M=@#8*PD>`"&%(PE1`'8+8`(6V(HAR`H"A0':#R"``P*ESW"``,SU3Z`H<$T' +MC_#@>,X/C_O/<:```#P`@8BX`*%I($``_O'@>/'`SW&``#B\+($P+PRB/"`P"&00\!$`0M?A3/<8``E$`P(4`."B%`+I#H"G!. +M#Z`!']G/<8``-$$R(4$$SW(!`.CJ=@W@$ZEPA@[/_P#8`*8,AA!W?`EA\\H@ +M@00$AA!W;`[!_UT%C_#QP/H,C_`:<(0H"`8*(H`O@`"00$`B`20R(5,."B%` +M+@#>R74-\``A@"2V>/2("G`V#N`3Z7$/)LX3`>6O?>L-PI3)<,X.H`$?V0D% +MC_#@>/'`X<7/=8``"+M`A8PB_X\(<1GRA"D(!L]P@``P/S`@0`X0/'`9@R/\`AVA"@(!@H@ +M@"^``)!`0"`!)#(A4@X*(4`N`-T4\``A`"2V>/2(R7#I<7X+[_8!VL]P@``( +MNPB($'?<#@'S`>6O?=T-@I1U!(_P\<`6#(_P)!*2`,]UH```(%N%SW>```B[ +M)X<`W@`AD0`[A4:'`")0`,(+K_G)<0AQA"D(!L]P@``P/S`@0`Y`AQL(@``- +M"!$!2Q<`%@\('P#/<```5#0:#,_P4PI1(,]V@``(O`N&HK@+IAT('P`GCP\) +M40`*<$X/+_,J<2OP@[@+IBGP3PA>`<]P@`!LJAX/``$[A0:'&6'/<(``S+HN +M#P`!"X:EN`NF%?#/=8``.+P`A0GHH@U@$0#9P*6N#._T"]@LA07IE@YO]`G8 +MS*6R#,__H0./\.!X\<#/<(``"+P+@."XF`S!_]'`X'[QP!H+C_"NP0AU+@A@ +M$5IRSW:``#B\((;DB`#8$0U`$"2�U`$"R&!PU!$`'8>G#/<8``-$&*(`@& +MVG`,?S(A40X/#Q$1SW"```B[X(@S"Q`@!"^^%<]Q@``P/S`A00[/<(``"+M` +M@#!RRB""#P``5C3*(<(#&`OB\,HC0@,`AA!US")AH#[TRG`,?P`AD'^``#`_ +M=!`!)L]P@``(NP*`"B2`+X``"+P0(0``\@R@`1_9+!0`(,]R`0#LZH&X+!P` +M(.EP-@O@$RIQ@.`J<`;T)@SO_P#9%O"Z#,_V$NC/<*```"`;@(,0`2898<]P +M@`#X/>X-``$L%``@A+@L'``@!(80=(* +MK_]<]P@`!LJM(,(`&9(00`#0L0($PB`*!T"L'_10&O\*[`X'CQ +MP.'%`-T)\#8)8`&I<"(((``!Y:]]]0T2D<]P@```P`X(```.#0_T70&/\/'` +MX<4(=03P8@P``7(,(`&I`"B`H5@H`KP!84@@B1X`*('&YB/`'P```4!C_#QP,]P +M@`!4\.P<"+#/<(``?/!!P,]P@`"0#$+`SW"``)0,0\``VT3#"-@$V2AR"B2` +M#X``F`P*)8`/@`#XO$HF@`1>#&_Y2B=``*7`T<#@?@AS*'+/<(``5/`-!6_Y +M:''QP.'%SW6``,`V((53(8`'"PA4`D$I_H<%],]P#P!`0@7P0@M/^0"%WKAZ +M"T_Y=0"/\.!X\<#V"F_T"-@:#B_R!-C1P.!^X'@%!`_T\<#B#T_PSW6``"RS +M`(4.0`@`OHSW*``$3/!H(#@""`QW%,`$!+Y_'/<(`` +M.+,@@`#>,>G`H,]P@`!$LP`0P`#/<8``/+,`J0.X#G@"V1H*K_8!VL]PH``` +M(#N`SW"``$BS`(#/\]R@`!$SPL(Q0`">V"E +MO?$&@L"E`X`@@'EAL?')<`+9T@FO]LERSW"``#2SP*!M!T_P\<#AQ:(((``( +M=80M"!;/<8``/#\P(4$.SW*``*B^`KDU>2%B(('/H""4R%#!9MC +M`B,,`'!PRB,.`P&"-KDX8!:X*0=O\&5XX'CQP.'%"'-2""``*'*$*P@&SW&` +M`#P_,"%!#L]T@`"HO@*Y-7DA9("!4R)!!5,D316B>3A@@.'*(0L`SW"!`'`Z +M=G@@H$$J@04VO()YU09O\"&@X'B$*`@&SW&``#P_,"%`#L]Q@`"DO@*X%7@` +M80"`X'[@>(0H"`;/`!B(*#@?N!XX<6$*`@& +MSW.``#P_,"-,#L]S@0"8.A9[H(,!@P(A08,#(@(`$FP5>,=P@`"DOF*`(*,# +M@$"@X'_!Q>!X\<#:#4_PHL$(=2AW2'82#B_SBW'/<($`F#JV>&"``,(!@``B +MPH`!P0$@0`!!P$"G`<``I@T&;_"BP.!X\<"B#4_PI,$(=BAUU@TO\XMQSW"! +M`)@ZUG@@@`#"66$"(8&``<,@H`,ES1"AH.$%;_"DP(0H"`;/<8``/#\P(4$. +MSW*``+2^`KDU>2%B0('/<8$`F#H6>0"!X']88.!XA"@(!L]R@``\/S`B0@[/ +M>!_0*'QP`8-3_!:<"AUP8(Z"(`0"'$"A4>1`J%/(4`A!7I0>$>Q"!`#(&&A(0X>$`L/'A!/ +M(L``![$+#YX0A+@'L038!K$#E8.X`[4?#IX0"P\>$0>1@[@'L0T/GA$'D82X +M![$&D82X!K%*<*8+8```$`(@1":^DC3R-@B`$`AQ`H5GD0*A3R%`(05[9[$, +M$``@<'IAN`&A(0Y>$`L/7A!/(\(`1[$+#]X0A+I'L0C8!K$#E:.X`[4?#MX0 +M"P]>$0>1@[@'L0T/WA$'D82X![$&D86X!K%*<#H+8```$`(@>01/\/'`_@M/ +M\*K!NG#Z<4HA`"#/<(``B#[`@"0<0#0*)H`/@`#D\`0>0@0&@0HC@"^``,3P +MSW>``/2^0"<9%8KHSW"``*#`!(#">!$(A0\````0"B!`)"IQ$/`N#R``!!<` +M((3@"''*($4DAO<$%P`@2B!`(`&G0H??"!$@0"0%.0#9TPH0``&'SW*!`/`2 +M,F@T>2-B`-T(<0CP`>'!N7)I='MC8@'E"0T5$?$+$HC:#@``A.68<,HA!@%5 +M]P#=B'$/\`&'`>4!X,&XO@X@``&G"'$!V``=```$'@(`"PT5$>4)$H1Q#1$1 +M`M@`'0``!!X"``07!1"*)\,/$0PS!`0?P!%`)4``4R!%`$HD``"H=1WPRLE2 +M;98@!@!4>EA@88"#@)K:FV,)(X(`0Z`!AQ,(P0%6#B``J7`+"#($"'&AIP'E +MP;U`)$0`S0P4@0&'O0C`@4*'RLF6(`8`88`*)(`O````$!\;PB!D@$`ID@(> +M&\(@9X#/=8``H,`=&\(@:H#_V1P;PB!C@`,>P@!F@`(>P@!I@`R``!X"``"% +M`1["`&D(00"+ZL2EQ:4@I0'8`J51!"``&!L`(`*%">A$A<]P```7,#^X4B``@,HD(2`1\M8,K_0!AX'!`8#)@#P:IPA@O@``':`\`%I4&'8(5P`T*!2`"AX'@A_0" +MA8'@Q*5^\@*'OPB4`$)VQ:5V\`/!`6Z5"0$`M@\@`."%`*4(V1@;0"!M#P$0 +M.@R/]$2%A<$!@&6%*@X@`$HD```%P`D(40`%A4?`9@P@``"%!\(*N!EF`B&` +M`#^X4B``@`OR184"(D``"PA2`$?!&?!'P@KP!,%DA0`A@`4">S^[4B,#@`3T +M2'$-\$?!&!L`)0GP!,(DA0`B@`4B>`L(4@!#P0GP0\)(<0?P`8<`I1#8&!L` +M("6EQ*6J<*H*X``!VFD"```IA0L)$0$'A06E%/""X```=H@A8#8%2%9,!@;@"\````@`!D`,,KP +MT@JO]&AP@<%EA0`F@A0!@/MCN@P@`$HD```!P,2EC.@#P:IPK@G@``':`\`% +MI8#8&!L`(+#PBB`$`!@;`""J\$HF`"`!V`*ES0@1("4,42"""J_T:'`!@('! +M9(7)2!@A^@EA:IPX@C@``':!:7:":_T`(6!P0&`R7)EA<8+(`!*)``` +M*G`*\`2%!!Q`-&2X0\#/6*(/\/(6H)"@``LPT4E/_8NWV#=3`=`A`Q'0(0Z74.\``2 +M`"`7"$4#`!I`(Q)O!.`*N*)P`!@`(`'G%!$`(($-!1``P'T(Q`.`W`XG`!-Q +M"`0%`-U*)$``"B4``>EVPPZ%GP``@``4$0`@MPT%D+,(1(&,P_R +MRG-1Z`K!3"0`@,(D`@'*)T(0RB9"$!D.01`+P")X0B1!(`T(1```P!!WP"5N +M$!P1`"`%*'X!02F.*,(,./0J,"]"&C`>$O>=\)$H&#ZO_8`:/@?TAP +MX'CQP.'%SW"``(@^H@GO\:C9SW"``.`VE@GO\8HA!`#/=8``H,"I<(8)[_$H +MV?_8`*4!I0#8>00O\`*EX'CQP.(+#_"DP3IP6G(:(["A4!3B+```#;`KB#<&"@:'3M +M#!62\"&-(#)L.7W#O<]Q@`"4$*UA3B3!$0*Y.'VE>V"@`>3N\4XFSA!.(],G +M$FYP(`$'`"W")$1Y(*#I<3IW>G<#\$AVR7(9\+)N<"4`%Q3H@@MO\`'?`-D/ +M(0$`26E%>4"%3")`H$5Y(*4U;AEA?]S.(0$#R7(!Y@D.%1%G[R4+$2``&$`@ +M2'0(\!)L<"`#!P'D/T\4H@`"$7[B\H@0-.((('`-NO"Q6! +M%&IU>#)K'&6"A'`A#P>X8!:`Y7P&?("A`>/Q\1L,$2``V@?P$FIP(`$'`>(R +M>2"@]PH4@83#0"0$-2IP:G$`WN8-[__)$(&D`@`6H@ +MA0RX&6$,&D`@`!J`(\$!+_"FP,]P@`#TOD&``-L#\`'C&PL5`0'BRLG!NC)J +ME2!,`#1Y(&#M"!2!X'](<.!X\`P:"*+@/>#1HRLDT +M>03@`"$!@`*!*+@/?@KR*!&```CHSW"``.`V\""``XCHSW````,Q8@EO\$*" +MSW"``.`V\""``QUE<0$O\*EPX'@`W(?J9H"8ZR:@X'^`H6B`A.LHH.!_@*&! +M@4&#@GH9"E(`8*'@?RB@08$!A$)X$0A3`(ES@(/Z[""CX'X@H^!_@*'@>/'` +MF@@/\((D`S`(=9IQ`(C*"V_T>G`BA1IP#0EU`1`5%1"'Z<]P```/,=((3_"Z +M"J_Y`(6`X,PD(J`(],]P```0,;H(;_`@A:IPX+C1(&&`RB"!#P``&#&@"&'P +MRB%!!8IPR@VO\1#9`-_I<,X(H``AA1`5$1"A#1X@SW"``(RD`(#`@%IW0?`I +M%I(0/?`(B5D(40`$B2<(TP`C"5\@((4#ADD)`0`-"9X@$Y8/"-X#.0G>(!.6 +M-0C>`Q)O%'B#<,&@_]D@J".6"P]R$"2P]!C"@P'G[W^0Y\H@B@\``!4Q&`AJ +M\,HAB@3`A@?N0"8!&`F)GPB`A`\/4A"+(<(*3_0$\`\G`!!:<,]P@`",I`"`X(`"\."'-N]`)P(8*8H, +MC64(0@`(B@#9%0A1``2*C"##CQ;T3(\)"H\@*'`3\"ITAB3^FP7R$Y<9"-X# +M*G2&)/V7!/(3EPD(WP,`V`/P`=A`A2.'`-XP<@'9P'E`*98`4^B+<>EPR7*Z +M"R``RG,!YOGQ`-X0\!L.P107#9XB%&[/<8``D#XX8"*%=@^O\HIR`>8E#E41 +M`-@/((`#!"``A-$E8J(%].CHT0T>HL]Q@`#@/A1NZO$!!^_O@"0#,/'`K@[/ +M[Z3!.G`H=4`A%0%*(P`@SW"``"P7`!`4`&IP`_!`($`@_]]R=QIP>/)`*X`@ +M%'@P)0$@Y0D0`&D,$""X8`#;:G'I=.ERQ)`9#I\2P8`D%HX0$0[2$(GK2'0H +M<@AS'/``$(4`@^LH0A$3#,`3`KR4?'(D3A/`J""L +M!/``&,($>G$H=(AP((@2:11XN&"K"<&#BB+#+PHFP"1`+HX@U'Z^9@&&"G(C +M@`PA0*`!VG$5\`#!!)85"5$`'PB?`HJX!+9`)$`@"/`/")X"JK@$MD(D0"":<`HB@"4` +M%I80F0^!E87QW07O[Z3`X'CQP*(-[^\4V:7!"'8."Z_QBW`&AJ"`]@\O]`*& +M&G`*\"RY#0Q!$">3J+DGLZ"@H(6##1`0!I5_")``8@J@$`*%9(CO",Z@#Y#G +M"-Z#!I6&(/^%[_,AA<]R@`"(/@`A@`\````0P()`(@P"PGB`X"RXRB`L`'_> +M"2"/`T$O0!'5:,)_U&L5?L!D"PC/`P>5B+@'M1)K<"`#!TKK0(*!@T)\@.0L +MO,HD+!!">7D)4X``V;GQ507O[Z7`\<#*#,_OY!P(L!IQ2'=H=0HE`"'^#R_T +M"B%`(1_>!GY`)!+E?(.@ +M[0H4@1`FSA#L[A3P`,-2:02[`"2`,'IB8X!"<@D)$"!6@@/P0H)E>D.@4GI# +MH`'AW0D4@8'#0"0$,NIPJ'$`WNH/K__)`<(4@`CI0*%`B`! +M((#ARB`,(,3V"!T`%`(@@"4_N%(@`(`+\@02`"`+"($%`]@`I0/P`!T`%9$# +M[^^GP/'`0@O/[PAU*'<,B#IST!P(L$`E%1@$%8`@&G*,(,./RB"!#P``_@`$ +M\@H5@2`B>`(@``3"A4'`"(4HOB)P0"B4`@.5SWX-"!X!`<`!X$'``=A"P$HA +MP#``IP0?0!8$%8,@`<`3"P4`(H7/<```!3%2"R_P`<+/<(``X#;5>""`0\`' +MA0HG@"^``(@^"K@%*#X$3"``H``A4W``(Q8ERB&")9'I*@GO_ZEP)X4*N04I/@0G<`*G*(4*N3A@`Z<"V`"G +M"B&`)5IV-/``%Q(@`B+`)!<(4@``(X`O````"`(@@`0-"%,`:G9J<`;P`B:4 +M)$IV2G`*%8$@DNDEA1#I"KD`(%"KD%*3X$)W`"IRB%"KDX8`.G:P(@``H@`#4$%P(@`B*`(#^X +M4B``@`OR`!]`%@#8`:<#V74"(``*(``UPGD?"5(`!16!(`T($2`$Z0L5@"`" +M>8#A3@(A`,H@`34`V#.5C[A$P"1X0B`$@`#8CKA%P"1XRB1B`$(@`(!*<D(B!(`% +MPLHD8@!$>$(@`(`JH+P0(AP``U"`,% +MEB$(``(F0!`_N%(@`(`0\ESJ#O`")L`0/[A2(`"`"\#L\V)XU0@"A6*G"\`# +MIPC`&PC1`!<,A2\'``#P`!]`%@07`"!`(%,`0($(@!(`%P,HD8@`$>D(B!8``P,HE +M8@`J@N(*X`:<#AP(@0`0="%(`!!<`(`#; +M#"$`H,HC;P"`X\H@000#IP.'`B"8`,L)$0`")H`4*0A2``(F@!`_N%(@`(`$ +M\@/`0*`*\`&'$0B>``L5@""$Z`/`P*`#P".'P(`(A0JX'F8'A0JX!2@^!"=V +M`B9`$'\(4@`$%P`@10D!`((*#_3/<8``H,"3Z`45@""1Z!.5'PC?`\.G2($" +M)H`0#PA2``F!R*&!N`FA((8OI`L`!V0"G"!_`%`B%"KAB<`.G"?`!AR"'H;B#N`&G`_`@A\.G@^$! +MP`#>RB8"$)3I#"``M`T+40"`X,H@*P"&]HHCOP,((,```J(`V`6F08(5 +M"H4/````4`&&\"4`$``@4``#\!IP0"<`%;(+;_$0V0&&%7T`'0`4`88"I@2& +M!*>%!H_O\<#Z#8_OR!P(L"AU2@_O_UIR2G"2#B``J7'/<(``C*0`@,"``O#` +MAH#F4`4!`**&0"83&"B]>@DO]`.&KWTO(0$+``-A!P,]P +M@`#@-D3`M7A%P`"`0\`$%!$P'/`&P#$(T0`(P0>'(G@A"%(`SW"``(@^`8`0 +M<0P`#P`,CPT(40`)AR>G@K@)IP#8#*]`(5$@`L!%Z,]W@`"@P`*'!N@EAP/` +M,'`2``\`AL')<"IR`@KO_P#;!O`#V$;``\!(P`#8)X9"P`/`"KDX8$/`!L"` +MX';T,Y8(PL4)WP.`AXPDPY\']`G#`!]`%F6G1*0D)4@!$IR:'"<,"(T``/0A2 +M`-_Q1:#^X4B``@`0?0!8(\BR. +M!!(`(`\@0``$&@`@!L*#XD[S!\!$(#Z#[/(CEBT)7@$I"1$@)0B>`,]P@`"( +M/@"`BL),P$W`"-A+P`'82L!*<,EQ%@\O_P#;'!05,`43EB`-#1X@3R65(!P< +M0#4-#5X@3R75(!P<0#4#EN6XS"$AH`?T#PW>($\EE2`<'$`U$PD1(`\.$"`+ +M$X`@`B86($0E@"""X$HD0"`%P,(D`B4GA@"`"KD%*7X$*(8G<`JY`"$0`(;% +M2G#)<:ERG@XO_P#;,0T?(`.6"P@>`2D)$"`%P">&J7(`@`JY!2E^!,EQ)W!( +MP`'81\!&P$IP;@XO_P#;#-A'P`#81L!*)4`@!_`#V$;`2B1`($`E52#%#!$@ +MP0V%)0;`N0@1``G!SW"``(@^08"6(0@``B&``#^X4B``@.?U#!:8$`'81L`3 +ME@HG@"\```"`!"#"!4(B!(`$((`/````0,HD8@!"(`6`"W#*)6(`"G(6#J__ +MJ7,&P)OH"<("(@`$"PA2``P=`!0*@0@P`5"(`.`*KK*(V(`"W#V +M"R``"KH!A44@``,!I0;`D^@)P`(@``0_N%(@`(`'\@?`2B1`((&X1\!*<,EQ +MJ7*2#2__`-N?\9T,$2#/<(``B#X!@`(@``2-"%(`)!P`-`+81\`!V$;`J7(Y +M\`43@R"`X\PB8H`0\B.6Y;G,(2&@S"(A@`/T@KA'P%$(7@"#N$?`)/!%"E$` +M(Y9!"1X!/0D1((KK@;A'P,]P@`"(/@"`2<`4\"4)7@'/<(``B#X`@(K"3,!- +MP`C82\`!V$K`2G#)<0(-+_\`VX;"2G#),(,./0<&>\H'B#/0$$X`@@^`D!,O_!1.`((#@S"%!A)#T)X88$@T@"KE` +M(4`@!2A^``*&"1.7("BX!,(/>/`B``!*)@`@2(8`($$."KHZ8@#8C+@`(A0` +M`B$5`!07$!`"($`E/[A2(`"`5O("\*"%+NTAA0PE0*#V!\__*/!R#B`0`H4A +M$($`*0G"!2:5-0G>`#V(END\B"D)T@`F@`&%"KDB>`(@`2"`X& +M"K@`)14@`"04(`'8$?`"($`E@.#*($DEH(4([2&%`B1`(#^X4B``@-/U`-BP +MZ,]P@`"(/D"`#""`H!``#P#/<```%C%&">_O"G%*<`IQ2B9`(/X*(`#*`.F!84B>`2F$@@@`$IP@0"O[Z[`X'CQP&8(C^\( +M=<]V@`"@P`"&C"##CP*E"?0F#*`/!H4`V`:E!Z5=\%(+S_,AA0&`)GC6"Z`/ +M`:4'I0*&CNC/<(``C*0`@`"`B.@`V`*F)X4'D8&X![$BA@#8!>DIAN.YRB!A +M``6E!H4@AB*@!X4BH`6&)X4!X`&A!X4"V2:P!X4`V2"@)X4'D8*X![$GA:EP +M(8'F"2```]HGA:EPT@YO_P#:AH7/<(``B#X@@$&$QX4"(D``/[A2(`"`888+ +M\@(C@``/"%(`Y.`*]P"$$0X!$,]P```),>8/C^_F":__J7#U!T_OX'CQP'H/ +M3^\(=T(+;_\H=L]U@`"(/L"E`":"'P<``/!!I<]Q@`"@P,2AQ:'&H0`B@`\@ +M````!Z%(H<]P@`",I`"`P(`0\`*&*+@O(`<@W@UO_\EPSW&``.`V%2$!!`"A +MP(;R[AWO`-[!I\]Q@`#TO@"!XZ$!X`"AK@J@#P"G!J1@K@'L<6G10=/[^!X\<#.#D_O>G!(=`HA@"^``(@^`!$"(!IS +M`B&.`(#F++[*)BP0/&1AO$)\#0Q2$$$L#1,#\`#=`B&``#^X4B``@,H@@0\` +M``XQX`Z![\)]X6U!+E(10"I`(0(F#1#89V&X_^#*((T/```-,_*(LT#0"L`(14@@@1?"!`@0"$!(@`AD``M\+AG8;A)(,X'#PY$ +M$P(F0!,!X!@#8#R!``V&X +M`!`!(`9Z17D$&%`@HGX!YL)_`-T%\%8AP"(`()``UN\Y!D_O\<#2#4_O&G`& +M@)IR\!P(L"`0`"!Z<4'`0B%5`,]P@`"(/@"`#!Q`-4+!2B(`(`\)`0`+#!X@ +M!!B`)`#>!/`$%Q(0`>:!#I402B$`(`\AD2,+(0"E]_,2;@`D%C``%@\@`-@5 +M[P"'$_`(%@(@(8!">3^Y4B$!@`CR`-U2":`/H*>I<`7P((`(=RAP@.?,("*` +M[/6S"1Z@!I>&(/^%T?7/<(``]+X#@`#9!H`!@,=P!P#_[W)PRB%O`(#ARB+" +M),HB`2#!\2,,7B`@$``@#>@A@`(A004_N5(A`8`'\NX(@`\`V2`80"!*<#4% +M;^^DP.!X\<#^#&_O2B1``."!@("A@/%TP8'")`X!T74!V\![T74!W<(E3A,/ +M#,$3@./*(V(`"?2&[8#CS"0B@`3R`ML#\`#;%>L?"U``-PN1`("`H($!@`(D +M3),A@8"B`R!```&B#_``V`"B`:(+\("!H(`A@0(D3),!@("B`R$!`"&BZ01O +M[VAP\<`@@`7IJ@V/[P'8`O``V-'`X'X@@#!PRB$A`.!_*'#QP%H,3^\(==H/ +M[_\H=PAVXJ4>#2_RJ7"I!&_OR7#@>,]PH```'!P8@`]`````X'AL<`$(G@7@ +M?D"``_!`@@\(@`!D@BM[_/,"\`#:X'](<,]S@```P$:#".I"@D"@!H,#@`"A +M`=@#\`#8X'[QP/(+;^]\V?3)&+DE>/0:&+#/=J```"`''EB0`-T,\*EPD@[O +M_@#9J7`J#N_^`-D!Y:]][0T2D0#9"_``VL]P@0"8.C9X0*!!H`'A+WGQ"5*! +M`-@;I@`>@!\`#`\`"!Z`'P```/``'H`?_@```(H@"``"I@'8S!X`$&H*S_[A +M`T_OX'CQP&X+3^_/=J```!RGAA$-GA:*"R```-A&"0``#PW>%GH+(``!V#H) +M```1#1X7;@L@``+8*@D```\-7A=>"R```]@>"0``$0V>%\]P@```P`X)```< +M'H`?`'P``'T#3^\5V,]QH```(&$9&``(&8`/`P#@``G8'J$?H8C8T!D```09 +M@`\`!````-@;H0`9@`\`#``9X'[@>/'`S@I/[\]SH```(``;@`\`#`\`"!N` +M#P```/!^#N__"'4;@[A@&Z-L$Q```-D<\%)I57K'@G/_FX*(```V&X) +MS_YB"B```=AF"<_^6@H@``+86@G/_DX*(``#V%()S_YU`F_O"G#QP`H*3^\( +M=D/P"!<$$,]PQ>Z%P@P7!1``V7N%(@K@``IR-_`#AB"``H&\(4P``AR&' +M(:``H0#8`*<$'X`?K=X"``:'0"`-!B"%#0]!$)X-[_\"V0"E!H=`(`T'((4- +M#T$0B@WO_PC9`*7/=:```"!L%1`0(X=@>>EP$!<&$.[)!B:!<0`"```K>+_U +M'@WO_\EP"B<`D,;UK@CO_LEPS0%/[_'`,@W/_\]PH```(`08@`\`!`\`#!B` +M#P```/#1P.!^\<`R"4_OJ,$(=L]W@`"P"4^'`-@Z<0+9'PK>`L]Q@``P23^! +M0!>"$,#=1'F&(?\.(KDZ?0/P%-TH<+H7`1$*)(`OH```(`)Y$(<$X8X-H!4` +MVL(,[_\:<(+!@\(6"^_^R7#(%``@;!03(#V'`B,5(`(E4B#/<8$`9"9@@0#: +M(8$`(P.$`2&!```@P(`!(8$``B!`@X3%`R&!`$#`0<&+<(+!K@OO_ZER"'=. +M"N_^R7`*(0"`%QJ8-!@:6#4`&8`D#O($P%1I%0H%`,H+(`"I<$3`!O`B>$3` +M_0D$@+8-X!#)<(#@`-C(#>(0RB""`X+G&G#*)6$0$O*`YP+=P'\/](0N"!;/ +M<(``.#\P($`.`-V$X,HG01,#\@'?+._V"\__;!0#(`#:`,$"(\,$`<``(<&` +M`2("`$#!0<+^">_^R7"$+@@6SW"``"A!,"!`#A+H!,"!Y1-YRB4!$,HE0A#) +M<"H.K_FI<0\@@",>"R`1J7'IEPV@GO_@IQZ7`Z">_^R7'I<+X( +M[_ZI<>EPP@O@$`'9#-RO!P_O\<""#^__"'-'@`KJ=@_O_VAP`X`@@`*"(G@% +M\,]P_P___]'`X'[@>.!^X'CQP`T(40`6#D_Y!/`>#D_YT<#@?O'`#@\/[\]P +M@`!L/`"`!""`#P\``.`O*`$`3B!!!#`:6#`!W0\)D`'/<(``0*<.D"WH!MX& +M"._XR7#@N-$@88`E],X/K_C)<#`2`38(%K[$>!,(@`/UV`6X9@AO^$AQ,!("-@Z' +MP.!&``X`[LG0&EBSX+C*(((/Q>Z"1G`.H@#*(6(`7@RO^3#(#@Q/\4P0`"#$ +M>-%PRB""#P``]0#`*&(!'`AB^,HAX@$&\,]PH`"((%5XH*!E!@_OSW*@``!% +M.(($(;Z/```((`#8!?0\@@D)7@8!V.!^X'C/<8$`$#MB@:'!!".##P_\G_]3 +M(,(`%+HFN(8@_@=%>&5X`J'@?Z'`\<`$\-8(#_G/<*```$4>@`0@OH]P```` +M]O71P.!^X'CQP)(-#^\(=L]P@`#XJ-8/[_^BB`HA@"^@`(!$0!$`(,]WH``` +M148@`0U`&4`@!(<*((`O@`#,S00@@`__;__#!*<,AP0@@`__?__##*<`'X`? +M`$```.!X`-@`IQ-MI7@-IR();_&I<``0@"`-#0`03@@`%P`80B-`$0$@!2&! +M#P"`-`!`&4`@*>X7#E`0.0Z0$(H@6@I*#6_OR7$?\!"]C[V;O<]P@`!`!P"` +MG[W$N`JX!7VLIRX/S_^*(/\/'*<8IPWP$+V/O<]P@`!`!P"`G[W$N`JX!7VL +MIQD%#^_@>/'`@8`H<@"``-N2#B_OB7%(<-'`X'[@>`#8SW*@``!(SW&@`(!$ +M&*$9H1JAC]AD&AB`01J8CP!```!!&IB/`!```,]P@`"\!A!X%J'@?N!X\#_#P)X$302F``\*X +MI7@0=/'`$@P/[XH@$"``W<]P@`"P +M26"`SW:``,SU`X:MI@4H_@#/=*```"`[A,]R@`#P/4""+W!">3!P"B&`+Z`` +MB"#*($X#Q/<[A$)Y(GB)X\H@8@`(]$$HP0`FN`)Y+:8"V%IP`-]7\`L)40`@ +MDRBRH*@`V\]Q@`!PPP"!#R/#`VMX$!($`0CRSW"``&S#P("@H0'FP*#/<*`` +M`!TL@`0A`0'/<(``@`<"@#2R:WB981GT`B&`!%)QRB$-`,HA;@`,""@0"$1(0#=`>=Y#Q42KZ;Y#]"1#8:` +MX,PGHI',)^*0"_0PR`D/`1`)#Y$1`-@%\-(+;_[I<``1`2#O>L]S@`!4Q59[ +MA(M$AEQD'&3/H[I`">`'X``H*<@B(+A?_4HDF&3.WF`N61Y?/&T +MD@L-11"99:_Q-+*98:WQH*8$'@`8SW"@```@$8#/=X``@`<"I@*'6-D.I@#8 +MD;C)<@HD@`\``/]_9@Z@`!#;I*:AI[$"+^\*<.!X\1X-+_NI<.?OK@T@ +M``?830(/[_'`X@D/[[#!"'8#V!IPSW6@```$"*40%1$0#H7`X+_W`!8`0``6 +M`$!`P"#`G.#*(&(-]`%B[\\@(@.!P/(-(``.V004#S$*%(`P"Q2!,$#G"+DE +M>.2XP">B$`/G!">/'P``_/\.[@S`#.@%V16Y"*$MP`FA`\`,H1P9@`\`;`0` +M62<.$@/PA@S/^`Z%^PB$@R)WY*54'0`4#H4;"!0"%(5/P"_!G.'*(*(-A`EB +M[\\@(@,"P`0@@`\```!`A0$O[[#`X'CQP`H)#^]:<`AU"B2`+Z```#`*(X`O +MH```+E03%2`$%!:F2!,0(,]QH/X8"`78%;@DH`X/+_U*(0`@!?!*"^_QZ7`I +M[2\H00-.((\'[WDOR`*Y,"&.#Z``9"X0)F&! +M02K.`O_:"+I$?1B["+VE>Z>11'U(O:5[=*1D@61Z"KI5I$*!!"*"#P,``/XG +MEQ"Z17DVI":719\0N45Y-Z1`+`$$)7[8I`&`&:3/<(``G+KZ"8``%0`/[_'` +MG@_O[IAP"B#`H`#;#R,#``#`/>!\(TP<`W@\F#A`K?L]T@`"0O15\X(3O\V5_X*3P\8AP6@KO^DAQ%P@1 +M($PB`*#,)2*0X`KB\`1Z`-@.\"\K@0!.(X$'+WD0(D(`SW.``)"]\"-!`"5X\^II`0_]X'CQP*(. +MS^XH=@'-T&[^XD>(T!(`#_V.!XSW"``'!0((`H<(`@P@&4X"N_Q +M*'6:""_]R7`(=I8)[_JI<$8)[_'$>.4%S^[QP&X-S^X(=@#=#R4-$`#?SW&` +M`.BS`[@5>#`A$`"I<+H/[_\?V]7@@@`'G +MIGD@H/$/5)&)!<_NSW&``$QMX'\S(0``\<#/<*````0O@!4)%0).@#MY0W%B +M$0`'0G@(\,]P``#'(CX-#^\`V-'`X'ZGN`]X0"B!`O3))GCQ`J_R]!H8L*>X +M#WA`*($"],DE>-T"K_+T&ABP&WA#<&(0`0?/<*````0.@.!_#B!``.!X\<"J +M#,_NSW"``'A5`(#@@,]PH```""$8V(.`)P@0`-T=\,]VH```!*^F[:8O($`C +M`"(`-&(0``<`()`F#*9HN$@@`0`5;6X.[_>5(%T``-@)IF(0`"`#;!_``%H)` +M`>,!&)(`^0M$@.!^\<"^"\_N"'`!X`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0`!8`0`0?$!`` +M%@!`!!\0$``6`$`$'Q`0`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0`!8`0`0? +M$!``%@!`!!\0$``6`$`$'Q`0`!8`0`0?$!``%@!`!!\0$``6`$`$'Q`0`!8` +M0`0?$!"`)O^?$-VK]44#S^[@>/'`V@K/[@AU*';@N,H@@@\```(\!`LB[\HA +M0@,`V0?P`!8`00'A`AT4$/D)A(,9`\_NX'CQP/8-S__N#,_\`=G/<*````PQ +MH"6@P@[/]L]Q@`!X52"!@@KO^2"!T<#@?O'`9@K/[@AW`-X$\`'FT'Z"YA8! +M"@!*(0`@!O!`(4`@+R$(((4)DR""#B_ZZ7`"N-1X(G#/<8``L&\S(1``Z7!B +M#"``*G&$+PL2"'4R;A0A000`(8!_@`!L8+"@!X`Y<0C@,&`*)T`.`G!9<"\@ +M!A!*(P`0J0L1D`EPJ7'I"._S`-@(X``@@2^``&Q@1.%B<0"A +M`>6P?4$-TY"*(`L"#'\:<`HB@"^``.QA0"(`)C`@0`X*(T`N8.C/<(``E)H` +MB%H-+_HZ<`0I/B1S;I1M=GL`(D$NEGP&@9MC>6`(X1)NMGC'<(``;&!$X&)P +M(*#2\9D!S^[@>/'`/@GO[MAQI\%:8(,S"U$` +M"22,$``@@@^``,QA!N+*8@DB`@-R:11[A"T!%MMCQW.``*Q@'.,GH0M`1;:8L=R@`"L8!SB)W*`L@'@$'B]\6L(DX`@PAM@A"J!`'5[ +M%"!,`SMC+W)$+;X5SW>```@6@W0G`0>+_Q70V3$`#:!/`!XE!Z40J3 +M``#9$_`$B`D+`P!H<')J-'N$+0$6VV/'$P>3)Q&@$*`)$)L@(`V/$(DX`@PQI@A"N!`%5Z:KH4($P#+W-$+;X5 +M.F+/=X```!6#="=S>F)VC$IG/0V1$,]T@`!,'H"$,0Q1$`DC@P``(((/@`#, +M80;BRF()(L(`X0M`1;;8\=S@`"L8!SC)W-`LP_P"2.#`%)I%'J$+0$6 +MVF+'Q0@3`,[8R]R1"V^ +M%<]W@```%8-T)W);8U",:V<_#9$0SW2``$P>@(0S#%$0"2+"```@@P^``,QA +M!./+8PDC@P!2:11ZA"T!%MIBQW*``*Q@'.(GX0M`1;; +M8\=S@`"L8!SC)W-`LP'@$'B^\5\-DQ``V@/P`>)0>E,*DP``V1+P!(@'"P,` +M:'!R:C1[A"T!%MMCQW.``.Q@+.,!X2=S`+,P>=,)DX!`(@,%SW2````51"V^ +M%10A0`.#<"=S:V1AZ@J(QPL#@.#Q`>6P?1)U?`;,_RT&K^ZGP.!X\<#AQ:'! +M!@HO^BAU#@[O^8MQ(,`T;15YSW"``/0W(&`M!J_NH<#@>/'`X<6A@0WM)PU0 +M$"L-D!#/<```EQG>#>_NJ7$&\`'9(Z`DH`#9(J#]!:_NJ7`"V2.@`=GW\0+9 +M(Z`#V?/QX'BDX,HB*P"/]L3@RB)K`(OVY.#*(JL`A_:,($*%`]K*(BH!`-L. +M\'AC%7A4>,]T@`!H`7PSW`` +M`/]_T<#@?Z'`H<'AQ00@@@\````8*[H$(($/``,``#BY)7K/<8``E)J`B4$H +M@0//`DDC@P!ANX0L"Q(O<(0J`08G<,=P@`#L8'5X+!"" +M`"X0@``@\.BXTR"B``ST^KC3(.(`"/0=>,*XSW6``*3:"&5[8W5[:KL;8X0L +M"Q(O<(0J`08G<,=P@`"L8'5X7(@>B('ARB"!`!UX#WC!Q>!_H<#QP.'%SW&` +M`##,(($$Z6X(```R\`#:!/`!XE!Z60J3``#9^0F3@,]S@`"4FF"+%"&-`(0K +M"P+/$`&T0.,'G9\44$C^[@?N!XSW"``.QQX'\>@.!X\<`(<<]P +M@`"4F@"(SW*``#3,0()J:5!SP"&L`,PB3(#%]OX/3_,!V`+P`-C1P.!^\<"A +MP/'`SW"``)2:`(B,(,./G`V"\<]P@`"L +M>#J8SW"``#3,(*`J#Z_V!-C1P.!^\<#AQ<]U@``LS""%B>G/<(``K'@:F,[@ +MRB!J`$KV&PE1`,]P@`"L>!J8R>`%]@#8=@OO^@"E`(7/<8``Q,4.Z,]P@`!L +M5PJ(@N"*('\.RB""#___]_\#\`#8W0*O[@"QX<4&N``@#8'AQ@X`(P"H=((E +M`I`#\(`E`I#_V,`E!!!(O80J"P+3:Y5^QW:``&Q@)W:T>2BFSW"``.#(M'@, +MIA)KE'C'<(``K&$`($(.N+*")0$5O++!QN!_P<7QP`(*C^[5")4##PBT`*IH +M"0CT`@';`-L>80`6PA``((P/@`#L;4RL#A;"$%JL&>NZ81P2P@#/=X``#&Z\ +M9TBLNF$F$L(`0"$$"%*L%"1"`Q`2S`"T?YRO$1+"`%VOJA;,$``@@@^``&QO +M-AH"@[@6S!!$&@*#QA;,$%(:`H,1Z[QAU!3/$``ECA^``,QNX*[>%,P0BJZ\ +M8>@4S!"4KE8A#@H<9@H4S!`>9M8:`H,8%LP0@.//<(``3&_D&@*#M_*`(04( +MNF$&$L(`N&!2J+EA$!'!`#RHJ_!NN`\(]04=>P':"0@>``#:N'(3"'4%02B, +M`%,@?H`!V@+R`-HY<@`A!@!5(&Y`(H"?`5)@\3,R#"$^!W0*\!YO4. +M%)&4?1X5SA#/LJJ'Q7-$*NJ\A;-```D`@!^&D*#*'6`)0@0`"4$ +M$`P4P("8&@*`)0T0`%8A#PEX9P80Q@``(XX/@``,;Q(>@A%_9Q(7P!`>KAT) +M$!"893X0P(``)(X?@``L;PJNG65$%<"0$*YZ%,"`!JH;#1``*'"`(`8%,R#" +M```C@`^``(QO0*@C"1`0@"$&")AA`!#````D@A^``(QO#*J98081P``2JD$` +MC^[@>/'`B@B/[D+!SW*@`(`<`:+/,AHO<+!(#1P.!_J,#@>.'%[A(,ML<,'A3/=*```"#/=:``@!P$'8`? +MQ>Z-EYN$@:4!I2&E`HHAB@BX!7D#BA"X!7D$BABX!7DAI06*`:4'BB:*"+@% +M>0B*$+@%>0F*&+@%>2&E"XHJB@BX!7D,BA"X!7D-BABX!7DAI0^*+HH(N`5Y +M$(H0N`5Y$8H8N`5Y(:42B@&E%(HSB@BX!7D5BA"X!7D6BABX!7DAI3B*%XH( +MN25X.8H0N25X.HH8N25X`:4\BAN*"+DE>#V*$+DE>#Z*&+DE>`&E8:7@?\'% +MX'CAQ>X2`;9`(`P&5B"#`G4)W@3/<:```"#/Z1[CN!(:(\ +M@"&B/8`AHB"`(:(BD!"Y(:(CD!"Y(:*DD"60$+VE>2&B((0AHB&$(:(BA"&B +M((,AHB&#(:(B@R&B(X,AHB2#(:+/<8``E)IZ@"")"+ME>2&B&X`!HN!_P<7N +M$@&V*0G>!L]QH```(,]RH`"`'`0:@`_%[H3H.X$AHB&`(:(B@"&B`X`!HN!^ +MX'CN$@&V40G>!L]QH```(,]RH`"`'`0:@`_%[H[G.X$AHB&`(:(B@"&B(X`A +MHB2`(:(E@"&B)H`AHB>`(:(H@"&B*8`AHBJ`(:(K@"&B+(`AH@V``:+@?N!X +M[A(!MDD)7@?/<:```"#/Z,[#N!(:(A@"&B(H`AHB.`(:(D +M@"&B)8`AHB:`(:(G@"&B*(`AHBF`(:(J@"&B"X`!HN!^X'CN$@&V*PD>!,]Q +MH```(,]SH`"`'`0;@`_%[H-E.X$AHT&0()`0ND5Y(:,"D`&CX'[QP#X-3^X( +M=>[)HL%!"!X$SW"@```@SW:@`(`!L]QH``` +M(,]RH`"`'`0:@`_%[K/9.X$AHB"`(:(!@`&BX'[@>.X2`;9+"=X%SW&@```@ +MSW*@`(`Z#Z7N#"+IAI$5X`:0AI.!^X'CN$@&V!]HM"9X&SW&@```@SW.@`(`Z``&5YSW"@```@SW.@`(`<(:,;@`&C"/`)#!X0`((!HP3BG7SZ[.!_P<7@ +M>`?P!!`#!,]RH`"`'&&B@.%AN?GUX'[@>.X2`K8E"IX$SW*@```@SW.@`(`< +M!!N`#\7N@IE;@H4A/`!!HR5X`:/@?N!X[A(!MB\)G@3/<:```"#/Z"F3N!(:)`*`$"A[@%(8$/__\``"5X`:+@?H0H!0H`(8!_@`"DFBBH +M`-LC@&JH01`"!I8A&`!">0L)4@`!V2JHX']CH.!XL08/]X0H"`:*)/P?`"&` +M?X``,#])@.:Z!"(#`\HA@0`#\E`BP0'ENL0A`@/DNM`C8@'CNM`A(@%W&-@` +MX']X&%@`X'@(<@0@OH]@````,,C/<8``0*<`((,/@`"@IQ1Y!?++R1R0%PB> +M`@0B@@]A````$PJ!#P$`````V`"Q`=@<\*#-RQ("MAL(W@$!B3(2@@`-"($` +M`-@!J?/Q`>`!J0OP`(DQ$H(`"PB!``#8`*GG\0'@`*D"V.!_`*OAQ0#:_]P3 +M:15X`""##X``_[.`JP[PSW"``%RJ2V``(H`/@0#P.39X9*A@J`'B3WKG"A*! +MX'_!Q>!^X'CNR3T(7@//<*```"#/<:``@!P$&8`/Q>Z$5AN``:'/<(``L`D/ +M@`&ASW"@```F$H`!H<]PH```$!F``:'@?N!X[LDU")X!SW"@```@SW&@`(`< +M!!F`#\7NA6@;@,]R@`#,)0&A`((!H06"`:$$@@&A$Y(!H>!^X'@(!L]SH```(,]TH`"`'`0<@!_%[H02>X-AI`&D(:1!I.!^[A("MB$* +M'@;/Z#LUN"0:,!HR&CX'[@>.X2`[8C"QX&SW.@ +M```@SW2@`(`!L]QH```(,]R +MH`"`'`0:@`_%[H*W.X$AH@&BX'[N$@*V4PH>!L]SH```(,]RH`"`'`0:@`_% +M[H\8>X-AH@&B`)$!H@&1`:(!@0&B`H$!H@.!`:($@0&B%(D!HA6)`:(+D0&B +M#)$!HAJ)`:(;B0&B'(D!HN!^[A(!MA\)'@;/<:```"#/Z" +MM#N!(:(!HN!^[A("MB$*'@;/Z#M5N"0:,!HR&C +MX'[@>.'%[A(-MHAT+0T>%@B\A7D(N45Y"+EE><]RH```(,]SH`"`'`0;@`_% +M[H,06X)!HP&C(:/@?\'%[A("MB$*'@;/Z#%%N" +M0:,!HR&CX'[@>.X2`[8M"QX&SW.@```@SW2@`(`X2#+8G#!X6SW2@```@SW6@`(`2UA(" +MMDHF``#J$@.V80>O_PHG@`'@>/'`X<6AP5EP.7$9!T#`SW#%[HC%`=E)/'`X<59<#EQ +M&7+X<^X2`;:H<(ATR'4I"1X'$+T(N`5]SW#%[H;*`=E)/'` +M"'0H<^[)F'+\N,H@@@_%[H3$RB%B`'`.HO_*(@(#T<#@?O'`"'0H<^[)F'+\ +MN,H@@@_%[H3'RB%B`$P.HO_*(@(#T<#@?N'%[A("MCT*G@'/Z%:KN%!7NAI&&D(:0F@DSB(:3P(@```:3@ +M?\'%\<#AQ>X2`K8(=)<*'@//<*```"#/<:``@!P$&8`/Q>Z%4QN``:'/<(`` +ML`EO@&&A@:'0R0&ASW"@```,#8!"(``(2"````&A40P1$C,+W@($&8`/Q>X% +M6X'<"+P,\')L%=T3O?`E`!,$XZ-C`N00NV5X`:'K#@7S```)@0[P!!F`#\7N +M`V//Z*XQN`SW*E``"!`:'/<(``N*D'@`&A`8(!H0*"`:'/<(``<`H"B`&A +M[0>/]N!X\<#AQ<]Q@`"P22:!"0G>`KT($`#/<*``@"0B@,]R@`"P"40A`P,` +MV.X2`;8/"Q$"G0D>`E';"'$5\!L+$0&1"5X"SW&``'15@(%AVPCD"'$*\'T) +M'@+/<($`9"8@@%#;`8!(=`B[!2.##\7NC`#/=:``@!QAI7Z"8:5]@F&E;H)A +MI<]S@`"XJ6J38:5P@F&E3X)!I6&40)00NV5Z0:5!A&24,+H0NV5Z0:5#A&B4 +M,+H0NV5Z0:54E&Z4$+IE>D&E(:4!I>[)\[CX#L+_E00/[N'%[A(,MBD,7A'/ +M=*```"#/=:``@!P$'8`?Q>Z%.9N$#+F!I2&E`:5!I6&EX'_!Q>'%[A(,MB<, +MGA'/=*```"#/=:``@!P$'8`?Q>Z%:9N$@:4!I2&E0:5AI>!_P<7@>/'`N@L/ +M[NX2#K8M#IX0SW6@```@SW2@`(`Z$Y!N``:+/<(``R,5M +M$($`1"D^!R=P)I`AHB>0(:($@`&BX'[@>(;B"',`V@KRULDLN,2X`K@P(((/ +MH`"T+L]PH```(,]TH`"`'`0<@!_%[H4R&X`!I-;)`:0`@P&D(:1!I.!^X'CQ +MP`8+#^X(=.[)HP@>`,O)?)!$(P`#$0@1`N:[0]C*(&$,`_`PV`BX!2"`#\7N +MCP#/0&E(:7+R2&`5B`" +M!"&E*8(AI2:"(:4G@B&E0"`!#L&1@)$0OL5\@:6!@221,+P0N85Y(:5@$`$! +M5!```1"Y)7@!I1J#`:70R0&E$X(!I12"`:7NR?.XY`["_\D"#^[@>,]PH`"` +M'`08@`_%[@$$!!B`#P4`XF'@?O'`X<4(<<]P@`#,TBU@C"7#GP7RC"%"B<7V +M_MAB"F_NB[B1`B_NJ7#QP!(*#^X(=>"(P8"$Y\H@A@\``!(T0`IF[LHAQ@.$ +M+P@6`"&`?X``,#\A@`'<@>%`@""%P'Q0<0';P'N'>X'F`=S")`$3SW````$T +M@..5>`P*0NXE`@_NX'[@>`#:`_`!XD$H@0#]"D2`X'X+Z8"XSW*@```@,*(! +MV0<:6(`0V2"BF08/\>!X\<",(,^/RB"-#P``<`.X`4WN(-O/\CT-'Q7/ +M=J```"!L%A`0%/`XAW8);^Z*()H*#O#/=Z```$6XAT(,S_<;A@(@``3C"(./ +M```0)^<-'I5I`0_N\<`&"0_N"';/<*```"#[@'X([_S)<`7=%;T+A=$:&+`` +MV`NE&O#1R0NESW```$0A1`F_D"]C%R8#@RB"A +M`NCSX'[@>/'`%@A``,X+#^BV"&`!`MC%R0?H`-C%&ABP\/\=\,]P@`"(]@"` +M"(`)Z,]QH```(#N!;@RO\.'/#_#/<($`Y!(-@(#@RB""#P``+##D`$+@+@RO +M\.'/X@]@``#8_]G/<(``B/8GH-'`X'[@>/'`X<7/=8``#/;L'$BSSW"``#3V +M0<#/<(``4"="P,]P@`!8)T/``=A$P`#8!]D,V@+;"B2`#X``8"<*)8`/@``X +M*$HF@`M:#._H^'#/<00`2`2F#N_HJ7``V`AQSO^E`"_@I<``V,4:&+!Z\2AR +M#WG/<(``#/;Q!,_HX'C/<````C!%`$_@X'BI`@_HJ0(/Z/'`X<7/=8``B/8! +MA4(*;^0"@`AQ`86B"B_H`8!5``_@@0<@`0+8X'CQP-8/S]_/<*```""[@/X/ +M+^0+V`X-8`"I<`HF`)#*(($/``!',/`/(>#*(8$#`H:,(,./$?(#A@#9`B!` +M@\HA;P"`X/'`4@H/Z#H/(`$"V,7) +M!^@`V,4:&+"1_P_PSW"``(CV(8`"@8P@PX\'\L]P@``8*.X*K_`C@8(.8``` +MV/_9SW"``(CV)Z!1\?'`SW"``!@HK@J/\,H.(`$"V$?Q\<#AQ<]PH```(+N` +M1@\OY`O86@Q@`*EP(H",(<./&_(#@`#9`B!`@\HA;P"`X``(CV`8>`X,H@@0\``#XPT`8!X`'8SW6``!P]`*6, +M(?^/2B``(`"'!O0!@%8)X`$`V1YF`(?/<@0`@"$!@'X)+^C)<<$&[]\`'0`4 +M\<#AQ<]U@`"(]@&%H@AOY`*`"'$!A3()+^@!@+4&S]\!V.!_Q1H8L/'`-@[O +MWP#9QLG/=H``B/:AA@;H`(8'@`&`"_#%R8#@RB!!``;RSW"@```@&X`!V0GI +M`-G&&EBP:@T@`,4:6+"AADH)#^C/<*```"`[@`*%C"##CQ'R`X4"($"``-G* +M(6\`@.'*("$`UW`````0!=C*("8!`O`!V"/_*0;/W^!X"0$/Z`'8X'_%&ABP +M/0,``%T!#^BM``_H\,]Q@`"(]@#:#_`4:D`@#`16(<,#FV,X8'Z@AA`# +M`0'BH+N&&,0`C")#C['W`-C/A"J'M!V_PX<_@>/'`X<7/<8``B/:C@8#ERB"!#P``.C"$!`'@`(4#H:EP +ML@FOX1#9!Y6`N`>U`-@`I:4$[]^I<.!X\<`J#,_?"B4`D"+RSW:``(CV)(9` +M@0/I!NK/<```.#!2#`_@!(:@H*2F$?`'E>"XRB"!#P``2C`P#"'@RB%!`P>5 +MH+@'M:2FH(7R[4D$S]_QP-8+S]\`W03H1Y`/"A\`SW```"DP_0,/X&D*7P#/ +M<:```"#[@<&`00J>``:0$0B1`,]P@`"(]@"`H8`6[9H.#^2`X`#8"O3/<(`` +MB/8`@`&`8@Z@`0'9`G[/<8``B/8`@<2@`('$@`(FP!,1"%(`X<\.#V_PR7$` +MV`CP`=@&\-X.;_#ASZEPM0//W_'`1@O/WPAV*+@/>`2X%'@`((T/@0#H!B45 +M@!`)Z,]P``!R,,EQ<@LOX"P5@A#/=X``B/8`AR:`)^DCE0D)7P*BAP/PJ(`: +M=03P((4:=2AU".TBA?<.09`FE>.YRB4A$(/M`-@\\""%!X`C"0$`W@T/Y(WH +M`(``8`B>`\(A0\'``#P`=@J\`*'-0T!$`>5AK@'M0*'@.#*(($/```] +M,.0"`>``@`*GL_^W"%&`SW&@```@.X$Z#F_PX<_3\0"'2(`@A0L-@1`HH`/P +M`!A`(`#>P*6I<)/_R7#-`L_?\<#AQ<]P@`"(]B&`0(`@H$&@@.'*(($/```\ +M,(@"`>"F@:*@!.T'E1,('P`B@<]P```V,((*+^"I#* +M(8$#F@Y@``*&&G!`(`T"_A4`D6,(WP%`)0\88H\\C5V-,',#C\P@C(#/]AB[ +M$+D(N"5[!7O!V""%!K@&"B_@97H\C6*/!Y8+")X!*PM!``OP)PM!`"./'8T? +M"0$`_A4`D1<('P$&$``A4R!^@#@*H@#*($(#X0'/W^!X\#/<(``B/8D@$"! +M`^D&ZL]P``!#,%8)#^`&A0?HR7'B_P#8!J4'I0B%!>C)<=[_`-@(I?_860'O +MWP*EX'CQP.(([]\`VL]W@`"(]L.'2'40\`>6`>7@N,H@@@\``'@P!`DBX,HA +M@@,`ALER"';R[@2'$'+^W,PE`9/*(((/``!Y,.@((N#*(4(#_0#/W_'`C@C/ +MWQIPSW:``(CV`(8!W2:`XH`/Z4>1&PH>`$*&$PF!`$B`!^HA@2#@J@E@`*ER +MSW"``#0]H*``A@IQR/__WHH(+^0+V)H-(``*<"*`'PF``QL/01#/AU`._?J7#@>/'`$@C/WPAU +MA>#*((8/```C,$`()N#*(48#SW:``(CV((8'@8#@RB"!#P``)3`D"`'@((8! +M@0\@0`,!H0#8N@OOYP\@0`,Y`,_?X'CQP,8/C]\(=87@RB"&#P``)C#T#^;? +MRB%&`\]V@`"(]B"&!X&(Z"&!SW```"@PX@_OWZER((8!@1`@0`,!H0"&)X`` +MV`\@0`-R"^_G(8'E!X_?X'CQP&X/C]_/=H``B/8AA@AW`H$-"-```(8`@`"A +M.O\`AJ&`YWT$\,__$"7-$P[M+RA!`TX@CP<`AN]_`8`1(,"#Z7#S]=K_\O&- +M!X_?\<`.#X_?IL$(=P:0&G&`X,H@@0\``"`P1`?!WR>71"$^C\H@@0\``"$P +M/`_!WP>7GPB>``:71""-`-((+^3I<`:790A>`,]V@`"(]@"&1X!0=\H@@@\` +M`%@P%`_BW\HAP@,!V!IP((8+I@6!P8$/Z`*!&PC0`-H.[^,+V(?HSW&``(CD +M"G``H0/P`8>!_PKH&@IO\.'/!]AN#J__(H<$\,EPQ?\&E^"X$?+/=H``B/8` +MAD:`4'?*(((/``!O,+`.XM_*(<(#`-@+II\#``"&N`>W1@M@``*'_A`!@>>Y +MW`("`$>7`-QFEPIQ.G3^">``F'0F"V```H`%DE`Q*?DR&'3R0`$5V- +M'[.`XLP@(:`5]$\D`A'L]S@``L%P"#8;@`HT`E`Q@"BXP@@X]$]@'@ +M`JL#&T($"0I>`0'8`ZNI<,8)H``*`%DE`A(?DB&'I+@?LA^2J;@? +MLA^2J+@?L@*%`GD5"5(`+Y4-"1\#)84*N3A@`J4FET0A``P3"!$,SW```%,P +M@@WOWT*'!I?;))'@;\I+HG@Y@`#F`!R7"+Z``1`B#/<```=##)<=8,[]]!@@^5 +M[[AT#.'_RB"!`P:7X[C1(&&!2/+$C0#9SW"``(CV`(`/(8$#`8`*(8`O```` +M@`MY]LDD>!ORB^@6#F`!R7"'Z`(.8`')<"^5!.@OE54)W@,$(4$$@.$!V\![ +MSW```'8PR7%Z#._?0(4<\`?HU@U@`7Z+C<"^+_RB""`P>7`-X(8``"A\]QH```(#N! +M0,'/<8``B/8@@8#ARB"!#P``'C#T`\'?((%!P2"``8!"P4/`!I25X1,`FEQ0<`#0EN<"Y!;DE>$3`BW`8V5H( +M;^XJV@>7"0@?`0#=5_#/=H``B/8AA@`6%!``$1$`"!$2``@4$R!."&```HP"&`-T9"`$%`H`5",$$(88`@0T(000"@0<( +M@`0!W:EP^0*OWZ;`X'CQP(X*C]\:<`HB@"^@```@;!(8(.X2`;8`V/"YH<'* +M)P$@#?(*)X`OH/X@`<]PQ>Z"=@'9K@HO\>IR"B&`+X``B/8$$0T@`!P`-"*% +MBB;#+])QRB!"`R@)XO_*(0($BW9<_MX(H``*<%X/8```P$HE`"``%!,PSW.! +M`.021&NJ<0+P`>$3"14!$FD4>`!B>^A*)4`@)?#M@PHD0"4'\``>P!0!V+IP +MFG#@AQOO*!>`$(?HSW```$LP/@KOWR*'$Y?I"!^#)(<"(<`$UPA2@`\,$"`` +MAB)XSPA2@""FX_'O#1`@;!(!(`#8$G'*(&\`@.#*(0$$SW"``"P7`(`D&4`@ +M@.#8#$(``,%`(0`EA@OO[ZER`H6%"(`%_@O/XR&%"'(D>!!QRB""#P``3C#0 +M"<+?U@OOXP*%C"#_C\H@@0\``'HPK`'!WP*X0W`*$`$&!H5'A0&`(G@#I0&" +M!*4FDA,)7P#/<```7S"6">_?0H('A2"`".G/<```8#"&">_?0(66"^_C`H4G +MA0AR!H4A@0&`C@M@`66%&_`(A1GH`O`H<""`_^G!@$`E`!@!YLEQ2@H@``#: +M".@$$0$@`H'2<,HE0A`%\*EPR7'M_>[)&P@>!&P2`R#/<,7N@W<"(P,&`=D" +M"2_QZG*I<.D`K]^AP.!XSW*``(CV!N@B@":B`(`%\/_8!J(`V`6BSW"@```@ +M&X`(HN!_":+@>/'`SW&``(CV0(&*(/\/@.+*(($/```U,+P`P=\F@AGI)Y$O +M"1X`)X($Z4>1#PH?`,]P``!0,*$`S]\7"E\``8'/<:```"`[@2)X2"```-'` +MX'[@>/'`X<7."^_C#WW/<8``B/9`@2*"#W@="$$``8(5"$X#X__7<````"#P +M#FW_RB!M`HT`C]_QP`X(C]\(=Y8+[^,`W<]V@`"(]D"&#WAB@N]_`-F!@@\A +MP0,D?,]QH```(&P1$`!+",$`(^P'@@&``B``!#\(4@#._PAUXH8"\."'%^\` +MA@>`*P\`$`:7\PB>@*H,(``"A_X0`8'G"=^!#Y#?"-Z#H8<")0T42"4-$/D' +M;]^I<,]P@`"(]@"`!X#@?P&`X'C@?N!X\<"V#Z_C"]A*#F__"MB3\?'`:@]/ +MW\]PH```(/N``-W/=H``B/8`A@#92("`XLH@00`A\B:`%NDGD2D)'@`BAB#@ +M08%0=P#9RB%O`(#ARB&"`,HAP0-N""```-H%?0OP(8(@X$H@0"!:""```-H% +M?0IPV.@#[0#8&_``A@:`?>@'D/<('H"BA@3M!Y41"!\`SW```"HP+@^OWZEQ +MJ7`!V>_]Z^@"A@GH`(`"IK_\:P@1@"T'3]_/<```/3#]!H_?\<"R#D_?"B8` +MD!IQ.G(`V%IPSW6``#0]`*4$\@"&A^C/<```;3#5!H_?(8`"($`@/[A2(`"` +M2G`O\B7P=@L@``*'`=G^$`*!$0D0(!$*'@$&EX8@_X4$\BAP`_``V.>ZS"!A +M@`STZ7``V^)Z$&'`B"!(#^Y +M4B$!@-3U>09/WP"!`*8`'X`4Z7!]_`"%[?'@>/'`"@YOWPS9K<$`WTH*K_"+ +M@`B@`^!`.@2086`@)T*`(//=H$`Y`9@AN"[RB("`P+T0*!@A@L+ +M7P!BA6&@".I!@(;J!!B`#P```%``W0\E31"E?[7Q1R#`(Q7P+RH!`$XB@0=R +M:71[`"."#X$`Z!)@@@?K`-M@HF&B#R=/$!`@0`#NZ`#=3,6,P(H,;^<$VD-%)%V"$_O&G``AGL(7P!W")0@_]X`W@O*@$`3B*!!X0I"`;/9B"F6-D"O_1_ +M^&`@H,]U@0"(!A:%$G!`"T+_6!T`%*T$;]^MP.!XX<4(L$&X0/``#__^!_ +MP<7@>`GI`($`H@*!0*$HN`]X`K((\""`(*)`H`0:A`\``/__(((&Z0*"*+@/ +M>`*QX'[@>/'`V@M/WQIPSW:!`.02#X:`X,H@@0\``!PP``2!WR*`*+DO>4`F +M`!_:_PAUXH`F"2_A,-D!;P]X!">/'P```/_E>$`H`28E>`*E+H8"\`AQ`^D` +M@?WH0"8`'JERW?\OAA"&$''*(($/```S,*P#@=\#E48@P`"`N`.UQ0-OWT`E +M`!+@>/'`7@M/WPAV02@-`J]]P.7*((8/```_,,HA1@.("Z;?RB*&`Q1M%'@` +M((T/@0#H!D*%%0Z`$,]P```=,,EQ=@NOWV.5A0-OWZEPX'CQP.W_".#1P.!^ +MX'CQP.'%_/\(=?X0`(%3('Z`"_0@%8$0SW```#`P)!6"$#H+K]]AA54#;]^I +M<.!_.+@HN.!_#WC@>`(@0P`7"U(`$PJ4``3P0"J#`GEA,'#Z!\__X'\H<.!X +M\<"F"D_?*'8:<@#?Y_\(=03N)84+#D$0Z7;I<1_P"KE9)0\2'Y=*)$`!Q:5* +M)4``)P@?`<]PH```(!N`0H5`+H,2(GIY8ID@!`#)H=HAQ +M%P@0(`:%#P@`!!@=`!1%(8$!`=Z`YI@.8@#*($(#D0)OW\EPX'CQP"X*3]\( +M=2AV?(A%@(#C)H#,(B*`S"$B@`;R$PM0``\*10#/<```:#!:"H_?+@SOZ`&% +MB.@@A<]P``!I,#H*K]]!A0^5$0@?`R*%R7!%A<3_`J5%`D_?\<#&"4_?"'4H +M$(``6G'!"!```Y7!N!,(4`#/<```43#V":_?(H4SE0HA@"^!`.@&,-\O"1X# +M1H5!*@`"#WCL>``A3BX#EL&X$0B0`,]P``!2,,X)K]\BA0.6AK@#M@*%SW:! +M`.02*+@/>.QX&G``(4%T`Y'!N!,(4`#/<```+3"6":_?(H%`)@`>"G$^_PAS +M`-D-A@3P0(`(<4AP!^@I$XP`*1""`/,,@Y!`)@`=:')%_P.3".5&(,``@;@# +MLZEP2G&Z_ZEP;@U@``'950%/W_'``@E/WPAWSW"@```@VX#/<($`Y!(.@`7P +MH(#)<<7_J7#]Z(#GP`\"_T$!3]_@>/'`U@AOWPAS*+@/>`2X%'@`((T/@0#H +M!@.5P;@H=B<(40!"A5!SRB""#P``*S#P"*+?RB'"`,]QH```(#N!J7"P_X#F +M<`\"__D`3]_QP`[_SW&!`.02"'-`(0`.+H%H__`[/Q +MP%X(3]\(=T$H#@+/?A1N%'@`((T/@0#H!D*%&G%0=\H@@@\``'`PA`BBW\HA +MP@,#E<&X%0B1`"@5@!"&Z,]P@0`8$\EQYO_I<`IQT?]U`$_?X'CQP!((;]^8 +M<,]U@0#D$BV%"/`B@2BY+WE`)0`=V__)<0[I*!&``,"!^^@#D<&XYPB0@,]P +M```O,!$`C]^(<+3_/0!/WT$H`@)/>G1J='L`(X(/@0#H!B@2@P``V03K8H() +M",``*'`(\`.2P;CY")&`*A*``.!^X'CQP)H/#]\(=BAUP.'*((8/``!E,,0/ +M1M_)<*EQR_X(<\]U@0#D$C"%0"4`'VARU_YPI0.31B#```.S`-C)!R_?*!L" +M`/'`4@\/W\]QH```()N!`-D@&$(`62`-`C^570F>`<]Q@0#D$FV!!?`D@":C +M8(,DZS.3_0D>@\:#0(#U#H&01(/"@%YFQ*-?E2$*'P'CDT6`"KH5#Q\1Z(,* +MO]]G0G^"?PD/4A!"?L2C3Y#!"A^#K+DSL][Q0(!!*@X"SW[`YLH@A@\``&8P +M&`]FW\HAA@,?E14(G@*JN!^USW&``"P7`(%AN`"ASW"!`!@3R7'$_PT'#]_@ +M>/'`F@X/WQIP`-W/_@AV0"`/`NEPZ@I@``+9`Y93($$`&0E1`"@>0A-!*`$B +MSW"!`!P3+WFU_P3P"0F0`*EP!_"'N`.VZ7#"_P'8M08/W^!X\#*((8/``!5,#@-9M_*(48#SW"!`.02MGCQH$D%+]_2 +MH.!X\<#*#`_?`-X*((`O@0#D$C00#R!Z=@CP`-E`(``MZ7(K_N"%..\I%X`0 +M`BCN(I!`.02`-X*\#)N-'D$;SA@4@GOX`S9`>;Q#A21K:>N +MIT`@`"$/IT(G`!LE!"_?$*?QP,(+#]]OD`AV*'67"Q\#(A:`$#\(40`#AAWH +M8H8*N'A@EB`$`*)X/[A2(`"`"?0@AL]P```G,-X+;]^I<@*&$'7*(((#V`\B +M`,HA(@*BIBGP'(Y/")(`0H8)\`6&"K@:8D*F`_#Y"QZ#`B6`$`\(4@#W#@3P +M````"`(E@1!!*<`'4B``@`;R&PF$#P````@0NR"6SW```"0P97EZ"V_?J7.- +M`P_?X'CQP!H+#]_/<*```"#;@,]P@0#D$JV`!_!`)0`2R7$T_J"%_.UA`P_? +M\<#&"B_?%-FJP?IP2B``(%(([^"+<(7`2@COX!39"G$9\(HB"`9,><]P@`"P +M0%4@0P)X`J6I +M<&X.(``$V3X4`"$5"!X!(H4"(<$%#0E2`(BX/AP$(`\B4B7`AB_N$Y;]"%Z# +M`Y8,%I40#0C>`JNX`[8/(%`E0"V`('`@`0>#Z06`;.B$+0@F`"&`?X``L$`] +M@%R`0"8-$EEA!!61$`6%%PDR`$`HE@(H=Q4.PZ,")X\5_/$S?_KQQ@O@``4@ +M@"1*<)H,X``!V94!+]^JP/'`>@D/WPAUSW"!`.02S8`;\`#:!88DA@JX:(8X +M8$`KC`*88%A@QW`0````L7`8``\`$+M"AL]P``!C,&5ZD@EOWZESP(8C[A.6 +M_0@?@P.6'P@>`1L('P(DAC!U$@`/`$*&SW```&LP9@EOWZESSW"``&P\*8!2 +M(0$`!+DX8"2`R>E#@`*``GK&\5T!#]_@>.!^X'C%!\_^\<">#,__^@L/_P#8 +M`_`!X`]X_PA2@='`X'[@>/'`^?\V"`__^?'@>(D'[_X#V.!X@0?O_@'8X'CQ +MP,(,3^//<8``B/8@@2*!C"'#CPCR#W@-"0$``MAN""__*VC=\>!XSW"``(CV +M`(`A@,]P@``T*`"`)'@0<0'8X'_`>,]T@`"(]F"$`-EA@P':#PL.``:$C"## +MCP/T*'`"\$APX'[@>/'`/@@/WPAW`-T=\!1M%'@`(($/@0#D!@61P;@E"%$` +MT(D1)X"3RB""#P``&S!4"&+?RB'"`\EP`-G^"N__*'(!Y<#EI/=A``_?X'CQ +MP.'%"'(H=0*X%'C/<8$`Z!(`88#@RB""#P``&C`8"&+?RB&"`*EPX_]!``_? +MX'B5!N_^"]C@>/'`M_^2#\_^=?'@>($&[_X(V.!X\<":"V_CX<4(=83@RB"& +M#P``<3#4#R;?RB%&`S)M-'G/<($`Z!+Y!^_>(&#QP%8/S]X(=RAVFG*Z!V`%!FE!H%3(`(S&J4' +M@1"Z&Z46@1RE"('/<8``#+X=I7P9@`K/<*```$4>@,]UH```((`9``#/<(`` +MC+X$&``+SW"``(R^"!B`##J'(Z#/<8`````D@22@+R&'!0BY)7HO(<<%17DE +MH,EP7@[OZ2;9!!^`'\7NIY$;A0&GR7!2"J_P)]G""\_P+0;/WO'`P@[/WJ/! +M1,!%P<]PK=[OOFD@``"*(A``SW&@```@0Z$%P8#A!/1"P`;P@>$&PD+"!?=! +MP$#`!_""X0?"0,+"]PC`09N1(+ +MC^)I!0_N\<`J#,_>I<$(=7IQ[LD:`AS$;Y`)0$8`(GE?A"XA(G%>`B\!7P#A0@5!Q!`P`2%P8E!P`6%`!4%$$+` +M#Y48%0000\`#B4`J`B3]C1BX$+\BB>5X"+DE>#R-!2("!"5X1,#/<,7NC)4! +MV04C0P1`+(0"X@MO\`4F!A/Q`^_>I<"8<0#9*'(H<[#QX'CQP)8+[]X!VP`6 +M@4``%H]``!:'0``6B$!$(+Z31">"$\!["B#`@,E"V4`S'"`@$PE`(``@L<@`@/%(`$#`*+G#1^0`!8" +M0/#Q`(!@@B\-$8!E>);Q$0^?$0'8`-GJ"N_F"'('\`/9SW"@```$*J"1`L_> +MX'BY`L_FM@K/YD4##^[QP!H*S][/<*``)#"M$`V&!A`.A@#8.@KOYJ@2@;`X +MV.H2`;:I!X\<#F">_>`]G/<*```"`;@*7!1,`2#N_O +MBW`@P0$4@C"#XZ`FP&E!,`0 +MN0&E`12`,"5X`:4"P`'!`:4AI0#>"?"#P,H-[^\!V0/``>8!I2#`8[CQ#@20 +MA,#."._F!-G9`>_>I<#/<8``Z#3/<```FB&9`2_?(8'@>`?9,!I8,,]PH``` +M!"^@`!8!0,]PH`"`+-8:6+`PH``6`$#J&ABPJ!>L2!+;/<,7N@W'6$@*V`=DN"6_PZA(#MJD2@K``V(MQ#PIR +M!$#`C"+#CX?VSW"``)@N\""``(/H`=D=\!T*4@2.(L,/SW"``,P[SW.``-`[ +M\""```7PSW.``-PN2V.H$H*P$0K#`/`@@``$Z`"A`-D#\`+9@.'8""+?RB`B +M#L]P@`#4(0"``,&`X,PA(H`(\@?8"KC`V1BY0@KOYSMZ`,!`>(#9SW"@```< +M)*"AP-'`X'[QP.'%SW6``(BD((4E>`"EL@@OXQG8Y@]O\`"%M0#/WO'`.@C/ +MWJ(+;^H(=PAVSW6``(BD`(7F>,(/;_``I0"%ANB`YHP)(N/*(&(&=0#/WID' +M3^J1!T_J\<#/<*```#`#@."X&`J"ZM'`X'[QP.H/C][2"```"B"`+X``@!X( +M=0`0`"`%Z&X/3^IF#T_JBB`0`,]VH```,`*FY@M/XB6&"(92(0$`N;@(IN"Y +MRB"B`$#TSW>@```@!1^8GP`(``#N"@``'!Z`'P"2`0!>"(_M-@\/XQ38U@MO +M\(#9&X<-"$0#.X>B>0CP&X<.)8$?_____QEA`!`"(`#8">K// +MWGS*`>#%`B``?!H",/'`%@^OW@?8SW6@```@"QT8D%X)[^E*(``@&@^/Z<]V +MH```,`J&M@Y/ZB(,;^\(=\]Q@`#DN$:!^F)('@`4`!V`'P````@U!Z_>1J'Q +MP+H.C]Z:<<]R@`"`'D""`=D(=0#8">K/`4H@`\```D]02E` +M!%``A0`0`(!`@$G7*((X/``"#`\HA3@/*(@X$&`[N +MWLHCS@,")0T44@UOZJEPSW&A`(`!4!F`#P"1$%$#&E@S!!H8,`8:V#,[AL]P +M@`#\OR8,;^\@H*?Q\<"*#8_>"'7Z#6_M*';/<8``@!X`H<]P@`!4(_((3^_B +M#4_JB@K/Y@(-+^.I<(+F`=G`>:EPH?\!V1$:6#`&Z`8*C^.&#T_JK06/WO'` +M.@V/W@AW*'7/<*```"`;@$AV!1H8,-=Q````$,H@C@\``$8#4`7.WL8.3^JI +M2"0_GT<#@ +M?N!X\<"R#(_>SW6@```P`X4-")X&`X6ZN`.E*@Y/Z@HF`)`#\N[_"?#/<*`` +M@!P:@&(-[^A%(,`!1@O/ZLH)[^;)<`45`):`N`4=&)#5!(_>X'CQP%8,C]ZB +MP8MP3@AO[X'!9@LOZ@AW"'7/<(``E)K`B#CO"B"`+Z```"!L$!$@"NT2;D-P +M"A`/!@'8%1H8,`;P`-@5&A@P`-\`P0`A@"\````0^&`">3<)4@`Z#D``HN@` +MP18:F#,"(4$$XGF*($D/`-JM_RT(40`4[5(/K^;)<&P0`"`/&A@P#/`*#D`` +M"O``VA4:F#"*($D/BB'_#Z+_%02OWJ+`X'CQP.'%SW6``%`T((77<2,!9T7* +M(((/``#!*.`+PMX`'8`?5'80,@D$C][@>.!^X'CQP(H+C]X6#&_J`-ZN#4_M +M1@E/\-((S^_F#<_F5@I/XOH-S^:*(,4/SW6@```@"QT8D,]Q@``\/0"!P+@` +MH<]Q@``X/0"!P+B2#:_I`*'A_RH,S^*&#D_MSW"@```0R:`&",_L0-D%V!6X +M(*`2"\__#@A/[R8/#^^2#8_LU@@``$8*C_]6"0_JU@U/XN8+@`3>"$_GS@C/ +MY-X)S^E"#L`#8@D/ZHX(#^-N"$_H_@R/[.8,+^H'V-+_E@^/Y$H,C^O2"(`# +M&@M/[7X/S^@*"D_JSW&@```PSW"@`(`Q'!B`#\R`D<`@&(`/0`$!H"08@`\_ +M`#T``X$5"%\`SW&A`(`!'(&AN)ZX'*'/<```_LK.#@_BA@Z/Y@*%A+@"I5() +M3^+5`H_><@A/XN!XX'C@>.!X:2"``6\A/P!I(```]O'@>+#_Z@L/Z/C_>0+O +MWCW8X'CQP`#8]AH8L/<:&+#X&ABP$-A:#2_I^1H8L*X,@`+1P.!^X'CQP`H* +MC]X(=RAV2'6$*`@&`"&1?X``,#\($1`@A>#,)B61RB"&#P``*C3*(<8#,`KF +MWLHBA@,]#5`0>0W1$,]U@`!`3M9]3"!`HRB&"`XH@_P\`I2+PSW6``$!.UGU,($"AS"#BH1#T0(6,(O^/RB"" +M#P``)#3,">+>RB&"`P`1`"``I0KP`84/(,`#!?`!A1`@P`,!I;D!C][QP.'% +MSW&``+!)I($%?5,E_I`'\@.!C"##C\\E`A"DH4X*+^FO>&X*K^NI<*D!K]ZI +M<.!X\<`:":_>`MF")`(UBW5B#:_OJ7`&#V_PJ7`#S@#=J7'R#B_@J-J*(00+ +M!_`2;4-P"AA8``'E^0T4D0X:6#`(&E@P`,`)&E@P+R,'(,]U@``P/T`E$!.* +M)@@6`<$$*[XC0"41'@`E3QX7"5``@PF0`(/AD?(-V/H([]X*N+[P\@]/ZJ*' +M&PL1((;ES"7BD&\$`D$#)`)P`2"G%""J_M%]I5)%$V52=`%BIQ,@JO +M[0S:8@]OZ@#`XH<"PE!WRB""#P``'#14".+>RB'"`P0KOB,`)5(>:G!`(@$N +M+@QOZB'"X@TOZ6IP#!(`(`/!%PA``&IP`]IR_PP2`2!J<`':;__/<(``*-CP +M(,P##>P$*[XC)W4*<$`E`1(J,@0@#*(,($!"N^(\]P@```0;8*K^HP($`.[@FOZ@#` +MD@BOZVIPX@OOZ&IPO@G/XL8/3^9Q!V_>@"0"-?'`#@]OW@+9M,%>"Z_OBW!" +M"2_H`,`*(H`O@``P/P#!0"(4(HHE"!8?"%``+WBL>``B0RY`@\]P```#-"BZ +M3WHZ#Z_>88,@P%/`K'@P)%,NCL`6"Z_O`=D!P1L)4`""X7KR@^&*\L]P```5 +M-/H.C]Z8\`#8T@HO_QIP#L$(=I'ARB"&#P``)C3<#H;>0"8`$M8*K^\&V2^6 +M%PG>`UR.C"+#C\H@@0\``"@TQ`Z!W@'80"8/&`"O`,`.P0&F"B&`+X``D-4R +M(4`@`:\#AHP@_X\DKP[TBB`$"P.FSW"@```@&X`"I@^612```P^V#Y81"-X" +MSW"@```@&X`"ICL+42*3P2(*+^D(V!?H`A&`(`&O$\"L>``B02X9@0P>`!3' +M<````+`"IBS8!J;_V!RN'1X"%!R!!:8`AAH-+_\!V2#`K'@P)$$NAN'8#L$` +M`(91P`[`)_""P!(*K^\&V0[`!<$:"R__!L*`X`[!RB!"`%0-(O_*(6(`$?"( +MP.X)K^\&V0[`U@\O_P'9(,"L>#`D02Z&X5P.P0`.P%'`BB#_#U#``,!2P`#8 +M3\"/P-H,;^80V;$%;]ZTP.!X\<#V$@&V^,DE>/L2`;8+>0'8!?+^#(__`_`: +M#8__-P//_^!X\"'7XR8PE_Y\&)0X0RB"!#P``$S1H!8'>'NZI/@:&+`O*($#3B"-!Z]]A"T(%L]P@``X/S`@00[/<(``B-?P($$`8'FI +M'_705/WN!X\<#W$@&VD^G\$@*V@N+*(((/```,-!P-@MX)\"\I +M00!.(8`';@J@`@]X]Q(!MOCIT_^?`L__X'CQP*H,3]X*(P"`&G%(=0#8_!H8 +ML/<2`;9(\OD2#+;VR00DPI"$>/8:&+`)]&9X]AH8L($)$0`#V#WP!B).`$5Y +M^LGW&EBP!B"`@/H:&+"8#*'BRB`A`1SP+RB!`TX@CP?O?X0O"!8!V8#EP'D` +M(8!_@``P/WH86``B@,]P@`#8U_`@00`0)LX38'GI<.;N]Q(!MHSM"ND!V/P: +M&+`)"!`@_1H8M`'8!_`#Z"'#*(((/```*-!`,HM[*(<(#^,@0@#*($(#"01/WH0H"`8`(8!_@`"P0#Z@`-D] +MH.!_/*#@>/'`A@M/WK(-[^<(=H#@RB"!#P``"32T"Z'>RB&!`\]]A"T(%L]P +M@``X/S`@3P[YR0#9$"!``_D:&+"I<$(.+_\H4(@8!*D004`3'="D&``=@"\`#8X'^BP(0H"`;/<8``.#\P(4$. +M`-B%X.!_`(#@>/'`6@I/W@AW*'6.#._G6G(G"%`` +M[WB$*`@&`"&#?X``,#]`@\]P```!-BBZ3WKI<8X*K]YA@T`M4!$`()$O@`#$ +MVV`1`"`0=&F`=@`J:2I,0)OWLEP\<#>"4_>`-[V$@VV"_`O +M*4$#3B&`!P]X4@EOYQ`E#1`%?O?M)0)OWLEPX'CQP.'%`-T3\*EP`-F:#"__ +M*'*$+0@6SW"``#`_,"!`#O_9V@LO_P':`>7A#521^0%/WN!X^A(!M@\A`0#Z +M&EBPM0*OX@38X'CQP)X)K^($V/K)!O\`V$,'K__Z&ABPX'CQP.'%@@FOX@/8 +M_/T:6+.I`4_>X'CQP.'%H<$(=83@RB"&#P``!S1< +M":;>RB%&`XMQ'@[OZ*EP$.@`P,]Q@``X/X0H"`8P(4$.B.$H"V$`RB%!`PKP +MSW"``'C,M7@`&(`/""AR&5$!;]ZAP.!X\<#*"$_>"'4H=H0H"`;/ +MRB*"`U`1`""%YP8@``10&0`@S"?BD07T"@ROY,EP#_`1#Q$2J7#N"6``R7$) +M\(3GRB!!`X@)80+*(8$#K0!/WN!X\<"$*`@&`"&#?X``,#]T$PP&#R1,$'0; +M&`."@\]S@`#HUO`C`P.`X^(@P@`+!H__"'.$*P@&SW"``#@_,"!`#HC@_`)A +M`,H@P0#VR1$@P(#`>,\@0@```F+ORB'B!^!^\<`(@4:A9XSW&``.Q) +M`&&`X)`)X@#*(((`NP6/_^!X\<#"#P_>H<$(=BAUA"@(!@`AD'^``#`_"!`/ +M(&8.[^Z+<3IP+(W)<$V-E@ZOZ`##A^?,)V*1"_3)<.G_`,"%&!@@R7`>#"`! +MJ7&$YT0)80+*($$$S0#,(.*!#O3+ +MR0':Q!```"QX`-D`(8!_@`"P/U>H-*C@?N!X`-@-\(HB_P_/<8``0$X6>4"A +M`-I!H0'@#WCM"!*!X'[QP!X/+]X(<80H"`8`(8U_@``P/\*%A>#*((8/```K +M-$0/9M[*(H8#$PX0$87FS";BD0#8!/09A0+P`=A-!P_>\<#>#@_>"'6$+0@6 +MSW"``#@_,"!.#H7ERB"&#P``*S3*(48#``]FWLHBA@.'YLPF8I$+])H*K^*I +MX'CQP(8.#]X(=AIQ`=\*\`\(D0&.#Z`` +MJ7`"Z`#?$"9.$Q'N+RB!`TX@C0>$+0@6SW"``#@_,"!`#M<(48$!WP`8P".I +M!B_>Z7``V0\A`0#WR>!_)'@`V0\A`0#XR>!_)'CQP.'%3@KOZ`38SW&``,A' +M!-A6"B_J`MK^#B_K!-C/<(``L$FD@!8/K^BO>#(/+^NI<'$&#][@>+T&C^?[ +M$@&V$"$!`'T`[__[&EBP^Q(!M@\A`0!M`.__^QI8L"$'@`'@?N!X\<#X<=AR +MA"@(!L]Q@``X/S`A0@[/<8``L-?P(8P`@.3*(<(!XR`"`\HB@@&#`X__\<"2 +M#0_>&G`H=TAU:'8;\`IQZ7)@?,ES%?`O*4$#3B&`!P]XA"@(!L]Q@``X/S`A +M0@[/<8``=-/P(8P`$"4-$.CL[>VQ!0_>\<#AQ0AUA"@(!L]P@```03`@0`Y" +M#R_O']G""F`"J7"E!0_>Q0)``@AR`-@-\!<)40"$+`@6SW.``$!!,"-##GA@ +M$"("`P_J+RN!`$XCC`?OZ80L"!;//'`Q@P/W@AUBB8(%L]S@`"P0%4C +M1`\<#AQ0AU*',`VBAP:?X.Z!1K +M%GC/<8``S$DX8""`$0U`$`2`"0T`$$AP#?"$*P@&SW"``,@_,B!`#H#@`-C* +M(&(`H00/WN!X\<``V@\B`@#XR49X^!H8L`;I]LE%>/8:&+"H_>\!C__QP`#9 +M#R$!`/?),GD$($"`]QH8L/;))'CV&ABP"O3\R1$(40`F#6_B`]@"V/P:&+"[ +M`8__60%``O'`S@L/WH0H"`8`(8U_@``P/]X-[_^`%0X0#86,N`VE[@TO[\EP +M%00/WN!X\<#AQ80H"`:`VB]U`"&!?X``,D!`J?#_QW6``+`_$840I0S8\0,O +MWA&EX'B%!<__SW&``)3#SW*!`'`[`(%@@F"@`($`+P66$P<]P@`#,20`@5P`,]``7`2"`X_P'#`B!!`WEA0<$M">4``L(E#040`>(5\$XB +M`"`4(,`$@B`'#4'`"!Q`-`P>0"00'D`D"/`-"T4`"0A%`V&Z0L(!P:IP`L*J +M">_N2G-6"._^*W!,(0"PE`IAXLH@X0)=`2_>H\#QP$()#]Z*"Z_H"'4("'?/=H``/#P`AHHE_Q\+"$`#"@F/YZ"F-&\V>0`A@`^``,Q)(."$+P@6 +M`"&-?X``,#\`(8Y_@``P0$".SW&``!0X`A:0$$"AT@VOWW#9525`&<8-K]^* +M(00`A"\!%0`A@'^``)Q,Q@N/[@(>`A1T%0`6F@HO[Q_9B@H/[XD`#][@>/'` +M%@@/WCIP"B5`D,]Q@0!P.^1I5B%2`BAV2>9"D03R$0V$$,]P```!,D8(;]ZI +M<:YF`)<"YJ)X`B"0@\H@A`\```,RRB%$`R0(9-[*(H0#$0A2(``B02/8818) +M+^T*<@"7SW&``)3#PG@`MP6!A"D()L)X!:$`V0`A@'^``.P_\0?OW2"@X'CQ +MP(H/S]T:<,]Q@0!P.^1I5B%3`E4AS08`WHHA""8*(H`O@`"P/T`B`R^*ZBIQ +M"G`L>#`C00Z`X4`/PO\@EP`AP`0:\&"-C"-#AT&-$O1BC=#C$/1CC>_C#/1D +MC8PC@H8(]&6-#0M1`KYB`N8")LX4`N)=9=$-!)"`YLHF01`$*'XD`")1+A41 +MC2!6(4`"`N6X8(P@"X3*((T/```$,D@/+=[*(DT#0)<`)L`4$0ZE$!IP`"!! +M(^((+^W">D`A`"4*<28(+^VI<@"7SW&``)3#N&``MP6!'66EH0D'[]T\&8`C +MX'B$*`@&SW"```!!,"!!#@3P$"&!`"\H00!.((('"^D3:A5XSW.``.2S`&/I +M"-Z!`-@"\`'8X'[@>/'`>@[/W0AV&G'P_PCH]LD1(("#0`@B[\H@@@.$+@@6 +M+W4`)8\?@``P/W07`A84;L]Q@`#,219XH^H`88#@RB"!#P``$3+*(0$$@`XA +MWLHB@0,`A__9=@CO_@':@-D`)8`?@``R0""HSW:``#P\`(:*)?\?"PA``WX. +M3^>@IF$&S]W@>(0H"`;/!X\<#AQ8(*(`4(=0#:$VT5 +M>``@@0^``/*SD07OW4"QX'CV$@.V$2,`@,!XSR!"``P'XN[*(8(`$VD5>,]R +M@`#TLQ!BX;C*($(`W/7@?O'`S@S/W9IP>G&(=H0N"!8`(95_@``P/P`AC7^` +M`#!`"HT: +MR7`T_B"'`!``(!$)`0`$%`$@!!,`(#<)```"C8P@`H`7\I`5`"`G"!\`2G#_ +MV0#?N@ZO_NERZJW)<`'9*G(H/'`2@SOW0#9 +M"'>2"*_O#=C/=H``/#P`AHHE_Q\+"$`#H@Q/YZ"F@@[/[H0O`14`(8!_@`"< +M3)X/3^ZN"2`"Z7!Q!,_=\<#AQ0AU4_^`X-0-XN[*($(##=A""*_O@-EZ"2`" +MJ7!=!,_=\<#F"^_=J'`H=40B`0-#"1$"'^C3;=5^QW:``.2S*0H>`QX.S^X` +MAH4@!@``I@>6@.#*("$`SR!!`Q`.X>[*(>$'!_``A@L(W@&GN`"F!03/W>!X +M\<"*"^_=`-FNP4X+[^9(=QIPM&C/=H``U$FV?1?OBW'I<+H,[^PHVHK!B\** +M#6_M"G"@9HHA_P]-P,]P@``\/""@0@JOWPIP!_"+<+8(K]\XV9+82<"+<#C9 +M&@BO[)#:C0/OW:[`X'CQP"(+S]TH=DAW/PIR`!IS5&A6>@`BC0^``,Q)(.6$ +M*`@&SW&``#`_,"%`#B39E@BO_P#:0(!`*`$AN6%(H!X +M\<"^"L_=I,$Z<'IQ2'=:%`*H$B8G$BH*:@"0^!$Q08 +M0`7`@!X2`;9"P`#8"PD?!$/`#/#/<*#^)`)#P,]PQ>Z"=@'9 +M_@EO[P/"`-A$P`HE@"^``'3,`!T`()C`1<`F#V_?$-D`$P`@=!P`-%S`"MA_ +MP`387L"*($0!@!P`,)S&5B08,LEPU@CO[0MQBB"5`(`<`#"4P$;`R7#""._M +M!L$`)9(?@``P0`@2@"`%Z"IP+X=/_G`3%R!`+Y0BL@GO_BIP"'7DX&;@`%0`@3R86(82X`!T` +M($PF`*`:`@$`"W`K<98*[^P$V@D2@""=<)U(`+\`'8,8=!+XT@(KFY +M880<0#!'P`?!!!I"((OH?]P.)0$3`KD/"84#`=B`V80<0#";"!``A!0`,*)X +M0"B4`"4,A2-6)$,T5B2$-`MPJ7'^"Z_M`=H*Z(@4`#`!X(@<`#`$\(@<0#-/ +M#@451":^IB/T!\!#"%$`5B1#-%8DA#0+<*EQR@NO[0':B!0",#*'`>(BN0(E +M0Q`#Z!L+A`!$%Q00`!4`((@1D-@1/$N@#=#R6-$$EMI7I$>65Y(*03 +M\&5Y(*20%`$P`-K$N0\B0@`I:@7#)7K5>R"#17D@HP/P`-C"Z+/Q",`!V8#@ +MP'DC<(8F?ZD")PT@&"5-$!'T!\`?"%$`%8<;"$$&%H<3#0$0`!4`()ZX`!T` +M(`#8*/!`*0`A%G@`((X/@`#,22#F!(8&Z)((K_X`V03`!*87#5(0*G`*`X1@.HO_*($($!,`&&@(@5!]`%K:G`=A)P`3`"!H" +M(`D:`B``VPGP$FN#<#B`5(`!XT5Y-*#U"Q2!`-X$$HT@5218.`;`R7')<@MS +M]@FO[58D1#0+Z'`3%R"$%!DP!2]^(T$IE'!W"00U2\8$$H`@;=RB)&`P#:!Q*`((RZ`""%(-,($`"R=LH@1@7* +M((4#9+AI\-IV@.#*)8$C*?*(%!4P)0T%)4`E02`&P`#:"W-.":_M5B1$-`;H +MA!0!,"\,1""J=ACP`>4%+WXC02F4<(PDP:_0]P`2@B`!V5UE!2]^(T$IE'!" +M)$X@`_`!V:IVVG&E#A"@0B1`("%N$';*)$(@RB2!(T`IF3!.(0`P%2``!4K` +M0"D`(18@%0`J<`IQ`=[)G"L`8 +MIV0?0!8(&H(C!QJ"(P0:0B-I\7`3`"`-#@$00"8`$@/P#&Y"(`0!%^T'$H`@ +M!>@"(,`U#PA2```@F#`,;0CP#<$`)Y@@HG$")$`@9+A`(!D"#_!P$P`@$'9* +M(0`PRB!&-D?W0"R`(@`@&`1*(0`R!Q*`((#@RB`A(,HG`23*)0$4RB1!(T?R +M#<%`+8`BHG$O#F00`G`$:0JX`"`4!`(F31!P$P`@:+W1<,`E(1/,)2&1PB2! +M(,`E(1$/\`;M#\-B>`L(4P``W9IU!_``(Y0`#L"J=0)]:+T,P!T(D@!AN`4H +MO@4`(8!S0"B#`@)S`B/#!0\+4P!*(``@"B<`)`OP(GA"(!`"@&$H`@*.@'$H`@!^@&$H`@@.`:V`+T#=@,V9H;0B`" +MX)L;`B`$P%4C0BF<&P(@;Q*``)T;`B`!X&\:`@`"AYX;`B`J<$O]=@TOZ"IP +M"'$J<`#:X/P*"V_^`,``P(#@5`SAXX`" +MP`)[SW#%[H-W&@LO[P/"^0*OW8`D`C7QP+(*C]T(=4AVT@\O_NP9/`$+GX5`<`:#R_^,"!`#G`4 +M`B`B@`JZ`B-`(!%X`_!">`$*!``">@D@@```(8XO@`"P/QL(A0\```!0'H8! +MX!,(-`(>I@#8'J8!V`3P`-@>I@#85>@O(`(&`"!1`'P>0!1*)4`@"AU"%000 +M`"#_V?X+;_X`VNEPJG%JC*"F_^`-G6">_A"]@`'H`C`HT`V2AR//TV +M\!`2`"!'#0`0*W`#\`'@70@5`58B`B(T:%EA0('Q#8&0"PY0$`#`10B>`0.! +M(H$*N!EAF2$$`.X++^X"P`3!`\`E>$(*K^X?V1#P(0Y1$-()C^X,Z/X)K^[I +M<,]P@`!\52"`!(F`N`2I*0"OW:7`X'CQP.'%!@TO_@AU1(C/<8``S$D4:A9X +M.&`@@$`@`P@3#4$0`-@>"F__#R"```_P!(`1#0$02'!(_(#@+`J![@?P`(,+ +M#0$0`-@`HSD`C]W@>/'`O@]OW1_9!8"$*`@&SW"```!!,"!-#@H*K^ZI,=P@`#DLRB0#PE>``>0"PA2`,]XD?P0)8T3[NW= +M!T_=`-G/<($`E"O@?R"@A"@(!@`A@7^``#`_38%Y@8RZ3:'/<8``L$F`X\H@ +M@0\``/\`X'\#H80H"`8`V0`A@G^``,0_/0%O_R"B\<#AQ0AU\/^IOW8H@A`8+"D$`-'DFH-'`X'[@>,]Q@`!H +M4!5YSW"``)@SX'\@H.!X\<"N#D_=*':$*`@&`"&!?X``,#_/!X\,]Q@`#,23A@0"`-"`"% +M`-YF"&_^R7'`I7(/K^$+V)$&3]WQP!H.3]T(=AIQW@UOY@#9"'4`WP\GCQ,6 +M":_KZ7`S"!`@70B1((0M"!;/<8``D$`P(4$.ZWD%]!H*C^L)Z,]R!``04ZEP +M'@Z@`,EQ&/"I<,EQ"@VOXR#:Z7#.#V_N']F$+0@6`"&`?X``,$`V@`8AP8,V +MH`P+H0'*($$#`09/W?'`F@U/W0AV*'=>#6_F`-D(=<]Q@``8080H"`8O<`%A +M"^]9#Y$0SW($`)!3J7`V#J``R7$B\$H@`"``((\/@``P0!:'#R"0(P8@``06 +MIX#AJ7#)<0GRA@ROXP+:-X<%(0`$%Z<*\'8,K^,$VA:'@."D"J$!RB!!`X4% +M3]WQP!H-3]VN#&_F"'6$+0@6+W$`(9$/@`"P0``AD`^``#!`7!``(%`1`B`! +MV08B#@`0:;H)NG/<```$#4=!8_=+RB!`TX@CP=8$``@[W\0(,$# +M6!A`(,]Q@``(NP"!"PT!$`B)&0\`$*EPZ7'N"Z_C"-JI<,H-H`#I<1`FSA/A +M[@#97!A`(&@90"#I!&_=9!A`(`ATV'+/A[,H@ +M`0/VR1$@`(/*(`(#F`+B`,HB@@'@?O'`7@Q/W0AU`-[/<($`9";4J)H)+^BI +M<,]Q!`"X6L]R!`#07"X/+_ZI<(0M`14`(8!_@`"<3,]S@```P,"@!MI$H,]Q +M!`#@8".@I:!FH$`@#`?`I$2DSW$$`.A@(Z2EI&:D.!B(`T2@SW$$`.Q@(Z"E +MH&:@SW$$`!AB*@Y@`*EP:@G@`*EPA"T(%L]Q@`"4/R]P`6$(Z<]Q@``T00EA +M%@S@`*EP)01/W?'`X<4(=80H`04`(8!_@`"<3"H/[^VCP0#:0L*+<;X([]ZI +M<`4$;]VCP.!X\<#AQ0AU-&@V>0`A@`^``,Q)Z@@OWY#9G@LO[JEPB@K/[*EP +MQ@_O_@#9@@EOX:EP0@C@`*EPJ7#G_X0M`14`(8U_@`"<3,H.[^U`)0`7P@[O +M[4`E`!ZR#$_JI0-/W>!X\<#AQ0AUY_\R#&_AJ7"1`T_=X'C&\>!X\<#R"D_= +MHL$:"^``)(\($P`@#PA1`0P?@!\````0 +M!/"*(!```Z>6V`2G`!,0(`2&2B2`)!':$]D$Z.:&AN_)`J_=BB"$!O%PRB:" +M(`7T]'_FIMIQ0"B5`@J_"G#*<0H(+_\`VB"`.G``&D`@!!J`)0IP$MGV#^_^ +M`-H@@!IP$!I`(!0:`"7/<*```"`[@`J&088"(0P`8H8`V`P6!!``(P.#`2`` +M`4'``B&``$##(0AR`$AS`_"BCQGD7+\!\__BB0($`(C#P,(&<`CY(:">A09P",(&(`@1H8B +M>Q08@"``P:EP$@HO[@'""!,`((HF_Q\S"-$!D!,!("APAB#]#XP@`H`!V,!X +M4R&"`1$)@`,+Z!,*$P0/"E(`"-D8&4`@&!A`((8(+_X!V,]Q!`"X6L]R!`#0 +M7&H,+_ZI<#`:@".I<.8+8```V1SP`-[)<5(,+_[)"R_^R7+#I\2G +MJ7!P_U8*;^&I<(8*K^$+V`;P@.!4"N+_RB""`WH.[^>I<%4!;]VBP/'`!@E/ +MW:3!I@AOY@AU6G#R#._GJ7`Z<(0M"!;/<(``-$$R(%,."B1`+A8*X`!J<$#` +MA@OO[*EP&G"I<&IQ'@BOXP':#-@J#>_N`-FZ#F`!J7`FZ,]P@```00`DE2^` +M`#!`6!4.(#`@``4$?OC)$"!``_@:&+`3\"\H@0-.((\'6!4`(.]_$"#``U@= +M`""I<.H)H`#I<1`FSA/P[M(-8`&I<$`@02&!PZEP`@U@``#"A"T!%0`ACG^` +M`)Q,Z@OO[4`F`![B"^_M0"8`%P'`10A1``L*$"`+"1`@`-@3\-(+K^RI<``D +M@"^``#!`-H#/<@0`D%,/(<$$-J"I<.8(H`!J<97H(0H0(&IP`-F=_@_PSW"` +M`)1`,"``!>'HP@U@`:EP!?!R#6`!J7`M`&_=I,#QP.'%"'("@2,(40"$*@$% +M`"&-?X``G$P!@1X(;^9(<0AQ=@OO[:EP`_!(<`3_.0!/W>!X\<">#P_=I,$( +M=4(/+^9*)``@.G"*"^_GJ7`:<(0M"!;/<(``-$$O=C(@DP.N".``:G!`P!X* +M[^RI<%IPJ7!J<;8.;^,0V@S8P@OO[H#9`":5'X``,#_'=H``,$`9A@CH^,D0 +M($`#^!H8L&KP2@U@`:EP(>@7AG05#R8&?_?)>AT8)1`@0`/W&ABP$O`O*<$# +M3B&`!R\F!R`6AA`GCQ40((`%%J:I<#8(H`#*&"V``Z7.I<.EQP/\!P%4(40`)"1`@"0@0(`#?$?#2":_LJ7`6AL]R +M!``04P\@P`06IJEP"@]@`&IQ"'<;A@OHA"T!%0`A@'^``)Q,..!2"N_M.H:4 +M[Q4)$"!J<`#9'_X.\%8,8`&I<`KP=!4`)I((;^X?V>H+8`&I<*T&+]VDP.!X +M\EP5&Y6>L]U@`"P24`E`1=9 +M84`A`@@9"%$`Z7!J<0IR2G,&"Z_L"B1`!%#P`(%I#P$0\@CO[LEPA"X%&L]P +M@`"HFS`@00[/<*```"`;@#)Y.&`!X!$(A0\``*`/M@F@`,EP-/"$+@@6`"&` +M?X``L#\YB`'A.:@%A0\@@`,%I4T(42#)<&8)H``!V078'@KO[H#9'/`$@1L/ +M`1`Q"%$@!-@*"N_N@-G^"J_A`M@.\`2"#0\!$(H@_P\$H@CP&((0=_`.H0#* +M(($#V04/W?'`=@T/W:7!"'9:<80H"`8*)$`N`"&-?X``L#\$N!9X`""3#X`` +ML$EF"N_]'!,`($`E#Q4:<(MP.G#/<8``^-`B"6_=%-K)<"H.;^!*<4HE`"`+ +M"E`@(8\E\!B-F>BN">_N!]C&"*_GR7#VR1\(C@/)<+X+K^>*(1``SW&``#1! +M,B$!!38+H`#)<+H.#^L!CX7@T`B&XB&/"PG2`#(/S^C;\0HB@"^``)@S`!(` +M($&(#0F#`&*/`X@U"P(`"0F"``"/`_`"CT'`0,8!CQ390L`%CT/`*G">">_K +MHMJ$+@$<`=D`(8!_@`#=(R"H`!(!($&/`(D-"@,`0H\"B2D*`@`\$P`@D.@( +M$`$@`B&!#P```$#)<'3]`KY#=B@6`!8!X"@>&!`8'4(5G00OW:7`X'CQP$H, +M#]T(=YIQ.G)Z_]Z7!4;E9ZSW6``+!)0"4!%UEA0"$0 +M"!D(40#I<(IQ*G)J`6EA"X(%@`AC7^``+`_&XV`X,H@@0-8#N'_RB%!!!L=`A02#N_^Z7`S +M\`2!%P\!$`38&@CO[@#9W@BOX0+8)_``$``@&P\!$`#9`!A`(,]QH```(#N! +MR7`__1GP`-X5\+1N`G4(A2$/`1"2",_]*845"5`&%0F1!CR((A"```D)`0`` +MV`BE`>;;#I20L0,/W>!X"')"$8``#0@1`U0A0`@#\`#8(0<@`$AQ\!X\<"B"@_="'8Z<0#=A"@(!@`A@'^``#!!YX@*($`N +MC"?#GPHB@"^``#`_"!`4``3TJ7`\\((-3^%\Z!)OQW"@`(`NK8``)($O```` +M$*)Y4R'3`DV`E.?*(\4#RB/&`X?*C"'#CS/R2B5``/T! +M#]W@>/'`=@D/W0AV&G%(=1H)+_YH=SIP,@OO_LEP6G"$+@@6`"&3?X``,$$, +M$P`@+W(")0$00"!`(!!Q`-O*(V\`@./*(0$``"*0#X``,$!L&,`C:!A`(`_O +M,0D0("T*$2"$+@$5`"&`?X``G$S&#*_M..`*\(0N`14`(8!_@`"<3)(,K^TX +MX$PB`*#,(2*@$O(,[\]PH```(!N``B4!$`P3`"`1"$4``-ED&$`@9@^O_LEP +MU@M/X1_H!Q.`((P@PX\;\L]PH```(#N``B5`$",.`W````!`A"X!%0`A@'^` +M`)Q,`B6!'P```$!&#*_M'.#)<*/_W0`/W>!X\<"*"`_="'<:<4AV*'#F"2_N +M!-F`Y@AUR`MBX\H@`@2$+P@6`"&`?X``,$$&[2\M01-.)8$7`_#_V;4`+]TG +MJ/T$[_\%@.!X!8`>\?'`*@@/W:6`H\$T;39Y`"&`#X``S$E`(!((A"T(%@HA +M0"X`(8]_@``P03H)H``$C[IPJ@JO[*EP"@MOX1IP`-XSZ!`2`"",(/^/1_0G +MCXPAPX]#\@HC@"^``#`_"!<4$!)IQW"@`(`N[8``)(XO````$.)^R[Y-@)3A +MRB-%`,HC1@"'W,`C!@,"NZEP,".##Z``&"P*)``%?@LOWDHE@``)#P$5`-X9 +M\(PF!)!\]S`C0"0;V2H-K_X`VOH/;_T(=@*F`(80&@`@J@ZO_0#9O@AOX0O8 +M`=ZH[OH.[^6I<"3H0"!!(8MSJ7#F"R``JG(`P(#@H`NA_\H@00,!V0`A@"^` +M`)1`(*``WO;)#R9.$\MX!?3^"._^J7`&Z,EP`-EZ"J_^*')5!^_/'` +M_@[/W*(.[^5:_].G$@'4`4`>?K#Y20VP@0((0J"";/<8``,#\P(5`.0"0`)QYF +M0"84&$HA0"8`W1+P0H:`XRJZ1:G(@@`AW%&V"<+IP**`J<"0=`"`$ +MAGH.[^5*<9D@!``"IR&&`-LJN6*Y)J?/<:```"`[@1!QRB-O`&$)D*8(ZR`5 +M`"`Z"._]`-D@'<`DM/%*<*G^]@RO_0'8)0;/W(0H"`8`(8!_@`#$/^!_&.`` +MV3Z@A!A"`",80@`MH#\80@`TH%L80@`[H.!_@!A``/'`O@W/W`AU*';R_PAR +M`-M_H/3_B!J``WVBA"T(%@`A@'^``#`_(H`-"5$!D!C```'8':+U!<_<\<#F +M_SZ@T<#@?N!X\<#AQ4AUA"@(!@`A@G^``#`_>8(&ZVH.3^S5N+A@$?!`*8`" +MSW&@```@.X&%$@(&0GD#\`)Y`0A$`+A@(GBQ!<_/'`.@S/W`AW*'4H<)'_"'9Z"6_>Z7`?A@_H'H:`X,PG(9`> +M\H#@S"`XD(T8!` +M(``H&6&J<`#"ZG-`)`0RF_\"P5WHH*>`X`T.91`%I2*E*'9"<0(A``0_N%(@ +M`(`%\A`=@!3XK1SP`B!`(%8*[]S)<0'@#0CD`__9%P]!$`(G`A`P=\HA@@`X +MK04HO@,%\`4N_A,8'4(4`"&`=`2E@0'/W/'`(@GOW`787@D/X1/P@:,$CH8@ +M_0^,(`*``=C`>(`>`!"(%@$08'GI<`"%$"#``P"ESW6``!PX`(6;"!``+R@! +M`$X@CP?I<+_^`=D(=CV@/Z``B'D($0,^IH0O"!;/<(``I#\P(%$.7@MO[.EP +M6G#I<"IQ2G+1_AIP`XXE;H0>`A!`)@`82G*T_T`F`!]`)H$42G*Q_U8FPQ)$ +MCD`I@2("($`@`-R#JU,B@H&8JX6CL/,*NEL)I(!!HR*C_]DXJR.K!*,#HP+8 +M!:.D\.!^X'CQP`AQ(.#^_T`A``_\_U8AP`+[_\,"S__Q +MP.'%G@N@``AU`-D&O0`E@!^``"2@-:"9`._<-Z#@>(0H!0H`(8!_@`"DF\]Q +MH```(#N!*:`!V>!_+*#QP.'%A"@%"@`A@W^``*2:61,,!A3LSW2``'R@MFFD +M9(/L'0H1`\]T@0#(*P"D)*Q/>58CP`:F#*_EB7(Y`,_<\<"^#Z_<"',H=H0H +M!0K/<(``H)LR($$.`=V"X0'8P'B`X,!]]F['=X``)*`'Z16'@>!T#^'_RB#! +M``#8%:?/<($`A"75>$"@:'#)<0?:W?_5!Z_,]QH```(%N!A"@%"@`A +M@'^``*2;*8`B>BR`!^DJ@%EA*J``V2R@X'[QP#H/K]P(`X*`/X?_*(,$` +M`=@5I\]P@0#$);5XP*!H<*EQ"-J[_TD'K]P*/W/'` +M"'.$*`4*SW"``*";5FG'!L#N'_RB#!``#8%:)H +M<(AQ"MJ=_]'`X'[@>`#;#PI0`!4*D`!H<@KP02D"`2BY(GH&\$$I`@$GN3IB +M4'`!V.!_PB`.`.!XA"@%"@#9`"&`?X``I)LHH.!_*J#QP"8.C]P(=X0H!0H` +M(8U_@`"DFP6%@.`:<7+R0"B!(<]P@`!XH"!@U0@1``#;9:4,A<4(40#I<*/_ +M*X4*A2)X"J5GI0B%*H5-A=[_0"4.%Q3H`=@'I<]P@`!L+O5X`!B`#P$``*3/ +M<(``7"[U>``8@`\!``"D,?`(A2J%3H71_X3H'I4S"%\"'I4+"%X",H4"\#"% +MSW"``&PN]7@@H!Z5"0A>`C.%`_`QA<]P@`!<+O5X(*`1\,]P@`!L+O5X`!B` +M#P``?!7/<(``7"[U>``8@`\``'P5`889&A@P0X;I'*(*$`]LE*(D`@*PC.`P@>P!2C +MIC(@0"0;")$`&HX3"!,!`>`:KCJ.Z7#J#&_N"-H4'H`4W02/W.!XA"@%"@`A +M@'^``*2;6H@+"G(``-D[J.!_.JC@>/'`X<4(=80H!0H`(8!_@`"DFT"`17D@ +MH!X,;^ZI<'H.;_ZI<,4$C]SQP.'%"'7/<8``)*0+@0\@0`,+H7X-[^`,V*EP +M@-GO_Z$$C]R$*`@&SW&``#1!,B%!#AT$[_\&VO'`#@ROW`G9"':$+@4:SW"` +M`.";`"!/#@`AC7^``*2;/!40$3(([^WI<,EP+@MO[NEQR7#4_SJ-R7`F#&_N +M`-H1")X@'I7BN(`/X?_*(($#'I4+"%X",X4"\#&%SW"``%PNU7@@H!Z5"0A> +M`C*%`_`PA<]P@`!L+M5X(*`@E\EP!"&!#P````AN#N_F5(_)<-?_X0./W.!X +M\/'`$@N/W`AVA"@(!L]P@```03`@30X`WPKP+RA!`TX@CP?O +M?^EPKOX0))-D*V!^UY@E@ +M`,EP`-@/((`#$GG/L.A6(<`F&G!`P,]P@`#L +M\$'`SW"``%P-0L#/<(``8`U#P`#;1,,&V`/9#=H*)(`/@`!D#0HE@`^``/3- +M2B9`"2(.;^7X<\]Q!`#(H8@_@S(X(0M!1I*(4`@PB%").V^`=G"(4$``"&/ +M?X``I)L`V`NG"PT0`"*G`=@C\`WJSW&@```@.X'/@D)Y*Z<2\(0M +M"!;/<(``.#\P($`.!PC0`2.G`=B:<(;I7@[OX`+8BG`!VL]Q@``X#$.A+^C/ +M!`,@K&!^`%!P?P!30MR(?!!2I<*IQ!-HZ_D`G`!92#B_>#-D1 +M`8_*`&N`!AC^@&AZ)Z`X`@@%EA_@LO[>EP +M1X?)<*)Z]@XO[@IQI0"/W.!XSW"@```@6X`&N0`A@`^``("@X']`H.!X\<`6 +M"(_<"'9Z<1IR:'7+R0HA0"&$+@4:L!`!`0`A@W^``*2;"(,*(@`A.&`(HSL- +MD!')<-G^.HO)<#H(;^X!VL]W@0#(*R0?A!0F'P04*!]`%*NGR7!J<07:]/U` +M)P`9.@TOW@S91"(`(XC@RB"!`W@/X?_*(<$$]0=/W/'`I@]/W`AWA"@%"@`A +MC7^``*2;`"&.?X``I)H8A1IQ@.#*(($/```$`#.&`" +M(($`"0E2``>CX'[@>&D%C]^U!0``A"@%"@`A@'^``*2;0X``V8;J`H"`X,H@ +M00`#\@'8X'[QP.'%`@D@`"AUB.@&O<]P@`!UH*A@`_``V.4&3]S@>/'`X<6` +MB:K=08D`$`0`8HE,)("!S"2B@P3T!X``B`GP3"3`@LH@0@,#]`>``(`F#B_N +MB7&I!D_<\<`F#D_<"'8Z<4AUA"@%"L]Q@`!8FPH@0"X`(4\.0-EG_LEP(-FD +M_BEM20E5`3,F07"``.3/0">``A*`"*<.\!"`"*<,\"`?@!\````H!=T&\"`?@!\````,R7!;_L]P@0#( +M*ZR@R7`J<0'::OWY!4_<\<#AQ0(-[_PH=0J]L7`)!F_<;R`+`.!XX'[@>(0H +M!0K/<(``X)LT($`.AB#W#X#@`=C@?\!XX'CQP`AR9(J`(`(#!>LV"F_E+WG1 +MP.!^X'CQP%(-;]P(V,"!E@DO[H#96@ZOXLEPA"X%&@`AC7^``*2:J7`)V?'_ +MR7"N">___]E5)4`6)H`C@2"!O@@O[98A!```A9H([_\$V74%3]S@>/'``@U/ +MW,"!SW&``"2D"H$/((`#"J$R#J_@"MB$+@4:`"&-?X``I)I#%0`6$N@&V!X) +M+^Z`V4`E`!LF@".!((%F""_MEB$*`,EP1@CO_P+9'05/W/'`K@Q/W,"!A"X( +M%B]PA"X%&@`AC7^``*2;SW&``,0_.&`!B"<(\@!#A#"_N!-K)<.H*[^:* +M(1```O"&ZLEPQ@CO_P'9I01/W/'`X<4(=8@80``1"5$`+@K/XJEP"-D#\`;9 +MK?^-!$_<\<#AQ9AR1"$"`X#B`=K`>@#<*'6&)?P0C"4#E,PE@I\``.``RB1A +M$(0H!0H`(8U_@`"DF@+J#.R6_X#@J7`%\@+9Z/\$\(X/K^*(`?9&/'Q +MP.'%A"@%"@`AC7^``*2:A"@(!L]R@``X/S`B0`Z'X,HA80!`)0`;">DF@".! +M(($*#^_L@"$0``?PX@[/[*EPY/^I<.[_Q0-/W.!X\`C*``_`P@#H, +M[_^I<#"6J7!1EF:&N_\$\*EPVO]E`T_<\<#N"D_!^X'@`@80H!0H`(8!_@`"DFF+Q +M\<``@80H!0H`(8%_@`"DFC'_@.!0#Z'BRB!!`.<$S__QP#(*;]P%V0AVA"@% +M"@`AC7^``*2:5270&.P<"+3/<(``%/%!P,]P@`#X#4+`SW"````.0\``WT3' +M"]@-VNES"B2`#X``"`X*)8`/@``T#4HFP`WV#2_E2B=``,]Q!`#(.!^X'CQP)()3]P(=H0H!0H`(8U_@`"DF@(-[^Q6 +M)4`2^@SO[$`E`!3R#._L0"4`&^H,[^Q5)4`6R7#B#:__'MG!`4_<\M**TIK2JM(Z56 +M)0`4(*`AH"*@@0%OW"2MX'B$*`4*`"&`?X``I)II!<__X'\`V`AQA"@%"@`A +M@'^``*2:!;D`V@`A@P^``+SS0*-U`^__2''@>`AQSW*``"2D"8(/($``":(9 +M`J_@%]C@>`AQSW*``"2D"8(0($``":+Q`*_@%]C@>`/P$""``!'H+RD!`$XA +M@@>$*@4*SW&``*";,B%!#N<)D(``V`+P`=C@?N!X\GJ7`%V=_^K/%9#!"@&@NO_\EP.H_)<.8/[^T"VJEP"PD0(`+9U_Z<\0#9 +MB/Z:\2@5`""`X+0/8>#*(*$"I0`,IAOPIK@!IPIP"-EW_A7P+R@!`$X@C0>$+0@6SW"``#1! +M,B!/#JEPF_\&O\]P@`!XH.!@!>@)ANSH=0@KOYZEP`8>E")^!TPA>@>X,K^(*<`&'I;@!IPIP"@ZOX@39 +M@.`\"^'_RB`!!-GQ\<#AQ0AU2@KO[$C@`(5""Z__"-D`V"D'+]R`'0`0X'CQ +MP*(.#]P(=RAUP('/<(``-$&$+@@6,B!0#I8,K^(H/'``(&$*`4*SW"``.";-"!`#NFXB`FBZ,!X +M,@0@#* +M(((#J7!__@$&#]S@>`6`$0*O_P39!(D`V@:X`""!#X``=:#@?T"IX'CQP&X- +M+]PV:`AWSW"``$B@/6"X'$BSSW"``%CQ0<#/<(``Y`Y"P,]P@`#H#D/``-Y$ +MQ@[8!-D)VLES"B2`#X``[`X*)8`/@`#4S4HFP`<]Q +M@`!\H#`A0`0'Z*]Y`")`)(()+^4*/'`X<56:,]Q@`!(H%UA"-GC +M_P#8"J4L'0(0^00OW"T=`A#@>`#;5F@`(H$/@`!VH&"I!-FT\>!X\'1_\6%0"4`$JX)[]T0V:4$+]S) +M/'`/@L/W"AU(('/<(``-$&$*0@&,B!`#@05D1`!V0PA`*#`>4.%0"F2 +M(0`B@"^``'"@0*``WL.ESW"@```@&X`(N0`@A0\```!]")4*((`O@``,JR5X +M*(T!W^ERR7,*)$`$"B:`#P```!CN#6_E"B<`!,]Q!`"!X*'"2V=[QX'CQP.'%"'7/<(`` +M**NV"J_E\"!``Q9MQW"``"2@4X`'Z@#9,Z"I<&!ZDMF9`@_/'`V@D/W`AV*'4$B>#_R7"I<9__,0(/W`2)NO'Q +MP+X)#]RNP0#=(@@OY:EP(@MOX!/8BW'/<($`-#_J"B_K*-J*P8O"N@NOZZEP +MSW:``"0Z!88XV4S`SW"@```@&X!-P(MP6@ZOZI#:)X:BIH0I"`;/<(```$$P +M($(.]LD1($"`RB""`%@+(NW*(>('L@EOX`?8M0$OW*[`\<`Z"0_<.@ZO_$AV +MI(C'#E$0A"T(%L]P@```03`@0`Z&"R_M']G^"Z_EJ7"J"Z_KJ7#/=8``)#HC +MA98A"@`B>-=P`(````#90O/'`W@_/VTAW:':(=<]P@`!D/X0M +M"!8P($$.0-B,N`0A`@`0/'`U@[OVPARA"@(!L]P@```03`@0PX4:A9X +M`""-#X``S$FAZP"%@.#*(($/```N-/`.`=S/<8``)#H&@1\(40``V`:ASW>` +M`$`\`(>*)O\?"PB``_H.3^7`IP"%K@CO_`'9W0;/V^!X\<#AQ;H(K^8(=0AR +MSW"``'C,\""``-=P""AR&/'`/@[/ +MVPAV`=C/=8``)#H"I<((K^L`V`.E`87$I1T(40#/=H``0#P`AHHE_Q\-"$`# +M@@Y/Y:"F<0;/V_'`X<7:"J_M"'4:"._]J7!E!L_;\!B'(0<\`*HNW* +M(((`T<#@?N!X\<#AQ0AUA"T(%L]P@``P/S`@0`X1V5H+K_T`VL]QH```(#N! +M(J``@-H,K_P!V<]Q!`"T@ZEPE@CO_`#:#0;/V^#QX'C/<(``,#\`@/_9T0>O +M_`':`-C6\4$$+^L`V.!X\6G#521;07OVZ7`X'C//'`[@S/VPAV*'6$*0@&SW"``#@_,"!!#L]P@``` +MV/`@00"`X>,@0@#*($(#R7"I<>__*07/V^!X.0.O_2APX'CQP*X,S]LH=80I +M"`;/<(``-$$R($X.SW"```!!,"!`#I(.[^P?V:EPW@TO_\EQ[03/V^!XSW*` +M`+!)!((0($``G07OZ`2BX'CQP&8,S]LH=0#>A>#,(**"RB9A$(KNSW&``+!) +M!($0($`#=@WOZ`2AJ7`:"._]R7&A!,_;\<`N#,_;"'A@8("IPR7&L_P4$S]O@>/'`X<4H=6(-K_TH<(#@F`^B_*%@.#*(((/``!\ +M,*@+(MS*(8(#=!4`%L(-[^P?V8?GH`]A_LH@@0,*#:_]R7"`X$`/HOW*(((# +MH0//V^!XA"D(!L]P@```03`@0`Z-!>_L']FA!D`#X'[@>`AR,V@U>0`A@`^! +M`#`8Y0>OY`#9"'(S:#5Y`"&`#X$`,!C1!Z_D`=D(0`A@`^!`#`8J0>OY`/9"'(S:#5Y`"&`#X$`,!B5!Z_D!-D( +M0`A@`^!`#`8;0>OY`79"'(S:#5Y +M`"&`#X$`,!A9!Z_D!]GQP.'%"'7K_ZEP]/_A`L_;\<#AQ0AU[/^I0`A@`^!`#`8)0>OY`C9"'(S:#5Y`"&`#X$`,!@1!Z_D"MD(,]Q@0!4 +M&`AAA.`!V.!_P'CQP/8)S]O"$@&VA.'*((8/``"&)R`*!MS"$@&VP\E`*0T" +M!7W/=H``T,T`ABT-`!#5R88@<8\1]!\)4`"N#@``%PA0`*8.```(@D/W,,2`;:`X`38 +MPQH8L`#=SW:``+CU#X[/<8$`<#,"N!1X`6$!V+X)K]\@@0*F./#4$@&V`-J/ +MZ0/8PAH8L,,:F+#*"F_K`-C/<8``0*H`H2;P+RE!`$XA@`?R#F``TQH8L,,: +M6+//<00`L)G/<(``L,,`V@#;^@DOY4HD@`'/<8``5#P`H0SP!-C#&ABP`-T& +M\$_8(@@OW`>X`=TU`._;J7#@>/'`M@^/V]7)AB!QCP7TN@P``!4(4``!V,(: +M&+``V,,:&+"`\,/)]0@1`,]W@`"X]0^/SW6!`'`S`K@4>`!E"B.`+X``1*H` +M$!$``!,`(,,($```RPHE@"^@```@4FA4>L=R@0`8,3V""B2`+X$`F"R`N3VB +M@-K/<8``N*2.#R``0*%:<`JXSW&``#"J`*$/C](2`;8"N!1X!F4R>6P5`"`X +M8`'@)H8JN`)Y#!0`($H@`"`EN*((K^W`N"IP(A:!$`':6@I@``IS#!0`(`L( +M7@&2"H``%O`!V"X*K]\J<0'8W@UOWQ;9+X\"N31Y/64`I1@8@`1L%0$@(J`! +MA8"X`:4!V!X.;]\(<0`;`"0&\`/8PAH8L,,:&+`>#^_?#=@!V.4&C]OQP,(2 +M`;;/<```C"?J#N_;PQ("MH,%[_\`V.!X\<""#J_;`KC/<:```"!L$1``%'@` +M()$/@0!P,P@1C2"HY``/@<+W@6)TX30@HOYRRN#:[/<8``N*0`@0#;#JY@H<]Q@`"\I`"!8*$/ +MKM+)`-P"(`*@$WG*)&\0`"$`!(#DRB&"`,HA`0`$$0`@X;C*(<(`!(8X8`2F +M!.T`CPT(0P,X$@`AH*\#KS$&C]OQP.(-C]L(=CX.[]\-V(H);^8`W3(*#^!. +M#V_JJ7#/<(``N/4/B,O_^@Y@`,EP(0:OV]4:6+/@>/'`X<7/<*```"`;@,+) +M".C5R8&XU1H8L`'=`_`"W<]R@0"8+"2*`M@F#V_M0X("#V_J`-B"Y90/XO_* +M(*(`X06/V^!X\<#"$@*VANJ`X.(@`@`1\,]R@`!H50"BU-4:&+`#\%(+ +MS__"R?WHP\G[Z-'`X'[@>/'`PLF`X$P/XO_*(*(`]_'QP/8,C]L;<`#?SW"` +M`$2J6G#@H`#+SW:!`(PQ`K@4>`!F2B%`(,"X0B!7@,+)RB=B((/@"B2`+X$` +MF"P,%``@PB%")!UX4B```%,@$P`*)8`O@0!D)A05@"#4$AFV0B!0@`'=RB!B +M('8/K]^I<``2@;"8<`*Y[LD*)H`O@0"0,31Y-"9,("\('@=`*P$B!2$`!$`I +M`R0%>T`O`B80O,]PQ>Z$R*EQ97HK_?#=@Y!(_;`-D$\`'A+WG/!X\<#AQ=7)-P@> +M`,]R@0"8+`'=)(JI<$8-;^U#@M7)H+C5&ABPT@Q@`*EP0@\/YNX/S]_/<(`` +M)*J@H/$#C]O@>/'`=@N/V\]V@`#XJP"&!^@`W9X,;^FI<*"F`MCF_\/)%PA1 +M`,]U@`!4/,(++^4`A8H@_P\`I:8+[]\-V.'_I0./V^!X\<#AQ0'=J7#:_W8) +MC^H)Z%H,;^FI<,]P@`#XJZ"@B0./V^!XSW"``+CUX'\`@.!X\<#Z"H_;"'8H +M=1IRX@QOWV]X"'=`)8`20""\A""#/<(``O*3`H,]P@`!$JL"@`X7FC045 +MDA!+"%\!&.]2=\H@A0\``'LGRB&%!/`)Y=O*(L4#)(4*Z3!WRB"-#P``?"?8 +M">W;RB+-`R2%"^E2<_F*:\(K\JORZ_%I\"GQJ<0'T`40@UOWP'8`,LJ +M<0*X%'@T(@`@`=JG_\]PH```(!N`SW>!`(PQTAH8L`#+`K@4>`!G$0@?`".% +M);G`N0'A`_``V3(@02#/2!GX+@#V`ORU,F(Z,]P```&*`H)[]LT(D$@`MC"&ABPPQJ8LP4!K]L`V/'` +MX<4(<<]R@0!P,P#=`_`!Y1)M%'@/#;41`V(`@_4)`8`$ZQ$-E!'/<```DB?: +M"._;J7+Q`*_;J7#@>/'``-D"\`'A&0F5`1)I%'C/!78`O`4V'$` +MC]O/<```D2$7"94!$FD4>,]R@0!T,P!B\0@?@(;A`-C@ +M?\H@10#QP,(/3]NR:+1]`"6/'X$`&#$=AQ4('P#/<8$`F"PC@26YP+E!:0/P +M`-H*((`O@0"8+$`@02%.814('@`$((`/'P#^_Y(/3^04>!YFSW"!`)`Q=@OO +MYJA@%0A1``P0`"`+"%X!'8<)"!X`"N:Y!V_;R7#@>/'`*@]/V^@<"+`*)8`O +M@0"8+`05@"`*(8`_@`"X]0X1C3`H=J)X22#``$'`2B0`(+W_!!6!($+`#0ER +M``X1@C`/"8,`SW```)`G5@^/V\]PH```(%N`SW.``"BJSW"``$RJ1,`7#E$0 +MSW"``"RJ`(`+"%$`!,!`HT"@%!4!(`3``(`*N3A@"0H$`$"C((,P`3)M-'G//'`6@U/ +MV\]U@0"8+$.%*'<5"E\!(A"!``T)40#/=H``N/4-\,]V@`"X]2V.%PI>`2(0 +M@@``<]P@``(JGH( +M#^P*\.EP`-E=_X;HU#$_;6G"Z<1IR.G/__K)HM'UZ +M<,=U@0!P,RB-`,O@A1!Q2B1`(,(D`B42:11XSW&!`)`Q$6'/=H$`C#$`9AP7 +MA1#`N('@2B9``,(F@@%*<`':6G(*!$!R/"PA!``&%H+@!I34)42#/<($`F"P#@",(7@$(C0*X%'@` +M9A<('P`B%X$0'(\1"$$`V_X-"%$`Z7`!V9__#PP0(,(:F+0`V,,:&+`!A:&X +M`:4#_AT(42`2_@#+`K@4>`!FP+B!X`'8?@POY,!XV0-/V_'`A@M/VYIPNG%( +M=AIS`-_/<(``)*K@H(IPMOXZ<+)HM'W'=8$`<#,(C4"%`K@4>!P2A0`*(H`O +M@0"0,30B`2#/#"``*G&5`D_; +MX'BA!>__`=O@>/'`X<5(+")H(!Y@HO[0+:SW"@```@ +M.X#/<(``3*H@H*']`=C"&ABP`-AA`F_;PQH8L/'`X@E/VPAW`-X6\+)NM'W' +M=8$`<#,(C1L/`1`!A1<('@`@A0'8]@POWR"!`86@N`&E`>;9#I21$0)/V_'` +MJ@E/V\]U@`#XJP"%!^@`WM(*+^G)<,"EP\D7"%$`SW6``%0\^@GOY`"%BB#_ +M#P"EM@DOWP'8`-G"&EBPPQI8L``:0K#5&EBPSW"``+BD(*!6#"_?`=C/<(`` +MN/6^#N_<%-G/<($`<#.R#N_<2-F>":_?#=BA`4_;X'CQP!8)3]L:<+X+;^D$ +MV`AUSW>``+##`(<``D`2`H@<&G@G`)@"&F`Z8O+4$33B6`%Q"N+?W/<:```"`[@0T( +M<@`JICA@"J8!AD0HOBB-N`&F`"1`+E>(SW6``,S#(FH@I1;@`:4`EH#B&6$@ +MMB`)`>05(8`D59`?"G(``=D4D$`E`Q)`HT`C`24X8`&C`)8"V1IB0+8R$0`A +M(0A2`#`1`R$6)4(0`*)`(PPEFV-AHD"6`>%88`"V)*<1"5$``(4%IP&%!J<# +M\*6G084`V`H4`2'2"2_M0((]`$_;\<#Z#P_;*'8`$H&P"'>HX@S/Z4`E`!,`V7(- +M[]R*(@4`Z0L#T+;TQ(! +MMM3)$"!``-0:&+`IA<]P@`!@52][(*`$V"\+4`#"X\]R@`"XI`""#?*,(\*! +M!O*,(X*"!_*`N`?P12#```/P12!``0"B`MC#&ABP+WD!V-H(+^T`VGT'#]OQ +MP/[\$PA1`,+)@.`!V,,!K__*(*(``-BW`8__SW.!`%@O%2,!`%.3-9$Z8CF3 +M66'/N!_(+(!V'4'K_\`V?'`X<6,X`AU%`@"Y`8*3^HJ#2``J7`A +M!P_;X'CQP*8.#]O5$@RW[LG"$@.VJ!*"L`#=&0@>!Q"\SW#%[H1U`=F%>JX. +MK^R8=<]V@0"8+"2.`-@6""_M0X;"R;?HO@S/_P66AB!_#(;HU_>R7$$\'8,(``- +MV&$&#]O/<($`F"S@?L]Q@0",,2"@SW"!`)@LX'\$B.!XSW&!`)@LX'\$J>!X +M\<"Z#2_;`KDZ<,]V@0!P,S1YSW"!`)@L`X``)E`0`!`/(*L(7@$($(`@SW&! +M`(PQ`K@4>`!AEP@?`*8-C_]:<(8*[_LJ<**`!/#'=0$``)`*(8`O@``XJ@`1 +M`"#O"$6#!H?/<8``-*H*N""!N&!?"$4``=A"#._>%ME`*H$@-'D^9@"F)H.'%"'$`V`';"'4-\,]R@`"$ +M4;9Z@((-#$40!(H!Y0/P`-OVZ^!_P<7QP,X,+]L"N"AU`-_AQ\]Q@0!P,Q1X +M!F%5)<`5!::I<.[_'*Z+<78,[][)<`*F`"""#P\`0$+/<8``-*I`H3R.XZ9% +MAF&Y!2F^`,]Q@``XJB=U"KVX8`"AW00OVZ'`X'CQP&8,#]O/<*```""[@,]V +M@`"X]2^."B"`+X$`<#,2:11X,"`/(.H.[]X!V,]Q@``PJB"!,'`!V,(@!0!` +M(!$BJN@&AT*'"KC/((__,B$`(`'8L@KOWA;9"'``@`2`!@8"X\0,OVP&A\<#/<(``7++^"._#/<8``C+$YB?_:,'#@?\H@A@#/<8``3+$6>0")1"B^"``A@'^!`-`L +MX'[QP$H+#]L:<"AV`-T"\`'ESW"``(RQ&(@C#040SW>``$ROMG\*<.EQZ@CO +MW`;:\>@&CPL.!!`'CP+P`-AQ`P_;\<`2"P_;SW6```RS.XT(=H#ARB""#P`` +M62LX"T+;&XV`X,PF8I`']!J-`>`:K0'8`O``V$D##]OQP.'%SW6```RS.HV` +MX`%H4`A``3J"2_CR-GY`@_;SW"```RSX'\9B.!XSW&` +M``RSX'\9J>!X\<#AQ0AUSW"``*RQSW&``'2R9@POZBS:SW"``$RRP0(OVZ2@ +M\(=03I*8X1"D4`2:[HKLEQ<@LOZ@C:"HX%?:JN_@UO +M_^EPC"#_CPGR02C!`#YF*X["N`\A`0`KKF4"#]O@>/'`X<7/<8``_*M`(0T) +M[!Q(LU4AP`1!P"AP@"""`$+`5B%`!$/``-A$P`W8!MD)V@#;"B2`#X``Z.,* +M)8`/@`"@K$HF@`;&#>_C2B=``,]Q!```H0X(+^2I`?8`-GR\>!X`-@(<>[QX'CQP,]P@`!,KSX-+^R* +M(0D(]@D/X]'`X'[QP,]Q@``\K"B)ZLD(Z1(-K^,!V0'8`MGJ_P7P`@VOXP+9 +M[O'QP+8.S_^,Z,]P@``P/0"`ANC/<(``.#4`@(7H!=@`V=__W/'@?N!X\<#A +MQ8H.[_\(=:5XC@[O_P]XSW"``#RL"(B"X+P/P?]A`0_;\<#AQ68.[_\(=:9X +M#WUJ#N__J7"8[<]P@``P/0"`E.C/<(``.#4`@`[HSW"``#RL"(@/"-$``M@` +MV<;_!/"!X``+0?\9`0_;\<#AQ1X.[_\(=:MX`=@)`2_;PB`!`.!XSW"``#RL +M"(B!X,P@XH`!V,!XX'[/<(``/*P(B('@`=C@?\!XSW"``/RKX'\`@.!XSW"` +M`/RKX'\!@.!X`-G/<(``_*O@?R&@SW"``#RL"(B`X`'8X'_`>.!^X'C/<(`` +M\,ZM`X_KX'CQP"((+]L`V@AV!9`(HL$`W0;N$(]F""_; +MR7$2Z0'=!^X0CWH(+]O)<0+I`-T5)4`C#I`!W4HF`"`'")X`VG5B">__`-]: +M=\K_7@GO_X'`!!07,(#E`=C`>!NXQW``$```0,`/\,]QDP,`AXH.(`#)<`+H +M@+T`&$`C0")2(`'GSW"```RS&(CK#P40LF^T?0HD@"^``$RM@G72E8H)+^?) +M<&[HSW&3U@"D2@X@`,EPJ(5Z<"\AAR/6"F_F*G"@O4H@0"`$Z`IP'O"*#._L +M*G`Z<((,[^PDV`(A`B`*<"8*+]L`V905`R"8%0(@9GA&>04@?H#J\\]Q26L` +MTOH-(`#)<`#!*WW,("*`!O1,)@"@S",BH+;S0"J`(!1X`"<0(`08A",R;S1Y +M`"1`(!.0`"14(`88!"`H%``@"!@`(,]P@0"8+`.`,0A?@`0EOI\?`/[_DO.^ +M""_GR7`;"!&`.@[OYL]X@."`]<]QD]8`I'_Q3@CO_TIP`-G/<(``/$\@J,]P +M@`!,LR"PSW"``$!/(*#/<(``K+%J"Z_`*B +MSW"@```@.X`%*X,/#P!`0L]P@`#PSD$!K^LG<>!X\<"6#>_:F'#NR:?! +M!\]S@0"8+`:+I8L(N(>+!7VX$P`&%!,'`$#`SW&``/RK`X$0$P8`0<`$@0P3 +M!0!"P`R1$+S*D1"XQ7A#P!J)UHD0N,5X1,`;B=>)$+C%>$7`$)&($;`9(O/<,7NCL,!V4X-;^P%)$03A07OVJ?`\<`2#<_:"'6*"N__*':0Z,]P +M@``P/0"`BNC/<(``.#4`@(#@RB"B``#9./3/<8``_*L5#5$1%HF#Z!J)+^@$ +M@0*A)O#//'`:@S/VL]U@`!\K"^-SW:``/RK%29`$#>(!^EB#>_:$(T!V`+I +M`-@:<(H@_P^4'@`0F!X`$`#8#[7/<(``+*H!W^"@HQ:`$`T($@'R"H_C`NCO +MM14F#A0.ED\('@`0E2/H#I7Z#._:!=D?Z0^5G>BZ"H_C&>@NEL]P`0!0%\]R +M@0"8+$62/7E<>E(B`@!3(@,``MIT>L"YBB/_#[8*K^-*),`'!/`'V`#9C/XA +M!,_:\<`N",__HOY=`L__SW*``/RK`8*#Z`2"!O"/$H``%2(!``J1T07O_P*B +MX'CQP((+[]J*(0L)`-_/=8``_*O/=H``?*SOKO"NSW"!`)@L2@_OZSIP?@V/ +M_P00D@`:<$PB`*K*((D/``!F*Y@+*=O*(8D$"B.`+X``#+-*,]Q@`!LK0!A:WC`)V(0`>(8$X`@ZPH$@`01@2`)"5(`B._/<``` +MF2?2"B_;Z7+/<(``C+$*".__'(@!V`ZN`-@W_[$"S]KQP.'%SW*``'RL+XK/ +MD`V2*L(ZPNLD"#SW&@```@.X%2>EEA`>%!P<]Q@0"8+""!0L&+ +M=1<(D`!*",_IA^BI<`S9U@YOZ6W:!O"I<`S91@]OZ6W:50+OVJ/`X'CQP-H) +MS]H(=BAU7@^O_P#8R7"I<6;^;@Y/XZEPU?^%Y0'EKWTI#1,2`-@/($`#SW&``+33\"%!`P]X@.'+(`*@\?,+ +M?^WS`=CL\6(/3^-"#T__A>;*((8/``!C*QP))MO*(88#(0'OVJ'`\<#AQ0AU +MR?^I<`+9NO\U`<_:X'CQP,]P@`#\JP*`!.BX_@7P`]@`V/_^!X\<"> +M"._:#W@H=<]QH```(-N!4@Z/[,]Q@`"@+?`A```%Z`)^"0VE$P'8`-C=`,_: +M\<`R#H_LSW&@```@.X$!VH#ARB)"`,]Q@`"@+15Y0*'""2_?%=C1P.!^X'CQ +MP`8.C^P`VL]Q@`"@+15Y0*&F"2_?%=CQ\>!X\<#AQ<]U@`!`+B2-@.'*(((/ +M``!6*U`(`ML$C8?H!8V%Z`'@!:T!V`+P`-AM`,_:\<#AQ<]U@`!`+B6-@.'* +M((P/``!8*R`(#-L%C6&X30#OV@6M\<#*#X_:ZO^?"!``"B"`+X``N,Y""V_K +M"G#/<*```""[@`#?BB;_'^ER!?``V`"C`>(S"A4*SW.``*`M57L@@WCI`B5, +M$,]PD]8`I.$,!9`X8`(@00,P=LHF31#*)PT0Z/'?_XPF_Y\7\L]P_W\`_QUE +M$';*($8#RB#%`X#@`=W*)0(0"G#R"F_KJ7'/<(``("ZHH`;P`-G/<(``("XH +MH)8/[]X5V(D'C]K@>)D`+]\5V.!X\<`:#Z_:0"`"`T`@#P<`V0[P.+O"N\]T +M@`#@XVQDSW.``$0>H8,!X:5\@:-AD",)Q0#P(D,`4R/,!==TK```#\PD@I_R +M``!0Y?,!W@+P`-ZF[@#0BD$$,11#P)P$34R'"!==RK```#\PB +M@H_R``!0$?0XN6&YSW6``$0>U0FU@4"%,R9!<(``_,]`)X-R-'L`>P'>Y0:O +MVLEP@KK:\>!X\U@MOW`IPSW6``!#SJ7#&"V_< +M@-G/;A$H0`Q0X$D0#1+#`41$VS/<8$`;"<5>`%A!"&!#_@!``!!*<&$[?,O*T$`3B.` +M!P]X`-X/)@X0SW.``%#DSF,6)0,3X(,0(0&`Y7[`H^[UW/'/<8$`Y"8$D0;H +M5B)`!)__%_`:D0;H52)`"YS_$?`%D@`0`B`$$`$@@+KDN,4AH@3/(2$`"G`A +MH$"@`-C)!8_:X'CQP%(-C]H(=UIQ.G(:`8$+($"$#/(` +M@0L@`(0(\E8E0!-*<`_`!YN$5@!#/<8$`1"<[#@40 +M$VX5>!EA!8GI#P&0SW"``!#SUGA!@`LB0(3L\P"`"R``A.CS0"$``DIQ@@IO +MW.ERX.@!V`+P`-CU!(_:\<#/<(``D/7L'`BPSW"``$#P0<#/<(``&`U"P,]P +M@``<#4/``-M$PPS8`]D&V@HD@`^``(P+"B6`#X``+!]*)@`%?@BOXTHG0`"E +MP-'`X'XH<@]YSW"``)#U+0&/X^!X\<`-Z,]PH```(#N`SW"``&C-(*`%V`#9 +M]O_1P.!^X'CQP,]P@`!`]0"(%PA>``'9SW"``"`-(*#V"&_I5-KO\?'`#@RO +MVA39SW:``$#U0@COZ\EPSW6``"0?J7!."Z_B"-GB"J__`M@PCH#ARB#A#AP, +MX=K`*"$"`]@`V=W_`8Z"X,H@H0`-\AL(40#/<*```"`[@,]P@``8$""@`=@` +MV=3_!(V!X'P/P?\1!(_:X'CQP)X+C]H`WLEPR7'-_\]U@``D'ZEPY@JOX@C9 +MQ*W`I98*K_\"V,]P@`!`]>((;]Q0V=D#C]K@>/'`9@N/VL]V@``D'P2.$PB1 +M``+8`-VI<;S_I*Z@IK4#C]K@>/'`0@N/V@#>4@UOWLEP"'4>#6_>R7`!V`BM +MSW"``%H-`(C`I0FMRJW+K1`=@!\```8\Q:7&I0X/;][)<'$#C]KQP/H*C]K/ +M=8``0/4PC0#>&PE0`!L)D``;"=``SW````([(@O/VLEQ!O`3V03P#MD"\`C9 +MSW>``&#U.@AOW$`E`!D$CSV/@+C!N0*Y)7@$K\]V@`!:#0".)(\$N"5X!*\> +MCR:/PK@E>`:O"B"`+X``3!\$$``@I@WOZP.`#7F(X0.Y+WE0C2>O*8^!XL\AH0%_C\"[![ME>2FOSW&``%@-8(G/<8``)!\J +M'<(0(($;"E$`*A6#$%,AS`##NP2\FV,J'<(01+D(\)R/P[O#O`2\FV,J'<(0 +M*QU"$!L*40`S'0(0`(XT'0(0!M@U'0(0'(\V'0(0SW"@```@VX`0A4*-A2@/ +M"CR/+W`L>M(*K]HO<=A@!!`!(#4"K]H*H>!X\<"T_\]P@`!`]0"()P@>`,]Q +M!`"4L<]P@`!,'P#:`-NJ"^_C2B2``<]Q@`!$/`"A$/#/<8``M,X@@<]R@``< +M$`#8'@MOWD""SW&``%C-`*%/!<__\SW&``%@-`(G/0(+/<8``6,T`H0SPR&,`K7/_ +MSW"``%C-`("`X#`/P?]I`8_:\<#Z"*_:"'%(=@#=SW"``+3.(*!2"F_>J7#/ +M<8``'!``H<]P@`!@S:"@SW"``%C-H*"/#E$0SW:``$#U3!8"$:EP`-DV#&_> +M#R&!`,]P@`!,S:"@SW*``"0?!(I-"%$`SW"``&C-8("%Z\]P@``8$&"`SW&@ +M```@&X$-",0`&X%B>`CP.X$.(X`/_____SA@*98$*8$/#P!`0A$)!7"DJ@38 +M`-G^_@WPSW&``!!)3!:"$!2!#R"``!2A0/^;_ZD`C]K@>/'`X<4`V<]P@`!8 +M#2"HSW"``%D-(*C/<(``0/4CB,]P@`!:#2"H=@COWA#8`=G/<(``3,T@H,]U +M@`!$/&X(+^0`A8H@_P]E`*_:`*7QP,]P@`!@S0"`$PA1`,]Q@``D'P"!`>`` +MH<]P@`!,S0"`@."0#\'_CP//_\]R@`!@S0""%0A1`,]Q@``D'P"!`>``H0#8 +M`**V\>!X\<#/<(``3,T`@"L(40``V<]P@`!8#2"HSW"``%D-(*C/<(``0/4C +MB,]P@`!:#2"H#?`D$H``$0A1``'9SW"``&#-(*#."._>$-@C`\__X'CQP,;_ +MA@\OW@#8SW"``,C-((``V&X*;]X@@0,#S__@>`'9SW"``"0?X'\DJ`+9SW"` +M`"0?X'\DJ/'`SW&``"0?`(&'Z,]P@`!`]0.``*$`V.H-+]XHV<]Q@`#(S0"A +MSW$$`#BPSW($`$BQSW,$`'2QD@IOW@#8IP+/_^!X\<#AQ<]U@`!,'P"%'-D@ +MH,]P@`",\"X,+]PXV<]Q@`!`]1&)084`LA")@>#,(**`!/0!@I2X`:(2@0.B +M3!$"`<]P@0!P-59X0HAAA0.##KI%>`.C3!$``1"K`M@R&P(``=@:LQ")@>#, +M(**`'MK*(B(&$8E"I4)X!:5`(0`%6&#%!F_:!J7@>/'`X<7/<(``60T@B,]U +M@`!`]0-M*6#/<(``6@T@J`#9SW"``%@-(*C4_Q"%SW&``,C-A2@/"B"!02F` +M<@:ASW"@```@&X`"H025!"B`#P\`0$)"*8!R!:$`V#X-+]X!V5T&3]KQP.8- +M3]H(=BAU`-C/<8``)!\`H6G^R7"I<>'_-09/VO'`SW"``$#U`(@9"%X``-G/ +M<(``(`T@H`'9C@HOZ53: +M(($`V'(,+]XHV0"EZ7#)<":_:`ME5)<`=U@FOV@+99+Y'\(MPR@FOV@'9(,%AOB;I<0E1 +M`,]P@`"0&""HSW&``#`8%8&!N%D.\A(5H:EP@""#")H)K]H"V54E0!Z2":_: +M"-E5)<`>A@FOV@'95B6`%WX)K]H$V6^^&_#/<(``9L2A"/#/<:````P$@=A@!*$`WGD.4Y$!V.T$;]JAP.!X +M\A1^ET!6`$"B.`>`)"04`'H4`IS*7 +MS!4`$0\)````V!ZE'Z4`IVT$3]K@>/'`W@M/VL]P@`"P"0R0J\$/>2BX"+DE +M>,]W@`"P%Z07`1%5)TX8,'`0`B(`52?5&NP7EA!,)@"B``()`/`7#1`,[<]Q +M@`"XJ2*!`B&!#X`````P=>0!!0`\CR02$$`H%`(%),`D!2(9(!>/`-GJ#F_:&-KZ<3IP +M!2%9,!:/`-G:#F_:$-H;107AQ`%(5DQ!2=&`&&&`(8,(<"PS"8!@*(`#0#H%P(0Y!%!SS"`!@QKR +M0<)"P4`F0"!JP(7MSW"!`&0FH(#/<8$`9"8`@4;%0\`!@43`SW"``+BI`8!% +MP('`5__E`6_:J\#@>/'`L@E/VLX-S^?/=H``L!>:`5_%XX`V18-;]H8V@AU)7\6C@#9!@UOVA#:!7TE?Q6.`-GZ#&_:"-H% +M(=,#-(ZE>`4A$0#<%H`0W1:!$!BX$+DE>,]U@`"P"3&-"+DE>#"-!2$0``^- +M`-G"#&_:&-H(=P4A$@0.C0#9L@QOVA#:!2#0`P4ACP0-C0#9H@QOV@C:!2`` +M!&R-Y7GD%@\0!7N$%@T0Z!8,$+%WB!8`$,PD`9#/`>JC;P +M'8J9A@'@':K/<*```"`;@`PC0*#,(<&@@G@:IDWWC"0_H<7V&8H!X!FJC"1^ +MK<7V&HH!X!JJ[!:,$*@6@!`5#`(0*0P!$`PC0*#,(<&@3O>,)#^AQ/8;B@'@ +M&ZJ,)'ZMQ/80!,=%I,00"\!%D`K +M`"0E>#F."+DE>#B.!2$2`!>.2@MOVJEQ&G`%(E(@%HZI<3H+;]H0V@4@$"`% +M(E(@%8ZI<2H+;]H(V@4@``14C@4A@00%>H0>@!"('D`0I!Y$%,]Q@`!0&*BI +MYJF,'D`3D!Y`$P<9P@3%!R_:N*;QP,]PH```(#N`SW.``+`7$X//`'8 +MSW&``+`7'*$`V)P9``"@&0``SW*@```@&X(9H3N"SW"``"11M0+OZI8A$@#@ +M>/'`_@XOVBC:JL&+=L]Q@``8T<8*;]K)<,]W@`"P%Z@7@!"?"!``/H/`-D>"F_:&-H:<"5]%H\`V0X*;]H0V@4@$"`E?16/`-G^"6_:"-H%(``$ +M5(^E>05Z0,)!P0#8:!%X(PC4`%4G0!C)<:8/+^DHVO_8:<`( +MA8/H`-A&P,EP=/ZE!B_:JL"BP?'`-@X/VJ;!*'9(=?H)[^H:<(MQ@<)."._I +M!-C/<*```"`[@(HC"``"(0\$`">/DP#8`24-$`(@@"/2N`)Y9'DB>P38Z7%" +M#N_JJ7(!V<]P@`"P%S6@A,&%P@H([^D$V`'``,$0=(($`V`"ESW6``,3-((4( +MZ0?8T@@OWB"!`-@`I04&#]KQP(H-#]H(=\]Q!`"HO\]R!`#4P,]S!``HP2H) +M+]X'V`(GC1\````(!]A2#._=+]G/=H``P,T`IJ*@SW"``+`7"(`0Z`?8-@SO +MW2_9SW&``,3-`*$@AB*!QW$"````(J`'V'H,[]T!V8D%#]JBP?'`'@T/VBAU +M"';5_]X-C^-J#@``SW"``"11B@C/Z@(F0!/2N-S_#-QG!0_:X'CQP.'%SW6` +M`+`7G!4`$!CHE!4`$(P5`1"0%0(0I?\XA3A@C"`$@!BERO>4%0`0C!4!$)`5 +M`A#G_P#8&*4I!0_:\<#AQ0#8SW6``+`7'*4>A0'@'J7/<(``)%$>",_J`]C: +M#2```-EB_Z`5`!`.Z-`5@!`+Z*@5@!"`X,H@(0*\#2$`RB$A`-__$/_=!`_: +MX'CQP.'%SW6``+C-((4&Z0?8O@WOW2"!I>@'V#8+[]TPV<]Q@`#`S2"!`*4$ +MZ2*!!O#/<:```"`[@<]RH```(%N"`-LP@O(0<@`_"H%I$0SW>!`'`[((?/=8``",0`A1C:(*``A1S9(*@$ +M;P&E5B=!$E8G`!,&I0&'(Z5"I8+H0:<*)8`/@``P&"05``$*)H`/F@%0;P]Z +M*+@(ND5X"K$,%0<0SW"``,#-$!^$`4$N!@02'X0!`("`@'05``!6)T(3$PP` +M$,]T@`#$S8"$@(0/"`$#BB`(``"R!/!DV&@?!!!;A@J&.&"%Z@#:0Z@$\%R. +M0ZA=CD2H"X8`(%(`0"(5(T`BU"!5)E,86PD1(!R./8X8N!"Y!7D9C@BX)7@X +MC@4A%@`7C@#9X@TOVAC:&G`%)E8@%HX`V=(-+]H0V@4@$"`%)E8@%8X`V;X- +M+]H(V@4@``14C@4A@05%>(0>`!"('D`0`-D'\#(C0"``)$P@`*P!X?<)%((+ +M&D(D5B;"%`#9!O`H8@`E3"``K`'A]PD4@0&'(85XN`6E`8&-N"$"+]H!H>!X +M\<#AQ0AUSW"@```@&X#P'`BP@<&"POX+K^D$V$/%BW`0V:X.K^B'VCD"+]JD +MP.!X\<"^"2_:`=C/=8``L!<;I0#>6!V"$V#^#84NA4^%V/X-A2Z%3X4>_\EP +MW@H@`,EQ^0$/VO'`?@D/VAIPSW"@```@.X#/=8``L!<=A0)Y#PER`/0=`!0! +MV!NE@>)_]`HA@"^``,#-`!$`(`"`$P@`!,]P@`#$S0"``(`-"`$$`=C4_X+^ +M)@OOW0?8"'9*"^_=!]@(=P`1`"``@!4(``3/<(``Q,T`@`"`#0@!!"P>@!\` +M`$`@SW"``,3-`(``@!4(``3/<(``O,T`@`"`#0@!!!*%ANB5V`?P$84$Z`]X +M`_`&V-H,;^4)KPBO`-@:<`JO"Z\%IP"G!J<0'X`?```&/$`F`1)`)0`5_@DO +MZ0;:I!4!$1`>@!^:`5!O+W@HN0BX)7@*M@_8!J85V`>F`X7/<8``$$D!IL]P +M@``(Q`&`4(@4@0\@@``4H0C8%:%R#._=!]@"V+()(``*<;D`#]K@>/'`6@@/ +MVB()K^,(=ZH)(```W<]P@`"P0)4@2`N@H,]P@`#`S0"`SW:``+`7`(`5#P`0 +MSW"``,3-`(``@`\/`1`0`OVO0>0!/@>/'`T@B/XUX)``#/ +M<(``)%%^"X_J`-G/<(``L$"5($@+(*#/<(``,!BE`.__/:#@>/'`V@_OV139 +MM,&+=@X,+^O)<%X(#^+/=8``L!?)<"1MQ@DOZ13:0H4;"E``00J0`&$*T`#/ +M<````0KB#R_:2'$\\`"%@.#*(&(!R`/'`X<5*)T``SW6!`,PJ[!Q(L\]P@0#T*D'`SW"``)100L#/<(``F%!# +MP!`%`I`H_JX'CQP)X.[]D` +MV:[!6@[OXDAU"':+<:EPT@_OZ"C:BL&+PJ((K^G)<(MP.-E6"Z_HD-K9!N_9 +MKL#@>/'`9@[/V<]P@`#`S0"``-[/=8``L!=`@/05`1"+OA4*0`#/<(``Q,T` +M@`"`)PD!`*@5@!"1Z!6%@.#,(D&`"_0$V(HA(`!-:&8.K^H`VP'8%:7)<`/P +M`-B-N#6%"^G/<:```"`[@1EASW"``'A0G@F/ZF$&S]G@>`38`-F8\>!X\<"N +M#J__X<7/=8``L!@:B0T(T@`&V`#9K__H\>!X\<#/<8``L!<<@83H'H$;Z`(* +MS__/<(``",3/<00`E,(`VDAS0@\OXTHD@`'/<8``2#P`H<]PH```'$`8@`\! +M````QO$Y`,__X'[@>%[QX'CQP,]Q@`#P%QN)A>@!XO0>/_^!^ +MX'C@?N!X\<#/<8``\!<9B8;H&HF#X`78A_8;B8?H'(D%Z`;8`-ER_W#QX'[@ +M>.!^X'@'V/4'K]V*(?\/X'C@?N!XSW"@`(`,0!B`#P"@#`#JR<]R@`!,,P`? +M`$`@@@`?0$`!@@+9[03OX0':X'CQP,]P@``@,W((+^L+V?'_\?_1P.!^X'CQ +MP$((C]W/<*``@"!<&(`/`P!`#?/QX'CQP/H+[]D!VL]V@``@,RF&J,$'AB*Y +M^K@`W<(B@0!&(<\`,F]`(1$'9L4_V18<1#`5(9`@"B(`)PIQ7@A@`$IR$'L0 +MV">&"G(:"Z`!"B2`!`AR$P@>!L]P``!>"_8++]HGA@/8SW&@```(`J$'A@T( +MG@9/(<`G"J$(V@`8A%``&$13088`&(!01)8`&(100X8`&(!02)8`&(10188` +M&(!03)8`&(10`!A$4POP`!C`4P`8P%,`&,!3`!C`4V2_^.^AH?(+```,<.NX +MRB""#P``:@MP`P+:@0/OV:C`$-O/<:```"!AH0'8!QD8@,@1`@#/<(``(#,( +M@!!RPB"%`,H@)@`0H6"AX'Z*(`0`SW&@```@`:$4V!ZA`!F`#P``$!\$&9B/ +M(`!_``<9F(\!`,#\609``?'``-C/<:```"`0H1#8`*'/<($`0#[+&ABP!!F` +M#P`$``#/<(``(#,*@`CHSW&``#3-`(&%N`"AG_^E_]O_#'#Y"-Z!SW"@```@ +M`!B`#P`$``"9_S()#_NH$H&PC"%"@`">`^KG* +M(X(/?P#__P;TZ+G*(X(/`P#__TF`4'/*((X/``!H"RP*#MK#_P"&":<`A1&G +M/0+/V>!X\<"^"<_9*@WOWP#=P``*`S1B#``1"B*]@2N*"@H:`AAPH@ +M@"\```!`>G!7"5$`BB`$`((*;]XZ<%IP"R``A`'8PB`!``2X3R#!`,]P@`#X +MJ`*(@N`!V,!X![@%>1"YA2&2`,]PH```*!IP(:"V#>_9`=A/(@$@!!A`($HB +M0"!1\%4)D0`R"F_>BB`0`#IP"R``A`'8PB`!``2XSW&``/BH(HF#N(+A`=G` +M>0>Y!7D0N84AD@#/<*```"@:<"&@8@WOV0'83R$!(`080"!*(D`@)_#B"6_> +MBB`4`#IP"R``A`'8PB`!``2XSW&``/BH(HF#N(+A`=G`>0>Y!7D0N84AD@#/ +M<*```"@:<"&@`=@2#>_96G!/(0$@!!A`((HA!"`!AVIQ`[@"H1@9@`08&T`C +M(H<#V!IP"0E1`!"F!?`'"9$`L*8$AX#@:`_BX\H@8@!!AX.'4]D1N2T*T0!% +M(L`!-!Z`%)UZ3WH(O`0D0Q1E>D.F`!D`!*6FKJ:"X,H@X0`3\#0>@!2=>`]X +M"+P$)$P4A7@#I@`9``2EIJZF@N(#V,H@@@`;IA?8`*:*",_A-0#/V?'`2@O/ +MWP#:SW.G``!(3:-`H\]T@`"`57`3``8@A$8@P`'"N25X/'`SW"``*`S`("$Z&S_`_#D_U<#S__@>/'`G@IOX@#8SW"``*`SJ@OOZ@79 +M]?\[`\__X'CQP`QQSW"@```(/0D>`S:`!(`0>#A@BB$2"A9YE@VOZX#8#'`A +M"!X#`=G/<(``=,,@H(X)K^HH<,]Q@`!DN16!`>`5H0#9SW"@``!%)*`#V<]P +MH```"">@T<#@?O'`X<4`%@%`"'76&EBP`!8"0.H:F+"HRQ<($`?//'`M@Z/V:+!&G``V#IPP1D"``&! +M,!(#-K")22/,`#T('P'/<($`""P#B,*X)0C1`$.!`]@.N`0B#``9#``0SW2` +M`$"G='QQC`D+'@!'>`.A(X$`&$`@DO`3;15XSW.``.2S`&,\N%,@1(`(],]P +M@0!P-;9X88@#\"IS`"2`'X$`<#6V>(2($HD((``#""#``!IB`)'7<```[P]) +M(LX#TO?/<(``4+.H8(P@`H#*(($/``!<`$0&X=G/("$#"28.$!9MSW*!`/`U +MU7@`8L]S@`"`YD"+!^H\D88A_PP'"1$"`8,$(+Z/``0``3KR`]L+NP0@P0!! +M*<4"Z+@#W,HG(A;*(N(!RB0A$V9X"2$#`9A[ +M!7M`+<`"!7LI"YX&0"W``#EA%7@U>3A@6&#/<8``?-D(80T(W@%&(\,#8;I% +M>XMPJ7'V"N_=:'(`P``E@A^``,2DAN[/<8``&,6I80/P*G$@J@`8`""=!:_9 +MHL#@>,]Q@`"`YF.)5B`"!%,C?H`F@@KRW;DFHN"[SR&B!\\AX0('SR&A!R:BX'[@>/'`]@R/V0AW*'8`V%8A +M#00'I7H+K^40B0AR5B;`%,EQAO\&A00@OH\`!``!"/()A1P=@!^`````E+@) +MI4T/'A#)<-[_)H5'A1,)G@<)A84B`02,N`FE1Z48\-?)@"`&`!L)W@E.8">N0?PE+J6ND>E.8">N9^Y.:#5!(_9\!MV4P[J`YLDC8@`H]-"(SW"!`'`U%B"/`^"/AB?_ +MDP?TSW>``(#FXX\)#YX0`=D6Z4`K00*1N=9X`(@RI0#?$0A?`<]P@`"`Y@.( +M!PC>``'?!N^(N3*E`O#"ND`D`1A880:(66%0B0CP.(T\><*Y.&2980B(4(D] +ME"5Z`J48NT5[#02OV6.E(8`="=X`,(@#N35YQW&``.2S2Y'L&((`*I$&\#_9 +M[!A"``#9X'_J&$0`X'BAP?'`4@N/V:'!NG!,P"AV!""^CP`$``&: +M(E,ECR!!+<`@4R!6`$#8"?`LP%,ESR!$N%,@5@"`V`0EC2\````8*[TS;0`F +M@B4U>55Z66'Y8<]R@`!\V3(B4``+(`"$RB""#P``20#/("(#1`OBV``@$P1."._DJG`O(0@@0B$`)4(HD@#/<(``)-KP(,$# +M%&T5((`%SW*``#S9`&(%*3X`"B#`#D#``-@O#!`@&1P"(!P<`"`C#=XF`=@9 +M'`(@"G``P:ERZ7,*)(`%"B5`!0(.+]X*)@`%D^@`%`0P:G`%*#X!"B#`#@0E +MOJ\&````)+@!X`7R4R`!`#A@*0U>(\]Q@``@VB"!!2D^```A@G\``/\/++I` +M(L,#)+L`(T$$!O`5(0$@`-MHA0< +M@B`#XR*[0G,&\``B`R`4'`(C='M1)8"F8[L`',`@7_)2;55Z]'K/4#V,`HX03*(.(`P"AB!<5X$!P`(#?P+,!)#5XB(0C2#<"XSW&``$35\"$` +M``.^!2X^$`H@P`X!X`?P"0B1`A-N`_`2;L]Q@``P25^!+,$D>H8B_PXBNL#9 +M6GD981/P`[X<>,*XSW&``,3:\"$``!;F!2X^$`H@P`X!X`*X0"`!!3!X"-QK +M`:_9H<#QP!H)C]D:<"AU$!&1``#>5B$/!-?)R:?/#!P`=C`>!?H@@]OY2IPSW&!`+`T%B%! +M!"*)&PA#`##(SW&``$"G%'D1B87H"G"I!PF'C+@)IU#8!ZG!?`<'X`?4````!$('B4D'X`?`@````/PR:$2ZP;J&(/\.6&#/!DV`/R`-A"<"&%$'CCN$QN,&X.&`4\#B/!""`#P(```!$N<&Y`>$QN``I +M$@`$V14=0B"I<-+^`_`!V%IP()44%8`@&6$5%8`@.&`FAQVW!"&^CP$``,#* +M("$+``^AV<\@(0,G"E`@3"*`H,PBXJ#*(&(+X`:BV<\@(@//<($`<#46($`$ +M`X@'\,]P@0!P-18@0`0"B".'#K@E>`.G!H=5)4(=/9?!_BF'!"&^CP```#`! +MMS[R0X<.ET6G";<`'P04RQ(,MB$)'@,4V`BW/AS$)'@4`Q$"(\`@&;<2A\X: +M&+`+\`[8"+<^'(0C>!0#$0(@P"`9MQD)W@#`RL]S@`!4Q19[`Y,$Z)&Y*:<$ +M(H`/``,``#BX`]D&>8+@RB$A`-?)"[EY$`(&17EY&%@`#/`FA\"W):/'`O@UOV4HF``!6 +M(`P$2801"AX&.Y3/<*````0DH*_P`!8#058@#0)\L``6`4$]L``6!4`\&$`! +M`!8!02"U`!8!0#&@`!8!022U1",!`S\)$`$8WMFU`!8/0/.@`!8/0>BU`!8/ +M0>JU,PD1`HHD#``$(P\!)P\!$1[>V;4`%@]`]J``%@]![K4)\!#>V;4*)(`/ +M@0`4+`H$``6#T$$ +M(X\/``",@!XPCQ((-]`'=SW.``"`XHZ,$((`/_P```#"X!*.8 +MNDFD!($;M*T$3]G@>/'`X<7/<:#^S`8%V!6X)*#R#(_HSW"@````!H<]Q@`!4J@"!"^@` +MV`"A+'`!")X%SW"@`(`L'(#+R:`0`0`["1X$BB$(`*`:7+"$_^[)QP@>`,L2 +M`[;/<,7NA#:\DU03#`$!V>H2`K80O:`3`P#:"^_J!21$$T_P*0D>!=;)SW*@ +M```N++A3(`$!%8(!W!`@0``5HC#(7@IOZ@`L`!"*(!``RQ(!MM`:&+"@$0`` +M'0@>!YX.#^+/<8``9+@1@15Y$H$!X!*ARQ(!MJ`1```-")X'HZ"-0'94@OOZJ`2`@#/X"0GB#.@OOZ@#9`]G/<*````0HH'$#3]GQP`X*S^0+Z(X/C^0'Z,]QI``` +M0!F!@+@9H>$#C__@>`0H@`\``"^Z0BG"=$0J_@("($`.+R`(@%![!/(!XE![ +M"0@S`6"QA.@`V`/P@-C@?J'!\<"B"D_9*'9$P6AU0:.*(P0`)PD>`E$@P($! +MV,(@`0`'N$$N01%D>05Y&8V)N0VX)7B.N`*E8_`5C07H`VI&(,```:5!+D,4 +MP;L$)H(?````&"3!*[I$N<&Y`>$`*\Y7SKE5,FP!`*OP0GCQ\'``#\Y7Q!+D\3P+\5O^5\](T6O^5\^8T7O^5\ +M0"Q/!^5\D[R4O)Z\&PNU`(*E!.L3"94`@N',(JZ`S"!N@@#;PO$@.A`H4$H0_PSW&F```!$*$#A1.A`H41H02%$J$9 +MC0/H!X44H0C!!XBW&5_\EP%_`- +M"1$%''@`'`0P"_`+"9$"`!R$,`7P`!R$/P``__\`V`+P`>#_")2"`-@`%`(Q +M5=D1N>*A0*&"N`.A*_`$);Z?``0``0_R"G!'"-\!@./*(($/``!3``@!H=G/ +M("$#B/\7\,[)'0A>!$$H`0+`N2FXP;@:N1NX)7B=N,X:F+,#\,EP!;\%?U/8 +M$;CAH,2@!"6`'P```!@KN`0EC1\``P``.+VE>,]Q@`!DN!&ASW"@``!%!(`` +MW@0@OH\`*```2B%`(,(A0B0$\'H+#^//<*```$6\@`'?!"6`'X`````$)80? +M(`````0E@A\`!@``!""!3V`"``#7<0`"``#`?\]SH```(`#9%0D0(,@3#``- +M#-40@.?*(6$`!1,,A@0EOI\`.```!"2/'P```(#,(2&`P"9A$`4@``$%?P4G +MOI`$](D.E)(-#-X3];W,(B&`?O+/`.H9R^3O*=#5\0,,@`V0\A`0#/<(`` +M<,,@H$3P%0C>`,]Q@`#DMP^!`>`/H4+>.O`(=(8D_9?1(*&!,_3MN"@(@N@O +M\!,-7A7/<8``9+D;@0'@&Z$E\!WJ^KW`?L\F8A02]!<-7A;/<8``9+D4@0'@ +M%*%"W@CP/H,YV%R#<@]OV8RX`-ZI<,8-+^LJ<0KPV@]/Z,]Q@`!DN1R!`>`< +MH0#>[LF8OFT('@#/<,7N@C4!V2(/K^K)X"0@#9J7(2#Z_J*G,F\`43 +M`(;PN,H@(0#/(*$#*`TAZ\HA(0#/<:```$58@06!2WC*)B$0$O(<@0'8SW6@ +M```(!J7@>.!X`-DFI08)+^H%W@/8!Z68OHGN'PC?(0/9SW"@```((J`'\,]Q +MH/[T!@78%;@DH,]Q@`#DMPV!`>`-HRYS"(A@,P@(8`%]&QPS0@>@&QP(0@>``'9SW"``'3#(*!B +M""_J*'#/<8``9+D5@0'@%:$,<.RX`-@*],]Q@`!DN1N!`>`;H0#8F+C1!D__ +M\<"R#0_9RQ(!MJ/!$!&5`,]P@`"4F@"(`-Z$*`$#SW"``&Y6-"!2#L]WH`"` +M+3#(':?7R:$2#;>`(0(`_A`0!T8EP!"A&ARP"8'#L5,E?I"$N*0"(0`)H4`M +MP"`5>``@E`^``.2S#A0`(1,(40``%``@AB#YCX`"`@`*(8`O@`#DML]P@`#D +MN""`>G`!X2"@`_!:"`_C?H?["]Z%1PN>!5,CP`("N$$K#`..X,.\T".E!9GW +MS!("MF2X5B(!!`BQ=!J"`\"R=1J"`\>AW;'+R9"J@8"&)/\=A+R!HA*(R:$2 +MJJ,+G@7,$@^V$(^7"$$%R\D!@(\('@$="UX%`-C:#V__Z7',R:00```MN(8@ +M_PL%?0SP2@LOY:IP"')6)\`4[@UO_\P2`;8`%``@"PA?!,P2`;8M\,L2`;:8 +M$0``Z+C!*.(`TR!B``GT$0B>!I@1@`!$N,&X`_``V,P2`;:8$0(`Z+K!*N(` +MTR)B``GT$0J>!I@1@@!$NL&Z`_``VHGH!^JZ$0`F`>"Z&1@@M/`!@<4(W@"8 +M$0``I!$/`-<2`[:+,*X]"(``$'`!/!`QD'&`,"(&0``S!("M@'`5B(!!&:!`K$3"UX""8&`N`FA +M"MAV&@0`!_`0V'8:!``(D0L+GP8`W@?P!.`(L038=1H"``'>!H&`(@,%N@]O +M_RB1S!(!ME8A`@3I&8(#(I(!LCA@&+++R<]QH```(+`0#`'`$0,`8GP`)`,4 +MF))"C!RI@;-_T)TAA@$`P03`""A&ERS`>`$&P`@#0,OV:/`X'CQ +MP,X*+]D`V\]Q@`"4FB")A"D!`\]Q@`!N5C0A3`[/<:```"!H$00`P!$"`$$( +M$0'+R:$2`[=V$`T!@"`"`"<+'@%I@`\+'@7/!,-`:$2`[?DN]$C8H`&\H)X0G@")`,`$O`)AQ<('@7/89AMC`I<;8]QDH$HJ`B(&P@R`$@J""(SW"```PJ`(`3"$4`BB`(`-`: +M&+"*V)"X!_"*(!``T!H8L$+8F+C@?O'`(@D/V<]PH```1=R`N(``V!T-7Q4$ +M)KZ?``8```CTSW&``'3#(('/"1``U\G/<:```"#^$``'$:$@V`"A"PZ>%LW_ +M*_`;#EX6VO_+$@&VH!D``(8@?H\A\@'?(/#/<(``=,,`@`SHR\F@&(`/!0`` +M`(H@"`#0&ABP$?`3#5X5SW&``&2Y&X$!X!NA[O$,`,L2`K;/<,7N@C,!V:8(K^J@$@(`SW#%[@)"`-G)/'`)@@/V1,*'@#/<(``+D$T($`.!O#/<(``,$$T($`.X_^XZ`/9SW"@```$**`@ +MV*`:'+#/<8``Y+<4@0'@%*'+R9@0`0"4&$``RQ("ME8B`00/D6"1";$=D0BQ +M"8&LN*VX":%^$@`!&V,8D6)X&+$`V'X:!`!!D0"Q6;&V#N_G)H'+R:00`0"& +M(?6/P`X"YT4`3__QP.'%R\G$$`(`,(B$*@@&SW"``#@_,"!`#H7@S"#B@1ST +MSW"``'B@=FE@8(#@`-C/("(#$_2$*@4*SW"``*";,B!`#A4(D0!R"*_\2'"` +MX,H@8@`,N`/P`-B%(`,!$'D#V\]RH```"&*B`!@$4,O)?9``&,10R\EQ@``8 +MP%#+R4@0`P$`&,10`-@!HLL2#+9]E$^$$+M`%`T1,+H0O904`!!E>:5ZX@KO +MZK(4`Q$)!\_8X'CQP(X.S]C+R:+!I!`#`)@0`@!R$`$!$PL>`$AP_@IO_P#: +M"'4'\`'A2'#R"F__`-JL:"(*C^G/<*``@"#0@(MQR\F!PFX(K^C$$````,'" +M?0'`/65!:#!URB(&```80%,`&(!0`!8`0``6`$#+R<]TH```"%8@`P(XDVBY +M)*0XD\P80`-HN3BST!B``&T&[]BBP.!X\<#F#<_8*'96(0\$)H<$(;Z/`0`` +MP*'!,/0&AT#``=H5"!X"02C"`,&Z`>(QN,&X&F(.\!D(G@8@P@0@@`\"```` +M1+K!N@'B,;@8>B$*4``3"I``@^(`V,H@X0'`**$#"O#/<($`""P"@`;PSW"! +M``@L`8`%>2:G#Y0A`0K@(-[^$`V1&GZAJ8 +MM!&.UAI8M,*XSW&``&3B"6'/`FG`)8X8#6* +M.&`=MV();__)<`2%&K&(/6/-`PBY\H@@@,0'<`4#_`0'<`4 +MH`8H=D$[]BAP/'`@@S/V`AV*'>PB0'8,Q&0 +M``"N,!(!-L]P@`!@IRA@"B&`+X``0*`7*/SW&!`'`UMGE@JB")/'G" +MN02Y97D"\(#9(*H$O04@02,AJCR7,;8>@`2VULD&IE07`!$.M@"7#[:@%X$0 +M*:;0R00@@`\"`$$`#0B!#P(```"(N2FFT,F&(+Z/!/*)N2FFG!<`$0'942"` +M@<(A00`/APRYP+@-N"5X#03OV-@:&+#QP*X+S]@(=0/PQ@Z/XL]VH```,),6 +M`);S"!Z!UA(/MC#(,![8DQ$(D0$&V-X(;^*I<5;P++_$OP/PE@Z/XI,6`);[ +M"!Z!$F\P((X/H`"T+NEP@"#"`93GRB<&$`*_,">`'Z``&"S/<:``@`R`(`0` +MPG@/>'D(-0(PVD`9@`\`H#``"P@4`0#:`O`!VNK)`!\`0""%`!]`0"&%`!]` +M0"*%`!]`0".%`!]`0"2%`!]`0"6%`!]`0":%`!]`0">%`!]`0$`E`1A@@0`? +MP$`A@0`?0$#8R<5XB@OOX`+9*86I<(X/K^HP$@(V+0//V%"A*@N/YX#@RB`B +M`<0+HN?`><7Q\<`S:#5YSW*``/*S,6+X'$BP0<"+<`C9>@]OYY[:HL#1P.!^ +M\<"&"N_8`]HP$@$VSW6``$"G5B7/$_`G01`DL,]QH```!%6A`-ZN_S#(RQ(" +MMA0E`1#`L0&"7PB?`\BQJ!F$`Q"*SW.``.2S`[@5>$`C$`1`(X$#&V,'DSL( +M4@!AN`>S4(H3:A5X$&&5Z`#8#R"``((,[^D?V"XSAK8LX3R9@HO_RAPRQ("MC"*4R'` +M`$2YPKG`&D(`,V@U>1"JQW&``.2S8($W"U\"_@COX>EQRQ(!MH0H"`;$&0`` +M`"&!?X``,#_7&EBP1"@^"TZ!`"&!?X``8$Y`H1OP5B(#!`B#D+@(H__8$:,D +M$8``SW.```BT`>`D&0(`,(H3:15X"&.#X,H@B0\```@K&`D)V02&RQ(!MK09 +M!`#0R98/+_\P$@(VRQ(,MK`4`!&7"$4#`80$((`/````&-(+3]T$(+[/8``` +M`,L2`K96(@$$!O(@&8`/`!$```SPSW"``!0^`8@1"%$`(!F`#P`)``!!`P`` +M4(K/<(``Q*1*8`F18@XOY26!'?``%@!`UAH8L``6`4#J&EBPJ,N`C8-3__+$@RV,,C/<8``0*=`(0X, +M%'D(D:OH$(S/#20!"*"#P``\/_#N45Y-+`%\*@1 +M``&X'`00H!0!$,]P@`"4FH'AT(P`B/#T\@L/Y,]R@`#<.V&X#WE%N?`B00#$ +MN,L2#+8="0X`H!R`'P$`E`#/<8``9+D6@0'@%J'6\-#)YKC2]`&$#PB>!J`< +M@!\!`)``RO`#OL]W@`#DLT`G@!?5?LE@P!2`$!$(0`"@'(`?`0"1`.OPSW"! +M`/PK`8`@E`GHSW"@```$#H`0<0#8`O%!P`=K`>@?J +M(!F`#Q`!``!S\"`9@`\!`(@`;_`)@;2X":$)D:>X";$/D:>X#[%E\"`9@`\! +M`(4`7_!&ES,4@!!7"@X`SW.``#PU08/6R0KJ++C$N`#:#R("``.#!'H(\,#: +M&+I$>%!P`=K`>@WJ5B0"%`F"M+@)H@F2I[@)L@^2I[@/L@GP`80/")X!H!R` +M'P$`C0`Q\-#)(0@>`&X.;^G$%``0L7#*(48#RQ(,MLHA!0"H'$`0`_`Z@58D +M`A08DB,)!0`@&H`/``4```H*;^H6V,]QH/Z,!@78%;@DH,L2#+;/<(``%#X! +MB`\(40"@'(`?``D``%8D`Q0(@\]U`0$``*MX$/0)DU4D1!TE@TB3W@MO_WF3 +MRQ(,MJ`4`1`E>*`<`!"K>`;R]@A/_ZL`0`!N#R__B7#0R +M`!R2SW6@```@AB#]#(P@`H([]`X.+^@1@(P@!(O+$@&VRB*&`X`A`@`*@<`2@S`0 +M`.0$'+*(P8`RB.%`(PC!XU+H4+W`-N(ZPF!L;@)H07P +M2H%+H?GQ:'($'8`?``,``,`5`1`!:1!RRB"-`")X&J4`'8`?``$``,L2`K8, +MZZ02`0"AS?&YQ2"B!,\@80"A&ARP`8(/")X#H``#@_,"=#'C"*A>/,(^*!'_3/*"6:8-C@./`><\A(@,6](0H!0K/ +M`U02`P&X$@$!P[ME>50:1``( +M<88A_0R,(0*"%_0PB@.Y-7G'<8``Y+-GD1\+4@`HD1L)7@`3"U$`8!(!`82Y +M8!I$``/PC;@?(!V`C\RQ(!MMH,+]T=L +MA>#,(.*!'?3/<(``>*!V:6!@@.``V,\@(@,4](0J!0K/<(``H)LR($`.%PB1 +M`!X,+_Q(<(#@RB!B``RX`O``V`/9(J6%(`(-$'D`&`10R\E=D``8A%#+R4^` +M%0H>`-?)1H``&(!0U\E.D`?P`!B`4,O)0!`"`0`8A%#+R5&`R!```/&XSR(B +M```8@%#+R4@0`@$`&(10`-@!I:5Z +M8@YOZK(4`Q'+R900``#IN$0(@?^*_(,%```V#V__`MC+$@&V';'/<(``9,.@ +MH*S\R\F8$`$`E!A``,L2`;:`(0(`#Y%=D0FQ2+$R":_G)H'+R7@0``%H_(#@ +M/@4"`#(,K^"+<,O)5B`#!%4@1`T)DR6#2),Z"&__89/XN$`+0?\;"!X&`]G/ +M<*````0HH(H@$``'!2``T!H8L,O)I!`!`(8A]8\(\O((S^8#V<]PH```%"F@ +MRQ(#ME8C`@2I@O2]RB6!'Z````@A\L]T@0!`.\*$"9(9#K00)8)`A)H.+_]` +M)`,42@O/VZ\$``"GN`FRM+T)DJFB@",#!7X.+_](D@/8SW6@```(`J7+R<]R +M@`#@UC&(PKDO8L]R@`#,V"YB_F`-D(\!$)G@+&#<_FX@[OYLO)Q*7/<*``@!SYH,O)I!```.2X\`I!_\L2 +M`K8!@A$(7P;>#6__!-C+$@*V';(6A8#@RB#B#-``XMC/("(#5B(!!`:!`=X- +M")X&'9%DN)^X"J4`!&! +MA"@%"@`A@'^``*2;/I`1"5X"!("`X``,X>3*(&$`R\D\D``81%#+R3V0`!A$ +M4,O)+X``&$!0R\E`$`$!`!A$4,O),8``&$!0R\E($`$!`!A$4,L2`;8``(*#]T#\/8)#]W+$@*V`=F"$@`!)@QOZI`2`@'/ +M<*```$4\@!B`5PA?!00AOH\`!@``)?0$A2\F"/`A\LO)L!`!`8`A#PI2#6_J +M0-@,RQ("M@AU+X+)<"X)K^%0@@0EOI\&`,H`'O+/<(``Z#0#@(#@ +MRB#B"L\@(@/*(4(#U`ZBV,HB0@//<8``9+D3@0'@$Z$%V,]QH/X4!Q6X)*#G +M`0``SW"@```$RJ#+$@&V`8$U"-X`I!$"`(H@"`;$$0$`#'D1"AX`SW"``"Y! +M-"!/#@SPSW"``#!!;@QO_S0@3PX$\'81#P&AS5,@?H`(\M#)S!(!MC`2`C8' +M_,]U@``HQ:EPRQ(!ME[\R\G0$A"VSW:``,@[H!`1``'8`*;*#6__Z7``V2"F +M">B&('Z/K?++R:`80`30&ABTRQ("MH(2``%^$@$!.&"`$@$!.&`0>S#(SW&` +M`$"G%7D>@7A@'J$!@I4(W@!F"2_D@-@(<@C!X>YH1I`4H23P$-B@&ARPJ7"A_,O)`8`5")\#,,@! +MV@`@@0^``*"G0*FAS5,@?H`/\LP2`;;/<(``Q*10B4I@BB`$`-X*[^28$0$` +M`-JAS2T(7@`O"EX'@[BA&ARPSW"!`!0L`8#+$@&VF!D``-#)@@OO_C`2`C8% +M\*.XH1HD(=L#*SW&@```N-8$"N"\2`C8P((`/H`!D +M+D1X!'D$(1($L_"D%``PN+BD'``P(@[O_BIP\@EOZ0#8"';/<(``*,4:<$(/ +M;_\J<0IP!?R=\`/8&G`5IR0?P!2Z#*_^*G`DPE8D`313(L``1+K"ND`9@@`S +M:#5Y"B2`+X``Y+,P)$$@9,`/"5\"3@MOX0#9`O#_V(8E?QO$'``P&PU>$*`< +M@#\!`(X`UPT>$:`<@#\!`(8`9?`'[J`<@#\!`(P`7_`DP`.X%7AP(`$%*'2& +M)/&?#O(/"5X"H!R`/P$`BP!.\*`<@#\!`(@`2O!>B,`4@3`1"8``H!R`/P$` +MD0!`\`'!$PF>!J`<@#\!`)```=TW\":0,Q2`,$,)#@#/!,(A0\`@```H!R`/P$`AP`!W8#FS"4A +MD%'U(!\`%(#F8_53)7Z0!?(.AX#@7?5G#5X0`=I*<`3P$"!``"CH+RL!`$XC +M@0N;JSW"` +M`#PU`(`*Z!$@0(#*(($/``"<(6`*@=@`V`/P`=B`X"OS40)OV(`D`SW@>/'` +MH<&+<0(.[^(%V`GH`,'/<(``6#P5($$``)$"\`#8H<#1P.!^X'CQP.'%H<$( +M=8MQU@WOX@78!^@`P<]P@`!8/#5XH*`Y`F_8H<"AP4#`(,`BN1QXPKC/4$IP'#@?Z'`X'BAP?P<"+3QP$+`!""0#P```!A!*-`B%PA> +M`\]P'$?'<04I/@`*(,`.`_!!*8```L$-"1X"4R&"`".Y!O!3(<(`(L%$N4`H +M@R!U>U1[SW*``$S:!<]V@0!`.R"&8@VO_D`F`A0! +MIAFU"_"`(@,%4@VO_CV5`;4BE1FU.&`8M0:%'0%OV`6EX'BAP?'`F@A/V*'! +M*'4(=CIR&G,$(;Z/`0``P(AW+_1`Q0'9&0T>$D$MP!#!N`'@02U!%,&Y&6$. +M\!D-GA8@P$2XP;@A:`0E@!\"````,;@8>2$)4``3"9``@^$`V,H@X0'`**$# +M"O#/<($`""P"@`;PSW"!``@L`8`%?((`+"D$``8`7"%``;'TP)$,>8-B,N/H/;]BI<0#`SW&``%@\%0A0`!$( +MD0`(%``Q%2%,`P"D*'"U>-X.+^`,V?$'+]BCP/'`9@\/V,L2`;:*)P@6Q!$" +M`,]Q@`!`/^QZ0B$0`@`A3@[/<8$`P#XC@<]S@`"TV@0AD0\``P``12%!(^'! +M(,)<>L*Z]".-`,]RH```(%J"<+T;"F0#2B(`(!!XL'L4V@HD@`2:_PL('@9* +M<%+PR\G$$`(`,(CL>C`@0"Z%X,P@XH$=],]P@`!XH'9I8&"`X`#8SR`B`Q3T +MA"H%"L]P@`"@FS(@0`X7")$`1@CO^TAP@.#*(&(`#+@"\`#8`]K/<:````A" +MH84@`PD`&`10`!B$5(HB_P\`&(!0`!B$7P``__]`A@`8@%!"E@`8A%`$&8`$ +MU\GDV6:`3I`PNQ"Z12%`(V5ZM@HOZJES%@]/_@'8L08OV*'`X'AA!T_^001/ +M^?'`H<%Z">_@`-B+<'(+;^D"V6X,;^0`P-(.#^"AP-'`X'[@>/'`H<&+<&X* +M;^D!V4X)[^``V`#`SW.``#3-((,/"!X!4"%"`40@`0A%>:>YAB#]#R5XE@XO +MX`"CX/'@>/'`]@TOV`'9H<$`W2H*;^F+<`$4@3"I<@/P`>)0>AL*U0-88L]S +M@`#<"Q1X%&/O"0&#&V,"\`#;">M!DZ*3SW"``*AK'64`W@3P`MX`W:ER(,!7 +M"%$``A0`,1!RRB""#P``("O0#4+8D^ZI<+8);^D"%`$QSW"``)2:0(AN#*_C +M2'"`X*P)(@#*(((`"_``V`7P`!:!0`'@$'@"%`$Q]PA"@`#:!?"`X,HF8A'[ +M]0(`0>`(4`C'U"(*``-@&\`#;`!_"0`'@$'CW"$*`R7`! +MV9H-+^`H;QS0?/W80H"P(` +MV0`A@'^``&Q?1QA8`*886`#@?_<86`!I`@_9\<#&"R_8_]D(=@+83@^OZ/'`X<4(=0/8V@GOVR?9SW&@```@.X$BH`79)J"*(5X((Z`# +MV!X*[]NI<4$##]C@>/'`Q!("M@AQ#R(``,0:&+"4ZL]R@`"4F@;80@ZOZ4"* +MSW$$`-#^SW,$`'3_`]A.#N_;`-H!V.?_R?'@>/'`"''$R1`@0(#$&ABP#/3/ +M6P?5$-U1'/<(``<.,6 +M(%`#`!`/(.T)SH,.V.EQI@VOZ4".!!`0(!4($2#$$@&VSW```(\30@IOV.ER +M"G!`>`_8Z7%^#:_I0([I<-;_Q!(!MMCI`]@.#>_;*G$#\`#8MO\+V/_97@VO +MZ4".%0(/V/'`SW$$`-#^SW,$`'3_`]AB#>_;`-H!V*S_5?'QP*()#]@(=0#> +M#R8.$,?)RW@2\@8@@(/'&ABP#/3/.`.XO_*($(#S0$/V/T'S]@B````)````,S,__\/><]P@``,]@$&[^@`VN!X +MSW"``"`]`("&Z,]P@````$`+``!`%(``0!^``$` +MGP`#`!D``@`H``$`G``!`-4`!``)``$`*0`!`%$``0`(``$`T0`#`!@`!P"I +M``$`*P`!`",````$`````'!``#(````@`````!```!`````0````"````&0` +B```@````"````#(````D````#````!$```#B804````````` +` +end diff --git a/sys/dev/advansys/advansys.c b/sys/dev/advansys/advansys.c index 8ca81ae55459..a875fe5ccb6a 100644 --- a/sys/dev/advansys/advansys.c +++ b/sys/dev/advansys/advansys.c @@ -232,10 +232,6 @@ adv_action(struct cam_sim *sim, union ccb *ccb) break; } case XPT_RESET_DEV: /* Bus Device Reset the specified SCSI device */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ - case XPT_EN_LUN: /* Enable LUN as a target */ case XPT_ABORT: /* Abort the specified CCB */ /* XXX Implement */ ccb->ccb_h.status = CAM_REQ_INVALID; diff --git a/sys/dev/agp/agp.c b/sys/dev/agp/agp.c index 7d024d047246..47c0aaa046ce 100644 --- a/sys/dev/agp/agp.c +++ b/sys/dev/agp/agp.c @@ -820,7 +820,7 @@ agp_close(struct cdev *kdev, int fflag, int devtype, struct thread *td) /* * Clear the GATT and force release on last close */ - while ((mem = TAILQ_FIRST(&sc->as_memory)) != 0) { + while ((mem = TAILQ_FIRST(&sc->as_memory)) != NULL) { if (mem->am_is_bound) AGP_UNBIND_MEMORY(dev, mem); AGP_FREE_MEMORY(dev, mem); diff --git a/sys/dev/aha/aha.c b/sys/dev/aha/aha.c index 233339f8c434..d2709a72e678 100644 --- a/sys/dev/aha/aha.c +++ b/sys/dev/aha/aha.c @@ -831,10 +831,6 @@ ahaaction(struct cam_sim *sim, union ccb *ccb) } break; } - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ case XPT_ABORT: /* Abort the specified CCB */ /* XXX Implement */ ccb->ccb_h.status = CAM_REQ_INVALID; diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c index 7083afb10cba..c5064f349e34 100644 --- a/sys/dev/ahci/ahci.c +++ b/sys/dev/ahci/ahci.c @@ -2578,10 +2578,6 @@ ahciaction(struct cam_sim *sim, union ccb *ccb) } ahci_begin_transaction(ch, ccb); return; - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ case XPT_ABORT: /* Abort the specified CCB */ /* XXX Implement */ ccb->ccb_h.status = CAM_REQ_INVALID; diff --git a/sys/dev/al_eth/al_eth.c b/sys/dev/al_eth/al_eth.c index 6a58fb5c5319..79523fd189c3 100644 --- a/sys/dev/al_eth/al_eth.c +++ b/sys/dev/al_eth/al_eth.c @@ -2009,7 +2009,7 @@ al_eth_enable_msix(struct al_eth_adapter *adapter) adapter->msix_entries = malloc(msix_vecs*sizeof(*adapter->msix_entries), M_IFAL, M_ZERO | M_WAITOK); - if (adapter->msix_entries == 0) { + if (adapter->msix_entries == NULL) { device_printf_dbg(adapter->dev, "failed to allocate" " msix_entries %d\n", msix_vecs); rc = ENOMEM; @@ -3544,7 +3544,7 @@ al_miibus_linkchg(device_t dev) uint8_t duplex = 0; uint8_t speed = 0; - if (adapter->mii == 0) + if (adapter->mii == NULL) return; if ((adapter->netdev->if_flags & IFF_UP) == 0) diff --git a/sys/dev/al_eth/al_init_eth_lm.c b/sys/dev/al_eth/al_init_eth_lm.c index f6aebda6f105..96da4bb34d96 100644 --- a/sys/dev/al_eth/al_init_eth_lm.c +++ b/sys/dev/al_eth/al_init_eth_lm.c @@ -1168,7 +1168,7 @@ al_eth_lm_link_detection(struct al_eth_lm_context *lm_context, boolean_t lm_pause = lm_context->lm_pause(lm_context->i2c_context); if (lm_pause == TRUE) { *new_mode = AL_ETH_LM_MODE_DISCONNECTED; - if (link_fault != 0) { + if (link_fault != NULL) { if (lm_context->link_state == AL_ETH_LM_LINK_UP) *link_fault = FALSE; else diff --git a/sys/dev/an/if_an.c b/sys/dev/an/if_an.c index dc3fbf2adf58..cae604c055c1 100644 --- a/sys/dev/an/if_an.c +++ b/sys/dev/an/if_an.c @@ -3057,7 +3057,7 @@ static void an_cache_store(struct an_softc *sc, struct ether_header *eh, struct mbuf *m, u_int8_t rx_rssi, u_int8_t rx_quality) { - struct ip *ip = 0; + struct ip *ip = NULL; int i; static int cache_slot = 0; /* use this cache entry */ static int wrapindex = 0; /* next "free" cache entry */ diff --git a/sys/dev/arcmsr/arcmsr.c b/sys/dev/arcmsr/arcmsr.c index f293db0a7be3..8b0258ba2687 100644 --- a/sys/dev/arcmsr/arcmsr.c +++ b/sys/dev/arcmsr/arcmsr.c @@ -1398,8 +1398,8 @@ static u_int32_t arcmsr_Read_iop_rqbuffer_data_D(struct AdapterControlBlock *acb struct QBUFFER *prbuffer) { u_int8_t *pQbuffer; - u_int8_t *buf1 = 0; - u_int32_t *iop_data, *buf2 = 0; + u_int8_t *buf1 = NULL; + u_int32_t *iop_data, *buf2 = NULL; u_int32_t iop_len, data_len; iop_data = (u_int32_t *)prbuffer->data; @@ -1494,8 +1494,8 @@ static void arcmsr_Write_data_2iop_wqbuffer_D(struct AdapterControlBlock *acb) { u_int8_t *pQbuffer; struct QBUFFER *pwbuffer; - u_int8_t *buf1 = 0; - u_int32_t *iop_data, *buf2 = 0; + u_int8_t *buf1 = NULL; + u_int32_t *iop_data, *buf2 = NULL; u_int32_t allxfer_len = 0, data_len; if(acb->acb_flags & ACB_F_MESSAGE_WQBUFFER_READ) { @@ -2883,12 +2883,6 @@ static void arcmsr_action(struct cam_sim *psim, union ccb *pccb) } break; } - case XPT_TARGET_IO: { - /* target mode not yet support vendor specific commands. */ - pccb->ccb_h.status |= CAM_REQ_CMP; - xpt_done(pccb); - break; - } case XPT_PATH_INQ: { struct ccb_pathinq *cpi = &pccb->cpi; @@ -2938,7 +2932,6 @@ static void arcmsr_action(struct cam_sim *psim, union ccb *pccb) pabort_ccb = pccb->cab.abort_ccb; switch (pabort_ccb->ccb_h.func_code) { case XPT_ACCEPT_TARGET_IO: - case XPT_IMMED_NOTIFY: case XPT_CONT_TARGET_IO: if(arcmsr_seek_cmd2abort(pabort_ccb)==TRUE) { pabort_ccb->ccb_h.status |= CAM_REQ_ABORTED; diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c index a4fcbc179c05..e336c444e97c 100644 --- a/sys/dev/ata/ata-all.c +++ b/sys/dev/ata/ata-all.c @@ -1013,10 +1013,6 @@ ataaction(struct cam_sim *sim, union ccb *ccb) } ata_cam_begin_transaction(dev, ccb); return; - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ case XPT_ABORT: /* Abort the specified CCB */ /* XXX Implement */ ccb->ccb_h.status = CAM_REQ_INVALID; diff --git a/sys/dev/bce/if_bce.c b/sys/dev/bce/if_bce.c index 0b406e23cb71..cdf234ee4a5e 100644 --- a/sys/dev/bce/if_bce.c +++ b/sys/dev/bce/if_bce.c @@ -2800,7 +2800,7 @@ bce_nvram_write(struct bce_softc *sc, u32 offset, u8 *data_buf, if (align_start || align_end) { buf = malloc(len32, M_DEVBUF, M_NOWAIT); - if (buf == 0) { + if (buf == NULL) { rc = ENOMEM; goto bce_nvram_write_exit; } diff --git a/sys/dev/beri/virtio/virtio_block.c b/sys/dev/beri/virtio/virtio_block.c index 405746c52b51..50bb7f3a53bd 100644 --- a/sys/dev/beri/virtio/virtio_block.c +++ b/sys/dev/beri/virtio/virtio_block.c @@ -457,7 +457,7 @@ beri_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, sc->opened = 1; break; case MDIOCDETACH: - if (sc->vnode == 0) { + if (sc->vnode == NULL) { /* File not opened */ return (1); } diff --git a/sys/dev/bhnd/cores/chipc/chipc_slicer.c b/sys/dev/bhnd/cores/chipc/chipc_slicer.c index 45cac4d3794c..4c6969d7ff2f 100644 --- a/sys/dev/bhnd/cores/chipc/chipc_slicer.c +++ b/sys/dev/bhnd/cores/chipc/chipc_slicer.c @@ -63,10 +63,12 @@ chipc_register_slicer(chipc_flash flash_type) switch (flash_type) { case CHIPC_SFLASH_AT: case CHIPC_SFLASH_ST: - flash_register_slicer(chipc_slicer_spi); + flash_register_slicer(chipc_slicer_spi, FLASH_SLICES_TYPE_SPI, + TRUE); break; case CHIPC_PFLASH_CFI: - flash_register_slicer(chipc_slicer_cfi); + flash_register_slicer(chipc_slicer_cfi, FLASH_SLICES_TYPE_CFI, + TRUE); break; default: /* Unsupported */ @@ -75,7 +77,8 @@ chipc_register_slicer(chipc_flash flash_type) } int -chipc_slicer_cfi(device_t dev, struct flash_slice *slices, int *nslices) +chipc_slicer_cfi(device_t dev, const char *provider __unused, + struct flash_slice *slices, int *nslices) { struct cfi_softc *sc; device_t parent; @@ -100,7 +103,8 @@ chipc_slicer_cfi(device_t dev, struct flash_slice *slices, int *nslices) } int -chipc_slicer_spi(device_t dev, struct flash_slice *slices, int *nslices) +chipc_slicer_spi(device_t dev, const char *provider __unused, + struct flash_slice *slices, int *nslices) { struct chipc_spi_softc *sc; device_t chipc, spi, spibus; diff --git a/sys/dev/bhnd/cores/chipc/chipc_slicer.h b/sys/dev/bhnd/cores/chipc/chipc_slicer.h index 4c35caa1af25..6f296262891a 100644 --- a/sys/dev/bhnd/cores/chipc/chipc_slicer.h +++ b/sys/dev/bhnd/cores/chipc/chipc_slicer.h @@ -41,9 +41,9 @@ #define NVRAM_MAGIC 0x48534C46 void chipc_register_slicer(chipc_flash flash_type); -int chipc_slicer_spi(device_t dev, struct flash_slice *slices, - int *nslices); -int chipc_slicer_cfi(device_t dev, struct flash_slice *slices, - int *nslices); +int chipc_slicer_spi(device_t dev, const char *provider, + struct flash_slice *slices, int *nslices); +int chipc_slicer_cfi(device_t dev, const char *provider, + struct flash_slice *slices, int *nslices); #endif /* _BHND_CORES_CHIPC_CHIPC_SLICER_H_ */ diff --git a/sys/dev/bhnd/cores/usb/bhnd_usb.c b/sys/dev/bhnd/cores/usb/bhnd_usb.c index f753e5b0d6cd..4e88c4a8f94f 100644 --- a/sys/dev/bhnd/cores/usb/bhnd_usb.c +++ b/sys/dev/bhnd/cores/usb/bhnd_usb.c @@ -291,7 +291,7 @@ bhnd_usb_alloc_resource(device_t bus, device_t child, int type, int *rid, rv = rman_reserve_resource(&sc->mem_rman, start, end, count, flags, child); - if (rv == 0) { + if (rv == NULL) { BHND_ERROR_DEV(bus, "could not reserve resource"); return (0); } @@ -312,7 +312,7 @@ bhnd_usb_alloc_resource(device_t bus, device_t child, int type, int *rid, rv = rman_reserve_resource(&sc->irq_rman, start, end, count, flags, child); - if (rv == 0) { + if (rv == NULL) { BHND_ERROR_DEV(bus, "could not reserve resource"); return (0); } diff --git a/sys/dev/buslogic/bt.c b/sys/dev/buslogic/bt.c index c17c4f439b4c..9c32caebf493 100644 --- a/sys/dev/buslogic/bt.c +++ b/sys/dev/buslogic/bt.c @@ -1217,10 +1217,6 @@ btaction(struct cam_sim *sim, union ccb *ccb) } break; } - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ case XPT_ABORT: /* Abort the specified CCB */ /* XXX Implement */ ccb->ccb_h.status = CAM_REQ_INVALID; diff --git a/sys/dev/buslogic/bt_pci.c b/sys/dev/buslogic/bt_pci.c index 7615ae8039ae..48c90e08e553 100644 --- a/sys/dev/buslogic/bt_pci.c +++ b/sys/dev/buslogic/bt_pci.c @@ -58,8 +58,8 @@ static int bt_pci_alloc_resources(device_t dev) { int type = 0, rid, zero; - struct resource *regs = 0; - struct resource *irq = 0; + struct resource *regs = NULL; + struct resource *irq = NULL; #if 0 /* XXX Memory Mapped I/O seems to cause problems */ diff --git a/sys/dev/ce/if_ce.c b/sys/dev/ce/if_ce.c index 69779d6c5e2d..541db6ce16c9 100644 --- a/sys/dev/ce/if_ce.c +++ b/sys/dev/ce/if_ce.c @@ -840,11 +840,11 @@ static int ce_detach (device_t dev) if (! d || ! d->chan) continue; callout_drain (&d->timeout_handle); - channel [b->num * NCHAN + c->num] = 0; + channel [b->num * NCHAN + c->num] = NULL; /* Deallocate buffers. */ ce_bus_dma_mem_free (&d->dmamem); } - adapter [b->num] = 0; + adapter [b->num] = NULL; ce_bus_dma_mem_free (&bd->dmamem); free (b, M_DEVBUF); #if __FreeBSD_version >= 504000 diff --git a/sys/dev/cm/smc90cx6.c b/sys/dev/cm/smc90cx6.c index 5607298e5983..e05f9ee58b8c 100644 --- a/sys/dev/cm/smc90cx6.c +++ b/sys/dev/cm/smc90cx6.c @@ -373,7 +373,7 @@ cm_start_locked(ifp) m = arc_frag_next(ifp); buffer = sc->sc_tx_act ^ 1; - if (m == 0) + if (m == NULL) return; #ifdef CM_DEBUG @@ -388,7 +388,7 @@ cm_start_locked(ifp) #endif cm_ram_ptr = buffer * 512; - if (m == 0) + if (m == NULL) return; /* write the addresses to RAM and throw them away */ @@ -505,7 +505,7 @@ cm_srint_locked(vsc) /* Allocate header mbuf */ MGETHDR(m, M_NOWAIT, MT_DATA); - if (m == 0) { + if (m == NULL) { /* * in case s.th. goes wrong with mem, drop it * to make sure the receiver can be started again @@ -546,7 +546,7 @@ cm_srint_locked(vsc) } } - if (m == 0) { + if (m == NULL) { if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); goto cleanup; } diff --git a/sys/dev/cp/if_cp.c b/sys/dev/cp/if_cp.c index 426a5eedd608..29643b2ba7f1 100644 --- a/sys/dev/cp/if_cp.c +++ b/sys/dev/cp/if_cp.c @@ -628,11 +628,11 @@ static int cp_detach (device_t dev) if (! d || ! d->chan->type) continue; callout_drain (&d->timeout_handle); - channel [b->num*NCHAN + c->num] = 0; + channel [b->num*NCHAN + c->num] = NULL; /* Deallocate buffers. */ cp_bus_dma_mem_free (&d->dmamem); } - adapter [b->num] = 0; + adapter [b->num] = NULL; cp_bus_dma_mem_free (&bd->dmamem); free (b, M_DEVBUF); mtx_destroy (&bd->cp_mtx); diff --git a/sys/dev/ctau/ctddk.c b/sys/dev/ctau/ctddk.c index 0a9dbd2fd46b..cd83311ad52d 100644 --- a/sys/dev/ctau/ctddk.c +++ b/sys/dev/ctau/ctddk.c @@ -104,7 +104,7 @@ int ct_open_board (ct_board_t *b, int num, port_t port, int irq, int dma) case B_TAU2_E1D: fw = ctau2_fw_data; flen = 0; - ft = 0; + ft = NULL; break; #ifndef CT_DDK_NO_G703 case B_TAU_G703: diff --git a/sys/dev/ctau/if_ct.c b/sys/dev/ctau/if_ct.c index a3df2a8c5d24..41975bae1e3f 100644 --- a/sys/dev/ctau/if_ct.c +++ b/sys/dev/ctau/if_ct.c @@ -839,8 +839,8 @@ static int ct_detach (device_t dev) /* Deallocate buffers. */ ct_bus_dma_mem_free (&d->dmamem); } - bd->board = 0; - adapter [b->num] = 0; + bd->board = NULL; + adapter [b->num] = NULL; free (b, M_DEVBUF); mtx_destroy (&bd->ct_mtx); diff --git a/sys/dev/cx/cxddk.c b/sys/dev/cx/cxddk.c index 94780fb3591f..a321000f390f 100644 --- a/sys/dev/cx/cxddk.c +++ b/sys/dev/cx/cxddk.c @@ -440,7 +440,7 @@ static int cx_receive_interrupt (cx_chan_t *c) if (c->mode == M_ASYNC && (risr & RISA_TIMEOUT)) { unsigned long rcbadr = (unsigned short) inw (RCBADRL(c->port)) | (long) inw (RCBADRU(c->port)) << 16; - unsigned char *buf = 0; + unsigned char *buf = NULL; port_t cnt_port = 0, sts_port = 0; if (rcbadr >= c->brphys && rcbadr < c->brphys+DMABUFSZ) { diff --git a/sys/dev/cx/if_cx.c b/sys/dev/cx/if_cx.c index 654e9136ccdf..58fca9fe7719 100644 --- a/sys/dev/cx/if_cx.c +++ b/sys/dev/cx/if_cx.c @@ -991,8 +991,8 @@ static int cx_detach (device_t dev) /* Deallocate buffers. */ cx_bus_dma_mem_free (&d->dmamem); } - bd->board = 0; - adapter [b->num] = 0; + bd->board = NULL; + adapter [b->num] = NULL; free (b, M_DEVBUF); splx (s); diff --git a/sys/dev/de/if_de.c b/sys/dev/de/if_de.c index a6253f5f5e9f..3e56c86258e5 100644 --- a/sys/dev/de/if_de.c +++ b/sys/dev/de/if_de.c @@ -4887,8 +4887,8 @@ tulip_pci_attach(device_t dev) rid = 0; res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE); - if (res == 0 || bus_setup_intr(dev, res, INTR_TYPE_NET | - INTR_MPSAFE, NULL, intr_rtn, sc, &ih)) { + if (res == NULL || bus_setup_intr(dev, res, INTR_TYPE_NET | + INTR_MPSAFE, NULL, intr_rtn, sc, &ih)) { device_printf(dev, "couldn't map interrupt\n"); tulip_busdma_cleanup(sc); ether_ifdetach(sc->tulip_ifp); diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 818e2e411cf3..621f15cbe843 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -920,7 +920,7 @@ em_if_attach_pre(if_ctx_t ctx) * Set the frame limits assuming * standard ethernet sized frames. */ - adapter->hw.mac.max_frame_size = + scctx->isc_max_frame_size = adapter->hw.mac.max_frame_size = ETHERMTU + ETHER_HDR_LEN + ETHERNET_FCS_SIZE; /* @@ -1117,6 +1117,7 @@ em_if_mtu_set(if_ctx_t ctx, uint32_t mtu) int max_frame_size; struct adapter *adapter = iflib_get_softc(ctx); struct ifnet *ifp = iflib_get_ifp(ctx); + if_softc_ctx_t scctx = iflib_get_softc_ctx(ctx); IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)"); @@ -1147,7 +1148,8 @@ em_if_mtu_set(if_ctx_t ctx, uint32_t mtu) return (EINVAL); } - adapter->hw.mac.max_frame_size = if_getmtu(ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN; + scctx->isc_max_frame_size = adapter->hw.mac.max_frame_size = + if_getmtu(ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN; return (0); } @@ -2236,13 +2238,62 @@ em_reset(if_ctx_t ctx) case e1000_pch_spt: pba = E1000_PBA_26K; break; + case e1000_82575: + pba = E1000_PBA_32K; + break; + case e1000_82576: + case e1000_vfadapt: + pba = E1000_READ_REG(hw, E1000_RXPBS); + pba &= E1000_RXPBS_SIZE_MASK_82576; + break; + case e1000_82580: + case e1000_i350: + case e1000_i354: + case e1000_vfadapt_i350: + pba = E1000_READ_REG(hw, E1000_RXPBS); + pba = e1000_rxpbs_adjust_82580(pba); + break; + case e1000_i210: + case e1000_i211: + pba = E1000_PBA_34K; + break; default: if (adapter->hw.mac.max_frame_size > 8192) pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */ else pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */ } - E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba); + + /* Special needs in case of Jumbo frames */ + if ((hw->mac.type == e1000_82575) && (ifp->if_mtu > ETHERMTU)) { + u32 tx_space, min_tx, min_rx; + pba = E1000_READ_REG(hw, E1000_PBA); + tx_space = pba >> 16; + pba &= 0xffff; + min_tx = (adapter->hw.mac.max_frame_size + + sizeof(struct e1000_tx_desc) - ETHERNET_FCS_SIZE) * 2; + min_tx = roundup2(min_tx, 1024); + min_tx >>= 10; + min_rx = adapter->hw.mac.max_frame_size; + min_rx = roundup2(min_rx, 1024); + min_rx >>= 10; + if (tx_space < min_tx && + ((min_tx - tx_space) < pba)) { + pba = pba - (min_tx - tx_space); + /* + * if short on rx space, rx wins + * and must trump tx adjustment + */ + if (pba < min_rx) + pba = min_rx; + } + E1000_WRITE_REG(hw, E1000_PBA, pba); + } + + if (hw->mac.type < igb_mac_min) + E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba); + + INIT_DEBUGOUT1("em_reset: pba=%dK",pba); /* * These parameters control the automatic generation (Tx) and @@ -2258,7 +2309,7 @@ em_reset(if_ctx_t ctx) * by 1500. * - The pause time is fairly large at 1000 x 512ns = 512 usec. */ - rx_buffer_size = ((E1000_READ_REG(hw, E1000_PBA) & 0xffff) << 10 ); + rx_buffer_size = (pba & 0xffff) << 10; hw->fc.high_water = rx_buffer_size - roundup2(adapter->hw.mac.max_frame_size, 1024); hw->fc.low_water = hw->fc.high_water - 1500; @@ -2303,6 +2354,21 @@ em_reset(if_ctx_t ctx) else E1000_WRITE_REG(hw, E1000_PBA, 26); break; + case e1000_82575: + case e1000_82576: + /* 8-byte granularity */ + hw->fc.low_water = hw->fc.high_water - 8; + break; + case e1000_82580: + case e1000_i350: + case e1000_i354: + case e1000_i210: + case e1000_i211: + case e1000_vfadapt: + case e1000_vfadapt_i350: + /* 16-byte granularity */ + hw->fc.low_water = hw->fc.high_water - 16; + break; case e1000_ich9lan: case e1000_ich10lan: if (if_getmtu(ifp) > ETHERMTU) { @@ -2973,9 +3039,7 @@ em_initialize_receive_unit(if_ctx_t ctx) } else if (adapter->hw.mac.type >= igb_mac_min) { u32 psize, srrctl = 0; - if (ifp->if_mtu > ETHERMTU) { - rctl |= E1000_RCTL_LPE; - + if (if_getmtu(ifp) > ETHERMTU) { /* Set maximum packet len */ psize = scctx->isc_max_frame_size; if (psize <= 4096) { @@ -2991,7 +3055,6 @@ em_initialize_receive_unit(if_ctx_t ctx) psize += VLAN_TAG_SIZE; E1000_WRITE_REG(&adapter->hw, E1000_RLPML, psize); } else { - rctl &= ~E1000_RCTL_LPE; srrctl |= 2048 >> E1000_SRRCTL_BSIZEPKT_SHIFT; rctl |= E1000_RCTL_SZ_2048; } @@ -3037,8 +3100,7 @@ em_initialize_receive_unit(if_ctx_t ctx) rxdctl |= IGB_RX_WTHRESH << 16; E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl); } - } - if (adapter->hw.mac.type >= e1000_pch2lan) { + } else if (adapter->hw.mac.type >= e1000_pch2lan) { if (if_getmtu(ifp) > ETHERMTU) e1000_lv_jumbo_workaround_ich8lan(hw, TRUE); else @@ -3048,15 +3110,18 @@ em_initialize_receive_unit(if_ctx_t ctx) /* Make sure VLAN Filters are off */ rctl &= ~E1000_RCTL_VFE; - if (adapter->rx_mbuf_sz == MCLBYTES) - rctl |= E1000_RCTL_SZ_2048; - else if (adapter->rx_mbuf_sz == MJUMPAGESIZE) - rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX; - else if (adapter->rx_mbuf_sz > MJUMPAGESIZE) - rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX; + if (adapter->hw.mac.type < igb_mac_min) { + if (adapter->rx_mbuf_sz == MCLBYTES) + rctl |= E1000_RCTL_SZ_2048; + else if (adapter->rx_mbuf_sz == MJUMPAGESIZE) + rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX; + else if (adapter->rx_mbuf_sz > MJUMPAGESIZE) + rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX; + + /* ensure we clear use DTYPE of 00 here */ + rctl &= ~0x00000C00; + } - /* ensure we clear use DTYPE of 00 here */ - rctl &= ~0x00000C00; /* Write out the settings */ E1000_WRITE_REG(hw, E1000_RCTL, rctl); diff --git a/sys/dev/ed/if_ed.c b/sys/dev/ed/if_ed.c index 1fb403793169..0730c964df08 100644 --- a/sys/dev/ed/if_ed.c +++ b/sys/dev/ed/if_ed.c @@ -751,7 +751,7 @@ ed_start_locked(struct ifnet *ifp) return; } IFQ_DRV_DEQUEUE(&ifp->if_snd, m); - if (m == 0) { + if (m == NULL) { /* * We are using the !OACTIVE flag to indicate to the outside diff --git a/sys/dev/etherswitch/mtkswitch/mtkswitch_rt3050.c b/sys/dev/etherswitch/mtkswitch/mtkswitch_rt3050.c index 44b5807beaba..e3ea80fe2a1d 100644 --- a/sys/dev/etherswitch/mtkswitch/mtkswitch_rt3050.c +++ b/sys/dev/etherswitch/mtkswitch/mtkswitch_rt3050.c @@ -405,11 +405,38 @@ mtkswitch_vlan_setvgroup(struct mtkswitch_softc *sc, etherswitch_vlangroup_t *v) MTKSWITCH_LOCK(sc); /* First, see if we can accomodate the request at all */ val = MTKSWITCH_READ(sc, MTKSWITCH_POC2); - if ((val & POC2_UNTAG_VLAN) == 0 || - sc->sc_switchtype == MTK_SWITCH_RT3050) { + if (sc->sc_switchtype == MTK_SWITCH_RT3050 || + (val & POC2_UNTAG_VLAN) == 0) { + /* + * There are 2 things we can't support in per-port untagging + * mode: + * 1. Adding a port as an untagged member if the port is not + * set up to do untagging. + * 2. Adding a port as a tagged member if the port is set up + * to do untagging. + */ val &= VUB_MASK; + + /* get all untagged members from the member list */ tmp = v->es_untagged_ports & v->es_member_ports; - if (val != tmp) { + /* fail if untagged members are not a subset of all members */ + if (tmp != v->es_untagged_ports) { + /* Cannot accomodate request */ + MTKSWITCH_UNLOCK(sc); + return (ENOTSUP); + } + + /* fail if any untagged member is set up to do tagging */ + if ((tmp & val) != tmp) { + /* Cannot accomodate request */ + MTKSWITCH_UNLOCK(sc); + return (ENOTSUP); + } + + /* now, get the list of all tagged members */ + tmp = v->es_member_ports & ~tmp; + /* fail if any tagged member is set up to do untagging */ + if ((tmp & val) != 0) { /* Cannot accomodate request */ MTKSWITCH_UNLOCK(sc); return (ENOTSUP); diff --git a/sys/dev/extres/clk/clk_div.c b/sys/dev/extres/clk/clk_div.c index bf663f28c3a4..c9573dfabfe1 100644 --- a/sys/dev/extres/clk/clk_div.c +++ b/sys/dev/extres/clk/clk_div.c @@ -195,7 +195,8 @@ clknode_div_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout, hw_i_div--; *stop = 1; - if (hw_i_div > sc->i_mask) { + if (hw_i_div > sc->i_mask && + ((sc->div_flags & CLK_DIV_WITH_TABLE) == 0)) { /* XXX Or only return error? */ printf("%s: %s integer divider is too big: %u\n", clknode_get_name(clk), __func__, hw_i_div); diff --git a/sys/dev/fatm/if_fatm.c b/sys/dev/fatm/if_fatm.c index a530a44327d1..2a1dee685c3d 100644 --- a/sys/dev/fatm/if_fatm.c +++ b/sys/dev/fatm/if_fatm.c @@ -1501,7 +1501,7 @@ fatm_intr_drain_rx(struct fatm_softc *sc) rpd->nseg = le32toh(rpd->nseg); mlen = 0; - m0 = last = 0; + m0 = last = NULL; for (i = 0; i < rpd->nseg; i++) { rb = sc->rbufs + rpd->segment[i].handle; if (m0 == NULL) { diff --git a/sys/dev/fdt/fdt_slicer.c b/sys/dev/fdt/fdt_slicer.c index 7e385c15c5d3..2765f53aa1ba 100644 --- a/sys/dev/fdt/fdt_slicer.c +++ b/sys/dev/fdt/fdt_slicer.c @@ -30,10 +30,11 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include +#include +#include #ifdef DEBUG #define debugf(fmt, args...) do { printf("%s(): ", __func__); \ @@ -42,8 +43,13 @@ __FBSDID("$FreeBSD$"); #define debugf(fmt, args...) #endif -int -fdt_flash_fill_slices(device_t dev, struct flash_slice *slices, int *slices_num) +static int fdt_flash_fill_slices(device_t dev, const char *provider, + struct flash_slice *slices, int *slices_num); +static void fdt_slicer_init(void); + +static int +fdt_flash_fill_slices(device_t dev, const char *provider __unused, + struct flash_slice *slices, int *slices_num) { char *slice_name; phandle_t dt_node, dt_child; @@ -90,8 +96,8 @@ fdt_flash_fill_slices(device_t dev, struct flash_slice *slices, int *slices_num) (void **)&slice_name); if (name_len <= 0) { /* Use node name if no label defined */ - name_len = OF_getprop_alloc(dt_child, "name", sizeof(char), - (void **)&slice_name); + name_len = OF_getprop_alloc(dt_child, "name", + sizeof(char), (void **)&slice_name); if (name_len <= 0) { debugf("slice i=%d with no name\n", i); slice_name = NULL; @@ -110,3 +116,23 @@ fdt_flash_fill_slices(device_t dev, struct flash_slice *slices, int *slices_num) *slices_num = i; return (0); } + +static void +fdt_slicer_init(void) +{ + + flash_register_slicer(fdt_flash_fill_slices, FLASH_SLICES_TYPE_NAND, + FALSE); + flash_register_slicer(fdt_flash_fill_slices, FLASH_SLICES_TYPE_CFI, + FALSE); + flash_register_slicer(fdt_flash_fill_slices, FLASH_SLICES_TYPE_SPI, + FALSE); +} + +/* + * Must be initialized after GEOM classes (SI_SUB_DRIVERS/SI_ORDER_FIRST), + * i. e. after g_init() is called, due to the use of the GEOM topology_lock + * in flash_register_slicer(). However, must be before SI_SUB_CONFIGURE. + */ +SYSINIT(fdt_slicer_rootconf, SI_SUB_DRIVERS, SI_ORDER_SECOND, fdt_slicer_init, + NULL); diff --git a/sys/dev/fe/if_fe.c b/sys/dev/fe/if_fe.c index e4a46011a9a3..94b83be3f9e8 100644 --- a/sys/dev/fe/if_fe.c +++ b/sys/dev/fe/if_fe.c @@ -2002,7 +2002,7 @@ fe_write_mbufs (struct fe_softc *sc, struct mbuf *m) if ((sc->proto_dlcr6 & FE_D6_SBW) == FE_D6_SBW_BYTE) { /* 8-bit cards are easy. */ - for (mp = m; mp != 0; mp = mp->m_next) { + for (mp = m; mp != NULL; mp = mp->m_next) { if (mp->m_len) fe_outsb(sc, FE_BMPR8, mtod(mp, caddr_t), mp->m_len); @@ -2012,7 +2012,7 @@ fe_write_mbufs (struct fe_softc *sc, struct mbuf *m) { /* 16-bit cards are a pain. */ savebyte = NO_PENDING_BYTE; - for (mp = m; mp != 0; mp = mp->m_next) { + for (mp = m; mp != NULL; mp = mp->m_next) { /* Ignore empty mbuf. */ len = mp->m_len; diff --git a/sys/dev/ffec/if_ffecreg.h b/sys/dev/ffec/if_ffecreg.h index 2233df770046..bc44af3a5184 100644 --- a/sys/dev/ffec/if_ffecreg.h +++ b/sys/dev/ffec/if_ffecreg.h @@ -185,6 +185,27 @@ __FBSDID("$FreeBSD$"); #define FEC_RACC_IPDIS (1 << 1) #define FEC_RACC_PADREM (1 << 0) +/* + * IEEE-1588 timer registers + */ + +#define FEC_ATCR_REG 0x0400 +#define FEC_ATCR_SLAVE (1u << 13) +#define FEC_ATCR_CAPTURE (1u << 11) +#define FEC_ATCR_RESTART (1u << 9) +#define FEC_ATCR_PINPER (1u << 7) +#define FEC_ATCR_PEREN (1u << 4) +#define FEC_ATCR_OFFRST (1u << 3) +#define FEC_ATCR_OFFEN (1u << 2) +#define FEC_ATCR_EN (1u << 0) + +#define FEC_ATVR_REG 0x0404 +#define FEC_ATOFF_REG 0x0408 +#define FEC_ATPER_REG 0x040c +#define FEC_ATCOR_REG 0x0410 +#define FEC_ATINC_REG 0x0414 +#define FEC_ATSTMP_REG 0x0418 + /* * Statistics registers */ diff --git a/sys/dev/firewire/if_fwip.c b/sys/dev/firewire/if_fwip.c index 0a958b2b2c0d..3928ef13ae5b 100644 --- a/sys/dev/firewire/if_fwip.c +++ b/sys/dev/firewire/if_fwip.c @@ -575,7 +575,7 @@ fwip_async_output(struct fwip_softc *fwip, struct ifnet *ifp) */ mtag = m_tag_locate(m, MTAG_FIREWIRE, MTAG_FIREWIRE_HWADDR, 0); if (mtag == NULL) - destfw = 0; + destfw = NULL; else destfw = (struct fw_hwaddr *) (mtag + 1); diff --git a/sys/dev/hptiop/hptiop.c b/sys/dev/hptiop/hptiop.c index 81b4c694d6d2..a20def6ef00b 100644 --- a/sys/dev/hptiop/hptiop.c +++ b/sys/dev/hptiop/hptiop.c @@ -330,7 +330,7 @@ static void hptiop_request_callback_itl(struct hpt_iop_hba * hba, u_int32_t index) { struct hpt_iop_srb *srb; - struct hpt_iop_request_scsi_command *req=0; + struct hpt_iop_request_scsi_command *req=NULL; union ccb *ccb; u_int8_t *cdb; u_int32_t result, temp, dxfer; diff --git a/sys/dev/hptmv/entry.c b/sys/dev/hptmv/entry.c index 8f60be25a2b8..167f82a46e87 100644 --- a/sys/dev/hptmv/entry.c +++ b/sys/dev/hptmv/entry.c @@ -138,8 +138,8 @@ static MV_BOOLEAN hptmv_event_notify(MV_SATA_ADAPTER *pMvSataAdapter, static struct sx hptmv_list_lock; SX_SYSINIT(hptmv_list_lock, &hptmv_list_lock, "hptmv list"); -IAL_ADAPTER_T *gIal_Adapter = 0; -IAL_ADAPTER_T *pCurAdapter = 0; +IAL_ADAPTER_T *gIal_Adapter = NULL; +IAL_ADAPTER_T *pCurAdapter = NULL; static MV_SATA_CHANNEL gMvSataChannels[MAX_VBUS][MV_SATA_CHANNELS_NUM]; typedef struct st_HPT_DPC { @@ -1262,7 +1262,7 @@ init_adapter(IAL_ADAPTER_T *pAdapter) sx_xlock(&hptmv_list_lock); pAdapter->next = 0; - if(gIal_Adapter == 0){ + if(gIal_Adapter == NULL){ gIal_Adapter = pAdapter; pCurAdapter = gIal_Adapter; } @@ -2289,10 +2289,6 @@ hpt_action(struct cam_sim *sim, union ccb *ccb) break; case XPT_RESET_DEV: /* Bus Device Reset the specified SCSI device */ - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ case XPT_ABORT: /* Abort the specified CCB */ case XPT_TERM_IO: /* Terminate the I/O process */ /* XXX Implement */ @@ -2431,7 +2427,7 @@ static void hpt_worker_thread(void) sx_slock(&hptmv_list_lock); pAdapter = gIal_Adapter; - while(pAdapter != 0){ + while(pAdapter != NULL){ mtx_lock(&pAdapter->lock); _vbus_p = &pAdapter->VBus; diff --git a/sys/dev/hptmv/gui_lib.c b/sys/dev/hptmv/gui_lib.c index 359a41edcd3c..bc57239c217b 100644 --- a/sys/dev/hptmv/gui_lib.c +++ b/sys/dev/hptmv/gui_lib.c @@ -74,7 +74,7 @@ check_VDevice_valid(PVDevice p) PVBus _vbus_p; IAL_ADAPTER_T *pAdapter = gIal_Adapter; - while(pAdapter != 0) + while(pAdapter != NULL) { for (i = 0; i < MV_SATA_CHANNELS_NUM; i++) if(&(pAdapter->VDevices[i]) == p) return 0; @@ -83,7 +83,7 @@ check_VDevice_valid(PVDevice p) #ifdef SUPPORT_ARRAY pAdapter = gIal_Adapter; - while(pAdapter != 0) + while(pAdapter != NULL) { _vbus_p = &pAdapter->VBus; for (i=0;inext; @@ -448,7 +448,7 @@ int hpt_get_channel_info(int id, int bus, PCHANNEL_INFO pInfo) IAL_ADAPTER_T *pAdapTemp = gIal_Adapter; int i,iControllerCount = 0; - while(pAdapTemp != 0) + while(pAdapTemp != NULL) { if (iControllerCount++==id) goto found; diff --git a/sys/dev/hptmv/hptproc.c b/sys/dev/hptmv/hptproc.c index 9e897567e079..d9ded9fd0e1a 100644 --- a/sys/dev/hptmv/hptproc.c +++ b/sys/dev/hptmv/hptproc.c @@ -427,7 +427,7 @@ static void hpt_copy_array_info(HPT_GET_INFO *pinfo, int nld, PVDevice pArray) { int i; - char *sType=0, *sStatus=0; + char *sType = NULL, *sStatus = NULL; char buf[32]; PVDevice pTmpArray; diff --git a/sys/dev/hptmv/ioctl.c b/sys/dev/hptmv/ioctl.c index 50a82aed1cb8..671d64c86bcf 100644 --- a/sys/dev/hptmv/ioctl.c +++ b/sys/dev/hptmv/ioctl.c @@ -691,7 +691,7 @@ hpt_rebuild_data_block(IAL_ADAPTER_T *pAdapter, PVDevice pArray, UCHAR flags) PCommand pCmd; UINT result; int needsync=0, retry=0, needdelete=0; - void *buffer = 0; + void *buffer = NULL; _VBUS_INST(&pAdapter->VBus) diff --git a/sys/dev/iicbus/if_ic.c b/sys/dev/iicbus/if_ic.c index 0df2f4a45eee..323b0f7c29bb 100644 --- a/sys/dev/iicbus/if_ic.c +++ b/sys/dev/iicbus/if_ic.c @@ -251,7 +251,7 @@ icioctl(struct ifnet *ifp, u_long cmd, caddr_t data) case SIOCADDMULTI: case SIOCDELMULTI: - if (ifr == 0) + if (ifr == NULL) return (EAFNOSUPPORT); /* XXX */ switch (ifr->ifr_addr.sa_family) { case AF_INET: diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c index 2b338ee6508c..c502de6a7c79 100644 --- a/sys/dev/isp/isp_freebsd.c +++ b/sys/dev/isp/isp_freebsd.c @@ -41,12 +41,6 @@ __FBSDID("$FreeBSD$"); #include #include -#if __FreeBSD_version < 800002 -#define THREAD_CREATE kthread_create -#else -#define THREAD_CREATE kproc_create -#endif - MODULE_VERSION(isp, 1); MODULE_DEPEND(isp, cam, 1, 1, 1); int isp_announced = 0; @@ -115,6 +109,9 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan) struct ccb_setasync csa; struct cam_sim *sim; struct cam_path *path; +#ifdef ISP_TARGET_MODE + int i; +#endif /* * Construct our SIM entry. @@ -153,6 +150,17 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan) struct isp_spi *spi = ISP_SPI_PC(isp, chan); spi->sim = sim; spi->path = path; +#ifdef ISP_TARGET_MODE + TAILQ_INIT(&spi->waitq); + STAILQ_INIT(&spi->ntfree); + for (i = 0; i < ATPDPSIZE; i++) + STAILQ_INSERT_TAIL(&spi->ntfree, &spi->ntpool[i], next); + LIST_INIT(&spi->atfree); + for (i = ATPDPSIZE-1; i >= 0; i--) + LIST_INSERT_HEAD(&spi->atfree, &spi->atpool[i], next); + for (i = 0; i < ATPDPHASHSIZE; i++) + LIST_INIT(&spi->atused[i]); +#endif } else { fcparam *fcp = FCPARAM(isp, chan); struct isp_fc *fc = ISP_FC_PC(isp, chan); @@ -168,9 +176,21 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan) callout_init_mtx(&fc->gdt, &isp->isp_osinfo.lock, 0); TASK_INIT(&fc->gtask, 1, isp_gdt_task, fc); +#ifdef ISP_TARGET_MODE + TAILQ_INIT(&fc->waitq); + STAILQ_INIT(&fc->ntfree); + for (i = 0; i < ATPDPSIZE; i++) + STAILQ_INSERT_TAIL(&fc->ntfree, &fc->ntpool[i], next); + LIST_INIT(&fc->atfree); + for (i = ATPDPSIZE-1; i >= 0; i--) + LIST_INSERT_HEAD(&fc->atfree, &fc->atpool[i], next); + for (i = 0; i < ATPDPHASHSIZE; i++) + LIST_INIT(&fc->atused[i]); +#endif isp_loop_changed(isp, chan); ISP_UNLOCK(isp); - if (THREAD_CREATE(isp_kthread, fc, &fc->kproc, 0, 0, "%s: fc_thrd%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) { + if (kproc_create(isp_kthread, fc, &fc->kproc, 0, 0, + "%s_%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) { xpt_free_path(fc->path); ISP_LOCK(isp); xpt_bus_deregister(cam_sim_path(fc->sim)); @@ -830,19 +850,15 @@ isp_free_pcmd(ispsoftc_t *isp, union ccb *ccb) * Put the target mode functions here, because some are inlines */ #ifdef ISP_TARGET_MODE -static ISP_INLINE int is_lun_enabled(ispsoftc_t *, int, lun_id_t); static ISP_INLINE tstate_t *get_lun_statep(ispsoftc_t *, int, lun_id_t); -static ISP_INLINE tstate_t *get_lun_statep_from_tag(ispsoftc_t *, int, uint32_t); -static ISP_INLINE void rls_lun_statep(ispsoftc_t *, tstate_t *); -static ISP_INLINE inot_private_data_t *get_ntp_from_tagdata(ispsoftc_t *, uint32_t, uint32_t, tstate_t **); -static ISP_INLINE atio_private_data_t *isp_get_atpd(ispsoftc_t *, tstate_t *, uint32_t); -static ISP_INLINE atio_private_data_t *isp_find_atpd(ispsoftc_t *, tstate_t *, uint32_t); -static ISP_INLINE void isp_put_atpd(ispsoftc_t *, tstate_t *, atio_private_data_t *); -static ISP_INLINE inot_private_data_t *isp_get_ntpd(ispsoftc_t *, tstate_t *); -static ISP_INLINE inot_private_data_t *isp_find_ntpd(ispsoftc_t *, tstate_t *, uint32_t, uint32_t); -static ISP_INLINE void isp_put_ntpd(ispsoftc_t *, tstate_t *, inot_private_data_t *); +static atio_private_data_t *isp_get_atpd(ispsoftc_t *, int, uint32_t); +static atio_private_data_t *isp_find_atpd(ispsoftc_t *, int, uint32_t); +static void isp_put_atpd(ispsoftc_t *, int, atio_private_data_t *); +static inot_private_data_t *isp_get_ntpd(ispsoftc_t *, int); +static inot_private_data_t *isp_find_ntpd(ispsoftc_t *, int, uint32_t, uint32_t); +static void isp_put_ntpd(ispsoftc_t *, int, inot_private_data_t *); static cam_status create_lun_state(ispsoftc_t *, int, struct cam_path *, tstate_t **); -static void destroy_lun_state(ispsoftc_t *, tstate_t *); +static void destroy_lun_state(ispsoftc_t *, int, tstate_t *); static void isp_enable_lun(ispsoftc_t *, union ccb *); static void isp_disable_lun(ispsoftc_t *, union ccb *); static timeout_t isp_refire_putback_atio; @@ -858,43 +874,7 @@ static void isp_handle_platform_notify_fc(ispsoftc_t *, in_fcentry_t *); static void isp_handle_platform_notify_24xx(ispsoftc_t *, in_fcentry_24xx_t *); static int isp_handle_platform_target_notify_ack(ispsoftc_t *, isp_notify_t *, uint32_t rsp); static void isp_handle_platform_target_tmf(ispsoftc_t *, isp_notify_t *); -static void isp_target_mark_aborted(ispsoftc_t *, union ccb *); -static void isp_target_mark_aborted_early(ispsoftc_t *, tstate_t *, uint32_t); - -static ISP_INLINE int -is_lun_enabled(ispsoftc_t *isp, int bus, lun_id_t lun) -{ - tstate_t *tptr; - struct tslist *lhp; - - ISP_GET_PC_ADDR(isp, bus, lun_hash[LUN_HASH_FUNC(lun)], lhp); - SLIST_FOREACH(tptr, lhp, next) { - if (tptr->ts_lun == lun) { - return (1); - } - } - return (0); -} - -static void -dump_tstates(ispsoftc_t *isp, int bus) -{ - int i, j; - struct tslist *lhp; - tstate_t *tptr = NULL; - - if (bus >= isp->isp_nchan) { - return; - } - for (i = 0; i < LUN_HASH_SIZE; i++) { - ISP_GET_PC_ADDR(isp, bus, lun_hash[i], lhp); - j = 0; - SLIST_FOREACH(tptr, lhp, next) { - xpt_print(tptr->owner, "[%d, %d] atio_cnt=%d inot_cnt=%d\n", i, j, tptr->atio_count, tptr->inot_count); - j++; - } - } -} +static void isp_target_mark_aborted_early(ispsoftc_t *, int chan, tstate_t *, uint32_t); static ISP_INLINE tstate_t * get_lun_statep(ispsoftc_t *isp, int bus, lun_id_t lun) @@ -905,208 +885,179 @@ get_lun_statep(ispsoftc_t *isp, int bus, lun_id_t lun) if (bus < isp->isp_nchan) { ISP_GET_PC_ADDR(isp, bus, lun_hash[LUN_HASH_FUNC(lun)], lhp); SLIST_FOREACH(tptr, lhp, next) { - if (tptr->ts_lun == lun) { - tptr->hold++; + if (tptr->ts_lun == lun) return (tptr); - } } } return (NULL); } -static ISP_INLINE tstate_t * -get_lun_statep_from_tag(ispsoftc_t *isp, int bus, uint32_t tagval) -{ - tstate_t *tptr = NULL; - atio_private_data_t *atp; - struct tslist *lhp; - int i; - - if (bus < isp->isp_nchan && tagval != 0) { - for (i = 0; i < LUN_HASH_SIZE; i++) { - ISP_GET_PC_ADDR(isp, bus, lun_hash[i], lhp); - SLIST_FOREACH(tptr, lhp, next) { - atp = isp_find_atpd(isp, tptr, tagval); - if (atp) { - tptr->hold++; - return (tptr); - } - } - } - } - return (NULL); -} - -static ISP_INLINE inot_private_data_t * -get_ntp_from_tagdata(ispsoftc_t *isp, uint32_t tag_id, uint32_t seq_id, tstate_t **rslt) +static int +isp_atio_restart(ispsoftc_t *isp, int bus, tstate_t *tptr) { inot_private_data_t *ntp; - tstate_t *tptr; - struct tslist *lhp; - int bus, i; + struct ntpdlist rq; - for (bus = 0; bus < isp->isp_nchan; bus++) { - for (i = 0; i < LUN_HASH_SIZE; i++) { - ISP_GET_PC_ADDR(isp, bus, lun_hash[i], lhp); - SLIST_FOREACH(tptr, lhp, next) { - ntp = isp_find_ntpd(isp, tptr, tag_id, seq_id); - if (ntp) { - *rslt = tptr; - tptr->hold++; - return (ntp); - } - } + if (STAILQ_EMPTY(&tptr->restart_queue)) + return (0); + STAILQ_INIT(&rq); + STAILQ_CONCAT(&rq, &tptr->restart_queue); + while ((ntp = STAILQ_FIRST(&rq)) != NULL) { + STAILQ_REMOVE_HEAD(&rq, next); + if (IS_24XX(isp)) { + isp_prt(isp, ISP_LOGTDEBUG0, + "%s: restarting resrc deprived %x", __func__, + ((at7_entry_t *)ntp->data)->at_rxid); + isp_handle_platform_atio7(isp, (at7_entry_t *) ntp->data); + } else { + isp_prt(isp, ISP_LOGTDEBUG0, + "%s: restarting resrc deprived %x", __func__, + ((at2_entry_t *)ntp->data)->at_rxid); + isp_handle_platform_atio2(isp, (at2_entry_t *) ntp->data); } + isp_put_ntpd(isp, bus, ntp); + if (!STAILQ_EMPTY(&tptr->restart_queue)) + break; } - return (NULL); -} - -static ISP_INLINE void -rls_lun_statep(ispsoftc_t *isp, tstate_t *tptr) -{ - KASSERT((tptr->hold), ("tptr not held")); - tptr->hold--; + if (!STAILQ_EMPTY(&rq)) { + STAILQ_CONCAT(&rq, &tptr->restart_queue); + STAILQ_CONCAT(&tptr->restart_queue, &rq); + } + return (!STAILQ_EMPTY(&tptr->restart_queue)); } static void isp_tmcmd_restart(ispsoftc_t *isp) { - inot_private_data_t *ntp; - inot_private_data_t *restart_queue; tstate_t *tptr; union ccb *ccb; struct tslist *lhp; + struct isp_ccbq *waitq; int bus, i; for (bus = 0; bus < isp->isp_nchan; bus++) { for (i = 0; i < LUN_HASH_SIZE; i++) { ISP_GET_PC_ADDR(isp, bus, lun_hash[i], lhp); - SLIST_FOREACH(tptr, lhp, next) { - if ((restart_queue = tptr->restart_queue) != NULL) - tptr->restart_queue = NULL; - while (restart_queue) { - ntp = restart_queue; - restart_queue = ntp->rd.nt.nt_hba; - if (IS_24XX(isp)) { - isp_prt(isp, ISP_LOGTDEBUG0, "%s: restarting resrc deprived %x", __func__, ((at7_entry_t *)ntp->rd.data)->at_rxid); - isp_handle_platform_atio7(isp, (at7_entry_t *) ntp->rd.data); - } else { - isp_prt(isp, ISP_LOGTDEBUG0, "%s: restarting resrc deprived %x", __func__, ((at2_entry_t *)ntp->rd.data)->at_rxid); - isp_handle_platform_atio2(isp, (at2_entry_t *) ntp->rd.data); - } - isp_put_ntpd(isp, tptr, ntp); - if (tptr->restart_queue && restart_queue != NULL) { - ntp = tptr->restart_queue; - tptr->restart_queue = restart_queue; - while (restart_queue->rd.nt.nt_hba) { - restart_queue = restart_queue->rd.nt.nt_hba; - } - restart_queue->rd.nt.nt_hba = ntp; - break; - } - } - /* - * We only need to do this once per tptr - */ - if (!TAILQ_EMPTY(&tptr->waitq)) { - ccb = (union ccb *)TAILQ_LAST(&tptr->waitq, isp_ccbq); - TAILQ_REMOVE(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); - isp_target_start_ctio(isp, ccb, FROM_TIMER); - } - } + SLIST_FOREACH(tptr, lhp, next) + isp_atio_restart(isp, bus, tptr); + } + + /* + * We only need to do this once per channel. + */ + ISP_GET_PC_ADDR(isp, bus, waitq, waitq); + ccb = (union ccb *)TAILQ_FIRST(waitq); + if (ccb != NULL) { + TAILQ_REMOVE(waitq, &ccb->ccb_h, periph_links.tqe); + isp_target_start_ctio(isp, ccb, FROM_TIMER); } } } -static ISP_INLINE atio_private_data_t * -isp_get_atpd(ispsoftc_t *isp, tstate_t *tptr, uint32_t tag) +static atio_private_data_t * +isp_get_atpd(ispsoftc_t *isp, int chan, uint32_t tag) { + struct atpdlist *atfree; + struct atpdlist *atused; atio_private_data_t *atp; - atp = LIST_FIRST(&tptr->atfree); + ISP_GET_PC_ADDR(isp, chan, atfree, atfree); + atp = LIST_FIRST(atfree); if (atp) { LIST_REMOVE(atp, next); atp->tag = tag; - LIST_INSERT_HEAD(&tptr->atused[ATPDPHASH(tag)], atp, next); + ISP_GET_PC(isp, chan, atused, atused); + LIST_INSERT_HEAD(&atused[ATPDPHASH(tag)], atp, next); } return (atp); } -static ISP_INLINE atio_private_data_t * -isp_find_atpd(ispsoftc_t *isp, tstate_t *tptr, uint32_t tag) +static atio_private_data_t * +isp_find_atpd(ispsoftc_t *isp, int chan, uint32_t tag) { + struct atpdlist *atused; atio_private_data_t *atp; - LIST_FOREACH(atp, &tptr->atused[ATPDPHASH(tag)], next) { + ISP_GET_PC(isp, chan, atused, atused); + LIST_FOREACH(atp, &atused[ATPDPHASH(tag)], next) { if (atp->tag == tag) return (atp); } return (NULL); } -static ISP_INLINE void -isp_put_atpd(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp) +static void +isp_put_atpd(ispsoftc_t *isp, int chan, atio_private_data_t *atp) { + struct atpdlist *atfree; + if (atp->ests) { isp_put_ecmd(isp, atp->ests); } LIST_REMOVE(atp, next); memset(atp, 0, sizeof (*atp)); - LIST_INSERT_HEAD(&tptr->atfree, atp, next); + ISP_GET_PC_ADDR(isp, chan, atfree, atfree); + LIST_INSERT_HEAD(atfree, atp, next); } static void -isp_dump_atpd(ispsoftc_t *isp, tstate_t *tptr) +isp_dump_atpd(ispsoftc_t *isp, int chan) { - atio_private_data_t *atp; + atio_private_data_t *atp, *atpool; const char *states[8] = { "Free", "ATIO", "CAM", "CTIO", "LAST_CTIO", "PDON", "?6", "7" }; - for (atp = tptr->atpool; atp < &tptr->atpool[ATPDPSIZE]; atp++) { - xpt_print(tptr->owner, "ATP: [0x%x] origdlen %u bytes_xfrd %u lun %x nphdl 0x%04x s_id 0x%06x d_id 0x%06x oxid 0x%04x state %s\n", - atp->tag, atp->orig_datalen, atp->bytes_xfered, atp->lun, atp->nphdl, atp->sid, atp->portid, atp->oxid, states[atp->state & 0x7]); + ISP_GET_PC(isp, chan, atpool, atpool); + for (atp = atpool; atp < &atpool[ATPDPSIZE]; atp++) { + if (atp->state == ATPD_STATE_FREE) + continue; + isp_prt(isp, ISP_LOGALL, "Chan %d ATP [0x%x] origdlen %u bytes_xfrd %u lun %jx nphdl 0x%04x s_id 0x%06x d_id 0x%06x oxid 0x%04x state %s", + chan, atp->tag, atp->orig_datalen, atp->bytes_xfered, (uintmax_t)atp->lun, atp->nphdl, atp->sid, atp->portid, atp->oxid, states[atp->state & 0x7]); } } - -static ISP_INLINE inot_private_data_t * -isp_get_ntpd(ispsoftc_t *isp, tstate_t *tptr) +static inot_private_data_t * +isp_get_ntpd(ispsoftc_t *isp, int chan) { + struct ntpdlist *ntfree; inot_private_data_t *ntp; - ntp = tptr->ntfree; - if (ntp) { - tptr->ntfree = ntp->next; - } + + ISP_GET_PC_ADDR(isp, chan, ntfree, ntfree); + ntp = STAILQ_FIRST(ntfree); + if (ntp) + STAILQ_REMOVE_HEAD(ntfree, next); return (ntp); } -static ISP_INLINE inot_private_data_t * -isp_find_ntpd(ispsoftc_t *isp, tstate_t *tptr, uint32_t tag_id, uint32_t seq_id) +static inot_private_data_t * +isp_find_ntpd(ispsoftc_t *isp, int chan, uint32_t tag_id, uint32_t seq_id) { - inot_private_data_t *ntp; - for (ntp = tptr->ntpool; ntp < &tptr->ntpool[ATPDPSIZE]; ntp++) { - if (ntp->rd.tag_id == tag_id && ntp->rd.seq_id == seq_id) { + inot_private_data_t *ntp, *ntp2; + + ISP_GET_PC(isp, chan, ntpool, ntp); + ISP_GET_PC_ADDR(isp, chan, ntpool[ATPDPSIZE], ntp2); + for (; ntp < ntp2; ntp++) { + if (ntp->tag_id == tag_id && ntp->seq_id == seq_id) return (ntp); - } } return (NULL); } -static ISP_INLINE void -isp_put_ntpd(ispsoftc_t *isp, tstate_t *tptr, inot_private_data_t *ntp) +static void +isp_put_ntpd(ispsoftc_t *isp, int chan, inot_private_data_t *ntp) { - ntp->rd.tag_id = ntp->rd.seq_id = 0; - ntp->next = tptr->ntfree; - tptr->ntfree = ntp; + struct ntpdlist *ntfree; + + ntp->tag_id = ntp->seq_id = 0; + ISP_GET_PC_ADDR(isp, chan, ntfree, ntfree); + STAILQ_INSERT_HEAD(ntfree, ntp, next); } static cam_status create_lun_state(ispsoftc_t *isp, int bus, struct cam_path *path, tstate_t **rslt) { - cam_status status; lun_id_t lun; struct tslist *lhp; tstate_t *tptr; - int i; lun = xpt_path_lun_id(path); if (lun != CAM_LUN_WILDCARD) { @@ -1114,31 +1065,13 @@ create_lun_state(ispsoftc_t *isp, int bus, struct cam_path *path, tstate_t **rsl return (CAM_LUN_INVALID); } } - if (is_lun_enabled(isp, bus, lun)) { - return (CAM_LUN_ALRDY_ENA); - } tptr = malloc(sizeof (tstate_t), M_DEVBUF, M_NOWAIT|M_ZERO); if (tptr == NULL) { return (CAM_RESRC_UNAVAIL); } tptr->ts_lun = lun; - status = xpt_create_path(&tptr->owner, NULL, xpt_path_path_id(path), xpt_path_target_id(path), lun); - if (status != CAM_REQ_CMP) { - free(tptr, M_DEVBUF); - return (status); - } SLIST_INIT(&tptr->atios); SLIST_INIT(&tptr->inots); - TAILQ_INIT(&tptr->waitq); - LIST_INIT(&tptr->atfree); - for (i = ATPDPSIZE-1; i >= 0; i--) - LIST_INSERT_HEAD(&tptr->atfree, &tptr->atpool[i], next); - for (i = 0; i < ATPDPHASHSIZE; i++) - LIST_INIT(&tptr->atused[i]); - for (i = 0; i < ATPDPSIZE-1; i++) - tptr->ntpool[i].next = &tptr->ntpool[i+1]; - tptr->ntfree = tptr->ntpool; - tptr->hold = 1; ISP_GET_PC_ADDR(isp, bus, lun_hash[LUN_HASH_FUNC(lun)], lhp); SLIST_INSERT_HEAD(lhp, tptr, next); *rslt = tptr; @@ -1146,34 +1079,30 @@ create_lun_state(ispsoftc_t *isp, int bus, struct cam_path *path, tstate_t **rsl return (CAM_REQ_CMP); } -static ISP_INLINE void -destroy_lun_state(ispsoftc_t *isp, tstate_t *tptr) +static void +destroy_lun_state(ispsoftc_t *isp, int bus, tstate_t *tptr) { union ccb *ccb; struct tslist *lhp; + inot_private_data_t *ntp; - KASSERT((tptr->hold != 0), ("tptr is not held")); - KASSERT((tptr->hold == 1), ("tptr still held (%d)", tptr->hold)); - do { - ccb = (union ccb *)SLIST_FIRST(&tptr->atios); - if (ccb) { - SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle); - ccb->ccb_h.status = CAM_REQ_ABORTED; - xpt_done(ccb); - } - } while (ccb); - do { - ccb = (union ccb *)SLIST_FIRST(&tptr->inots); - if (ccb) { - SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle); - ccb->ccb_h.status = CAM_REQ_ABORTED; - xpt_done(ccb); - } - } while (ccb); - ISP_GET_PC_ADDR(isp, cam_sim_bus(xpt_path_sim(tptr->owner)), lun_hash[LUN_HASH_FUNC(tptr->ts_lun)], lhp); + while ((ccb = (union ccb *)SLIST_FIRST(&tptr->atios)) != NULL) { + SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle); + ccb->ccb_h.status = CAM_REQ_ABORTED; + xpt_done(ccb); + }; + while ((ccb = (union ccb *)SLIST_FIRST(&tptr->inots)) != NULL) { + SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle); + ccb->ccb_h.status = CAM_REQ_ABORTED; + xpt_done(ccb); + } + while ((ntp = STAILQ_FIRST(&tptr->restart_queue)) != NULL) { + isp_endcmd(isp, ntp->data, NIL_HANDLE, bus, SCSI_STATUS_BUSY, 0); + STAILQ_REMOVE_HEAD(&tptr->restart_queue, next); + isp_put_ntpd(isp, bus, ntp); + } + ISP_GET_PC_ADDR(isp, bus, lun_hash[LUN_HASH_FUNC(tptr->ts_lun)], lhp); SLIST_REMOVE(lhp, tptr, tstate, next); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "destroyed tstate\n"); - xpt_free_path(tptr->owner); free(tptr, M_DEVBUF); } @@ -1220,7 +1149,6 @@ isp_enable_lun(ispsoftc_t *isp, union ccb *ccb) return; } - rls_lun_statep(isp, tptr); ccb->ccb_h.status = CAM_REQ_CMP; xpt_done(ccb); } @@ -1251,7 +1179,7 @@ isp_disable_lun(ispsoftc_t *isp, union ccb *ccb) return; } - destroy_lun_state(isp, tptr); + destroy_lun_state(isp, bus, tptr); ccb->ccb_h.status = CAM_REQ_CMP; xpt_done(ccb); } @@ -1260,43 +1188,33 @@ static void isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) { int fctape, sendstatus, resid; - tstate_t *tptr; fcparam *fcp; atio_private_data_t *atp; struct ccb_scsiio *cso; + struct isp_ccbq *waitq; uint32_t dmaresult, handle, xfrlen, sense_length, tmp; uint8_t local[QENTRY_LEN]; - tptr = get_lun_statep(isp, XS_CHANNEL(ccb), XS_LUN(ccb)); - if (tptr == NULL) { - tptr = get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD); - if (tptr == NULL) { - isp_prt(isp, ISP_LOGERR, "%s: [0x%x] cannot find tstate pointer", __func__, ccb->csio.tag_id); - ccb->ccb_h.status = CAM_DEV_NOT_THERE; - xpt_done(ccb); - return; - } - } isp_prt(isp, ISP_LOGTDEBUG0, "%s: ENTRY[0x%x] how %u xfrlen %u sendstatus %d sense_len %u", __func__, ccb->csio.tag_id, how, ccb->csio.dxfer_len, (ccb->ccb_h.flags & CAM_SEND_STATUS) != 0, ((ccb->ccb_h.flags & CAM_SEND_SENSE)? ccb->csio.sense_len : 0)); + ISP_GET_PC_ADDR(isp, XS_CHANNEL(ccb), waitq, waitq); switch (how) { - case FROM_TIMER: case FROM_CAM: /* * Insert at the tail of the list, if any, waiting CTIO CCBs */ - TAILQ_INSERT_TAIL(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_TAIL(waitq, &ccb->ccb_h, periph_links.tqe); break; + case FROM_TIMER: case FROM_SRR: case FROM_CTIO_DONE: - TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); break; } - while (TAILQ_FIRST(&tptr->waitq) != NULL) { - ccb = (union ccb *) TAILQ_FIRST(&tptr->waitq); - TAILQ_REMOVE(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + while ((ccb = (union ccb *) TAILQ_FIRST(waitq)) != NULL) { + TAILQ_REMOVE(waitq, &ccb->ccb_h, periph_links.tqe); cso = &ccb->csio; xfrlen = cso->dxfer_len; @@ -1309,10 +1227,10 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) } } - atp = isp_find_atpd(isp, tptr, cso->tag_id); + atp = isp_find_atpd(isp, XS_CHANNEL(ccb), cso->tag_id); if (atp == NULL) { isp_prt(isp, ISP_LOGERR, "%s: [0x%x] cannot find private data adjunct in %s", __func__, cso->tag_id, __func__); - isp_dump_atpd(isp, tptr); + isp_dump_atpd(isp, XS_CHANNEL(ccb)); ccb->ccb_h.status = CAM_REQ_CMP_ERR; xpt_done(ccb); continue; @@ -1345,7 +1263,7 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) */ if (atp->ctcnt >= ATPD_CCB_OUTSTANDING) { isp_prt(isp, ISP_LOGTINFO, "[0x%x] handling only %d CCBs at a time (flags for this ccb: 0x%x)", cso->tag_id, ATPD_CCB_OUTSTANDING, ccb->ccb_h.flags); - TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); break; } @@ -1462,7 +1380,7 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) if (atp->ests == NULL) { atp->ests = isp_get_ecmd(isp); if (atp->ests == NULL) { - TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); break; } } @@ -1617,7 +1535,7 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) if (atp->ests == NULL) { atp->ests = isp_get_ecmd(isp); if (atp->ests == NULL) { - TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); break; } } @@ -1706,13 +1624,13 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) if (isp_get_pcmd(isp, ccb)) { ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "out of PCMDs\n"); - TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); break; } handle = isp_allocate_handle(isp, ccb, ISP_HANDLE_TARGET); if (handle == 0) { ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__); - TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); isp_free_pcmd(isp, ccb); break; } @@ -1742,7 +1660,7 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) isp_destroy_handle(isp, handle); isp_free_pcmd(isp, ccb); if (dmaresult == CMD_EAGAIN) { - TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe); + TAILQ_INSERT_HEAD(waitq, &ccb->ccb_h, periph_links.tqe); break; } ccb->ccb_h.status = CAM_REQ_CMP_ERR; @@ -1759,7 +1677,6 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) atp->ctcnt++; atp->seqno++; } - rls_lun_statep(isp, tptr); } static void @@ -1856,7 +1773,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) */ if ((aep->at_status & ~QLTM_SVALID) != AT_CDB) { isp_prt(isp, ISP_LOGWARN, "bogus atio (0x%x) leaked to platform", aep->at_status); - isp_endcmd(isp, aep, SCSI_STATUS_BUSY, 0); + isp_endcmd(isp, aep, NIL_HANDLE, 0, SCSI_STATUS_BUSY, 0); return; } @@ -1880,9 +1797,9 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) if (tptr == NULL) { isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %jx or wildcard", __func__, aep->at_rxid, (uintmax_t)lun); if (lun == 0) { - isp_endcmd(isp, aep, SCSI_STATUS_BUSY, 0); + isp_endcmd(isp, aep, nphdl, 0, SCSI_STATUS_BUSY, 0); } else { - isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0); + isp_endcmd(isp, aep, nphdl, 0, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0); } return; } @@ -1891,38 +1808,15 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) /* * Start any commands pending resources first. */ - if (tptr->restart_queue) { - inot_private_data_t *restart_queue = tptr->restart_queue; - tptr->restart_queue = NULL; - while (restart_queue) { - ntp = restart_queue; - restart_queue = ntp->rd.nt.nt_hba; - isp_prt(isp, ISP_LOGTDEBUG0, "%s: restarting resrc deprived %x", __func__, ((at2_entry_t *)ntp->rd.data)->at_rxid); - isp_handle_platform_atio2(isp, (at2_entry_t *) ntp->rd.data); - isp_put_ntpd(isp, tptr, ntp); - /* - * If a recursion caused the restart queue to start to fill again, - * stop and splice the new list on top of the old list and restore - * it and go to noresrc. - */ - if (tptr->restart_queue) { - ntp = tptr->restart_queue; - tptr->restart_queue = restart_queue; - while (restart_queue->rd.nt.nt_hba) { - restart_queue = restart_queue->rd.nt.nt_hba; - } - restart_queue->rd.nt.nt_hba = ntp; - goto noresrc; - } - } - } + if (isp_atio_restart(isp, 0, tptr)) + goto noresrc; atiop = (struct ccb_accept_tio *) SLIST_FIRST(&tptr->atios); if (atiop == NULL) { goto noresrc; } - atp = isp_get_atpd(isp, tptr, aep->at_rxid); + atp = isp_get_atpd(isp, 0, aep->at_rxid); if (atp == NULL) { goto noresrc; } @@ -1997,19 +1891,15 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) atp->state = ATPD_STATE_CAM; xpt_done((union ccb *)atiop); isp_prt(isp, ISP_LOGTDEBUG0, "ATIO2[0x%x] CDB=0x%x lun %jx datalen %u", aep->at_rxid, atp->cdb0, (uintmax_t)lun, atp->orig_datalen); - rls_lun_statep(isp, tptr); return; noresrc: - ntp = isp_get_ntpd(isp, tptr); + ntp = isp_get_ntpd(isp, 0); if (ntp == NULL) { - rls_lun_statep(isp, tptr); - isp_endcmd(isp, aep, SCSI_STATUS_BUSY, 0); + isp_endcmd(isp, aep, nphdl, 0, SCSI_STATUS_BUSY, 0); return; } - memcpy(ntp->rd.data, aep, QENTRY_LEN); - ntp->rd.nt.nt_hba = tptr->restart_queue; - tptr->restart_queue = ntp; - rls_lun_statep(isp, tptr); + memcpy(ntp->data, aep, QENTRY_LEN); + STAILQ_INSERT_TAIL(&tptr->restart_queue, ntp, next); } static void @@ -2114,40 +2004,13 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep) /* * Start any commands pending resources first. */ - if (tptr->restart_queue) { - inot_private_data_t *restart_queue = tptr->restart_queue; - tptr->restart_queue = NULL; - while (restart_queue) { - ntp = restart_queue; - restart_queue = ntp->rd.nt.nt_hba; - isp_prt(isp, ISP_LOGTDEBUG0, "%s: restarting resrc deprived %x", __func__, ((at7_entry_t *)ntp->rd.data)->at_rxid); - isp_handle_platform_atio7(isp, (at7_entry_t *) ntp->rd.data); - isp_put_ntpd(isp, tptr, ntp); - /* - * If a recursion caused the restart queue to start to fill again, - * stop and splice the new list on top of the old list and restore - * it and go to noresrc. - */ - if (tptr->restart_queue) { - isp_prt(isp, ISP_LOGTDEBUG0, "%s: restart queue refilling", __func__); - if (restart_queue) { - ntp = tptr->restart_queue; - tptr->restart_queue = restart_queue; - while (restart_queue->rd.nt.nt_hba) { - restart_queue = restart_queue->rd.nt.nt_hba; - } - restart_queue->rd.nt.nt_hba = ntp; - } - goto noresrc; - } - } - } + if (isp_atio_restart(isp, chan, tptr)) + goto noresrc; /* * If the f/w is out of resources, just send a BUSY status back. */ if (aep->at_rxid == AT7_NORESRC_RXID) { - rls_lun_statep(isp, tptr); isp_endcmd(isp, aep, nphdl, chan, SCSI_BUSY, 0); return; } @@ -2161,7 +2024,7 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep) goto noresrc; } - oatp = isp_find_atpd(isp, tptr, aep->at_rxid); + oatp = isp_find_atpd(isp, chan, aep->at_rxid); if (oatp) { isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platforms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d", aep->at_rxid, nphdl, sid, aep->at_hdr.ox_id, oatp->state); @@ -2170,7 +2033,7 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep) */ goto noresrc; } - atp = isp_get_atpd(isp, tptr, aep->at_rxid); + atp = isp_get_atpd(isp, chan, aep->at_rxid); if (atp == NULL) { isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] out of atps", aep->at_rxid); goto noresrc; @@ -2226,22 +2089,17 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep) isp_prt(isp, ISP_LOGTDEBUG0, "ATIO7[0x%x] CDB=0x%x lun %jx datalen %u", aep->at_rxid, atp->cdb0, (uintmax_t)lun, atp->orig_datalen); xpt_done((union ccb *)atiop); - rls_lun_statep(isp, tptr); return; noresrc: - if (atp) { - isp_put_atpd(isp, tptr, atp); - } - ntp = isp_get_ntpd(isp, tptr); + if (atp) + isp_put_atpd(isp, chan, atp); + ntp = isp_get_ntpd(isp, chan); if (ntp == NULL) { - rls_lun_statep(isp, tptr); isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_BUSY, 0); return; } - memcpy(ntp->rd.data, aep, QENTRY_LEN); - ntp->rd.nt.nt_hba = tptr->restart_queue; - tptr->restart_queue = ntp; - rls_lun_statep(isp, tptr); + memcpy(ntp->data, aep, QENTRY_LEN); + STAILQ_INSERT_TAIL(&tptr->restart_queue, ntp, next); } @@ -2252,7 +2110,7 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep) * transaction. */ static void -isp_handle_srr_start(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp) +isp_handle_srr_start(ispsoftc_t *isp, atio_private_data_t *atp) { in_fcentry_24xx_t *inot; uint32_t srr_off, ccb_off, ccb_len, ccb_end; @@ -2352,7 +2210,6 @@ isp_handle_srr_start(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp) static void isp_handle_srr_notify(ispsoftc_t *isp, void *inot_raw) { - tstate_t *tptr; in_fcentry_24xx_t *inot = inot_raw; atio_private_data_t *atp; uint32_t tag = inot->in_rxid; @@ -2363,15 +2220,8 @@ isp_handle_srr_notify(ispsoftc_t *isp, void *inot_raw) return; } - tptr = get_lun_statep_from_tag(isp, bus, tag); - if (tptr == NULL) { - isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x in SRR Notify", __func__, tag); - isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); - return; - } - atp = isp_find_atpd(isp, tptr, tag); + atp = isp_find_atpd(isp, bus, tag); if (atp == NULL) { - rls_lun_statep(isp, tptr); isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x in SRR Notify", __func__, tag); isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); return; @@ -2381,8 +2231,7 @@ isp_handle_srr_notify(ispsoftc_t *isp, void *inot_raw) isp_prt(isp, ISP_LOGTINFO /* ISP_LOGTDEBUG0 */, "SRR[0x%x] inot->in_rxid flags 0x%x srr_iu=%x reloff 0x%x", inot->in_rxid, inot->in_flags, inot->in_srr_iu, inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16)); if (atp->srr_ccb) - isp_handle_srr_start(isp, tptr, atp); - rls_lun_statep(isp, tptr); + isp_handle_srr_start(isp, atp); } static void @@ -2390,7 +2239,6 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) { union ccb *ccb; int sentstatus = 0, ok = 0, notify_cam = 0, resid = 0, failure = 0; - tstate_t *tptr = NULL; atio_private_data_t *atp = NULL; int bus; uint32_t handle, moved_data = 0, data_requested; @@ -2409,19 +2257,10 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) } bus = XS_CHANNEL(ccb); - tptr = get_lun_statep(isp, bus, XS_LUN(ccb)); - if (tptr == NULL) { - tptr = get_lun_statep(isp, bus, CAM_LUN_WILDCARD); - } - if (tptr == NULL) { - isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x after I/O", __func__, ccb->csio.tag_id); - return; - } - if (IS_24XX(isp)) { - atp = isp_find_atpd(isp, tptr, ((ct7_entry_t *)arg)->ct_rxid); + atp = isp_find_atpd(isp, bus, ((ct7_entry_t *)arg)->ct_rxid); } else { - atp = isp_find_atpd(isp, tptr, ((ct2_entry_t *)arg)->ct_rxid); + atp = isp_find_atpd(isp, bus, ((ct2_entry_t *)arg)->ct_rxid); } if (atp == NULL) { /* @@ -2429,10 +2268,9 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) * ct_rxid value, filling only ct_syshandle. Workaround * that using tag_id from the CCB, pointed by ct_syshandle. */ - atp = isp_find_atpd(isp, tptr, ccb->csio.tag_id); + atp = isp_find_atpd(isp, bus, ccb->csio.tag_id); } if (atp == NULL) { - rls_lun_statep(isp, tptr); isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __func__, ccb->csio.tag_id); return; } @@ -2447,8 +2285,7 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) if (ct->ct_nphdl == CT7_SRR) { atp->srr_ccb = ccb; if (atp->srr_notify_rcvd) - isp_handle_srr_start(isp, tptr, atp); - rls_lun_statep(isp, tptr); + isp_handle_srr_start(isp, atp); return; } if (ct->ct_nphdl == CT_HBA_RESET) { @@ -2469,8 +2306,7 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) if (ct->ct_status == CT_SRR) { atp->srr_ccb = ccb; if (atp->srr_notify_rcvd) - isp_handle_srr_start(isp, tptr, atp); - rls_lun_statep(isp, tptr); + isp_handle_srr_start(isp, atp); isp_target_putback_atio(ccb); return; } @@ -2505,7 +2341,6 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) ccb->ccb_h.status |= CAM_REQ_CMP_ERR; } atp->state = ATPD_STATE_PDON; - rls_lun_statep(isp, tptr); /* * We never *not* notify CAM when there has been any error (ok == 0), @@ -2520,6 +2355,12 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) return; } + /* + * If we sent status or error happened, we are done with this ATIO. + */ + if (sentstatus || !ok) + isp_put_atpd(isp, bus, atp); + /* * We're telling CAM we're done with this CTIO transaction. * @@ -2560,13 +2401,11 @@ isp_handle_platform_notify_fc(ispsoftc_t *isp, in_fcentry_t *inp) break; case IN_ABORT_TASK: { - tstate_t *tptr; uint16_t nphdl, lun; uint32_t sid; uint64_t wwn; - atio_private_data_t *atp; fcportdb_t *lp; - struct ccb_immediate_notify *inot = NULL; + isp_notify_t tmp, *nt = &tmp; if (ISP_CAP_SCCFW(isp)) { lun = inp->in_scclun; @@ -2588,47 +2427,25 @@ isp_handle_platform_notify_fc(ispsoftc_t *isp, in_fcentry_t *inp) wwn = INI_ANY; sid = PORT_ANY; } - tptr = get_lun_statep(isp, 0, lun); - if (tptr == NULL) { - tptr = get_lun_statep(isp, 0, CAM_LUN_WILDCARD); - if (tptr == NULL) { - isp_prt(isp, ISP_LOGWARN, "ABORT TASK for lun %x, but no tstate", lun); - return; - } - } - atp = isp_find_atpd(isp, tptr, inp->in_seqid); + isp_prt(isp, ISP_LOGTDEBUG0, "ABORT TASK RX_ID %x WWN 0x%016llx", + inp->in_seqid, (unsigned long long) wwn); - if (atp) { - inot = (struct ccb_immediate_notify *) SLIST_FIRST(&tptr->inots); - isp_prt(isp, ISP_LOGTDEBUG0, "ABORT TASK RX_ID %x WWN 0x%016llx state %d", inp->in_seqid, (unsigned long long) wwn, atp->state); - if (inot) { - tptr->inot_count--; - SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count); - } else { - ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "out of INOT structures\n"); - } - } else { - ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "abort task RX_ID %x from wwn 0x%016llx, state unknown\n", inp->in_seqid, wwn); - } - if (inot) { - isp_notify_t tmp, *nt = &tmp; - ISP_MEMZERO(nt, sizeof (isp_notify_t)); - nt->nt_hba = isp; - nt->nt_tgt = FCPARAM(isp, 0)->isp_wwpn; - nt->nt_wwn = wwn; - nt->nt_nphdl = nphdl; - nt->nt_sid = sid; - nt->nt_did = PORT_ANY; - nt->nt_lun = lun; - nt->nt_need_ack = 1; - nt->nt_channel = 0; - nt->nt_ncode = NT_ABORT_TASK; - nt->nt_lreserved = inot; - isp_handle_platform_target_tmf(isp, nt); - needack = 0; - } - rls_lun_statep(isp, tptr); + ISP_MEMZERO(nt, sizeof (isp_notify_t)); + nt->nt_hba = isp; + nt->nt_tgt = FCPARAM(isp, 0)->isp_wwpn; + nt->nt_wwn = wwn; + nt->nt_nphdl = nphdl; + nt->nt_sid = sid; + nt->nt_did = PORT_ANY; + nt->nt_lun = lun; + nt->nt_tagval = inp->in_seqid; + nt->nt_tagval |= (((uint64_t)(isp->isp_serno++)) << 32); + nt->nt_need_ack = 1; + nt->nt_channel = 0; + nt->nt_ncode = NT_ABORT_TASK; + nt->nt_lreserved = inp; + isp_handle_platform_target_tmf(isp, nt); + needack = 0; break; } default: @@ -2924,11 +2741,11 @@ isp_handle_platform_target_tmf(ispsoftc_t *isp, isp_notify_t *notify) switch (notify->nt_ncode) { case NT_ABORT_TASK: - isp_target_mark_aborted_early(isp, tptr, inot->tag_id); + isp_target_mark_aborted_early(isp, notify->nt_channel, tptr, inot->tag_id); inot->arg = MSG_ABORT_TASK; break; case NT_ABORT_TASK_SET: - isp_target_mark_aborted_early(isp, tptr, TAG_ANY); + isp_target_mark_aborted_early(isp, notify->nt_channel, tptr, TAG_ANY); inot->arg = MSG_ABORT_TASK_SET; break; case NT_CLEAR_ACA: @@ -2954,30 +2771,26 @@ isp_handle_platform_target_tmf(ispsoftc_t *isp, isp_notify_t *notify) goto bad; } - ntp = isp_get_ntpd(isp, tptr); + ntp = isp_get_ntpd(isp, notify->nt_channel); if (ntp == NULL) { isp_prt(isp, ISP_LOGWARN, "%s: out of inotify private structures", __func__); goto bad; } - ISP_MEMCPY(&ntp->rd.nt, notify, sizeof (isp_notify_t)); + ISP_MEMCPY(&ntp->nt, notify, sizeof (isp_notify_t)); if (notify->nt_lreserved) { - ISP_MEMCPY(&ntp->rd.data, notify->nt_lreserved, QENTRY_LEN); - ntp->rd.nt.nt_lreserved = &ntp->rd.data; + ISP_MEMCPY(&ntp->data, notify->nt_lreserved, QENTRY_LEN); + ntp->nt.nt_lreserved = &ntp->data; } - ntp->rd.seq_id = notify->nt_tagval; - ntp->rd.tag_id = notify->nt_tagval >> 32; + ntp->seq_id = notify->nt_tagval; + ntp->tag_id = notify->nt_tagval >> 32; tptr->inot_count--; SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle); - rls_lun_statep(isp, tptr); ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count); inot->ccb_h.status = CAM_MESSAGE_RECV; xpt_done((union ccb *)inot); return; bad: - if (tptr) { - rls_lun_statep(isp, tptr); - } if (notify->nt_need_ack && notify->nt_lreserved) { if (((isphdr_t *)notify->nt_lreserved)->rqs_entry_type == RQSTYPE_ABTS_RCVD) { if (isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM)) { @@ -2989,72 +2802,39 @@ isp_handle_platform_target_tmf(ispsoftc_t *isp, isp_notify_t *notify) } } -/* - * Find the associated private data and mark it as dead so - * we don't try to work on it any further. - */ static void -isp_target_mark_aborted(ispsoftc_t *isp, union ccb *ccb) +isp_target_mark_aborted_early(ispsoftc_t *isp, int chan, tstate_t *tptr, uint32_t tag_id) { - tstate_t *tptr; - atio_private_data_t *atp; - union ccb *accb = ccb->cab.abort_ccb; - - tptr = get_lun_statep(isp, XS_CHANNEL(accb), XS_LUN(accb)); - if (tptr == NULL) { - tptr = get_lun_statep(isp, XS_CHANNEL(accb), CAM_LUN_WILDCARD); - if (tptr == NULL) { - ccb->ccb_h.status = CAM_REQ_INVALID; - return; - } - } - - atp = isp_find_atpd(isp, tptr, accb->atio.tag_id); - if (atp == NULL) { - ccb->ccb_h.status = CAM_REQ_INVALID; - } else { - atp->dead = 1; - ccb->ccb_h.status = CAM_REQ_CMP; - } - rls_lun_statep(isp, tptr); -} - -static void -isp_target_mark_aborted_early(ispsoftc_t *isp, tstate_t *tptr, uint32_t tag_id) -{ - atio_private_data_t *atp; - inot_private_data_t *restart_queue = tptr->restart_queue; + atio_private_data_t *atp, *atpool; + inot_private_data_t *ntp, *tmp; + uint32_t this_tag_id; /* * First, clean any commands pending restart */ - tptr->restart_queue = NULL; - while (restart_queue) { - uint32_t this_tag_id; - inot_private_data_t *ntp = restart_queue; - - restart_queue = ntp->rd.nt.nt_hba; - - if (IS_24XX(isp)) { - this_tag_id = ((at7_entry_t *)ntp->rd.data)->at_rxid; - } else { - this_tag_id = ((at2_entry_t *)ntp->rd.data)->at_rxid; - } + STAILQ_FOREACH_SAFE(ntp, &tptr->restart_queue, next, tmp) { + if (IS_24XX(isp)) + this_tag_id = ((at7_entry_t *)ntp->data)->at_rxid; + else + this_tag_id = ((at2_entry_t *)ntp->data)->at_rxid; if ((uint64_t)tag_id == TAG_ANY || tag_id == this_tag_id) { - isp_put_ntpd(isp, tptr, ntp); - } else { - ntp->rd.nt.nt_hba = tptr->restart_queue; - tptr->restart_queue = ntp; + isp_endcmd(isp, ntp->data, NIL_HANDLE, chan, + ECMD_TERMINATE, 0); + isp_put_ntpd(isp, chan, ntp); + STAILQ_REMOVE(&tptr->restart_queue, ntp, + inot_private_data, next); } } /* * Now mark other ones dead as well. */ - for (atp = tptr->atpool; atp < &tptr->atpool[ATPDPSIZE]; atp++) { - if ((uint64_t)tag_id == TAG_ANY || atp->tag == tag_id) { + ISP_GET_PC(isp, chan, atpool, atpool); + for (atp = atpool; atp < &atpool[ATPDPSIZE]; atp++) { + if (atp->lun != tptr->ts_lun) + continue; + if ((uint64_t)tag_id == TAG_ANY || atp->tag == tag_id) atp->dead = 1; - } } } #endif @@ -3453,6 +3233,77 @@ isp_kthread(void *arg) kthread_exit(); } +#ifdef ISP_TARGET_MODE +static void +isp_abort_atio(ispsoftc_t *isp, union ccb *ccb) +{ + atio_private_data_t *atp; + union ccb *accb = ccb->cab.abort_ccb; + struct ccb_hdr *sccb; + tstate_t *tptr; + + tptr = get_lun_statep(isp, XS_CHANNEL(accb), XS_LUN(accb)); + if (tptr != NULL) { + /* Search for the ATIO among queueued. */ + SLIST_FOREACH(sccb, &tptr->atios, sim_links.sle) { + if (sccb != &accb->ccb_h) + continue; + SLIST_REMOVE(&tptr->atios, sccb, ccb_hdr, sim_links.sle); + tptr->atio_count--; + accb->ccb_h.status = CAM_REQ_ABORTED; + xpt_done(accb); + ccb->ccb_h.status = CAM_REQ_CMP; + return; + } + } + + /* Search for the ATIO among running. */ + atp = isp_find_atpd(isp, XS_CHANNEL(accb), accb->atio.tag_id); + if (atp != NULL) { + /* XXX Send TERMINATE to firmware here. */ + isp_put_atpd(isp, XS_CHANNEL(accb), atp); + ccb->ccb_h.status = CAM_REQ_CMP; + } else { + ccb->ccb_h.status = CAM_UA_ABORT; + } +} + +static void +isp_abort_inot(ispsoftc_t *isp, union ccb *ccb) +{ + inot_private_data_t *ntp; + union ccb *accb = ccb->cab.abort_ccb; + struct ccb_hdr *sccb; + tstate_t *tptr; + + tptr = get_lun_statep(isp, XS_CHANNEL(accb), XS_LUN(accb)); + if (tptr != NULL) { + /* Search for the INOT among queueued. */ + SLIST_FOREACH(sccb, &tptr->inots, sim_links.sle) { + if (sccb != &accb->ccb_h) + continue; + SLIST_REMOVE(&tptr->inots, sccb, ccb_hdr, sim_links.sle); + tptr->inot_count--; + accb->ccb_h.status = CAM_REQ_ABORTED; + xpt_done(accb); + ccb->ccb_h.status = CAM_REQ_CMP; + return; + } + } + + /* Search for the INOT among running. */ + ntp = isp_find_ntpd(isp, XS_CHANNEL(accb), accb->cin1.tag_id, accb->cin1.seq_id); + if (ntp != NULL) { + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, ntp->data); + isp_put_ntpd(isp, XS_CHANNEL(accb), ntp); + ccb->ccb_h.status = CAM_REQ_CMP; + } else { + ccb->ccb_h.status = CAM_UA_ABORT; + return; + } +} +#endif + static void isp_action(struct cam_sim *sim, union ccb *ccb) { @@ -3565,27 +3416,20 @@ isp_action(struct cam_sim *sim, union ccb *ccb) isp_disable_lun(isp, ccb); } break; - case XPT_IMMED_NOTIFY: case XPT_IMMEDIATE_NOTIFY: /* Add Immediate Notify Resource */ case XPT_ACCEPT_TARGET_IO: /* Add Accept Target IO Resource */ { tstate_t *tptr = get_lun_statep(isp, XS_CHANNEL(ccb), ccb->ccb_h.target_lun); - if (tptr == NULL) { - tptr = get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD); - } if (tptr == NULL) { const char *str; - uint32_t tag; - if (ccb->ccb_h.func_code == XPT_IMMEDIATE_NOTIFY) { + if (ccb->ccb_h.func_code == XPT_IMMEDIATE_NOTIFY) str = "XPT_IMMEDIATE_NOTIFY"; - tag = ccb->cin1.seq_id; - } else { - tag = ccb->atio.tag_id; + else str = "XPT_ACCEPT_TARGET_IO"; - } - ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "%s: [0x%x] no state pointer found for %s\n", __func__, tag, str); - dump_tstates(isp, XS_CHANNEL(ccb)); + ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, + "%s: [0x%x] no state pointer found for %s\n", + __func__, str); ccb->ccb_h.status = CAM_DEV_NOT_THERE; break; } @@ -3593,46 +3437,23 @@ isp_action(struct cam_sim *sim, union ccb *ccb) ccb->ccb_h.spriv_ptr1 = isp; if (ccb->ccb_h.func_code == XPT_ACCEPT_TARGET_IO) { - if (ccb->atio.tag_id) { - atio_private_data_t *atp = isp_find_atpd(isp, tptr, ccb->atio.tag_id); - if (atp) { - isp_put_atpd(isp, tptr, atp); - } - } + ccb->atio.tag_id = 0; tptr->atio_count++; SLIST_INSERT_HEAD(&tptr->atios, &ccb->ccb_h, sim_links.sle); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE ATIO (tag id 0x%x), count now %d\n", - ccb->atio.tag_id, tptr->atio_count); - ccb->atio.tag_id = 0; + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, + "Put FREE ATIO, count now %d\n", tptr->atio_count); } else if (ccb->ccb_h.func_code == XPT_IMMEDIATE_NOTIFY) { - if (ccb->cin1.tag_id) { - inot_private_data_t *ntp = isp_find_ntpd(isp, tptr, ccb->cin1.tag_id, ccb->cin1.seq_id); - if (ntp) { - isp_put_ntpd(isp, tptr, ntp); - } - } + ccb->cin1.seq_id = ccb->cin1.tag_id = 0; tptr->inot_count++; SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n", - ccb->cin1.seq_id, tptr->inot_count); - ccb->cin1.seq_id = 0; - } else if (ccb->ccb_h.func_code == XPT_IMMED_NOTIFY) { - tptr->inot_count++; - SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n", - ccb->cin1.seq_id, tptr->inot_count); - ccb->cin1.seq_id = 0; + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, + "Put FREE INOT, count now %d\n", tptr->inot_count); } - rls_lun_statep(isp, tptr); ccb->ccb_h.status = CAM_REQ_INPROG; break; } - case XPT_NOTIFY_ACK: - ccb->ccb_h.status = CAM_REQ_CMP_ERR; - break; case XPT_NOTIFY_ACKNOWLEDGE: /* notify ack */ { - tstate_t *tptr; inot_private_data_t *ntp; /* @@ -3643,7 +3464,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) * All the relevant path information is in the associated immediate notify */ ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: [0x%x] NOTIFY ACKNOWLEDGE for 0x%x seen\n", __func__, ccb->cna2.tag_id, ccb->cna2.seq_id); - ntp = get_ntp_from_tagdata(isp, ccb->cna2.tag_id, ccb->cna2.seq_id, &tptr); + ntp = isp_find_ntpd(isp, XS_CHANNEL(ccb), ccb->cna2.tag_id, ccb->cna2.seq_id); if (ntp == NULL) { ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "%s: [0x%x] XPT_NOTIFY_ACKNOWLEDGE of 0x%x cannot find ntp private data\n", __func__, ccb->cna2.tag_id, ccb->cna2.seq_id); @@ -3651,17 +3472,15 @@ isp_action(struct cam_sim *sim, union ccb *ccb) xpt_done(ccb); break; } - if (isp_handle_platform_target_notify_ack(isp, &ntp->rd.nt, + if (isp_handle_platform_target_notify_ack(isp, &ntp->nt, (ccb->ccb_h.flags & CAM_SEND_STATUS) ? ccb->cna2.arg : 0)) { - rls_lun_statep(isp, tptr); cam_freeze_devq(ccb->ccb_h.path); cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000, 0); ccb->ccb_h.status &= ~CAM_STATUS_MASK; ccb->ccb_h.status |= CAM_REQUEUE_REQ; break; } - isp_put_ntpd(isp, tptr, ntp); - rls_lun_statep(isp, tptr); + isp_put_ntpd(isp, XS_CHANNEL(ccb), ntp); ccb->ccb_h.status = CAM_REQ_CMP; ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: [0x%x] calling xpt_done for tag 0x%x\n", __func__, ccb->cna2.tag_id, ccb->cna2.seq_id); xpt_done(ccb); @@ -3698,7 +3517,10 @@ isp_action(struct cam_sim *sim, union ccb *ccb) switch (accb->ccb_h.func_code) { #ifdef ISP_TARGET_MODE case XPT_ACCEPT_TARGET_IO: - isp_target_mark_aborted(isp, ccb); + isp_abort_atio(isp, ccb); + break; + case XPT_IMMEDIATE_NOTIFY: + isp_abort_inot(isp, ccb); break; #endif case XPT_SCSI_IO: @@ -4486,7 +4308,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) { abts_t *abts = (abts_t *)hp; isp_notify_t notify, *nt = ¬ify; - tstate_t *tptr; + atio_private_data_t *atp; fcportdb_t *lp; uint16_t chan; uint32_t sid, did; @@ -4513,13 +4335,8 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) /* * Try hard to find the lun for this command. */ - tptr = get_lun_statep_from_tag(isp, chan, abts->abts_rxid_task); - if (tptr) { - nt->nt_lun = tptr->ts_lun; - rls_lun_statep(isp, tptr); - } else { - nt->nt_lun = LUN_ANY; - } + atp = isp_find_atpd(isp, chan, abts->abts_rxid_task); + nt->nt_lun = atp ? atp->lun : LUN_ANY; nt->nt_need_ack = 1; nt->nt_tagval = abts->abts_rxid_task; nt->nt_tagval |= (((uint64_t) abts->abts_rxid_abts) << 32); diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h index d6c62a291608..e50ee16d1030 100644 --- a/sys/dev/isp/isp_freebsd.h +++ b/sys/dev/isp/isp_freebsd.h @@ -88,14 +88,6 @@ isp_ecmd_t * isp_get_ecmd(struct ispsoftc *); void isp_put_ecmd(struct ispsoftc *, isp_ecmd_t *); #ifdef ISP_TARGET_MODE -/* Not quite right, but there was no bump for this change */ -#if __FreeBSD_version < 225469 -#define SDFIXED(x) (&x) -#else -#define SDFIXED(x) ((struct scsi_sense_data_fixed *)(&x)) -#endif - -#define ISP_TARGET_FUNCTIONS 1 #define ATPDPSIZE 4096 #define ATPDPHASHSIZE 32 #define ATPDPHASH(x) ((((x) >> 24) ^ ((x) >> 16) ^ ((x) >> 8) ^ (x)) & \ @@ -108,7 +100,7 @@ typedef struct atio_private_data { uint32_t bytes_xfered; uint32_t bytes_in_transit; uint32_t tag; /* typically f/w RX_ID */ - uint32_t lun; + lun_id_t lun; uint32_t nphdl; uint32_t sid; uint32_t portid; @@ -147,14 +139,12 @@ typedef struct atio_private_data { #define ATPD_GET_SEQNO(hdrp) (((isphdr_t *)hdrp)->rqs_seqno & ATPD_SEQ_MASK) #define ATPD_GET_NCAM(hdrp) ((((isphdr_t *)hdrp)->rqs_seqno & ATPD_SEQ_NOTIFY_CAM) != 0) -typedef union inot_private_data inot_private_data_t; -union inot_private_data { - inot_private_data_t *next; - struct { - isp_notify_t nt; /* must be first! */ - uint8_t data[64]; /* sb QENTRY_LEN, but order of definitions is wrong */ - uint32_t tag_id, seq_id; - } rd; +typedef struct inot_private_data inot_private_data_t; +struct inot_private_data { + STAILQ_ENTRY(inot_private_data) next; + isp_notify_t nt; + uint8_t data[64]; /* sb QENTRY_LEN, but order of definitions is wrong */ + uint32_t tag_id, seq_id; }; typedef struct isp_timed_notify_ack { void *isp; @@ -163,23 +153,15 @@ typedef struct isp_timed_notify_ack { struct callout timer; } isp_tna_t; -TAILQ_HEAD(isp_ccbq, ccb_hdr); +STAILQ_HEAD(ntpdlist, inot_private_data); typedef struct tstate { - SLIST_ENTRY(tstate) next; - lun_id_t ts_lun; - struct cam_path *owner; - struct isp_ccbq waitq; /* waiting CCBs */ - struct ccb_hdr_slist atios; - struct ccb_hdr_slist inots; - uint32_t hold; + SLIST_ENTRY(tstate) next; + lun_id_t ts_lun; + struct ccb_hdr_slist atios; + struct ccb_hdr_slist inots; + struct ntpdlist restart_queue; uint16_t atio_count; uint16_t inot_count; - inot_private_data_t * restart_queue; - inot_private_data_t * ntfree; - inot_private_data_t ntpool[ATPDPSIZE]; - LIST_HEAD(, atio_private_data) atfree; - LIST_HEAD(, atio_private_data) atused[ATPDPHASHSIZE]; - atio_private_data_t atpool[ATPDPSIZE]; } tstate_t; #define LUN_HASH_SIZE 32 @@ -220,6 +202,8 @@ struct isp_nexus { * Per channel information */ SLIST_HEAD(tslist, tstate); +TAILQ_HEAD(isp_ccbq, ccb_hdr); +LIST_HEAD(atpdlist, atio_private_data); struct isp_fc { struct cam_sim *sim; @@ -249,7 +233,13 @@ struct isp_fc { struct callout gdt; /* gone device timer */ struct task gtask; #ifdef ISP_TARGET_MODE - struct tslist lun_hash[LUN_HASH_SIZE]; + struct tslist lun_hash[LUN_HASH_SIZE]; + struct isp_ccbq waitq; /* waiting CCBs */ + struct ntpdlist ntfree; + inot_private_data_t ntpool[ATPDPSIZE]; + struct atpdlist atfree; + struct atpdlist atused[ATPDPHASHSIZE]; + atio_private_data_t atpool[ATPDPSIZE]; #if defined(DEBUG) unsigned int inject_lost_data_frame; #endif @@ -264,7 +254,13 @@ struct isp_spi { simqfrozen : 3, iid : 4; #ifdef ISP_TARGET_MODE - struct tslist lun_hash[LUN_HASH_SIZE]; + struct tslist lun_hash[LUN_HASH_SIZE]; + struct isp_ccbq waitq; /* waiting CCBs */ + struct ntpdlist ntfree; + inot_private_data_t ntpool[ATPDPSIZE]; + struct atpdlist atfree; + struct atpdlist atused[ATPDPHASHSIZE]; + atio_private_data_t atpool[ATPDPSIZE]; #endif int num_threads; }; diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c index b0acd9605b75..8a51cf511a75 100644 --- a/sys/dev/isp/isp_pci.c +++ b/sys/dev/isp/isp_pci.c @@ -583,10 +583,10 @@ isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp) name, &tval) == 0 && tval != 0) { isp->isp_confopts |= ISP_CFG_FULL_DUPLEX; } - sptr = 0; + sptr = NULL; snprintf(name, sizeof(name), "%stopology", prefix); if (resource_string_value(device_get_name(dev), device_get_unit(dev), - name, (const char **) &sptr) == 0 && sptr != 0) { + name, (const char **) &sptr) == 0 && sptr != NULL) { if (strcmp(sptr, "lport") == 0) { isp->isp_confopts |= ISP_CFG_LPORT; } else if (strcmp(sptr, "nport") == 0) { @@ -631,12 +631,12 @@ isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp) * hint replacement to specify WWN strings with a leading * 'w' (e..g w50000000aaaa0001). Sigh. */ - sptr = 0; + sptr = NULL; snprintf(name, sizeof(name), "%sportwwn", prefix); tval = resource_string_value(device_get_name(dev), device_get_unit(dev), name, (const char **) &sptr); - if (tval == 0 && sptr != 0 && *sptr++ == 'w') { - char *eptr = 0; + if (tval == 0 && sptr != NULL && *sptr++ == 'w') { + char *eptr = NULL; ISP_FC_PC(isp, chan)->def_wwpn = strtouq(sptr, &eptr, 16); if (eptr < sptr + 16 || ISP_FC_PC(isp, chan)->def_wwpn == -1) { device_printf(dev, "mangled portwwn hint '%s'\n", sptr); @@ -644,12 +644,12 @@ isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp) } } - sptr = 0; + sptr = NULL; snprintf(name, sizeof(name), "%snodewwn", prefix); tval = resource_string_value(device_get_name(dev), device_get_unit(dev), name, (const char **) &sptr); - if (tval == 0 && sptr != 0 && *sptr++ == 'w') { - char *eptr = 0; + if (tval == 0 && sptr != NULL && *sptr++ == 'w') { + char *eptr = NULL; ISP_FC_PC(isp, chan)->def_wwnn = strtouq(sptr, &eptr, 16); if (eptr < sptr + 16 || ISP_FC_PC(isp, chan)->def_wwnn == 0) { device_printf(dev, "mangled nodewwn hint '%s'\n", sptr); diff --git a/sys/dev/isp/isp_target.c b/sys/dev/isp/isp_target.c index c5c277f0772c..5a31ea766540 100644 --- a/sys/dev/isp/isp_target.c +++ b/sys/dev/isp/isp_target.c @@ -503,11 +503,11 @@ isp_endcmd(ispsoftc_t *isp, ...) ct7_entry_t _ctio7; } un; va_list ap; + int vpidx, nphdl; ISP_MEMZERO(&un, sizeof un); if (IS_24XX(isp)) { - int vpidx, nphdl; at7_entry_t *aep; ct7_entry_t *cto = &un._ctio7; @@ -573,6 +573,9 @@ isp_endcmd(ispsoftc_t *isp, ...) va_start(ap, isp); aep = va_arg(ap, at2_entry_t *); + /* nphdl and vpidx are unused here. */ + nphdl = va_arg(ap, int); + vpidx = va_arg(ap, int); code = va_arg(ap, uint32_t); hdl = va_arg(ap, uint32_t); va_end(ap); diff --git a/sys/dev/iwi/if_iwi.c b/sys/dev/iwi/if_iwi.c index f1116f61e0f4..8e049e36ec0f 100644 --- a/sys/dev/iwi/if_iwi.c +++ b/sys/dev/iwi/if_iwi.c @@ -1979,9 +1979,9 @@ iwi_start(struct iwi_softc *sc) } ni = (struct ieee80211_node *) m->m_pkthdr.rcvif; if (iwi_tx_start(sc, m, ni, ac) != 0) { - ieee80211_free_node(ni); if_inc_counter(ni->ni_vap->iv_ifp, IFCOUNTER_OERRORS, 1); + ieee80211_free_node(ni); break; } sc->sc_tx_timer = 5; diff --git a/sys/dev/iwm/if_iwm.c b/sys/dev/iwm/if_iwm.c index 54f325e7031f..9a9ce9242a9d 100644 --- a/sys/dev/iwm/if_iwm.c +++ b/sys/dev/iwm/if_iwm.c @@ -152,6 +152,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -166,68 +167,6 @@ __FBSDID("$FreeBSD$"); #include #include -#define IWM_NVM_HW_SECTION_NUM_FAMILY_7000 0 -#define IWM_NVM_HW_SECTION_NUM_FAMILY_8000 10 - -/* lower blocks contain EEPROM image and calibration data */ -#define IWM_OTP_LOW_IMAGE_SIZE_FAMILY_7000 (16 * 512 * sizeof(uint16_t)) /* 16 KB */ -#define IWM_OTP_LOW_IMAGE_SIZE_FAMILY_8000 (32 * 512 * sizeof(uint16_t)) /* 32 KB */ - -#define IWM7260_FW "iwm7260fw" -#define IWM3160_FW "iwm3160fw" -#define IWM7265_FW "iwm7265fw" -#define IWM7265D_FW "iwm7265Dfw" -#define IWM8000_FW "iwm8000Cfw" - -#define IWM_DEVICE_7000_COMMON \ - .device_family = IWM_DEVICE_FAMILY_7000, \ - .eeprom_size = IWM_OTP_LOW_IMAGE_SIZE_FAMILY_7000, \ - .nvm_hw_section_num = IWM_NVM_HW_SECTION_NUM_FAMILY_7000, \ - .apmg_wake_up_wa = 1 - -const struct iwm_cfg iwm7260_cfg = { - .fw_name = IWM7260_FW, - IWM_DEVICE_7000_COMMON, - .host_interrupt_operation_mode = 1, -}; - -const struct iwm_cfg iwm3160_cfg = { - .fw_name = IWM3160_FW, - IWM_DEVICE_7000_COMMON, - .host_interrupt_operation_mode = 1, -}; - -const struct iwm_cfg iwm3165_cfg = { - /* XXX IWM7265D_FW doesn't seem to work properly yet */ - .fw_name = IWM7265_FW, - IWM_DEVICE_7000_COMMON, - .host_interrupt_operation_mode = 0, -}; - -const struct iwm_cfg iwm7265_cfg = { - .fw_name = IWM7265_FW, - IWM_DEVICE_7000_COMMON, - .host_interrupt_operation_mode = 0, -}; - -const struct iwm_cfg iwm7265d_cfg = { - /* XXX IWM7265D_FW doesn't seem to work properly yet */ - .fw_name = IWM7265_FW, - IWM_DEVICE_7000_COMMON, - .host_interrupt_operation_mode = 0, -}; - -#define IWM_DEVICE_8000_COMMON \ - .device_family = IWM_DEVICE_FAMILY_8000, \ - .eeprom_size = IWM_OTP_LOW_IMAGE_SIZE_FAMILY_8000, \ - .nvm_hw_section_num = IWM_NVM_HW_SECTION_NUM_FAMILY_8000 - -const struct iwm_cfg iwm8260_cfg = { - .fw_name = IWM8000_FW, - IWM_DEVICE_8000_COMMON, - .host_interrupt_operation_mode = 0, -}; - const uint8_t iwm_nvm_channels[] = { /* 2.4 GHz */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, @@ -285,8 +224,14 @@ struct iwm_nvm_section { uint8_t *data; }; +#define IWM_MVM_UCODE_ALIVE_TIMEOUT hz #define IWM_MVM_UCODE_CALIB_TIMEOUT (2*hz) +struct iwm_mvm_alive_data { + int valid; + uint32_t scd_base_addr; +}; + static int iwm_store_cscheme(struct iwm_softc *, const uint8_t *, size_t); static int iwm_firmware_store_section(struct iwm_softc *, enum iwm_ucode_type, @@ -294,10 +239,6 @@ static int iwm_firmware_store_section(struct iwm_softc *, static int iwm_set_default_calib(struct iwm_softc *, const void *); static void iwm_fw_info_free(struct iwm_fw_info *); static int iwm_read_firmware(struct iwm_softc *, enum iwm_ucode_type); -static void iwm_dma_map_addr(void *, bus_dma_segment_t *, int, int); -static int iwm_dma_contig_alloc(bus_dma_tag_t, struct iwm_dma_info *, - bus_size_t, bus_size_t); -static void iwm_dma_contig_free(struct iwm_dma_info *); static int iwm_alloc_fwmem(struct iwm_softc *); static int iwm_alloc_sched(struct iwm_softc *); static int iwm_alloc_kw(struct iwm_softc *); @@ -320,7 +261,7 @@ static int iwm_nic_rx_init(struct iwm_softc *); static int iwm_nic_tx_init(struct iwm_softc *); static int iwm_nic_init(struct iwm_softc *); static int iwm_enable_txq(struct iwm_softc *, int, int, int); -static int iwm_post_alive(struct iwm_softc *); +static int iwm_trans_pcie_fw_alive(struct iwm_softc *, uint32_t); static int iwm_nvm_read_chunk(struct iwm_softc *, uint16_t, uint16_t, uint16_t, uint8_t *, uint16_t *); static int iwm_nvm_read_section(struct iwm_softc *, uint16_t, uint8_t *, @@ -353,16 +294,21 @@ static void iwm_set_radio_cfg(const struct iwm_softc *, static struct iwm_nvm_data * iwm_parse_nvm_sections(struct iwm_softc *, struct iwm_nvm_section *); static int iwm_nvm_init(struct iwm_softc *); -static int iwm_firmware_load_sect(struct iwm_softc *, uint32_t, - const uint8_t *, uint32_t); -static int iwm_firmware_load_chunk(struct iwm_softc *, uint32_t, - const uint8_t *, uint32_t); -static int iwm_load_firmware_7000(struct iwm_softc *, enum iwm_ucode_type); -static int iwm_load_cpu_sections_8000(struct iwm_softc *, - struct iwm_fw_sects *, int , int *); -static int iwm_load_firmware_8000(struct iwm_softc *, enum iwm_ucode_type); -static int iwm_load_firmware(struct iwm_softc *, enum iwm_ucode_type); -static int iwm_start_fw(struct iwm_softc *, enum iwm_ucode_type); +static int iwm_pcie_load_section(struct iwm_softc *, uint8_t, + const struct iwm_fw_desc *); +static int iwm_pcie_load_firmware_chunk(struct iwm_softc *, uint32_t, + bus_addr_t, uint32_t); +static int iwm_pcie_load_cpu_sections_8000(struct iwm_softc *sc, + const struct iwm_fw_sects *, + int, int *); +static int iwm_pcie_load_cpu_sections(struct iwm_softc *, + const struct iwm_fw_sects *, + int, int *); +static int iwm_pcie_load_given_ucode_8000(struct iwm_softc *, + const struct iwm_fw_sects *); +static int iwm_pcie_load_given_ucode(struct iwm_softc *, + const struct iwm_fw_sects *); +static int iwm_start_fw(struct iwm_softc *, const struct iwm_fw_sects *); static int iwm_send_tx_ant_cfg(struct iwm_softc *, uint8_t); static int iwm_send_phy_cfg_cmd(struct iwm_softc *); static int iwm_mvm_load_ucode_wait_alive(struct iwm_softc *, @@ -485,7 +431,7 @@ iwm_firmware_store_section(struct iwm_softc *sc, enum iwm_ucode_type type, const uint8_t *data, size_t dlen) { struct iwm_fw_sects *fws; - struct iwm_fw_onesect *fwone; + struct iwm_fw_desc *fwone; if (type >= IWM_UCODE_TYPE_MAX) return EINVAL; @@ -499,11 +445,11 @@ iwm_firmware_store_section(struct iwm_softc *sc, fwone = &fws->fw_sect[fws->fw_count]; /* first 32bit are device load offset */ - memcpy(&fwone->fws_devoff, data, sizeof(uint32_t)); + memcpy(&fwone->offset, data, sizeof(uint32_t)); /* rest is data */ - fwone->fws_data = data + sizeof(uint32_t); - fwone->fws_len = dlen - sizeof(uint32_t); + fwone->data = data + sizeof(uint32_t); + fwone->len = dlen - sizeof(uint32_t); fws->fw_count++; @@ -559,6 +505,7 @@ iwm_read_firmware(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) const uint8_t *data; uint32_t usniffer_img; uint32_t paging_mem_size; + int num_of_cpus; int error = 0; size_t len; @@ -699,18 +646,24 @@ iwm_read_firmware(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) goto parse_out; } break; - case IWM_UCODE_TLV_NUM_OF_CPU: { - uint32_t num_cpu; + case IWM_UCODE_TLV_NUM_OF_CPU: if (tlv_len != sizeof(uint32_t)) { device_printf(sc->sc_dev, - "%s: IWM_UCODE_TLV_NUM_OF_CPU: tlv_len (%d) < sizeof(uint32_t)\n", + "%s: IWM_UCODE_TLV_NUM_OF_CPU: tlv_len (%d) != sizeof(uint32_t)\n", __func__, (int) tlv_len); error = EINVAL; goto parse_out; } - num_cpu = le32toh(*(const uint32_t *)tlv_data); - if (num_cpu < 1 || num_cpu > 2) { + num_of_cpus = le32toh(*(const uint32_t *)tlv_data); + if (num_of_cpus == 2) { + fw->fw_sects[IWM_UCODE_REGULAR].is_dual_cpus = + TRUE; + fw->fw_sects[IWM_UCODE_INIT].is_dual_cpus = + TRUE; + fw->fw_sects[IWM_UCODE_WOWLAN].is_dual_cpus = + TRUE; + } else if ((num_of_cpus > 2) || (num_of_cpus < 1)) { device_printf(sc->sc_dev, "%s: Driver supports only 1 or 2 CPUs\n", __func__); @@ -718,7 +671,6 @@ iwm_read_firmware(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) goto parse_out; } break; - } case IWM_UCODE_TLV_SEC_RT: if ((error = iwm_firmware_store_section(sc, IWM_UCODE_REGULAR, tlv_data, tlv_len)) != 0) { @@ -937,78 +889,13 @@ iwm_read_firmware(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) * DMA resource routines */ -static void -iwm_dma_map_addr(void *arg, bus_dma_segment_t *segs, int nsegs, int error) -{ - if (error != 0) - return; - KASSERT(nsegs == 1, ("too many DMA segments, %d should be 1", nsegs)); - *(bus_addr_t *)arg = segs[0].ds_addr; -} - -static int -iwm_dma_contig_alloc(bus_dma_tag_t tag, struct iwm_dma_info *dma, - bus_size_t size, bus_size_t alignment) -{ - int error; - - dma->tag = NULL; - dma->map = NULL; - dma->size = size; - dma->vaddr = NULL; - - error = bus_dma_tag_create(tag, alignment, - 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, size, - 1, size, 0, NULL, NULL, &dma->tag); - if (error != 0) - goto fail; - - error = bus_dmamem_alloc(dma->tag, (void **)&dma->vaddr, - BUS_DMA_NOWAIT | BUS_DMA_ZERO | BUS_DMA_COHERENT, &dma->map); - if (error != 0) - goto fail; - - error = bus_dmamap_load(dma->tag, dma->map, dma->vaddr, size, - iwm_dma_map_addr, &dma->paddr, BUS_DMA_NOWAIT); - if (error != 0) { - bus_dmamem_free(dma->tag, dma->vaddr, dma->map); - dma->vaddr = NULL; - goto fail; - } - - bus_dmamap_sync(dma->tag, dma->map, BUS_DMASYNC_PREWRITE); - - return 0; - -fail: - iwm_dma_contig_free(dma); - - return error; -} - -static void -iwm_dma_contig_free(struct iwm_dma_info *dma) -{ - if (dma->vaddr != NULL) { - bus_dmamap_sync(dma->tag, dma->map, - BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); - bus_dmamap_unload(dma->tag, dma->map); - bus_dmamem_free(dma->tag, dma->vaddr, dma->map); - dma->vaddr = NULL; - } - if (dma->tag != NULL) { - bus_dma_tag_destroy(dma->tag); - dma->tag = NULL; - } -} - /* fwmem is used to load firmware onto the card */ static int iwm_alloc_fwmem(struct iwm_softc *sc) { /* Must be aligned on a 16-byte boundary. */ return iwm_dma_contig_alloc(sc->sc_dmat, &sc->fw_dma, - sc->sc_fwdmasegsz, 16); + IWM_FH_MEM_TB_MAX_LENGTH, 16); } /* tx scheduler rings. not used? */ @@ -1622,20 +1509,33 @@ iwm_enable_txq(struct iwm_softc *sc, int sta_id, int qid, int fifo) (0 << IWM_SCD_QUEUE_STTS_REG_POS_ACTIVE) | (1 << IWM_SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN)); + iwm_nic_unlock(sc); + iwm_clear_bits_prph(sc, IWM_SCD_AGGR_SEL, (1 << qid)); + if (!iwm_nic_lock(sc)) { + device_printf(sc->sc_dev, + "%s: cannot enable txq %d\n", __func__, qid); + return EBUSY; + } iwm_write_prph(sc, IWM_SCD_QUEUE_RDPTR(qid), 0); + iwm_nic_unlock(sc); - iwm_write_mem32(sc, sc->sched_base + IWM_SCD_CONTEXT_QUEUE_OFFSET(qid), 0); + iwm_write_mem32(sc, sc->scd_base_addr + IWM_SCD_CONTEXT_QUEUE_OFFSET(qid), 0); /* Set scheduler window size and frame limit. */ iwm_write_mem32(sc, - sc->sched_base + IWM_SCD_CONTEXT_QUEUE_OFFSET(qid) + + sc->scd_base_addr + IWM_SCD_CONTEXT_QUEUE_OFFSET(qid) + sizeof(uint32_t), ((IWM_FRAME_LIMIT << IWM_SCD_QUEUE_CTX_REG2_WIN_SIZE_POS) & IWM_SCD_QUEUE_CTX_REG2_WIN_SIZE_MSK) | ((IWM_FRAME_LIMIT << IWM_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS) & IWM_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK)); + if (!iwm_nic_lock(sc)) { + device_printf(sc->sc_dev, + "%s: cannot enable txq %d\n", __func__, qid); + return EBUSY; + } iwm_write_prph(sc, IWM_SCD_QUEUE_STATUS_BITS(qid), (1 << IWM_SCD_QUEUE_STTS_REG_POS_ACTIVE) | (fifo << IWM_SCD_QUEUE_STTS_REG_POS_TXF) | @@ -1679,33 +1579,37 @@ iwm_enable_txq(struct iwm_softc *sc, int sta_id, int qid, int fifo) } static int -iwm_post_alive(struct iwm_softc *sc) +iwm_trans_pcie_fw_alive(struct iwm_softc *sc, uint32_t scd_base_addr) { - int nwords; int error, chnl; - uint32_t base; + + int clear_dwords = (IWM_SCD_TRANS_TBL_MEM_UPPER_BOUND - + IWM_SCD_CONTEXT_MEM_LOWER_BOUND) / sizeof(uint32_t); if (!iwm_nic_lock(sc)) return EBUSY; - base = iwm_read_prph(sc, IWM_SCD_SRAM_BASE_ADDR); - if (sc->sched_base != base) { - device_printf(sc->sc_dev, - "%s: sched addr mismatch: alive: 0x%x prph: 0x%x\n", - __func__, sc->sched_base, base); - } - iwm_ict_reset(sc); - /* Clear TX scheduler state in SRAM. */ - nwords = (IWM_SCD_TRANS_TBL_MEM_UPPER_BOUND - - IWM_SCD_CONTEXT_MEM_LOWER_BOUND) - / sizeof(uint32_t); + iwm_nic_unlock(sc); + + sc->scd_base_addr = iwm_read_prph(sc, IWM_SCD_SRAM_BASE_ADDR); + if (scd_base_addr != 0 && + scd_base_addr != sc->scd_base_addr) { + device_printf(sc->sc_dev, + "%s: sched addr mismatch: alive: 0x%x prph: 0x%x\n", + __func__, sc->scd_base_addr, scd_base_addr); + } + + /* reset context data, TX status and translation data */ error = iwm_write_mem(sc, - sc->sched_base + IWM_SCD_CONTEXT_MEM_LOWER_BOUND, - NULL, nwords); + sc->scd_base_addr + IWM_SCD_CONTEXT_MEM_LOWER_BOUND, + NULL, clear_dwords); if (error) - goto out; + return EBUSY; + + if (!iwm_nic_lock(sc)) + return EBUSY; /* Set physical address of TX scheduler rings (1KB aligned). */ iwm_write_prph(sc, IWM_SCD_DRAM_BASE_ADDR, sc->sched_dma.paddr >> 10); @@ -1734,14 +1638,14 @@ iwm_post_alive(struct iwm_softc *sc) IWM_SETBITS(sc, IWM_FH_TX_CHICKEN_BITS_REG, IWM_FH_TX_CHICKEN_BITS_SCD_AUTO_RETRY_EN); + iwm_nic_unlock(sc); + /* Enable L1-Active */ if (sc->cfg->device_family != IWM_DEVICE_FAMILY_8000) { iwm_clear_bits_prph(sc, IWM_APMG_PCIDEV_STT_REG, IWM_APMG_PCIDEV_STT_VAL_L1_ACT_DIS); } - out: - iwm_nic_unlock(sc); return error; } @@ -2414,53 +2318,68 @@ iwm_nvm_init(struct iwm_softc *sc) return 0; } -/* - * Firmware loading gunk. This is kind of a weird hybrid between the - * iwn driver and the Linux iwlwifi driver. - */ - static int -iwm_firmware_load_sect(struct iwm_softc *sc, uint32_t dst_addr, - const uint8_t *section, uint32_t byte_cnt) -{ - int error = EINVAL; - uint32_t chunk_sz, offset; - - chunk_sz = MIN(IWM_FH_MEM_TB_MAX_LENGTH, byte_cnt); - - for (offset = 0; offset < byte_cnt; offset += chunk_sz) { - uint32_t addr, len; - const uint8_t *data; - - addr = dst_addr + offset; - len = MIN(chunk_sz, byte_cnt - offset); - data = section + offset; - - error = iwm_firmware_load_chunk(sc, addr, data, len); - if (error) - break; - } - - return error; -} - -static int -iwm_firmware_load_chunk(struct iwm_softc *sc, uint32_t dst_addr, - const uint8_t *chunk, uint32_t byte_cnt) +iwm_pcie_load_section(struct iwm_softc *sc, uint8_t section_num, + const struct iwm_fw_desc *section) { struct iwm_dma_info *dma = &sc->fw_dma; - int error; + uint8_t *v_addr; + bus_addr_t p_addr; + uint32_t offset, chunk_sz = MIN(IWM_FH_MEM_TB_MAX_LENGTH, section->len); + int ret = 0; - /* Copy firmware chunk into pre-allocated DMA-safe memory. */ - memcpy(dma->vaddr, chunk, byte_cnt); - bus_dmamap_sync(dma->tag, dma->map, BUS_DMASYNC_PREWRITE); + IWM_DPRINTF(sc, IWM_DEBUG_RESET, + "%s: [%d] uCode section being loaded...\n", + __func__, section_num); - if (dst_addr >= IWM_FW_MEM_EXTENDED_START && - dst_addr <= IWM_FW_MEM_EXTENDED_END) { - iwm_set_bits_prph(sc, IWM_LMPM_CHICK, - IWM_LMPM_CHICK_EXTENDED_ADDR_SPACE); + v_addr = dma->vaddr; + p_addr = dma->paddr; + + for (offset = 0; offset < section->len; offset += chunk_sz) { + uint32_t copy_size, dst_addr; + int extended_addr = FALSE; + + copy_size = MIN(chunk_sz, section->len - offset); + dst_addr = section->offset + offset; + + if (dst_addr >= IWM_FW_MEM_EXTENDED_START && + dst_addr <= IWM_FW_MEM_EXTENDED_END) + extended_addr = TRUE; + + if (extended_addr) + iwm_set_bits_prph(sc, IWM_LMPM_CHICK, + IWM_LMPM_CHICK_EXTENDED_ADDR_SPACE); + + memcpy(v_addr, (const uint8_t *)section->data + offset, + copy_size); + bus_dmamap_sync(dma->tag, dma->map, BUS_DMASYNC_PREWRITE); + ret = iwm_pcie_load_firmware_chunk(sc, dst_addr, p_addr, + copy_size); + + if (extended_addr) + iwm_clear_bits_prph(sc, IWM_LMPM_CHICK, + IWM_LMPM_CHICK_EXTENDED_ADDR_SPACE); + + if (ret) { + device_printf(sc->sc_dev, + "%s: Could not load the [%d] uCode section\n", + __func__, section_num); + break; + } } + return ret; +} + +/* + * ucode + */ +static int +iwm_pcie_load_firmware_chunk(struct iwm_softc *sc, uint32_t dst_addr, + bus_addr_t phy_addr, uint32_t byte_cnt) +{ + int ret; + sc->sc_fw_chunk_done = 0; if (!iwm_nic_lock(sc)) @@ -2468,17 +2387,22 @@ iwm_firmware_load_chunk(struct iwm_softc *sc, uint32_t dst_addr, IWM_WRITE(sc, IWM_FH_TCSR_CHNL_TX_CONFIG_REG(IWM_FH_SRVC_CHNL), IWM_FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE); + IWM_WRITE(sc, IWM_FH_SRVC_CHNL_SRAM_ADDR_REG(IWM_FH_SRVC_CHNL), dst_addr); + IWM_WRITE(sc, IWM_FH_TFDIB_CTRL0_REG(IWM_FH_SRVC_CHNL), - dma->paddr & IWM_FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK); + phy_addr & IWM_FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK); + IWM_WRITE(sc, IWM_FH_TFDIB_CTRL1_REG(IWM_FH_SRVC_CHNL), - (iwm_get_dma_hi_addr(dma->paddr) - << IWM_FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_cnt); + (iwm_get_dma_hi_addr(phy_addr) + << IWM_FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_cnt); + IWM_WRITE(sc, IWM_FH_TCSR_CHNL_TX_BUF_STS_REG(IWM_FH_SRVC_CHNL), 1 << IWM_FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM | 1 << IWM_FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_IDX | IWM_FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_VALID); + IWM_WRITE(sc, IWM_FH_TCSR_CHNL_TX_CONFIG_REG(IWM_FH_SRVC_CHNL), IWM_FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE | IWM_FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE | @@ -2486,37 +2410,31 @@ iwm_firmware_load_chunk(struct iwm_softc *sc, uint32_t dst_addr, iwm_nic_unlock(sc); - /* wait 1s for this segment to load */ - while (!sc->sc_fw_chunk_done) - if ((error = msleep(&sc->sc_fw, &sc->sc_mtx, 0, "iwmfw", hz)) != 0) + /* wait up to 5s for this segment to load */ + ret = 0; + while (!sc->sc_fw_chunk_done) { + ret = msleep(&sc->sc_fw, &sc->sc_mtx, 0, "iwmfw", hz); + if (ret) break; + } - if (!sc->sc_fw_chunk_done) { + if (ret != 0) { device_printf(sc->sc_dev, "fw chunk addr 0x%x len %d failed to load\n", dst_addr, byte_cnt); + return ETIMEDOUT; } - if (dst_addr >= IWM_FW_MEM_EXTENDED_START && - dst_addr <= IWM_FW_MEM_EXTENDED_END && iwm_nic_lock(sc)) { - iwm_clear_bits_prph(sc, IWM_LMPM_CHICK, - IWM_LMPM_CHICK_EXTENDED_ADDR_SPACE); - iwm_nic_unlock(sc); - } - - return error; + return 0; } -int -iwm_load_cpu_sections_8000(struct iwm_softc *sc, struct iwm_fw_sects *fws, - int cpu, int *first_ucode_section) +static int +iwm_pcie_load_cpu_sections_8000(struct iwm_softc *sc, + const struct iwm_fw_sects *image, int cpu, int *first_ucode_section) { int shift_param; - int i, error = 0, sec_num = 0x1; + int i, ret = 0, sec_num = 0x1; uint32_t val, last_read_idx = 0; - const void *data; - uint32_t dlen; - uint32_t offset; if (cpu == 1) { shift_param = 0; @@ -2528,9 +2446,6 @@ iwm_load_cpu_sections_8000(struct iwm_softc *sc, struct iwm_fw_sects *fws, for (i = *first_ucode_section; i < IWM_UCODE_SECTION_MAX; i++) { last_read_idx = i; - data = fws->fw_sect[i].fws_data; - dlen = fws->fw_sect[i].fws_len; - offset = fws->fw_sect[i].fws_devoff; /* * CPU1_CPU2_SEPARATOR_SECTION delimiter - separate between @@ -2538,27 +2453,17 @@ iwm_load_cpu_sections_8000(struct iwm_softc *sc, struct iwm_fw_sects *fws, * PAGING_SEPARATOR_SECTION delimiter - separate between * CPU2 non paged to CPU2 paging sec. */ - if (!data || offset == IWM_CPU1_CPU2_SEPARATOR_SECTION || - offset == IWM_PAGING_SEPARATOR_SECTION) - break; - - IWM_DPRINTF(sc, IWM_DEBUG_RESET, - "LOAD FIRMWARE chunk %d offset 0x%x len %d for cpu %d\n", - i, offset, dlen, cpu); - - if (dlen > sc->sc_fwdmasegsz) { + if (!image->fw_sect[i].data || + image->fw_sect[i].offset == IWM_CPU1_CPU2_SEPARATOR_SECTION || + image->fw_sect[i].offset == IWM_PAGING_SEPARATOR_SECTION) { IWM_DPRINTF(sc, IWM_DEBUG_RESET, - "chunk %d too large (%d bytes)\n", i, dlen); - error = EFBIG; - } else { - error = iwm_firmware_load_sect(sc, offset, data, dlen); - } - if (error) { - device_printf(sc->sc_dev, - "could not load firmware chunk %d (error %d)\n", - i, error); - return error; + "Break since Data not valid or Empty section, sec = %d\n", + i); + break; } + ret = iwm_pcie_load_section(sc, i, &image->fw_sect[i]); + if (ret) + return ret; /* Notify the ucode of the loaded section number and status */ if (iwm_nic_lock(sc)) { @@ -2567,16 +2472,13 @@ iwm_load_cpu_sections_8000(struct iwm_softc *sc, struct iwm_fw_sects *fws, IWM_WRITE(sc, IWM_FH_UCODE_LOAD_STATUS, val); sec_num = (sec_num << 1) | 0x1; iwm_nic_unlock(sc); - - /* - * The firmware won't load correctly without this delay. - */ - DELAY(8000); } } *first_ucode_section = last_read_idx; + iwm_enable_interrupts(sc); + if (iwm_nic_lock(sc)) { if (cpu == 1) IWM_WRITE(sc, IWM_FH_UCODE_LOAD_STATUS, 0xFFFF); @@ -2588,111 +2490,147 @@ iwm_load_cpu_sections_8000(struct iwm_softc *sc, struct iwm_fw_sects *fws, return 0; } -int -iwm_load_firmware_8000(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) +static int +iwm_pcie_load_cpu_sections(struct iwm_softc *sc, + const struct iwm_fw_sects *image, int cpu, int *first_ucode_section) { - struct iwm_fw_sects *fws; - int error = 0; + int shift_param; + int i, ret = 0; + uint32_t last_read_idx = 0; + + if (cpu == 1) { + shift_param = 0; + *first_ucode_section = 0; + } else { + shift_param = 16; + (*first_ucode_section)++; + } + + for (i = *first_ucode_section; i < IWM_UCODE_SECTION_MAX; i++) { + last_read_idx = i; + + /* + * CPU1_CPU2_SEPARATOR_SECTION delimiter - separate between + * CPU1 to CPU2. + * PAGING_SEPARATOR_SECTION delimiter - separate between + * CPU2 non paged to CPU2 paging sec. + */ + if (!image->fw_sect[i].data || + image->fw_sect[i].offset == IWM_CPU1_CPU2_SEPARATOR_SECTION || + image->fw_sect[i].offset == IWM_PAGING_SEPARATOR_SECTION) { + IWM_DPRINTF(sc, IWM_DEBUG_RESET, + "Break since Data not valid or Empty section, sec = %d\n", + i); + break; + } + + ret = iwm_pcie_load_section(sc, i, &image->fw_sect[i]); + if (ret) + return ret; + } + + if (sc->cfg->device_family == IWM_DEVICE_FAMILY_8000) + iwm_set_bits_prph(sc, + IWM_CSR_UCODE_LOAD_STATUS_ADDR, + (IWM_LMPM_CPU_UCODE_LOADING_COMPLETED | + IWM_LMPM_CPU_HDRS_LOADING_COMPLETED | + IWM_LMPM_CPU_UCODE_LOADING_STARTED) << + shift_param); + + *first_ucode_section = last_read_idx; + + return 0; + +} + +static int +iwm_pcie_load_given_ucode(struct iwm_softc *sc, + const struct iwm_fw_sects *image) +{ + int ret = 0; int first_ucode_section; - IWM_DPRINTF(sc, IWM_DEBUG_RESET, "loading ucode type %d\n", - ucode_type); + IWM_DPRINTF(sc, IWM_DEBUG_RESET, "working with %s CPU\n", + image->is_dual_cpus ? "Dual" : "Single"); - fws = &sc->sc_fw.fw_sects[ucode_type]; + /* load to FW the binary non secured sections of CPU1 */ + ret = iwm_pcie_load_cpu_sections(sc, image, 1, &first_ucode_section); + if (ret) + return ret; + + if (image->is_dual_cpus) { + /* set CPU2 header address */ + iwm_write_prph(sc, + IWM_LMPM_SECURE_UCODE_LOAD_CPU2_HDR_ADDR, + IWM_LMPM_SECURE_CPU2_HDR_MEM_SPACE); + + /* load to FW the binary sections of CPU2 */ + ret = iwm_pcie_load_cpu_sections(sc, image, 2, + &first_ucode_section); + if (ret) + return ret; + } + + iwm_enable_interrupts(sc); + + /* release CPU reset */ + IWM_WRITE(sc, IWM_CSR_RESET, 0); + + return 0; +} + +int +iwm_pcie_load_given_ucode_8000(struct iwm_softc *sc, + const struct iwm_fw_sects *image) +{ + int ret = 0; + int first_ucode_section; + + IWM_DPRINTF(sc, IWM_DEBUG_RESET, "working with %s CPU\n", + image->is_dual_cpus ? "Dual" : "Single"); /* configure the ucode to be ready to get the secured image */ /* release CPU reset */ iwm_write_prph(sc, IWM_RELEASE_CPU_RESET, IWM_RELEASE_CPU_RESET_BIT); /* load to FW the binary Secured sections of CPU1 */ - error = iwm_load_cpu_sections_8000(sc, fws, 1, &first_ucode_section); - if (error) - return error; + ret = iwm_pcie_load_cpu_sections_8000(sc, image, 1, + &first_ucode_section); + if (ret) + return ret; /* load to FW the binary sections of CPU2 */ - return iwm_load_cpu_sections_8000(sc, fws, 2, &first_ucode_section); + return iwm_pcie_load_cpu_sections_8000(sc, image, 2, + &first_ucode_section); } -static int -iwm_load_firmware_7000(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) +/* XXX Get rid of this definition */ +static inline void +iwm_enable_fw_load_int(struct iwm_softc *sc) { - struct iwm_fw_sects *fws; - int error, i; - const void *data; - uint32_t dlen; - uint32_t offset; - - sc->sc_uc.uc_intr = 0; - - fws = &sc->sc_fw.fw_sects[ucode_type]; - for (i = 0; i < fws->fw_count; i++) { - data = fws->fw_sect[i].fws_data; - dlen = fws->fw_sect[i].fws_len; - offset = fws->fw_sect[i].fws_devoff; - IWM_DPRINTF(sc, IWM_DEBUG_FIRMWARE_TLV, - "LOAD FIRMWARE type %d offset %u len %d\n", - ucode_type, offset, dlen); - if (dlen > sc->sc_fwdmasegsz) { - IWM_DPRINTF(sc, IWM_DEBUG_FIRMWARE_TLV, - "chunk %d too large (%d bytes)\n", i, dlen); - error = EFBIG; - } else { - error = iwm_firmware_load_sect(sc, offset, data, dlen); - } - if (error) { - device_printf(sc->sc_dev, - "could not load firmware chunk %u of %u " - "(error=%d)\n", i, fws->fw_count, error); - return error; - } - } - - IWM_WRITE(sc, IWM_CSR_RESET, 0); - - return 0; + IWM_DPRINTF(sc, IWM_DEBUG_INTR, "Enabling FW load interrupt\n"); + sc->sc_intmask = IWM_CSR_INT_BIT_FH_TX; + IWM_WRITE(sc, IWM_CSR_INT_MASK, sc->sc_intmask); } +/* XXX Add proper rfkill support code */ static int -iwm_load_firmware(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) +iwm_start_fw(struct iwm_softc *sc, + const struct iwm_fw_sects *fw) { - int error, w; + int ret; - if (sc->cfg->device_family == IWM_DEVICE_FAMILY_8000) - error = iwm_load_firmware_8000(sc, ucode_type); - else - error = iwm_load_firmware_7000(sc, ucode_type); - if (error) - return error; - - /* wait for the firmware to load */ - for (w = 0; !sc->sc_uc.uc_intr && w < 10; w++) { - error = msleep(&sc->sc_uc, &sc->sc_mtx, 0, "iwmuc", hz/10); - } - if (error || !sc->sc_uc.uc_ok) { - device_printf(sc->sc_dev, "could not load firmware\n"); - if (sc->cfg->device_family == IWM_DEVICE_FAMILY_8000) { - device_printf(sc->sc_dev, "cpu1 status: 0x%x\n", - iwm_read_prph(sc, IWM_SB_CPU_1_STATUS)); - device_printf(sc->sc_dev, "cpu2 status: 0x%x\n", - iwm_read_prph(sc, IWM_SB_CPU_2_STATUS)); - } + /* This may fail if AMT took ownership of the device */ + if (iwm_prepare_card_hw(sc)) { + device_printf(sc->sc_dev, + "%s: Exit HW not ready\n", __func__); + ret = EIO; + goto out; } - return error; -} + IWM_WRITE(sc, IWM_CSR_INT, 0xFFFFFFFF); -/* iwlwifi: pcie/trans.c */ -static int -iwm_start_fw(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) -{ - int error; - - IWM_WRITE(sc, IWM_CSR_INT, ~0); - - if ((error = iwm_nic_init(sc)) != 0) { - device_printf(sc->sc_dev, "unable to init nic\n"); - return error; - } + iwm_disable_interrupts(sc); /* make sure rfkill handshake bits are cleared */ IWM_WRITE(sc, IWM_CSR_UCODE_DRV_GP1_CLR, IWM_CSR_UCODE_SW_BIT_RFKILL); @@ -2700,8 +2638,22 @@ iwm_start_fw(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) IWM_CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED); /* clear (again), then enable host interrupts */ - IWM_WRITE(sc, IWM_CSR_INT, ~0); - iwm_enable_interrupts(sc); + IWM_WRITE(sc, IWM_CSR_INT, 0xFFFFFFFF); + + ret = iwm_nic_init(sc); + if (ret) { + device_printf(sc->sc_dev, "%s: Unable to init nic\n", __func__); + goto out; + } + + /* + * Now, we load the firmware and don't want to be interrupted, even + * by the RF-Kill interrupt (hence mask all the interrupt besides the + * FH_TX interrupt which is needed to load the firmware). If the + * RF-Kill switch is toggled, we will find out after having loaded + * the firmware and return the proper value to the caller. + */ + iwm_enable_fw_load_int(sc); /* really make sure rfkill handshake bits are cleared */ /* maybe we should write a few times more? just to make sure */ @@ -2709,7 +2661,15 @@ iwm_start_fw(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) IWM_WRITE(sc, IWM_CSR_UCODE_DRV_GP1_CLR, IWM_CSR_UCODE_SW_BIT_RFKILL); /* Load the given image to the HW */ - return iwm_load_firmware(sc, ucode_type); + if (sc->cfg->device_family == IWM_DEVICE_FAMILY_8000) + ret = iwm_pcie_load_given_ucode_8000(sc, fw); + else + ret = iwm_pcie_load_given_ucode(sc, fw); + + /* XXX re-check RF-Kill state */ + +out: + return ret; } static int @@ -2728,7 +2688,7 @@ static int iwm_send_phy_cfg_cmd(struct iwm_softc *sc) { struct iwm_phy_cfg_cmd phy_cfg_cmd; - enum iwm_ucode_type ucode_type = sc->sc_uc_current; + enum iwm_ucode_type ucode_type = sc->cur_ucode; /* Set parameters */ phy_cfg_cmd.phy_cfg = htole32(iwm_mvm_get_phy_config(sc)); @@ -2743,6 +2703,83 @@ iwm_send_phy_cfg_cmd(struct iwm_softc *sc) sizeof(phy_cfg_cmd), &phy_cfg_cmd); } +static int +iwm_alive_fn(struct iwm_softc *sc, struct iwm_rx_packet *pkt, void *data) +{ + struct iwm_mvm_alive_data *alive_data = data; + struct iwm_mvm_alive_resp_ver1 *palive1; + struct iwm_mvm_alive_resp_ver2 *palive2; + struct iwm_mvm_alive_resp *palive; + + if (iwm_rx_packet_payload_len(pkt) == sizeof(*palive1)) { + palive1 = (void *)pkt->data; + + sc->support_umac_log = FALSE; + sc->error_event_table = + le32toh(palive1->error_event_table_ptr); + sc->log_event_table = + le32toh(palive1->log_event_table_ptr); + alive_data->scd_base_addr = le32toh(palive1->scd_base_ptr); + + alive_data->valid = le16toh(palive1->status) == + IWM_ALIVE_STATUS_OK; + IWM_DPRINTF(sc, IWM_DEBUG_RESET, + "Alive VER1 ucode status 0x%04x revision 0x%01X 0x%01X flags 0x%01X\n", + le16toh(palive1->status), palive1->ver_type, + palive1->ver_subtype, palive1->flags); + } else if (iwm_rx_packet_payload_len(pkt) == sizeof(*palive2)) { + palive2 = (void *)pkt->data; + sc->error_event_table = + le32toh(palive2->error_event_table_ptr); + sc->log_event_table = + le32toh(palive2->log_event_table_ptr); + alive_data->scd_base_addr = le32toh(palive2->scd_base_ptr); + sc->umac_error_event_table = + le32toh(palive2->error_info_addr); + + alive_data->valid = le16toh(palive2->status) == + IWM_ALIVE_STATUS_OK; + if (sc->umac_error_event_table) + sc->support_umac_log = TRUE; + + IWM_DPRINTF(sc, IWM_DEBUG_RESET, + "Alive VER2 ucode status 0x%04x revision 0x%01X 0x%01X flags 0x%01X\n", + le16toh(palive2->status), palive2->ver_type, + palive2->ver_subtype, palive2->flags); + + IWM_DPRINTF(sc, IWM_DEBUG_RESET, + "UMAC version: Major - 0x%x, Minor - 0x%x\n", + palive2->umac_major, palive2->umac_minor); + } else if (iwm_rx_packet_payload_len(pkt) == sizeof(*palive)) { + palive = (void *)pkt->data; + + sc->error_event_table = + le32toh(palive->error_event_table_ptr); + sc->log_event_table = + le32toh(palive->log_event_table_ptr); + alive_data->scd_base_addr = le32toh(palive->scd_base_ptr); + sc->umac_error_event_table = + le32toh(palive->error_info_addr); + + alive_data->valid = le16toh(palive->status) == + IWM_ALIVE_STATUS_OK; + if (sc->umac_error_event_table) + sc->support_umac_log = TRUE; + + IWM_DPRINTF(sc, IWM_DEBUG_RESET, + "Alive VER3 ucode status 0x%04x revision 0x%01X 0x%01X flags 0x%01X\n", + le16toh(palive->status), palive->ver_type, + palive->ver_subtype, palive->flags); + + IWM_DPRINTF(sc, IWM_DEBUG_RESET, + "UMAC version: Major - 0x%x, Minor - 0x%x\n", + le32toh(palive->umac_major), + le32toh(palive->umac_minor)); + } + + return TRUE; +} + static int iwm_wait_phy_db_entry(struct iwm_softc *sc, struct iwm_rx_packet *pkt, void *data) @@ -2769,27 +2806,76 @@ static int iwm_mvm_load_ucode_wait_alive(struct iwm_softc *sc, enum iwm_ucode_type ucode_type) { - enum iwm_ucode_type old_type = sc->sc_uc_current; + struct iwm_notification_wait alive_wait; + struct iwm_mvm_alive_data alive_data; + const struct iwm_fw_sects *fw; + enum iwm_ucode_type old_type = sc->cur_ucode; int error; + static const uint16_t alive_cmd[] = { IWM_MVM_ALIVE }; if ((error = iwm_read_firmware(sc, ucode_type)) != 0) { device_printf(sc->sc_dev, "iwm_read_firmware: failed %d\n", error); return error; } + fw = &sc->sc_fw.fw_sects[ucode_type]; + sc->cur_ucode = ucode_type; + sc->ucode_loaded = FALSE; - sc->sc_uc_current = ucode_type; - error = iwm_start_fw(sc, ucode_type); + memset(&alive_data, 0, sizeof(alive_data)); + iwm_init_notification_wait(sc->sc_notif_wait, &alive_wait, + alive_cmd, nitems(alive_cmd), + iwm_alive_fn, &alive_data); + + error = iwm_start_fw(sc, fw); if (error) { device_printf(sc->sc_dev, "iwm_start_fw: failed %d\n", error); - sc->sc_uc_current = old_type; + sc->cur_ucode = old_type; + iwm_remove_notification(sc->sc_notif_wait, &alive_wait); return error; } - error = iwm_post_alive(sc); + /* + * Some things may run in the background now, but we + * just wait for the ALIVE notification here. + */ + IWM_UNLOCK(sc); + error = iwm_wait_notification(sc->sc_notif_wait, &alive_wait, + IWM_MVM_UCODE_ALIVE_TIMEOUT); + IWM_LOCK(sc); if (error) { - device_printf(sc->sc_dev, "iwm_fw_alive: failed %d\n", error); + if (sc->cfg->device_family == IWM_DEVICE_FAMILY_8000) { + device_printf(sc->sc_dev, + "SecBoot CPU1 Status: 0x%x, CPU2 Status: 0x%x\n", + iwm_read_prph(sc, IWM_SB_CPU_1_STATUS), + iwm_read_prph(sc, IWM_SB_CPU_2_STATUS)); + } + sc->cur_ucode = old_type; + return error; } + + if (!alive_data.valid) { + device_printf(sc->sc_dev, "%s: Loaded ucode is not valid\n", + __func__); + sc->cur_ucode = old_type; + return EIO; + } + + iwm_trans_pcie_fw_alive(sc, alive_data.scd_base_addr); + + /* + * configure and operate fw paging mechanism. + * driver configures the paging flow only once, CPU2 paging image + * included in the IWM_UCODE_INIT image. + */ + if (fw->paging_mem_size) { + /* XXX implement FW paging */ + device_printf(sc->sc_dev, + "%s: XXX FW paging not implemented yet\n", __func__); + } + + if (!error) + sc->ucode_loaded = TRUE; return error; } @@ -3295,11 +3381,6 @@ iwm_mvm_rx_tx_cmd(struct iwm_softc *sc, if (--ring->queued < IWM_TX_RING_LOMARK) { sc->qfullmsk &= ~(1 << ring->qid); if (sc->qfullmsk == 0) { - /* - * Well, we're in interrupt context, but then again - * I guess net80211 does all sorts of stunts in - * interrupt context, so maybe this is no biggie. - */ iwm_start(sc); } } @@ -5139,7 +5220,7 @@ iwm_nic_umac_error(struct iwm_softc *sc) struct iwm_umac_error_event_table table; uint32_t base; - base = sc->sc_uc.uc_umac_error_event_table; + base = sc->umac_error_event_table; if (base < 0x800000) { device_printf(sc->sc_dev, "Invalid error log pointer 0x%08x\n", @@ -5194,7 +5275,7 @@ iwm_nic_error(struct iwm_softc *sc) uint32_t base; device_printf(sc->sc_dev, "dumping device error log\n"); - base = sc->sc_uc.uc_error_event_table; + base = sc->error_event_table; if (base < 0x800000) { device_printf(sc->sc_dev, "Invalid error log pointer 0x%08x\n", base); @@ -5256,7 +5337,7 @@ iwm_nic_error(struct iwm_softc *sc) device_printf(sc->sc_dev, "%08X | timestamp\n", table.u_timestamp); device_printf(sc->sc_dev, "%08X | flow_handler\n", table.flow_handler); - if (sc->sc_uc.uc_umac_error_event_table) + if (sc->umac_error_event_table) iwm_nic_umac_error(sc); } #endif @@ -5366,57 +5447,8 @@ iwm_notif_intr(struct iwm_softc *sc) case IWM_MFUART_LOAD_NOTIFICATION: break; - case IWM_MVM_ALIVE: { - struct iwm_mvm_alive_resp_v1 *resp1; - struct iwm_mvm_alive_resp_v2 *resp2; - struct iwm_mvm_alive_resp_v3 *resp3; - - if (iwm_rx_packet_payload_len(pkt) == sizeof(*resp1)) { - resp1 = (void *)pkt->data; - sc->sc_uc.uc_error_event_table - = le32toh(resp1->error_event_table_ptr); - sc->sc_uc.uc_log_event_table - = le32toh(resp1->log_event_table_ptr); - sc->sched_base = le32toh(resp1->scd_base_ptr); - if (resp1->status == IWM_ALIVE_STATUS_OK) - sc->sc_uc.uc_ok = 1; - else - sc->sc_uc.uc_ok = 0; - } - - if (iwm_rx_packet_payload_len(pkt) == sizeof(*resp2)) { - resp2 = (void *)pkt->data; - sc->sc_uc.uc_error_event_table - = le32toh(resp2->error_event_table_ptr); - sc->sc_uc.uc_log_event_table - = le32toh(resp2->log_event_table_ptr); - sc->sched_base = le32toh(resp2->scd_base_ptr); - sc->sc_uc.uc_umac_error_event_table - = le32toh(resp2->error_info_addr); - if (resp2->status == IWM_ALIVE_STATUS_OK) - sc->sc_uc.uc_ok = 1; - else - sc->sc_uc.uc_ok = 0; - } - - if (iwm_rx_packet_payload_len(pkt) == sizeof(*resp3)) { - resp3 = (void *)pkt->data; - sc->sc_uc.uc_error_event_table - = le32toh(resp3->error_event_table_ptr); - sc->sc_uc.uc_log_event_table - = le32toh(resp3->log_event_table_ptr); - sc->sched_base = le32toh(resp3->scd_base_ptr); - sc->sc_uc.uc_umac_error_event_table - = le32toh(resp3->error_info_addr); - if (resp3->status == IWM_ALIVE_STATUS_OK) - sc->sc_uc.uc_ok = 1; - else - sc->sc_uc.uc_ok = 0; - } - - sc->sc_uc.uc_intr = 1; - wakeup(&sc->sc_uc); - break; } + case IWM_MVM_ALIVE: + break; case IWM_CALIB_RES_NOTIF_PHY_DB: break; @@ -5668,8 +5700,8 @@ iwm_intr(void *arg) IWM_WRITE(sc, IWM_CSR_INT, r1 | ~sc->sc_intmask); - /* ignored */ - handled |= (r1 & (IWM_CSR_INT_BIT_ALIVE /*| IWM_CSR_INT_BIT_SCD*/)); + /* Safely ignore these bits for debug checks below */ + r1 &= ~(IWM_CSR_INT_BIT_ALIVE | IWM_CSR_INT_BIT_SCD); if (r1 & IWM_CSR_INT_BIT_SW_ERR) { int i; @@ -5788,19 +5820,19 @@ iwm_intr(void *arg) #define PCI_PRODUCT_INTEL_WL_8260_2 0x24f4 static const struct iwm_devices { - uint16_t device; - const char *name; + uint16_t device; + const struct iwm_cfg *cfg; } iwm_devices[] = { - { PCI_PRODUCT_INTEL_WL_3160_1, "Intel Dual Band Wireless AC 3160" }, - { PCI_PRODUCT_INTEL_WL_3160_2, "Intel Dual Band Wireless AC 3160" }, - { PCI_PRODUCT_INTEL_WL_3165_1, "Intel Dual Band Wireless AC 3165" }, - { PCI_PRODUCT_INTEL_WL_3165_2, "Intel Dual Band Wireless AC 3165" }, - { PCI_PRODUCT_INTEL_WL_7260_1, "Intel Dual Band Wireless AC 7260" }, - { PCI_PRODUCT_INTEL_WL_7260_2, "Intel Dual Band Wireless AC 7260" }, - { PCI_PRODUCT_INTEL_WL_7265_1, "Intel Dual Band Wireless AC 7265" }, - { PCI_PRODUCT_INTEL_WL_7265_2, "Intel Dual Band Wireless AC 7265" }, - { PCI_PRODUCT_INTEL_WL_8260_1, "Intel Dual Band Wireless AC 8260" }, - { PCI_PRODUCT_INTEL_WL_8260_2, "Intel Dual Band Wireless AC 8260" }, + { PCI_PRODUCT_INTEL_WL_3160_1, &iwm3160_cfg }, + { PCI_PRODUCT_INTEL_WL_3160_2, &iwm3160_cfg }, + { PCI_PRODUCT_INTEL_WL_3165_1, &iwm3165_cfg }, + { PCI_PRODUCT_INTEL_WL_3165_2, &iwm3165_cfg }, + { PCI_PRODUCT_INTEL_WL_7260_1, &iwm7260_cfg }, + { PCI_PRODUCT_INTEL_WL_7260_2, &iwm7260_cfg }, + { PCI_PRODUCT_INTEL_WL_7265_1, &iwm7265_cfg }, + { PCI_PRODUCT_INTEL_WL_7265_2, &iwm7265_cfg }, + { PCI_PRODUCT_INTEL_WL_8260_1, &iwm8260_cfg }, + { PCI_PRODUCT_INTEL_WL_8260_2, &iwm8260_cfg }, }; static int @@ -5811,7 +5843,7 @@ iwm_probe(device_t dev) for (i = 0; i < nitems(iwm_devices); i++) { if (pci_get_vendor(dev) == PCI_VENDOR_INTEL && pci_get_device(dev) == iwm_devices[i].device) { - device_set_desc(dev, iwm_devices[i].name); + device_set_desc(dev, iwm_devices[i].cfg->name); return (BUS_PROBE_DEFAULT); } } @@ -5823,41 +5855,25 @@ static int iwm_dev_check(device_t dev) { struct iwm_softc *sc; + uint16_t devid; + int i; sc = device_get_softc(dev); - switch (pci_get_device(dev)) { - case PCI_PRODUCT_INTEL_WL_3160_1: - case PCI_PRODUCT_INTEL_WL_3160_2: - sc->cfg = &iwm3160_cfg; - sc->sc_fwdmasegsz = IWM_FWDMASEGSZ; - return (0); - case PCI_PRODUCT_INTEL_WL_3165_1: - case PCI_PRODUCT_INTEL_WL_3165_2: - sc->cfg = &iwm3165_cfg; - sc->sc_fwdmasegsz = IWM_FWDMASEGSZ; - return (0); - case PCI_PRODUCT_INTEL_WL_7260_1: - case PCI_PRODUCT_INTEL_WL_7260_2: - sc->cfg = &iwm7260_cfg; - sc->sc_fwdmasegsz = IWM_FWDMASEGSZ; - return (0); - case PCI_PRODUCT_INTEL_WL_7265_1: - case PCI_PRODUCT_INTEL_WL_7265_2: - sc->cfg = &iwm7265_cfg; - sc->sc_fwdmasegsz = IWM_FWDMASEGSZ; - return (0); - case PCI_PRODUCT_INTEL_WL_8260_1: - case PCI_PRODUCT_INTEL_WL_8260_2: - sc->cfg = &iwm8260_cfg; - sc->sc_fwdmasegsz = IWM_FWDMASEGSZ_8000; - return (0); - default: - device_printf(dev, "unknown adapter type\n"); - return ENXIO; + devid = pci_get_device(dev); + for (i = 0; i < nitems(iwm_devices); i++) { + if (iwm_devices[i].device == devid) { + sc->cfg = iwm_devices[i].cfg; + return (0); + } } + device_printf(dev, "unknown adapter type\n"); + return ENXIO; } +/* PCI registers */ +#define PCI_CFG_RETRY_TIMEOUT 0x041 + static int iwm_pci_attach(device_t dev) { @@ -5867,9 +5883,9 @@ iwm_pci_attach(device_t dev) sc = device_get_softc(dev); - /* Clear device-specific "PCI retry timeout" register (41h). */ - reg = pci_read_config(dev, 0x40, sizeof(reg)); - pci_write_config(dev, 0x40, reg & ~0xff00, sizeof(reg)); + /* We disable the RETRY_TIMEOUT register (0x41) to keep + * PCI Tx retries from interfering with C3 CPU state */ + pci_write_config(dev, PCI_CFG_RETRY_TIMEOUT, 0x00, 1); /* Enable bus-mastering and hardware bug workaround. */ pci_enable_busmaster(dev); @@ -6377,11 +6393,12 @@ iwm_resume(device_t dev) { struct iwm_softc *sc = device_get_softc(dev); int do_reinit = 0; - uint16_t reg; - /* Clear device-specific "PCI retry timeout" register (41h). */ - reg = pci_read_config(dev, 0x40, sizeof(reg)); - pci_write_config(dev, 0x40, reg & ~0xff00, sizeof(reg)); + /* + * We disable the RETRY_TIMEOUT register (0x41) to keep + * PCI Tx retries from interfering with C3 CPU state. + */ + pci_write_config(dev, PCI_CFG_RETRY_TIMEOUT, 0x00, 1); iwm_init_task(device_get_softc(dev)); IWM_LOCK(sc); diff --git a/sys/dev/iwm/if_iwm_7000.c b/sys/dev/iwm/if_iwm_7000.c new file mode 100644 index 000000000000..3bcb1724e72b --- /dev/null +++ b/sys/dev/iwm/if_iwm_7000.c @@ -0,0 +1,126 @@ +/*- + * Based on BSD-licensed source modules in the Linux iwlwifi driver, + * which were used as the reference documentation for this implementation. + * + ****************************************************************************** + * + * This file is provided under a dual BSD/GPLv2 license. When using or + * redistributing this file, you may do so under either license. + * + * GPL LICENSE SUMMARY + * + * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. + * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH + * Copyright(c) 2015 Intel Deutschland GmbH + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, + * USA + * + * The full GNU General Public License is included in this distribution + * in the file called COPYING. + * + * Contact Information: + * Intel Linux Wireless + * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + * + * BSD LICENSE + * + * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. + * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH + * Copyright(c) 2015 Intel Deutschland GmbH + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#include "if_iwm_config.h" + +#define IWM7260_FW "iwm7260fw" +#define IWM3160_FW "iwm3160fw" +#define IWM7265_FW "iwm7265fw" +#define IWM7265D_FW "iwm7265Dfw" + +#define IWM_NVM_HW_SECTION_NUM_FAMILY_7000 0 + +#define IWM_DEVICE_7000_COMMON \ + .device_family = IWM_DEVICE_FAMILY_7000, \ + .eeprom_size = IWM_OTP_LOW_IMAGE_SIZE_FAMILY_7000, \ + .nvm_hw_section_num = IWM_NVM_HW_SECTION_NUM_FAMILY_7000, \ + .apmg_wake_up_wa = 1 + +const struct iwm_cfg iwm7260_cfg = { + .name = "Intel(R) Dual Band Wireless AC 7260", + .fw_name = IWM7260_FW, + IWM_DEVICE_7000_COMMON, + .host_interrupt_operation_mode = 1, +}; + +const struct iwm_cfg iwm3160_cfg = { + .name = "Intel(R) Dual Band Wireless AC 3160", + .fw_name = IWM3160_FW, + IWM_DEVICE_7000_COMMON, + .host_interrupt_operation_mode = 1, +}; + +const struct iwm_cfg iwm3165_cfg = { + .name = "Intel(R) Dual Band Wireless AC 3165", + .fw_name = IWM7265D_FW, + IWM_DEVICE_7000_COMMON, + .host_interrupt_operation_mode = 0, +}; + +const struct iwm_cfg iwm7265_cfg = { + .name = "Intel(R) Dual Band Wireless AC 7265", + .fw_name = IWM7265_FW, + IWM_DEVICE_7000_COMMON, + .host_interrupt_operation_mode = 0, +}; + +const struct iwm_cfg iwm7265d_cfg = { + .name = "Intel(R) Dual Band Wireless AC 7265", + .fw_name = IWM7265D_FW, + IWM_DEVICE_7000_COMMON, + .host_interrupt_operation_mode = 0, +}; + diff --git a/sys/dev/iwm/if_iwm_8000.c b/sys/dev/iwm/if_iwm_8000.c new file mode 100644 index 000000000000..e567e73939a7 --- /dev/null +++ b/sys/dev/iwm/if_iwm_8000.c @@ -0,0 +1,92 @@ +/*- + * Based on BSD-licensed source modules in the Linux iwlwifi driver, + * which were used as the reference documentation for this implementation. + * + ****************************************************************************** + * + * This file is provided under a dual BSD/GPLv2 license. When using or + * redistributing this file, you may do so under either license. + * + * GPL LICENSE SUMMARY + * + * Copyright(c) 2014 Intel Corporation. All rights reserved. + * Copyright(c) 2014 - 2015 Intel Mobile Communications GmbH + * Copyright(c) 2016 Intel Deutschland GmbH + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, + * USA + * + * The full GNU General Public License is included in this distribution + * in the file called COPYING. + * + * Contact Information: + * Intel Linux Wireless + * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + * + * BSD LICENSE + * + * Copyright(c) 2014 Intel Corporation. All rights reserved. + * Copyright(c) 2014 - 2015 Intel Mobile Communications GmbH + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#include "if_iwm_config.h" + +#define IWM8000_FW "iwm8000Cfw" + +#define IWM_NVM_HW_SECTION_NUM_FAMILY_8000 10 + +#define IWM_DEVICE_8000_COMMON \ + .device_family = IWM_DEVICE_FAMILY_8000, \ + .eeprom_size = IWM_OTP_LOW_IMAGE_SIZE_FAMILY_8000, \ + .nvm_hw_section_num = IWM_NVM_HW_SECTION_NUM_FAMILY_8000 + +const struct iwm_cfg iwm8260_cfg = { + .name = "Intel(R) Dual Band Wireless AC 8260", + .fw_name = IWM8000_FW, + IWM_DEVICE_8000_COMMON, + .host_interrupt_operation_mode = 0, +}; diff --git a/sys/dev/iwm/if_iwm_config.h b/sys/dev/iwm/if_iwm_config.h new file mode 100644 index 000000000000..74f34ba62f02 --- /dev/null +++ b/sys/dev/iwm/if_iwm_config.h @@ -0,0 +1,135 @@ +/*- + * Based on BSD-licensed source modules in the Linux iwlwifi driver, + * which were used as the reference documentation for this implementation. + * + ****************************************************************************** + * + * This file is provided under a dual BSD/GPLv2 license. When using or + * redistributing this file, you may do so under either license. + * + * GPL LICENSE SUMMARY + * + * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. + * Copyright (C) 2016 Intel Deutschland GmbH + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, + * USA + * + * The full GNU General Public License is included in this distribution + * in the file called COPYING. + * + * Contact Information: + * Intel Linux Wireless + * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + * + * BSD LICENSE + * + * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. + * Copyright (C) 2016 Intel Deutschland GmbH + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +/* + * $FreeBSD$ + */ + +#ifndef __IWM_CONFIG_H__ +#define __IWM_CONFIG_H__ + +enum iwm_device_family { + IWM_DEVICE_FAMILY_UNDEFINED, + IWM_DEVICE_FAMILY_7000, + IWM_DEVICE_FAMILY_8000, +}; + +/* Antenna presence definitions */ +#define IWM_ANT_NONE 0x0 +#define IWM_ANT_A (1 << 0) +#define IWM_ANT_B (1 << 1) +#define IWM_ANT_C (1 << 2) +#define IWM_ANT_AB (IWM_ANT_A | IWM_ANT_B) +#define IWM_ANT_AC (IWM_ANT_A | IWM_ANT_C) +#define IWM_ANT_BC (IWM_ANT_B | IWM_ANT_C) +#define IWM_ANT_ABC (IWM_ANT_A | IWM_ANT_B | IWM_ANT_C) + +static inline uint8_t num_of_ant(uint8_t mask) +{ + return !!((mask) & IWM_ANT_A) + + !!((mask) & IWM_ANT_B) + + !!((mask) & IWM_ANT_C); +} + +/* lower blocks contain EEPROM image and calibration data */ +#define IWM_OTP_LOW_IMAGE_SIZE_FAMILY_7000 (16 * 512 * sizeof(uint16_t)) /* 16 KB */ +#define IWM_OTP_LOW_IMAGE_SIZE_FAMILY_8000 (32 * 512 * sizeof(uint16_t)) /* 32 KB */ +#define IWM_OTP_LOW_IMAGE_SIZE_FAMILY_9000 IWM_OTP_LOW_IMAGE_SIZE_FAMILY_8000 + +/** + * struct iwm_cfg + * @name: Official name of the device + * @fw_name: Firmware filename. + * @host_interrupt_operation_mode: device needs host interrupt operation + * mode set + * @nvm_hw_section_num: the ID of the HW NVM section + * @apmg_wake_up_wa: should the MAC access REQ be asserted when a command + * is in flight. This is due to a HW bug in 7260, 3160 and 7265. + */ +struct iwm_cfg { + const char *name; + const char *fw_name; + uint16_t eeprom_size; + enum iwm_device_family device_family; + int host_interrupt_operation_mode; + uint8_t nvm_hw_section_num; + int apmg_wake_up_wa; +}; + +/* + * This list declares the config structures for all devices. + */ +extern const struct iwm_cfg iwm7260_cfg; +extern const struct iwm_cfg iwm3160_cfg; +extern const struct iwm_cfg iwm3165_cfg; +extern const struct iwm_cfg iwm7265_cfg; +extern const struct iwm_cfg iwm7265d_cfg; +extern const struct iwm_cfg iwm8260_cfg; + +#endif /* __IWM_CONFIG_H__ */ diff --git a/sys/dev/iwm/if_iwm_pcie_trans.c b/sys/dev/iwm/if_iwm_pcie_trans.c index 62bf1edabf59..c9dae6680e56 100644 --- a/sys/dev/iwm/if_iwm_pcie_trans.c +++ b/sys/dev/iwm/if_iwm_pcie_trans.c @@ -152,6 +152,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include diff --git a/sys/dev/iwm/if_iwm_util.c b/sys/dev/iwm/if_iwm_util.c index c3e1d0618f4b..206021a77fc2 100644 --- a/sys/dev/iwm/if_iwm_util.c +++ b/sys/dev/iwm/if_iwm_util.c @@ -421,3 +421,68 @@ iwm_free_resp(struct iwm_softc *sc, struct iwm_host_cmd *hcmd) sc->sc_wantresp = -1; wakeup(&sc->sc_wantresp); } + +static void +iwm_dma_map_addr(void *arg, bus_dma_segment_t *segs, int nsegs, int error) +{ + if (error != 0) + return; + KASSERT(nsegs == 1, ("too many DMA segments, %d should be 1", nsegs)); + *(bus_addr_t *)arg = segs[0].ds_addr; +} + +int +iwm_dma_contig_alloc(bus_dma_tag_t tag, struct iwm_dma_info *dma, + bus_size_t size, bus_size_t alignment) +{ + int error; + + dma->tag = NULL; + dma->map = NULL; + dma->size = size; + dma->vaddr = NULL; + + error = bus_dma_tag_create(tag, alignment, + 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, size, + 1, size, 0, NULL, NULL, &dma->tag); + if (error != 0) + goto fail; + + error = bus_dmamem_alloc(dma->tag, (void **)&dma->vaddr, + BUS_DMA_NOWAIT | BUS_DMA_ZERO | BUS_DMA_COHERENT, &dma->map); + if (error != 0) + goto fail; + + error = bus_dmamap_load(dma->tag, dma->map, dma->vaddr, size, + iwm_dma_map_addr, &dma->paddr, BUS_DMA_NOWAIT); + if (error != 0) { + bus_dmamem_free(dma->tag, dma->vaddr, dma->map); + dma->vaddr = NULL; + goto fail; + } + + bus_dmamap_sync(dma->tag, dma->map, BUS_DMASYNC_PREWRITE); + + return 0; + +fail: + iwm_dma_contig_free(dma); + + return error; +} + +void +iwm_dma_contig_free(struct iwm_dma_info *dma) +{ + if (dma->vaddr != NULL) { + bus_dmamap_sync(dma->tag, dma->map, + BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); + bus_dmamap_unload(dma->tag, dma->map); + bus_dmamem_free(dma->tag, dma->vaddr, dma->map); + dma->vaddr = NULL; + } + if (dma->tag != NULL) { + bus_dma_tag_destroy(dma->tag); + dma->tag = NULL; + } +} diff --git a/sys/dev/iwm/if_iwm_util.h b/sys/dev/iwm/if_iwm_util.h index 4c62ec9df61e..4544466ae79b 100644 --- a/sys/dev/iwm/if_iwm_util.h +++ b/sys/dev/iwm/if_iwm_util.h @@ -116,6 +116,10 @@ extern int iwm_mvm_send_cmd_pdu_status(struct iwm_softc *sc, uint8_t id, uint16_t len, const void *data, uint32_t *status); extern void iwm_free_resp(struct iwm_softc *sc, struct iwm_host_cmd *hcmd); +extern int iwm_dma_contig_alloc(bus_dma_tag_t tag, struct iwm_dma_info *dma, + bus_size_t size, bus_size_t alignment); +extern void iwm_dma_contig_free(struct iwm_dma_info *); + static inline uint8_t iwm_mvm_get_valid_tx_ant(struct iwm_softc *sc) { diff --git a/sys/dev/iwm/if_iwmreg.h b/sys/dev/iwm/if_iwmreg.h index df9b6d238293..9e6abf50936e 100644 --- a/sys/dev/iwm/if_iwmreg.h +++ b/sys/dev/iwm/if_iwmreg.h @@ -2141,7 +2141,7 @@ enum { #define IWM_ALIVE_FLG_RFKILL (1 << 0) -struct iwm_mvm_alive_resp_v1 { +struct iwm_mvm_alive_resp_ver1 { uint16_t status; uint16_t flags; uint8_t ucode_minor; @@ -2163,7 +2163,7 @@ struct iwm_mvm_alive_resp_v1 { uint32_t scd_base_ptr; /* SRAM address for SCD */ } __packed; /* IWM_ALIVE_RES_API_S_VER_1 */ -struct iwm_mvm_alive_resp_v2 { +struct iwm_mvm_alive_resp_ver2 { uint16_t status; uint16_t flags; uint8_t ucode_minor; @@ -2185,14 +2185,14 @@ struct iwm_mvm_alive_resp_v2 { uint32_t scd_base_ptr; /* SRAM address for SCD */ uint32_t st_fwrd_addr; /* pointer to Store and forward */ uint32_t st_fwrd_size; - uint8_t umac_minor; /* UMAC version: minor */ - uint8_t umac_major; /* UMAC version: major */ - uint16_t umac_id; /* UMAC version: id */ - uint32_t error_info_addr; /* SRAM address for UMAC error log */ + uint8_t umac_minor; /* UMAC version: minor */ + uint8_t umac_major; /* UMAC version: major */ + uint16_t umac_id; /* UMAC version: id */ + uint32_t error_info_addr; /* SRAM address for UMAC error log */ uint32_t dbg_print_buff_addr; } __packed; /* ALIVE_RES_API_S_VER_2 */ -struct iwm_mvm_alive_resp_v3 { +struct iwm_mvm_alive_resp { uint16_t status; uint16_t flags; uint32_t ucode_minor; @@ -2212,7 +2212,7 @@ struct iwm_mvm_alive_resp_v3 { uint32_t st_fwrd_size; uint32_t umac_minor; /* UMAC version: minor */ uint32_t umac_major; /* UMAC version: major */ - uint32_t error_info_addr; /* SRAM address for UMAC error log */ + uint32_t error_info_addr; /* SRAM address for UMAC error log */ uint32_t dbg_print_buff_addr; } __packed; /* ALIVE_RES_API_S_VER_3 */ diff --git a/sys/dev/iwm/if_iwmvar.h b/sys/dev/iwm/if_iwmvar.h index 141101ddfd40..a3fe896caaea 100644 --- a/sys/dev/iwm/if_iwmvar.h +++ b/sys/dev/iwm/if_iwmvar.h @@ -138,10 +138,6 @@ struct iwm_tx_radiotap_header { #define IWM_UCODE_SECTION_MAX 16 -#define IWM_FWDMASEGSZ (192*1024) -#define IWM_FWDMASEGSZ_8000 (320*1024) -/* sanity check value */ -#define IWM_FWMAXSIZE (2*1024*1024) /* * fw_status is used to determine if we've already parsed the firmware file @@ -170,17 +166,21 @@ enum iwm_ucode_type { IWM_UCODE_TYPE_MAX }; +/* one for each uCode image (inst/data, init/runtime/wowlan) */ +struct iwm_fw_desc { + const void *data; /* vmalloc'ed data */ + uint32_t len; /* size in bytes */ + uint32_t offset; /* offset in the device */ +}; + struct iwm_fw_info { const struct firmware *fw_fp; int fw_status; struct iwm_fw_sects { - struct iwm_fw_onesect { - const void *fws_data; - uint32_t fws_len; - uint32_t fws_devoff; - } fw_sect[IWM_UCODE_SECTION_MAX]; + struct iwm_fw_desc fw_sect[IWM_UCODE_SECTION_MAX]; int fw_count; + int is_dual_cpus; uint32_t paging_mem_size; } fw_sects[IWM_UCODE_TYPE_MAX]; @@ -295,15 +295,6 @@ struct iwm_rx_ring { int cur; }; -struct iwm_ucode_status { - uint32_t uc_error_event_table; - uint32_t uc_umac_error_event_table; - uint32_t uc_log_event_table; - - int uc_ok; - int uc_intr; -}; - #define IWM_CMD_RESP_MAX PAGE_SIZE #define IWM_MVM_TE_SESSION_PROTECTION_MAX_TIME_MS 500 @@ -377,29 +368,7 @@ struct iwm_node { #define IWM_ICT_COUNT (IWM_ICT_SIZE / sizeof (uint32_t)) #define IWM_ICT_PADDR_SHIFT 12 -enum iwm_device_family { - IWM_DEVICE_FAMILY_UNDEFINED, - IWM_DEVICE_FAMILY_7000, - IWM_DEVICE_FAMILY_8000, -}; - -/** - * struct iwm_cfg - * @fw_name: Firmware filename. - * @host_interrupt_operation_mode: device needs host interrupt operation - * mode set - * @nvm_hw_section_num: the ID of the HW NVM section - * @apmg_wake_up_wa: should the MAC access REQ be asserted when a command - * is in flight. This is due to a HW bug in 7260, 3160 and 7265. - */ -struct iwm_cfg { - const char *fw_name; - uint16_t eeprom_size; - enum iwm_device_family device_family; - int host_interrupt_operation_mode; - uint8_t nvm_hw_section_num; - int apmg_wake_up_wa; -}; +struct iwm_cfg; struct iwm_softc { device_t sc_dev; @@ -436,7 +405,7 @@ struct iwm_softc { /* TX scheduler rings. */ struct iwm_dma_info sched_dma; - uint32_t sched_base; + uint32_t scd_base_addr; /* TX/RX rings. */ struct iwm_tx_ring txq[IWM_MVM_MAX_QUEUES]; @@ -457,8 +426,8 @@ struct iwm_softc { int sc_fw_chunk_done; - struct iwm_ucode_status sc_uc; - enum iwm_ucode_type sc_uc_current; + enum iwm_ucode_type cur_ucode; + int ucode_loaded; char sc_fwver[32]; int sc_capaflags; @@ -481,7 +450,6 @@ struct iwm_softc { */ int sc_generation; - bus_size_t sc_fwdmasegsz; struct iwm_fw_info sc_fw; struct iwm_tlv_calib_ctrl sc_default_calib[IWM_UCODE_TYPE_MAX]; @@ -526,6 +494,12 @@ struct iwm_softc { struct iwm_notif_wait_data *sc_notif_wait; int cmd_hold_nic_awake; + + /* Firmware status */ + uint32_t error_event_table; + uint32_t log_event_table; + uint32_t umac_error_event_table; + int support_umac_log; }; #define IWM_LOCK_INIT(_sc) \ diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c index a40e6223d5da..56d71e8029e9 100644 --- a/sys/dev/iwn/if_iwn.c +++ b/sys/dev/iwn/if_iwn.c @@ -4402,6 +4402,13 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni) tid = 0; } ac = M_WME_GETAC(m); + + /* + * XXX TODO: Group addressed frames aren't aggregated and must + * go to the normal non-aggregation queue, and have a NONQOS TID + * assigned from net80211. + */ + if (m->m_flags & M_AMPDU_MPDU) { uint16_t seqno; struct ieee80211_tx_ampdu *tap = &ni->ni_tx_ampdu[ac]; diff --git a/sys/dev/jedec_ts/jedec_ts.c b/sys/dev/jedec_ts/jedec_ts.c index b65ef789173f..d1e9596c8769 100644 --- a/sys/dev/jedec_ts/jedec_ts.c +++ b/sys/dev/jedec_ts/jedec_ts.c @@ -104,7 +104,7 @@ ts_attach(device_t dev) uint8_t addr; addr = smbus_get_addr(dev); - if ((addr & 0x30) != 0x30) { + if ((addr & 0xf0) != 0x30) { /* Up to 8 slave devices starting at 0x30. */ return (ENXIO); } diff --git a/sys/dev/le/am7990.c b/sys/dev/le/am7990.c index a21be28a4c13..32c2e1e65e80 100644 --- a/sys/dev/le/am7990.c +++ b/sys/dev/le/am7990.c @@ -519,7 +519,7 @@ am7990_start_locked(struct lance_softc *sc) } IFQ_DRV_DEQUEUE(&ifp->if_snd, m); - if (m == 0) + if (m == NULL) break; /* diff --git a/sys/dev/le/am79900.c b/sys/dev/le/am79900.c index 74f9e5c802f3..cb6a31f30b5f 100644 --- a/sys/dev/le/am79900.c +++ b/sys/dev/le/am79900.c @@ -557,7 +557,7 @@ am79900_start_locked(struct lance_softc *sc) } IFQ_DRV_DEQUEUE(&ifp->if_snd, m); - if (m == 0) + if (m == NULL) break; /* diff --git a/sys/dev/le/lance.c b/sys/dev/le/lance.c index f8a333b9fd5c..2eee7af1b8ba 100644 --- a/sys/dev/le/lance.c +++ b/sys/dev/le/lance.c @@ -418,7 +418,7 @@ lance_get(struct lance_softc *sc, int boff, int totlen) totlen -= len; if (totlen > 0) { MGET(newm, M_NOWAIT, MT_DATA); - if (newm == 0) + if (newm == NULL) goto bad; len = MLEN; m = m->m_next = newm; diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index c9c73bfafda4..2fd60544914b 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -153,7 +153,7 @@ static g_access_t g_md_access; static void g_md_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp, struct g_consumer *cp __unused, struct g_provider *pp); -static struct cdev *status_dev = 0; +static struct cdev *status_dev = NULL; static struct sx md_sx; static struct unrhdr *md_uh; diff --git a/sys/dev/mvs/mvs.c b/sys/dev/mvs/mvs.c index 85c2247fd3a8..9b48d445acbc 100644 --- a/sys/dev/mvs/mvs.c +++ b/sys/dev/mvs/mvs.c @@ -2288,10 +2288,6 @@ mvsaction(struct cam_sim *sim, union ccb *ccb) } mvs_begin_transaction(dev, ccb); return; - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ case XPT_ABORT: /* Abort the specified CCB */ /* XXX Implement */ ccb->ccb_h.status = CAM_REQ_INVALID; diff --git a/sys/dev/mwl/if_mwl.c b/sys/dev/mwl/if_mwl.c index 1027eb0524db..79172aaf7bd7 100644 --- a/sys/dev/mwl/if_mwl.c +++ b/sys/dev/mwl/if_mwl.c @@ -2434,13 +2434,13 @@ mwl_node_getmimoinfo(const struct ieee80211_node *ni, if (mn->mn_ai.rssi_c > rssi_max) rssi_max = mn->mn_ai.rssi_c; - CVT(mi->rssi[0], mn->mn_ai.rssi_a); - CVT(mi->rssi[1], mn->mn_ai.rssi_b); - CVT(mi->rssi[2], mn->mn_ai.rssi_c); + CVT(mi->ch[0].rssi[0], mn->mn_ai.rssi_a); + CVT(mi->ch[1].rssi[0], mn->mn_ai.rssi_b); + CVT(mi->ch[2].rssi[0], mn->mn_ai.rssi_c); - mi->noise[0] = mn->mn_ai.nf_a; - mi->noise[1] = mn->mn_ai.nf_b; - mi->noise[2] = mn->mn_ai.nf_c; + mi->ch[0].noise[0] = mn->mn_ai.nf_a; + mi->ch[1].noise[0] = mn->mn_ai.nf_b; + mi->ch[2].noise[0] = mn->mn_ai.nf_c; #undef CVT } diff --git a/sys/dev/nand/nfc_rb.c b/sys/dev/nand/nfc_rb.c index 38b28445add1..1102b3abb9c4 100644 --- a/sys/dev/nand/nfc_rb.c +++ b/sys/dev/nand/nfc_rb.c @@ -36,6 +36,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include + +#include #include @@ -106,6 +109,40 @@ static const struct nand_ecc_data rb_ecc = { }; #endif +/* Slicer operates on the NAND controller, so we have to find the chip. */ +static int +rb_nand_slicer(device_t dev, const char *provider __unused, + struct flash_slice *slices, int *nslices) +{ + struct nand_chip *chip; + device_t *children; + int n; + + if (device_get_children(dev, &children, &n) != 0) { + panic("Slicer called on controller with no child!"); + } + dev = children[0]; + free(children, M_TEMP); + + if (device_get_children(dev, &children, &n) != 0) { + panic("Slicer called on controller with nandbus but no child!"); + } + dev = children[0]; + free(children, M_TEMP); + + chip = device_get_softc(dev); + *nslices = 2; + slices[0].base = 0; + slices[0].size = 4 * 1024 * 1024; + slices[0].label = "boot"; + + slices[1].base = 4 * 1024 * 1024; + slices[1].size = chip->ndisk->d_mediasize - slices[0].size; + slices[1].label = "rootfs"; + + return (0); +} + static int rb_nand_probe(device_t dev) { @@ -175,6 +212,8 @@ rb_nand_attach(device_t dev) return (ENXIO); } + flash_register_slicer(rb_nand_slicer, FLASH_SLICES_TYPE_NAND, TRUE); + nand_init(&sc->nand_dev, dev, NAND_ECC_SOFT, 0, 0, NULL, NULL); err = nandbus_create(dev); diff --git a/sys/dev/ncr/ncr.c b/sys/dev/ncr/ncr.c index b2bfcdba89e6..e125ee189a80 100644 --- a/sys/dev/ncr/ncr.c +++ b/sys/dev/ncr/ncr.c @@ -4152,10 +4152,6 @@ ncr_action (struct cam_sim *sim, union ccb *ccb) break; } case XPT_RESET_DEV: /* Bus Device Reset the specified SCSI device */ - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ case XPT_ABORT: /* Abort the specified CCB */ /* XXX Implement */ ccb->ccb_h.status = CAM_REQ_INVALID; @@ -5210,7 +5206,7 @@ static void ncr_log_hard_error(ncb_p np, u_short sist, u_char dstat) } else { script_ofs = dsp; script_size = 0; - script_base = 0; + script_base = NULL; script_name = "mem"; } @@ -5813,7 +5809,7 @@ static void ncr_int_sir (ncb_p np) u_char scntl3; u_char chg, ofs, per, fak, wide; u_char num = INB (nc_dsps); - nccb_p cp=0; + nccb_p cp = NULL; u_long dsa; u_int target = INB (nc_sdid) & 0x0f; tcb_p tp = &np->target[target]; diff --git a/sys/dev/netmap/netmap_freebsd.c b/sys/dev/netmap/netmap_freebsd.c index f51b8f74caf5..fbbd9b357342 100644 --- a/sys/dev/netmap/netmap_freebsd.c +++ b/sys/dev/netmap/netmap_freebsd.c @@ -648,7 +648,7 @@ nm_os_pt_memdev_iomap(struct ptnetmap_memdev *ptn_dev, vm_paddr_t *nm_paddr, &rid, 0, ~0, *mem_size, RF_ACTIVE); if (ptn_dev->pci_mem == NULL) { *nm_paddr = 0; - *nm_addr = 0; + *nm_addr = NULL; return ENOMEM; } diff --git a/sys/dev/netmap/netmap_mem2.c b/sys/dev/netmap/netmap_mem2.c index ab89d3af65a5..922e5f32ff09 100644 --- a/sys/dev/netmap/netmap_mem2.c +++ b/sys/dev/netmap/netmap_mem2.c @@ -2143,7 +2143,7 @@ netmap_mem_pt_guest_deref(struct netmap_mem_d *nmd) if (ptnmd->ptn_dev) { nm_os_pt_memdev_iounmap(ptnmd->ptn_dev); } - ptnmd->nm_addr = 0; + ptnmd->nm_addr = NULL; ptnmd->nm_paddr = 0; } } diff --git a/sys/dev/nvme/nvme_sim.c b/sys/dev/nvme/nvme_sim.c index 397a3bc7110a..86b7710d8b5d 100644 --- a/sys/dev/nvme/nvme_sim.c +++ b/sys/dev/nvme/nvme_sim.c @@ -143,14 +143,6 @@ nvme_sim_action(struct cam_sim *sim, union ccb *ccb) */ /*FALLTHROUGH*/ case XPT_ABORT: /* Abort the specified CCB */ - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ - /* - * Only target mode generates these, and only for SCSI. They are - * all invalid/unsupported for NVMe. - */ ccb->ccb_h.status = CAM_REQ_INVALID; break; case XPT_SET_TRAN_SETTINGS: diff --git a/sys/dev/ofw/ofw_bus_subr.c b/sys/dev/ofw/ofw_bus_subr.c index 84adfa14d178..01f5549bf331 100644 --- a/sys/dev/ofw/ofw_bus_subr.c +++ b/sys/dev/ofw/ofw_bus_subr.c @@ -963,7 +963,7 @@ ofw_bus_string_list_to_array(phandle_t node, const char *list_name, i += len; tptr += len; } - array[cnt] = 0; + array[cnt] = NULL; *out_array = array; return (cnt); diff --git a/sys/dev/patm/if_patm_tx.c b/sys/dev/patm/if_patm_tx.c index 1b9a8a50a1db..33ee8f183a2b 100644 --- a/sys/dev/patm/if_patm_tx.c +++ b/sys/dev/patm/if_patm_tx.c @@ -440,7 +440,7 @@ patm_tx_pad(struct patm_softc *sc, struct mbuf *m0) } } MGET(m, M_NOWAIT, MT_DATA); - if (m == 0) { + if (m == NULL) { m_freem(m0); if_inc_counter(sc->ifp, IFCOUNTER_OERRORS, 1); return (NULL); diff --git a/sys/dev/pccard/pccard.c b/sys/dev/pccard/pccard.c index 04dcc44bef72..4c80feae63ec 100644 --- a/sys/dev/pccard/pccard.c +++ b/sys/dev/pccard/pccard.c @@ -470,7 +470,7 @@ pccard_function_init(struct pccard_function *pf, int entry) struct pccard_ivar *devi = PCCARD_IVAR(pf->dev); struct resource_list *rl = &devi->resources; struct resource_list_entry *rle; - struct resource *r = 0; + struct resource *r = NULL; struct pccard_ce_iospace *ios; struct pccard_ce_memspace *mems; device_t bus; @@ -1115,7 +1115,7 @@ pccard_alloc_resource(device_t dev, device_t child, int type, int *rid, rman_res_t start, rman_res_t end, rman_res_t count, u_int flags) { struct pccard_ivar *dinfo; - struct resource_list_entry *rle = 0; + struct resource_list_entry *rle = NULL; int passthrough = (device_get_parent(child) != dev); int isdefault = (RMAN_IS_DEFAULT_RANGE(start, end) && count == 1); struct resource *r = NULL; @@ -1165,7 +1165,7 @@ pccard_release_resource(device_t dev, device_t child, int type, int rid, { struct pccard_ivar *dinfo; int passthrough = (device_get_parent(child) != dev); - struct resource_list_entry *rle = 0; + struct resource_list_entry *rle = NULL; if (passthrough) return BUS_RELEASE_RESOURCE(device_get_parent(dev), child, diff --git a/sys/dev/pms/RefTisa/sallsdk/spc/sainit.c b/sys/dev/pms/RefTisa/sallsdk/spc/sainit.c index 367c75ab6446..6e112adb95a7 100644 --- a/sys/dev/pms/RefTisa/sallsdk/spc/sainit.c +++ b/sys/dev/pms/RefTisa/sallsdk/spc/sainit.c @@ -48,7 +48,7 @@ bit32 gLLSoftResetCounter = 0; bit32 gPollForMissingInt; #ifdef FW_EVT_LOG_TST -void *eventLogAddress = 0; +void *eventLogAddress = NULL; #endif extern bit32 gWait_3; diff --git a/sys/dev/pms/RefTisa/tisa/sassata/common/tdioctl.c b/sys/dev/pms/RefTisa/tisa/sassata/common/tdioctl.c index f1926806bfde..f1ee7927c9de 100644 --- a/sys/dev/pms/RefTisa/tisa/sassata/common/tdioctl.c +++ b/sys/dev/pms/RefTisa/tisa/sassata/common/tdioctl.c @@ -379,7 +379,7 @@ tiCOMMgntIOCTL( bit32 Offset = 0; bit32 RequestLength = 0; /* user request on how much data to pass to application */ agsaContext_t *agContext = NULL; - bit8 *loc = 0; + bit8 *loc = NULL; TI_DBG3(("tiCOMMgntIOCTL: start\n")); diff --git a/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c b/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c index 2f5f963611fe..ac96eada9752 100644 --- a/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c +++ b/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c @@ -5032,7 +5032,7 @@ STATIC void agtiapi_PrepCCBs( struct agtiapi_softc *pCard, int i; U32 hdr_sz, ccb_sz; - ccb_t *pccb = 0; + ccb_t *pccb = NULL; int offset = 0; int nsegs = 0; int sgl_sz = 0; @@ -5159,7 +5159,7 @@ STATIC U32 agtiapi_InitCCBs(struct agtiapi_softc *pCard, int tgtCount, int tid) U32 max_ccb, size, ccb_sz, hdr_sz; int no_allocs = 0, i; - ccb_hdr_t *hdr = 0; + ccb_hdr_t *hdr = NULL; AGTIAPI_PRINTK("agtiapi_InitCCBs: start\n"); AGTIAPI_PRINTK("agtiapi_InitCCBs: tgtCount %d tid %d\n", tgtCount, tid); @@ -5395,7 +5395,7 @@ STATIC U32 agtiapi_GetDevHandle( struct agtiapi_softc *pCard, for ( devIdx = 0; devIdx < pCard->devDiscover; devIdx++ ) { - if ( agDev[devIdx] != 0 ) + if ( agDev[devIdx] != NULL ) { // AGTIAPI_PRINTK( "agtiapi_GetDevHandle: agDev %d not NULL %p\n", // devIdx, agDev[devIdx] ); @@ -5820,7 +5820,7 @@ STATIC void agtiapi_ReleaseCCBs( struct agtiapi_softc *pCard ) ccb_hdr_t *hdr; U32 hdr_sz; - ccb_t *pccb = 0; + ccb_t *pccb = NULL; AGTIAPI_PRINTK( "agtiapi_ReleaseCCBs: start\n" ); diff --git a/sys/dev/ppbus/if_plip.c b/sys/dev/ppbus/if_plip.c index 93a0da17307a..7a9d9b0e4579 100644 --- a/sys/dev/ppbus/if_plip.c +++ b/sys/dev/ppbus/if_plip.c @@ -245,7 +245,7 @@ lp_attach(device_t dev) */ lp->res_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_SHAREABLE); - if (lp->res_irq == 0) { + if (lp->res_irq == NULL) { device_printf(dev, "cannot reserve interrupt, failed.\n"); return (ENXIO); } @@ -453,7 +453,7 @@ lpioctl(struct ifnet *ifp, u_long cmd, caddr_t data) case SIOCADDMULTI: case SIOCDELMULTI: - if (ifr == 0) { + if (ifr == NULL) { return (EAFNOSUPPORT); /* XXX */ } switch (ifr->ifr_addr.sa_family) { diff --git a/sys/dev/ppbus/ppbconf.c b/sys/dev/ppbus/ppbconf.c index a2370dde098e..b5b74b46243a 100644 --- a/sys/dev/ppbus/ppbconf.c +++ b/sys/dev/ppbus/ppbconf.c @@ -206,7 +206,7 @@ search_token(char *str, int slen, char *token) static int ppb_pnp_detect(device_t bus) { - char *token, *class = 0; + char *token, *class = NULL; int i, len, error; int class_id = -1; char str[PPB_PnP_STRING_SIZE+1]; diff --git a/sys/dev/ppc/ppc.c b/sys/dev/ppc/ppc.c index 9515039036d9..cd9cf2148762 100644 --- a/sys/dev/ppc/ppc.c +++ b/sys/dev/ppc/ppc.c @@ -1324,9 +1324,9 @@ ppc_exec_microseq(device_t dev, struct ppb_microseq **p_msq) register int reg; register char mask; register int accum = 0; - register char *ptr = 0; + register char *ptr = NULL; - struct ppb_microseq *stack = 0; + struct ppb_microseq *stack = NULL; /* microsequence registers are equivalent to PC-like port registers */ @@ -1496,7 +1496,7 @@ ppc_exec_microseq(device_t dev, struct ppb_microseq **p_msq) mi = stack; /* reset the stack */ - stack = 0; + stack = NULL; /* XXX return code */ diff --git a/sys/dev/qlxgbe/ql_os.c b/sys/dev/qlxgbe/ql_os.c index b7cda78f672f..77efe6d65782 100644 --- a/sys/dev/qlxgbe/ql_os.c +++ b/sys/dev/qlxgbe/ql_os.c @@ -735,6 +735,7 @@ ql_alloc_dmabuf(qla_host_t *ha, qla_dma_t *dma_buf) void ql_free_dmabuf(qla_host_t *ha, qla_dma_t *dma_buf) { + bus_dmamap_unload(dma_buf->dma_tag, dma_buf->dma_map); bus_dmamem_free(dma_buf->dma_tag, dma_buf->dma_b, dma_buf->dma_map); bus_dma_tag_destroy(dma_buf->dma_tag); } diff --git a/sys/dev/ral/rt2661.c b/sys/dev/ral/rt2661.c index d4872cd50446..3e4d7fdde42a 100644 --- a/sys/dev/ral/rt2661.c +++ b/sys/dev/ral/rt2661.c @@ -1616,9 +1616,9 @@ rt2661_start(struct rt2661_softc *sc) } ni = (struct ieee80211_node *) m->m_pkthdr.rcvif; if (rt2661_tx_data(sc, m, ni, ac) != 0) { - ieee80211_free_node(ni); if_inc_counter(ni->ni_vap->iv_ifp, IFCOUNTER_OERRORS, 1); + ieee80211_free_node(ni); break; } sc->sc_tx_timer = 5; diff --git a/sys/dev/sbni/if_sbni_isa.c b/sys/dev/sbni/if_sbni_isa.c index 61a239841b19..f1db8b1a984c 100644 --- a/sys/dev/sbni/if_sbni_isa.c +++ b/sys/dev/sbni/if_sbni_isa.c @@ -132,7 +132,7 @@ sbni_attach_isa(device_t dev) } else { struct sbni_softc *master; - if ((master = connect_to_master(sc)) == 0) { + if ((master = connect_to_master(sc)) == NULL) { device_printf(dev, "failed to alloc irq\n"); sbni_release_resources(sc); return (ENXIO); diff --git a/sys/dev/sdhci/sdhci_fdt_gpio.c b/sys/dev/sdhci/sdhci_fdt_gpio.c index be9f629aacf6..2f2fb1864f22 100644 --- a/sys/dev/sdhci/sdhci_fdt_gpio.c +++ b/sys/dev/sdhci/sdhci_fdt_gpio.c @@ -192,7 +192,7 @@ wp_setup(struct sdhci_fdt_gpio *gpio, phandle_t node) if (bootverbose) device_printf(dev, "Write protect switch on %s pin %u\n", - device_get_nameunit(gpio->cd_pin->dev), gpio->cd_pin->pin); + device_get_nameunit(gpio->wp_pin->dev), gpio->wp_pin->pin); } struct sdhci_fdt_gpio * diff --git a/sys/dev/siis/siis.c b/sys/dev/siis/siis.c index 976952f13c0c..8b5b3c69d1ba 100644 --- a/sys/dev/siis/siis.c +++ b/sys/dev/siis/siis.c @@ -1835,10 +1835,6 @@ siisaction(struct cam_sim *sim, union ccb *ccb) } siis_begin_transaction(dev, ccb); return; - case XPT_EN_LUN: /* Enable LUN as a target */ - case XPT_TARGET_IO: /* Execute target I/O request */ - case XPT_ACCEPT_TARGET_IO: /* Accept Host Target Mode CDB */ - case XPT_CONT_TARGET_IO: /* Continue Host Target I/O Connection*/ case XPT_ABORT: /* Abort the specified CCB */ /* XXX Implement */ ccb->ccb_h.status = CAM_REQ_INVALID; diff --git a/sys/dev/sn/if_sn.c b/sys/dev/sn/if_sn.c index 7ac2a13170cd..0306089c8629 100644 --- a/sys/dev/sn/if_sn.c +++ b/sys/dev/sn/if_sn.c @@ -393,7 +393,7 @@ snstart_locked(struct ifnet *ifp) * Sneak a peek at the next packet */ m = ifp->if_snd.ifq_head; - if (m == 0) + if (m == NULL) return; /* * Compute the frame length and set pad to give an overall even @@ -509,7 +509,7 @@ snstart_locked(struct ifnet *ifp) /* * Push out the data to the card. */ - for (top = m; m != 0; m = m->m_next) { + for (top = m; m != NULL; m = m->m_next) { /* * Push out words. @@ -607,7 +607,7 @@ snresume(struct ifnet *ifp) * Sneak a peek at the next packet */ m = ifp->if_snd.ifq_head; - if (m == 0) { + if (m == NULL) { if_printf(ifp, "snresume() with nothing to send\n"); return; } @@ -708,7 +708,7 @@ snresume(struct ifnet *ifp) /* * Push out the data to the card. */ - for (top = m; m != 0; m = m->m_next) { + for (top = m; m != NULL; m = m->m_next) { /* * Push out words. diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c index a3a101ff5f06..a9c2070aeec6 100644 --- a/sys/dev/sym/sym_hipd.c +++ b/sys/dev/sym/sym_hipd.c @@ -3710,7 +3710,7 @@ static void sym_log_hard_error(hcb_p np, u_short sist, u_char dstat) } else { script_ofs = dsp; script_size = 0; - script_base = 0; + script_base = NULL; script_name = "mem"; } @@ -4296,7 +4296,7 @@ static void sym_int_ma (hcb_p np) * try to find the interrupted script command, * and the address at which to continue. */ - vdsp = 0; + vdsp = NULL; nxtdsp = 0; if (dsp > np->scripta_ba && dsp <= np->scripta_ba + np->scripta_sz) { @@ -6673,7 +6673,7 @@ static void sym_alloc_lcb_tags (hcb_p np, u_char tn, u_char ln) lp->cb_tags = sym_calloc(SYM_CONF_MAX_TASK, "CB_TAGS"); if (!lp->cb_tags) { sym_mfree_dma(lp->itlq_tbl, SYM_CONF_MAX_TASK*4, "ITLQ_TBL"); - lp->itlq_tbl = 0; + lp->itlq_tbl = NULL; return; } @@ -8090,11 +8090,6 @@ static void sym_action2(struct cam_sim *sim, union ccb *ccb) sym_init (np, 1); sym_xpt_done2(np, ccb, CAM_REQ_CMP); break; - case XPT_ACCEPT_TARGET_IO: - case XPT_CONT_TARGET_IO: - case XPT_EN_LUN: - case XPT_NOTIFY_ACK: - case XPT_IMMED_NOTIFY: case XPT_TERM_IO: default: sym_xpt_done2(np, ccb, CAM_REQ_INVALID); diff --git a/sys/dev/trm/trm.c b/sys/dev/trm/trm.c index a205929c6ec9..5374807f2c11 100644 --- a/sys/dev/trm/trm.c +++ b/sys/dev/trm/trm.c @@ -543,11 +543,6 @@ trm_action(struct cam_sim *psim, union ccb *pccb) target_lun = pccb->ccb_h.target_lun; switch (pccb->ccb_h.func_code) { - case XPT_NOOP: - TRM_DPRINTF(" XPT_NOOP \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; /* * Execute the requested I/O operation */ @@ -623,16 +618,6 @@ trm_action(struct cam_sim *psim, union ccb *pccb) } break; } - case XPT_GDEV_TYPE: - TRM_DPRINTF(" XPT_GDEV_TYPE \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - case XPT_GDEVLIST: - TRM_DPRINTF(" XPT_GDEVLIST \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; /* * Path routing inquiry * Path Inquiry CCB @@ -661,76 +646,33 @@ trm_action(struct cam_sim *psim, union ccb *pccb) cpi->protocol_version = SCSI_REV_2; cpi->ccb_h.status = CAM_REQ_CMP; xpt_done(pccb); - } break; + } /* - * Release a frozen SIM queue - * Release SIM Queue + * XPT_ABORT = 0x10, Abort the specified CCB + * Abort XPT request CCB */ - case XPT_REL_SIMQ: - TRM_DPRINTF(" XPT_REL_SIMQ \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Set Asynchronous Callback Parameters - * Set Asynchronous Callback CCB - */ - case XPT_SASYNC_CB: - TRM_DPRINTF(" XPT_SASYNC_CB \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Set device type information - * Set Device Type CCB - */ - case XPT_SDEV_TYPE: - TRM_DPRINTF(" XPT_SDEV_TYPE \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Get EDT entries matching the given pattern - */ - case XPT_DEV_MATCH: - TRM_DPRINTF(" XPT_DEV_MATCH \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Turn on debugging for a bus, target or lun - */ - case XPT_DEBUG: - TRM_DPRINTF(" XPT_DEBUG \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * XPT_ABORT = 0x10, Abort the specified CCB - * Abort XPT request CCB - */ case XPT_ABORT: TRM_DPRINTF(" XPT_ABORT \n"); pccb->ccb_h.status = CAM_REQ_INVALID; xpt_done(pccb); break; /* - * Reset the specified SCSI bus - * Reset SCSI Bus CCB - */ - case XPT_RESET_BUS: { + * Reset the specified SCSI bus + * Reset SCSI Bus CCB + */ + case XPT_RESET_BUS: { int i; TRM_DPRINTF(" XPT_RESET_BUS \n"); - trm_reset(pACB); + trm_reset(pACB); pACB->ACBFlag=0; for (i=0; i<500; i++) DELAY(1000); pccb->ccb_h.status = CAM_REQ_CMP; xpt_done(pccb); - } break; + } /* * Bus Device Reset the specified SCSI device * Reset SCSI Device CCB @@ -929,92 +871,6 @@ trm_action(struct cam_sim *psim, union ccb *pccb) cam_calc_geometry(&pccb->ccg, /*extended*/1); xpt_done(pccb); break; - case XPT_ENG_INQ: - TRM_DPRINTF(" XPT_ENG_INQ \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * HBA execute engine request - * This structure must match SCSIIO size - */ - case XPT_ENG_EXEC: - TRM_DPRINTF(" XPT_ENG_EXEC \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * XPT_EN_LUN = 0x30, Enable LUN as a target - * Target mode structures. - */ - case XPT_EN_LUN: - /* - * Don't (yet?) support vendor - * specific commands. - */ - TRM_DPRINTF(" XPT_EN_LUN \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Execute target I/O request - */ - case XPT_TARGET_IO: - /* - * Don't (yet?) support vendor - * specific commands. - */ - TRM_DPRINTF(" XPT_TARGET_IO \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Accept Host Target Mode CDB - */ - case XPT_ACCEPT_TARGET_IO: - /* - * Don't (yet?) support vendor - * specific commands. - */ - TRM_DPRINTF(" XPT_ACCEPT_TARGET_IO \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Continue Host Target I/O Connection - */ - case XPT_CONT_TARGET_IO: - /* - * Don't (yet?) support vendor - * specific commands. - */ - TRM_DPRINTF(" XPT_CONT_TARGET_IO \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Notify Host Target driver of event - */ - case XPT_IMMED_NOTIFY: - TRM_DPRINTF(" XPT_IMMED_NOTIFY \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * Acknowledgement of event - */ - case XPT_NOTIFY_ACK: - TRM_DPRINTF(" XPT_NOTIFY_ACK \n"); - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; - /* - * XPT_VUNIQUE = 0x80 - */ - case XPT_VUNIQUE: - pccb->ccb_h.status = CAM_REQ_INVALID; - xpt_done(pccb); - break; default: pccb->ccb_h.status = CAM_REQ_INVALID; xpt_done(pccb); diff --git a/sys/dev/usb/storage/cfumass.c b/sys/dev/usb/storage/cfumass.c new file mode 100644 index 000000000000..0565fed142bd --- /dev/null +++ b/sys/dev/usb/storage/cfumass.c @@ -0,0 +1,1075 @@ +/*- + * Copyright (c) 2016 The FreeBSD Foundation + * All rights reserved. + * + * This software was developed by Edward Tomasz Napierala under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ +/* + * USB Mass Storage Class Bulk-Only (BBB) Transport target. + * + * http://www.usb.org/developers/docs/devclass_docs/usbmassbulk_10.pdf + * + * This code implements the USB Mass Storage frontend driver for the CAM + * Target Layer (ctl(4)) subsystem. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "usbdevs.h" +#include "usb_if.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +SYSCTL_NODE(_hw_usb, OID_AUTO, cfumass, CTLFLAG_RW, 0, + "CAM Target Layer USB Mass Storage Frontend"); +static int debug = 1; +SYSCTL_INT(_hw_usb_cfumass, OID_AUTO, debug, CTLFLAG_RWTUN, + &debug, 1, "Enable debug messages"); +static int max_lun = 0; +SYSCTL_INT(_hw_usb_cfumass, OID_AUTO, max_lun, CTLFLAG_RWTUN, + &max_lun, 1, "Maximum advertised LUN number"); +static int ignore_stop = 1; +SYSCTL_INT(_hw_usb_cfumass, OID_AUTO, ignore_stop, CTLFLAG_RWTUN, + &ignore_stop, 1, "Ignore START STOP UNIT with START and LOEJ bits cleared"); + +/* + * The driver uses a single, global CTL port. It could create its ports + * in cfumass_attach() instead, but that would make it impossible to specify + * "port cfumass0" in ctl.conf(5), as the port generally wouldn't exist + * at the time ctld(8) gets run. + */ +struct ctl_port cfumass_port; +bool cfumass_port_online; +volatile u_int cfumass_refcount; + +#ifndef CFUMASS_BULK_SIZE +#define CFUMASS_BULK_SIZE (1U << 17) /* bytes */ +#endif + +/* + * USB transfer definitions. + */ +#define CFUMASS_T_COMMAND 0 +#define CFUMASS_T_DATA_OUT 1 +#define CFUMASS_T_DATA_IN 2 +#define CFUMASS_T_STATUS 3 +#define CFUMASS_T_MAX 4 + +/* + * USB interface specific control requests. + */ +#define UR_RESET 0xff /* Bulk-Only Mass Storage Reset */ +#define UR_GET_MAX_LUN 0xfe /* Get Max LUN */ + +/* + * Command Block Wrapper. + */ +struct cfumass_cbw_t { + uDWord dCBWSignature; +#define CBWSIGNATURE 0x43425355 /* "USBC" */ + uDWord dCBWTag; + uDWord dCBWDataTransferLength; + uByte bCBWFlags; +#define CBWFLAGS_OUT 0x00 +#define CBWFLAGS_IN 0x80 + uByte bCBWLUN; + uByte bCDBLength; +#define CBWCBLENGTH 16 + uByte CBWCB[CBWCBLENGTH]; +} __packed; + +#define CFUMASS_CBW_SIZE 31 +CTASSERT(sizeof(struct cfumass_cbw_t) == CFUMASS_CBW_SIZE); + +/* + * Command Status Wrapper. + */ +struct cfumass_csw_t { + uDWord dCSWSignature; +#define CSWSIGNATURE 0x53425355 /* "USBS" */ + uDWord dCSWTag; + uDWord dCSWDataResidue; + uByte bCSWStatus; +#define CSWSTATUS_GOOD 0x0 +#define CSWSTATUS_FAILED 0x1 +#define CSWSTATUS_PHASE 0x2 +} __packed; + +#define CFUMASS_CSW_SIZE 13 +CTASSERT(sizeof(struct cfumass_csw_t) == CFUMASS_CSW_SIZE); + +struct cfumass_softc { + device_t sc_dev; + struct usb_device *sc_udev; + struct usb_xfer *sc_xfer[CFUMASS_T_MAX]; + + struct cfumass_cbw_t *sc_cbw; + struct cfumass_csw_t *sc_csw; + + struct mtx sc_mtx; + int sc_online; + int sc_ctl_initid; + + /* + * This is used to communicate between CTL callbacks + * and USB callbacks; basically, it holds the state + * for the current command ("the" command, since there + * is no queueing in USB Mass Storage). + */ + bool sc_current_stalled; + + /* + * The following are set upon receiving a SCSI command. + */ + int sc_current_tag; + int sc_current_transfer_length; + int sc_current_flags; + + /* + * The following are set in ctl_datamove(). + */ + int sc_current_residue; + union ctl_io *sc_ctl_io; + + /* + * The following is set in cfumass_done(). + */ + int sc_current_status; + + /* + * Number of requests queued to CTL. + */ + volatile u_int sc_queued; +}; + +/* + * USB interface. + */ +static device_probe_t cfumass_probe; +static device_attach_t cfumass_attach; +static device_detach_t cfumass_detach; +static device_suspend_t cfumass_suspend; +static device_resume_t cfumass_resume; +static usb_handle_request_t cfumass_handle_request; + +static usb_callback_t cfumass_t_command_callback; +static usb_callback_t cfumass_t_data_out_callback; +static usb_callback_t cfumass_t_data_in_callback; +static usb_callback_t cfumass_t_status_callback; + +static device_method_t cfumass_methods[] = { + + /* USB interface. */ + DEVMETHOD(usb_handle_request, cfumass_handle_request), + + /* Device interface. */ + DEVMETHOD(device_probe, cfumass_probe), + DEVMETHOD(device_attach, cfumass_attach), + DEVMETHOD(device_detach, cfumass_detach), + DEVMETHOD(device_suspend, cfumass_suspend), + DEVMETHOD(device_resume, cfumass_resume), + + DEVMETHOD_END +}; + +static driver_t cfumass_driver = { + .name = "cfumass", + .methods = cfumass_methods, + .size = sizeof(struct cfumass_softc), +}; + +static devclass_t cfumass_devclass; + +DRIVER_MODULE(cfumass, uhub, cfumass_driver, cfumass_devclass, NULL, 0); +MODULE_VERSION(cfumass, 0); +MODULE_DEPEND(cfumass, usb, 1, 1, 1); +MODULE_DEPEND(cfumass, usb_template, 1, 1, 1); + +static struct usb_config cfumass_config[CFUMASS_T_MAX] = { + + [CFUMASS_T_COMMAND] = { + .type = UE_BULK, + .endpoint = UE_ADDR_ANY, + .direction = UE_DIR_OUT, + .bufsize = sizeof(struct cfumass_cbw_t), + .callback = &cfumass_t_command_callback, + .usb_mode = USB_MODE_DEVICE, + }, + + [CFUMASS_T_DATA_OUT] = { + .type = UE_BULK, + .endpoint = UE_ADDR_ANY, + .direction = UE_DIR_OUT, + .bufsize = CFUMASS_BULK_SIZE, + .flags = {.proxy_buffer = 1, .short_xfer_ok = 1, + .ext_buffer = 1}, + .callback = &cfumass_t_data_out_callback, + .usb_mode = USB_MODE_DEVICE, + }, + + [CFUMASS_T_DATA_IN] = { + .type = UE_BULK, + .endpoint = UE_ADDR_ANY, + .direction = UE_DIR_IN, + .bufsize = CFUMASS_BULK_SIZE, + .flags = {.proxy_buffer = 1, .short_xfer_ok = 1, + .ext_buffer = 1}, + .callback = &cfumass_t_data_in_callback, + .usb_mode = USB_MODE_DEVICE, + }, + + [CFUMASS_T_STATUS] = { + .type = UE_BULK, + .endpoint = UE_ADDR_ANY, + .direction = UE_DIR_IN, + .bufsize = sizeof(struct cfumass_csw_t), + .flags = {.short_xfer_ok = 1}, + .callback = &cfumass_t_status_callback, + .usb_mode = USB_MODE_DEVICE, + }, +}; + +/* + * CTL frontend interface. + */ +static int cfumass_init(void); +static int cfumass_shutdown(void); +static void cfumass_online(void *arg); +static void cfumass_offline(void *arg); +static void cfumass_datamove(union ctl_io *io); +static void cfumass_done(union ctl_io *io); + +static struct ctl_frontend cfumass_frontend = { + .name = "umass", + .init = cfumass_init, + .shutdown = cfumass_shutdown, +}; +CTL_FRONTEND_DECLARE(ctlcfumass, cfumass_frontend); + +#define CFUMASS_DEBUG(S, X, ...) \ + do { \ + if (debug > 1) { \ + device_printf(S->sc_dev, "%s: " X "\n", \ + __func__, ## __VA_ARGS__); \ + } \ + } while (0) + +#define CFUMASS_WARN(S, X, ...) \ + do { \ + if (debug > 0) { \ + device_printf(S->sc_dev, "WARNING: %s: " X "\n",\ + __func__, ## __VA_ARGS__); \ + } \ + } while (0) + +#define CFUMASS_LOCK(X) mtx_lock(&X->sc_mtx) +#define CFUMASS_UNLOCK(X) mtx_unlock(&X->sc_mtx) + +static void cfumass_transfer_start(struct cfumass_softc *sc, + uint8_t xfer_index); +static void cfumass_terminate(struct cfumass_softc *sc); + +static int +cfumass_probe(device_t dev) +{ + struct usb_attach_arg *uaa; + struct usb_interface_descriptor *id; + + uaa = device_get_ivars(dev); + + if (uaa->usb_mode != USB_MODE_DEVICE) + return (ENXIO); + + /* + * Check for a compliant device. + */ + id = usbd_get_interface_descriptor(uaa->iface); + if ((id == NULL) || + (id->bInterfaceClass != UICLASS_MASS) || + (id->bInterfaceSubClass != UISUBCLASS_SCSI) || + (id->bInterfaceProtocol != UIPROTO_MASS_BBB)) { + return (ENXIO); + } + + return (BUS_PROBE_GENERIC); +} + +static int +cfumass_attach(device_t dev) +{ + struct cfumass_softc *sc; + struct usb_attach_arg *uaa; + int error; + + sc = device_get_softc(dev); + uaa = device_get_ivars(dev); + + sc->sc_dev = dev; + sc->sc_udev = uaa->device; + + CFUMASS_DEBUG(sc, "go"); + + usbd_set_power_mode(uaa->device, USB_POWER_MODE_SAVE); + device_set_usb_desc(dev); + + mtx_init(&sc->sc_mtx, "cfumass", NULL, MTX_DEF); + refcount_acquire(&cfumass_refcount); + + error = usbd_transfer_setup(uaa->device, + &uaa->info.bIfaceIndex, sc->sc_xfer, cfumass_config, + CFUMASS_T_MAX, sc, &sc->sc_mtx); + if (error != 0) { + CFUMASS_WARN(sc, "usbd_transfer_setup() failed: %s", + usbd_errstr(error)); + refcount_release(&cfumass_refcount); + return (ENXIO); + } + + sc->sc_cbw = + usbd_xfer_get_frame_buffer(sc->sc_xfer[CFUMASS_T_COMMAND], 0); + sc->sc_csw = + usbd_xfer_get_frame_buffer(sc->sc_xfer[CFUMASS_T_STATUS], 0); + + sc->sc_ctl_initid = ctl_add_initiator(&cfumass_port, -1, 0, NULL); + if (sc->sc_ctl_initid < 0) { + CFUMASS_WARN(sc, "ctl_add_initiator() failed with error %d", + sc->sc_ctl_initid); + usbd_transfer_unsetup(sc->sc_xfer, CFUMASS_T_MAX); + refcount_release(&cfumass_refcount); + return (ENXIO); + } + + refcount_init(&sc->sc_queued, 0); + + CFUMASS_LOCK(sc); + cfumass_transfer_start(sc, CFUMASS_T_COMMAND); + CFUMASS_UNLOCK(sc); + + return (0); +} + +static int +cfumass_detach(device_t dev) +{ + struct cfumass_softc *sc; + int error; + + sc = device_get_softc(dev); + + CFUMASS_DEBUG(sc, "go"); + + CFUMASS_LOCK(sc); + cfumass_terminate(sc); + CFUMASS_UNLOCK(sc); + usbd_transfer_unsetup(sc->sc_xfer, CFUMASS_T_MAX); + + if (sc->sc_ctl_initid != -1) { + error = ctl_remove_initiator(&cfumass_port, sc->sc_ctl_initid); + if (error != 0) { + CFUMASS_WARN(sc, "ctl_remove_initiator() failed " + "with error %d", error); + } + sc->sc_ctl_initid = -1; + } + + mtx_destroy(&sc->sc_mtx); + refcount_release(&cfumass_refcount); + + return (0); +} + +static int +cfumass_suspend(device_t dev) +{ + struct cfumass_softc *sc; + + sc = device_get_softc(dev); + CFUMASS_DEBUG(sc, "go"); + + return (0); +} + +static int +cfumass_resume(device_t dev) +{ + struct cfumass_softc *sc; + + sc = device_get_softc(dev); + CFUMASS_DEBUG(sc, "go"); + + return (0); +} + +static void +cfumass_transfer_start(struct cfumass_softc *sc, uint8_t xfer_index) +{ + + usbd_transfer_start(sc->sc_xfer[xfer_index]); +} + +static void +cfumass_transfer_stop_and_drain(struct cfumass_softc *sc, uint8_t xfer_index) +{ + + usbd_transfer_stop(sc->sc_xfer[xfer_index]); + CFUMASS_UNLOCK(sc); + usbd_transfer_drain(sc->sc_xfer[xfer_index]); + CFUMASS_LOCK(sc); +} + +static void +cfumass_terminate(struct cfumass_softc *sc) +{ + int last; + + for (;;) { + cfumass_transfer_stop_and_drain(sc, CFUMASS_T_COMMAND); + cfumass_transfer_stop_and_drain(sc, CFUMASS_T_DATA_IN); + cfumass_transfer_stop_and_drain(sc, CFUMASS_T_DATA_OUT); + + if (sc->sc_ctl_io != NULL) { + CFUMASS_DEBUG(sc, "terminating CTL transfer"); + ctl_set_data_phase_error(&sc->sc_ctl_io->scsiio); + sc->sc_ctl_io->scsiio.be_move_done(sc->sc_ctl_io); + sc->sc_ctl_io = NULL; + } + + cfumass_transfer_stop_and_drain(sc, CFUMASS_T_STATUS); + + refcount_acquire(&sc->sc_queued); + last = refcount_release(&sc->sc_queued); + if (last != 0) + break; + + CFUMASS_DEBUG(sc, "%d CTL tasks pending", sc->sc_queued); + msleep(__DEVOLATILE(void *, &sc->sc_queued), &sc->sc_mtx, + 0, "cfumass_reset", hz / 100); + } +} + +static int +cfumass_handle_request(device_t dev, + const void *preq, void **pptr, uint16_t *plen, + uint16_t offset, uint8_t *pstate) +{ + static uint8_t max_lun_tmp; + struct cfumass_softc *sc; + const struct usb_device_request *req; + uint8_t is_complete; + + sc = device_get_softc(dev); + req = preq; + is_complete = *pstate; + + CFUMASS_DEBUG(sc, "go"); + + if (is_complete) + return (ENXIO); + + if ((req->bmRequestType == UT_WRITE_CLASS_INTERFACE) && + (req->bRequest == UR_RESET)) { + CFUMASS_WARN(sc, "received Bulk-Only Mass Storage Reset"); + *plen = 0; + + CFUMASS_LOCK(sc); + cfumass_terminate(sc); + cfumass_transfer_start(sc, CFUMASS_T_COMMAND); + CFUMASS_UNLOCK(sc); + + CFUMASS_DEBUG(sc, "Bulk-Only Mass Storage Reset done"); + return (0); + } + + if ((req->bmRequestType == UT_READ_CLASS_INTERFACE) && + (req->bRequest == UR_GET_MAX_LUN)) { + CFUMASS_DEBUG(sc, "received Get Max LUN"); + if (offset == 0) { + *plen = 1; + /* + * The protocol doesn't support LUN numbers higher + * than 15. Also, some initiators (namely Windows XP + * SP3 Version 2002) can't properly query the number + * of LUNs, resulting in inaccessible "fake" ones - thus + * the default limit of one LUN. + */ + if (max_lun < 0 || max_lun > 15) { + CFUMASS_WARN(sc, + "invalid hw.usb.cfumass.max_lun, must be " + "between 0 and 15; defaulting to 0"); + max_lun_tmp = 0; + } else { + max_lun_tmp = max_lun; + } + *pptr = &max_lun_tmp; + } else { + *plen = 0; + } + return (0); + } + + return (ENXIO); +} + +static int +cfumass_quirk(struct cfumass_softc *sc, unsigned char *cdb, int cdb_len) +{ + struct scsi_start_stop_unit *sssu; + + switch (cdb[0]) { + case START_STOP_UNIT: + /* + * Some initiators - eg OSX, Darwin Kernel Version 15.6.0, + * root:xnu-3248.60.11~2/RELEASE_X86_64 - attempt to stop + * the unit on eject, but fail to start it when it's plugged + * back. Just ignore the command. + */ + + if (cdb_len < sizeof(*sssu)) { + CFUMASS_DEBUG(sc, "received START STOP UNIT with " + "bCDBLength %d, should be %zd", + cdb_len, sizeof(*sssu)); + break; + } + + sssu = (struct scsi_start_stop_unit *)cdb; + if ((sssu->how & SSS_PC_MASK) != 0) + break; + + if ((sssu->how & SSS_START) != 0) + break; + + if ((sssu->how & SSS_LOEJ) != 0) + break; + + if (ignore_stop == 0) { + break; + } else if (ignore_stop == 1) { + CFUMASS_WARN(sc, "ignoring START STOP UNIT request"); + } else { + CFUMASS_DEBUG(sc, "ignoring START STOP UNIT request"); + } + + sc->sc_current_status = 0; + cfumass_transfer_start(sc, CFUMASS_T_STATUS); + + return (1); + default: + break; + } + + return (0); +} + +static void +cfumass_t_command_callback(struct usb_xfer *xfer, usb_error_t usb_error) +{ + struct cfumass_softc *sc; + uint32_t signature; + union ctl_io *io; + int error = 0; + + sc = usbd_xfer_softc(xfer); + + KASSERT(sc->sc_ctl_io == NULL, + ("sc_ctl_io is %p, should be NULL", sc->sc_ctl_io)); + + switch (USB_GET_STATE(xfer)) { + case USB_ST_TRANSFERRED: + CFUMASS_DEBUG(sc, "USB_ST_TRANSFERRED"); + + signature = UGETDW(sc->sc_cbw->dCBWSignature); + if (signature != CBWSIGNATURE) { + CFUMASS_WARN(sc, "wrong dCBWSignature 0x%08x, " + "should be 0x%08x", signature, CBWSIGNATURE); + break; + } + + if (sc->sc_cbw->bCDBLength <= 0 || + sc->sc_cbw->bCDBLength > sizeof(sc->sc_cbw->CBWCB)) { + CFUMASS_WARN(sc, "invalid bCDBLength %d, should be <= %zd", + sc->sc_cbw->bCDBLength, sizeof(sc->sc_cbw->CBWCB)); + break; + } + + sc->sc_current_stalled = false; + sc->sc_current_status = 0; + sc->sc_current_tag = UGETDW(sc->sc_cbw->dCBWTag); + sc->sc_current_transfer_length = + UGETDW(sc->sc_cbw->dCBWDataTransferLength); + sc->sc_current_flags = sc->sc_cbw->bCBWFlags; + + /* + * Make sure to report proper residue if the datamove wasn't + * required, or wasn't called due to SCSI error. + */ + sc->sc_current_residue = sc->sc_current_transfer_length; + + if (cfumass_quirk(sc, + sc->sc_cbw->CBWCB, sc->sc_cbw->bCDBLength) != 0) + break; + + if (!cfumass_port_online) { + CFUMASS_DEBUG(sc, "cfumass port is offline; stalling"); + usbd_xfer_set_stall(xfer); + break; + } + + /* + * Those CTL functions cannot be called with mutex held. + */ + CFUMASS_UNLOCK(sc); + io = ctl_alloc_io(cfumass_port.ctl_pool_ref); + ctl_zero_io(io); + io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = sc; + io->io_hdr.io_type = CTL_IO_SCSI; + io->io_hdr.nexus.initid = sc->sc_ctl_initid; + io->io_hdr.nexus.targ_port = cfumass_port.targ_port; + io->io_hdr.nexus.targ_lun = ctl_decode_lun(sc->sc_cbw->bCBWLUN); + io->scsiio.tag_num = UGETDW(sc->sc_cbw->dCBWTag); + io->scsiio.tag_type = CTL_TAG_UNTAGGED; + io->scsiio.cdb_len = sc->sc_cbw->bCDBLength; + memcpy(io->scsiio.cdb, sc->sc_cbw->CBWCB, sc->sc_cbw->bCDBLength); + refcount_acquire(&sc->sc_queued); + error = ctl_queue(io); + if (error != CTL_RETVAL_COMPLETE) { + CFUMASS_WARN(sc, + "ctl_queue() failed; error %d; stalling", error); + ctl_free_io(io); + refcount_release(&sc->sc_queued); + CFUMASS_LOCK(sc); + usbd_xfer_set_stall(xfer); + break; + } + + CFUMASS_LOCK(sc); + break; + + case USB_ST_SETUP: +tr_setup: + CFUMASS_DEBUG(sc, "USB_ST_SETUP"); + + usbd_xfer_set_frame_len(xfer, 0, sizeof(*sc->sc_cbw)); + usbd_transfer_submit(xfer); + break; + + default: + if (usb_error == USB_ERR_CANCELLED) { + CFUMASS_DEBUG(sc, "USB_ERR_CANCELLED"); + break; + } + + CFUMASS_DEBUG(sc, "USB_ST_ERROR: %s", usbd_errstr(usb_error)); + + goto tr_setup; + } +} + +static void +cfumass_t_data_out_callback(struct usb_xfer *xfer, usb_error_t usb_error) +{ + struct cfumass_softc *sc; + union ctl_io *io; + struct ctl_sg_entry ctl_sg_entry, *ctl_sglist; + int actlen, ctl_sg_count; + + sc = usbd_xfer_softc(xfer); + + CFUMASS_DEBUG(sc, "go"); + + usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL); + + io = sc->sc_ctl_io; + + if (io->scsiio.kern_sg_entries > 0) { + ctl_sglist = (struct ctl_sg_entry *)io->scsiio.kern_data_ptr; + ctl_sg_count = io->scsiio.kern_sg_entries; + } else { + ctl_sglist = &ctl_sg_entry; + ctl_sglist->addr = io->scsiio.kern_data_ptr; + ctl_sglist->len = io->scsiio.kern_data_len; + ctl_sg_count = 1; + } + + switch (USB_GET_STATE(xfer)) { + case USB_ST_TRANSFERRED: + CFUMASS_DEBUG(sc, "USB_ST_TRANSFERRED"); + + /* + * If the host sent less data than required, zero-out + * the remaining buffer space, to prevent a malicious host + * to writing uninitialized kernel memory to the disk. + */ + if (actlen != ctl_sglist[0].len) { + KASSERT(actlen <= ctl_sglist[0].len, + ("actlen %d > ctl_sglist.len %zd", + actlen, ctl_sglist[0].len)); + + CFUMASS_DEBUG(sc, "host transferred %d bytes" + "instead of expected %zd bytes", + actlen, ctl_sglist[0].len); + + memset((char *)(ctl_sglist[0].addr) + actlen, 0, + ctl_sglist[0].len - actlen); + } + + sc->sc_current_residue = 0; + io->scsiio.be_move_done(io); + sc->sc_ctl_io = NULL; + break; + + case USB_ST_SETUP: +tr_setup: + CFUMASS_DEBUG(sc, "USB_ST_SETUP"); + + CFUMASS_DEBUG(sc, "requested size %d, CTL segment size %zd", + sc->sc_current_transfer_length, ctl_sglist[0].len); + + usbd_xfer_set_frame_data(xfer, 0, ctl_sglist[0].addr, ctl_sglist[0].len); + usbd_transfer_submit(xfer); + break; + + default: + if (usb_error == USB_ERR_CANCELLED) { + CFUMASS_DEBUG(sc, "USB_ERR_CANCELLED"); + break; + } + + CFUMASS_DEBUG(sc, "USB_ST_ERROR: %s", + usbd_errstr(usb_error)); + + goto tr_setup; + } +} + +static void +cfumass_t_data_in_callback(struct usb_xfer *xfer, usb_error_t usb_error) +{ + struct cfumass_softc *sc; + union ctl_io *io; + uint32_t max_bulk; + struct ctl_sg_entry ctl_sg_entry, *ctl_sglist; + int ctl_sg_count; + + sc = usbd_xfer_softc(xfer); + max_bulk = usbd_xfer_max_len(xfer); + + io = sc->sc_ctl_io; + + switch (USB_GET_STATE(xfer)) { + case USB_ST_TRANSFERRED: + CFUMASS_DEBUG(sc, "USB_ST_TRANSFERRED"); + + io->scsiio.be_move_done(io); + sc->sc_ctl_io = NULL; + break; + + case USB_ST_SETUP: +tr_setup: + CFUMASS_DEBUG(sc, "USB_ST_SETUP"); + + if (io->scsiio.kern_sg_entries > 0) { + ctl_sglist = (struct ctl_sg_entry *)io->scsiio.kern_data_ptr; + ctl_sg_count = io->scsiio.kern_sg_entries; + } else { + ctl_sglist = &ctl_sg_entry; + ctl_sglist->addr = io->scsiio.kern_data_ptr; + ctl_sglist->len = io->scsiio.kern_data_len; + ctl_sg_count = 1; + } + + if (sc->sc_current_transfer_length > io->scsiio.kern_total_len) { + CFUMASS_DEBUG(sc, "initiator requested %d bytes, " + "we will send %ju and stall", + sc->sc_current_transfer_length, + (uintmax_t)io->scsiio.kern_total_len); + sc->sc_current_residue = sc->sc_current_transfer_length - + io->scsiio.kern_total_len; + } else { + sc->sc_current_residue = 0; + } + + CFUMASS_DEBUG(sc, "max_bulk %d, requested size %d, " + "CTL segment size %zd", max_bulk, + sc->sc_current_transfer_length, ctl_sglist[0].len); + + if (max_bulk >= ctl_sglist[0].len) + max_bulk = ctl_sglist[0].len; + + usbd_xfer_set_frame_data(xfer, 0, ctl_sglist[0].addr, max_bulk); + usbd_transfer_submit(xfer); + + break; + + default: + if (usb_error == USB_ERR_CANCELLED) { + CFUMASS_DEBUG(sc, "USB_ERR_CANCELLED"); + break; + } + + CFUMASS_DEBUG(sc, "USB_ST_ERROR: %s", usbd_errstr(usb_error)); + + goto tr_setup; + } +} + +static void +cfumass_t_status_callback(struct usb_xfer *xfer, usb_error_t usb_error) +{ + struct cfumass_softc *sc; + + sc = usbd_xfer_softc(xfer); + + KASSERT(sc->sc_ctl_io == NULL, + ("sc_ctl_io is %p, should be NULL", sc->sc_ctl_io)); + + switch (USB_GET_STATE(xfer)) { + case USB_ST_TRANSFERRED: + CFUMASS_DEBUG(sc, "USB_ST_TRANSFERRED"); + + cfumass_transfer_start(sc, CFUMASS_T_COMMAND); + break; + + case USB_ST_SETUP: +tr_setup: + CFUMASS_DEBUG(sc, "USB_ST_SETUP"); + + if (sc->sc_current_residue > 0 && !sc->sc_current_stalled) { + CFUMASS_DEBUG(sc, "non-zero residue, stalling"); + usbd_xfer_set_stall(xfer); + sc->sc_current_stalled = true; + } + + USETDW(sc->sc_csw->dCSWSignature, CSWSIGNATURE); + USETDW(sc->sc_csw->dCSWTag, sc->sc_current_tag); + USETDW(sc->sc_csw->dCSWDataResidue, sc->sc_current_residue); + sc->sc_csw->bCSWStatus = sc->sc_current_status; + + usbd_xfer_set_frame_len(xfer, 0, sizeof(*sc->sc_csw)); + usbd_transfer_submit(xfer); + break; + + default: + if (usb_error == USB_ERR_CANCELLED) { + CFUMASS_DEBUG(sc, "USB_ERR_CANCELLED"); + break; + } + + CFUMASS_DEBUG(sc, "USB_ST_ERROR: %s", + usbd_errstr(usb_error)); + + goto tr_setup; + } +} + +static void +cfumass_online(void *arg __unused) +{ + + cfumass_port_online = true; +} + +static void +cfumass_offline(void *arg __unused) +{ + + cfumass_port_online = false; +} + +static void +cfumass_datamove(union ctl_io *io) +{ + struct cfumass_softc *sc; + + sc = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + + CFUMASS_DEBUG(sc, "go"); + + CFUMASS_LOCK(sc); + + KASSERT(sc->sc_ctl_io == NULL, + ("sc_ctl_io is %p, should be NULL", sc->sc_ctl_io)); + sc->sc_ctl_io = io; + + if ((io->io_hdr.flags & CTL_FLAG_DATA_MASK) == CTL_FLAG_DATA_IN) { + /* + * Verify that CTL wants us to send the data in the direction + * expected by the initiator. + */ + if (sc->sc_current_flags != CBWFLAGS_IN) { + CFUMASS_WARN(sc, "wrong bCBWFlags 0x%x, should be 0x%x", + sc->sc_current_flags, CBWFLAGS_IN); + goto fail; + } + + cfumass_transfer_start(sc, CFUMASS_T_DATA_IN); + } else { + if (sc->sc_current_flags != CBWFLAGS_OUT) { + CFUMASS_WARN(sc, "wrong bCBWFlags 0x%x, should be 0x%x", + sc->sc_current_flags, CBWFLAGS_OUT); + goto fail; + } + + /* We hadn't received anything during this datamove yet. */ + io->scsiio.ext_data_filled = 0; + cfumass_transfer_start(sc, CFUMASS_T_DATA_OUT); + } + + CFUMASS_UNLOCK(sc); + return; + +fail: + ctl_set_data_phase_error(&io->scsiio); + io->scsiio.be_move_done(io); + sc->sc_ctl_io = NULL; +} + +static void +cfumass_done(union ctl_io *io) +{ + struct cfumass_softc *sc; + + sc = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + + CFUMASS_DEBUG(sc, "go"); + + KASSERT(((io->io_hdr.status & CTL_STATUS_MASK) != CTL_STATUS_NONE), + ("invalid CTL status %#x", io->io_hdr.status)); + KASSERT(sc->sc_ctl_io == NULL, + ("sc_ctl_io is %p, should be NULL", sc->sc_ctl_io)); + + if (io->io_hdr.io_type == CTL_IO_TASK && + io->taskio.task_action == CTL_TASK_I_T_NEXUS_RESET) { + /* + * Implicit task termination has just completed; nothing to do. + */ + ctl_free_io(io); + return; + } + + /* + * Do not return status for aborted commands. + * There are exceptions, but none supported by CTL yet. + */ + if (((io->io_hdr.flags & CTL_FLAG_ABORT) && + (io->io_hdr.flags & CTL_FLAG_ABORT_STATUS) == 0) || + (io->io_hdr.flags & CTL_FLAG_STATUS_SENT)) { + ctl_free_io(io); + return; + } + + switch (io->scsiio.scsi_status) { + case SCSI_STATUS_OK: + sc->sc_current_status = 0; + break; + default: + sc->sc_current_status = 1; + break; + } + + CFUMASS_LOCK(sc); + cfumass_transfer_start(sc, CFUMASS_T_STATUS); + CFUMASS_UNLOCK(sc); + ctl_free_io(io); + + refcount_release(&sc->sc_queued); +} + +int +cfumass_init(void) +{ + int error; + + cfumass_port.frontend = &cfumass_frontend; + cfumass_port.port_type = CTL_PORT_UMASS; + /* XXX KDM what should the real number be here? */ + cfumass_port.num_requested_ctl_io = 4096; + cfumass_port.port_name = "cfumass"; + cfumass_port.physical_port = 0; + cfumass_port.virtual_port = 0; + cfumass_port.port_online = cfumass_online; + cfumass_port.port_offline = cfumass_offline; + cfumass_port.onoff_arg = NULL; + cfumass_port.fe_datamove = cfumass_datamove; + cfumass_port.fe_done = cfumass_done; + cfumass_port.targ_port = -1; + + error = ctl_port_register(&cfumass_port); + if (error != 0) { + printf("%s: ctl_port_register() failed " + "with error %d", __func__, error); + } + + cfumass_port_online = true; + refcount_init(&cfumass_refcount, 0); + + return (error); +} + +int +cfumass_shutdown(void) +{ + int error; + + if (cfumass_refcount > 0) { + if (debug > 1) { + printf("%s: still have %u attachments; " + "returning EBUSY\n", __func__, cfumass_refcount); + } + return (EBUSY); + } + + error = ctl_port_deregister(&cfumass_port); + if (error != 0) { + printf("%s: ctl_port_deregister() failed " + "with error %d\n", __func__, error); + } + + return (error); +} diff --git a/sys/dev/usb/wlan/if_zyd.c b/sys/dev/usb/wlan/if_zyd.c index b04cc3cfc4d9..f4ae7e7c6b74 100644 --- a/sys/dev/usb/wlan/if_zyd.c +++ b/sys/dev/usb/wlan/if_zyd.c @@ -2582,10 +2582,10 @@ zyd_start(struct zyd_softc *sc) while (sc->tx_nfree > 0 && (m = mbufq_dequeue(&sc->sc_snd)) != NULL) { ni = (struct ieee80211_node *)m->m_pkthdr.rcvif; if (zyd_tx_start(sc, m, ni) != 0) { - ieee80211_free_node(ni); m_freem(m); if_inc_counter(ni->ni_vap->iv_ifp, IFCOUNTER_OERRORS, 1); + ieee80211_free_node(ni); break; } } diff --git a/sys/dev/vmware/vmxnet3/if_vmxvar.h b/sys/dev/vmware/vmxnet3/if_vmxvar.h index 861351603e2b..7d7c80cb8865 100644 --- a/sys/dev/vmware/vmxnet3/if_vmxvar.h +++ b/sys/dev/vmware/vmxnet3/if_vmxvar.h @@ -131,7 +131,7 @@ struct vmxnet3_txq_stats { struct vmxnet3_txqueue { struct mtx vxtxq_mtx; struct vmxnet3_softc *vxtxq_sc; -#ifndef VMXNET3_TX_LEGACY +#ifndef VMXNET3_LEGACY_TX struct buf_ring *vxtxq_br; #endif int vxtxq_id; @@ -142,7 +142,7 @@ struct vmxnet3_txqueue { struct vmxnet3_txq_stats vxtxq_stats; struct vmxnet3_txq_shared *vxtxq_ts; struct sysctl_oid_list *vxtxq_sysctl; -#ifndef VMXNET3_TX_LEGACY +#ifndef VMXNET3_LEGACY_TX struct task vxtxq_defrtask; #endif char vxtxq_name[16]; diff --git a/sys/dev/vx/if_vx.c b/sys/dev/vx/if_vx.c index 08d84a64f286..a1ba239a7b9e 100644 --- a/sys/dev/vx/if_vx.c +++ b/sys/dev/vx/if_vx.c @@ -350,7 +350,7 @@ vx_setlink(struct vx_softc *sc) */ i = sc->vx_connector; /* default in EEPROM */ reason = "default"; - warning = 0; + warning = NULL; if (ifp->if_flags & IFF_LINK0) { if (sc->vx_connectors & conn_tab[CONNECTOR_AUI].bit) { @@ -729,7 +729,7 @@ vx_read(struct vx_softc *sc) /* Pull packet off interface. */ m = vx_get(sc, len); - if (m == 0) { + if (m == NULL) { if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); goto abort; } diff --git a/sys/dev/xen/timer/timer.c b/sys/dev/xen/timer/timer.c index 0b26847b399d..2e94ce76fa5d 100644 --- a/sys/dev/xen/timer/timer.c +++ b/sys/dev/xen/timer/timer.c @@ -417,8 +417,20 @@ xentimer_attach(device_t dev) /* Register the timecounter. */ sc->tc.tc_name = "XENTIMER"; sc->tc.tc_quality = XENTIMER_QUALITY; - sc->tc.tc_flags = TC_FLAGS_SUSPEND_SAFE; /* + * FIXME: due to the lack of ordering during resume, FreeBSD cannot + * guarantee that the Xen PV timer is resumed before any other device + * attempts to make use of it, so mark it as not safe for suspension + * (ie: remove the TC_FLAGS_SUSPEND_SAFE flag). + * + * NB: This was not a problem in previous FreeBSD versions because the + * timer was directly attached to the nexus, but it is an issue now + * that the timer is attached to the xenpv bus, and thus resumed + * later. + * + * sc->tc.tc_flags = TC_FLAGS_SUSPEND_SAFE; + */ + /* * The underlying resolution is in nanoseconds, since the timer info * scales TSC frequencies using a fraction that represents time in * terms of nanoseconds. diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c index e4f25411e2f5..49435608e2da 100644 --- a/sys/fs/devfs/devfs_vnops.c +++ b/sys/fs/devfs/devfs_vnops.c @@ -676,32 +676,6 @@ devfs_close_f(struct file *fp, struct thread *td) return (error); } -static int -devfs_fsync(struct vop_fsync_args *ap) -{ - int error; - struct bufobj *bo; - struct devfs_dirent *de; - - if (!vn_isdisk(ap->a_vp, &error)) { - bo = &ap->a_vp->v_bufobj; - de = ap->a_vp->v_data; - if (error == ENXIO && bo->bo_dirty.bv_cnt > 0) { - printf("Device %s went missing before all of the data " - "could be written to it; expect data loss.\n", - de->de_dirent->d_name); - - error = vop_stdfsync(ap); - if (bo->bo_dirty.bv_cnt != 0 || error != 0) - printf("devfs_fsync: vop_stdfsync failed."); - } - - return (0); - } - - return (vop_stdfsync(ap)); -} - static int devfs_getattr(struct vop_getattr_args *ap) { @@ -1803,9 +1777,11 @@ devfs_mmap_f(struct file *fp, vm_map_t map, vm_offset_t *addr, vm_size_t size, * compatible. */ mp = vp->v_mount; - if (mp != NULL && (mp->mnt_flag & MNT_NOEXEC) != 0) + if (mp != NULL && (mp->mnt_flag & MNT_NOEXEC) != 0) { maxprot = VM_PROT_NONE; - else + if ((prot & VM_PROT_EXECUTE) != 0) + return (EACCES); + } else maxprot = VM_PROT_EXECUTE; if ((fp->f_flag & FREAD) != 0) maxprot |= VM_PROT_READ; @@ -1910,7 +1886,7 @@ static struct vop_vector devfs_specops = { .vop_bmap = VOP_PANIC, .vop_close = devfs_close, .vop_create = VOP_PANIC, - .vop_fsync = devfs_fsync, + .vop_fsync = vop_stdfsync, .vop_getattr = devfs_getattr, .vop_ioctl = devfs_ioctl, .vop_link = VOP_PANIC, diff --git a/sys/fs/ext2fs/ext2_htree.c b/sys/fs/ext2fs/ext2_htree.c index 6d74070853b1..32796ca97aab 100644 --- a/sys/fs/ext2fs/ext2_htree.c +++ b/sys/fs/ext2fs/ext2_htree.c @@ -766,7 +766,6 @@ ext2_htree_add_entry(struct vnode *dvp, struct ext2fs_direct_2 *entry, root_entires = info.h_levels[0].h_entries; newidxblock = malloc(blksize, M_TEMP, M_WAITOK | M_ZERO); dst_node = (struct ext2fs_htree_node *)newidxblock; - dst_entries = dst_node->h_entries; memset(&dst_node->h_fake_dirent, 0, sizeof(dst_node->h_fake_dirent)); dst_node->h_fake_dirent.e2d_reclen = blksize; diff --git a/sys/geom/eli/g_eli.h b/sys/geom/eli/g_eli.h index b6a28d05a9a6..846bf7eae81b 100644 --- a/sys/geom/eli/g_eli.h +++ b/sys/geom/eli/g_eli.h @@ -692,8 +692,8 @@ int g_eli_crypto_decrypt(u_int algo, u_char *data, size_t datasize, const u_char *key, size_t keysize); struct hmac_ctx { - SHA512_CTX shactx; - u_char k_opad[128]; + SHA512_CTX innerctx; + SHA512_CTX outerctx; }; void g_eli_crypto_hmac_init(struct hmac_ctx *ctx, const uint8_t *hkey, diff --git a/sys/geom/eli/g_eli_hmac.c b/sys/geom/eli/g_eli_hmac.c index 36b76deb9fda..cc350bd9b6e7 100644 --- a/sys/geom/eli/g_eli_hmac.c +++ b/sys/geom/eli/g_eli_hmac.c @@ -47,7 +47,7 @@ void g_eli_crypto_hmac_init(struct hmac_ctx *ctx, const uint8_t *hkey, size_t hkeylen) { - u_char k_ipad[128], key[128]; + u_char k_ipad[128], k_opad[128], key[128]; SHA512_CTX lctx; u_int i; @@ -66,13 +66,17 @@ g_eli_crypto_hmac_init(struct hmac_ctx *ctx, const uint8_t *hkey, /* XOR key with ipad and opad values. */ for (i = 0; i < sizeof(key); i++) { k_ipad[i] = key[i] ^ 0x36; - ctx->k_opad[i] = key[i] ^ 0x5c; + k_opad[i] = key[i] ^ 0x5c; } - bzero(key, sizeof(key)); - /* Perform inner SHA512. */ - SHA512_Init(&ctx->shactx); - SHA512_Update(&ctx->shactx, k_ipad, sizeof(k_ipad)); - bzero(k_ipad, sizeof(k_ipad)); + explicit_bzero(key, sizeof(key)); + /* Start inner SHA512. */ + SHA512_Init(&ctx->innerctx); + SHA512_Update(&ctx->innerctx, k_ipad, sizeof(k_ipad)); + explicit_bzero(k_ipad, sizeof(k_ipad)); + /* Start outer SHA512. */ + SHA512_Init(&ctx->outerctx); + SHA512_Update(&ctx->outerctx, k_opad, sizeof(k_opad)); + explicit_bzero(k_opad, sizeof(k_opad)); } void @@ -80,28 +84,27 @@ g_eli_crypto_hmac_update(struct hmac_ctx *ctx, const uint8_t *data, size_t datasize) { - SHA512_Update(&ctx->shactx, data, datasize); + SHA512_Update(&ctx->innerctx, data, datasize); } void g_eli_crypto_hmac_final(struct hmac_ctx *ctx, uint8_t *md, size_t mdsize) { u_char digest[SHA512_MDLEN]; - SHA512_CTX lctx; - SHA512_Final(digest, &ctx->shactx); - /* Perform outer SHA512. */ - SHA512_Init(&lctx); - SHA512_Update(&lctx, ctx->k_opad, sizeof(ctx->k_opad)); - bzero(ctx, sizeof(*ctx)); - SHA512_Update(&lctx, digest, sizeof(digest)); - SHA512_Final(digest, &lctx); - bzero(&lctx, sizeof(lctx)); + /* Complete inner hash */ + SHA512_Final(digest, &ctx->innerctx); + + /* Complete outer hash */ + SHA512_Update(&ctx->outerctx, digest, sizeof(digest)); + SHA512_Final(digest, &ctx->outerctx); + + explicit_bzero(ctx, sizeof(*ctx)); /* mdsize == 0 means "Give me the whole hash!" */ if (mdsize == 0) mdsize = SHA512_MDLEN; bcopy(digest, md, mdsize); - bzero(digest, sizeof(digest)); + explicit_bzero(digest, sizeof(digest)); } void diff --git a/sys/geom/eli/pkcs5v2.c b/sys/geom/eli/pkcs5v2.c index 6992801958ce..1bfdaf89a41e 100644 --- a/sys/geom/eli/pkcs5v2.c +++ b/sys/geom/eli/pkcs5v2.c @@ -56,6 +56,7 @@ pkcs5v2_genkey(uint8_t *key, unsigned keylen, const uint8_t *salt, uint8_t *counter, *keyp; u_int i, bsize, passlen; uint32_t count; + struct hmac_ctx startpoint, ctx; passlen = strlen(passphrase); bzero(key, keylen); @@ -66,20 +67,23 @@ pkcs5v2_genkey(uint8_t *key, unsigned keylen, const uint8_t *salt, for (count = 1; keylen > 0; count++, keylen -= bsize, keyp += bsize) { bsize = MIN(keylen, sizeof(md)); - counter[0] = (count >> 24) & 0xff; - counter[1] = (count >> 16) & 0xff; - counter[2] = (count >> 8) & 0xff; - counter[3] = count & 0xff; - g_eli_crypto_hmac(passphrase, passlen, saltcount, - sizeof(saltcount), md, 0); + be32enc(counter, count); + + g_eli_crypto_hmac_init(&startpoint, passphrase, passlen); + ctx = startpoint; + g_eli_crypto_hmac_update(&ctx, saltcount, sizeof(saltcount)); + g_eli_crypto_hmac_final(&ctx, md, sizeof(md)); xor(keyp, md, bsize); for(i = 1; i < iterations; i++) { - g_eli_crypto_hmac(passphrase, passlen, md, sizeof(md), - md, 0); + ctx = startpoint; + g_eli_crypto_hmac_update(&ctx, md, sizeof(md)); + g_eli_crypto_hmac_final(&ctx, md, sizeof(md)); xor(keyp, md, bsize); } } + explicit_bzero(&startpoint, sizeof(startpoint)); + explicit_bzero(&ctx, sizeof(ctx)); } #ifndef _KERNEL diff --git a/sys/geom/geom_flashmap.c b/sys/geom/geom_flashmap.c index 76dd1fadd57b..b7737b5c9a14 100644 --- a/sys/geom/geom_flashmap.c +++ b/sys/geom/geom_flashmap.c @@ -29,13 +29,9 @@ __FBSDID("$FreeBSD$"); #include -#include #include #include -#include #include -#include -#include #include #include #include @@ -43,9 +39,10 @@ __FBSDID("$FreeBSD$"); #include #include #include + #include -#define FLASHMAP_CLASS_NAME "Flashmap" +#define FLASHMAP_CLASS_NAME "Flashmap" struct g_flashmap_slice { off_t sl_start; @@ -57,21 +54,24 @@ struct g_flashmap_slice { STAILQ_HEAD(g_flashmap_head, g_flashmap_slice); -static void g_flashmap_print(struct g_flashmap_slice *); -static int g_flashmap_modify(struct g_geom *, const char *, - int, struct g_flashmap_head *); -static int g_flashmap_start(struct bio *); -static int g_flashmap_ioctl(struct g_provider *, u_long, void *, - int, struct thread *); -static void g_flashmap_dumpconf(struct sbuf *, const char *, - struct g_geom *, struct g_consumer *, struct g_provider *); -static struct g_geom *g_flashmap_taste(struct g_class *, - struct g_provider *, int); -static void g_flashmap_config(struct gctl_req *, struct g_class *, - const char *); -static int g_flashmap_load(device_t, struct g_flashmap_head *); -static int (*flash_fill_slices)(device_t, struct flash_slice *, int *) = - fdt_flash_fill_slices; +static struct { + const char *type; + flash_slicer_t slicer; +} g_flashmap_slicers[] = { + { "NAND::device", NULL }, + { "CFI::device", NULL }, + { "SPI::device", NULL }, + { "MMC::device", NULL } +}; + +static g_ioctl_t g_flashmap_ioctl; +static g_taste_t g_flashmap_taste; + +static int g_flashmap_load(device_t dev, struct g_provider *pp, + flash_slicer_t slicer, struct g_flashmap_head *head); +static int g_flashmap_modify(struct g_geom *gp, const char *devname, + int secsize, struct g_flashmap_head *slices); +static void g_flashmap_print(struct g_flashmap_slice *slice); MALLOC_DECLARE(M_FLASHMAP); MALLOC_DEFINE(M_FLASHMAP, "geom_flashmap", "GEOM flash memory slicer class"); @@ -104,7 +104,7 @@ g_flashmap_modify(struct g_geom *gp, const char *devname, int secsize, error = g_slice_config(gp, i++, G_SLICE_CONFIG_CHECK, slice->sl_start, slice->sl_end - slice->sl_start + 1, - secsize, "%ss.%s", gp->name, slice->sl_name); + secsize, FLASH_SLICES_FMT, gp->name, slice->sl_name); if (error) return (error); @@ -124,23 +124,6 @@ g_flashmap_modify(struct g_geom *gp, const char *devname, int secsize, return (0); } -static int -g_flashmap_start(struct bio *bp) -{ - - return (0); -} - -static void -g_flashmap_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp, - struct g_consumer *cp __unused, struct g_provider *pp) -{ - struct g_slicer *gsp; - - gsp = gp->softc; - g_slice_dumpconf(sb, indent, gp, cp, pp); -} - static int g_flashmap_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, struct thread *td) @@ -161,16 +144,16 @@ g_flashmap_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, return (gp->ioctl(cp->provider, cmd, data, fflag, td)); } - static struct g_geom * g_flashmap_taste(struct g_class *mp, struct g_provider *pp, int flags) { - struct g_geom *gp = NULL; + struct g_geom *gp; struct g_consumer *cp; struct g_flashmap_head head; struct g_flashmap_slice *slice, *slice_temp; + flash_slicer_t slicer; device_t dev; - int nslices, size; + int i, size; g_trace(G_T_TOPOLOGY, "flashmap_taste(%s,%s)", mp->name, pp->name); g_topology_assert(); @@ -179,27 +162,26 @@ g_flashmap_taste(struct g_class *mp, struct g_provider *pp, int flags) strcmp(pp->geom->class->name, G_DISK_CLASS_NAME) != 0) return (NULL); - gp = g_slice_new(mp, FLASH_SLICES_MAX_NUM, pp, &cp, NULL, 0, - g_flashmap_start); + gp = g_slice_new(mp, FLASH_SLICES_MAX_NUM, pp, &cp, NULL, 0, NULL); if (gp == NULL) return (NULL); STAILQ_INIT(&head); do { - size = sizeof(device_t); - if (g_io_getattr("NAND::device", cp, &size, &dev)) { + slicer = NULL; + for (i = 0; i < nitems(g_flashmap_slicers); i++) { size = sizeof(device_t); - if (g_io_getattr("CFI::device", cp, &size, &dev)) { - size = sizeof(device_t); - if (g_io_getattr("SPI::device", cp, &size, - &dev)) - break; + if (g_io_getattr(g_flashmap_slicers[i].type, cp, + &size, &dev) == 0) { + slicer = g_flashmap_slicers[i].slicer; + break; } } + if (slicer == NULL) + break; - nslices = g_flashmap_load(dev, &head); - if (nslices == 0) + if (g_flashmap_load(dev, pp, slicer, &head) == 0) break; g_flashmap_modify(gp, cp->provider->name, @@ -208,9 +190,8 @@ g_flashmap_taste(struct g_class *mp, struct g_provider *pp, int flags) g_access(cp, -1, 0, 0); - STAILQ_FOREACH_SAFE(slice, &head, sl_link, slice_temp) { + STAILQ_FOREACH_SAFE(slice, &head, sl_link, slice_temp) free(slice, M_FLASHMAP); - } if (LIST_EMPTY(&gp->provider)) { g_slice_spoiled(cp); @@ -219,25 +200,17 @@ g_flashmap_taste(struct g_class *mp, struct g_provider *pp, int flags) return (gp); } -static void -g_flashmap_config(struct gctl_req *req, struct g_class *mp, const char *verb) -{ - - gctl_error(req, "unknown config verb"); -} - static int -g_flashmap_load(device_t dev, struct g_flashmap_head *head) +g_flashmap_load(device_t dev, struct g_provider *pp, flash_slicer_t slicer, + struct g_flashmap_head *head) { struct flash_slice *slices; struct g_flashmap_slice *slice; - uint32_t i, buf_size; - int nslices = 0; + int i, nslices = 0; - buf_size = sizeof(struct flash_slice) * FLASH_SLICES_MAX_NUM; - slices = malloc(buf_size, M_FLASHMAP, M_WAITOK | M_ZERO); - if (flash_fill_slices && - flash_fill_slices(dev, slices, &nslices) == 0) { + slices = malloc(sizeof(struct flash_slice) * FLASH_SLICES_MAX_NUM, + M_FLASHMAP, M_WAITOK | M_ZERO); + if (slicer(dev, pp->name, slices, &nslices) == 0) { for (i = 0; i < nslices; i++) { slice = malloc(sizeof(struct g_flashmap_slice), M_FLASHMAP, M_WAITOK); @@ -254,19 +227,21 @@ g_flashmap_load(device_t dev, struct g_flashmap_head *head) return (nslices); } -void flash_register_slicer(int (*slicer)(device_t, struct flash_slice *, int *)) +void flash_register_slicer(flash_slicer_t slicer, u_int type, bool force) { - flash_fill_slices = slicer; + g_topology_lock(); + if (g_flashmap_slicers[type].slicer == NULL || force == TRUE) + g_flashmap_slicers[type].slicer = slicer; + g_topology_unlock(); } static struct g_class g_flashmap_class = { .name = FLASHMAP_CLASS_NAME, .version = G_VERSION, .taste = g_flashmap_taste, - .dumpconf = g_flashmap_dumpconf, .ioctl = g_flashmap_ioctl, - .ctlreq = g_flashmap_config, }; DECLARE_GEOM_CLASS(g_flashmap_class, g_flashmap); +MODULE_VERSION(g_flashmap, 0); diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index b54eb1f8a3c5..3cd48f6a1ade 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -3129,12 +3129,12 @@ pmap_protect_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t sva, vm_prot_t prot) anychanged = FALSE; retry: oldpde = newpde = *pde; - if (oldpde & PG_MANAGED) { + if ((oldpde & (PG_MANAGED | PG_M | PG_RW)) == + (PG_MANAGED | PG_M | PG_RW)) { eva = sva + NBPDR; for (va = sva, m = PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME); va < eva; va += PAGE_SIZE, m++) - if ((oldpde & (PG_M | PG_RW)) == (PG_M | PG_RW)) - vm_page_dirty(m); + vm_page_dirty(m); } if ((prot & VM_PROT_WRITE) == 0) newpde &= ~(PG_RW | PG_M); diff --git a/sys/i386/linux/linux_dummy.c b/sys/i386/linux/linux_dummy.c index 9aafeb30aabd..65f80c6f10be 100644 --- a/sys/i386/linux/linux_dummy.c +++ b/sys/i386/linux/linux_dummy.c @@ -110,7 +110,6 @@ DUMMY(inotify_init1); DUMMY(preadv); DUMMY(pwritev); /* linux 2.6.31: */ -DUMMY(rt_tgsigqueueinfo); DUMMY(perf_event_open); /* linux 2.6.33: */ DUMMY(fanotify_init); diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 7e340a9cdc9b..92bbcd72cea3 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -1081,7 +1081,7 @@ fork_return(struct thread *td, struct trapframe *frame) proc_reparent(p, dbg); sx_xunlock(&proctree_lock); td->td_dbgflags |= TDB_CHILD | TDB_SCX | TDB_FSTP; - ptracestop(td, SIGSTOP); + ptracestop(td, SIGSTOP, NULL); td->td_dbgflags &= ~(TDB_CHILD | TDB_SCX); } else { /* @@ -1102,7 +1102,7 @@ fork_return(struct thread *td, struct trapframe *frame) _STOPEVENT(p, S_SCX, td->td_dbg_sc_code); if ((p->p_ptevents & PTRACE_SCX) != 0 || (td->td_dbgflags & TDB_BORN) != 0) - ptracestop(td, SIGTRAP); + ptracestop(td, SIGTRAP, NULL); td->td_dbgflags &= ~(TDB_SCX | TDB_BORN); PROC_UNLOCK(p); } diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c index 8e3ea6d84ed0..f2aed4907b3e 100644 --- a/sys/kern/kern_mutex.c +++ b/sys/kern/kern_mutex.c @@ -374,13 +374,18 @@ int _mtx_trylock_flags_(volatile uintptr_t *c, int opts, const char *file, int line) { struct mtx *m; + struct thread *td; + uintptr_t tid, v; #ifdef LOCK_PROFILING uint64_t waittime = 0; int contested = 0; #endif int rval; + bool recursed; - if (SCHEDULER_STOPPED()) + td = curthread; + tid = (uintptr_t)td; + if (SCHEDULER_STOPPED_TD(td)) return (1); m = mtxlock2mtx(c); @@ -394,13 +399,26 @@ _mtx_trylock_flags_(volatile uintptr_t *c, int opts, const char *file, int line) ("mtx_trylock() of spin mutex %s @ %s:%d", m->lock_object.lo_name, file, line)); - if (mtx_owned(m) && ((m->lock_object.lo_flags & LO_RECURSABLE) != 0 || - (opts & MTX_RECURSE) != 0)) { - m->mtx_recurse++; - atomic_set_ptr(&m->mtx_lock, MTX_RECURSED); - rval = 1; - } else - rval = _mtx_obtain_lock(m, (uintptr_t)curthread); + rval = 1; + recursed = false; + v = MTX_UNOWNED; + for (;;) { + if (_mtx_obtain_lock_fetch(m, &v, tid)) + break; + if (v == MTX_UNOWNED) + continue; + if (v == tid && + ((m->lock_object.lo_flags & LO_RECURSABLE) != 0 || + (opts & MTX_RECURSE) != 0)) { + m->mtx_recurse++; + atomic_set_ptr(&m->mtx_lock, MTX_RECURSED); + recursed = true; + break; + } + rval = 0; + break; + } + opts &= ~MTX_RECURSE; LOCK_LOG_TRY("LOCK", &m->lock_object, opts, rval, file, line); @@ -408,10 +426,9 @@ _mtx_trylock_flags_(volatile uintptr_t *c, int opts, const char *file, int line) WITNESS_LOCK(&m->lock_object, opts | LOP_EXCLUSIVE | LOP_TRYLOCK, file, line); TD_LOCKS_INC(curthread); - if (m->mtx_recurse == 0) + if (!recursed) LOCKSTAT_PROFILE_OBTAIN_LOCK_SUCCESS(adaptive__acquire, m, contested, waittime, file, line); - } return (rval); @@ -429,7 +446,7 @@ __mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v, uintptr_t tid, int opts, const char *file, int line) #else void -__mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v, uintptr_t tid, int opts) +__mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v, uintptr_t tid) #endif { struct mtx *m; @@ -471,14 +488,18 @@ __mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v, uintptr_t tid, int opts) (opts & MTX_RECURSE) != 0, ("_mtx_lock_sleep: recursed on non-recursive mutex %s @ %s:%d\n", m->lock_object.lo_name, file, line)); +#if LOCK_DEBUG > 0 opts &= ~MTX_RECURSE; +#endif m->mtx_recurse++; atomic_set_ptr(&m->mtx_lock, MTX_RECURSED); if (LOCK_LOG_TEST(&m->lock_object, opts)) CTR1(KTR_LOCK, "_mtx_lock_sleep: %p recursing", m); return; } +#if LOCK_DEBUG > 0 opts &= ~MTX_RECURSE; +#endif #ifdef HWPMC_HOOKS PMC_SOFT_CALL( , , lock, failed); @@ -675,6 +696,14 @@ _mtx_lock_spin_cookie(volatile uintptr_t *c, uintptr_t v, uintptr_t tid, lock_delay_arg_init(&lda, &mtx_spin_delay); m = mtxlock2mtx(c); + if (__predict_false(v == MTX_UNOWNED)) + v = MTX_READ_VALUE(m); + + if (__predict_false(v == tid)) { + m->mtx_recurse++; + return; + } + if (LOCK_LOG_TEST(&m->lock_object, opts)) CTR1(KTR_LOCK, "_mtx_lock_spin: %p spinning", m); KTR_STATE1(KTR_SCHED, "thread", sched_tdname((struct thread *)tid), @@ -873,7 +902,7 @@ void __mtx_unlock_sleep(volatile uintptr_t *c, int opts, const char *file, int line) #else void -__mtx_unlock_sleep(volatile uintptr_t *c, int opts) +__mtx_unlock_sleep(volatile uintptr_t *c) #endif { struct mtx *m; diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index f39326f696f2..a206a0a4df54 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -191,11 +191,17 @@ static int proc_ctor(void *mem, int size, void *arg, int flags) { struct proc *p; + struct thread *td; p = (struct proc *)mem; SDT_PROBE4(proc, , ctor , entry, p, size, arg, flags); EVENTHANDLER_INVOKE(process_ctor, p); SDT_PROBE4(proc, , ctor , return, p, size, arg, flags); + td = FIRST_THREAD_IN_PROC(p); + if (td != NULL) { + /* Make sure all thread constructors are executed */ + EVENTHANDLER_INVOKE(thread_ctor, td); + } return (0); } @@ -220,6 +226,9 @@ proc_dtor(void *mem, int size, void *arg) #endif /* Free all OSD associated to this thread. */ osd_thread_exit(td); + + /* Make sure all thread destructors are executed */ + EVENTHANDLER_INVOKE(thread_dtor, td); } EVENTHANDLER_INVOKE(process_dtor, p); if (p->p_ksi != NULL) diff --git a/sys/kern/kern_rmlock.c b/sys/kern/kern_rmlock.c index b74253f8a7ab..70f11413ad2b 100644 --- a/sys/kern/kern_rmlock.c +++ b/sys/kern/kern_rmlock.c @@ -156,7 +156,7 @@ unlock_rm(struct lock_object *lock) */ critical_enter(); td = curthread; - pc = pcpu_find(curcpu); + pc = get_pcpu(); for (queue = pc->pc_rm_queue.rmq_next; queue != &pc->pc_rm_queue; queue = queue->rmq_next) { tracker = (struct rm_priotracker *)queue; @@ -258,7 +258,7 @@ rm_cleanIPI(void *arg) struct rmlock *rm = arg; struct rm_priotracker *tracker; struct rm_queue *queue; - pc = pcpu_find(curcpu); + pc = get_pcpu(); for (queue = pc->pc_rm_queue.rmq_next; queue != &pc->pc_rm_queue; queue = queue->rmq_next) { @@ -355,7 +355,7 @@ _rm_rlock_hard(struct rmlock *rm, struct rm_priotracker *tracker, int trylock) struct pcpu *pc; critical_enter(); - pc = pcpu_find(curcpu); + pc = get_pcpu(); /* Check if we just need to do a proper critical_exit. */ if (!CPU_ISSET(pc->pc_cpuid, &rm->rm_writecpus)) { @@ -416,7 +416,7 @@ _rm_rlock_hard(struct rmlock *rm, struct rm_priotracker *tracker, int trylock) } critical_enter(); - pc = pcpu_find(curcpu); + pc = get_pcpu(); CPU_CLR(pc->pc_cpuid, &rm->rm_writecpus); rm_tracker_add(pc, tracker); sched_pin(); @@ -641,7 +641,7 @@ _rm_rlock_debug(struct rmlock *rm, struct rm_priotracker *tracker, #ifdef INVARIANTS if (!(rm->lock_object.lo_flags & LO_RECURSABLE) && !trylock) { critical_enter(); - KASSERT(rm_trackers_present(pcpu_find(curcpu), rm, + KASSERT(rm_trackers_present(get_pcpu(), rm, curthread) == 0, ("rm_rlock: recursed on non-recursive rmlock %s @ %s:%d\n", rm->lock_object.lo_name, file, line)); @@ -771,7 +771,7 @@ _rm_assert(const struct rmlock *rm, int what, const char *file, int line) } critical_enter(); - count = rm_trackers_present(pcpu_find(curcpu), rm, curthread); + count = rm_trackers_present(get_pcpu(), rm, curthread); critical_exit(); if (count == 0) @@ -797,7 +797,7 @@ _rm_assert(const struct rmlock *rm, int what, const char *file, int line) rm->lock_object.lo_name, file, line); critical_enter(); - count = rm_trackers_present(pcpu_find(curcpu), rm, curthread); + count = rm_trackers_present(get_pcpu(), rm, curthread); critical_exit(); if (count != 0) diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c index bf74b6710499..2e703211e50c 100644 --- a/sys/kern/kern_rwlock.c +++ b/sys/kern/kern_rwlock.c @@ -293,9 +293,14 @@ int __rw_try_wlock(volatile uintptr_t *c, const char *file, int line) { struct rwlock *rw; + struct thread *td; + uintptr_t tid, v; int rval; + bool recursed; - if (SCHEDULER_STOPPED()) + td = curthread; + tid = (uintptr_t)td; + if (SCHEDULER_STOPPED_TD(td)) return (1); rw = rwlock2rw(c); @@ -306,20 +311,28 @@ __rw_try_wlock(volatile uintptr_t *c, const char *file, int line) KASSERT(rw->rw_lock != RW_DESTROYED, ("rw_try_wlock() of destroyed rwlock @ %s:%d", file, line)); - if (rw_wlocked(rw) && - (rw->lock_object.lo_flags & LO_RECURSABLE) != 0) { - rw->rw_recurse++; - atomic_set_ptr(&rw->rw_lock, RW_LOCK_WRITER_RECURSED); - rval = 1; - } else - rval = atomic_cmpset_acq_ptr(&rw->rw_lock, RW_UNLOCKED, - (uintptr_t)curthread); + rval = 1; + recursed = false; + v = RW_UNLOCKED; + for (;;) { + if (atomic_fcmpset_acq_ptr(&rw->rw_lock, &v, tid)) + break; + if (v == RW_UNLOCKED) + continue; + if (v == tid && (rw->lock_object.lo_flags & LO_RECURSABLE)) { + rw->rw_recurse++; + atomic_set_ptr(&rw->rw_lock, RW_LOCK_WRITER_RECURSED); + break; + } + rval = 0; + break; + } LOCK_LOG_TRY("WLOCK", &rw->lock_object, 0, rval, file, line); if (rval) { WITNESS_LOCK(&rw->lock_object, LOP_EXCLUSIVE | LOP_TRYLOCK, file, line); - if (!rw_recursed(rw)) + if (!recursed) LOCKSTAT_PROFILE_OBTAIN_RWLOCK_SUCCESS(rw__acquire, rw, 0, 0, file, line, LOCKSTAT_WRITER); TD_LOCKS_INC(curthread); @@ -637,13 +650,13 @@ __rw_try_rlock(volatile uintptr_t *c, const char *file, int line) ("rw_try_rlock() by idle thread %p on rwlock %s @ %s:%d", curthread, rw->lock_object.lo_name, file, line)); + x = rw->rw_lock; for (;;) { - x = rw->rw_lock; KASSERT(rw->rw_lock != RW_DESTROYED, ("rw_try_rlock() of destroyed rwlock @ %s:%d", file, line)); if (!(x & RW_LOCK_READ)) break; - if (atomic_cmpset_acq_ptr(&rw->rw_lock, x, x + RW_ONE_READER)) { + if (atomic_fcmpset_acq_ptr(&rw->rw_lock, &x, x + RW_ONE_READER)) { LOCK_LOG_TRY("RLOCK", &rw->lock_object, 0, 1, file, line); WITNESS_LOCK(&rw->lock_object, LOP_TRYLOCK, file, line); diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 4d3fe7b60249..86113a0412cb 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -278,6 +278,7 @@ sigqueue_init(sigqueue_t *list, struct proc *p) { SIGEMPTYSET(list->sq_signals); SIGEMPTYSET(list->sq_kill); + SIGEMPTYSET(list->sq_ptrace); TAILQ_INIT(&list->sq_list); list->sq_proc = p; list->sq_flags = SQ_INIT; @@ -301,9 +302,15 @@ sigqueue_get(sigqueue_t *sq, int signo, ksiginfo_t *si) if (!SIGISMEMBER(sq->sq_signals, signo)) return (0); + if (SIGISMEMBER(sq->sq_ptrace, signo)) { + count++; + SIGDELSET(sq->sq_ptrace, signo); + si->ksi_flags |= KSI_PTRACE; + } if (SIGISMEMBER(sq->sq_kill, signo)) { count++; - SIGDELSET(sq->sq_kill, signo); + if (count == 1) + SIGDELSET(sq->sq_kill, signo); } TAILQ_FOREACH_SAFE(ksi, &sq->sq_list, ksi_link, next) { @@ -347,7 +354,8 @@ sigqueue_take(ksiginfo_t *ksi) if (kp->ksi_signo == ksi->ksi_signo) break; } - if (kp == NULL && !SIGISMEMBER(sq->sq_kill, ksi->ksi_signo)) + if (kp == NULL && !SIGISMEMBER(sq->sq_kill, ksi->ksi_signo) && + !SIGISMEMBER(sq->sq_ptrace, ksi->ksi_signo)) SIGDELSET(sq->sq_signals, ksi->ksi_signo); } @@ -360,6 +368,10 @@ sigqueue_add(sigqueue_t *sq, int signo, ksiginfo_t *si) KASSERT(sq->sq_flags & SQ_INIT, ("sigqueue not inited")); + /* + * SIGKILL/SIGSTOP cannot be caught or masked, so take the fast path + * for these signals. + */ if (signo == SIGKILL || signo == SIGSTOP || si == NULL) { SIGADDSET(sq->sq_kill, signo); goto out_set_bit; @@ -398,16 +410,19 @@ sigqueue_add(sigqueue_t *sq, int signo, ksiginfo_t *si) ksi->ksi_sigq = sq; } - if ((si->ksi_flags & KSI_TRAP) != 0 || - (si->ksi_flags & KSI_SIGQ) == 0) { - if (ret != 0) + if (ret != 0) { + if ((si->ksi_flags & KSI_PTRACE) != 0) { + SIGADDSET(sq->sq_ptrace, signo); + ret = 0; + goto out_set_bit; + } else if ((si->ksi_flags & KSI_TRAP) != 0 || + (si->ksi_flags & KSI_SIGQ) == 0) { SIGADDSET(sq->sq_kill, signo); - ret = 0; - goto out_set_bit; - } - - if (ret != 0) + ret = 0; + goto out_set_bit; + } return (ret); + } out_set_bit: SIGADDSET(sq->sq_signals, signo); @@ -434,6 +449,7 @@ sigqueue_flush(sigqueue_t *sq) SIGEMPTYSET(sq->sq_signals); SIGEMPTYSET(sq->sq_kill); + SIGEMPTYSET(sq->sq_ptrace); } static void @@ -466,6 +482,11 @@ sigqueue_move_set(sigqueue_t *src, sigqueue_t *dst, const sigset_t *set) SIGSETOR(dst->sq_kill, tmp); SIGSETNAND(src->sq_kill, tmp); + tmp = src->sq_ptrace; + SIGSETAND(tmp, *set); + SIGSETOR(dst->sq_ptrace, tmp); + SIGSETNAND(src->sq_ptrace, tmp); + tmp = src->sq_signals; SIGSETAND(tmp, *set); SIGSETOR(dst->sq_signals, tmp); @@ -502,6 +523,7 @@ sigqueue_delete_set(sigqueue_t *sq, const sigset_t *set) } } SIGSETNAND(sq->sq_kill, *set); + SIGSETNAND(sq->sq_ptrace, *set); SIGSETNAND(sq->sq_signals, *set); } @@ -2500,69 +2522,116 @@ sig_suspend_threads(struct thread *td, struct proc *p, int sending) return (wakeup_swapper); } +/* + * Stop the process for an event deemed interesting to the debugger. If si is + * non-NULL, this is a signal exchange; the new signal requested by the + * debugger will be returned for handling. If si is NULL, this is some other + * type of interesting event. The debugger may request a signal be delivered in + * that case as well, however it will be deferred until it can be handled. + */ int -ptracestop(struct thread *td, int sig) +ptracestop(struct thread *td, int sig, ksiginfo_t *si) { struct proc *p = td->td_proc; + struct thread *td2; + ksiginfo_t ksi; + int prop; PROC_LOCK_ASSERT(p, MA_OWNED); KASSERT(!(p->p_flag & P_WEXIT), ("Stopping exiting process")); WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, &p->p_mtx.lock_object, "Stopping for traced signal"); - td->td_dbgflags |= TDB_XSIG; td->td_xsig = sig; - CTR4(KTR_PTRACE, "ptracestop: tid %d (pid %d) flags %#x sig %d", - td->td_tid, p->p_pid, td->td_dbgflags, sig); - PROC_SLOCK(p); - while ((p->p_flag & P_TRACED) && (td->td_dbgflags & TDB_XSIG)) { - if (p->p_flag & P_SINGLE_EXIT && - !(td->td_dbgflags & TDB_EXIT)) { - /* - * Ignore ptrace stops except for thread exit - * events when the process exits. - */ - td->td_dbgflags &= ~TDB_XSIG; - PROC_SUNLOCK(p); - return (sig); - } - /* - * Make wait(2) work. Ensure that right after the - * attach, the thread which was decided to become the - * leader of attach gets reported to the waiter. - * Otherwise, just avoid overwriting another thread's - * assignment to p_xthread. If another thread has - * already set p_xthread, the current thread will get - * a chance to report itself upon the next iteration. - */ - if ((td->td_dbgflags & TDB_FSTP) != 0 || - ((p->p_flag2 & P2_PTRACE_FSTP) == 0 && - p->p_xthread == NULL)) { - p->p_xsig = sig; - p->p_xthread = td; - td->td_dbgflags &= ~TDB_FSTP; - p->p_flag2 &= ~P2_PTRACE_FSTP; - p->p_flag |= P_STOPPED_SIG | P_STOPPED_TRACE; - sig_suspend_threads(td, p, 0); - } - if ((td->td_dbgflags & TDB_STOPATFORK) != 0) { - td->td_dbgflags &= ~TDB_STOPATFORK; - cv_broadcast(&p->p_dbgwait); - } -stopme: - thread_suspend_switch(td, p); - if (p->p_xthread == td) - p->p_xthread = NULL; - if (!(p->p_flag & P_TRACED)) - break; - if (td->td_dbgflags & TDB_SUSPEND) { - if (p->p_flag & P_SINGLE_EXIT) + if (si == NULL || (si->ksi_flags & KSI_PTRACE) == 0) { + td->td_dbgflags |= TDB_XSIG; + CTR4(KTR_PTRACE, "ptracestop: tid %d (pid %d) flags %#x sig %d", + td->td_tid, p->p_pid, td->td_dbgflags, sig); + PROC_SLOCK(p); + while ((p->p_flag & P_TRACED) && (td->td_dbgflags & TDB_XSIG)) { + if (P_KILLED(p)) { + /* + * Ensure that, if we've been PT_KILLed, the + * exit status reflects that. Another thread + * may also be in ptracestop(), having just + * received the SIGKILL, but this thread was + * unsuspended first. + */ + td->td_dbgflags &= ~TDB_XSIG; + td->td_xsig = SIGKILL; + p->p_ptevents = 0; break; - goto stopme; + } + if (p->p_flag & P_SINGLE_EXIT && + !(td->td_dbgflags & TDB_EXIT)) { + /* + * Ignore ptrace stops except for thread exit + * events when the process exits. + */ + td->td_dbgflags &= ~TDB_XSIG; + PROC_SUNLOCK(p); + return (0); + } + + /* + * Make wait(2) work. Ensure that right after the + * attach, the thread which was decided to become the + * leader of attach gets reported to the waiter. + * Otherwise, just avoid overwriting another thread's + * assignment to p_xthread. If another thread has + * already set p_xthread, the current thread will get + * a chance to report itself upon the next iteration. + */ + if ((td->td_dbgflags & TDB_FSTP) != 0 || + ((p->p_flag2 & P2_PTRACE_FSTP) == 0 && + p->p_xthread == NULL)) { + p->p_xsig = sig; + p->p_xthread = td; + td->td_dbgflags &= ~TDB_FSTP; + p->p_flag2 &= ~P2_PTRACE_FSTP; + p->p_flag |= P_STOPPED_SIG | P_STOPPED_TRACE; + sig_suspend_threads(td, p, 0); + } + if ((td->td_dbgflags & TDB_STOPATFORK) != 0) { + td->td_dbgflags &= ~TDB_STOPATFORK; + cv_broadcast(&p->p_dbgwait); + } +stopme: + thread_suspend_switch(td, p); + if (p->p_xthread == td) + p->p_xthread = NULL; + if (!(p->p_flag & P_TRACED)) + break; + if (td->td_dbgflags & TDB_SUSPEND) { + if (p->p_flag & P_SINGLE_EXIT) + break; + goto stopme; + } } + PROC_SUNLOCK(p); } - PROC_SUNLOCK(p); + + if (si != NULL && sig == td->td_xsig) { + /* Parent wants us to take the original signal unchanged. */ + si->ksi_flags |= KSI_HEAD; + if (sigqueue_add(&td->td_sigqueue, sig, si) != 0) + si->ksi_signo = 0; + } else if (td->td_xsig != 0) { + /* + * If parent wants us to take a new signal, then it will leave + * it in td->td_xsig; otherwise we just look for signals again. + */ + ksiginfo_init(&ksi); + ksi.ksi_signo = td->td_xsig; + ksi.ksi_flags |= KSI_PTRACE; + prop = sigprop(td->td_xsig); + td2 = sigtd(p, td->td_xsig, prop); + tdsendsignal(p, td2, td->td_xsig, &ksi); + if (td != td2) + return (0); + } + return (td->td_xsig); } @@ -2720,7 +2789,7 @@ issignal(struct thread *td) struct sigacts *ps; struct sigqueue *queue; sigset_t sigpending; - int sig, prop, newsig; + int sig, prop; p = td->td_proc; ps = p->p_sigacts; @@ -2783,47 +2852,18 @@ issignal(struct thread *td) } mtx_unlock(&ps->ps_mtx); - newsig = ptracestop(td, sig); + sig = ptracestop(td, sig, &td->td_dbgksi); mtx_lock(&ps->ps_mtx); - if (sig != newsig) { - - /* - * If parent wants us to take the signal, - * then it will leave it in p->p_xsig; - * otherwise we just look for signals again. - */ - if (newsig == 0) - continue; - sig = newsig; - - /* - * Put the new signal into td_sigqueue. If the - * signal is being masked, look for other - * signals. - */ - sigqueue_add(queue, sig, NULL); - if (SIGISMEMBER(td->td_sigmask, sig)) - continue; - signotify(td); - } else { - if (td->td_dbgksi.ksi_signo != 0) { - td->td_dbgksi.ksi_flags |= KSI_HEAD; - if (sigqueue_add(&td->td_sigqueue, sig, - &td->td_dbgksi) != 0) - td->td_dbgksi.ksi_signo = 0; - } - if (td->td_dbgksi.ksi_signo == 0) - sigqueue_add(&td->td_sigqueue, sig, - NULL); - } - - /* + /* + * Keep looking if the debugger discarded the signal + * or replaced it with a masked signal. + * * If the traced bit got turned off, go back up * to the top to rescan signals. This ensures * that p_sig* and p_sigact are consistent. */ - if ((p->p_flag & P_TRACED) == 0) + if (sig == 0 || (p->p_flag & P_TRACED) == 0) continue; } diff --git a/sys/kern/kern_sx.c b/sys/kern/kern_sx.c index b072e8babce0..3236e03885dd 100644 --- a/sys/kern/kern_sx.c +++ b/sys/kern/kern_sx.c @@ -269,13 +269,13 @@ sx_try_slock_(struct sx *sx, const char *file, int line) ("sx_try_slock() by idle thread %p on sx %s @ %s:%d", curthread, sx->lock_object.lo_name, file, line)); + x = sx->sx_lock; for (;;) { - x = sx->sx_lock; KASSERT(x != SX_LOCK_DESTROYED, ("sx_try_slock() of destroyed sx @ %s:%d", file, line)); if (!(x & SX_LOCK_SHARED)) break; - if (atomic_cmpset_acq_ptr(&sx->sx_lock, x, x + SX_ONE_SHARER)) { + if (atomic_fcmpset_acq_ptr(&sx->sx_lock, &x, x + SX_ONE_SHARER)) { LOCK_LOG_TRY("SLOCK", &sx->lock_object, 0, 1, file, line); WITNESS_LOCK(&sx->lock_object, LOP_TRYLOCK, file, line); LOCKSTAT_PROFILE_OBTAIN_RWLOCK_SUCCESS(sx__acquire, @@ -322,9 +322,14 @@ _sx_xlock(struct sx *sx, int opts, const char *file, int line) int sx_try_xlock_(struct sx *sx, const char *file, int line) { + struct thread *td; + uintptr_t tid, x; int rval; + bool recursed; - if (SCHEDULER_STOPPED()) + td = curthread; + tid = (uintptr_t)td; + if (SCHEDULER_STOPPED_TD(td)) return (1); KASSERT(kdb_active != 0 || !TD_IS_IDLETHREAD(curthread), @@ -333,19 +338,28 @@ sx_try_xlock_(struct sx *sx, const char *file, int line) KASSERT(sx->sx_lock != SX_LOCK_DESTROYED, ("sx_try_xlock() of destroyed sx @ %s:%d", file, line)); - if (sx_xlocked(sx) && - (sx->lock_object.lo_flags & LO_RECURSABLE) != 0) { - sx->sx_recurse++; - atomic_set_ptr(&sx->sx_lock, SX_LOCK_RECURSED); - rval = 1; - } else - rval = atomic_cmpset_acq_ptr(&sx->sx_lock, SX_LOCK_UNLOCKED, - (uintptr_t)curthread); + rval = 1; + recursed = false; + x = SX_LOCK_UNLOCKED; + for (;;) { + if (atomic_fcmpset_acq_ptr(&sx->sx_lock, &x, tid)) + break; + if (x == SX_LOCK_UNLOCKED) + continue; + if (x == tid && (sx->lock_object.lo_flags & LO_RECURSABLE)) { + sx->sx_recurse++; + atomic_set_ptr(&sx->sx_lock, SX_LOCK_RECURSED); + break; + } + rval = 0; + break; + } + LOCK_LOG_TRY("XLOCK", &sx->lock_object, 0, rval, file, line); if (rval) { WITNESS_LOCK(&sx->lock_object, LOP_EXCLUSIVE | LOP_TRYLOCK, file, line); - if (!sx_recursed(sx)) + if (!recursed) LOCKSTAT_PROFILE_OBTAIN_RWLOCK_SUCCESS(sx__acquire, sx, 0, 0, file, line, LOCKSTAT_WRITER); TD_LOCKS_INC(curthread); diff --git a/sys/kern/kern_thr.c b/sys/kern/kern_thr.c index 55c4ae4007ce..f352cd6736c2 100644 --- a/sys/kern/kern_thr.c +++ b/sys/kern/kern_thr.c @@ -356,7 +356,7 @@ kern_thr_exit(struct thread *td) p->p_pendingexits++; td->td_dbgflags |= TDB_EXIT; if (p->p_ptevents & PTRACE_LWP) - ptracestop(td, SIGTRAP); + ptracestop(td, SIGTRAP, NULL); PROC_UNLOCK(p); tidhash_remove(td); PROC_LOCK(p); diff --git a/sys/kern/makesyscalls.sh b/sys/kern/makesyscalls.sh index e7cf7a052439..8291c6fa5c17 100644 --- a/sys/kern/makesyscalls.sh +++ b/sys/kern/makesyscalls.sh @@ -116,6 +116,9 @@ sed -e ' split(capenabled_string, capenabled, ","); + printf "\n/* The casts are bogus but will do for now. */\n" > sysent + printf "struct sysent %s[] = {\n",switchname > sysent + printf "/*\n * System call switch table.\n *\n" > syssw printf " * DO NOT EDIT-- this file is automatically generated.\n" > syssw printf " * $%s$\n", "FreeBSD" > syssw @@ -125,35 +128,6 @@ sed -e ' printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysarg printf " * $%s$\n", "FreeBSD" > sysarg printf " */\n\n" > sysarg - - printf "\n#ifdef %s\n\n", compat > syscompat - printf "\n#ifdef %s\n\n", compat4 > syscompat4 - printf "\n#ifdef %s\n\n", compat6 > syscompat6 - printf "\n#ifdef %s\n\n", compat7 > syscompat7 - printf "\n#ifdef %s\n\n", compat10 > syscompat10 - - printf "/*\n * System call names.\n *\n" > sysnames - printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames - printf " * $%s$\n", "FreeBSD" > sysnames - printf " */\n\n" > sysnames - - printf "/*\n * System call numbers.\n *\n" > syshdr - printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr - printf " * $%s$\n", "FreeBSD" > syshdr - printf " */\n\n" > syshdr - - printf "# FreeBSD system call object files.\n" > sysmk - printf "# DO NOT EDIT-- this file is automatically generated.\n" > sysmk - printf "# $%s$\n", "FreeBSD" > sysmk - - printf "/*\n * System call argument to DTrace register array converstion.\n *\n" > systrace - printf " * DO NOT EDIT-- this file is automatically generated.\n" > systrace - printf " * $%s$\n", "FreeBSD" > systrace - } - NR == 1 { - printf "\n/* The casts are bogus but will do for now. */\n" > sysent - printf "struct sysent %s[] = {\n",switchname > sysent - printf "#ifndef %s\n", sysproto_h > sysarg printf "#define\t%s\n\n", sysproto_h > sysarg printf "#include \n" > sysarg @@ -176,10 +150,31 @@ sed -e ' printf "#define\tPADR_(t)\t0\n" > sysarg printf "#endif\n\n" > sysarg + printf "\n#ifdef %s\n\n", compat > syscompat + printf "\n#ifdef %s\n\n", compat4 > syscompat4 + printf "\n#ifdef %s\n\n", compat6 > syscompat6 + printf "\n#ifdef %s\n\n", compat7 > syscompat7 + printf "\n#ifdef %s\n\n", compat10 > syscompat10 + + printf "/*\n * System call names.\n *\n" > sysnames + printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames + printf " * $%s$\n", "FreeBSD" > sysnames + printf " */\n\n" > sysnames printf "const char *%s[] = {\n", namesname > sysnames + printf "/*\n * System call numbers.\n *\n" > syshdr + printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr + printf " * $%s$\n", "FreeBSD" > syshdr + printf " */\n\n" > syshdr + + printf "# FreeBSD system call object files.\n" > sysmk + printf "# DO NOT EDIT-- this file is automatically generated.\n" > sysmk + printf "# $%s$\n", "FreeBSD" > sysmk printf "MIASM = " > sysmk + printf "/*\n * System call argument to DTrace register array converstion.\n *\n" > systrace + printf " * DO NOT EDIT-- this file is automatically generated.\n" > systrace + printf " * $%s$\n", "FreeBSD" > systrace printf " * This file is part of the DTrace syscall provider.\n */\n\n" > systrace printf "static void\nsystrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)\n{\n" > systrace printf "\tint64_t *iarg = (int64_t *) uarg;\n" > systrace @@ -190,7 +185,8 @@ sed -e ' printf "static void\nsystrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)\n{\n\tconst char *p = NULL;\n" > systraceret printf "\tswitch (sysnum) {\n" > systraceret - + } + NR == 1 { next } NF == 0 || $1 ~ /^;/ { diff --git a/sys/kern/subr_syscall.c b/sys/kern/subr_syscall.c index 822976edf392..2bcad3449dad 100644 --- a/sys/kern/subr_syscall.c +++ b/sys/kern/subr_syscall.c @@ -88,7 +88,7 @@ syscallenter(struct thread *td, struct syscall_args *sa) td->td_dbg_sc_code = sa->code; td->td_dbg_sc_narg = sa->narg; if (p->p_ptevents & PTRACE_SCE) - ptracestop((td), SIGTRAP); + ptracestop((td), SIGTRAP, NULL); PROC_UNLOCK(p); } if (td->td_dbgflags & TDB_USERWR) { @@ -222,7 +222,7 @@ syscallret(struct thread *td, int error, struct syscall_args *sa) if (traced && ((td->td_dbgflags & (TDB_FORK | TDB_EXEC)) != 0 || (p->p_ptevents & PTRACE_SCX) != 0)) - ptracestop(td, SIGTRAP); + ptracestop(td, SIGTRAP, NULL); td->td_dbgflags &= ~(TDB_SCX | TDB_EXEC | TDB_FORK); PROC_UNLOCK(p); } @@ -259,7 +259,7 @@ syscallret(struct thread *td, int error, struct syscall_args *sa) if (td->td_dbgflags & TDB_VFORK) { PROC_LOCK(p); if (p->p_ptevents & PTRACE_VFORK) - ptracestop(td, SIGTRAP); + ptracestop(td, SIGTRAP, NULL); td->td_dbgflags &= ~TDB_VFORK; PROC_UNLOCK(p); } diff --git a/sys/kern/subr_terminal.c b/sys/kern/subr_terminal.c index 76c6cfbf6453..5ac6a03b8979 100644 --- a/sys/kern/subr_terminal.c +++ b/sys/kern/subr_terminal.c @@ -375,7 +375,10 @@ termtty_outwakeup(struct tty *tp) TERMINAL_UNLOCK_TTY(tm); } - tm->tm_class->tc_done(tm); + TERMINAL_LOCK_TTY(tm); + if (!(tm->tm_flags & TF_MUTE)) + tm->tm_class->tc_done(tm); + TERMINAL_UNLOCK_TTY(tm); if (flags & TF_BELL) tm->tm_class->tc_bell(tm); } @@ -545,10 +548,9 @@ termcn_cnputc(struct consdev *cp, int c) teken_set_curattr(&tm->tm_emulator, &kernel_message); teken_input(&tm->tm_emulator, &cv, 1); teken_set_curattr(&tm->tm_emulator, &backup); + tm->tm_class->tc_done(tm); } TERMINAL_UNLOCK_CONS(tm); - - tm->tm_class->tc_done(tm); } /* diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index 69a3e4b7a45a..ded874ac9819 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -1125,6 +1125,16 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) td2->td_dbgflags &= ~TDB_XSIG; td2->td_xsig = data; + /* + * P_WKILLED is insurance that a PT_KILL/SIGKILL always + * works immediately, even if another thread is + * unsuspended first and attempts to handle a different + * signal or if the POSIX.1b style signal queue cannot + * accommodate any new signals. + */ + if (data == SIGKILL) + p->p_flag |= P_WKILLED; + if (req == PT_DETACH) { FOREACH_THREAD_IN_PROC(p, td3) td3->td_dbgflags &= ~TDB_SUSPEND; diff --git a/sys/kern/uipc_mqueue.c b/sys/kern/uipc_mqueue.c index 488650190a3f..354564b080fe 100644 --- a/sys/kern/uipc_mqueue.c +++ b/sys/kern/uipc_mqueue.c @@ -714,7 +714,9 @@ do_recycle(void *context, int pending __unused) { struct vnode *vp = (struct vnode *)context; + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); vrecycle(vp); + VOP_UNLOCK(vp, 0); vdrop(vp); } diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c index 5c0d1b8d4775..d60f11c36061 100644 --- a/sys/kern/vfs_default.c +++ b/sys/kern/vfs_default.c @@ -718,8 +718,8 @@ vop_stdfsync(ap) * to write them out. */ TAILQ_FOREACH(bp, &bo->bo_dirty.bv_hd, b_bobufs) - if ((error = bp->b_error) == 0) - continue; + if ((error = bp->b_error) != 0) + break; if (error == 0 && --maxretry >= 0) goto loop1; error = EAGAIN; diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index e8f142049c50..1329dc32fa04 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -2430,9 +2430,11 @@ vn_mmap(struct file *fp, vm_map_t map, vm_offset_t *addr, vm_size_t size, * proc does a setuid? */ mp = vp->v_mount; - if (mp != NULL && (mp->mnt_flag & MNT_NOEXEC) != 0) + if (mp != NULL && (mp->mnt_flag & MNT_NOEXEC) != 0) { maxprot = VM_PROT_NONE; - else + if ((prot & VM_PROT_EXECUTE) != 0) + return (EACCES); + } else maxprot = VM_PROT_EXECUTE; if ((fp->f_flag & FREAD) != 0) maxprot |= VM_PROT_READ; diff --git a/sys/libkern/iconv_xlat16.c b/sys/libkern/iconv_xlat16.c index 630cbd3aff76..c423413b0b68 100644 --- a/sys/libkern/iconv_xlat16.c +++ b/sys/libkern/iconv_xlat16.c @@ -268,7 +268,7 @@ iconv_xlat16_conv(void *d2p, const char **inbuf, * there is a case that inbuf char is a single * byte char while inlen == 2 */ - if ((u_char)*(src+1) == 0 && !nullin ) { + if ((u_char)*(src+1) == '\0' && !nullin ) { src++; ir--; } else { diff --git a/sys/mips/atheros/ar531x/apb.c b/sys/mips/atheros/ar531x/apb.c index a20ccc308705..cbf6776c6408 100644 --- a/sys/mips/atheros/ar531x/apb.c +++ b/sys/mips/atheros/ar531x/apb.c @@ -329,7 +329,7 @@ apb_alloc_resource(device_t bus, device_t child, int type, int *rid, } rv = rman_reserve_resource(rm, start, end, count, flags, child); - if (rv == 0) { + if (rv == NULL) { printf("%s: could not reserve resource %d\n", __func__, type); return (0); } diff --git a/sys/mips/conf/BERI_DE4_BASE b/sys/mips/conf/BERI_DE4_BASE index f2c24c8949a0..be1f74c93e72 100644 --- a/sys/mips/conf/BERI_DE4_BASE +++ b/sys/mips/conf/BERI_DE4_BASE @@ -7,7 +7,7 @@ # $FreeBSD$ # -include "BERI_TEMPLATE" +include "std.BERI" ident BERI_DE4_BASE diff --git a/sys/mips/conf/BERI_NETFPGA_MDROOT b/sys/mips/conf/BERI_NETFPGA_MDROOT index 307f579cc285..5014c28dca2e 100644 --- a/sys/mips/conf/BERI_NETFPGA_MDROOT +++ b/sys/mips/conf/BERI_NETFPGA_MDROOT @@ -6,7 +6,7 @@ # $FreeBSD$ # -include "BERI_TEMPLATE" +include "std.BERI" ident BERI_NETFPGA_MDROOT diff --git a/sys/mips/conf/BERI_SIM_BASE b/sys/mips/conf/BERI_SIM_BASE index bedc9cbac570..bbf56041d0d4 100644 --- a/sys/mips/conf/BERI_SIM_BASE +++ b/sys/mips/conf/BERI_SIM_BASE @@ -6,7 +6,7 @@ # $FreeBSD$ # -include "BERI_TEMPLATE" +include "std.BERI" options FDT options FDT_DTB_STATIC diff --git a/sys/mips/conf/BERI_SOCKIT b/sys/mips/conf/BERI_SOCKIT index ecc5bfe1edfd..c5405d38df9b 100644 --- a/sys/mips/conf/BERI_SOCKIT +++ b/sys/mips/conf/BERI_SOCKIT @@ -7,7 +7,7 @@ # $FreeBSD$ # -include "BERI_TEMPLATE" +include "std.BERI" ident BERI_SOCKIT diff --git a/sys/mips/conf/BERI_TEMPLATE b/sys/mips/conf/std.BERI similarity index 98% rename from sys/mips/conf/BERI_TEMPLATE rename to sys/mips/conf/std.BERI index 5371d935fa52..0e97cbcaafdc 100644 --- a/sys/mips/conf/BERI_TEMPLATE +++ b/sys/mips/conf/std.BERI @@ -7,8 +7,6 @@ # $FreeBSD$ # -ident BERI_TEMPLATE - machine mips mips64 cpu CPU_BERI diff --git a/sys/mips/conf/std.MALTA b/sys/mips/conf/std.MALTA index 3731eadf6ec4..d745461d7d1e 100644 --- a/sys/mips/conf/std.MALTA +++ b/sys/mips/conf/std.MALTA @@ -26,6 +26,8 @@ options NFSCL #Network Filesystem Client options NFS_ROOT #NFS usable as /, requires NFSCL options PSEUDOFS #Pseudo-filesystem framework options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions +options CAPABILITY_MODE # Capsicum capability mode +options CAPABILITIES # Capsicum capabilities options TMPFS #Efficient memory filesystem diff --git a/sys/mips/include/pcpu.h b/sys/mips/include/pcpu.h index d4f240115fce..77a3983c8872 100644 --- a/sys/mips/include/pcpu.h +++ b/sys/mips/include/pcpu.h @@ -39,16 +39,17 @@ struct pmap *pc_curpmap; /* pmap of curthread */ \ u_int32_t pc_next_asid; /* next ASID to alloc */ \ u_int32_t pc_asid_generation; /* current ASID generation */ \ - u_int pc_pending_ipis; /* IPIs pending to this CPU */ + u_int pc_pending_ipis; /* IPIs pending to this CPU */ \ + struct pcpu *pc_self; /* globally-uniqe self pointer */ #ifdef __mips_n64 #define PCPU_MD_MIPS64_FIELDS \ PCPU_MD_COMMON_FIELDS \ - char __pad[61] + char __pad[53] #else #define PCPU_MD_MIPS32_FIELDS \ PCPU_MD_COMMON_FIELDS \ - char __pad[193] + char __pad[189] #endif #ifdef __mips_n64 @@ -65,6 +66,13 @@ extern char pcpu_space[MAXCPU][PAGE_SIZE * 2]; extern struct pcpu *pcpup; #define PCPUP pcpup +/* + * Since we use a wired TLB entry to map the same VA to a different + * physical page for each CPU, get_pcpu() must use the pc_self + * field to obtain a globally-unique pointer. + */ +#define get_pcpu() (PCPUP->pc_self) + #define PCPU_ADD(member, value) (PCPUP->pc_ ## member += (value)) #define PCPU_GET(member) (PCPUP->pc_ ## member) #define PCPU_INC(member) PCPU_ADD(member, 1) diff --git a/sys/mips/mips/machdep.c b/sys/mips/mips/machdep.c index 3d44cdad0e5f..9b375e0e55f6 100644 --- a/sys/mips/mips/machdep.c +++ b/sys/mips/mips/machdep.c @@ -475,6 +475,7 @@ cpu_pcpu_init(struct pcpu *pcpu, int cpuid, size_t size) pcpu->pc_next_asid = 1; pcpu->pc_asid_generation = 1; + pcpu->pc_self = pcpu; #ifdef SMP if ((vm_offset_t)pcpup >= VM_MIN_KERNEL_ADDRESS && (vm_offset_t)pcpup <= VM_MAX_KERNEL_ADDRESS) { diff --git a/sys/modules/dtb/imx6/Makefile b/sys/modules/dtb/imx6/Makefile index 9e83ab6ce114..72166d36c5a2 100644 --- a/sys/modules/dtb/imx6/Makefile +++ b/sys/modules/dtb/imx6/Makefile @@ -5,6 +5,11 @@ DTS= \ imx6q-cubox-i.dts \ imx6dl-hummingboard.dts \ imx6q-hummingboard.dts \ + imx6dl-nitrogen6x.dts \ + imx6q-nitrogen6_max.dts \ + imx6q-nitrogen6x.dts \ + imx6qp-nitrogen6_max.dts \ + imx6sx-nitrogen6sx.dts \ imx6dl-riotboard.dts \ imx6dl-wandboard.dts \ imx6q-wandboard.dts diff --git a/sys/modules/geom/Makefile b/sys/modules/geom/Makefile index 8d7e3c6deb3f..7b79f53a13af 100644 --- a/sys/modules/geom/Makefile +++ b/sys/modules/geom/Makefile @@ -7,6 +7,7 @@ SUBDIR= geom_bde \ geom_cache \ geom_concat \ geom_eli \ + geom_flashmap \ geom_gate \ geom_journal \ geom_label \ diff --git a/sys/modules/geom/geom_flashmap/Makefile b/sys/modules/geom/geom_flashmap/Makefile new file mode 100644 index 000000000000..d475860fefe6 --- /dev/null +++ b/sys/modules/geom/geom_flashmap/Makefile @@ -0,0 +1,8 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/../../../geom + +KMOD= geom_flashmap +SRCS= geom_flashmap.c + +.include diff --git a/sys/modules/iwmfw/Makefile b/sys/modules/iwmfw/Makefile index 42027a0f3388..d38f54241530 100644 --- a/sys/modules/iwmfw/Makefile +++ b/sys/modules/iwmfw/Makefile @@ -1,5 +1,5 @@ # $FreeBSD$ -SUBDIR= iwm3160fw iwm7260fw iwm7265fw iwm8000Cfw +SUBDIR= iwm3160fw iwm7260fw iwm7265fw iwm8000Cfw iwm7265Dfw .include diff --git a/sys/modules/iwmfw/iwm7265Dfw/Makefile b/sys/modules/iwmfw/iwm7265Dfw/Makefile new file mode 100644 index 000000000000..2033d5e0879b --- /dev/null +++ b/sys/modules/iwmfw/iwm7265Dfw/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +KMOD= iwm7265Dfw +IMG= iwm-7265D-17 + +.include diff --git a/sys/modules/linux/Makefile b/sys/modules/linux/Makefile index d1707c92e91e..d37fcf57d122 100644 --- a/sys/modules/linux/Makefile +++ b/sys/modules/linux/Makefile @@ -71,7 +71,7 @@ ${VDSO}.so: linux${SFX}_locore.o .endif linux${SFX}_genassym.o: - ${CC} -c ${CFLAGS:N-fno-common} ${.IMPSRC} + ${CC} -c ${CFLAGS:N-flto:N-fno-common} ${.IMPSRC} .if !defined(KERNBUILDDIR) .if defined(KTR) diff --git a/sys/modules/linux64/Makefile b/sys/modules/linux64/Makefile index 1162b5597776..a5c8723b1b62 100644 --- a/sys/modules/linux64/Makefile +++ b/sys/modules/linux64/Makefile @@ -44,7 +44,7 @@ linux_support.o: assym.s linux_assym.h ${.IMPSRC} -o ${.TARGET} linux_genassym.o: - ${CC} -c ${CFLAGS:N-fno-common} ${.IMPSRC} + ${CC} -c ${CFLAGS:N-flto:N-fno-common} ${.IMPSRC} .if !defined(KERNBUILDDIR) .if defined(DEBUG) diff --git a/sys/modules/linuxkpi/Makefile b/sys/modules/linuxkpi/Makefile index bcfb03a6ae3e..64f88c5ec872 100644 --- a/sys/modules/linuxkpi/Makefile +++ b/sys/modules/linuxkpi/Makefile @@ -4,8 +4,13 @@ KMOD= linuxkpi SRCS= linux_kmod.c \ linux_compat.c \ + linux_current.c \ + linux_kthread.c \ + linux_page.c \ linux_pci.c \ linux_radix.c \ + linux_rcu.c \ + linux_tasklet.c \ linux_idr.c \ linux_usb.c @@ -17,5 +22,6 @@ SRCS+= bus_if.h \ opt_usb.h CFLAGS+= -I${.CURDIR}/../../compat/linuxkpi/common/include +CFLAGS+= -I${.CURDIR}/../../contrib/ck/include .include diff --git a/sys/modules/mem/Makefile b/sys/modules/mem/Makefile index 3710c5dca630..0e47a286d491 100644 --- a/sys/modules/mem/Makefile +++ b/sys/modules/mem/Makefile @@ -3,14 +3,17 @@ .PATH: ${.CURDIR}/../../dev/mem .PATH: ${.CURDIR}/../../${MACHINE}/${MACHINE} .PATH: ${.CURDIR}/../../${MACHINE_CPUARCH}/${MACHINE_CPUARCH} +.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" +.PATH: ${.CURDIR}/../../x86/x86 +.endif KMOD= mem SRCS= mem.c memdev.c memutil.c .if ${MACHINE_CPUARCH} == "i386" -SRCS+= i686_mem.c k6_mem.c +SRCS+= x86_mem.c k6_mem.c .endif .if ${MACHINE_CPUARCH} == "amd64" -SRCS+= amd64_mem.c +SRCS+= x86_mem.c .endif SRCS+= bus_if.h device_if.h diff --git a/sys/modules/svr4/Makefile b/sys/modules/svr4/Makefile index c152b38b4e16..52fa3d70cf50 100644 --- a/sys/modules/svr4/Makefile +++ b/sys/modules/svr4/Makefile @@ -22,7 +22,7 @@ svr4_locore.o: svr4_locore.s svr4_assym.h ${.IMPSRC} -o ${.TARGET} svr4_genassym.o: svr4_genassym.c svr4.h - ${CC} -c ${CFLAGS:N-fno-common} ${.IMPSRC} + ${CC} -c ${CFLAGS:N-flto:N-fno-common} ${.IMPSRC} .if !defined(KERNBUILDDIR) && defined(DEBUG) opt_svr4.h: diff --git a/sys/modules/usb/Makefile b/sys/modules/usb/Makefile index df85000234d1..83cf2a5083e8 100644 --- a/sys/modules/usb/Makefile +++ b/sys/modules/usb/Makefile @@ -47,7 +47,7 @@ SUBDIR = usb SUBDIR += ${_dwc_otg} ehci ${_musb} ohci uhci xhci ${_uss820dci} ${_at91dci} \ ${_atmegadci} ${_avr32dci} ${_rsu} ${_rsufw} ${_saf1761otg} SUBDIR += ${_rum} ${_run} ${_runfw} ${_uath} upgt usie ural ${_zyd} ${_urtw} -SUBDIR += atp uhid ukbd ums udbp ufm uep wsp ugold uled +SUBDIR += atp cfumass uhid ukbd ums udbp ufm uep wsp ugold uled SUBDIR += ucom u3g uark ubsa ubser uchcom ucycom ufoma uftdi ugensa uipaq ulpt \ umct umcs umodem umoscom uplcom uslcom uvisor uvscom SUBDIR += udl diff --git a/sys/modules/usb/cfumass/Makefile b/sys/modules/usb/cfumass/Makefile new file mode 100644 index 000000000000..f659b9b92093 --- /dev/null +++ b/sys/modules/usb/cfumass/Makefile @@ -0,0 +1,9 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/../../../dev/usb/storage +KMOD= cfumass + +SRCS= bus_if.h device_if.h opt_bus.h opt_usb.h usb_if.h usbdevs.h \ + cfumass.c + +.include diff --git a/sys/modules/vmm/Makefile b/sys/modules/vmm/Makefile index d94ceba7e2f5..86cb58cfd915 100644 --- a/sys/modules/vmm/Makefile +++ b/sys/modules/vmm/Makefile @@ -71,9 +71,9 @@ svm_support.o: ${.IMPSRC} -o ${.TARGET} vmx_genassym.o: - ${CC} -c ${CFLAGS:N-fno-common} ${.IMPSRC} + ${CC} -c ${CFLAGS:N-flto:N-fno-common} ${.IMPSRC} svm_genassym.o: - ${CC} -c ${CFLAGS:N-fno-common} ${.IMPSRC} + ${CC} -c ${CFLAGS:N-flto:N-fno-common} ${.IMPSRC} .include diff --git a/sys/net/if_fddisubr.c b/sys/net/if_fddisubr.c index 682a37caaea7..67a72c1f293e 100644 --- a/sys/net/if_fddisubr.c +++ b/sys/net/if_fddisubr.c @@ -400,7 +400,7 @@ fddi_input(ifp, m) m_adj(m, FDDI_HDR_LEN); m = m_pullup(m, LLC_SNAPFRAMELEN); - if (m == 0) { + if (m == NULL) { if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); goto dropanyway; } diff --git a/sys/net/if_iso88025subr.c b/sys/net/if_iso88025subr.c index e5d5166d60c4..32aac4cd4dd5 100644 --- a/sys/net/if_iso88025subr.c +++ b/sys/net/if_iso88025subr.c @@ -487,7 +487,7 @@ iso88025_input(ifp, m) m_adj(m, mac_hdr_len); m = m_pullup(m, LLC_SNAPFRAMELEN); - if (m == 0) { + if (m == NULL) { if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); goto dropanyway; } diff --git a/sys/net/iflib.c b/sys/net/iflib.c index e131dc46b1aa..34832c744e45 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -1003,7 +1003,7 @@ iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq) struct netmap_slot *slot; slot = netmap_reset(na, NR_TX, txq->ift_id, 0); - if (slot == 0) + if (slot == NULL) return; for (int i = 0; i < ctx->ifc_softc_ctx.isc_ntxd[0]; i++) { @@ -1028,7 +1028,7 @@ iflib_netmap_rxq_init(if_ctx_t ctx, iflib_rxq_t rxq) int nrxd; slot = netmap_reset(na, NR_RX, rxq->ifr_id, 0); - if (slot == 0) + if (slot == NULL) return; map = rxq->ifr_fl[0].ifl_sds.ifsd_map; nrxd = ctx->ifc_softc_ctx.isc_nrxd[0]; diff --git a/sys/net/netisr.c b/sys/net/netisr.c index 755c288d2269..b96ff1c070a7 100644 --- a/sys/net/netisr.c +++ b/sys/net/netisr.c @@ -1268,9 +1268,7 @@ netisr_start_swi(u_int cpuid, struct pcpu *pc) static void netisr_init(void *arg) { -#ifdef EARLY_AP_STARTUP struct pcpu *pc; -#endif NETISR_LOCK_INIT(); if (netisr_maxthreads == 0 || netisr_maxthreads < -1 ) @@ -1308,7 +1306,8 @@ netisr_init(void *arg) netisr_start_swi(pc->pc_cpuid, pc); } #else - netisr_start_swi(curcpu, pcpu_find(curcpu)); + pc = get_pcpu(); + netisr_start_swi(pc->pc_cpuid, pc); #endif } SYSINIT(netisr_init, SI_SUB_SOFTINTR, SI_ORDER_FIRST, netisr_init, NULL); diff --git a/sys/net80211/_ieee80211.h b/sys/net80211/_ieee80211.h index e7ae5d0cb4fd..9434f3a60641 100644 --- a/sys/net80211/_ieee80211.h +++ b/sys/net80211/_ieee80211.h @@ -443,17 +443,26 @@ struct ieee80211_regdomain { /* * MIMO antenna/radio state. */ - +#define IEEE80211_MAX_CHAINS 4 /* - * XXX This doesn't yet export both ctl/ext chain details - * XXX TODO: IEEE80211_MAX_CHAINS is defined in _freebsd.h, not here; - * figure out how to pull it in! + * This is the number of sub-channels for a channel. + * 0 - pri20 + * 1 - sec20 (HT40, VHT40) + * 2 - sec40 (VHT80) + * 3 - sec80 (VHT80+80, VHT160) */ +#define IEEE80211_MAX_CHAIN_PRISEC 4 +#define IEEE80211_MAX_EVM_DWORDS 16 /* 16 pilots, 4 chains */ +#define IEEE80211_MAX_EVM_PILOTS 16 /* 468 subcarriers, 16 pilots */ + +struct ieee80211_mimo_chan_info { + int8_t rssi[IEEE80211_MAX_CHAIN_PRISEC]; + int8_t noise[IEEE80211_MAX_CHAIN_PRISEC]; +}; + struct ieee80211_mimo_info { - int8_t rssi[3]; /* per-antenna rssi */ - int8_t noise[3]; /* per-antenna noise floor */ - uint8_t pad[2]; - uint32_t evm[3]; /* EVM data */ + struct ieee80211_mimo_chan_info ch[IEEE80211_MAX_CHAINS]; + uint32_t evm[IEEE80211_MAX_EVM_DWORDS]; }; /* @@ -523,4 +532,94 @@ struct ieee80211_mimo_info { "\20\1LDPC\2CHWIDTH40\5GREENFIELD\6SHORTGI20\7SHORTGI40\10TXSTBC" \ "\21AMPDU\22AMSDU\23HT\24SMPS\25RIFS\32TXLDPC" +/* + * RX status notification - which fields are valid. + */ +#define IEEE80211_R_NF 0x00000001 /* global NF value valid */ +#define IEEE80211_R_RSSI 0x00000002 /* global RSSI value valid */ +#define IEEE80211_R_C_CHAIN 0x00000004 /* RX chain count valid */ +#define IEEE80211_R_C_NF 0x00000008 /* per-chain NF value valid */ +#define IEEE80211_R_C_RSSI 0x00000010 /* per-chain RSSI value valid */ +#define IEEE80211_R_C_EVM 0x00000020 /* per-chain EVM valid */ +#define IEEE80211_R_C_HT40 0x00000040 /* RX'ed packet is 40mhz, pilots 4,5 valid */ +#define IEEE80211_R_FREQ 0x00000080 /* Freq value populated, MHz */ +#define IEEE80211_R_IEEE 0x00000100 /* IEEE value populated */ +#define IEEE80211_R_BAND 0x00000200 /* Frequency band populated */ +#define IEEE80211_R_TSF32 0x00004000 /* 32 bit TSF */ +#define IEEE80211_R_TSF64 0x00008000 /* 64 bit TSF */ +#define IEEE80211_R_TSF_START 0x00010000 /* TSF is sampled at start of frame */ +#define IEEE80211_R_TSF_END 0x00020000 /* TSF is sampled at end of frame */ + +/* + * RX status notification - describe the packet. + */ +#define IEEE80211_RX_F_STBC 0x00000001 +#define IEEE80211_RX_F_LDPC 0x00000002 +#define IEEE80211_RX_F_AMSDU 0x00000004 /* This is the start of an decap AMSDU list */ +#define IEEE80211_RX_F_AMSDU_MORE 0x00000008 /* This is another decap AMSDU frame in the batch */ +#define IEEE80211_RX_F_AMPDU 0x00000010 /* This is the start of an decap AMPDU list */ +#define IEEE80211_RX_F_AMPDU_MORE 0x00000020 /* This is another decap AMPDU frame in the batch */ +#define IEEE80211_RX_F_FAIL_FCSCRC 0x00000040 /* Failed CRC/FCS */ +#define IEEE80211_RX_F_FAIL_MIC 0x00000080 /* Failed MIC check */ +#define IEEE80211_RX_F_DECRYPTED 0x00000100 /* Hardware decrypted */ +#define IEEE80211_RX_F_IV_STRIP 0x00000200 /* Decrypted; IV stripped */ +#define IEEE80211_RX_F_MMIC_STRIP 0x00000400 /* Decrypted; MMIC stripped */ +#define IEEE80211_RX_F_SHORTGI 0x00000800 /* This is a short-GI frame */ +#define IEEE80211_RX_F_CCK 0x00001000 +#define IEEE80211_RX_F_OFDM 0x00002000 +#define IEEE80211_RX_F_HT 0x00004000 +#define IEEE80211_RX_F_VHT 0x00008000 + +/* Channel width */ +#define IEEE80211_RX_FW_20MHZ 1 +#define IEEE80211_RX_FW_40MHZ 2 +#define IEEE80211_RX_FW_80MHZ 3 + +/* PHY type */ +#define IEEE80211_RX_FP_11B 1 +#define IEEE80211_RX_FP_11G 2 +#define IEEE80211_RX_FP_11A 3 +#define IEEE80211_RX_FP_11NA 4 +#define IEEE80211_RX_FP_11NG 5 + +struct ieee80211_rx_stats { + uint32_t r_flags; /* IEEE80211_R_* flags */ + uint32_t c_pktflags; /* IEEE80211_RX_F_* flags */ + + uint64_t c_rx_tsf; /* 32 or 64 bit TSF */ + + /* All DWORD aligned */ + int16_t c_nf_ctl[IEEE80211_MAX_CHAINS]; /* per-chain NF */ + int16_t c_nf_ext[IEEE80211_MAX_CHAINS]; /* per-chain NF */ + int16_t c_rssi_ctl[IEEE80211_MAX_CHAINS]; /* per-chain RSSI */ + int16_t c_rssi_ext[IEEE80211_MAX_CHAINS]; /* per-chain RSSI */ + + /* 32 bits */ + uint8_t c_nf; /* global NF */ + uint8_t c_rssi; /* global RSSI */ + uint8_t c_chain; /* number of RX chains involved */ + uint8_t c_rate; /* legacy; 11n rate code; VHT MCS */ + + /* 32 bits */ + uint16_t c_freq; /* Frequency, MHz */ + uint8_t c_ieee; /* Channel */ + uint8_t c_width; /* channel width, FW flags above */ + + /* Force alignment to DWORD */ + union { + uint8_t evm[IEEE80211_MAX_CHAINS][IEEE80211_MAX_EVM_PILOTS]; + /* per-chain, per-pilot EVM values */ + uint32_t __aln[8]; + } evm; + + /* 32 bits */ + uint8_t c_phytype; /* PHY type, FW flags above */ + uint8_t c_vhtnss; /* VHT - number of spatial streams */ + uint8_t c_pad2[2]; +}; + +struct ieee80211_rx_params { + struct ieee80211_rx_stats params; +}; + #endif /* _NET80211__IEEE80211_H_ */ diff --git a/sys/net80211/ieee80211_freebsd.h b/sys/net80211/ieee80211_freebsd.h index 57ab9d906b3b..2a0b7396951c 100644 --- a/sys/net80211/ieee80211_freebsd.h +++ b/sys/net80211/ieee80211_freebsd.h @@ -622,98 +622,9 @@ int ieee80211_add_xmit_params(struct mbuf *m, int ieee80211_get_xmit_params(struct mbuf *m, struct ieee80211_bpf_params *); -/* - * Note: this is fine for 3x3 (and 4x4) 11n HT40; - * but getting EVM information for VHT80, VHT160 - * will involve more than 6 EVM pilots. - */ -#define IEEE80211_MAX_CHAINS 4 -#define IEEE80211_MAX_EVM_PILOTS 6 +struct ieee80211_rx_params; +struct ieee80211_rx_stats; -#define IEEE80211_R_NF 0x00000001 /* global NF value valid */ -#define IEEE80211_R_RSSI 0x00000002 /* global RSSI value valid */ -#define IEEE80211_R_C_CHAIN 0x00000004 /* RX chain count valid */ -#define IEEE80211_R_C_NF 0x00000008 /* per-chain NF value valid */ -#define IEEE80211_R_C_RSSI 0x00000010 /* per-chain RSSI value valid */ -#define IEEE80211_R_C_EVM 0x00000020 /* per-chain EVM valid */ -#define IEEE80211_R_C_HT40 0x00000040 /* RX'ed packet is 40mhz, pilots 4,5 valid */ -#define IEEE80211_R_FREQ 0x00000080 /* Freq value populated, MHz */ -#define IEEE80211_R_IEEE 0x00000100 /* IEEE value populated */ -#define IEEE80211_R_BAND 0x00000200 /* Frequency band populated */ -#define IEEE80211_R_TSF32 0x00004000 /* 32 bit TSF */ -#define IEEE80211_R_TSF64 0x00008000 /* 64 bit TSF */ -#define IEEE80211_R_TSF_START 0x00010000 /* TSF is sampled at start of frame */ -#define IEEE80211_R_TSF_END 0x00020000 /* TSF is sampled at end of frame */ - -/* RX packet flags - describe the kind of frame */ -#define IEEE80211_RX_F_STBC 0x00000001 -#define IEEE80211_RX_F_LDPC 0x00000002 -#define IEEE80211_RX_F_AMSDU 0x00000004 /* This is the start of an decap AMSDU list */ -#define IEEE80211_RX_F_AMSDU_MORE 0x00000008 /* This is another decap AMSDU frame in the batch */ -#define IEEE80211_RX_F_AMPDU 0x00000010 /* This is the start of an decap AMPDU list */ -#define IEEE80211_RX_F_AMPDU_MORE 0x00000020 /* This is another decap AMPDU frame in the batch */ -#define IEEE80211_RX_F_FAIL_FCSCRC 0x00000040 /* Failed CRC/FCS */ -#define IEEE80211_RX_F_FAIL_MIC 0x00000080 /* Failed MIC check */ -#define IEEE80211_RX_F_DECRYPTED 0x00000100 /* Hardware decrypted */ -#define IEEE80211_RX_F_IV_STRIP 0x00000200 /* Decrypted; IV stripped */ -#define IEEE80211_RX_F_MMIC_STRIP 0x00000400 /* Decrypted; MMIC stripped */ -#define IEEE80211_RX_F_SHORTGI 0x00000800 /* This is a short-GI frame */ -#define IEEE80211_RX_F_CCK 0x00001000 -#define IEEE80211_RX_F_OFDM 0x00002000 -#define IEEE80211_RX_F_HT 0x00004000 -#define IEEE80211_RX_F_VHT 0x00008000 - -/* Channel width */ -#define IEEE80211_RX_FW_20MHZ 1 -#define IEEE80211_RX_FW_40MHZ 2 -#define IEEE80211_RX_FW_80MHZ 3 - -/* PHY type */ -#define IEEE80211_RX_FP_11B 1 -#define IEEE80211_RX_FP_11G 2 -#define IEEE80211_RX_FP_11A 3 -#define IEEE80211_RX_FP_11NA 4 -#define IEEE80211_RX_FP_11NG 5 - -struct ieee80211_rx_stats { - uint32_t r_flags; /* IEEE80211_R_* flags */ - uint32_t c_pktflags; /* IEEE80211_RX_F_* flags */ - - uint64_t c_rx_tsf; /* 32 or 64 bit TSF */ - - /* All DWORD aligned */ - int16_t c_nf_ctl[IEEE80211_MAX_CHAINS]; /* per-chain NF */ - int16_t c_nf_ext[IEEE80211_MAX_CHAINS]; /* per-chain NF */ - int16_t c_rssi_ctl[IEEE80211_MAX_CHAINS]; /* per-chain RSSI */ - int16_t c_rssi_ext[IEEE80211_MAX_CHAINS]; /* per-chain RSSI */ - - /* 32 bits */ - uint8_t c_nf; /* global NF */ - uint8_t c_rssi; /* global RSSI */ - uint8_t c_chain; /* number of RX chains involved */ - uint8_t c_rate; /* legacy; 11n rate code; VHT MCS */ - - /* 32 bits */ - uint16_t c_freq; /* Frequency, MHz */ - uint8_t c_ieee; /* Channel */ - uint8_t c_width; /* channel width, FW flags above */ - - /* Force alignment to DWORD */ - union { - uint8_t evm[IEEE80211_MAX_CHAINS][IEEE80211_MAX_EVM_PILOTS]; - /* per-chain, per-pilot EVM values */ - uint32_t __aln[8]; - } evm; - - /* 32 bits */ - uint8_t c_phytype; /* PHY type, FW flags above */ - uint8_t c_vhtnss; /* VHT - number of spatial streams */ - uint8_t c_pad2[2]; -}; - -struct ieee80211_rx_params { - struct ieee80211_rx_stats params; -}; int ieee80211_add_rx_params(struct mbuf *m, const struct ieee80211_rx_stats *rxs); int ieee80211_get_rx_params(struct mbuf *m, diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c index 66df1bd463a1..40680b1c1017 100644 --- a/sys/net80211/ieee80211_hostap.c +++ b/sys/net80211/ieee80211_hostap.c @@ -2101,6 +2101,18 @@ hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, return); /* XXX just NULL out? */ } + /* Validate VHT IEs */ + if (vhtcap != NULL) { + IEEE80211_VERIFY_LENGTH(vhtcap[1], + sizeof(struct ieee80211_ie_vhtcap) - 2, + return); + } + if (vhtinfo != NULL) { + IEEE80211_VERIFY_LENGTH(vhtinfo[1], + sizeof(struct ieee80211_ie_vht_operation) - 2, + return); + } + if ((vap->iv_flags & IEEE80211_F_WPA) && !wpa_assocreq(ni, &rsnparms, wh, wpa, rsn, capinfo)) return; @@ -2151,7 +2163,9 @@ hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, ni->ni_chan = vap->iv_bss->ni_chan; /* VHT */ - if (IEEE80211_IS_CHAN_VHT(ni->ni_chan)) { + if (IEEE80211_IS_CHAN_VHT(ni->ni_chan) && + vhtcap != NULL && + vhtinfo != NULL) { /* XXX TODO; see below */ printf("%s: VHT TODO!\n", __func__); ieee80211_vht_node_init(ni); diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index 65ff6ba0b5d2..9b1d8ed68a01 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -1318,15 +1318,16 @@ node_getmimoinfo(const struct ieee80211_node *ni, bzero(info, sizeof(*info)); - for (i = 0; i < ni->ni_mimo_chains; i++) { + for (i = 0; i < MIN(IEEE80211_MAX_CHAINS, ni->ni_mimo_chains); i++) { + /* Note: for now, just pri20 channel info */ avgrssi = ni->ni_mimo_rssi_ctl[i]; if (avgrssi == IEEE80211_RSSI_DUMMY_MARKER) { - info->rssi[i] = 0; + info->ch[i].rssi[0] = 0; } else { rssi = IEEE80211_RSSI_GET(avgrssi); - info->rssi[i] = rssi < 0 ? 0 : rssi > 127 ? 127 : rssi; + info->ch[i].rssi[0] = rssi < 0 ? 0 : rssi > 127 ? 127 : rssi; } - info->noise[i] = ni->ni_mimo_noise_ctl[i]; + info->ch[i].noise[0] = ni->ni_mimo_noise_ctl[i]; } /* XXX ext radios? */ diff --git a/sys/net80211/ieee80211_output.c b/sys/net80211/ieee80211_output.c index 2842e3acaba8..39a6c4b09af3 100644 --- a/sys/net80211/ieee80211_output.c +++ b/sys/net80211/ieee80211_output.c @@ -2733,6 +2733,8 @@ ieee80211_alloc_proberesp(struct ieee80211_node *bss, int legacy) * [tlv] RSN (optional) * [tlv] HT capabilities * [tlv] HT information + * [tlv] VHT capabilities + * [tlv] VHT information * [tlv] WPA (optional) * [tlv] WME (optional) * [tlv] Vendor OUI HT capabilities (optional) @@ -2763,6 +2765,8 @@ ieee80211_alloc_proberesp(struct ieee80211_node *bss, int legacy) + sizeof(struct ieee80211_wme_param) + 4 + sizeof(struct ieee80211_ie_htcap) + 4 + sizeof(struct ieee80211_ie_htinfo) + + sizeof(struct ieee80211_ie_vhtcap) + + sizeof(struct ieee80211_ie_vht_operation) #ifdef IEEE80211_SUPPORT_SUPERG + sizeof(struct ieee80211_ath_ie) #endif @@ -2842,6 +2846,11 @@ ieee80211_alloc_proberesp(struct ieee80211_node *bss, int legacy) frm = ieee80211_add_htcap(frm, bss); frm = ieee80211_add_htinfo(frm, bss); } + if (IEEE80211_IS_CHAN_VHT(bss->ni_chan) && + legacy != IEEE80211_SEND_LEGACY_11B) { + frm = ieee80211_add_vhtcap(frm, bss); + frm = ieee80211_add_vhtinfo(frm, bss); + } frm = ieee80211_add_wpa(frm, vap); if (vap->iv_flags & IEEE80211_F_WME) frm = ieee80211_add_wme_param(frm, &ic->ic_wme); diff --git a/sys/netipsec/udpencap.c b/sys/netipsec/udpencap.c index f88a0c25ba74..08795a36e845 100644 --- a/sys/netipsec/udpencap.c +++ b/sys/netipsec/udpencap.c @@ -266,6 +266,9 @@ udp_ipsec_adjust_cksum(struct mbuf *m, struct secasvar *sav, int proto, /* Incrementally recompute. */ m_copydata(m, skip + off, sizeof(cksum), (caddr_t)&cksum); + /* Do not adjust UDP checksum if it is zero. */ + if (proto == IPPROTO_UDP && cksum == 0) + return; cksum = in_addword(cksum, sav->natt->cksum); } else { /* No OA from IKEd. */ diff --git a/sys/netpfil/ipfw/ip_fw_sockopt.c b/sys/netpfil/ipfw/ip_fw_sockopt.c index 0823316e0884..4a8ffaacbcff 100644 --- a/sys/netpfil/ipfw/ip_fw_sockopt.c +++ b/sys/netpfil/ipfw/ip_fw_sockopt.c @@ -3135,7 +3135,7 @@ int classify_opcode_kidx(ipfw_insn *cmd, uint16_t *puidx) { - if (find_op_rw(cmd, puidx, NULL) == 0) + if (find_op_rw(cmd, puidx, NULL) == NULL) return (1); return (0); } diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c index 400d395b3467..75af97138ba4 100644 --- a/sys/powerpc/booke/pmap.c +++ b/sys/powerpc/booke/pmap.c @@ -2973,7 +2973,7 @@ mmu_booke_change_attr(mmu_t mmu, vm_offset_t addr, vm_size_t sz, tlb_miss_unlock(); mtx_unlock_spin(&tlbivax_mutex); - return (pte_vatopa(mmu, kernel_pmap, va)); + return (0); } /**************************************************************************/ diff --git a/sys/powerpc/include/cpufunc.h b/sys/powerpc/include/cpufunc.h index 378274b67e36..c70a94d31b6c 100644 --- a/sys/powerpc/include/cpufunc.h +++ b/sys/powerpc/include/cpufunc.h @@ -201,7 +201,7 @@ intr_restore(register_t msr) } static __inline struct pcpu * -powerpc_get_pcpup(void) +get_pcpu(void) { struct pcpu *ret; diff --git a/sys/powerpc/include/pcpu.h b/sys/powerpc/include/pcpu.h index 79cdd3039fff..b6949cf7bdc5 100644 --- a/sys/powerpc/include/pcpu.h +++ b/sys/powerpc/include/pcpu.h @@ -142,7 +142,7 @@ struct pvo_entry; #ifdef _KERNEL -#define pcpup ((struct pcpu *) powerpc_get_pcpup()) +#define pcpup (get_pcpu()) static __inline __pure2 struct thread * __curthread(void) diff --git a/sys/powerpc/mikrotik/platform_rb.c b/sys/powerpc/mikrotik/platform_rb.c index 39de29e8d618..e05c59b37636 100644 --- a/sys/powerpc/mikrotik/platform_rb.c +++ b/sys/powerpc/mikrotik/platform_rb.c @@ -32,15 +32,12 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include -#include #include -#include #include @@ -59,39 +56,6 @@ DEFINE_CLASS_1(rb, rb_platform, rb_methods, 0, mpc85xx_platform); PLATFORM_DEF(rb_platform); -/* Slicer operates on the NAND controller, so we have to find the chip. */ -static int -rb_nand_slicer(device_t dev, struct flash_slice *slices, int *nslices) -{ - struct nand_chip *chip; - device_t *children; - int n; - - if (device_get_children(dev, &children, &n) != 0) { - panic("Slicer called on controller with no child!"); - } - dev = children[0]; - free(children, M_TEMP); - - if (device_get_children(dev, &children, &n) != 0) { - panic("Slicer called on controller with nandbus but no child!"); - } - dev = children[0]; - free(children, M_TEMP); - - chip = device_get_softc(dev); - *nslices = 2; - slices[0].base = 0; - slices[0].size = 4 * 1024 * 1024; - slices[0].label = "boot"; - - slices[1].base = 4 * 1024 * 1024; - slices[1].size = chip->ndisk->d_mediasize - slices[0].size; - slices[1].label = "rootfs"; - - return (0); -} - static int rb_probe(platform_t plat) { @@ -117,7 +81,5 @@ rb_attach(platform_t plat) if (error) return (error); - flash_register_slicer(rb_nand_slicer); - return (0); } diff --git a/sys/powerpc/mikrotik/rb_led.c b/sys/powerpc/mikrotik/rb_led.c new file mode 100644 index 000000000000..f6125f5162f9 --- /dev/null +++ b/sys/powerpc/mikrotik/rb_led.c @@ -0,0 +1,149 @@ +/*- + * Copyright (c) 2017 Justin Hibbits + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "gpio_if.h" + +struct rbled_softc { + struct cdev *sc_led; + device_t sc_gpio; + uint32_t sc_ledpin; +}; + +static int rbled_probe(device_t); +static int rbled_attach(device_t); +static int rbled_detach(device_t); +static void rbled_toggle(void *, int); + +static device_method_t rbled_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, rbled_probe), + DEVMETHOD(device_attach, rbled_attach), + DEVMETHOD(device_detach, rbled_detach), + + DEVMETHOD_END +}; + +static driver_t rbled_driver = { + "rbled", + rbled_methods, + sizeof(struct rbled_softc), +}; + +static devclass_t rbled_devclass; + +DRIVER_MODULE(rbled, simplebus, rbled_driver, rbled_devclass, 0, 0); + +static int +rbled_probe(device_t dev) +{ + phandle_t node; + const char *name; + cell_t gp[2]; + char model[6]; + + node = ofw_bus_get_node(dev); + + name = ofw_bus_get_name(dev); + if (name == NULL) + return (ENXIO); + if (strcmp(name, "led") != 0) + return (ENXIO); + + if (OF_getprop(node, "user_led", gp, sizeof(gp)) <= 0) + return (ENXIO); + + /* Check root model. */ + node = OF_peer(0); + if (OF_getprop(node, "model", model, sizeof(model)) <= 0) + return (ENXIO); + if (strcmp(model, "RB800") != 0) + return (ENXIO); + + device_set_desc(dev, "RouterBoard LED"); + return (0); +} + +static int +rbled_attach(device_t dev) +{ + struct rbled_softc *sc; + phandle_t node; + cell_t gp[2]; + + sc = device_get_softc(dev); + node = ofw_bus_get_node(dev); + + if (OF_getprop(node, "user_led", gp, sizeof(gp)) <= 0) + return (ENXIO); + + sc->sc_gpio = OF_device_from_xref(gp[0]); + if (sc->sc_gpio == NULL) { + device_printf(dev, "No GPIO resource found!\n"); + return (ENXIO); + } + sc->sc_ledpin = gp[1]; + + sc->sc_led = led_create(rbled_toggle, sc, "user_led"); + + if (sc->sc_led == NULL) + return (ENXIO); + + return (0); +} + +static int +rbled_detach(device_t dev) +{ + struct rbled_softc *sc; + + sc = device_get_softc(dev); + led_destroy(sc->sc_led); + + return (0); +} + +static void +rbled_toggle(void *priv, int onoff) +{ + struct rbled_softc *sc = priv; + + GPIO_PIN_SET(sc->sc_gpio, sc->sc_ledpin, onoff); +} diff --git a/sys/sparc64/include/pcpu.h b/sys/sparc64/include/pcpu.h index df43810ef0b5..51524fba4a0a 100644 --- a/sys/sparc64/include/pcpu.h +++ b/sys/sparc64/include/pcpu.h @@ -74,6 +74,7 @@ struct pcpu; register struct pcb *curpcb __asm__(__XSTRING(PCB_REG)); register struct pcpu *pcpup __asm__(__XSTRING(PCPU_REG)); +#define get_pcpu() (pcpup) #define PCPU_GET(member) (pcpup->pc_ ## member) static __inline __pure2 struct thread * diff --git a/sys/sys/bufobj.h b/sys/sys/bufobj.h index 657702c17e2c..2dc440a6398e 100644 --- a/sys/sys/bufobj.h +++ b/sys/sys/bufobj.h @@ -88,6 +88,12 @@ struct buf_ops { #define BO_WRITE(bo, bp) ((bo)->bo_ops->bop_write((bp))) #define BO_BDFLUSH(bo, bp) ((bo)->bo_ops->bop_bdflush((bo), (bp))) +/* + * Locking notes: + * 'S' is sync_mtx + * 'v' is the vnode lock which embeds the bufobj. + * '-' Constant and unchanging after initialization. + */ struct bufobj { struct rwlock bo_lock; /* Lock which protects "i" things */ struct buf_ops *bo_ops; /* - Buffer operations */ diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h index 8eec7f9c5107..535c721dbf95 100644 --- a/sys/sys/cdefs.h +++ b/sys/sys/cdefs.h @@ -349,7 +349,8 @@ * void bar(int myArray[__min_size(10)]); */ #if !defined(__cplusplus) && \ - (!defined(__STDC_VERSION) || (__STDC_VERSION__ >= 199901)) + (defined(__clang__) || __GNUC_PREREQ__(4, 6)) && \ + (!defined(__STDC_VERSION__) || (__STDC_VERSION__ >= 199901)) #define __min_size(x) static (x) #else #define __min_size(x) (x) diff --git a/sys/sys/lock.h b/sys/sys/lock.h index 89b61ab73ddd..08ccaa5726f6 100644 --- a/sys/sys/lock.h +++ b/sys/sys/lock.h @@ -154,8 +154,13 @@ struct lock_class { * file - file name * line - line number */ +#if LOCK_DEBUG > 0 #define LOCK_LOG_TEST(lo, flags) \ (((flags) & LOP_QUIET) == 0 && ((lo)->lo_flags & LO_QUIET) == 0) +#else +#define LOCK_LOG_TEST(lo, flags) 0 +#endif + #define LOCK_LOG_LOCK(opname, lo, flags, recurse, file, line) do { \ if (LOCK_LOG_TEST((lo), (flags))) \ diff --git a/sys/sys/mutex.h b/sys/sys/mutex.h index c0ac0c8c8a9d..cc56c907f4b4 100644 --- a/sys/sys/mutex.h +++ b/sys/sys/mutex.h @@ -104,9 +104,8 @@ void __mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v, uintptr_t tid, void __mtx_unlock_sleep(volatile uintptr_t *c, int opts, const char *file, int line); #else -void __mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v, uintptr_t tid, - int opts); -void __mtx_unlock_sleep(volatile uintptr_t *c, int opts); +void __mtx_lock_sleep(volatile uintptr_t *c, uintptr_t v, uintptr_t tid); +void __mtx_unlock_sleep(volatile uintptr_t *c); #endif #ifdef SMP @@ -154,9 +153,9 @@ void thread_lock_flags_(struct thread *, int, const char *, int); __mtx_unlock_sleep(&(m)->mtx_lock, o, f, l) #else #define _mtx_lock_sleep(m, v, t, o, f, l) \ - __mtx_lock_sleep(&(m)->mtx_lock, v, t, o) + __mtx_lock_sleep(&(m)->mtx_lock, v, t) #define _mtx_unlock_sleep(m, o, f, l) \ - __mtx_unlock_sleep(&(m)->mtx_lock, o) + __mtx_unlock_sleep(&(m)->mtx_lock) #endif #ifdef SMP #define _mtx_lock_spin(m, v, t, o, f, l) \ @@ -224,12 +223,9 @@ void thread_lock_flags_(struct thread *, int, const char *, int); uintptr_t _v = MTX_UNOWNED; \ \ spinlock_enter(); \ - if (!_mtx_obtain_lock_fetch((mp), &_v, _tid)) { \ - if (_v == _tid) \ - (mp)->mtx_recurse++; \ - else \ - _mtx_lock_spin((mp), _v, _tid, (opts), (file), (line));\ - } else \ + if (!_mtx_obtain_lock_fetch((mp), &_v, _tid)) \ + _mtx_lock_spin((mp), _v, _tid, (opts), (file), (line)); \ + else \ LOCKSTAT_PROFILE_OBTAIN_LOCK_SUCCESS(spin__acquire, \ mp, 0, 0, file, line); \ } while (0) diff --git a/sys/sys/param.h b/sys/sys/param.h index ada0639342f8..bb6f0b1f70c7 100644 --- a/sys/sys/param.h +++ b/sys/sys/param.h @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1200021 /* Master, propagated to newvers */ +#define __FreeBSD_version 1200022 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, diff --git a/sys/sys/proc.h b/sys/sys/proc.h index cc744a560e06..da2a87a2ca34 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -339,6 +339,7 @@ struct thread { void *td_emuldata; /* Emulator state data */ int td_lastcpu; /* (t) Last cpu we were on. */ int td_oncpu; /* (t) Which cpu we are on. */ + void *td_lkpi_task; /* LinuxKPI task struct pointer */ }; struct thread0_storage { diff --git a/sys/sys/signalvar.h b/sys/sys/signalvar.h index a8a975f843cf..ed9c87d68a9b 100644 --- a/sys/sys/signalvar.h +++ b/sys/sys/signalvar.h @@ -237,13 +237,15 @@ typedef struct ksiginfo { #define KSI_INS 0x04 /* Directly insert ksi, not the copy */ #define KSI_SIGQ 0x08 /* Generated by sigqueue, might ret EGAIN. */ #define KSI_HEAD 0x10 /* Insert into head, not tail. */ -#define KSI_COPYMASK (KSI_TRAP|KSI_SIGQ) +#define KSI_PTRACE 0x20 /* Generated by ptrace. */ +#define KSI_COPYMASK (KSI_TRAP | KSI_SIGQ | KSI_PTRACE) #define KSI_ONQ(ksi) ((ksi)->ksi_sigq != NULL) typedef struct sigqueue { sigset_t sq_signals; /* All pending signals. */ sigset_t sq_kill; /* Legacy depth 1 queue. */ + sigset_t sq_ptrace; /* Depth 1 queue for ptrace(2). */ TAILQ_HEAD(, ksiginfo) sq_list;/* Queued signal info. */ struct proc *sq_proc; int sq_flags; @@ -370,7 +372,7 @@ void pgsigio(struct sigio **sigiop, int sig, int checkctty); void pgsignal(struct pgrp *pgrp, int sig, int checkctty, ksiginfo_t *ksi); int postsig(int sig); void kern_psignal(struct proc *p, int sig); -int ptracestop(struct thread *td, int sig); +int ptracestop(struct thread *td, int sig, ksiginfo_t *si); void sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *retmask); struct sigacts *sigacts_alloc(void); void sigacts_copy(struct sigacts *dest, struct sigacts *src); diff --git a/sys/sys/slicer.h b/sys/sys/slicer.h index 9bf8748f2de0..53f680d84ced 100644 --- a/sys/sys/slicer.h +++ b/sys/sys/slicer.h @@ -27,26 +27,38 @@ */ #ifndef _FLASH_SLICER_H_ -#define _FLASH_SLICER_H_ +#define _FLASH_SLICER_H_ #include -#define FLASH_SLICES_MAX_NUM 8 -#define FLASH_SLICES_MAX_NAME_LEN (32 + 1) +#define FLASH_SLICES_MAX_NUM 8 +#define FLASH_SLICES_MAX_NAME_LEN (32 + 1) #define FLASH_SLICES_FLAG_NONE 0 #define FLASH_SLICES_FLAG_RO 1 /* Read only */ +#define FLASH_SLICES_FMT "%ss.%s" + struct flash_slice { off_t base; off_t size; - char *label; + const char *label; unsigned int flags; }; #ifdef _KERNEL -int fdt_flash_fill_slices(device_t, struct flash_slice *, int *) __weak_symbol; -void flash_register_slicer(int (*)(device_t, struct flash_slice *, int *)); + +typedef int (*flash_slicer_t)(device_t dev, const char *provider, + struct flash_slice *slices, int *slices_num); + +#define FLASH_SLICES_TYPE_NAND 0 +#define FLASH_SLICES_TYPE_CFI 1 +#define FLASH_SLICES_TYPE_SPI 2 +#define FLASH_SLICES_TYPE_MMC 3 + +/* Use NULL for deregistering a slicer */ +void flash_register_slicer(flash_slicer_t slicer, u_int type, bool force); + #endif /* _KERNEL */ #endif /* _FLASH_SLICER_H_ */ diff --git a/sys/sys/sx.h b/sys/sys/sx.h index 50b0a2415f28..a31c328ba60e 100644 --- a/sys/sys/sx.h +++ b/sys/sys/sx.h @@ -145,7 +145,7 @@ struct sx_args { * deferred to 'tougher' functions. */ -#if (LOCK_DEBUG == 0) && !defined(SX_NOINLINE) +#if (LOCK_DEBUG == 0) /* Acquire an exclusive lock. */ static __inline int __sx_xlock(struct sx *sx, struct thread *td, int opts, const char *file, diff --git a/sys/x86/x86/mca.c b/sys/x86/x86/mca.c index bece5d490051..08e29d50ef41 100644 --- a/sys/x86/x86/mca.c +++ b/sys/x86/x86/mca.c @@ -73,7 +73,7 @@ enum scan_mode { */ struct cmc_state { int max_threshold; - int last_intr; + time_t last_intr; }; #endif diff --git a/sys/i386/i386/i686_mem.c b/sys/x86/x86/x86_mem.c similarity index 72% rename from sys/i386/i386/i686_mem.c rename to sys/x86/x86/x86_mem.c index 03e5b179239c..d639224f8403 100644 --- a/sys/i386/i386/i686_mem.c +++ b/sys/x86/x86/x86_mem.c @@ -1,7 +1,11 @@ /*- * Copyright (c) 1999 Michael Smith + * Copyright (c) 2017 The FreeBSD Foundation * All rights reserved. * + * Portions of this software were developed by Konstantin Belousov + * under sponsorship from the FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -35,15 +39,19 @@ __FBSDID("$FreeBSD$"); #include #include +#include +#include +#include + #include #include #include /* - * i686 memory range operations + * Pentium Pro+ memory range operations * * This code will probably be impenetrable without reference to the - * Intel Pentium Pro documentation. + * Intel Pentium Pro documentation or x86-64 programmers manual vol 2. */ static char *mem_owner_bios = "BIOS"; @@ -66,19 +74,20 @@ static char *mem_owner_bios = "BIOS"; static int mtrrs_disabled; SYSCTL_INT(_machdep, OID_AUTO, disable_mtrrs, CTLFLAG_RDTUN, - &mtrrs_disabled, 0, "Disable i686 MTRRs."); + &mtrrs_disabled, 0, + "Disable MTRRs."); -static void i686_mrinit(struct mem_range_softc *sc); -static int i686_mrset(struct mem_range_softc *sc, +static void x86_mrinit(struct mem_range_softc *sc); +static int x86_mrset(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg); -static void i686_mrAPinit(struct mem_range_softc *sc); -static void i686_mrreinit(struct mem_range_softc *sc); +static void x86_mrAPinit(struct mem_range_softc *sc); +static void x86_mrreinit(struct mem_range_softc *sc); -static struct mem_range_ops i686_mrops = { - i686_mrinit, - i686_mrset, - i686_mrAPinit, - i686_mrreinit +static struct mem_range_ops x86_mrops = { + x86_mrinit, + x86_mrset, + x86_mrAPinit, + x86_mrreinit }; /* XXX for AP startup hook */ @@ -89,21 +98,21 @@ static u_int64_t mtrr_physmask; static struct mem_range_desc *mem_range_match(struct mem_range_softc *sc, struct mem_range_desc *mrd); -static void i686_mrfetch(struct mem_range_softc *sc); -static int i686_mtrrtype(int flags); -static int i686_mrt2mtrr(int flags, int oldval); -static int i686_mtrrconflict(int flag1, int flag2); -static void i686_mrstore(struct mem_range_softc *sc); -static void i686_mrstoreone(void *arg); -static struct mem_range_desc *i686_mtrrfixsearch(struct mem_range_softc *sc, +static void x86_mrfetch(struct mem_range_softc *sc); +static int x86_mtrrtype(int flags); +static int x86_mrt2mtrr(int flags, int oldval); +static int x86_mtrrconflict(int flag1, int flag2); +static void x86_mrstore(struct mem_range_softc *sc); +static void x86_mrstoreone(void *arg); +static struct mem_range_desc *x86_mtrrfixsearch(struct mem_range_softc *sc, u_int64_t addr); -static int i686_mrsetlow(struct mem_range_softc *sc, +static int x86_mrsetlow(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg); -static int i686_mrsetvariable(struct mem_range_softc *sc, +static int x86_mrsetvariable(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg); -/* i686 MTRR type to memory range type conversion */ -static int i686_mtrrtomrt[] = { +/* ia32 MTRR type to memory range type conversion */ +static int x86_mtrrtomrt[] = { MDF_UNCACHEABLE, MDF_WRITECOMBINE, MDF_UNKNOWN, @@ -113,26 +122,28 @@ static int i686_mtrrtomrt[] = { MDF_WRITEBACK }; -#define MTRRTOMRTLEN nitems(i686_mtrrtomrt) +#define MTRRTOMRTLEN nitems(x86_mtrrtomrt) static int -i686_mtrr2mrt(int val) +x86_mtrr2mrt(int val) { if (val < 0 || val >= MTRRTOMRTLEN) return (MDF_UNKNOWN); - return (i686_mtrrtomrt[val]); + return (x86_mtrrtomrt[val]); } /* - * i686 MTRR conflicts. Writeback and uncachable may overlap. + * x86 MTRR conflicts. Writeback and uncachable may overlap. */ static int -i686_mtrrconflict(int flag1, int flag2) +x86_mtrrconflict(int flag1, int flag2) { flag1 &= MDF_ATTRMASK; flag2 &= MDF_ATTRMASK; + if ((flag1 & MDF_UNKNOWN) || (flag2 & MDF_UNKNOWN)) + return (1); if (flag1 == flag2 || (flag1 == MDF_WRITEBACK && flag2 == MDF_UNCACHEABLE) || (flag2 == MDF_WRITEBACK && flag1 == MDF_UNCACHEABLE)) @@ -156,6 +167,30 @@ mem_range_match(struct mem_range_softc *sc, struct mem_range_desc *mrd) return (NULL); } +/* + * Ensure that the direct map region does not contain any mappings + * that span MTRRs of different types. However, the fixed MTRRs can + * be ignored, because a large page mapping the first 1 MB of physical + * memory is a special case that the processor handles. Invalidate + * any old TLB entries that might hold inconsistent memory type + * information. + */ +static void +x86_mr_split_dmap(struct mem_range_softc *sc __unused) +{ +#ifdef __amd64__ + struct mem_range_desc *mrd; + int i; + + i = (sc->mr_cap & MR686_FIXMTRR) ? MTRR_N64K + MTRR_N16K + MTRR_N4K : 0; + mrd = sc->mr_desc + i; + for (; i < sc->mr_ndesc; i++, mrd++) { + if ((mrd->mr_flags & (MDF_ACTIVE | MDF_BOGUS)) == MDF_ACTIVE) + pmap_demote_DMAP(mrd->mr_base, mrd->mr_len, TRUE); + } +#endif +} + /* * Fetch the current mtrr settings from the current CPU (assumed to * all be in sync in the SMP case). Note that if we are here, we @@ -163,7 +198,7 @@ mem_range_match(struct mem_range_softc *sc, struct mem_range_desc *mrd) * MTRRs. */ static void -i686_mrfetch(struct mem_range_softc *sc) +x86_mrfetch(struct mem_range_softc *sc) { struct mem_range_desc *mrd; u_int64_t msrv; @@ -179,31 +214,31 @@ i686_mrfetch(struct mem_range_softc *sc) for (j = 0; j < 8; j++, mrd++) { mrd->mr_flags = (mrd->mr_flags & ~MDF_ATTRMASK) | - i686_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; + x86_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; if (mrd->mr_owner[0] == 0) strcpy(mrd->mr_owner, mem_owner_bios); msrv = msrv >> 8; } } msr = MSR_MTRR16kBase; - for (i = 0; i < (MTRR_N16K / 8); i++, msr++) { + for (i = 0; i < MTRR_N16K / 8; i++, msr++) { msrv = rdmsr(msr); for (j = 0; j < 8; j++, mrd++) { mrd->mr_flags = (mrd->mr_flags & ~MDF_ATTRMASK) | - i686_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; + x86_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; if (mrd->mr_owner[0] == 0) strcpy(mrd->mr_owner, mem_owner_bios); msrv = msrv >> 8; } } msr = MSR_MTRR4kBase; - for (i = 0; i < (MTRR_N4K / 8); i++, msr++) { + for (i = 0; i < MTRR_N4K / 8; i++, msr++) { msrv = rdmsr(msr); for (j = 0; j < 8; j++, mrd++) { mrd->mr_flags = (mrd->mr_flags & ~MDF_ATTRMASK) | - i686_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; + x86_mtrr2mrt(msrv & 0xff) | MDF_ACTIVE; if (mrd->mr_owner[0] == 0) strcpy(mrd->mr_owner, mem_owner_bios); msrv = msrv >> 8; @@ -213,10 +248,10 @@ i686_mrfetch(struct mem_range_softc *sc) /* Get remainder which must be variable MTRRs. */ msr = MSR_MTRRVarBase; - for (; (mrd - sc->mr_desc) < sc->mr_ndesc; msr += 2, mrd++) { + for (; mrd - sc->mr_desc < sc->mr_ndesc; msr += 2, mrd++) { msrv = rdmsr(msr); mrd->mr_flags = (mrd->mr_flags & ~MDF_ATTRMASK) | - i686_mtrr2mrt(msrv & MTRR_PHYSBASE_TYPE); + x86_mtrr2mrt(msrv & MTRR_PHYSBASE_TYPE); mrd->mr_base = msrv & mtrr_physmask; msrv = rdmsr(msr + 1); mrd->mr_flags = (msrv & MTRR_PHYSMASK_VALID) ? @@ -239,27 +274,27 @@ i686_mrfetch(struct mem_range_softc *sc) * Return the MTRR memory type matching a region's flags */ static int -i686_mtrrtype(int flags) +x86_mtrrtype(int flags) { int i; flags &= MDF_ATTRMASK; for (i = 0; i < MTRRTOMRTLEN; i++) { - if (i686_mtrrtomrt[i] == MDF_UNKNOWN) + if (x86_mtrrtomrt[i] == MDF_UNKNOWN) continue; - if (flags == i686_mtrrtomrt[i]) + if (flags == x86_mtrrtomrt[i]) return (i); } return (-1); } static int -i686_mrt2mtrr(int flags, int oldval) +x86_mrt2mtrr(int flags, int oldval) { int val; - if ((val = i686_mtrrtype(flags)) == -1) + if ((val = x86_mtrrtype(flags)) == -1) return (oldval & 0xff); return (val & 0xff); } @@ -268,24 +303,13 @@ i686_mrt2mtrr(int flags, int oldval) * Update running CPU(s) MTRRs to match the ranges in the descriptor * list. * - * XXX Must be called with interrupts enabled. + * Must be called with interrupts enabled. */ static void -i686_mrstore(struct mem_range_softc *sc) +x86_mrstore(struct mem_range_softc *sc) { -#ifdef SMP - /* - * We should use ipi_all_but_self() to call other CPUs into a - * locking gate, then call a target function to do this work. - * The "proper" solution involves a generalised locking gate - * implementation, not ready yet. - */ - smp_rendezvous(NULL, i686_mrstoreone, NULL, sc); -#else - disable_intr(); /* disable interrupts */ - i686_mrstoreone(sc); - enable_intr(); -#endif + + smp_rendezvous(NULL, x86_mrstoreone, NULL, sc); } /* @@ -294,7 +318,7 @@ i686_mrstore(struct mem_range_softc *sc) * stuffing one entry; this is simpler (but slower, of course). */ static void -i686_mrstoreone(void *arg) +x86_mrstoreone(void *arg) { struct mem_range_softc *sc = arg; struct mem_range_desc *mrd; @@ -324,36 +348,36 @@ i686_mrstoreone(void *arg) /* Set fixed-range MTRRs. */ if (sc->mr_cap & MR686_FIXMTRR) { msr = MSR_MTRR64kBase; - for (i = 0; i < (MTRR_N64K / 8); i++, msr++) { + for (i = 0; i < MTRR_N64K / 8; i++, msr++) { msrv = 0; omsrv = rdmsr(msr); for (j = 7; j >= 0; j--) { msrv = msrv << 8; - msrv |= i686_mrt2mtrr((mrd + j)->mr_flags, + msrv |= x86_mrt2mtrr((mrd + j)->mr_flags, omsrv >> (j * 8)); } wrmsr(msr, msrv); mrd += 8; } msr = MSR_MTRR16kBase; - for (i = 0; i < (MTRR_N16K / 8); i++, msr++) { + for (i = 0; i < MTRR_N16K / 8; i++, msr++) { msrv = 0; omsrv = rdmsr(msr); for (j = 7; j >= 0; j--) { msrv = msrv << 8; - msrv |= i686_mrt2mtrr((mrd + j)->mr_flags, + msrv |= x86_mrt2mtrr((mrd + j)->mr_flags, omsrv >> (j * 8)); } wrmsr(msr, msrv); mrd += 8; } msr = MSR_MTRR4kBase; - for (i = 0; i < (MTRR_N4K / 8); i++, msr++) { + for (i = 0; i < MTRR_N4K / 8; i++, msr++) { msrv = 0; omsrv = rdmsr(msr); for (j = 7; j >= 0; j--) { msrv = msrv << 8; - msrv |= i686_mrt2mtrr((mrd + j)->mr_flags, + msrv |= x86_mrt2mtrr((mrd + j)->mr_flags, omsrv >> (j * 8)); } wrmsr(msr, msrv); @@ -363,12 +387,12 @@ i686_mrstoreone(void *arg) /* Set remainder which must be variable MTRRs. */ msr = MSR_MTRRVarBase; - for (; (mrd - sc->mr_desc) < sc->mr_ndesc; msr += 2, mrd++) { + for (; mrd - sc->mr_desc < sc->mr_ndesc; msr += 2, mrd++) { /* base/type register */ omsrv = rdmsr(msr); if (mrd->mr_flags & MDF_ACTIVE) { msrv = mrd->mr_base & mtrr_physmask; - msrv |= i686_mrt2mtrr(mrd->mr_flags, omsrv); + msrv |= x86_mrt2mtrr(mrd->mr_flags, omsrv); } else { msrv = 0; } @@ -402,15 +426,15 @@ i686_mrstoreone(void *arg) * Hunt for the fixed MTRR referencing (addr) */ static struct mem_range_desc * -i686_mtrrfixsearch(struct mem_range_softc *sc, u_int64_t addr) +x86_mtrrfixsearch(struct mem_range_softc *sc, u_int64_t addr) { struct mem_range_desc *mrd; int i; - for (i = 0, mrd = sc->mr_desc; i < (MTRR_N64K + MTRR_N16K + MTRR_N4K); + for (i = 0, mrd = sc->mr_desc; i < MTRR_N64K + MTRR_N16K + MTRR_N4K; i++, mrd++) - if ((addr >= mrd->mr_base) && - (addr < (mrd->mr_base + mrd->mr_len))) + if (addr >= mrd->mr_base && + addr < mrd->mr_base + mrd->mr_len) return (mrd); return (NULL); } @@ -427,21 +451,23 @@ i686_mtrrfixsearch(struct mem_range_softc *sc, u_int64_t addr) * "busy" ranges. */ static int -i686_mrsetlow(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) +x86_mrsetlow(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) { struct mem_range_desc *first_md, *last_md, *curr_md; /* Range check. */ - if (((first_md = i686_mtrrfixsearch(sc, mrd->mr_base)) == NULL) || - ((last_md = i686_mtrrfixsearch(sc, mrd->mr_base + mrd->mr_len - 1)) == NULL)) + if ((first_md = x86_mtrrfixsearch(sc, mrd->mr_base)) == NULL || + (last_md = x86_mtrrfixsearch(sc, mrd->mr_base + mrd->mr_len - 1)) + == NULL) return (EINVAL); /* Check that we aren't doing something risky. */ - if (!(mrd->mr_flags & MDF_FORCE)) + if ((mrd->mr_flags & MDF_FORCE) == 0) { for (curr_md = first_md; curr_md <= last_md; curr_md++) { if ((curr_md->mr_flags & MDF_ATTRMASK) == MDF_UNKNOWN) return (EACCES); } + } /* Set flags, clear set-by-firmware flag. */ for (curr_md = first_md; curr_md <= last_md; curr_md++) { @@ -459,7 +485,7 @@ i686_mrsetlow(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) * XXX needs to be updated to properly support "busy" ranges. */ static int -i686_mrsetvariable(struct mem_range_softc *sc, struct mem_range_desc *mrd, +x86_mrsetvariable(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) { struct mem_range_desc *curr_md, *free_md; @@ -479,8 +505,8 @@ i686_mrsetvariable(struct mem_range_softc *sc, struct mem_range_desc *mrd, for (; i < sc->mr_ndesc; i++, curr_md++) { if (curr_md->mr_flags & MDF_ACTIVE) { /* Exact match? */ - if ((curr_md->mr_base == mrd->mr_base) && - (curr_md->mr_len == mrd->mr_len)) { + if (curr_md->mr_base == mrd->mr_base && + curr_md->mr_len == mrd->mr_len) { /* Whoops, owned by someone. */ if (curr_md->mr_flags & MDF_BUSY) @@ -488,8 +514,8 @@ i686_mrsetvariable(struct mem_range_softc *sc, struct mem_range_desc *mrd, /* Check that we aren't doing something risky */ if (!(mrd->mr_flags & MDF_FORCE) && - ((curr_md->mr_flags & MDF_ATTRMASK) == - MDF_UNKNOWN)) + (curr_md->mr_flags & MDF_ATTRMASK) == + MDF_UNKNOWN) return (EACCES); /* Ok, just hijack this entry. */ @@ -500,7 +526,7 @@ i686_mrsetvariable(struct mem_range_softc *sc, struct mem_range_desc *mrd, /* Non-exact overlap? */ if (mroverlap(curr_md, mrd)) { /* Between conflicting region types? */ - if (i686_mtrrconflict(curr_md->mr_flags, + if (x86_mtrrconflict(curr_md->mr_flags, mrd->mr_flags)) return (EINVAL); } @@ -525,31 +551,32 @@ i686_mrsetvariable(struct mem_range_softc *sc, struct mem_range_desc *mrd, * Handle requests to set memory range attributes by manipulating MTRRs. */ static int -i686_mrset(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) +x86_mrset(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) { struct mem_range_desc *targ; - int error = 0; + int error; - switch(*arg) { + switch (*arg) { case MEMRANGE_SET_UPDATE: /* * Make sure that what's being asked for is even * possible at all. */ if (!mrvalid(mrd->mr_base, mrd->mr_len) || - i686_mtrrtype(mrd->mr_flags) == -1) + x86_mtrrtype(mrd->mr_flags) == -1) return (EINVAL); -#define FIXTOP ((MTRR_N64K * 0x10000) + (MTRR_N16K * 0x4000) + (MTRR_N4K * 0x1000)) +#define FIXTOP \ + ((MTRR_N64K * 0x10000) + (MTRR_N16K * 0x4000) + (MTRR_N4K * 0x1000)) /* Are the "low memory" conditions applicable? */ - if ((sc->mr_cap & MR686_FIXMTRR) && - ((mrd->mr_base + mrd->mr_len) <= FIXTOP)) { - if ((error = i686_mrsetlow(sc, mrd, arg)) != 0) + if ((sc->mr_cap & MR686_FIXMTRR) != 0 && + mrd->mr_base + mrd->mr_len <= FIXTOP) { + if ((error = x86_mrsetlow(sc, mrd, arg)) != 0) return (error); } else { /* It's time to play with variable MTRRs. */ - if ((error = i686_mrsetvariable(sc, mrd, arg)) != 0) + if ((error = x86_mrsetvariable(sc, mrd, arg)) != 0) return (error); } break; @@ -569,11 +596,13 @@ i686_mrset(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) return (EOPNOTSUPP); } + x86_mr_split_dmap(sc); + /* Update the hardware. */ - i686_mrstore(sc); + x86_mrstore(sc); /* Refetch to see where we're at. */ - i686_mrfetch(sc); + x86_mrfetch(sc); return (0); } @@ -582,16 +611,16 @@ i686_mrset(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg) * and fetch the initial settings. */ static void -i686_mrinit(struct mem_range_softc *sc) +x86_mrinit(struct mem_range_softc *sc) { struct mem_range_desc *mrd; - u_int regs[4]; - int i, nmdesc = 0, pabits; + int i, nmdesc; if (sc->mr_desc != NULL) /* Already initialized. */ return; + nmdesc = 0; mtrrcap = rdmsr(MSR_MTRRcap); mtrrdef = rdmsr(MSR_MTRRdefType); @@ -607,17 +636,9 @@ i686_mrinit(struct mem_range_softc *sc) /* * Determine the size of the PhysMask and PhysBase fields in - * the variable range MTRRs. If the extended CPUID 0x80000008 - * is present, use that to figure out how many physical - * address bits the CPU supports. Otherwise, default to 36 - * address bits. + * the variable range MTRRs. */ - if (cpu_exthigh >= 0x80000008) { - do_cpuid(0x80000008, regs); - pabits = regs[0] & 0xff; - } else - pabits = 36; - mtrr_physmask = ((1ULL << pabits) - 1) & ~0xfffULL; + mtrr_physmask = (((uint64_t)1 << cpu_maxphyaddr) - 1) & ~0xfffULL; /* If fixed MTRRs supported and enabled. */ if ((mtrrcap & MTRR_CAP_FIXED) && (mtrrdef & MTRR_DEF_FIXED_ENABLE)) { @@ -658,22 +679,24 @@ i686_mrinit(struct mem_range_softc *sc) * have been set by the firmware. (XXX has something already * played here?) */ - i686_mrfetch(sc); + x86_mrfetch(sc); mrd = sc->mr_desc; for (i = 0; i < sc->mr_ndesc; i++, mrd++) { if (mrd->mr_flags & MDF_ACTIVE) mrd->mr_flags |= MDF_FIRMWARE; } + + x86_mr_split_dmap(sc); } /* * Initialise MTRRs on an AP after the BSP has run the init code. */ static void -i686_mrAPinit(struct mem_range_softc *sc) +x86_mrAPinit(struct mem_range_softc *sc) { - i686_mrstoreone(sc); + x86_mrstoreone(sc); wrmsr(MSR_MTRRdefType, mtrrdef); } @@ -681,45 +704,24 @@ i686_mrAPinit(struct mem_range_softc *sc) * Re-initialise running CPU(s) MTRRs to match the ranges in the descriptor * list. * - * XXX Must be called with interrupts enabled. + * Must be called with interrupts enabled. */ static void -i686_mrreinit(struct mem_range_softc *sc) +x86_mrreinit(struct mem_range_softc *sc) { -#ifdef SMP - /* - * We should use ipi_all_but_self() to call other CPUs into a - * locking gate, then call a target function to do this work. - * The "proper" solution involves a generalised locking gate - * implementation, not ready yet. - */ - smp_rendezvous(NULL, (void *)i686_mrAPinit, NULL, sc); -#else - disable_intr(); /* disable interrupts */ - i686_mrAPinit(sc); - enable_intr(); -#endif + + smp_rendezvous(NULL, (void (*)(void *))x86_mrAPinit, NULL, sc); } static void -i686_mem_drvinit(void *unused) +x86_mem_drvinit(void *unused) { if (mtrrs_disabled) return; if (!(cpu_feature & CPUID_MTRR)) return; - if ((cpu_id & 0xf00) != 0x600 && (cpu_id & 0xf00) != 0xf00) - return; - switch (cpu_vendor_id) { - case CPU_VENDOR_INTEL: - case CPU_VENDOR_AMD: - case CPU_VENDOR_CENTAUR: - break; - default: - return; - } - mem_range_softc.mr_op = &i686_mrops; - i686_mrinit(&mem_range_softc); + mem_range_softc.mr_op = &x86_mrops; + x86_mrinit(&mem_range_softc); } -SYSINIT(i686memdev, SI_SUB_CPU, SI_ORDER_ANY, i686_mem_drvinit, NULL); +SYSINIT(x86memdev, SI_SUB_CPU, SI_ORDER_ANY, x86_mem_drvinit, NULL); diff --git a/tests/sys/geom/Makefile b/tests/sys/geom/Makefile index bf8604dcabc3..9dc4148aed6c 100644 --- a/tests/sys/geom/Makefile +++ b/tests/sys/geom/Makefile @@ -3,5 +3,6 @@ TESTSDIR= ${TESTSBASE}/sys/geom TESTS_SUBDIRS+= class +TESTS_SUBDIRS+= eli .include diff --git a/tests/sys/geom/eli/Makefile b/tests/sys/geom/eli/Makefile new file mode 100644 index 000000000000..951eb94c559a --- /dev/null +++ b/tests/sys/geom/eli/Makefile @@ -0,0 +1,9 @@ +# $FreeBSD$ + +.include + +TESTSDIR= ${TESTSBASE}/sys/geom/eli + +ATF_TESTS_SUBDIRS+= pbkdf2 + +.include diff --git a/tests/sys/geom/eli/pbkdf2/Makefile b/tests/sys/geom/eli/pbkdf2/Makefile new file mode 100644 index 000000000000..427d3a79eb64 --- /dev/null +++ b/tests/sys/geom/eli/pbkdf2/Makefile @@ -0,0 +1,28 @@ +# $FreeBSD$ + +.include + +SYSDIR = ${SRCTOP}/sys +.PATH: ${SYSDIR}/geom/eli +.PATH: ${SYSDIR}/crypto/sha2 + +TESTSDIR= ${TESTBASE}/sys/geom/eli/pbkdf2 + +ATF_TESTS_C= pbkdf2 + +CFLAGS.pbkdf2= -I${SYSDIR} + +SRCS.pbkdf2= \ + hmactest.c \ + g_eli_crypto.c \ + g_eli_hmac.c \ + pkcs5v2.c \ + sha512c.c \ + sha256c.c + +LIBADD.pbkdf2= crypto + +testvect.h: + python gentestvect.py > ${.TARGET} + +.include diff --git a/tests/sys/geom/eli/pbkdf2/gentestvect.py b/tests/sys/geom/eli/pbkdf2/gentestvect.py new file mode 100644 index 000000000000..491316eda42e --- /dev/null +++ b/tests/sys/geom/eli/pbkdf2/gentestvect.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# $FreeBSD$ + +from hashlib import pbkdf2_hmac +import hashlib +import itertools +import string + +#From: https://stackoverflow.com/questions/14945095/how-to-escape-string-for-generated-c +def cstring(s, encoding='ascii'): + if isinstance(s, unicode): + s = s.encode(encoding) + + result = '' + for c in s: + if not (32 <= ord(c) < 127) or c in ('\\', '"'): + result += '\\%03o' % ord(c) + else: + result += c + + return '"' + result + '"' + +intarr = lambda y: ', '.join(map(lambda x: str(ord(x)), y)) + +_randfd = open('/dev/urandom', 'rb') +_maketrans = string.maketrans('', '') +def randgen(l, delchrs=None): + if delchrs is None: + return _randfd.read(l) + + s = '' + while len(s) < l: + s += string.translate(_randfd.read(l - len(s)), _maketrans, + delchrs) + return s + +def printhmacres(salt, passwd, itr, hmacout): + print '\t{ %s, %d, %s, %d, %s, %d },' % (cstring(salt), len(salt), + cstring(passwd), itr, cstring(hmacout), len(hmacout)) + +if __name__ == '__main__': + import sys + + if len(sys.argv) == 1: + hashfun = 'sha512' + else: + hashfun = sys.argv[1] + + if hashfun not in hashlib.algorithms: + print 'Invalid hash function: %s' % `hashfun` + sys.exit(1) + + print '/* Test Vectors for PBKDF2-%s */' % hashfun.upper() + print '\t/* salt, saltlen, passwd, itr, hmacout, hmacoutlen */' + for saltl in xrange(8, 64, 8): + for itr in itertools.chain(xrange(100, 1000, 100), xrange(1000, + 10000, 1000)): + for passlen in xrange(8, 80, 8): + salt = randgen(saltl) + passwd = randgen(passlen, '\x00') + hmacout = pbkdf2_hmac(hashfun, passwd, salt, + itr) + printhmacres(salt, passwd, itr, hmacout) diff --git a/tests/sys/geom/eli/pbkdf2/hmactest.c b/tests/sys/geom/eli/pbkdf2/hmactest.c new file mode 100644 index 000000000000..5f4e795cd5a5 --- /dev/null +++ b/tests/sys/geom/eli/pbkdf2/hmactest.c @@ -0,0 +1,41 @@ +/* + * $FreeBSD$ + */ + +#include +#include + +#include + +const struct { + char *salt; + size_t saltlen; + char *passwd; + int iterations; + char *hmacout; + size_t hmaclen; +} testdata[] = { +#include "testvect.h" +}; + +ATF_TC_WITHOUT_HEAD(hmactest); +ATF_TC_BODY(hmactest, tc) +{ + size_t i; + uint8_t hmacout[64]; + + for (i = 0; i < nitems(testdata); i++) { + pkcs5v2_genkey(hmacout, testdata[i].hmaclen, + (uint8_t *)testdata[i].salt, testdata[i].saltlen, + testdata[i].passwd, testdata[i].iterations); + ATF_REQUIRE(bcmp(hmacout, testdata[i].hmacout, + testdata[i].hmaclen) == 0); + } +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, hmactest); + + return (atf_no_error()); +} diff --git a/tests/sys/geom/eli/pbkdf2/testvect.h b/tests/sys/geom/eli/pbkdf2/testvect.h new file mode 100644 index 000000000000..873457340579 --- /dev/null +++ b/tests/sys/geom/eli/pbkdf2/testvect.h @@ -0,0 +1,1137 @@ +/* $FreeBSD$ */ +/* Test Vectors for PBKDF2-SHA512 */ + /* salt, saltlen, passwd, itr, hmacout, hmacoutlen */ + { "\331}\035\215\000\272\350\261", 8, "\323\303\210\231\260\225\217\035", 100, "J\257\275\352n\371\300!tp\367\257\347c'\000\243F\246\376\274H\263\312m\336\304\3515P\222Cb\037-\313W\0067\232\024%\235\252\322\035\225k\025\2248\251r\312]v\316\021j\231\224\2556\350", 64 }, + { "\321\213\277\330\210E\207x", 8, "(C\371\344\354\356\232\212\346\014\335M(\234g\226", 100, "\035MoB\245\001\000\315\332\235\356?alD\231I[%A\372\367\027\267,\303\022\324\004\302a\302t\257\306S\251\250;-pa\246Z\200\003*+\026\305_\250\214n\321\340.\032a3\371\346\025\042", 64 }, + { "\344\353\215\257\020\315\245\367", 8, "/pj@N\344\271\243^\352\236gu\352\344os\366FR\362\001\347\301", 100, "\223eS:\015\311\023\317\230O\012\347\014\32070\321\337p\353\305\361\223\323\333&\011'\360?\022\374P\336\337\031\266,~@!\037\000\320v\360!\225\221@C\266|k\370@\305\202\235+\314\247\305&", 64 }, + { "\364\275\222\376\0064\240g", 8, "_\2000 A\233#\372\351\332\247\010\313\274\334\255\362J\356\333\302\345\317\305*\357 \366Aj\344\346", 100, "\223\015X\340\024\244\2767\027\253\261\232\360(?\350H7\326K\322\246\341\222\202:@\254\3218\016T\275\212^\005\344\202\230\220s\311\201\025\233~K6\241*b\244\203\273\355\270\277\242\300V3\037\224\311", 64 }, + { "\272\207\326\030\010\374\263f", 8, "\323\230\233\317\337\001\241]G\312\347\320K\3374\247\016\343\246\353\300\373\267\335\314h\216\245$\373\210\214\014b\340\377\256\0202E", 100, "a\274S.\032\246\330\321\322\207\004\241n\303\363\361\361\215\367Xi\250\275\246\037\355\255\342\004\253\250\243&\032\357\250\204\207K\2612\0318\3353\253\335Z\351\337\253v\345\322r\030\0066\230jp\345\373\203", 64 }, + { "j\276\230\215\031$\326v", 8, "gy\264\354\363\322(w\262\272\203\306{\356\031\376\277+\276L\337\270G\345!>29\010\204m\240!\326\255\326\321\272(\325T\033B\262[\267]\272", 100, "\2563\024\201\310\372\017\373\270\232\277\265:j\231\365\032zS\3723\012\341i\302V\233l\247\030:\355\262]\337\361JUe:\350|#D\262\335)\260\333\273\221\252\005\226\322'\371+a\270a\302\276p", 64 }, + { ",;\270P\012\035\262\235", 8, "\375 \232J\304\271_\272\033\027\363\021\227\260\323\310\304k\004.\327\354\217,\357\353]I0\332We\245\257\371,\260\360\325\224\026q[VuS\217\004\262\376T\353\262\321\241\024", 100, "\313\246&~\374Zq(0\000\002\332\356\355M\353Z?\310~\234\327\011\242\370\032GK\250\020\203sJ\234I,\271\012\230\204g\323\345\343\343\350\231\227\015\350b\256\012\367Q\255v\365\210\247\2614\210\365", 64 }, + { "\021\325\267u\203$\352\274", 8, "\232\032\225'\021*'a\042\023{\250\361r\262\365\370\032\347\336\363Re28\033J\3763^\311I\322:\036\204\320\033\245\200\262\225\341\377\334\241p\314\334\005O,\374\225\234\014\266\365\030i6\210a\205", 100, "\220\006\216\2420-8m\2766\353(6\212\306\261C@\252\2104\005\205\274\204\365\226\373\016\345\332\207\361A\244\023W\3051:\277\2705Z\253\262\371M\024L\215\224\340p\336\355\250\030*8\300\017\254f", 64 }, + { "[\353e\224\2423\270m", 8, "\1776\374\302o0\007\307w\032\307\266\376\320\042/\266\352\233\224\316\3616\314!`\015d\316\370L{\201B\245\317\366@V\036\227\273I\205\251\306GW\200*\340P\267\202#\354\330\266O\347\254(\203\270\366w\274\375\272\016\240\313", 100, "?j\005\340=\022\012NM\024\231\220_u\023@\042\214\014b\375\251\023\244y3m\330\377\341\271~V0\263\223\274\325Rmug\026Dt!\347%\270\244\371@\177\350\250N\320\246\034\320\013|\276\027", 64 }, + { "\262\304(\244\326\272\262\311", 8, "\210C(\273\376\013/\034", 200, "6+\233\201\350\374\2053\013\377SA\007\037\303\027RyrC\361\303\321\031\225d\215\314\213\210\006\031\217\035L)\377'\016\263\310\206\326\372\362\230\226.F\134\277\367\35357(\214\262\036\310@\363#\020", 64 }, + { "\246<\216\226^F\004\036", 8, "\344].\210\212\236\252f\256n\006\250\2615\325\371", 200, "\213J\234\270\227$St\265\035\323\001&\025\027T>\015F\205\325\361_\003l\245|\213S\232@\254o\227\235l$\355\037\214\220\032\213\320\265lM\334\320\313+\205.\355\310\201K\370^\025\134\346[K", 64 }, + { "9s72\020\270\251\350", 8, "\323\370:k\323o\271Y\335\306\375#\333\222\246?C\313\023\202>\005\025\216", 200, "\371\373\341\202(\231\010\325_\335\205\253\216\371\227\354\352Os2\356e\033L\236znr;\337a'\025\335n\032f\304\177u\001n{\236`\261\346N\2748R\017\243\226[\256@<\021m\202r\363g", 64 }, + { "\032\216\254\215\022l\001H", 8, "\027J\232\302\240lTSU\215y\262\360\017\346\3253\276r\276\211\306>\3740\263\264\002\333J;\262", 200, "\3206K,\267r<\302r\207y\373\3625]2Y\3710\343\272\211\202\3465g\340jG\001`\341\352\313\203\250x\221K\254iV\350w\2220\257Yc\360Z\263\237\255\042\325\341\307\330\232s@?\210", 64 }, + { "D\302g\023\316\224l\271", 8, "\262t\301{\366\345Bv\271!\213\303\244O8\314\336\363\325|\206x\034d$#\001x9\012\241\256W\241\334\307\240\207F", 64 }, + { "\037\346\010\241]\004x\204", 8, "T\334\371\316I\33656Q\027\277\203\033\303\240\371\231\352\214\3701@\002\015?2\264\002\257R\205\250\264}\021\012\326\366wF\311\267\271\0042C:/\341\031\242\337\237.\021V\034\263`W\306Y\3533", 200, "V\370Nt\341W\226|\367\226\200\033|\006Kii\263\304\307\347\301#L\371\335l|O\304\300v\361d\255h^\322\026\332U\224\270\255\227\022\226G\326\363\303\244\234\235\016/<\331\247\307\242\355\226\307", 64 }, + { "\364\303X\325\327\256\342f", 8, "\227E\237\320\214GB\332\005\0333\250=\020c(\345\007?\032)\2643\243\202\371\200\030\002\225\011/\030\030\003Q\354\344\361B\214\333.\015\336`\376.\360\243$\017\367K\207\212\347L\356S\230\346\034*\307\207\203\233a\310\370\255", 200, "L(\217#(\300jA\343\037\251rR\312G\024\016dj:\212|\024\373\275\134\375\374\247\266FpF\275:\373_\314\134\244\016\373\203k\265\225\243\212t\240\310\347\226\262%\233\213\332w\042WL\302\331", 64 }, + { "c\027\266\220\010\031\241\313", 8, "F#\323\2367\260\323\273", 300, "@\200\033\254\020\246\206L$\203\026.T\223\205\364\362@\204*\316\232u\033\321\212;l\202\313s\205\333<1~\211\267\213\336Z\276\233W\322\366!\3629l\343@O\216+[!\262I\350\262\312\022\357", 64 }, + { "\001\277`\003x\301n\313", 8, "\257'\372i.M$\356\230\032\252yq\302\004c", 300, "?\037\327=m\335R\367?\242q\002\023V\203\017q8\252\325?6\213\241\274\275\356\344*\312/p~.<\305\346]\377\242\361\025\311\375\303\247\305\345@U\230\364F\275\211n\250Ay\352\026+\253V", 64 }, + { "\203\020{)\016R\324\350", 8, "\261\200\031:\346l\242u\352\300\014_\320\221y\213e\214\352\042c\371\257\361", 300, "\001\2111R\305R'b.L\007$\042\267\346\304(|+2\240\260\021\042\243J\344\237\006\236\203A\032\363\356\251\015.\321\336\03431X\002\355\221\313]\264\310\315o\316aw\246|\312bT:\325\300", 64 }, + { "\002X\311\253\033h\036'", 8, "P\206\257!\305E\377\275\310\005\364Bn\005\342>!w\017@}\245\350\177\305\312\323\361,\301y\022", 300, "\360\301\033\007\367,\374\242\177\3153D\251*_>{\005\272NQ\021\024:0\036\357\333c\254/\001\035\202\341\330\005\0245\265b}\261\232\273\0318\225\227\252\210\361\300\016\357\323\204\202\246\376\277@\225w", 64 }, + { ">+\207\003k\311\225\276", 8, "((\260Eak\253\305\3243Q\332*N\276\323\325_48\317\264&\340\005\323N\224p\003\331Fl\215\317 w\034u?", 300, "\276\317.\310Gj \217\3502.za\021\230\322C6\255\301\354-\263\247\002\352\377\267]\243\201n\245\213D\240\010D|\324\336\251\326\342e\231\350*\300\315\007\234\236\002}\372\013\364\257\232\262:\207e", 64 }, + { "\265G\357\330S\302?8", 8, "7S-\203\036\340\015\356\027\253\302\376\222\037\2276\0141|p\255\313\325\211\206\265\230\333\027\343\231\007\335\366\356\011 $ \312`\333y\267K4\317\277", 300, "\004\264\241\262\204\361YL%#v\373\013@E/\335\353 l\365\242u\215\301p\360O\030{\0236\033\206$\340\263\202bC\032\014\252\365\323\325\350u\210\234\020\037\015\275\000{h\363a\244\024\177\356\236", 64 }, + { "I\257\321\376\365\317\267I", 8, "\200!XxW\233B\374,\362\027,\343\022\204\220\373\231=\376\343\362\246\224 \001\233\015\0338\337\224#%\320\037\342\276\314X{h\036\210w\377\011@=\021\034\3429!\211\350", 300, "`\277s c\215t\251,\306:L\267`u%D\244\021\340\036C\304\032\014u\042\134Mzo\313\225\3641\017\037\271q*\321\023\227\253\215\330\351\373\202\220\274`P\267\277\373\007\366\370\031\350\015\214\245", 64 }, + { "\324\366\347;\363R\300!", 8, "y\262~C\031\252 \004\215a\033\355l9\024C\237b/\032Kk\316q\257K\017\017\036\316\003\246\005\225(\0168\264\032pT\030\250\334\341\020\012X K\325\002\254mh\265\134N*?\233\007Zn", 300, "\202\252\261h$8%\335rv\260\0005\313Lj\244\262\342\202\352\277\005 \2418\2740Y\333\036\014[\015\030'O\351\377|D\0114O\344\203\177\360\337\3610\315\323\2528\247\307\3535R\366)\033\236", 64 }, + { "\301\357\263\261\347O\344,", 8, "\216\376\312\271K}\224Pt\022\2572\230lR\177\340m\224\271\305\237Z\374\252\204\313M\307&\330]^W[\001\317\207\264\305\017\224\331\245\361\301Z\371r\264\223\202\201\353\252k\223Bk\361\323c\307\255(\010:x%\257\3352", 300, "\312\240!.\3606\236]\235\315\2409\042?\027\015\271\030\352l>\272s\345\340\231\317\263\306W6[\342\360\307\305 !\357\003|g][\275j=ptx\344\265\271~\036_\361\004\246\261\313\241D)", 64 }, + { "\257\000;+\233Q\214b", 8, "eoq{\270\246ua", 400, "\251B\370\245m\000>\134\007\256\373\001\251\262,\310\367\376\323\334{K\202\177\235\376x\365D(+\367\361\373\031\376\254H\243\305/N\267\205\2108\301*\025@\030\311\012.\261\237\377\015\205h\261\042\372\034", 64 }, + { "hU\325\246:obb", 8, "?/\352\332\327c\027\331\305N'\321\355\337\316\241", 400, "\177\312\2275\203 \026aNXF\010\377\336=\240\025\312\252r\01363\234\351\2754[y7E\334CQ\371\243F\010l\2545\253\214\341\323\300u\202\225\236\250\356\007Q\000Q\302\207M@g\350m:", 64 }, + { "p(\256-\313\020{\300", 8, "\334\310\227\225J\356\360\307!\353\023\332|\214\306\036\026\253|-\267\341\321\223", 400, "\267\250\271J-\265\303\247\337ib\237l>\352\344\302\3321\3006\240\233\232N\2661\236\022s+\300\1342\375%\251Yl\032kK}\227T`\364\233v0|/\217\026\032\261\020\225\335k@`\021\227", 64 }, + { ",\032\034\337\304,\340\334", 8, "\011F\350\213N\0058\212}N\267\007\007E\276\203C\315\332\013\030`\372\030\370\001\240\030\354@9\327", 400, "\206A\034\355\042\030\025\220\000\251\025`\356\372Fr\313\246L\307\255@;\366\354\346\362\206h\023>A\271\273r\036\224\325Q\246\2527 ^\014!\240:|\335G\322\333\032\005ok~\371\372\255oD\257", 64 }, + { "H\322\305\000\020\341\365\243", 8, "\330\313R\037\276\004\355\327\363QH\327\364r\305}\014\370\007B\252xS\345\003\346\202\366\250\375\237\315 \205\355\214Rj\037\365", 400, "u\346\0049k\347\134\211\023\330\015\360o`\217\266\234\012\007\003\270\025A}\373^\366d:n\344\000PqM\314\200\213<\204:N\0279\323z\337\271\031\337x\0007\352\220\032b \303\346`\201\2729", 64 }, + { "\236\271\202\214\310\003r\323", 8, "\020>\356\364\222*\307l\337\312\351\343R\273pxL6|\305\324\362\273>\332\245t\3267\212\276\231\310\343\243\034X\360,\224il\313\374\217\2407\134", 400, "\224?^QsO\227|\332iTx\204=g\360\033\352\240`\330L\212\276(\201Dx\017\216\016\231\307^\204K%^\327\360\257\236\005j\010\233\371H\203n`zx\230cH\320,M\315\344%\215\024", 64 }, + { "\353h~\2307\320gN", 8, "\235H\252\037+\014\003\265\235*v\020I\376\207\331\222\266\274\0270tb\341\276.\306w^\331\270\263k\341%\270\200\232\321b/\244\310\016\361\316\362:\375/\371\255B\307./", 400, "\221Y)\236*\214\226e\360\324\257\367\230R\014_\314\214\236\027O\004\305\370\317w\257\260\001w\245\003P\371\335Y\240\227\365\243bh\254\372\247\375\301)k\255\245&\262\036\374_\026\224\326D\220\336\246\351", 64 }, + { "\362\023\013 \331\240-M", 8, "\353~\003\260'd@\026_<\301\360]EU\332i\336\177g\347\313\232\337\3562\010\250\345c\235\265\236\343;\322\302~\317\371\002~\027\012\332\301r\014#\322\004\353\261\275g\263\017(W>{`\322P", 400, "SA\003b\271\034\227\224gN\023\203\207 mW\365\257Nz\267wn\016\221\017g%(n\256/\330\311\377+\335\261\343CA\015A\272\352-\345`\245\370W6\020Y\215\2212\000\272\001\022$*\376", 64 }, + { "\250c`\236vN\302\210", 8, "\257(\256\0171z\243\023\042\134\363\223\252}GzB\307\261\220\301\270\027\327\326\353\253>\313\276\006UAd\355}\276\320)\375`E\353*-\370\226\370\021\004\203\374e\016e\275\202\313\227AP/?5\260\225\217\243\276Ag\377", 400, "\203\022\352c\27522Z\265mo\224\016G\376/C\026\000{\0201\015(\224\005!fV\262\204N\265\206\202\336\255\362\036\015\330\241!5\247\035rVG\346v\301W\306\204\335HS\371Tlq\207\334", 64 }, + { "\327\002\265\344\005\337@O", 8, "\233\317\326\221:\2409Y", 500, "\134\021\253\352\370\313yg<\015\200\022b\317Vq\262\220\257fL\315\302\201\266\036lxQ\371\021 J\337)(2\346\017V2\310\217\030\274I\357\215\2115\277p\351\236\012\272\346V:\317\003\326\2062", 64 }, + { "\320u\027+-\245\0217", 8, "\216\257\376\3147\035d\300\366\365\315\320w\304\236$", 500, "\001_\134H\237\352\244\340\034\274\366\034H\321\311\216\255R_U\263\221\206J\301\2641\304J~\274oH\007\340\246a\313\204>\216\330\311x*<\334T\216\251S\322at\360\234\243w3\033\2061PL", 64 }, + { "#@\256\000\333y\350\327", 8, "Rb\213R\263\262W\317\333\354\261\340\246\26119H\334\277U\253\266C\247", 500, "\343\224\023a\337\367\347\276\245\310-(\363\021\271\221_\360\245\233\356S\236\363\027\212\0046*\244\376\3032\352\007\023Fs-\332\203#+\355\244\33654\205a\200\302w\314\335\0157\212S\227\271l\202*", 64 }, + { "\350e\303Y\257\366M\223", 8, "d\311\323\036\030%\266j\372\006\016\024;\344\350\256\234\026\341el\325\270\236\226\020\312b[\212\353\343", 500, "F\026H&\347}\264@\307\246ap\356W\272P\023\254\204/-\006\337u\230K\221\204\312h\337Q\021\037p9\222U\032\262k~\013e\017X\134/\243\264>j\251=DBu_*\350Z\260\010z", 64 }, + { "\277\212\2413\001K\016_", 8, "\005<#\022(`\277\021/J4~\363\354x\207\271\211Ft\233\026\252\326:\236", 500, "\220\344\307\355\203\332\013\207\2504\364\207\303\026\316\251\026X\367\373sN\225\2540\243\006\233/l\224\370\310\346\352\227}K\267\223E,\010G{e\270>})\274\312\001\3350\311\261\367?7\251|i\243", 64 }, + { "\271\035\035\334\321\366u\304", 8, "\325L\272\252\211;\134\014}^\270\007<\316[68S\361\3264lA\240}\025l\032\265\036\247\227!\035x\354C\262[\177\320\324\305%\333{\317*V\220\027\367\322_\234\017\253]\024\347dDB#>\373\003\216\347\333r\220Z\334\301\346\356']\323 \375t7cQh\010\004v\2253", 64 }, + { "\275\303\226\316\005\315-\300", 8, "\223\241?\356\014`\255l\337ad\241k\345\355\226\334\266@\217C\221\237\005", 600, "\312\375\227\367e\311\261\367\012\304\303\372K:\226\326\010E\235\355A\225\331j\026n\3264\303\301\324\214YnM\261\310\020\002bi\324\311\247\011\237{;\013\216C<> \017-xk\370\265\303\333\311\014", 64 }, + { "J\242\213\023\026l\3506", 8, "\303\020\346\376\230\303\347=_\355#\0015\363\345+\233\216\203l\347rSa\272Q9\336>\034\257\233", 600, "\3331\377\232\361\326D\362V#\2124l\237\327\215\231\375%|)aM\037\201\030\027\341OxFU<\306\302\355fO\326\325\242\177A\254\316H\247V\227\342\032\377\002\256VY\220\303\363\206[j\222\226", 64 }, + { "\222\360%qi`\034\316", 8, "\370Hx\232\025]yH\337ys\310\032f\317g\371\315-zT\225c4\033Uy\021\314\013\337\260\247G_4s%\261\004", 600, "\336lk\337\003M\223\020y\344p\356\250\000\301z\337\263.WN),\335!\375\227\210\367d\263Z\214Y\330\333\264\030\004\326\011W\005\323\3448\354(^T'\200\255\301\320\012\355F\240\271\203\012\353\313", 64 }, + { "0\015\376\022\354\343\255/", 8, "\304\347\345\335\327g\331\204\343\025\246\030\247y\365-\266\264\361\212\366\211\035\216\276+\235<\371\321\226[\250\336\346tn<}\247\2076%\231\373\227o\351", 600, "\201\306eLu\262\032\355\246H`2\246\247-\007\217H;\017\370\277\237)\275='\001HG$\134\223N\000\335n\304y\272\205N\2265\310\305o\250# \235r\312\236\217W\324\360\323\007\351\215\232+", 64 }, + { "\030\253\370\026\377\013s\252", 8, "\337\202p\313\334&[ql\346\042\350\016\272+\322|\004S5d\223]9}\250\253EW\357+\215\315\255\246\023\352>\274\001\027\231x\225#\261:n\342\012l\253\005\036\134\327", 600, "\223\241\274\227M\2322t\205\027\016\377\267\015\350\012Y \321\217\000\305\305Y\322\301\260\316\230\200\003rQ\235\245\177\003\305\342\022Iu\375\323>1W\002\013\321k\264\334?\225:!\377\014\331\206\270\371'", 64 }, + { "a\033o\014\314\261\004\243", 8, "y\340j\235ZH+4\023}\372=4\262\303\213\134|\220\252\255\0014\021\262\355\224\212\312\341\277 l^\021t\261S^j\007\313N\005\277\340\224\345\320\346\226eH\042\313q\271i\317\023U]B\331", 600, "\355=1\261\000\236>\260t@\241\370\305\323\2139\016\316vb\352\2533\336L\015\371\321\265\211_\273\177c\311UAa8P\263\017\272\037\217<\201\327\205\002IV\227\034\273\002\002\3312#\243\225\327b", 64 }, + { "[$\035\042a\220:c", 8, "j\312\316\373\207\241\335\304\0327\033\263\274[\305\234\371\224\253\012\266x\340\224V\230\335\374l3\320L\252\306qA\344\3069C&H\265\211\306X\347\311:\376\223It,\251\300!h\24791\371V\007\375\233J\032\330.\236U", 600, "`l\213nT\353\237\304\251I\256 >C\231\000X\377\332\206\204K\262Z\353\327\022\265}\245y\232\3368WI\332/\213\316\042\371\200\033\0378\322U4J\363\360\357\350\361*\367.>\363\377\334\0232", 64 }, + { "\354\304\015\017\355\240\021\276", 8, "\247\274\225<\353\357\376c", 700, "\374\221\245\277Y\007w\274\375\266'l\316\243\333\312\223\257\301\270\303K\337q_\331\354\347\376\012\223\275\344\001t\373F`\235\302\3108W\332\205Q\223d\004\207\223aki\277\307\313}\326\254\234v\042\341", 64 }, + { "IZ\367\257\273\377\332k", 8, "i\027\226\010\004~\257w\273?\222\224\212\274 C", 700, "\253\034\346./iA\3661T32Zw\312\266.\357\034\032\202\213\332\320\356\356\327\275\217\251\326\356\042\377^\270\362\346W\367\353\237\331B[\021\034\310& Me]|\355\274\207\325\372=\373iR\177", 64 }, + { "G\334S\242\304\334Y<", 8, "\330x<\264\323\016\237-\300\231\260\364\210B\314bW\255/\235\014\277\3450", 700, ";U\042\252\241\200\357\247\366\020?gb\0358\231W\354\331\377MS\273 F\3361\313\377\344\361\004edjn\276\261[\0221\225\017\3731\203`\350a\301a\005\036wwQ\034m\323\226", 64 }, + { "T\236\334\030&\300sl", 8, "\006\377L|^\220T\213\307-f\214\024\215\251\366\224\240\250L\364\346=\224\001m\206D\335\375i\371.\261\3026\364\270\225\320", 700, "|i\376\031T\307y\012)\250\211\242c\200\244\370\232\212\206\316$-\031~\274\264\302IJ\243\356\367\232C\314c\013U\037\236\305\313\264\207\322}\273VHX\300\321\002Yi\237\261\345e\031\005{L|", 64 }, + { "A\313\345\257\373[@]", 8, ")\227\310\042\306\361\235\256\363y\337\341\265\3144\344\012\342\3540\260>\343\246\214id\013\254c:\203>\020\365\267x\243\013B7w4\235\267\015\330,", 700, "\0428\377Wc\042\366\266\227\254\030_w\263g\202\376\326\267\253\336\265\353\026\200t\017\354l\227\352\314[;\364\263\361\203\215\220\374.\272\042:.@m\033\250\274}\3646\000\330b^\363\364\327(A\015", 64 }, + { "\210\332a\312\367\024()", 8, "]\215\337\017p\215\251/\2747[\206\312\314Zk\267'\324\223c4\265Z%\315\210&\014\021&\262\270U\274@\374\221\0262\2720\3360?\274\214\330\302\373\240G\205RwQ", 700, "0\3646)\364\337\3250\333!\010\356\306D\241]wn\353\303\265:\374\315~6C%\250\346\234\231\367\330\367\220\221\324\255\221\375\344mc\271+R\324\374z\027\237H?k\343\211\022\014\375\134J\256\014", 64 }, + { "\305\354v] \232v\253", 8, "9\230\361c\001XS\355\303\361*\366\267z\363\226\237\331E\336\222#\305\037\326\005v\336\375_+=\277\212_\0269!A=\235\007h\254\370Z7K\346\277\246\360*\015Kb6\303\022\224\322\026M\313", 700, "\253\232\256))\226\212\353\237S+\307u<>$\3440\367\363v\222\250\321k:\323^\234P\351\236f\205?\003F\326\016\355\311\244\023\346\321\243|\256!\273\2243y\226P\026\323m\250\306\360Q\267p", 64 }, + { "\001\363\342\257~\177S\275", 8, "B\012\033\376\003<9&\264 \214\003\212\001j\004;/\321@\231r\267\024\302\270\344c\0306\262\215\205@\263_\360\033j\3177Z\220\042E#\206\231X_}j\012\340\365\325\336\376D[\273g\366O\377\300\265\373\256\203\2779", 700, "\013\331\003N\240.\215\336\022\230\317\271\042\376lv\311\036\305[f4\351\314\237f\323e2u2\272g\225\261b1\027\246>\251\235\261\326$\243\201\342\250CG\224MY\3737\225\312o\355TU\032\275", 64 }, + { "\017\327\331x\230\001\363\353", 8, ".\331\317\373;\330h_", 800, "\265udMk\214\004v\236Q\366c\336\020\010/\243\236\262\020\320\004\016\241\371\242\232i |)\240\305=\266\316\201\350UAY$J\243\230\267P\377\011\000o\033+\211\236\020r\356|\261\317\033\355u", 64 }, + { "\032\276\352\212\347\313\231;", 8, "\311\365\134;\311+\024N\037\134\0020\362\354\324x", 800, "\276\004-\013\036\334\372\350\311\270\306T3\014\230\351\015\230^@\330\342\304\324\034F\264e\367\013\273\355\251\260\271O4\257\020x\362*\354il)\363\201\017\232\032\344:\312\037\005\341\325\3720\326\366\002b", 64 }, + { "]]Yk\304T\222f", 8, "H\031\273\324T\210$\267\222\324\027\270_\2514\214\347\317o\177C\272\313\012", 800, "\325\007\134%\256\3015\242\203%;\261\350\324!\262\367\002H\177\355\247Mk\042m\373\263\306#\301\3472\354\344\353\031\346\246\017\202\342\306V\005D\266giX\205\012\016H3\231\344bn:;v\225,", 64 }, + { "\346\320\306\0348\265\356\000", 8, "\376S\210\356d\366\033O0\352\265\314ZV\263\3701p\023\262f\227\356\025\361\002EV\204\337\304\206", 800, "Z\2104\306`\244\211\342\010\204%\343\240\207VL\375_T\342\360\031\017\257_\207\345\327\014\347Fn?\331QY\310\375\334b\244\337\241\003\370\202\0356!\305\326z\330@\201\0241\244\332:v\371/\264", 64 }, + { "r\206Tl\304\226\231\356", 8, "g_B@\2277\267\027l\314\247W\306\346\221\226\223\201\013\263R\245A<\024\177\007\230\222|\216\331~\233{\350n\244\341\362", 800, "f8ma\263y|\237\2600q\021'\276I\3642\276\344\255\345\032\270\273\032\262\365\026\004\364j\211x:\330_\207\250\336\311\016g\376\261\366\307\345\223\204k\362\355\252l!\357X\211\003\035L`]\341", 64 }, + { "\016\320!\037;\311\210\213", 8, "\347\042\302\3575\315\031\013\267\340\377)\031DY\177`G\316D\251\025\327o\311\233We3\236\022L\017\354\314\342d\207\343\017\345\235\010H\210\225E\345", 800, "4V\003\007\215ht\377\262zSoW\277\3314\316L\376oAw\367\015\224\304\201\2176\277\375}9r\042\304hZU\374\306\202\205\354\2167M!(\371]\313\357]\233\005\345\256N\252]\177Q#", 64 }, + { "\347\274e\2157\327\016 ", 8, "\272xp\134\303\305\032\372\217\330\225\227\354\372?D\027\354\212\376\311\236\260?H\362\257\006\261\003\350|p\266\331R\363\036{\332\335t\021\327\213.\253\202Ss \335\252#*%", 800, "\1346\322\026\247m\011\012,\203\263\2449,\344\250\235\360|t>\225\277.Z\215\037\226)5\356\345JV\334\234\211\357c\024=\2534\257\026\225\005\023\221\330\275\010\246\011^\374\034A\246Pd\212\234\317", 64 }, + { "Z\207\036\243J\207\322D", 8, "\323\326\355\204\245}\341\034\322\331\364\234\240\241\260\2203,X\355\362\335O9^V\212\373;\214\342\334\020\316\234\214\324H\317wH_\313S\257\335\240e\007n\372\036](\317\024\331\231`\031\023\002\243\033", 800, "\224\343\262\023\213\042XE\317\300\260\327\316\217{{\322\307\234yqc\011BMd\312\373\375M\323]@X\3400\012\2175k\235_X\307a\134\023\376\035\323Z\312\011\376?\346\006C\356x \332\323\227", 64 }, + { "4\324\256]z\277\006\304", 8, "Os\324\324\223\211\353X\217\245\344\317\334w C\265\024\371e5\007\235\230\364CH*\036\243\251\222,|/\270+\31386ywY\202.ByB J\245p\237(\315\024l\362\240SC\352\261D\24176\026\024D\023u", 800, "\014\217}\334\346\012\202\320\323x\317\341\363\307y\261\134\355\0259|\237\224\200Q\002q#\232t\336\215\303\355\020\263\221\0257\205)\374-\316\271sj(\000\332h\303&\003\323%\3052x\035\230\3673\267", 64 }, + { "\2311\362\360(*\314c", 8, "\226\205\332a\235\200\177\002", 900, "\266N>\311\351\345\223>\327\365/\202\006\211\317\345\265z\001\276\340'\355\303QyH\367\311\042\032\350\331\012\034\261\327po\323\275E\317\000D\234\355\032\241\242\332]e\276Pk\264\000\211ia0q5", 64 }, + { "\020\277\212\360H>\226S", 8, "\333\342rh\323\302\366\223vK\376\004\340\213\316;", 900, "\344\254\354@\367\243\012\310\303\042\263\330\230\230\307\266-\011\134\024\221[\371\320\324\244\375^S\314u\303\335:", 8, "\035)\304;g\254m\313n\232Rn\276\022\264\317.\210WB\272\026M~", 900, "[i{\304\237n\213\314\375\2223w\134T\257\027\265\307\015\264\016\022\245~\250\031\257\342w\211Q\242{\012\370&\003P\016\311\032+\235,F\260\362\327&2wxw\030\277D#\365'c\216\303A\356", 64 }, + { "\324\210\245\303\375jc\134", 8, "\003\042\006\004.8\256\321\013\216'\227\210\353\226.\364\037\300\351e\206\357JY\201\254x\015\352\023\212", 900, "\2727$\177\202\237\0142`&\034\321\224P\3620\013\367pg\371h\315 \134\227\306\241\257\3333uS\025\206\030\2704n\013\354^\032\034\266]\024\254\000\256\356\2356\331nz\263\310Q\2178\201\310\320", 64 }, + { "\322;F\214L\230wH", 8, "\330%\316\307\264\310\375q;+\256*\315h\300\274\215yZ\320\360\203)\353|\310!\016u\260\350\222\323\177\303\226\212o\3255", 900, "m\267\007?\353\220\220$\231\316;f\201\253X\312\320\006{\307\014\334s\3257\277[^\0055\2567\134\270yr9A\342\273N\217i\374\314\364\301\312\335G\036\014R\341|w\323ei\226\014I\034C", 64 }, + { "\345\342>\335\2457/,", 8, "\355\262\340\201\134\012o\2011F\234^\321\211\216w\207\022[\361\310\004\236\256`x`j^\263v*\2250\336=*\340\017\317R|\00164\353<\244", 900, "\004\240\005\275jv\352M\360\350\036U\306l\237[\031C\224\205C0iT\370\242\011K\042\030\333\375\302^\255B\301\354\310\240*\323\257\310\222\240\354\233\221\346h\311;\214\321\240\341]\363\326\335\022\216\224", 64 }, + { ".\245\313\031\277\374\042l", 8, "-]\026q\347=q\004<\002@^\242\277\355\212\334\337M\304B\351\015:p\323!lA\357\204\206\364*N\317\363\016\016\230D6\227\337\347*t\243\177\021]Y|\240\035\006", 900, "p\006\336\010\351\337\304\260\372\210\267\013\231 t\265\231\274{%DScF\3726\320\205\275 \011h'\251B\363\323L\014V\260\362#z'\233\322H_\306t\273\027\353\272\021f0Q\222\244\0316\225", 64 }, + { "\014Y>\242\331\270\367G", 8, "\222\344 \364|\347CP.9\372Tu\341n\014\333\321\034\204k4y\312\314\363\323(\221\365\023\032\342Y!\010n\273\213ot\346\310h\304\220y./\235\342Pg\214\037\217\352\316\374\276\3740\256e", 900, "\211\042{m\201\233_\3020\350\237<\315\272\256\200\010\323)\210\210*\042\200~\266\343\177ic\212\300\363L\215\271\022\2609_\361eWbF8\203\271\363\214t\272\275X5\011\355<\2233[T]P", 64 }, + { "\334\023\304\233\305\200\206\272", 8, "\314\332|aD\003\341\033_\3733\374\263\042L&9\014g\336\253\355Ir`\004\014\377\306\2031\212nX)uG\236I\021\031\337\336u0m;\3126u\332\025Q\370u\303$2*YH\211\343Z\3628\237\274\2061sw", 900, "\005Zx\257\262D\357n\005b\014(\012\277O<\313\361M\331\373mB8\031\215\035/\247\005B\343\346\305\337o\024\275\357|Y\235@\221}\202M1\0325\306\325A\253\250\241JY\326\255\032\272\314c", 64 }, + { "Z\270\301ED\237U|", 8, "\0272-\237\010\275\377\042", 1000, "\360\355\220\212\252\371b9P\343K\301,\024$\227|\305\346\327$>\215R\243\214Vs\273W{\306\234x\347Jlb\211\355\321\310\015\002\267\352[\210\335Zl\341\023\236u{\225\264\027\370Wc\343&", 64 }, + { "\262\3435,q\037^\014", 8, "G\330\246\256\356\260\201)P|\336R\254\301\265m", 1000, "\314\320h\267\227\350\034\216p\334\250\372\230\300\273\220s\352K\341\347\253\317\321\362\042R\311fN\177S[\376b\354@R\320\010\251W\374\256]\243\262NO\000\206\347\005\306`\215u4/!\365\025T\026", 64 }, + { "\033\341\202Z\263\274s\025", 8, "\317\320\367\371\200\035\361Z\240oE~t\347\300\227\330V]g\337r\316@", 1000, "\234\313t+9d;3\226!\325\256\242\211`\323\030\352\336\377\306\215rZ\263#{\306\037{7\307\203\325M\032\031Q^\260[8$a\272\215\337?p\022A\335n%u\214\232\303^\352\241\251~\247", 64 }, + { "uc\214\232\3031l\300", 8, "\013(7Vl\341\013JA\276\222u\345\271\363\015\134\317\340R\214\335\312\245\264z\324\326\366L\344\250", 1000, "'\352\216\246\314\215\365\333%\334\202\342\334\352\347\211%\312\215(R\312k\246\330\207\223\004LhVFw\374\322\331\275\265\334k7\343\013\312\010_\264\362b[\254\366\226\224hvgG\307\200\347\216\033\036", 64 }, + { "cD\020\266.C`u", 8, "\247&^M\360@\266Y\365\322'\367\262l\376\250\042KU\360\237nOl\207\346\2520\203\0428\003\332o\344\0046`\226a", 1000, "\241u\001\027W\202YT\341\275\204.Y\242_U\016t\003\025\001\340\304\213\364L\264)\023\346\031(d\234\256\313\204\260\262x\220N\017\274\340\315\000\276q\017\001;x\375v\004\025\300\276U9\336\260\375", 64 }, + { "a\0162\201\011\221d\017", 8, "\256aW\215\327\374\235\334;\303\032\021\037wg\306K@\001d\213L\244>\343Z\234u\336\313\024b\344`\233\271\234\333\365\305Z\306\0218\310UK\306", 1000, "\304\023e\243|\032k\320ni\270\002\252\306\036tZ\015j\373\340\331\207\245\347\032\261L\354kh\012\356\363e7\015\334\352\206\036;\320~\331\260\330\003\257\310\244\364\244\370\305\233:J\363\367\324\362\025[", 64 }, + { "\324\304\265\306\270\217\276\015", 8, "\276\027jRk0X\215\227lG\236\240RpJ\220N\005\250b\345tQ\221h\321\354P\371\035\244$\256l\023HZ[\031\255- O\236\222:\267t\254d\313's\317\024", 1000, "\250\316\327\215\271\374\206\207\220\351D\263\306Q\362\366c|\273VQ\241\016\377\004n\314f\215\253\305\321\350\236.ZjX\037|!\314m\331\3775\011\034n_\263x\267\345\241\322j\230l^G\334\256L", 64 }, + { "\030\302&\234\200)\230\305", 8, "+L\221:5T\274h\237\256q\323\353m\333fh\201}Q\351*\351\240\267\276\327\007\254\316\214J\342\350\351\367\367\266\301\010\3775\015\014\351\337\3264\355K\027\355\327m\300\241@?#\232\225\263\037\007", 1000, "\201\355F\216\035\037@\350_\232\325Mx5\353\004*\372\250\370%X\247)\315\324\314\256\315\242}?\373L3\346a\331\302\134\334=\237n\275 \330_OZ]VW\007q\312\254\244\276\024\034K,C", 64 }, + { "?\362\015\253q\331|\250", 8, "}\020\020\337\215V\263\334p\346\003G\363\301A\333\134\177\222w\271\262\306>m\2774\343\006#P\260\306mS#Gs\250\363u\230\227\377\015\361\235\336\273V\230\316\214\276l\201\272\241}\361\260\357Aw\015\263\246/\366\026\375\037", 1000, "u'\305L\233\270\032\326\225\2422\323\347\335g\374\270\023\352E\305\332\240\231\244\035\343\226\322z\264\346\354M\036\211ye:A1\257K\236\215\333B#BV!\333\245\336|\217\317P\257>\257\265\252\003", 64 }, + { "(\134\324\014\245*\260?", 8, "\263nO\374\320BL\042", 2000, "\354`\262\357X\301\351\240\333\374\3536\307\367A\273gVR\366B\1775\217_]\214\016\2641j$kE\201g\270,\276$\213\205\250\237\005\211D$\351\241\334\222\337\326\360\372\277P\002k\224\235\2137", 64 }, + { "VC\260\247\227+K\325", 8, "\214y\202\334\330\323;\206\274k\026\333#X\247H", 2000, "\005\366 t\203\277\030z|\241z+\222\344\134C\306XV\367\042\032Y\2074j\211\034g~\013\263Z}\354d\342\246\005\011\250\230\244\222\336(\224\320\320\221\237lj\227\003\345c\311P\023t\000\243<", 64 }, + { "\226\264\332\250Q\332\033?", 8, "6\177z\010St\034J\240\224\003\367\252I\322/\034ZS\243\322\307\374\311", 2000, "\225\325\364`R\004\354\021\306\2123\337\341M\273\023xsu\030\210\267U\375\011\223{\002!3a\031\254\247\200\302\265\016\277\301\235\024\014Vj\363\022\367H\224\372\205\337\302G\035\351\257~\316\371\252D\342", 64 }, + { "\347\016\225\220\026\324\301Y", 8, "\351\314\237M\230\305o\321\374\374\253H\236(*=1\364\203\007\210\344\001\245\2736\022\340C\314\265\224", 2000, "kN3z\003R\340\020D\033\221{\234\352\211\201\315\356\017\234\370\270\214\035J\335KM\255\200I\010=:\3512\030\260(+\257\276\275\001\361\263j\030\002\224\352\372\031$q_\023\330\333\021\233\240\222x", 64 }, + { "\340r\267}u]\377\350", 8, "\242\360\243\361\363\020jX_g\376\016X\352dF\022;'+\306\213\375\036\224\214A\242L\022\334\025\231\015\267\305\001:\032\270", 2000, "\230D8\251\010\031,p\016\330\310\233\241O\031#\310[\324u\261\207\2042\361u\310;\366\342[9\201\005\037\20261\316\351;&\273\325\263\305\325@\251\027\343Ak\225\270\014K\342\037\015\305\247e\231", 64 }, + { "\013n\007\254\357\255\217\340", 8, "\334\015\217\312\237\315sW\026\357{W\321,\031\034\374\023\2720y\251\235q\030\2170\357\251\366\370\364\312E\205.w\273r\242`\246\005}>,\231\250", 2000, "w\210\363\2605\020\134\374\231\024\327\314\205\310\325\247\033%\322T\226\271@\302\004\266q\304\345\326\275\347\260\322\361\2435\344\010\356\300%g\307\217K\0423!`R,\005\327\201\0037U\266\2705\275\343r", 64 }, + { "\202\361W\024^\252\307\235", 8, "\356\247\020\315\037(p\361\006\223 \261\035\332b\222m\236\027\367n\020dw\323\247\3017:8\034\256\302\363\263|\273\134TF\260M_D\3418h\237\365\260\262\257\007\344\231\351", 2000, "\327G\376I\211\335s\3060\367\277\200\015\270\327\351\023\3539\245\203\356\244\367Y\244\340\277\207\235\360\027\347\352\343.\301\3570\347\330\324\352\353S\242>\324w\213\271\262\013\211\250\035\261a\011\271\370\034\3633", 64 }, + { "\207-J\204\243\334\335\016", 8, "\261\134\241\340\024\3441\306'\32061\256\202\267\232\370\2327\257\357\342R\202\326\345\300\362Cp\315!;\320\305\240\013Zm\234\343\217\373f)#\223\343s7\320R\342d\224\027\212,+\304\262k\243l", 2000, "\271\317r\177#\201M\306\320\314\317e\236\042k\031\032\242W\364\321\255\026YkJ\371zp`\337\264\212\253x\034Ef\2003\214-\370o\277\305\3671\355\013\320C\247d\214nA\273!C\375\025\2218", 64 }, + { "\300H\213\371\272>\337\241", 8, "\001qO\241\310Gs\274\036\375\272\362\033\014\256\327v^\037\321\246\277e\224\300\235\231U\367\316'\014\327\232\265Z\033*s\302\252}xo\374(a\231\355\301\0350\021\231\024F\177\276\341\221N\316\025f\320\324\134\247\376\335\274c", 2000, "\301\360\262PJf1\243rl\320\364\320\017\312@~\240\031\206\211\261\330\035?\314\356\253\263>\016\252wt\341\213\001!\014.N\264\350\377]\243\234\245\354\325Au\353\227\236;L\333\332k\340\343\352z", 64 }, + { "z\015\256n_HF\264", 8, "IO\305\325\253\232\001\022", 3000, "\021\032\252P\005v\354\234q:\204\326\203U\2162\246\371\343\340b\327+\037\330\360\241_\215\134H\214c\373Ix\364j>\036L\016\355i\226\034Q\370\320'\320'\014i\336A\210Z|D\200\006\006\202", 64 }, + { "\027\035\353\321\372\222%>", 8, "\375\3772\334\316\222?\333\300\325\265\005\360\361\347F", 3000, "\231\0011>Jk\031l\324q\271\2308\316\025B\362/JA\010\370\021\377C[3\016G\260/l~\042\350_8\252%\373Q\275-\263}>\356\330\337&\005\265L\353\377\021\324~\255\371\346\316R\204", 64 }, + { "'\331\374\255\355\315\206^", 8, "~Wx\355\211\365/\372@\022c3\337\311\233\253\007\215j\356\264\254\321\032", 3000, "}\344w\013/\000n\371<7", 3000, "f8\205}\321\371=\330\3410\034\030\354\323\033\270\333\227\320vUS\336\305\010\332`\306q8\351\027\034n\372\356\363$u\376@\017\244\3467Ft6H{\264\345\275k\302G \334\202\275\257\375\242r", 64 }, + { "\241\364\000\231\250^_\277", 8, "R4\332\217\332\374?\341\030\277\345\025~Q\364#l\307\273\331\357\0352\361\373\246\320M\220\250\265EP\225\221(\236\026\332\272", 3000, "\177\243\277\322\005\134\016\015E\251\300\205\250\352\366e_~\377\251+\223\011\021\326\042\033\277\267\206\037\224\231g\260\031_V\341.\300{\243-x\025Q>\177u8\223\177\032\201T3\360\033\336\201\255\234\024", 64 }, + { "\020\011\277\006(\215\353j", 8, "\215\341\262\207s/M\323\274\341\223\322q\215t\177\225\246\367?\326\245Y\330\026\221:\370`u1\305\377\261\215p\311[D\0229\200(\205\216\341\247\230", 3000, "\236\022O\372{|'\313\011\216[d\364\210\030\36249\2122\266\221\022xD\266\363\207'z\215t\2448\007Be{\272\244\207\251\352\365_\353t\333u\355\317\327\327\205\222\250\003\330\201B\023\004#5", 64 }, + { "C\251\361u\026\34102", 8, "5\343\200wqFK\2739\260#\224\301\256\323$\247\033\272\322\346_\227k\274\250Wzt\3062\134VI\202\234\325fv\013*m\003\355=R\366\214\233\305O\333|\200\376b", 3000, "\030\177WT\007\014.\134XcB\245\202\004\363\021\313E\344M\216\332<\330W\360N\314\134\341\255\030%\031\323\024\035\312O\370\213\017\263\034*\261\344\031\356\237\271Oi\213.\276\315\314\367\222\212\027\024W", 64 }, + { "\311\254\331ZS\226@L", 8, "\013\320= \345\032S\317t\255\2550\245\3062\232\316\241\002\235\333\015$Lx\376\026\334K\010\360=\237*;\007\134\3506O\352,\037\322\342\013", 3000, "\344\202\347\365^\026e&\200\260\214A\324\264\022\313\225\351\033\254\254o\357\255(\215^z\034\200\220\312K\301\240\227MO\030\231\366\020\031=\203\012\224=\024\004>\316W2:\363D\365\231hy\366\365j", 64 }, + { "\134#\216 D[\241\223", 8, "\017P\274\200^(R\220\266g;\211Z\265\036\345\337\360\2310y\031\330\206rF\253\254\375\271dr\321\367iT\304\2003fV\367\333\264\247\2370S:\377&\216\360yfs\202h>\327\347C\261\345\274\357q\037\331^\305\134", 3000, "\177\373nj\013\324\202\021\035]!)\370\370%\005\353\016~W\330\265\217\362\337\301Z\275\321V\000g71\335\377v\013R\335K\315\241\225\216qE\312\272@.\020\315b\247l\3359:\242\265\000)\310", 64 }, + { "\304\326\303\344\272\260A?", 8, "`f\262P\027'\211\217", 4000, "\012^\363\365\134\265*$\014\270]F\274|\375>p\341\003dT\242\337u{\314\205\307\260\360\322\025\214\007E\307y\365\352\310\240\372\134Fji\370\241\017\305\336\262\351\332\002{\026\270\376\363\266\134\274;", 64 }, + { "1\2004\011\006-\032R", 8, "\353\371\330A\261\263)\213u\007\233-\354\230!\202", 4000, "{o\014.\322\016\323\244\021\037&W4*\362\300)mGv\014\016\306\307\237/6G[\267\033\213u\313\266J'\276GtN!\000\216\363^7Y\037\370\021\014\333\250\374\332\274\235l\230\263\220\347\222", 64 }, + { "\354n\227\202\363\306j8", 8, "T\334\212\366\246\020\042\264\342r\271\317a\0047\322\317\354O\031\202\342\370o", 4000, "\312~\260\260\027\266G\247\236\312`n\335\342\262Ec\247\272x\001\003\252y=\002\362\362\004\326\350\007\0252!\263\312\360H\344\246\016\207vEO\022\205\212\306\276\251O\325;Gz\307O\266}\020\322\376", 64 }, + { "\360\263\275l\234\244zO", 8, "\335\375\273\001\261%\233,\007\350\255\247\342\235\310-\032\035\314\246\252\027+a\233f\204\274M5W\262", 4000, "\317\365.\214hyP\313\205\356(4Y\251\224W\367\263\361\027\262\324\277\255M\010z\263\314?0\025\003\367\332\236.\004\331\302\232\011R\332D8;]Dz`v\000\246\242a\247b\033M\031\270\011?", 64 }, + { "v\327\346&\035C\320\322", 8, "\260 ^\376\355\375\2567_\272\252\255Wb\376v\0057M\226\346\031\272a#Up\264#\015\311\342+\2128`(\224\224V", 4000, "`s7\365\307p\250\356x\310^7\320f\2442mm\242\0207\023\360\300\264\336\252.\266\244\202\134\042\311\023F\374\206\225'\371|\327R\371\277\357\307\304\250\352E\016\253\010N@-/9\257'\0235", 64 }, + { "\252\317\025\232\012l\372\275", 8, "\216\020\363\015\245F\277y5\254}\016'\272\204Rf\226\340\341E\230L\024\352\205\312\306\340\042\241\017\263\375\337\355\013\020KJ\273\342\3572^\313\312U", 4000, "\222\010Cw\275\317./j@\012\032LH^\222s\205\240\335\011\026\310\275i\246\264\347\305\302\365\302\336\221}R\016]\231\006#G\321\222\255\215E\262\272\013\202\260%~\027\350U\031\220(U\210\221\314", 64 }, + { "\035dQ9@Z\267$", 8, "\204]\013SSO\332\324\322\327\216\362D\203\253\241/\262\21093\374Z\213\001t\376>\207\024e\273\371.\037|\036\334p\005}\353\277'/\346\014#NP\362\2504w6/", 4000, "\252BW%6\265\317\000\271\024C\010C\202nYZ\027\006@\334\321\365g\371z\017\3469J\374\262\366\242G\200\017\363\313\223=\251s\213`\343\362\007\000~_CV\336\207\240\352F*\313#x\212P", 64 }, + { "\344\263\246\321\357 \003\347", 8, "aT\363\245-\012\023\032\333\253\3049D\372\033\332I\370\005o\267\177\340\226\211&\356T(\210\017\355\372\003\207\277F\012\010\221\213\274s\314\200xLST\260\375\217\013\331wG\240\343\344\347\347\301\324\302", 4000, "\324\336\003\003\337\337\215\354\327z\217\0319E\000\020\353\011\366\347\001\035x\3660D\332\014\276\374\2363\3635\026\227\031f0G#=\015\213\275\210\237\032\207\342s\002\263\2438h'\301)M\351\213\200\274", 64 }, + { "fJ\325L\311M\364\333", 8, "\2640\311\202\3471\2310\011\271\345\002\265\225\257>\220\277\205\311f_I3\247|l\351\222\341\353j\240|2G\035(\353\203\250\031Jl]\317\226\223\343\205]Z\324\356\245,\264v\030\333~t\035\220*f\027k\207\364Yr", 4000, "42\335%\022\372\310&W\2374\335bp\217\247m#\210\006\207\021\371\134N\306\335a]S\274\350y\247oZ\024\272j%\326\213;\324\273\347w\300E]\347%'Z\261\206w\2350(\265\205\301\302", 64 }, + { "\363\237$\002\006\023\357\001", 8, "f\327\370v\0061\026\200", 5000, "\331\303\025\301\344\370\222\004z\275\364\374h\253Y9i\027md\032\020<\042\017\250\261\317%#ne\303Z\324!\354\300\006\235\374[Y\341\036`\373a0\357\357\015\246\3464\352*'\241\272-\317\325M", 64 }, + { "\332|{6Q\346v\313", 8, "\134!gL\026\024\376\2430~\306\2743\232c\206", 5000, "3\325\201\34598\202\330\263Y\005\244\321}}w+\245:\274\177\255\365\265\000e7\375\312gc\261'OG\266hPp\365\250\364\042\333\373\323|\205m\005\2572\021\027\271]\233\360\216-;\210\371\274", 64 }, + { "\333\220G-\240N\205\232\303\177 \012\324\374rl\034", 5000, "U\342\2200*K\262\010\177\273\024\2455|\367\336\2311\225\366/\005b\305\345{\233\301k\030\023?e\250Cf\007\134\036:\377\213\027)\353%\323R\322:b\255Rqr\007!\020r6\305a)F", 64 }, + { "\234\004/\345\032\000v\220", 8, "ar\031\272\305\245\232*\007\247\025HL\274\010\336E+\311\336\2557\266\300\263%\3031\337F\227<", 5000, "\320\254\3477Do\003\227NL\334\355\217)\317\302\221\344\300\320\356\204\266\350\305\223\275\273&r\327\014\261\352\324@\356\032\325\221\330C\346\202\233\013\007\304\031#h\202\244L\207\236p\351\371\335\213O\341^", 64 }, + { "k\317u\332\217\324\322\216", 8, "\177Te\253\271\260\255\276\353o\223D\324\001s\317L\033V\242\247,\2566\233\206\313\315\014\332b\317\312\134\322\216\314d\344\344", 5000, "\316\021\033\027\375R\207\327\021\341\340\253Y\230\016\257\355\024\027B\226\322\346\025\017\2429.\336\2262\352\324\375\225\356\367\353\235\012X\011\361$Q,s\240\033\372\254p\202>\343\034^\303<\211\242\273AA", 64 }, + { "`\226\222T\332\377\223\015", 8, "\351\350a \311\352J/ \015\270I~3\360\2378\265kP\302\371q\202\3006\000", 64 }, + { "\303\327\253eb|\362\227", 8, "\30630\364^\006>\227\224\315o\217]aL\236*\256DZ\270<^N.\326\014y!!Ng\375\325P-v\220\341\206\315'>\314X\315\364\276\014L\324\212\374\354e\230", 5000, "\267\272\262\235\213^\042E\255\330\372\010&\012p\354nBG\344\246\266#t\300\237a\271)\275\010x\356b\274a7^\327\303S9s\343\203\236!=\332n06\241\312\254s\335\265\334\356\324\367\177\375", 64 }, + { "Z\3378}!\257\020\301", 8, "\301.\2642Q\250\277$\271\334M\307\250jz\364\354\361+K\322\275\343\242\322\021Z\2747\333\213\241\224\011\0320j\267\011\337O\023~{7/y\350\012_\202\331\216L\206\003\006\026iQ^\310\036\360", 5000, "\216\202S\222}\336pr\331?\232X\323M!\202<\372\263%\353\264\334\035\370_\323\363\217\322\014\301\177", 8, "\344\303W\177\317\032+u\032B\353\375\317,\225r", 6000, "\212\205\266\373(\344\246\213'\247\262\257\030vZ\355L)\242\375\353p\227\3250h\022Xg\356\310\350=\353\247=/k%\021\364\030\223\013\272-\177\277iX\005?\000\200\325\310\245\0137\247\365\034\234\007", 64 }, + { "\235z\200\0425D\206\326", 8, "ZC\014\243\032t3g\336&\0058\016`U\317\210K$\205\236\264\274\224", 6000, "\233__\371\276\213\263L\005\211\250jO\042\364m,B\020S9\014\332\263~`R\334\236\020\224d\374\037\201\311\327\262:l\221\315&\277\351A\251\262\000\012\200R\203\360\011\371.\373\323b\000\316\277\275", 64 }, + { "\013\216\203\231;\177\030\022", 8, ";\250\2605\215\314[\2478\314\343\342gM\352\211\020:\336\3271E\260\042\3444\274\305\234:\226\221", 6000, "k\255\012\344\344\350\306;fm\253<\277T\017\020?\234\215\216A\373\303\3375l\325\333\027P\301\006\214\221\202\375\342\240\213\012\307g3`\377@*F\3518\000?\010\002\021\005\023\227+E\177\363\022\236", 64 }, + { "\211\354\257\301\023\201\377\374", 8, "t\235\202\224\274\013\350\134Cnm77\352w\200B>\250\213\211l\275\357\234/\004\342\311\216)\260a\016B\216o\253&\317", 6000, "\304\225\214\273\016\374\375V\215\207G\264?/\273*\276\257\343\012\234/\025&/\017\331\211\355\016\351+\301bS\004x\017\326\252\032&\205\030\222\347\272\002\036\231\261\033\200\276\330\367\007\252\376\005#\217~\212", 64 }, + { "{\355d\364\020MGs", 8, "\324\301)\225SI\220\322\320\333\263[\375\2154\006X\303\014\275x\300a\313O:E]\011\236\134\203\344\220wj\231\320\300\015\222\321\324\177\341\320\237\372", 6000, "]\005'\026\210\036\250\037{}hs7\254d\327\243$Ch\000.\011E|\213_\347\3579d\342\321E\212\334\251~\231\221o9\006\323\317\013L9L\312\206\357\372\007Hv\234Q\311'+\001\276\034", 64 }, + { "DR\0073?q\272\374", 8, "\250l\002\017#4\320=p\032\202\257s\207\352\347I\373\244z\377jD\227\214IG\364\206\004\322\261-\217\305\301\214.\314\206\373p\341 TSu\323\377L\373Bu{\032\247\370\270Q\260\307PZ\337\203\304\235\004\254\354\322\363\260\001\004", 64 }, + { "PB\323`z9_2", 8, "\373\317\015\021\275\311\335\315\323\231\212}\307j\336::\201\343Y\210\042P+M\263Gh\031d1\034jz&\134\366\363\012\374\274\212\244\315j|\207\331 \345\312\027x\026\261f\016\311\035Mt\370x\243\323\3550A\014R\033h", 6000, "\134L\334\310\334X\035\356S\015v\243\242|\002\037\305\022\375\372qK]\020\300\226\001\334\310P\357\376s\203\225 \037\305\373o\261\020\303\264\370\256\262\337\237\251\273>:E\335e\260\316\246U`c}\016", 64 }, + { "\027\223!\256N\260<\200", 8, "\020\374\203\034\005b\230\201", 7000, "\302I|/\305\025\001\003\233\244@\332R<&1\333\030B<\010\3315\267\213\317\231U\225\303\336S\217\037\337\212C\202\022p\270\207o\205D\177!}j\221\215\027)\306~s\004h\323\342\336Z\252\377", 64 }, + { "\201\016\210\273m\345&W", 8, "\253\363\011\215\2646\222:gr\001:h{\012Y", 7000, "\244*>\204\042@\302A*b\010\024j\270\220P!\2114\327\031\237\304\231Lb\303\336J\325\321K\263d0\200\327\005l\320\344\336\353\323\012y}N\251!h\275\363\376\320\225\341f\246RE\310\2418", 64 }, + { "\276\257\256+\244\247\211\226", 8, "?\235\347\030\024\362ng\234\254\017@\033\321\331TO_\255\277!\042\233t", 7000, "\216I\365\206\200\134\002\353\213I$\327$U\275\240(\351\352\2738{\313H\202\275F/\322\013h(8\263\205\326\303\042\2621\032\204M\264hT\221\205\310\263\214\273\262\313\221\267\206m|)G\324\241\025", 64 }, + { "\2020\274j\042\224\231\221", 8, "\334\260p\216\333[3\014\301-\223\026&\315G|\231\207\205{\310\336@H\246\3257M\020\031\362-", 7000, "x\213\321\215\223\332\313\016\323\012\310\330?o\300\277\177j\312\220\255H\247&\366\232BX\232\352\362N0\225=\373\010\260\027'\271v\376\220\324\263\225~\354\035\277r\222f\221\260R\253\215m\203|$\334", 64 }, + { "\372+1\367\246\333\271w", 8, "`\220^\277$Y\341q?\315!\014J\221\210\242\232ySd'\354\361z\306\301\016\252\274\342\267sso_TZ\200fe", 7000, "d\224\227\252\306\204\012g\201\237\314i~\216\214QV(1C\271\320\233K\341\351\313\005\342\343>\361\341\377\030\204b7N\340\356\274Ma\023\212\314\222\240\211\033\013\211-\356\264\267\027\262\005\313\270[\204", 64 }, + { "e/\227\361\021\350\237E", 8, "-NQ\342\360?\267#\011s\303\241\227\353\232\227\010f\003f\012;[\022\217iu\317\024g,caX\370.\214\321\273\035|\337EB\014\2636\235", 7000, "\247_\330\233!\237~,D\351\274\202\265Z\026G\224a}\277q1\250?\023!\276\011j\254e\233\255\374\246b\024\275ss\200\031\036\312\322\257i\357\367\371\022\324\213W\014\246<}_\003G\317\204\247", 64 }, + { "\230\373\305\254hVc5", 8, "\362\306\303B\214\210\020QR\316\205\356\241\373>W\307q\237\261\227\355\251R\334\332j\303\231\202Y\356~\213C$l\353f\017\031US\334\324\016\034D:\374\345\252\235D\303\214", 7000, "\331[#\367\002\331}\306\266\3258\246n\226\357M\204u\226\320\306\323n\015$\320\247\305;\265~\2478\025V\364\222\366s\240f\270\314\034\250\277\347d\275\351\326\310]\213\244d\264v\303\317\371p\235\263", 64 }, + { "j\332\311\021\016q~\273", 8, "G\026\002J\024d]\255~\231\271\322d\335T1\203\371(\350\331b\013\302n\244\004pi\231\210\205\332\327oE\205\345\011\300\216df>F@\323\020\240I)\026\335\362\345ndx\321b|a\304U", 7000, "\371?q\263\265\2344%\200;\333\251G\020E\316\333\331RD`\275\260\006\261\356\332b\027Tv\251\243\001S(p\361\313\011(g\327^\241\0030\376\365\3425\376\363\307\216\234\316\216\377b{\310\347\003", 64 }, + { "oS\366\311V \247u", 8, "\217\350\316\355\003>f\334\306W\026\213\307? \304a\245\370\333\364[\236\0256\267\320g\360xn{\037\015\356H\271\010\255\360\265\3136\025\266\342\324\246\204\211\311k\244\322\342\231\307\204o\2376\361cy3w\314\347/\246@\022", 7000, "\211\314\257hDW;\257\3702\271\243\322\314\3131\352\250e\313\006\364/\001\207\327J\350\214\350\232U\353\216\024\344\177(\325\366K\031Rt\220\201L\265\263{\366\305\305\215]\373x\177\373\020K\224\346\350", 64 }, + { "\2713\267\214\012\302\311g", 8, "bo\2109\255\305P\036", 8000, "\236bG>\215\363\021\012\242\265P8\373\332\017,\367o\217}\210\320\035\320\255\316}1\005\021m'\205\214B\236y\232\377\300\262&\240pJRXQ9\226\011\212\316\346E3\302\252!l\266\304\134\017", 64 }, + { "l\364\370\012\341\025\344z", 8, "\201\004\012\261\355\255N]*\324i\346\002z\300O", 8000, "\024\220\237\352h\017\263\237Vk7\015\250\007\000\253\203\305\255\220\337|\306\233\240\023\361\226d\304\315g!GGY\363g\331\005\376\354\243\371\207Q\212\246Ez\030|\341\315;h?Pe\351\256\004\364\373", 64 }, + { "\302\241:W\337\336\036\342", 8, "\273\233\362\231\357\212^\310 $n\370\314\324a\225\235\004L|\322\015\357\256", 8000, "\357\333\324\221\253\207\002\244\006\352S#\326\352Y\201\034\307\301e\22120\252\036\333\2151\010\134*~\235T\322\007\200\020x\221phGw4p\221d\251\262\355\013=\236I_Vm\241\003CN\245]", 64 }, + { "\250\275\025\013\365\363\227\210", 8, "\030\02582\351Z8\344\017\0252\203\305sTM6\322\336\214\037\303\223!H\306\276R3\235\323D", 8000, "\337/\303\204\376H\020/\366\036\3336O\234\237b\012Q,=9z*4VZ<\320\214\270\341\277\262gjEu,I\224\242\316c\217h\042\211\005\300+\033&\336\024\254&\227&\301\324\004\362\377r", 64 }, + { "\366\345\301\371\301\220\3759", 8, "\315\012\003\227M\042[2[ \036\264dB\022a\326\372\203%\223\005\330&\007\304\012\300n\347\233\012\263o\330)\177DC\323", 8000, "\023\006\222\026\010\342gH\220\370\372\277Z\327/?\240P\244\244-\326\333e\234g8p\323\263OG2K_\272S=\276\012\011\314\217G\027{\215\246\360 \024\224\244\352\363\003\307\371o\305\212\341\3706", 64 }, + { "\272\010\025[\365PR<", 8, "\270\205:\014\2338\264k\246~\025\245z3\345\001?\005Nk\006\202\357\220:|\251\2522\276Z\243\232<~8\341i\326IQq\265\355\013$c\241", 8000, "\031\240\307X\344 m0\221(p%\247>\215B\244\325\211#\036\355\215\356\231\247\263=B\232G\264E\260\222\214`\006v\315L\011\355\025F\235\352\347\365Pm\230\211\273\255N\0023\021\202\362\370\004\340", 64 }, + { "\031\322*2\357\375S\022", 8, "\366\252\324S\223=\016\205>\011\374\2703\234\226\316\004\327\231\1774K\236\030T\232_\315AS'\374H\326\226E\037\225\263.s\004g\332\360\372\0147\200\364Z\003\262\225GJ", 8000, "Y$ \014\261L\304\307\264F\212M\362\364\272\375f5\223\016\275&3z|\227\021]mvP-\024\225!+\361\371\250\335\375\377\310\035\017=\233\347\225\235\042\335\241\300\264\260E*\327\034\220E\204\325", 64 }, + { "\031\220H$e\221aZ", 8, "\366\331\016o\241W!J\177\212U\230\316F\042\345xO@\324\314cQfu\315\261\312j\252\005{\001\035\362/`i|\361\237\367GmJ\303\356\035\366sV<\031\346\2736\266t\302\024x\001\360t", 8000, "IB\042P\213'\260\225\275a\244\255\225\361\346a%\321tT\251t?gbp\344@x\016\002A\025\242\264\177\224\256'~;\256\216\277\301Nc\302a\216\325\220~\213\240\245\252\260E2\371\216w\134", 64 }, + { "\004\341juF>\010\303", 8, "\012\374\210H\310\034\235\215\205\261\207r\3443\224\300\027\275\304\271\366\021\300\034\024b\256\337\0164\007w\335\243$T\300m\010O\202]%\306h\205\311\260B\206c\236\011\233m\305\305V\042\020\274\001[zM", 8000, "e\327,[\030\205\3270?\251o\320\177\305\134\272`\256\332~\363\017\200(\035s=\343\300\244A\231\243\267\247\032\353\325\275\256k\221\364\230\301\301\2658\260D\035\244\207>\211\354\035\220\202$:\012\345\177", 64 }, + { "\244\276\254\240~1|k", 8, "\251>\326\357\223\360I\224", 9000, "\202\327C\273\265\315pa&\261\02517B\232V\007\200q\302i\240\265\250\302FH\230\002]\357\216\204\245\351\221\223\335\250[\0274\265\307\214\362\347_\213\003]\244\360\344\014\011\003t\226\031\016\354\034L", 64 }, + { "v\015\177M_\312\0052", 8, "\366;\234/9\024b`\042Np7\3674\335\254", 9000, "\363{J[\233\031\001=k\307d\011w?\300 `\320\005\253\303\373\134\004Q\212\334\344} \355v\221\370\315a\314\205\236\343\363H=\357/\026\2531\024\316ZC\200D\345\212\3025\011\333!`:q", 64 }, + { "\272\021\314kDz,\250", 8, "\1774.\331\031\134\003wT\204\366\216@\2057N\223\237m<\341\307Z\307", 9000, "\323`\024\332+\270\220\374#eZ\314\217\274\015\275\234>X\342\363\240l\202\321\3030\245n44\267\007\377\042\334\225\323>t\310\316\301\333\213\215\205N\330\274+\214\323(\342\012\336\255\233\233T\220\345\352", 64 }, + { "\346G\354\015KEg9", 8, "\320i\372\224\255\204t\310p\216(.\260j\241\215\217\245\350o\362=\024d\323\350\364\212\010\300\351\265", 9000, "\237\006\200\214I\354\024/O\134\026\322\201i\203\031vjkO\024\234\311\351M\020\202\350\016vO\331}^\333\223\247\006\366\251\260\3661()\027\322\361\350v\310F\005n\337\277'\361\327\220\330\031\374\037", 64 }, + { "\350V\321\365\262\311q\250", 8, "\343m\037\250\273\367\033\260\306+\343\236\021\337\216;&\366\361\237\301\244\224\035\017m\033\241T\206\011\006\030\220\240\222(\226=%", 9000, "\215,\364\267-?M\243\134l\345\312s\270\224lu\363@\337\360Gz\357 =0\374\320\027E~\206t\347\031\222\371\211H\333\242\210p\371H\023E\262u\004\042@\250\341.\316IYA%\364\010o", 64 }, + { "\134\012\274\273\331\3564\247", 8, "o\2669\261\335\134\307M'\373{\361\367\325\253\331\243qy\316^\031\315\223>\024\007\177\375L\216\001\272Y\235\246\340\341$rG\352<\203s\255%#", 9000, "-\017\003\263@\273\011\274\3138Fx\036\312\320/3y\26458\035V\222\376\004\312\330]\263\317*\265q\324\340a%\016\214\241\255v\033U4j\006\002n\346\014\326\011\211\201\237I4\330\034\0002\335", 64 }, + { "\276Z\205\372\215/E^", 8, "\260X\264\010\316\224\021_\014\005\246\0046\005I\377j\356N\365\013\253}\007\250BlGu\224\027\37541\352\316\3704\305\024\343%\037\342\265\236YA\200\005j\352\203\254\315\237", 9000, "\266t\3301\355\364\233_\353*\333\220Z\007\360\343t\343&\260\036\334\201\254\335R\373&b\237\027\221\343]U\304\212+\0367\307\375w\250\227\233\042U\227\215\324\017`_\254\3125.E\002D\321\200;", 64 }, + { "\226\005\201\252\315+\266a", 8, "\377\315Y\201\220\361\037\222\262r \237\226*r\005\236\225\036\323\313(n\257b\011\330\357H:# \321\271\344\202,\231Q\016\013\034\222\003\364\205|m\335\232\0172V\355\275*vH\262\177\205\307\210D", 9000, "\234GS\240:\220\213\346l\004u\204\234\243\351I\370\260\375\010\201\035\223_E\354\271v\036\250\266h\227[\243=\337\315?\220\3253\300\366\346\024[\307w\325\313y&l\027\010-", 9000, "\307\367\342\016j\337\217Jr\210\226)\242A\315v6U\313S\042\025`\335\346\002\240'U\312\342\210]=|DZU\253\237\320\235\264\311p\200\221EP\311z*\207\267\305J\273P\033Utu\254\300", 64 }, + { "\347H\205\004\340w\177\321\313\337\042G\204\274\033\334", 16, "h}o\344Iv:b", 100, "\037 \023\347\332\024\007\042\036e\253\276\016\270RM\224\223w\012i\223\305\2474]_=\257\303.\331\025EqB}\214\204s\253sD\037\317b\034\000\376e\012\340V\220\224\00532+\024f\206\032a", 64 }, + { "S>\007\330\027\271yp\211\357\017\246\200q\302\376", 16, "\266\042\300\276\377Z\362X\241\271\005\257\355l\232\235", 100, "\320\302\134\002$F\034\315\343\211\010\256\264\222\021\363\177\003T\030\225\027\333\376\213\256\357\202\324\272\350\201\3161\233\277\327\04293 \332>?\327A\377\361\265b\274\202\246\3123\236\366\001g\211u\223\354\354", 64 }, + { "B\031~Q\003^\310\367\210K\014\256\245\202\316j", 16, "\015-L\002\032\352\005\215\322f\024\344\3559\360\273\222\336\347\221\356_c\320", 100, "\177\207_s#\007\301m\206\013\2300!\365\000\2125o\261\376\343\365x\220\313\356\264p\304\013\033\306\354\246}\304\004Z\311l]\002b\362yd\013\234c\007\340\262Bh\001\013\314\364\021l=T\344~", 64 }, + { "\245\360\247\005\370r{\215\303#0\353\344>\002d", 16, "_k\016jF9i\254\253\026,\251e\003\315\3136\016\023\213\337/\331q\343\356n_\355\242\200\231", 100, "\303\207[\317\226\277\341}\225.\324<\006jL\035\372\247\245\332j\334V\015\266\012\366\273\213;\213\275\021\020\341\271\325W\277\303oy\260\215\021U1\333\205D-`-[<\335E$V\253\014\213mg\267\355k\262\211(7(\016\003\036\231$\257", 64 }, + { "\3746\000\2150\247\037#\313\331\351l\012\333\247A", 16, "\234y\004\241[\363vH\207.\227X3\234\366G", 200, "\314z=\265I\243\201;\010\234\015.\042\377\265`\220\223M \006\234\276\035\036\2571\322\237+~C\241qv\223\006\223I\034\225qT'Q\232q7\3102\336\371\271\237~F(~\350\317W\236D\000", 64 }, + { "\305\363\361\241\301\257\317\177\3327\134\252\316f \307", 16, "\324)\212\012\226\034\330\315\313\323n\361&s(,\205\322\034\211a\236\335\375", 200, "&\3403J!17\345\026 \211\235C\025R\212\177\374\273\343\027\3772\026}\232\347\016\362U\352\025|-\373V\300Q\221\003\317,\037x\334Dq\230j\277\206(iW\037.\336vJ\230W=\013\376", 64 }, + { "\342\015\026\337\254d\021\237\010\216O\314\271\015\202>", 16, "\272\010\351vz\243\205y\234\345\354\262[\353^z\346G\324\177@\217\357\252z\254\354\240\241Yb0", 200, "_\235S\033v\365x\3567c\255\216L\267\200\307\204\006\365\271\276>H#\260\015\335\025d\000\230H4\255\365\264\370& \204[\345w\035ne\301\254\312\246$\213\345\362\261\256s;,\321\304\371o\333", 64 }, + { "P\220Zg>x\313,\234\260\240\262\260\351\177{", 16, "\3762s\2309\276B\215}-\215&\363Z\374\305\233\325\203\254\367\212\250\266H\222\002\256\362~m\374mr\354\305\317\330\215\214", 200, "B\2700\007hU\301p|\227\275\342e\005%\374\023D\242x\311l\0344\211\256k(\264%\011\362\266:a\305\330\252\320\303\365uh6\240\0033\271\236c\220M:}\365|\210\010\305g\000\364\027\347", 64 }, + { "\032\222\254\003\000n\311\010x\225ny~\226p\016", 16, "\303\3346\310>\2656\271\251L\272\243\007\315\221OZ\300\212q\335\367\246t\234`\213\214\347\332U\340\352\275\265\134\354\203\333( ?\256\304\035D\012?", 200, "t\301\031U\330\0141Jw\010\027\212\334q,\306\307\313\354\177L^h\376&\033\310-\231\220\273=\277?n\201>~\0263\216\012M\341\224\037\034\244\036:\325\017\2024\230\342\006i=$\3546*\243", 64 }, + { "z\012!\011\346\202\316+8\217e\255\023>\350\221", 16, "\177\015\264RK\134=\005j\210\255\202\373z\327\304\377\027\267g\254\3139\333\354\215\273\177\0112\237\327\343D\205>\213\231j#\235\355\363,\237\315t\021\335Q\300t.\346v\210", 200, "\233c\377\253\202\010\203\256\372\357<\200\231\334\3074\207\371\232\243\206\023\212zj\272\273\216\217\210f\200`\031\202Z\337/\2467?\177\226\321\215\300\216\260\222t\320i\361\012oT\017\302\340\353=\302\240z", 64 }, + { "8\346\2320\027\300\302e_\224V5\347!\037<", 16, "\247b\235u\341\201tX7\372$\260M\312R\344\275\241i\233\255\253\030\206\256u!\334\201\275\202\042\036_\237\335=\031,\015\230\372\303\224\312\334\220V\035\323\226\340;\177\250v\375{k\344\331\255\214$", 200, "\216\323\264\300\362\373?\027\346\000\323\275\267q\001\222 y\303D\366{@f\034\226O\234\341\216\230/\226\324\034{\001\264\042\326\357\015\360\037\362\2602\306\277.s\244\001t\346V\333\016\3111\015r0\316\005b\330s\204\317uxc", 64 }, + { "`\204\233i\237g%EA\265\241\220\240\311\271\277", 16, "\007{\3171vCb\215", 300, "\231\365\3613x\302\240\021\024\331\3726O\333\340E\304 OVy^\0121\360\353\237\210PM\261P\011\325\311\307{ -\307\016\204R\300+\003\324M\312h\003\304+\251\214\005\205&\002\252\022\240\3702", 64 }, + { "t\271\276\220\376\026\002Q\320(\350\3108\032\234\227", 16, "\275'o.\375\363f\266\245\373IN`\331\016]", 300, "\234\203\367\265\303\221\335\243F\363!\225\007..\177v\266\321oe\227\013_/3\032\330\225d3\233*\252\042A\323gR\303}A\374\300A\353s*~\205LdO\305\002[\201\204\033>\244\207\330\030", 64 }, + { "\200|\315\327\367T6\016E/+~\016\267\042\366", 16, "hR\302J\352\242*>\306R\202R\354\214^\317\216\270\277\014\316\322P*", 300, "\215.\042\007PDE\315\3073\355\007^\2619\323ET\250\004\334|\364lQ8\020/f|\206\344Q\010p')\013\220\277\231\362\272\00462\344r\211%i\273U\012y\346\322<\005s\204\017\200\274", 64 }, + { "\302\354a`\2242\277\372\213\134P\021lU\200u", 16, "\320\311\272#\313\335\306\264\251J\255lR}\002\273G\3006\371\205h\235Ah-X\001\312\3341\027", 300, "\022\220u_\275S\011\301u+\222\351\307~q\226\007\233d\231\276\026e\251x\3123(\243B\227\021\215\277\031\315\226\315Y<\360\213$h\203\017\266\335\024\247cSC\350<\340\303\343\237\241*\200}\265", 64 }, + { "/\342EJ\341\2354E\202N)\376\311\231S\231", 16, "\266\012\010\366\027c\3434\364\272\373\260 \263\207\262\344\237\350\271Y\245+\011 \341\344\277", 16, "\326&\352]\243\333[\211\035t!\366\204\204.\351\005\036:\260F<\210?\343m\226\035_\134\255@\016\260\017\347\033\256\377\361Cd,\343@\007\264e\177L\275f\216\346rP", 400, "\300\042\035WU\336\316\023i\201\215\215KSU\215aH=\010\332C\207\276\207\254}\373\331\325\312\013)%<)WM\330r+ \014\214\217\012c\266\023\364\330\356t\264\042(\031\312\271\312\351\3356J", 64 }, + { "\260\354\027\023%\230\372\345'\315\035rq\356<\327", 16, "\300#\263\231\336\337J9\346\354\007\273\351\244z\013\247C\342\337\042cF\221\022\221\203z\200\244\323H\015\366p\364*1\2271\134\326\377>\002{\260:\242\224\323\035\211\002\277\347\246\227\237\223\315\315\361=", 400, "/\015\317\021n>l.\252\256A\340'/\327vM\233\262C*\241\361\036\353\203sjK\003\007\331\361][\204\3643\237$\234\353\205_\206\226\337\275\375\025\255\314\263\250\311\244.\362P\336w8_\344", 64 }, + { "\366\317\345\225\251\365g\205\211\324*\313\001E\314R", 16, "{-\027(\230\231a\371\302\271rc\302\204\32402\204\312\005f\227\336R@f+%\250\372%\023\340\002!\203\037\237!\1346\012\355\345\246\020\346\263\204\204\222\356\221\2334=\3333\364)bs\242\314w\001g\214\212\020Gq", 400, "\212K\270\302:\017\317\343\266*H-\373\241\321\200\021\204y\276\272\252\347#\333V\025sI&\325@\337\015t\312JR\312\222\243le-\204\354WAi\364d\353\364+\023\376\363\210}\261\236\242\262\222", 64 }, + { "'\225\026", 500, "\341\213,\254\202dg\312T3&z\363\354#\350\301\204b\302\357\253~\315a\342\235Z\206J\002\341\042\004\342h+\274Z\305\350.8^\377C\241c'\231+UI\216`a\002\203>>H\276q\330", 64 }, + { "\355\2508\036\235/\211\331\356\0223S\2121`\224", 16, "Zk\3217\020B\320\302u\222N\357UBC\364\221M<\344\210Rq\254\327[v\266\347\251Y\022\367E\376m\303\332\134\270\020\332\333\026\224\204\367\254\362U\011 \324\276m\330 \032\222^W\2304\345F\005fw\364\277\322VXJ\345\0167KM\213\022fv'~\032k", 64 }, + { "\134\244y5\2355\245\326E\016:R\206\032\334\202", 16, "\233\364\201H8\215y\376\014\277\016\334\013\337Jm", 600, "8\337\036\337\322h\016\272\377\261\302jZ\271\312!F\372\364\327>XPTg\232\226F\021\362\024%~\371@\314\226;\026\244\2356\312\134\134\236K\217\243\341\0052J\304\014\354n\205\321\365\256\214t\337", 64 }, + { "Q\361\217DR\030\023l0f\316\321\317\370\000\270", 16, "\210\323\252\322\0060{\223\006\022On0fm\202\011\315\357a\031\373*\317", 600, "\300\241\266\226\264\202\202\216m\0166|\321<:^\367\256B\327\211\036d\030\002i\207\311\322RSC\252\303G*xD\203\213\003\343\252=D\261b6\033?\351\257Y\251\261)\254j6I\203e<\333", 64 }, + { "W\240\211i \373\342$O\315\042y\243\371o\203", 16, "m\225\254MJ\265\037\231)\021\336\371\254\253\256\317.\204\210N\300\226\320w\354\021G>\014\256\310\034", 600, "\373\356\000o\004\330\262\234\262\250\346f\212ap\337e\220,\007f\333\202\270\253_ms\351\013\373\234\251j\204\360\033\257e\344\360\200A\324S\320\251\235)\015\013m\202\206$eE\370\243\001\014\221\300\275", 64 }, + { "\305\337\271 *\214\274\272\356\013\307u\215/<'", 16, "\323>\273\2563S\220)\265\367\346\246\002l),\025\177\027f\332\223\014\004\260}A%R0 #Z\357h\340e\261\025>", 600, "\333\224\212N\256t\331\335\002\315\266\324W\214\017\016\273\250\303\021\326\340\016fC\015&\305\213\266Pi\261\344D\325A\367z\251\326n\321\305\2120L\324v\006\262r\320\211[\023\253\301\330\376\017\245w\000", 64 }, + { "\227\317\337v\243\316\223\362\003=\022\307\243\250o\216", 16, "\247\270\205\312\252b\325\344\227\372q6\3660\004\035i&r\212 \253\177\211\365\034\207`\213\310&\005\307zo\332\363\344R`\217\267\270l<\275\321\317", 600, "\312\021O\242AA,?\251\335\207\244\357\274\2753\020\006\321\240\362\262\304\253\210\370\231>\323v}\335C\000r\362|f\273\246\225\314\354\244\272\260\330o\221e\233\005ea'7\336\232\232:\221S\031\334r`\316\2015\257\377\203:j\221\264d@\342", 64 }, + { "\255\377\250\342\216\0156\217\331\352\220r\302\236\376w", 16, "\377I\023\011\206\313\214=\006\344\0217\037\034\312Q\013\303;#v\275,\276b\036\023\375r\332\302G\335\307\333B\325\374\347\271", 700, "0\2629)\037Z\226\272\312\021\215\345\266_\036\373\277\012\023\364\271%\271\272\366\353\205\322\243\220\1342<\233\372\311M\232\027,\215<\334Z\357N6F\207O#\031n\215\235<\256\333\304k\223\323\240]", 64 }, + { "\243<+\014\304\027\016\025\023\373@\377rt@\336", 16, "\316\023W\361\200\325\241\255_\347\247V\0324U\031.\377u1F=\234\206\365\342\256\210\243\346\217\317m\3334\267\242\263|.\015H9\212\313\360\331,", 700, "B\322\302\014Tt\014A\243K\347\353K\031\364_)\340Q\356\216\006\367\275\355\246\035\362k)\322$\242jn\3077\255@\036d#\266\267\274\267\343ti\211\376\032\200x\313[\306\267\247n\222\222\347\021", 64 }, + { "\371)r\237\3421+4\356s\277\234\343\330\212\313", 16, "\262\017\333\260\372\305\253\325SWj\350\233\231\222\372s\277\032\272[p;5\204T\014\243\017A\345\314\217\210\323&9\222!y\247U\3673'\351\266W\216N\215\265\0331\331\373", 700, "r\016\300\215\261\246E\350\234\360\035\340\025\033\206C`\206b.\326\223\367sV\320\232\006\374\227\234N\027\222\376\273\264\356\206\340\317\337>\237\266r\207\206\224zp\343\335b\333\237k\240\306\204I9qF", 64 }, + { "\351\236t\270\232A\203a}#a\340\217\314\235\246", 16, "\345a\00716#31\263\314\220\255\005<\306\277\3574;\025\004\341\323\215\023\210l\373|\226\234\251O\242\2334\311\336g\260\033<\261\236\237\271\357\230\035\273\016c\212\200\3406\361g\022\263\030\311E\277", 700, "\300\270 \346\234{<\357^\225\303\255u\351\042\254\267A6\032?\023\251\226\320\361AToOc\201\220\335\241\276\363.\277\227G\042i\300x^`\230\253\247S\205\231\2700\370]\304\343y-\134\262\274", 64 }, + { "\326\315\030\330\327m\324g`\357\314\374,m\313\027", 16, "\222\231=\273\242\212\226\031\325\251e5\213\256\244i\036\370\247\361\2530\377\372E\244\265\367\346\251\312\300<\304\221\035\201\277\342\304\015@", 64 }, + { "o}J\242\212Q\201\317\222\006\331dI:\362T", 16, "\227\363\374\030\2151\324W\373\366>QP\367\032\315", 900, "\374\010\253\244u\317\244|\366\2348h\341\373\322\350\234,{x>V\036\006\266m\042\374\335,\351Vl\376\341\026\000\233\302\021\013u\274\246\363#F\321\234\226A[J\323\253\371\201\344\306\312\222\300\232!", 64 }, + { "fW`\315\042.\323\234/\024e/\235.\367{", 16, "\377\001Rk\017\237\367\371WR4q\271\242\200\034\374\224\224\026\371\3056\305", 900, "\314e3\234\224\216\231\334\257\005\354\223\241\322\363t\134 T\343l\246q\237[\300n.\014F\207I6 Hp21\271l\244b\023\352\214\356\331+\331\006'\321\215\301}\223!\3318Mp7\005\330", 64 }, + { "\365\016\371I\230s\357\307\245\037\373\023N\2579\236", 16, "+\214\007\212\252%\034\006\337Z\013\267\134l\211\030\302\271\267\376W\014!\370 \354\272k\013 \265\035", 900, "\026\345\251\321>\361;\226\251\251\277\3261$\233\224tk\373\011h\030\256N\030\314e\352M\2200\273\341\351\350\302\257\03796Lc\3615\215\033J\326q\347\364T\0232B<\015\202\251b\021\352\271\224", 64 }, + { "\357\305\300\016h4\217\213\205|\365\275\2402M\212", 16, "\232{\261\235\227\366}\037?xZ\217{\271\352\3539\3628\370T\207\370\222\334\221PJ6\237`\235\343\020n\323\370}+\025", 900, "\006An\011@\267Z\023\026aW\274\002\263\316S\006\374\372\362%\003\357C\355\307\202\023\266YN\245\361\324:\311\201/Pa\342e4\2122\203\255\312T\201\243l\357\337}\361\302\347\034}\315l\007\301", 64 }, + { "\254\373N\035\251\017\360\304\005\333`\256\301\240\351\020", 16, "\257\231q%\353\262\257\37167\260\364e\222*\0135\242\214-\263;\011\232e\237\221\202\026\352\334\034=\326\346\246\016\353\375hH\020\2666;\276\254\254", 900, "{1\200C\304@\350\255\323d\266\042|\2019\262\264\177/T\362\020\346V=\032\360\226WC\234\260u\244X/6\326\202\363\025[\327Y1\240\243\030\373m$Yp8\220\272v\321]\361\343\305?\226", 64 }, + { "\200\323\244\005\342\327}\330\0329D\266v\037\332\234", 16, "\305sYC\035z\357\246\025\315'\376\305Do\345\022\320\016L\321\236rW)\0128>;\042\215\2640\244\370\245\271\312\220\222\211j\247\323\252\324\252\316G\014\307\303\220\026>\241", 900, ":\015\356\340\031MC[\210\244\201QVg/u5\331\215\134Q\277J\322E\306\222\372\346X0\210N^\207'\300I\345\011\020\366R\014\177\213\037\3425&\252>\264H\316\335\235W\264\265\256\3774\002", 64 }, + { "\033t\350)6\260R\333\031\346'3\021x\014)", 16, "\317\036\207|'\372vD9\324\306m\004B96\3643\007/\337\212\015\042\015\317\022\375\3434\3669\266\243\234+\336\261\234!@P\204\377\220d\236\370\254\370vx\312\134\017\204\3509\225+\034\351\024\267aH}p\364fW\006+;=", 900, "\023\234\016G\310\260[R\353\236BW\207\317\016H\245'\203'\3209L\0148\230(x\027\337\025\256\355&O\2170\024\177\312\200\005\320\365Z\353c\365\207\333\134\264?\321j\0170\312\263\366\350\2733\030", 64 }, + { "}\026\215\320q$\364\307\271\035\234s\210bw\265", 16, "\260d\255\307\300\313\321\370", 1000, "ko~\027fI:q\276\226\305\216\270\317\010\340)d\020\353l\010\274H\013-\306\331\014\277\252\254}\007~\371\327{\352\216\255\211<\366\221\201\311\001\340\267JV\227+\347\253.\222\200U\317F_\276", 64 }, + { "\302\316l\266\270\312\0316W\200lJD\344\263\264", 16, "\353L\235\037:<\341\377\357z\035R\322\221b\010", 1000, "\357\261'\225|\274\201H\253\332.\240:\2151\3776\250\032Sa\351\3659\223\366\240H\200\2439\007\223\240\300k?,\004\203$\200\220M\236\202\314\032\321/\231;\210\312\013\214=U\0129\246\247\347\324", 64 }, + { "\351%\241\263p\261\200\362S\377%\206e\350\237p", 16, "\347x\025h\232\331\240\015\006\035\273\353\233\001@\004\177>\254We\361\353\215", 1000, "\302\000\266c\330\375\3350W\022\272\3446\345EY+\311~\244\0162\006=\353N\212\343\257/-B\271\270\343!\030Q\210\242F\307r\276342\261F[\342\337\277\321\217\360v\015\215\301\005\367\232C", 64 }, + { "\224U\367\245\357\276\004zv\004\017`\350\315\220^", 16, "\230G\361u\016\305\221\367\253\334\344Dg&x0\314\301/j\042\211~\320\207\207y\217r\237p\354", 1000, "{8\226FL\023\270\334N,\247>\033\032B\032\354k\010\001\373\222;t\023X\304\371\276\244\203\316Vw\352\214\310yI\010x\025\215\250}\301\027\205 .\042P`\306Xrx\322\257\235\340J;\277", 64 }, + { "\225t\353\356\367\376\013\326RX\246\016\134D\243\336", 16, "D\006}S\362\262u\220p\364\313\365&{\346n\277\322Jv\2202xdk\230g\327\341C1\220\374\322>;C\263\254W", 1000, "\026.X\262\251\361\032\206=\326\251\214\2721.!5n:\266-\267\015\213\216\313\335vP\013\305\034*\301\177\226\010\345\030\322\213C\313\233\251n\245p*\207tO\021\022\221\020)\006\212\237\014\223\020\256", 64 }, + { ")\035\350\023\325\370\321\370\243\005\263dm\3147\252", 16, "\015m$\343M\220\3573\304\200,C\032m\237}\256\366=A@\200\223\177z|~\263a\321\320\344=z\0229\244\200\222\253\013\224\021\265\224\023Hf", 1000, "x\351\246kB\345\355\201\134K M\003\321V\307\024\257\246\251\031\224>\244\021e]\014\262\272\004\206>\251\270D\372\226\206\352\225\273\010\036!\364_\327\244\001\353\012\250\232\227W(\034\231p\301\031\203\325", 64 }, + { "\246\337^`\273\277pp\204\370\235\023\256\026&Z", 16, "\327 h\205i7+eN\362\265T\320\321\237\214s\036,\326\021\357:7S\302\212\253\016e+\251\253\334z]\022\256]c\007\310`\223\364\022\206\245\217O\036\251\366\214\242\370", 1000, "\346\364s\202y\026\347\275\220gk\304\232\326\234\025\257Rg\254\233\216\344a\306\225\366N\216?\276\367\032pn\364-\322\331\367y\002*\276\322x\340Q\016\354:\341\216\320b\216w:\267_\227>\274\235", 64 }, + { ";\355],\232J\026\265\200\333\220Di\271\362\325", 16, "\217p\015\025\3636\334\234\011:\304\3378\203T\247\207\350qA\370\365\307\021\230\250\312:\214l\311~\274\220\303\225S\250\230\343hc\261\374\343gI\374JO\013\325N\271\255A\264\032\215\013>>\262\021", 1000, "Tm\271\346\333\031\034\261o\233\342G\006\277\264\2759\015$\351\352\331\214\200BL\375\356\322\376\340\337)f\356%\346Tm@\277F\027\012\315>\327\276\001\302\2576\313\244\315\276H3\346A\266\226\312T", 64 }, + { "1\317C\247\340O\362+\332\245\006\261\2069\252\342", 16, "l\31548\373\321n\375\007\337\320\277WV\334\205Q\230:\021\010*g?\3702\004\005\306\305\324\025\256 \203\351^\276\347H\306\345=k\310\247G}\326\020\347\363\350\016\215{\023\374\357\335\2669\315\353\336\250\224\303W\370\246\221", 1000, "E66r;h\253\215\200\205\375d\261\331\275\264\330\3146o\011W\210\217NI\343w\256;\226\351\351\000h\346\340wi\221\275\302C}l{\336\272\030\177\273o[6zV3j6\007)L\244T\025\256\353\2726\023\241\3501\221Qz\342\001S*^\327x", 64 }, + { "^u\024=)!f\324L\251Z\200\377#\134\362", 16, "\224v\363\204\345\353\263&e\242g\310\227\323\231\370\320\350u(3>\346\013?\3316\360n\316\2560\032\264n\003\177\352b\360", 2000, "u64\012\241KEM\001(>Z\237\042\027\240\361|\252\216\357\214\017-\302\002\365\224\355\277\351\033\011\030\324\363\034\320q\340&F4uCc\235{\347\013l\2671zB\025\236\3174\215k\361IJ", 64 }, + { "\256\002\200\356\321\334\300\0423Y\021fv\323iD", 16, "\224\307\134\316\002\320\273^[g\332G\320U\0139\004\022\220\010\372\200'iw\376\236\012\034\304\017\035\334a%/\322\277\3206o\262*8\014<\004\202", 2000, "4\274\031mr\012\340\305s\042/\217\205y3\374`\224\223\311\377\222\301\202\214\351\337\010\015\315m\213\263\334g\314oT\372\330\246(\333\306X\321\376X2\206\026\230\333\361\325z=\277n98\334\377@", 64 }, + { "\250\346\251\243\207\200\303\011\307\231z\220\332\004\367\021", 16, "F\251%7\247?A\003\200\015@A\260\042\247\310\356\004/`#\222\244\201\317\375>\134B\023\024\007\032\251z\330\371\3456\006Be\207\343\354CR<\261O\352\362J\361\377\367", 2000, "\276\207\365,\306\033P\0200\231\2013c\351-\301\032\207\212#\301\3233D\374b\027\206\357\335\341\321\205TO<\316\225\011\271\013Ca\235\315>\214\325\222R$\003a\224\005v\253\226\243s$\375\345\240", 64 }, + { "\222\324\307\304'\000\210\255 [),\322\357l\332", 16, "\007\345\242+\012\357t\231\202\266\324\250iv\277\257n\315\354r\025\004\356\233\317n\256\042\202\372\251\223\230\226c\203=\334\331\230\237\034\2129\215\365\317\006\250\010\361\335\226\261\367u[zT63|\365!", 2000, "\371\270dr\215\025\035\212\004\012q>\263\267*L\201\373g<\333+\215@\334\260E\253,\302\261>\222\201)Y\006\316,{?\303H\240\253\326\362b\134\374\177\013c\351\237h\025\2350\313\3422\313\272", 64 }, + { "\325\351\200@r/\240=\323\331\372\023\244H\013\236", 16, "\326\307\360\340u/\260\312d\314E\240r\134\025h\272\202\230\177\364\346\134-L\345\362\260Y$\207\027fv\257(\336a\307\215\341!X{\024\0317\345\257\240\263q\332\032Y\230k\026\254\037-t\031\244'\353\324\344\3014pD", 2000, "sf\252}\216![5`hs\210\324T5H\346\037v\314\344\346\330c\240\373\021\023-s\350\356kj\224M~i\206\325\246\325b\347\335\252\303+\277n\003\307lgw\217\245\025R\205\301\257gb", 64 }, + { "\244 \262P\000\300\360\311\042\251hn\226\023A\270", 16, "R{\337\244\226\014\276w", 3000, "b\254\205l3\271@=Y`\251\226<\316\334\013$\321\357[\357\324P\201\246!\355W;\362{\367h\2072\270\247\353 \271\357\233_\330C\322\231\341\251\315\010xm\270\350\260\352\304\035\304\204K$m", 64 }, + { "\015}\205\262\251\331\300M\312\216\024H;\313O\030", 16, "@\225\032!\031\231W`\325%\332\334+\345L\257", 3000, "S\042\245F\263\330\001\203\365\020Q(Q\032O\302\236\311jA[Yq$\000\210\266\026BIFj\255\263\362L\357^\304I\266\222\223\001~\321N2\202\206\301Ml?.R\321\215h\327*\347\317\324", 64 }, + { "\270\257g\226\273\231t\256;\025\270\267mL\177y", 16, "\224\2678\3320\274\306\365\254a\260\307\276\377\012Y\231\372-\3652\026\225\026", 3000, "5\3706\342[/{PT\265sHl\345\275\215\273W\300\354\341\342 \334\011\013T\003l\225Q\333\277B\240s\211\231s\360\353\301A4yj&`\024\005_\307\216\325E3\235R\032>\213\034[4", 64 }, + { "\312\207\223Gfp\250\306\342\002|\233\1349U\004", 16, "4\321\374\364\375ycx\020g\345\224\352\0424\313\011c*p\267\376\232_\370|\240\010.\3227\033", 3000, "\341.\134\262?0\256n\334\263\356\273\3141m*\352\344\237\302\300\364>\347Kq,mu<\327\010\267.lg\002\232\226\350\354\010\263\215+\032\014\230\262\375R\264\032\204\334\351/\314q\361w\246D\274", 64 }, + { "\2645\264\241X\321\351\352\342\015\253\257\241\354xn", 16, "\214Ihf0\343\371\323=X6\244\327\237l%\340\300\021\006\271Q\340\002\267\331\234\0100\231#j\005\342[\367\012\042J\237", 3000, "A?@\303a\325\243\015\200\206\256\025m\2471\254|\252\203j$Y(\013'\346\336\011\217\355I\346m.\001\337\033V\022\342\2177\216\264\211\000\253\330\007\315\323s\365o\371\330t\361\235:\0231\266#", 64 }, + { "\250b\326\230\271\352\346\357\305\245\303:\3236\036\300", 16, "Fe\247\220E?\206\201p\303G\006\357\027\204xD\264\237\247t\042\357N\335\351\351B6\177Q\301\307\334\012H>\2572\275.'tu#\014\371\260", 3000, "\3270\222r\024-Gf*\352\204\271\305\315l\234\370\364\313\304\250N\267\321i_=5\370R-\302Oi\251\305\236\244\376\005\033\270\265\031\007\242\234\301\02166q\243\042\035\326j\224w\035\232J#m", 64 }, + { "\226 \316\360\363n\302\012\207I\3022\252\232\271\221", 16, "\213\316\027t\212l\242\354\014\304\376\344\377\352o\207\330\376\037?t/\214\316\017\027\363Y\010\017\027N\326\007\003\263\274\042\177\230z\264x\340\017\204\005\203\200}w8R\304|g", 3000, "x\330\300Nq\0371t=\326=O'i\0176\314k\351\301\335\134\372s\200\331\010\322\226e3N\016\341\251\3670QT\322\200\346\217\300\202w\010\253\242\342\272\024&|i\307\270[H\357\306Vu\004", 64 }, + { "ng,\206\357\313\353!`\263a\237\375\256\224s", 16, "\334\370\260\331\016\0355\342]/\207\227K\2323\256\003\004\314\256\020\020Wc\241\367!s\366\223\025\254\245\227`\335\226-<\375\367\010_p\2151*\204\2501\263\242r\324y\231>Ej\324\374\265\247+", 3000, "\233\241\316\316\335\307~\260\336\332\273\337\263yqH^\202\037\265\375\032\353\364\277\241\241\2456\325\3558\364\360ft\316\031F\350\300\026\026\264;\345{Ru\002~\027\340U\316\313\231\205\205p\3167\256*", 64 }, + { "]\340\304\315\250W\316\336J\263\231\002\216\251\364\242", 16, "\201\376\003\177\021\346\237\211\320\262\334k\320Hu\220r\357\237%\222\357\013\350\330\042{\210t\227\376\372\016\3707\340\230f\200\360\300u\312\034\220\376]ct\225\311\275\005z1\243l\373-\234\2154\317zZ\0306\312\2435\032C", 3000, "V\373\262\256p\232H\0424\034\215\015\273)\217\366\237\253\323R\226\256A\257\334\355\035\376\331=\251.T)OVJd0\005q#\356\346\012\223,\017\015S\227\007\034\010\026\370\271\233\267\030\010\357*\244", 64 }, + { "\021\225f`U!\334\331P\355\312\351-\032E)", 16, "+d'\210\235<\262\204", 4000, "'\276\227\331e\015\206\231\234\323\2578\306/\0338\007U8\354}%\310\265\335%O%\255\377\376Lo\303\350n0\353Zi\355\277\315l\010\252\366'G\272\263f\341\310N2V\346\334\257\214\333\002G", 64 }, + { "^\314\361\023\376q\261\003\245N\240\353\031\300\031I", 16, "\355^\377\321#:\253X@7\201\251\215\257&\310", 4000, "\266=p\000\366\231n\365r\310\011\266\315\357\242\011\333\237o\030k\364\341T\042E\332\313\255\227\246\251.^\372\012\317\222\355\244\2066\034\336\000\250\277x\000\315\002\373\263]\037b\350S\036\303\341X\002\335", 64 }, + { "\300&m\242\343a\326$\210e\200x\012\335\036Z", 16, "SG\363E\013\273\017VO\360a#J\220,\263\375\322\202\227\242;Pr", 4000, "\242\351.\17783>g\001<\034\004\030\002\312\345\270\021k\342\375\243/\342-\346\240\017\260bj\342e\206\225\134\367x\330\020/\363v\214\241\025\205lg\347$\275\300\315\205\021u-1\246SH\205$", 64 }, + { "\235QV\311\015\001\301Sd\204*\270o\026\177A", 16, "w\020\211E\315W\014\015\342\344j\251X\341\2528\354\371\336\214\260B\367)\264r\345r~\221k\255", 4000, "\3260\375\203\347\030\375\023\351t]\015=\301\267\303\035\204\2345cJ\2565\243\266G\211\333\024\311\320\2556\031\302\310\257\273{\340\274A\011\305\206\272\232\264\336\217\012)\375\036~q]\241\267\220[\203\330", 64 }, + { "\303g\3655f\271\332\250\306${\317S'\270U", 16, "\300RV\321<\333\2779\031\216\346/\305Dv\021\333a\374\344\303\355\370\0367\201\315\346]\242\375)\323=e\023\013\201\306 ", 4000, "@\253ur\230\326\344l!\004\026\352D\222,\021l\0316S\205-,\035\374#E\023q\034\312\0003?\234\000bs\334\011\011\204w\2558\356v\343\255y\260\023\320\305T\314\300K\232\000\013\352\305:", 64 }, + { "\366\307\305\200i\370k\246sc\035zh#`\035", 16, "\341@\032\010\373\0114'\275\204P\256\314\324>\030\266\343 \034jB\372\0124\255^\234\207\274\322\227\357\244VJ\273wq\326\224\373x\360\327k\3508", 4000, "\323u\002\267\022\271\274t\002\305B\017\015\366y`\256\201{w\017\240/\225p\356\036yj\277\277\242\243)$\244\333\272j\367\024\223>\021o\370Aq\343nV\237\031\234\350z\226\201\300\024\256\006Gh", 64 }, + { "\365\236\311\322\134\327\033F\230F\370_\217\221H\315", 16, "\214\207u\217\253\234Y\236\377\343qB\374\035\231b\267\266\314\226V\207T\367\352V\001jY<\337~q\203\345\265\230zB\2110\346U0\231\205\246\254\013\213\011\134\236\351YO", 4000, "\315\360d\246\273\364\265\217\210\306dnuA\004\347\022w\200\375\267\341\336\340\226jlc\354\205\310\316\251G\373\347\237Cee]O\351\237UN\236`\305\244W6al;#\336\377n\335(\337qO", 64 }, + { "\341\325\003\214aV\254\361\365\314\333y}\005\036p", 16, "\274\271\3200UV\327\273\263H\022\362@\322\300\362)SMQ\335'6}\017\255\332e\341=\377v}\024\012\316\233\324xJ\367\011\016\260[\260N\322\257\011\005h\273\237L\010C\263\3300\321C\365H", 4000, "\336=?\327\210\002\245G\275:Q\371\271\233\300\273v\274@\002\363\340A\305\372\272%\355\365\343\012\000a\204\276\243$|\237\223\221\240*\351\311\262\327\367U\000\316$G\224q\036\033\327\224\247\371rzY", 64 }, + { "E\352\312,\222$\365\267\303\016\331\276\345f\305\134", 16, "\01152\236\032\242H}L\263\334qk-9\013\006\356\357\251\372\026Tb\304\256\226#Ad\216\3024\333\264\240S\217:S\257\024\347\030\321\026\223\024f\301\261]\301\002\272\350\023M<\254\255A\270]Yh\251g\2235\206*", 4000, "\352\317\323\300\357w\365m\200D*\277\024\330\246H\207\347\257\211^\240\362\005\001D\237\310\332@T\243pB\247\025\236\204V\377\346u\242\203q\324\307\320\314\207\372\376\222\206m\134\037\365[\307,\240\377c", 64 }, + { "ho\014\234\352\310\134-\224\021\301\134\015d\356\351", 16, "'\256\217k~\376y\335", 5000, "_\341\264f\012\003\275\012It\363\322\301\032\342\337\331j$'\006\014!3\3029\313\200n\266\003\254@\236[\011\214XK\372\020\210\335\031\134\303\011\042-\004\365\003sn5\235NK\375\013`\022\336\025", 64 }, + { "4\020\304\323y$t\014\202P\251H\371\235|\035", 16, "\303\370Y \366f\325\317\352\030^\245\234\366\010u", 5000, "#W\033\270\241m\245%\357\270\243\340\211\271\263y*\341-\002\277I\332\227\042\271x\321\344\246\030x\252\233\326-s\302\334\327G:(!\315\220c\346\240\375\012@F8@\205\271Vx\321\202\024!}", 64 }, + { "\034.{\0068\255D\335\340\303m\273\356\223x\204", 16, "\247z\325\244A\337\245'5\373\351\336X\330\003\2576\243H\020s\226\266p", 5000, "\353\206?\351#+\346\206\330\225;ua\020\263\312p\024\2229\213h\015\336q\254\216P\256 \004}\001\355\230\214emU\323E\371g--\237\303\022'\016\033\355\274\267\271\351T\0327\300\306\253\031v", 64 }, + { "\015\363\324\364\323\220\323f\177rR&v\375\027U", 16, "C\020\362\262F\351H\240l\271\245_G\134\034mC}\277\354\017\377_Ab,l\322_6[v", 5000, "\370\357\015*{\001\221\310\244\235\134\214k\335\310%\274\226\3203o6\223\361\243\356\200\000\340\240\330~\225\266\004\224\254\211\276\270\202^\251P4\237\350^\036\3671MV\317\214\227\022\211\344\022\321\001\257}", 64 }, + { "\312\272\240\233x{\372:;\253\370\330\334#\267A", 16, "\323&\213|\016\3346>\224\345\032;R\233\0056\316:\037\315V?\221!h\0308\231\333\207\221k\035\222\252\014I\2215K", 5000, "\004\012\245\017y\316\355)\320\007\331\236c\324+\3771\247\257|\336C\332\331\317\037\007KG\321\334\235\237\265\301\360\315Im\212\260\012d\033DIb\042\260\025\304\311I6\2158\3527n[\032\347x\371", 64 }, + { "\215R\005M\032\350\240=\023x\0165\246\231$.", 16, "\021\272d\364Y\217\317\346\026\0161\327\214\001\357\335D\030\364OE\264\266\012\270\350c\276\340\327\254(\2638\361O\253\254!Lb\021\014S\234Z8Y", 5000, "_\3748\356H\220\264;\253\233\323\376\2548\235\004\357)\002\277#Gz\253\363j\026\015^\335\024#\211\002\354\207\373E\364\2513\344(f`\214\227\3319\031SIh\260\234\202\301\375\204\315 \002\347\376", 64 }, + { "\245\313\007\234\303h\224\215\356\243\352O\206,e\266", 16, "\031\033p\375\350W\006\004\213\313]3\214\257v\333\0357\016\375\364\021\344\305\323,;_\330E\224\351&N\244\026\275J\354\024\340\310'/(\012V\217\253P\361\236\273PMl", 5000, "v\276{&\342:\355Rm1\362\320E\344J?\015\023\323l\315\331\252\031\245\206\231\014\303\340\022\231\241\332qe\036\226qF\213\254\037^\220\042\324L\204\011q\277\233T\303\350o\217k[\327x2\346", 64 }, + { "\273E~\201\327n\340\231\001G\001\367l\206\021\030", 16, "<0=\371\010\317Aa\375\340\261\234F\275\251\236\024\310d\003\265^\345|\372-\223\305\235\272\344\350\271\3669-Q\264\312S\323 \236\343\352x\304)\341\334\355>j\024\251\377\252-\356\241.QW\256", 5000, "\307\241^1\271\302UOY$\250\372pd\343l\031\205\353\272s\004\311\002R\276\006\232I?\327\020\237[\363\012\2656-\361Z\177\025\210V\204ZF\351w|\206RqU\042T\205+\222Op\235\376", 64 }, + { "[\034\223\310a\210w\351\020J\351\263\240z\034\261", 16, "<\217A\265\347 \264\242\024\324:\011\370b\263\345R\012'\271.\005\350d\027\314\017\034\361W\316Tj\225n\1778Y\356'\012ie\307\342cF\266?M\300. \271\247`\042\344\272\371\013\273s\316\357X\207\304\357\013\322\315", 5000, "\241\224\024\317\303\227\241\317\332\351\301\3567j\326\320w)\275\223\234m\241{B\356\274P\274,\012|\235\367.E\345c ^Z\321\031\352I\042\005\365\264\360\245\357K;\306\202h\350\206fV1\000\325", 64 }, + { "5\265\376M\262\3518<\353of\232AA \374", 16, "WSKsW#\354W", 6000, "o\027\243%Q.\3759\331k\011R\363\367jK\234\357o\363\317\220|'\245\233l\250\001N\203\322\002Q\026\027H\267\253v.\351\242\220\257e=}\010/v!9\346\352\3749\2014q-\340N\376", 64 }, + { "\350\203\337\210]\367\213\335\270\213\232\026\221|,\370", 16, "\346\327\263\312\213\345\005\011'~\221\027\355\241J\231", 6000, "*\022\205kO\256\322\231(\361\367\342\277\266\220\000nj\330xh\340\215O\356d\210\225\303\2373\340\2130;\005\254S\3115R\257g\344\233\023\347\205\237\274M\307\367\327\364-W\246W\203\275\373\237\272", 64 }, + { "m\326\335]k)2U\200G\347\000\311\010\311\302", 16, "\340\250^(]nb\003\212\354b\177\344\011y\300P\016cl/0\016\213", 6000, "\273\333\252\306\015\232\306\321\251_]Y\006\042\345\350r\222\010\372\026\205Mg\373\347\267\014\234\032\016d\210i@n*aP\316s\366\206\200\004\015\017\034\325g\334OS\177\214\374\230\211eP\213rNp", 64 }, + { "f\323\354%,\247\330/\027\373\267@~\345\352\256", 16, "=\354\324\017\336\012\214\370\014Pd\217\317f\364\301a\207\032+\227\2247\201\317\215\333\020\276B&0", 6000, "\245+\223Y\302\363Wl\312\0344J\245)\347\217\027l\027\321\0121\341\365/\263\374t\330\262\210\220\250\354\240q\020^\033M\274\261\350Sp\325\254_\262\304\357U\031*\262$\363\371\030\036ay\200\242", 64 }, + { "|\035\377\326\376\2752^\335\207\230\271\341\326z*", 16, "P\271\315\034\230[z$j\377\266\015\205\3064h_\316\254\271\353\342\301*\366\366\350iV\004\351f}\260wr\257\236\025\241", 6000, "\301\354S\253]c\332 \277\205!Y\356v%\225\367c`gB\006\024\247t\314\300Q\323\225\020d\036\024A\353d\335\007\025\014\245?\252\246W\222w'\301\263\003M\014\300.\014\2420\011\355\342XA", 64 }, + { "\364;\377\002H\026A\016P\352\331g\2407[\261", 16, "p\271\243\3110\372w{O\317\315Q\035\371\221\016\236\215\002\222\317Z{\372\375X\316 8\226\270\024\344\373^>\235\274\320\337\313\366\223\246\336\250\134K", 6000, "\340Lv+w\360\311\322\355_\036@Hd\246\275\324\033\235\274\013RJr&zD\230\345\033\216\234\213\255\237[\217U\367\300\356\331\372\237\021)x\362\216\306/\351\374\314\210\2341h\227|\230,\336D", 64 }, + { "\134.\271\033\351\232P\020\356k\321X\351q\331\004", 16, "\277\207!\216\312\324\347\223\234\202\360\220}m\3773\210\232pe\020\254\371\334\266(\227\254?\305\017T5\020\210\223\006O\223\375\357!+\363\003\245.\325\255vF\350\3565s\221", 6000, "\352*\003U\323P\225\256\254\374\001\337\312\377[\134>\2306\270\001\217V\033\006<\243\265\012\355+\024&\374\313\031\254|\302\006\216\216\250wD\352\320\3128zf\000\205[P\323\013E{\025\353\276\316\034", 64 }, + { "\015\372\205\371:m\005T\000n\3255\366\220\2653", 16, "\266\234\036\134e\020:],5\005\201\331`S\305\224\017kW=@.\025\376\017\353\022\210\007#|M6\354\210\3121N\356\331\033\223\230\344\305sR\241\232p*t\217\366\243\352E\255\332\004\270\365\361", 6000, "qq\245\012\237#\004\316%\345a6\322\340\353\0344\265\013LH`\237A\232\337\357]\363\023[\353\2631\000\277\013\317\336\371\3125\312y\305`\236*]]\204\236\302\344e#L\270F\232\372\267\232\250", 64 }, + { "F\256\277\366N\234\235\316\042\230\263\256\025Q\320'", 16, "\200\254Yq.\205\373\373\0056\331\214\376C\235\277\323\350\261Rc<\177.<\326\237B\353\373\360\313\257\333^\212\303\023>\223\004\327Q\333\271\011I\303\230N\325N\0172vT\011\214\330a\260\216n\017\207xd\264\327\272f\276", 6000, "9\343\311g\224\222\221\275\256Mb\206nD\361\232L\327s\222P\005;\255\027\240\261R-M\231\347\315\3164\264\314F\347\245\372\247\247\303Q\341\241\271\003\035\207\303\304\335,\012\360?Y\320Y\227\376q", 64 }, + { "#\256)c\376QG\273\245\222Y\010\357x\221;", 16, "\315Ysi\036\266I\332", 7000, "Z\213\027\2367\231\205\005\224\300'\224>u*\372\031\003U\205\242e\223\274Q6F\362;?\022\327_\343!\214\276\262\247L\260MLX\247N*Y+\331\361\215\220l\331\213\361\335c\314\203.\330~", 64 }, + { "\360\343\200\367\344\250O\260\215`\247Z\341\274\346\270", 16, "\310\2524/j\334(\344\303\017Bs-\201\264\312", 7000, "\037$}\362F\213\254\306\345R\345i\326Z&\262Q\017\304\210\026\216\336#\220:A]\210[W\246\272\005\011z\337\036g\366\206)\245\201\214K\335#\212\205\350B\376h\034!\235\006M\272\256\225\257\220", 64 }, + { "<\230\261\363\334\357\217\022\276\000R\306\240\210Dg", 16, "FQ\263I\223\375\335\2135\006\374-1/\227\207S\341\202!\372\206\253\236", 7000, "\266|\263\374\266\265}\000\261eB\307;\233\241V\253C\014\224\230\012\326q\276\242>M\214[wt \361\361\205\303\311\320\355dV\245\242A\237MAt\237\340\242K\3133\355\357\034\303\200\0277\267U", 64 }, + { "\213.\310\205\014W\307\364sd\223u\363\035M\260", 16, "\331\007K\015\367D\224\016Q@\243a\264\342\346\216t\2161\030p\345{\227\245]\245\274\235{\322\245", 7000, "nX\013K/^l\377\237\3044\010\277\367\134.\222\215/\3471\023&:]!^\261\177g\272\011\177\374#2\177\326v\251\003\005\374\232z\030\274@\311\321n\323\227*\024H\225PA\241y(\276\361", 64 }, + { "`k\271x\304Cf\230\313;O\277\236\2448\207", 16, "r(\245\265\003\237kT\204@\321\252\202j\242\352\365\366FZZ:\366\272#\323\017\2666U\240v\252\236S\332\011\001\361p", 7000, "W\200\361\034j\376\022\254\325\205\257|\232\255w/0\373\267n~\355u_\331\007\242jXi\034E\254\032S\205\034/\023i\356\310\250\226\3517\201\311\360\237\201\221O\267w\355`\366\217\257\006z\357\321", 64 }, + { "bg\316Zg(\330\371\016:\011^\202\000\235f", 16, "_\177\346\022\375\256%\310\347m\336p`_J\333\334\003\312k\254X,Z\361\372\303#\305q;\343&XT\316`\006\036\215\306\207\327\311\255(\203/", 7000, "\313\000\3670T+\346TF\365[6\223rBb\241\267_\035\321y\315o\255\321\035\361\230\371\230\015\264\347y\364'\376-\240yL\036\260\265\234\265n.\217\312\261a\234\032\227\257\207a\331\354\010\263X", 64 }, + { "\350\026px{\014~\0317\015\314\231h\336\237\217", 16, "\347A\307^u\267Qc\027\235j\323\012\315\311\031\234\2003R'\015\221\370\030\227\003)h\214\236\012Qok\210`\320\227\307\354\303\305\317\314~|\014Z\012WA\036M\322I", 7000, "\227|\356\271\333\257\235G", 16, "\311\372\032x.?\3452L\331*\235\356\356\261sY\313\266\260\014\202\333\016\006\322j\3516\007U\377\215p\177s\267&\010\352\010A\361\315\357\0103k\220\311\042\250\267\022\312\030\034>\343\250\320\300\002\0123i\361\025~V\037\273\277\322\272sI\375m\375\337(\345*\220\362w\231\373\315y\230\273l3\017\226\260`", 64 }, + { ",<\361\027\343\375\355\265O\264\234[w5\261\340", 16, "dS:\242\350\2612,\314\224}\367\361kW\335+Gj\357Q\355\251i@\326r\024K\346\034B\340\360\242\356\016\272\216m\232u\220\300\236\333\312\363\036\241(\322&\244\211=\275\376\006.\377\013\034\220\020\306\353\274\374\042[\300", 7000, "\277\364m'[]\305CMd`\345G\237\352\371\225\215\373j>V\362\241!\364l\033<\236\364O\023\276?n\231\207\3735\201r\270\305\337\177'b\031\014\251\213\217mZ\320\266O\211\364&\0304x", 64 }, + { "\225\306\272{\341v\275 [\231\230\317\371\363Je", 16, "\343\036pA\252Q\264\242", 8000, "sJ\331\240\3206G\226\015\2441\370e\317\012u\356\372V>}\251l\1340\033U\177\215\316\317\037v\226\016\272O\275Z\341\307\370\317q\311\010\332\304\012a\375\343y\336ZT\377-2\361\203 \042\336", 64 }, + { "\320\231-\337g\034\212\004\342\037QU:X\277\316", 16, "\216k\037\361.T\244\366\003\010E\323U\233v\240", 8000, "\021\375\214G\326\017\316\350\013*\236-\013\026S\223\310,d\036L\311\032CM\006\0352\241\232\000\342\224\025x:\215S\2146wvh\205\306-[p2\003\322M\224\353\237\263/\216\134`Z8\273_", 64 }, + { "*/E\206\367\224\243\334\243\262r\326\360\231*H", 16, "\345\315t\032\021\207@\026\330=HF\320\204\304\330!\232Om\322\246\0260", 8000, "\200\306R\350\230V\334N\020\001Ol\242\024yN:\350\241\332\214\262\016\2629V\264(\2059\220\326b\340\303\020h\232gb\202ZCiR\275z\347+\326\267\027+A\246!\345\206k6\344\255\264*", 64 }, + { "S\345P\373\311\016\352\202\352`)Ecl\336\361", 16, "\376\007\354p2\333q\006\237q%\037\220/,\007\264\366\006-\335\273\235\377\036\345\035:\351\042k<", 8000, "\204\256G\244\332\302{GC\274\335x\200\216\001\232\211>\263\211\360\032\031\267\236\317\257\211\273\031u?.M\022\014\220!\202\225\310_VC)L\001\323\362\014\231\341\244\350\222\022\243\361t\364\357\316G\257", 64 }, + { "F\042a\201rU \373\374e\273\351=\364w\222", 16, "\212\030=]!}o\373VP\036\303\376/\373\322\025\222n\234\300Rl\264\010\2311(Y\275\232\3137\013i>\327\233)\207", 8000, "\233\276*\331\257\377\012\270|\212\272\2466cAh\225\024\334\2332\026\177\330'\006\210\210V\277\323\251\211\230\212\363W\2258y\224\236=9\337(]\010\3171N\342\016.Cjm\322Y\356\26574\207\332\355^\351f\0258\343\267w\361B", 64 }, + { "\305?\017\233\177\271m4\354\221@\216j\376%_", 16, "_,H\223\264<\314\342", 9000, "\236\314\367\273Z6(]M\214\215U\254\264\325Gb\24793\042l66\014g\317\342a\236\317\251\254CaS\326![\210\303\323\202\032f\014M\247\034w\225a\220\303\332\024L\317M\324\022\023\206\316", 64 }, + { "?0`\205\22034\220\217B\361\242\217+'\022", 16, "\177\315\237t\250\213S\313\337\265\337\371]l8\026", 9000, "\377n\327S\215\306\365\346\375Gj\247\245e\2004\343\202\221^_\275}\323\2345\302\007\333\337p\353\265\222\350t\227g\356\032\272G't\242r3V\276\362Lf\222\016\244Ez\200\315\247\370B|\372", 64 }, + { "\306$\211\276,\353}W.\355\274\330\215Ay\346", 16, "\330\362\015\255\012+e\264\241.\036#\377\327\001\011\205\254i;[P\223\363", 9000, "\204\003\342\235\365\213\361\303\3248_\324\346\330RpT4\235J\0106j\263\032\2113bjHj\233\332\365oA\222\247s;\250\247\017\377U\354-f\005\277p\377\345\345&ILO05\232R\325\311", 64 }, + { "\257\364\250\253\267\304/\330\357ch\230xu]1", 16, "\247\336\344\240\322\251G\223\222\225P\370\322\311/\204f}\253\222\252\363y\214\346\016x\262&N_\002", 9000, "\262\003\321\0362H\220\310\344\306\265\020\373\300T3\2652+\252g\275\225\224\036\357\2050B?\375E\273\232\344\024\310\344Zh\004(%@e)\264\202\2022iAZ\030\210\033r\346\211\332x\363\023\032", 64 }, + { "\340\000\323\220e,\371U\242\254f\245\272\337\001\357", 16, "\215\306\001}9&\307\2221d\253\212q\236\3316G\005|\015\042\012\361+\005w\270\367\211\332N\026\331\037\250\014\212d\330\246", 9000, "\260\342\217\247s\321\350A\016\221\371\222W\304&<`\312c#\366\002\225\241fJ\033\211F\252\300\251Z\313\225q\202\036w\253\264\277+\361\256\235\354\300\203g\334qz\310[\022\326\212\223\314H\247Wg", 64 }, + { "\025[\275\212\134\0013L[|\034k\356Q\321\267", 16, "#YZ\033(t\272\257\363\262\134\225y\206zF\234rB\266\221\254\367\310\042\264\270\236\026\372#v\354\213\265\372\221\304-i\020\042\0107\344\253\3678", 9000, "E\267\177\372_&\305\201\215\351\335\007irx\302U\037\252\012q4\201U\356%\366m\245\202\373bqh\244;\271z\372l\2516u\267\004\013\246z\274F\021\312E\177\2159|\037\033C\340\351\332\353", 64 }, + { "\312\016\206\247\361E\252\245\001\033\031\234\227\246L\332", 16, "^S8\353\353\0307\031}\012\247}o\352@\027\217\200s\220\206c\320`D\270\232\275#\361\223\210ur\361%\003\034\3607\255E\016\271p\336\274\260Q\027\0136r\246\025\263", 9000, "\202d\317\362\315$\311J\377+\037\244V\342.\336\363Mx^\347\202\206Vm:\363[\3353\324\316\3403\012\357\351\364\221TN\340\275ALC\033mC\224\225\274\000{n>i\327\006\221p\360:\020", 64 }, + { "I-\350\031\2302\352\226OO\234*?me\030", 16, "\004'\254\034\206\216\214\277\213/\235\237\007\312K\347\034\361?\376\327C64w\313\300\004Z\226\207\303\363\0066\377\375=\341\371\207Aq\247V\237\024T\246\200X\342]\005\356\337\273\023tq\226\032\021\202", 9000, "\367\317\013/\030\210_\377\013k\366C\234s\237\011\212\330!.\016\263@\353\017\007\034\345B\212s\204\371q\336;\334\032\313E\324>\326e\344\304v\205\004\342\000\343v\025\346ZO\2243Y\264\366Z{", 64 }, + { "\237\234O\246\003\264m\356\326\201\266\313\345\227j\324", 16, "\027\016\205\250\331\027\275\260Q\032'\204\373j<\233N\251v\234\346T\250\270n\017\244\225\275\340\354\346LJ\376\2779\2311\311\312P\335\036\323\202h\255\254\376\261\350kO\3324\277\266\223\207Q\263\373\351&\0030\247\330lL9", 9000, "r\036\301q\371B\034\017/H\010>\242\326\247F\353\014\333:)9\353\261c\003\177\223\3277\250Sm\263\306\316\261\341\321\321\134\232b\312\235\014@\336l\330\3356\001nw>\363\015\210O!*{Z", 64 }, + { "\227\346\344\330,\020\250\376\033v\253F\236\207\374\245C\230\255&\277\300\310M", 24, "\333\256\034\031\307s\315'", 100, "\267@0\237\025s\217\307\3646\231O\246za\000\340\233Q\254$\277/=)M\250\213i\245\275t\333\322U\256S\025\030<\200fFkO\2528Y\272\243:\033\315\304\313\237\017\356\255\274\357m\323\215", 64 }, + { "\3410\3103\201\025\037\366'2\340N\277\256q\345Gc\020\036kH\373w", 24, "\302\330?\225\200d\3510\335\346\211\317\324\365\366*", 100, "FN\014\374\031a\240\212\202H\314\016\371|{\025\267\243\353r\257\365{35\134q\252\205\357]\317,Y\350G\206\365Tuf9\356\267\365S\371\332+\245f\332\213\371\320\215\215\300\242\243\216F\361-", 64 }, + { "\265\001\263W\336\011\274\204=\356p6\210\000\216k\216k\203\365>W\275k", 24, "\270\342\331\242\013|j\306\324$X\035R\365\326\242\307\036Z\321\303\357hi", 100, "\005\301\361qhJ\263\253\2069O\003\242E\333Z\014\003\274\336f\322De(\376\024T\336\250\2111T\270\320>\366\266\311P\177\234\264(\015Vd\260+ De[\0301}gzZ/\263\263ma", 64 }, + { "C\347\306\033\005#\201X+OL\177\310\360:\207'L\316B\325\264\324\264", 24, "\021\357\353jzG\377\235V\012u\262'\256\354:\007\343A-'{Z\204\204\226\321GbTP\270", 100, "\200GB\211ui\244\352\343Sj\207|\250\213\035\010[\335\312\345k)&a\035\363\213\371\217\212\317\364\031{]\355\315E\222@n\026\375k\357\004\3505\025\226w<\134\226\324\326\254\345$\322l\302\247", 64 }, + { "\236\030\042\231=f\332wq\260\342\364o\372S\374t^\343\027\374\006\002\024", 24, "\344\273\215\371\325wt\273n\225\221\020\263\214~\226\266\237\226\323w\026\313\327\377\201\022\226\356.7`C\362jR\217,\362.", 100, "\235\361\025\375f\302\004\271\274\003\354w\027\001f\034\246\323HME~<%\303I\037 \266\042\335PY\306\134<]\364\377\026\254d^a\327\275\012\134\223\027\265\277\177\035W\3347,d\362\250`\006\342", 64 }, + { "\035x\237%7I1\271N\370\236\340\214p\331\367@\355o\134\256\032\355\243", 24, "3w\231\014p'd\220\317\366[Kz\241\271\010\200u\225.E\277\313q\262\341\313\031\271\205\016\024\3616\021\345\030\254\367\314\312] \026\211\273fs", 100, "-\300\221\205rc1\013\374\370_xC\315\013Y\21477\320\202m(\345(%:\260\232\304\004\263\303\275\304\317D\376\245\331K\310\027\343\322\221q\200.Kp\206\311\231\306!a\240\203\324^)%\026", 64 }, + { "\023\366\263t\006\015l\264\316Gq\271\3468j\220\271\232\361\223tW\224\020", 24, "\365\367`yT7jO\360\247/;-K\241\031\227\034\211\251[\236S\015\035P\304\256\342E!q\205WJ\207\373\016\006\355`\235\367[~\300\264'\232\200u\241\234\210io", 100, "\271\034\330\262\216K\312\224\375\206\243\341{\372}\232\210R2H\032n\264\377J\021*\263\022\240\277i\242\356GS\302\243b\230@\034<\261\276\025\016\340EIt$;\347\221\024W\311\275R\254\272A\037", 64 }, + { "\373Oc{\307\313=\3414>\340\016\245\217jar]\035\307\252\010\031\025", 24, "kk\262\256\340\255Z\310\235\020\320_\032\345\260\243\352\202\321\301\246s\300)\3314FJ\267\361b\237\034*BrjY=z\336\300\344\370\371\035\227\334[5*\325\3152\233Z\022\302\3733Wr\012\005", 100, "\246\372\3420\204\346\034\314$wZT/\240\376d\252\354?\331y\225\037\252\374Ah.\304\3737\242\013K\351\035tH(\255\353\240\214\304\350\245s\273\326\265\340\300\253,\022/\311\223\024\3369\002{V", 64 }, + { "\201\012\000\332_\206`\206GD\336\346Gm\227j>\301Y\333\2658\354\001", 24, "\361\321\374qZ\346\016\307Xm(a\256\301\002\245\352\216\244/ca\247,\315V\017+H\004\355wmR\225Upz\373\217\333\206\337>\257\313\275\307\260\342PS\013\260\356\377\322\267e\027\250\030\262B\012\346Q\260\025C\311\317", 100, "\254\012\230\016\257A\017\210\264Z&\234\320\375BRb?\266\012\2509\222\355UgM\322Y^\321b\225\243\353\374\374\224\2545$q\030\030\370\332M\302\350\014F\023p\033\201\316\004\000\270b\016!)$", 64 }, + { "n( \210$O\004\366\207T\3158\361!\212\3606\317<\330G\250\260\272", 24, "\204+\330\321\244\030h\275", 200, "\353Ko\207&\357t\224\036\266ob\222)Cz\360#p\020E\357k\320\370\007R\375\311'\347\007\364p\340\341\275\220\341\260\032\316]-Rthu\206\202\255QY\251.\214\245\330\007\312\354@\375\204", 64 }, + { "'\273`n\012l\345{r4\347\264\223\376LW\311\363P_h\302\001C", 24, "\324\200pH\263\220\2615\305\341\371Gp:\323\322", 200, "\205-\343\243<\333\375na\337\314\271J\354S\300D7\011J\364\023?\2222\360\267\221\010Fr\256\366{\366\235\255\331K 1\370\307V\373\020o\363\367\036\226\004\246G\331o\321%\314\220\254\234\317\033", 64 }, + { "\345/\334G\221\360\212(\211i\247\012\215\223h(P\366\215\371\300w\336\274", 24, "o\341\236\363w\371x\217Y)\013\331\006\034\222\007\221oA\022\037\332\252-", 200, "os\235_H\326N\300\244\310\361o0\202j4\334YO \345#:/\227\042=$@\363h\212\365\376\277\34220\301\371\373\250\327\201\374\012!)_\001\346Y\2061\220\302e\323\004E\364\025\334Q", 64 }, + { "|fm*#\220r\246\343f\364\364\241\370P\313\315}\216x\303,\335w", 24, "\342\177\034\326\226\223Oo\035\214\227\361\305\316\314\307\323\223\353\271\303_\213^\337\017\204C\316\037t\345", 200, "\2571!\373\364\361]\225\332K\267\042\317\314\030\2360.\257\037H\215E\276I,\356\033\13411\267\335>;\226\254g\2532\024\323t\024\237\275\014\021\267\251\004\004\331o\305\036\256\221\234\242\210[\273\271", 64 }, + { "\315\3742x\230\331D\375G\256R\363g\316 \024Q\034\317C\271X\240K", 24, "<3~d\026V9\2178\224\202\324U\335\006%\270=\225^\001l\212\212UC\277\270\233r\211lR\300\275\223\275\300\346J", 200, "`[\366\233Zk==\042\033\211\322-r\354e6D\210\302\275\247\274\374\0266\203d\234\315\331\244\2671\226\014\336\243\350\216^\206\255\242\023ueK\017%CN\002t\300N\244\272?/s\243\200\327", 64 }, + { "v\313\001I\364\011(l\005=7\330\0012\000C@w\317\206\230\306\363\000", 24, " \300\300\271\3443iMC\254\301*%S\325\211\212Rw\350\3027N\233\237\334\3134\204\332\031HS\374\3749\214 \3503FN\367\002\030\312\351D", 200, "S\007a\011\031\231\366\371g\003@\3407\024\016\376yl\373M ksH\327=6\210Y\225Q\325(\2348\334\362E/w#\375\354qY5\324\356F\212\232:\033\231\306\235\302\321\330y\226\005\260X", 64 }, + { "\335\002\277\030F@\273\340E\000\300\304\372\322n\230\262\354\032\250/*\351\230", 24, "\270\207\0010\377\337\347\375\213\331q\315\033\371\253\012n\275\262D\267\226G\367\371P\213*xA!\364!J\342\2113\242\321:\205\203hF\015\315D\026\313\353[`\213`\374j", 200, "3\301\365]\214s%u\230\234\215e\331<.\347<\320T/\254\351\243huF\003dA\341\342\372\206\243\005\277\257\033\364\042[\200Y\326\017@\015\271R\225\035\330z\37523*\313\3347\027\226\325\355", 64 }, + { "C\325RQ/\246$:h\177\362\331\223\261\312\006\237%\326zY\375\033\341", 24, "\002d\2740-\177h\221\356\310\211B\036K/H\335\336X\326\324\3304\251D\365\377\234\220\375\325,`\003O?\340\276=1\246+\231\336\233\211\272\265\257K\036\316\333\204\223g\035\336s\347h\230\270f", 200, "[\037\344w\257\272\235\230\032\270\263xh\361\014\273\350:\273\201Z[\314W\254\224\222\364;z\303\372D:\022a\366\266\364U\3467\314\337\357\246su\014FO\240\030:\325\362ZA\363`\362\005q!", 64 }, + { "=e\0029fU\375,?\262\327\273+f\013\263\201\021\027N\026y\341\340", 24, "\312\204\344\332=f\0336\341\017\264#j\216\206\236k\022Z`B\242\355'Y\016\267h?F\270\213B0\245;\367f\363\246J\012\200\330y\230\200}\347$\243\343\216\032\037\006\271\214\322X\255\256\032\276\021%\263aM\264\252G", 200, "H)\352\343\007'}5\333\013:e\354\225zG\271\032\340~\262\351\261\177\004\227~\333I\363\301u\210S\252\231\340+R\271\336\317\027\354\351\364<\276\220\042a\373\320en\370\001\301\305\356\344\244\236,", 64 }, + { "\376\374`\300n\003\362\372\017\2253-\307\232\264a\351F\247\002\011\270\336\311", 24, "\023\265B\220\374\244\304\323", 300, "{\346'N\227\254\343\334b\323\220\316&\335\375\227\013\314K\214~E\374$n.Mi\337\223\326L\361\342\237\242\257D\207'#\237\373.\2729\363\005\003O\216\011\005$\261O\214\343\275(X\336]\317", 64 }, + { "\177\337\370\037J\313\252R\367\027-\303\274\322?(]\370\017_?\010\360a", 24, "~hCg\251\003\302}\372\2644,v\264q\251", 300, "\003\253\302X\215\255\034\206\337\272\327Z}\206\000\333\311\026\377T\336\347\315\341>\210gsS*\276@3(T\340\263#\325\327\335\027~\310\201;C\2723?\042\341R\346\247\273\355\344\002\300\341\314\245\345", 64 }, + { "mD\363\333\332\276\206\023\340y\331\010\326\322\331vHX\265:\277\042\350_", 24, "w\011\263\376{\016R3\025\013<\033\261\320\024\017\356)\371\235c\021\353\262", 300, "\304\010\302K\273#u\237\227\3135^\134\2743z\326F\265=}0#m\240@\303\020\356\373\042Xl\223^)\242\031\374\215\031T\316\020\203\255\273$\024\034h1\370\270;\276\277P\250k\252\352\232\371", 64 }, + { "Z\2556U\206\026\34258E\247BT\276%L\367\0119r\032\233L\272", 24, "8@\034\305j[D\015A\317!\227jgy\313D\315ZIu\367\266{@]\335\311}\351dC", 300, "\022\23418\340\022\235\005\024\016\010m\217\370\271\262\307z\325\003\237:a\216\255w\023y=#fx\323k\346\215\331\275\206YGw_\261\353\007", 64 }, + { "\247\005\202\025\315\206zP\360\241\134\036C<-\006\327\363\201q\251\002`\267", 24, "\271]\336\352\244%\215\020\330\3458\377\225\350\302\237\253\033\202\367\265\373\331\261o\250\031Q\374q\217\254\233o\230\375\236\327\333f", 300, " ~\303\251\370\211U\337,\237Ln}E\320.k\245\246i\234\202r\314\324MU\365\377v\3177\266nXT\002%\346<;\350\3354\262\330\275\303W\242\014\024UN\274Hd\210 W\244\222Fv", 64 }, + { "%\312/\275\212\305\002\376\340\362\311b\224\3203\012\317R\370]\336\204\260>", 24, "\343';\334\363\247E\332\354\203kj\3654>+_E\310\353~xO\202n\234\217\227\360\371\261\343\314E\331-\210\203\032]\177;)$~\333\367\313", 300, "\2553\037\301\022E\356\010\274\241\216\332\333\037!9X\374z\314\306T\345\274'Z\256\375\036\355HL\337Dw\276\235D\225\213\304\214\350\250\031\316\200B\317\320:\0253\233\233\025n\264\016Y\271\242\035\316", 64 }, + { "\273o\033\015`\0168\005\343\233[\262$q\314\315\246\011\036(\233\203\211'", 24, "Qsa\3029\213*\321F\261}\270\357\330\030\200\335\375'\261cT$\2101\303\035\253\024\267\240\246\377&\316\357\331\221\361nl\0327B\015[\332h\333\376\351\0258\232\203\321", 300, "\260<4h\346\217Q\237=\376N\213\261R\257\374@!&\300\311\027\263\346'\230\377\224\134\225\237\002vQu\006\033y\036D\357T\362\316\311.\321\271\207r8\304\035T\226\233\326\345,\327\361W\217\364", 64 }, + { "-\207,\240\261txU\001\360Q\213R3\332\236\037_7\016H\261d,", 24, ",U^\351\036\003\300?0&+'`\363\252j\202\270V\375\007\355DR^\032\011\237}B\304\031\267.[\266J\273]\325y\335\327\2555\201m\233\254\352A\315\214\337\022Q\270\330\367?\363A\021f", 300, "\220\326\330u\2268\305\223\255\2359\332\203\273F\203I~\012\232g\001\355jb\224\212\226\032\277\036z\326\0361\265\025[N\226\261$f\216\311\236X:.\366\036_\020:\247\004d\276_\276\237`\323=", 64 }, + { "\276\035\274eI\033\356\262M3\021I\315\006j\241T\025\216\342\246\223\035}", 24, "1\316\345\252\312\377\027_\302v+.\276[\002j\006\266\233\037\265UR\023\255\244o\263\333\276+\264s\336\304f'\250\377\003\300\006\320\006B\375\205\300\332\341p\241\223\254\024j\274\231\024:\003\276\233\232\006\011\201\220\356\257\257\361", 300, "\271\353O+ C\226\325Qu\362\201Cb\304)\014\367\001\376\243\027\360U\273\356Y\235\234\357\243\002a\210\324\017`\304F\317;\022\014\021Y\375?\356\343\253\306\371\006\330fdD\333O6\042\203\214\354", 64 }, + { "\342$\336\336[\306\001\033/\216\277\201\367\014\257\362\331\320\374\036\034\361\371N", 24, "\220F\317Y\0232\2022", 400, "\351\321\325*\035\023\026\377\273d.\016s\225\276\321.\330u\014V+\331Z\223\365\034\371\377\236^\203\213\240\375\220/\313P\024WS\331\034\251\347\220ux\231[$\334:x\014|\344\010\233U)\276\344", 64 }, + { "D\255;\367\374\305_\373\372\020$\201\275\3735p`S\330\333\246\271\316)", 24, "\300M\273:\024\362\017\002\247j\376#8\321\260\346", 400, "rW\235\326[\326(\001\223\221\340\316\006z Z$\217\321\372\3722\277\024\334\025I\252\374\134\232\342!\2111\351\323}^\324\217L\032\350n1\372>\311\001\323\3239\321\345i\262\323\013\014\262j \336", 64 }, + { "\200q\243(\134z\361\042cG\335'v\231\025X:\016\316\0170\342hH", 24, "!8\347\001?\220\313\251\3042\306\201\004l\012\356.\177\367~e\305\3269", 400, "\371\230\253b7m\177\266\325\344\350\375>!D\246b", 24, "\314\354\361@\255\027O\232\037\322w\032\316\356i\023\333\331\342n-\301Q\002\244\2328z\026\304$\372\366\260cc\310_S\236\241\237\304\212[\022'\365\226e\016_X\303\323\005'\374\010}O\336\242\321", 400, "\273\265\023\023\343\261\201\026t\300\270#E\336\012I8\300\271\011\016`\234\326\2417\015\311t\012\322\341\355T\335\254\217L\243\253\211\364\234d\222-\344\203\027o\342y1\305\266\261$\316\376\364\220\317I\267", 64 }, + { "\275\272\371\314\250`\370\331\324d(\227\364e\203!\014\322m\254kH\012\354", 24, "\2617\007\347\243\255u9\320\226\035d\341\311\344L\272\352\023\256\361\332\364\2700\014\247\331s]\234\223\223\210/\273V\364\335\015\032\267\357_\001q\310\367\260E\374!E\335\200\337\316sQ\205\023\240M\355\267\250\020{\207\254\231i", 400, "R\300\302\270\242\312\331\300\376P\201\353\0128\370\241o\233\316\260\030\222\303\322)\376\017>\007\011\005\222JPb\361\233\340)\036\352\242\035*>\373R\020\203\355\340\000\0212K8\311\240\266\134\347\351\216\326", 64 }, + { "\330\2011\262\366s\232\025\317~\260\312\237+J\202\020t?\134l\207\310\304", 24, "cE\245\266X\315\3545", 500, "\315\247\030\277\337=T\214\254\331&\364\374\030\246\000]\220\345\274\373k\243O\0234\006\210\2606\031\360y\205\226\221\212I\341\006\216M\206K\211\342\314s\343\327\316\353A]}z@b\0053\202\212R[", 64 }, + { "\250+>b\307\310\001\233\331\261o\360>\206\2733Dp\340y\017\372V\023", 24, "E\241\134\345\365\327\016\336D,\217\032\022E\233\262", 500, "O5\263\352\317g89k\247\351\020/\037\3033\370T7\304\256o\216\337\227\321\225\254hH\211G\316\224j^c\271?\340\036\003\177\001\205Y\303a3\376f \021\211\344q\362\255Q\341\264\244u\321", 64 }, + { "\2153$\257\243\042\257\230\3443\276Y\275\000\354^\363\317\342#\343\272~?", 24, ")\246LD\006}w(\243\307w\260\336\241\024w{O\237/\236\004\230\016", 500, "\304\373j\036\0062\302._\327q\002\302 \023~\367\007.TC,\206\177DX\275Y]\224\366\232\212\001U\207z\305\233\317\320\203\3543\353s\374\012\272q`]\333W\305\250E\336VG\223\343I\257", 64 }, + { "\224\302\305\230\315\313\231\243pxO_\014\374\342\256\237\231\356\330\215:\260S", 24, "\310D\2217\341\363\362\243&@$\221\340\320\266\213\236`LOy:'\300\244\314\212\302^Q\373\376", 500, "i\311\241\337\357s\333\356P+\023'\330\310\273\205D\354\233\343\310\306;\037\213N6\230\006\273\261H\272X\243\367\341t\234\035\263\2034{\203p\034\371gY\265^_\010\267\321~\272\34364\227\322\027", 64 }, + { "m#\277k\323P\307\256\351\316\020\370d\202\377\023P~l\024\201p\033\015", 24, "\366g\225\335\215\223\322\241\007\333\007Y\275\343\330\267\346\003\006\306q\332\317\355\355\377\373}\303i\3322\262\322\221\226\217\305\027\354", 500, "\351\011\202M\306\035&\257KE\357\361\3644\243^\272\346\024\375\267gK4\010y\013\021\361o\253\025\2719\267yk\374\261 [\010\036\360yP\311\351v\0252\236\270i\217\356\022\006\214\224k@L\343", 64 }, + { "\264\276S\014\276;\012]s|\330\273\223+\222\230\004j-\035u\260\336\364", 24, "\177\010jO\370\237\274\370J\333u\240\013\255\374\3621\342\013\240H\374l\372\225\016\266Vy\315\371\030*\024\231\302pLl\234\336\255\271T\001V\254\263", 500, "\225$\317\031\226?\314Cy\201\035-@<\030\252\205\014\245\231\277\271\013\317\375\260", 64 }, + { ".\373qW\226\272\303\354\235\374\302\320h\345\357\034\014\250\344\266\244\325\244\270", 24, "\240/%\223\314\333\316\363\361\034q\245\312\134]\254\263\267\255f\225\217\313\313!ax\035\273\264\272_\027\037\323c\253\271\372\246\013\361\305\364\014\016@-\310\361\233Tc(\015\014", 500, "\010\250\337\244J\255\022/\001\035M\334\2426i\327\255\012i\333\217Y4\250uG\007D\225:\276\344|\027(\311\302\307\321!!A\003\343y\202\247\267\253R\032\312Y\243\134\007\252\321\236\251\364\307\342\366", 64 }, + { "3\244\330\322\257\350\201\244$\032V\270\032\236T:YU\211U\265\327\262\355", 24, "\227o]\354 ;iq\224\345\203Z\231L9+\374\316\265\226\226{\375\377\204\007\223\274\273RH\244\134\243\224A\337W-k\362\372\317'\207\023\272\361\347\015\3371\344\334\226\277\215\277\237\351O\307\362}", 500, "I^J\373\327{\005\200L\373\304\022M\022\250J\253Iu`\345;/\023\325\362\001\032\367{B\017\366_\034a\257x\000\025}tA\347\332]#_\260\023\211{\301\310/@.&\272-\005\323\262\355", 64 }, + { "\343~<_Kd\253{\262\357W95\256\337n\325\336\357\257\260-\227\011", 24, "\251\014\025\254\015\257!\326\256@1\225Ay\027\311\313\204'#\230\306\254\036\324p\221e>\230{\373ZP\236\025\025\3610\001\313\002\275\315\204\263\332\315\342\003-\326\356\216[+\270g\255p%\224O\306\365\241H\262\001q\231\346", 500, "\307\204\357\347\320l\0328\015\373G\336\271\322h\326\034\245\301,G\215Jf\031\177\355fhtW\034g\266\316V\034\222\042\346U\253Ac\036\304g$1\004\244\245VP=41\313\200\272FJe\374", 64 }, + { ".\246\322\250\363\276\370\266\342\207\226\210p\366P\025FM\371\232\203*\036\303", 24, "m\221\370\307\016\020\374\317", 600, "\252D\266\320\035\2649\007=\003\326\355p\332;\021\277\360\200\255\033\313w\366}\201a\325\377A\033\365\321\320S\357G\241e\344\375)\0303E;\256\017 \031'\223\204\2630\027\253\225\354\305T\366\360\005", 64 }, + { "\277\010D\025\241\325\032%\235\032y2A;H\020\214\333\306\356j$", 64 }, + { "\002\261>m$`\016\02494\263\307\353\263\252r\006\356x\223\215\321\236\037", 24, ".\222M\266\201\371\370\375\214\134\223)\242\011\371\225\365Y\203*\365\275\252\037\262\315\024;\032\256SuK\275hn\231\233HN", 600, "q\223\223]O\3412\371D\304\246Z\277P\267\307\247\327\213\036$\223\234Q\021e\332u\004\240\254\316_\012\036!\230\213\233~=\233Ay/\313\010\204\207\220\312j*\016\324\347\042=\017\217Qn4\302", 64 }, + { "\216i\036Z\247\365\202\373\255\243\035o\301\221\013\3434*r\347\214\002\342T", 24, "F-\311\364o3?M\260\205\340:)\302.>#\203O\340\245@6\375\356\313X\267\302c0\014\325\261{\013\267\253\277\027W\254\004a\353\350\255b", 600, "Uq\242\257\354/\372\365\027\376\020\267#S\277\237\300\314t\021\234\370\034\320\206-\357T\272\370\204r\002ZAsX\356j}\012\2259\247\231\211<6-\372\027V8ZM]\200\2344\227\276q\033\322", 64 }, + { "g,R\261\255\355\242\315\344\302\207\312\216\326$&\246\352\351\004\230\372\357\342", 24, "\011\237\227\033\026b\224\320Z\340\2019r\220\367\304m\256%&&\3424zt!CY F\014\347\345v\255\230Se\372\021\242\203YH\277\262\213\301\327\267\314\036\205\0020$", 600, "\020*\217~@\030\030z\241\300Cf\230\362\037\343r\203\344A\304Z\223\2310\331X\377\365k\237\245'l\223\024\012`\345*\324?\310L\344!\270\340>\001 aL\220\001\221KD\235n9\333\362\227", 64 }, + { "-^[\305D\215\276\210\007\255\365\315\023\340\343\011\212_\340?\215(\221|", 24, "'(\221\177\261K\003\247;*\201=\251?\240\345\026U\225\252\355lg\342\310\021-\006\004\270-\256\340&\007e\304\042;]K\306b ;h\222d\353\277\030\332}\355\030\001\347o\375a:#\207\232", 600, "\213{K\321\232\301\253\312\037\324\340\2454\262\376J\335\210J\235\252\220\370-\004\042\134C\316\025\275Te\250\333\212\227\324\035\006\244c\273\004Mq2\276\373\005w'\212f\266u\010\320(\361\332\217W\000", 64 }, + { "E\223\025>\255\312\337\310X\234\377\032\243\275\366\347~QmZ\027\013\257l", 24, "\202\021:\372K\001\252\250\363`\260Lk\255\042^|m\312\370\200,Gv'\255\024\022<\357\346\002\016b\252\315,\303\374\247\326\324\352\254\322\250L\306;\315\311\374\264\042z\354\256\304\021BD\231%\236s\321n\236\251\022\006\262", 600, "T\024\252$\261\307\0362\033@Y92dA\366\341\204\33236\265\357\205\232\266\027oI\245J\272\233O\215\317\302\246\374Ko\204\270z\356\236\042\315\360\312l\231{\274\026\225\221\345\377\343MG\321\320", 64 }, + { "ew\357\210D\321\347\2421\315\323\264_\036\253\332^\253\325\271I\211\212\250", 24, "h5\202`\361F\354\312", 700, "o\325\241\254!\217\211\331~e\346{\211Z5\371+\353\334\134\034\207\213\243\270I\334\317S\312X\344\326y\217f\261\021\243\223\251\015h\022C\303\026\036\222E,\203\366G\362Sy`\3241\3205\262\265", 64 }, + { "\275\247\376Y\223o+\2440\255\024e\351\324_\203\206\326t\333\134\332J7", 24, "trXoC\241\333\350\3415x\210\356\307]\243", 700, "gyBJl\234\206\356:\023K\310gd\312\200\346\320\2479V\272\340\000\024J\316\362PI\271\263\202\022Yhs\302L1\234\037\267\200\312\3641\0171\265\217\215\205S6\243\222\300d5x9\306\275", 64 }, + { "\001\024\003\337\276\355UDd\202\271\302\262m\021\205b\021\234\3108\220\226\343", 24, "<\015&\212c@\264\015n4z\261\252>\355\025\231\363C\224\311n\313-", 700, "g\2301\253WQM\014\240kG#\037t\014gaF\007\234\317:\261|C=\344+\252)~*Pr_\037\376\013y,\377\376\344\2419\266J\227\260\2123\225s\344s\224(\204\024\344@\001c\255", 64 }, + { ">\030*\353\341\240\203\312r\031t\260\265\012\345\331\354\016\014}\306SI\351", 24, "Z\020\013K\254\006\0164\347J\264)O0^a\025T_(\243\025p\261\210j\203\260\233\026\263\360", 700, "\223\3078V\010{G\373\301\030Ea\340\335\315\251\237\257W&B@\022+yHu\2165Y\377p2\344\003\340\341\326f\134\262\267\253\037\300d\312\030t\030\324\211\032Y\255\257T\237K\332\220\310\307P", 64 }, + { "\374\310\024\302\321W\213\250C\252\275\336\024\341i''\022\373xg\007\247x", 24, "\3404>\007'\303\215\331\2719\357\362\010\2146Nf,\272\304Hd\226%\251\2659\252\336\224@\355\357W\024\322\265\341\355\226", 700, "\273\207\247\374n\350\247\030\2469m\313-'\204\200h\022\356\320\341\302\001%ON\343\244\316\227W\212\3252\317\234\366\275,\033\261}\325\350\341\207\203\306y\010\034{%z]r\350\206\201{\017\330|\031", 64 }, + { "\240+\274h}\2040K(f\267\320\015\265CC\337\226\200\335\032E2[", 24, "\240\266\274n\2077\260C\005\223\036\004\011]\322q^*3\276\235\226\320\027=\344$M^\227N\370\022\234\313\007Wk\366.\205\016\365\350\200\020\217E", 700, "\212\232\234:U\323\302L(\362\221\016[\270\266\001v3\253\225\340t{\016\226|EC2Jx\377\264hn6\331\266\014W\245\233\277m\020\353\245\023\221\016H\000|c\307\362P\027)5\323\0230\344", 64 }, + { "\030\307\267{\345\270MM\201\325\330:O\224f\313\005\311\325\310\210tJa\022\002\010\374\335S/\247\253\270\010-\205f\257?\330\234\032", 24, "\335I!\203\271D\364\336OF\220\225]! \362\013%Bsp\326\341\343\360K\267\267\367L\354\370@\371\035\227\225\360Z\205mx\276\371F\247P\344.\223\264\221x}\322\225!\346\350\256\2742\253\265C\367\377\022\036;\017P", 700, "(\036gv\030n\0139/\250P\272\313\230\351\226\211\363\237\312Y\037\272\311\265=\351\343\305\374_\246\235A\264YD\304\334\202K>\037\274\336)\301%\366\242\246D\324\134A\303\2414\276*\031Y\376\357", 64 }, + { "#\0427\244K\257\006l\005*\256m~8+\317\373\325x`\224.\320\221", 24, "\261f\203\226F\362\245\334", 800, "\267c\357A}cz\243\206\233+\230\256=\203\034H\007[\32169\375\366\322J=hG\336o60\336{\244\037\2775\326\243\213\320)\337\003\370\323Q\232\242A\306ZRT\016\242\242\350\372\015\220\260", 64 }, + { "\347\377\324\375\314\303n\375%,\010\336{\375\3320\227\344\2662\0024\325\365", 24, "\361\311\366\227\314\275\335}\213\1773o\371\231\357K", 800, "\273\267\010\210e`\307P\264k\012\345K\247\362\367\033\310=\000\225\035V\220\312\213X\314\341\273|9\325\275\304\241m\012EI\271\302\2747\331A~\177\032#\233\376\353]N\301\365^Mh\272.+\260", 64 }, + { "\357\2528\231\262a\032ZJm\3157\260\331<[\232\27441\372\310\267\036", 24, "l\001\255\324\355\0220\246E\206G-~-\333\004\331Y\026\363\303R\010\324", 800, "\246\354\213\206<\223h\204\367\333W\021!2G\376\014:\373\013\327m\225\227\336\250\342\221\310\321\363\253z\354\022uk\342\177\302\213F\3758\021\341mgESmN\257\356\014\276\344ju\372\332\361\014\011", 64 }, + { "u\267\0421[S\023km]\353\002\364\331~J\3503\376Ay\335L\012", 24, "\352\204\321\301fO\005\370g\003m\307\304\344\354:\030\244\216\215\026\331\262\2267\223\3655qX\252x", 800, "\011\254b\343o*\216\240Dp\215\015A!.E0", 800, "\375\240\241\236\314\214\274}\266\250\225p\024zo\012\354\220\377#_\210\001\301\343KG2\362\312B\335\331\304L\224\205\267o\320E\305\233G\021\031\2726iE\267\257E\217\310\313\247\312\232\200p`\266\375", 64 }, + { "\255\032\237A_\223m\000!7E\226\354wSZ \375\207\316\2177d\031", 24, "\324\234\005\333;6(\316k9\134\271r_\035p%\350Rm6\2418\025\204vv\212b$\321\027\314\250_\3478\233y\303\301\370\016\200\301IZ\316", 800, "\316\312\267%f\212!y0\237 \243\207\371\274\321\134\274!\327\362\004\014\210D\250\232\307PbslaL:\252\262\201#\315<\220\232\275\273\246G\311\333/\032p;D\253\235\2401b\016\224\215\134\341", 64 }, + { "z\006\205PE\271u\361w$g\362u'\134\013\240U\303\0055\305!U", 24, "\0279\275\233\304 \031Fb\231\224\204\276\203\021\011kM@\341\223\236+ \262q\337\212\376\222\3471\243\3615\333\247\340`7\004\3137'\263\231\302\327\3253\353\326VP[\263", 800, "\011\253 \313\264\371\333\363\017o3(F\001\234\207\243\263\376G)Y>x\271\332`\270!\250I\375V\300$\000C\206}v\345{\247\257\314\276\017*\365%\332\374\242\242\343\271\243\210D\200{+\254;", 64 }, + { "\367\212\237\347\371`\021\024\317\363m\366\226P\240\271~\353l\015\204[\350\306", 24, "B\343\221\021\345\275\004\353ZB\274\223t7\313:\233\255\233\363\361\351\014\315\314\325\343^\370\301S\012\212\317>%\022\023\210\352<2(\224\311\312\027\232\327:\227\214\230\363\023\037\337.\024\010\372\317h\023", 800, "\327\304K\020\214\277B\366\002\330C:n\353t\334fXe\351P\033\032\311M+`\320/r\265!\301B\231\350`\001\013\311c?\220\333\326\202\216\243\365\245^\245j\377\372\210\307\272\303\342\216\370\210\355", 64 }, + { "\212\264Q\307\376[/\236\013n\346\243\030\322\026\321\205\216\324\214\360=\370}", 24, "\202e\341xV\033\272\236\340\342\216:\016\2516y2G\267D\211\375!\247I\342\021\277b\031P*\207\035P\205\244\235\311\310_2\346\023\354T\004\304\327.\332TR\312\346\034\212\302\251\134\005\310\016\004\200\257L|\205c\303\205", 800, "\220\242\272\200\024,\341E\312\361`\270\304\345\016\037\273\273\341\301\134\224\316\032\003\324$(\316\234o<\250\263?6\351\024\312\042d\373\366\320\036Pa\015'nX\213\033:\313N{i\134/s$=@", 64 }, + { "\274\322\370Z\025\306%\003\310\201(b\362P\000g\264\011\212\340{3\244\236", 24, "\256e\007,5\002=\262", 900, "\005\001w|\222\320\330\021\015P\305/k\244+(\002\366\277\207\243a\302\350\301\227;Mdc\250\024\370\006\311\007\226\302\037o\367Wg\377q?k\005\223u\021\036\375U\321@\363\232\317\363\225\177\3303", 64 }, + { "f\247\021,n\027\321:\311Y\243M\345.\204Qe\302\206\301(\205\031\235", 24, "\037^\213\344\352\177&\134\004\203\203{%&\027i", 900, "\253m\201\326M\344} \345K\2152,\245a\255\306'\265\353\216\011\217\004\207Y\271b\234\222\230m\016mu\340\231\035\235\215\3413:\004\332\015\310yR\260\023b\206\000\230\007\314\214\370 8\011\210\313", 64 }, + { "U\257m1\225~y\202\247\245\346\262\261&\252\253\261\375\022\303\247e\351\342\321\260\237\275L\220^)\3519\017\261\013\364\243\037\030\277\375MkIo\275y\004_j\241", 64 }, + { "\367B\325\214\226\364F9!\304<\320{\342kg\315I\315\023\316\372A\336", 24, "\240a\265\361\241\204\221O\347\345\026K2\336a\357\304\037F\311\341\276\216\343\360A\334\014E\317\265\203Ik\346]\317\031\272~\365\267ft\241\015\350GX\235\021\037;\024\033\354\2124J\337\377\304\203\250", 900, "\202\242\3013\2208U:\340\237\377\261,\312\016\251^\260\271l\324\213\034\311j4\011\236\254\360\251\341\347\310{H\017\320 }\232\274Jg{\217\324\257\363o\357\344\026\026G\277\310\004\242\235\263\357-\222", 64 }, + { "\016\270E&%\327f4\252\212>4r\344d\252\234\271'\254S\324\352\350", 24, "\375\306\361\014e1\036\264\033W\024j\367\214\265\027*\201\337\333\233\275y?\027\270~F\274\346dC\364w\211`L@\364PCo\257)#\346\343?)m(_k\252K\375\275\003\3456\376\2240\036\360\222\373C\265\217\322\251", 900, "\302\205\312\343Gl\252\336J7\013\234\355z\377E\3711U\311\204\213\332X07Z\222\333\017s\351k3\333\370\273\352\361nvB,w\315\202\214\327\367\351W\3560\350\377\016\2111\323\315Rd\360\241", 64 }, + { "X\241g:\042LD\026\033\305\2103\347%\313\222M%IxT\3311[", 24, "\354*\024\334zTk&", 1000, "TW\205I\026\261\327\304\271\241.\340\134\260\241U\257\312\000L\177\012\002\020c\266\333W\352q\331P\336\027\357\363j\356P\3036y\357\306.\361C\232\134\245[\366\203\213\307}r\255\350\324~\330J@", 64 }, + { "P\273\256\313\320\002{\007\246Q\235\261\314\225\325f+\265c\221f3\037|", 24, "\3772#\270\014I\036\251\274\343\270*\254r\244S", 64 }, + { "~\021+\245uZ\362\213\366\200\022\206\215\334\351NYt\355\377{\353m\027", 24, "\2447u\244\364\217\330\177\207zVy\210\026|h\302\255\343\012l\034W\235\214w\263\270\256\236\255\312\134j\272Z\350\134v\357", 1000, "\323\021P\223\322\235O\310\243\376\254\014W\021\250#\357\307'\305\362)z\177Y\177\354w\265\015qzf\333>\020G}\011\355\350O]\253<\221\251A\013\315:\023\201\267\010\210\372\277B6\241\244*\314", 64 }, + { "`\216\220\304\345\323\032\361\230\006\373k\0015w\247j2xL\303\242\021\301", 24, "\354\314=\001]\034\307\013\035\250P\231Pi&\031\205\203\027Y?\360\215nEQ\021\336\373\215\332O}h\264\207\253Ah\377\376a\264u\251\002z\252", 1000, "\321=R\262\037DS\377\205\222t\316\371\353\206\267\315\313\246\364\3673\010%\224\351\307z2\230\360\273\220\311aGp\2636\015l9\300\345\003\326r\356m\203Q\235\232O\227 \352\341\021{\267M;E", 64 }, + { "\354\004\006\232\301c\330+\321\346{\032\251+\226\274\273r\2126K\000\000\320", 24, "\244\371\011l\010r\042\231\366N\007\354\251\304\237\021\200\314\321d\330P\027Jgm\022NQ\015u\354\016\023s\363\0059\003x\243\366\361'\375s\330\266\310\334]\350\201\037\330\177", 1000, "\262\340\313\343-\0366\257\034\321\223hwX\317D\305h_\036\012\323\303\360(\016\014\351\244\256|;\031\316\355\317&\244\221\374Do\370\351\372\233\344\027\237x\225\212\032\026\321>\203\335{\263\343h\254\245", 64 }, + { "\306\321\026\304\337ii\326\313\346\326Vw\314&B=\233:\237?\221\201\353", 24, ")\344\304\012\2374O\241\033;\035\3024u\021\243\347\201\314\277u\304\210h\252\022\241\237y\031In&\3374\356\315b\214\004\277\370;\330~\237\335\262\275[\373\3121t\005',\211\201=I\321\216\334", 1000, "\376L\243\307O\223 ;d\203\232\017\217\324\246\260*=>\377\373z8\226\237\255\341\320\342Z\301\015m\363\005\201X\026\202\221\017\351\301\003M\366J\031\263\035\001{:\307R\026\356\367Ww\226\2106N", 64 }, + { "a\201~E\177k^\377\225\372\322\254\303%\007\300\327\315\250\025\257VA0", 24, "\270SB\012l\322\243\037q\035\317;\324\307\324\351\347\030]\245\265\366X\2650e\322e=P\205R4\344\245\227\221F\272\356\034&\323&\022m`z2\275\303\266:\207\212\213U:,\035\227I\275\347\257\023\211\206\211\324\377\364", 1000, "\224F\035\020\272\0235\366!5\234\200\355y^\042+\321\275nk\247\366\034#b\235o\214\277\020\375\344q\374\035\261\263\222\246TI\221 \240u\232[\214\346HB\221\322\003\377r\371wG\025\035y\345", 64 }, + { "(A\2328\302\034m\303m\265$2&\227\250\016Q\3779\275,\313\013h", 24, "\250\337%\227r\334&S", 2000, "\241}n\035\312\202l\273\322\352\272\252\212)\335\230\226\325\012\362eE\004\315\357\177\245'\022\0052\244\024\014\225\227\007\243As\277\251\351-\262\246u4\312Z\214\274\202O\376\324\262m\035\201\360*\343\006", 64 }, + { "\224\227\346\024\316\015\012\374\275#\026\307#\012\262Nr\313\353+ \216\372\032", 24, "t[\215\345V\325<\254\367\361\255\343\245\023\017C", 2000, "u-\242\357\275\260\2226\270\312\037\230\275\372rS\327\216l9\316Q\356\210\323\210E5@\217\347\036\032C\202)\033\230f<\227\023\256'o\233\247\006c\320j\244\341\020\134\177\313\177A\214\336\215\230\322", 64 }, + { "b\247o\224K\245\234t/\302\265\264>\310\225\024\015#\255\227>\225\022@", 24, "\211e\230C\273\3177\2211j\365\030\320\203H\255\017^\256\324S\212\266\372", 2000, "\302\004\0071\000\034\042\360R\205>\020.\016\334\042W\230c\250\222zs\337-\377\373r\333c\001\371\272z\363\0003'\362\202raS\244V\354\377\344\336$\201\336\322\372Uqy`>{B\021\234\030", 64 }, + { "\002,v\342\377\027yk\360b6]\032eS\242\353\011\353\204T\307\207\022", 24, "\236\177\303M\345\365\027T\017\323:\360\225z\271\361\220\265\017\300\273\030\223\2531U\316T\020)\225\375", 2000, "\340\214P\252yt\0126\301i\3054U\217\267\024\364\035\306\003\376!/\345\374?9\250\207,S\031K\276\223\257\364\346\367\241 &\256\271\314-:\272+n\367\023\272\311Y\346\004\225\315\016\236\205\306\350", 64 }, + { "\004\000\227\245\266\231UzT\033sW\240t\234\004\356\320xazQZ\033", 24, "\257\341\327r\023?z\022Y\205t\302{\252\341\027\341\333\260_d\030\206\354\367\026\302*M2\225\347\336N\253\251&Ad\276", 2000, "\353\364R\036\042\354w$=(^!\317\207\266\342\212\215\263\250+\307H#P\011\3448'\212'\030m\037V\021\212\375\3601\311B\233\361!9\036\2135\034\337\264T\331\346-k\222z6I;\303\360", 64 }, + { "\015\213l\014\376\305F\340\317\356[<8l\000\235L\361\327\3623\251,\032", 24, "\356~\011\332\242\011\203:\271\222\204xV\274#\0064\016\237\364[\377\231|j\031\336\272Q\007\331\371$\010\361\231\346\205\337\340U%\230\241\221\202f\267", 2000, "*\230O\020\204]\354H\245&VSOk\247\352Jd>\243\322\351(kX\302c\177UhS]\001hq\245K\320oB\201;\335 %\3164\256\024`\233\273\256\304\324\247\321\345|\023$?cJ", 64 }, + { "\203\371\026\261\020\021\004\370\246\244o\321\365\355j\004\200\367V\304>)\355\300", 24, "\260\347Jg9\373\303\270u\270\253\343C\300\336\010\307?\016bu\366<\334!\312\337v\240w\177[j\227\224AU'\037{\032\245\347n\343\011\370\342o)\214\354\265\236\234B", 2000, "G\345\0377\201\012\226\231\207F\224\006\035\236p9\303\365\3250\223\226>,\313\330d\317\237\312\3238BN.\257\0155h\377\034\236\331\223\037\307\3416\317]\203\302\252\356\234\230^\027\220\375|\0341\006", 64 }, + { "!\323\234\201\027.\265K1\243\334w\375W\367s\264\232]^\011\243'k", 24, "`C\241\225\020\3131\226V\311\257\355\361\313\326\304\003K\206\266\311L:\327'\370@\317U\300\027\207\012[\246h\247\004d Re\027\247\222\323\212\225\324\020v\252_\252\255\361\367\303\020(b\015\346\336", 2000, "\332\363\361a\364\375z\356\215\366N\256\330L\022H\2644\134I\362\373\310\212\213\262\326%\366\351`)\315\014\356a\266\037\352\262\236\365\326z)uU\374\364cq\307=\331\013\316\243\335\033{\273\244'c", 64 }, + { "\263\266\230s\247\032\243\235\271\203y\245\243\012\276\015\230C\230\262\213T\346", 24, "4GO\256\202.5\272\256\313\017\307\220\252\234E", 3000, "\223\021;\244\350D\254W\275\346\222\261N:\235\364\316N`V\307\134\004\037\005m\332\222J\324H\020^\325=\233\356\350'!\035^\245\025\263\022.\272\004\254\342\243?\010\011k\224\331\331\2322\336R\242", 64 }, + { "\237V\216}VW3\357\037qC\305\317\207\302\220\351\331\037\375L:\022 ", 24, "\336\277\323o\333\220q\304\274\313h\237|a\327\323\230\261(\371~\020\327d", 3000, "\211\017E*\360`\315\036-Q\374A^B\343\020\200y\034\177U7\340\260\371?U\221\323}\321\212\261\255\3411L\246\315\334\004%K\01749\207\341\027\313X\230v\300\032=\304\340\307\240\005cu\036", 64 }, + { "\277^\326\265S(\042\033\000\346Y\234M\000\310\025\344\3171\343\230\017s:", 24, "j\301\025\325\364\345h6p,\377h\322\372[\215\262\261\235{\355\352ae3:\042\337o^\270\226", 3000, "\367\314\334~\313\305\216R\375\313\317( W\2524\237\367t\006V\356l\270\305\025b\351\372\016\205\274\032yn\321\366B,Z\300\245\310\364\202\374\336y\325\015\221\342\343\223\254)\340GH\354\021\235u\354", 64 }, + { "oP\0024\027P6\376C\272\232\025\207\225\3616\361\26629\313\004\375$", 24, "\031r\357\216B\274\223?U\2367\002<&\2615Lj\012\276\303\327~\373\314\373\3762\010N\177\231\324\036n\334`\317\013\200", 3000, "&\322\212\306\227\365|H\226f\313\2425.p\030V\261j\350|\352\205:|L\316[\023\305\222`W\264\246-\232DO*+\343:\241\251\320\233\354\377\203\246\235S\027\341\250\316\327C<\226~\346o", 64 }, + { "O7\204\017\015\252\361\327R\030\367$\314\307\217\207\252\323\333\270\213\207]0", 24, "'\234\271/\326l\237\264-\337%\332\012n\372\276H\262\134\263\336\213\337\021M\234\321Q\227\333r\266\304XS\343\211\256T\322\303\234\211\260\241[\037\271", 3000, "_\203,Z\033\317!\350W\356\335\2426T\015IE\012s\331~\301D\012\374\306\235V\321p\340$\353\263\331\237(76I+\000P\342/\001N\345\313\241\214\377\333\377\360Z9}\3544\236\201\370\351", 64 }, + { "\244\350\3759f9f\300\002\015\214P\344\022\200\351[\134RvR\363\225~", 24, "\204\253i\244\217\223s=\217_\313\242\024<\252\241\3530\215,\212^\335S\257j\331\003DNLn\2414\035\017,p{\364\360\342U\032\254\007\021\036\256\345t\253\316M\021\254", 3000, "F\264\340\263\355%\367\007CHC\304!5o\030K^=\305\204P\305gIJ\274\177s\232?\341\000\364\014>\214n\236\004\363\250\323\324\211g\025\371\004Y\357c\351\033(O%\312\267\214\313\001\003\274", 64 }, + { " \373\314\232\000\2625\230_\303\350zD\210\252*\034\305\005\017\355\356\227\270", 24, "R)\032\244p\363 !9\274-\205\343'\231)X\346\025E\323r\032\357\024\020Fr@\013K\221M\376a\336$\024q1\310zU\031\271\274\325(\352\265\017\042\210\016\276\271]\330\252#\244X\261O", 3000, "\241\362\014\177\002\312\211G\001\312\001z5_3\207\232\300\227\245\201J\255\376n/\177(\371x<\303f$\353\210\014\232\232[\244\277h\353\341\022\320\325\002TF\352\037\264Tf\2676\370\271\321\363!\307", 64 }, + { "\333\025O\227@h\274\2608\237\300\004\377\223\022\320\341\312e\202`xN\263", 24, "a\042V\324\255~rU\355\206\366\202\005\354\002}w\033\215\266\010` \215\226-@\231\246\376\340\010\023\015\216)z\221\365\327\372\262\203\035j=5\265\243\242E\035n\036\014\0177\367\205\237\363\031\346\264!K\357Y\350d\375\373", 3000, "\003\242\243\204\364\011Z\213&\276\020\270\364\204\275&v\013\015?/d\352XM\302\306\371\242l\360\033/\247=\277c\331:\021OUK\262^l\270]qh\242\257b\213TJ4L1\364\366\253\201r", 64 }, + { "(n\026\312\205\343\005\033\363+;\013\305ww\340`ET\312*\2063\371", 24, "\327\336n\263\257uk\336", 4000, "Fj?_\352\260\304u^\354\210\205e\025_K\026\277\346Vrq(\224n\204\371\024\221\021dc\360\030z\270eu*\203\365\336p\32321\305w\347\245\265\337\212}S\302\247LR\377{\002\203\235", 64 }, + { "\275\277G\270\316\265\317Y\033\321\261\3341^\036)\235\253\253\274\014\227\327\374", 24, ":\311\227\357\355\353V\261iP\265L\354xr\262", 4000, "\021\332D\300\265\336P\356\226\215\014[=\000\234\027\224eX\022\260P\220\207\315\274~\030(e'\314\134\256KX\015\022\361`\315N7\021$\005\213\027\327\230\300\212\246\267\010UF\322}\260\276\006[\273", 64 }, + { "e\3241\366\225:\037\220p\032\242\346\364\341\237s\332\235+\033`\007\333\260$\241\007p\013j\007", 24, "q\326\233\230 \340\376\340\330\241\255\270}Qb\037\331L\363\243\021Fe\012\204\210\220 \246'e\323", 4000, "\233A\343!1\343\230\230\201Xu\272V\314L\330\204\217\301\265\376Ph\035s\321\253_\303\224\201\262M\350\365\375\302\325\217&D\234\314\320D\210S\370L\3674\217B\311\251\313\237\243\202)\030\022\307\336", 64 }, + { "\266\015\355@-\222\245\034\2232\353\327a\326[\223H>\212BBP\212\221", 24, "\207Q\350>\367*\313\020LH\353Ap\025/e\240\033\230\221=\367\325\243\326Bp\037KHzi\302\017\247\254\306\375@\346", 4000, "Ii\225\355?a\327\357\035d\007@`A\307M\214\027\304\205\376\343\2641.\325^\336\030g\275u\351\333_\205@Q2v\255\263\353O\243\006Q\243\303\031\252\252\036_\020\3739\202\307\177C\314{\271", 64 }, + { "\362\272&\200\012\014\365\001\341\023T\232,j\201\202\324\0042\256h\377L\250", 24, "=\013\254\322\351\270\307\341\322\310Y\262\211%\357\356\273\233\346'\265\277\350\313\342\263\244\017\361\005?\033\352\374+\305\244e\270\232$bB\375/k\355\316", 4000, "\222a\254\336Z1\3035)c\302\226\031v\216\345qr\234\247\211\134\004O\010\033\205\221YR\313\365\034`\244\276m8\204\255\217}\333\013p\017\307,\245\270\344~\037.\027@\243\3008\226\346\364\004^", 64 }, + { "g\027\243\247\030\210\246\017\355\022\306\212\347\226pup\007v\374H\261\006b", 24, "s\006v\241m\353\271\320{X]\346V\027\345\331\360\017\302\210\010\213\243\134\361`\235\306\265\036U\025\264\373T\373\324n\033\226\037\252\031\340s_xtA\310\335a|A\252\274", 4000, "l\247\361\333NE h\255\336\021\374\356\327}\347\314\347lZ\336\335\377\341\354\342\206\317\310\036\302G\2039-\374\005\027\204\313\304\340\334\032\032z{S\273\330\1772Q\220a\201\260\264\312\222\003\317\034U", 64 }, + { ":\243\340\307\302'\256\134\326\301W\356]\307\3327", 5000, "\205\254\255LW\275\210\264\205a\214\001\323\312\254\251\233%O\222!0\037\177\274:\212\357\354`\005\335W\254\265[\275>S\243s\225\032\341\313\214\321D\177*\246\001\366\005S\234\230\010\300\301\024\337\3777", 64 }, + { "i\347u\243(?];\2174p\027|w\252\232\374\252\031\360\013<\244\313", 24, "U\204\031A\265u\316;\325\340\215C\340\026\245\366\027V#\3607\320\223\315\352\364\316\240\020\276\034\342", 5000, "p\216\236P/^Q\034\303A/:C\012-V\363\242J\370\310\265\333b4\2267\177!pX:e\306\242(c\325\033\306\315\312B{\311\026\250k\026\257\207\217E\306\013\246>:@%\203\272\001A", 64 }, + { "#E2\2447&#\202\264\042-e\346\315\327\212S`\354\357T\373\374\356", 24, "}+\227\036\352<\035B\325jB\225\343w\237\034\206\255\235\260\233\336\204Sx\216\317\202\001\261\242wb\035\352\304\235D\221\267", 5000, "\242\246\366\007v\255\267\332>O\332\005\024)K>f\350\031\325)\224\236\277/j9\373w\375\224\207\327B\321\354\265!f\373\013\375\024o\3768\345c\351\202\305~\366\221\301\237\3504}\215\313\306aK", 64 }, + { "n\342f\266\256\206\242}}3\011Iw\350\264de\356\210\365.A\357I", 24, "\313\366\372-\305\017\251\134\366\265\2732\304\203\300\275\224\300\314ZKR\016\260\363\273\014\255\344\304kW\217\275\021\357\334*\342\022\243\312\303\265\016OM1", 5000, "9H\012\364@\023gk\224\324\007\340\017\215U\013\247(\006\007\305\335\006xAp\372\343\267\322\355\250\344#385;D\342\310Q\030\214\271b\275\265S\246A\020\247\030%\233,$C\267\334\036I\020", 64 }, + { "p\224\002t\321\207- x\331MZn\352\042*\220Cv\230\303\244u\233", 24, "DE.\236\2209#`\026\303\274.\352\300\310\230\216\032\216\214\307\254\024\253\317U\033b\327\3532\033\231\370\344<\376\013-\330\0032\260\264L\012\305\020\254\356N\375c\333\010\236", 5000, "\324\235\2268\20247\200[\222\042\315\006\244\002\207\367h\31422p\371\205\206Y\202\331\307V\227\210\024@\002q\226\225\345\305`iwI\274\334\373\310\345\330\271\226N\331\242\371g{\231\266\035F\330\263", 64 }, + { "I\2423\320\015(\222H\242\017\252\211\353\375Ja8\033\340\3765\314\322u", 24, "\346M\375k'| \307\351{\221\376\304T\026\0058)!\025\306\022\271\227\032G\254\200+\201\033\021e\032\334\002\301\317\201V\3658$\042\266\362\216i\217\266\021Y\312\017r-\354j9R\022\037\321)", 5000, "\224I\371i\265\005\262\257\262\253\373zV\250\240<\311\201\257\362\222UH\340\367\200Q\212\017\335\251J\020\002\341PB\202\030\022\017\277\032fT\256\013\266\355\227=\224!D\371\225\240J\215w\002\255>\300", 64 }, + { "\205\027X\235\021\3344\2458U\361\222k\375\353\370\226z\3140\321v\353\026", 24, "\254\365t\304\343\317\275\254\0273g\241\003\320C\326\264\034Ep\360\267\273\2332\210B'\222\210\303W\202\021\364\246\302\320\236\256#\3074\324\313\216V\231\242c*\003\2345l\0365\353n\347\276c^\366>\257\215\227\215-R\207", 5000, "\337F\336\013{\253\267\314\001wC\321\201G\344", 6000, "\226\341q(.\361\024R\272\037\201Z\202\300\271\002\216AM[g\263=\0039\034m\250pb\235_\205\3468A\007\213\276\366oK\273]\277k\010\011#\255\264V.)m\032_|\372x\230mnv", 64 }, + { ";\346\354\013\230\227\031F\357Nz\350\262\002\025\305\013\337\377\332\350\256\014\030", 24, "\222G\375\327\177$\353\274\353\357@\007\026\356\266\303\240\370\271\241h\241\003f\233\0061=U\264\177\320\311\312\334\036\031\025\275'\324\341QQ`\277A\347J|\012\3315\243\230\217", 6000, "\332\363q\304\333D\240\347\241\032i\333P\231b\271\344\317\024\355\314\301\267\316\021\237\321`\013\215\202l\365\330\311g\235\247\232\361\336\257\206,\321\317\330\006\253\233\302$T\357\324\035\241\0316\030\036(\204\251\331\376M^\2559.\225@\0110[j\201\350", 64 }, + { "7Y\231\310\325x\221\333\3057~t\254\265\325\335\247\326\227\363:\134\355\201", 24, "\340\341y\031.\267\217\264\012\020M\250\347\274l\311_\255\361o\232\260I\342", 7000, "\202\267\254}\0042\357\253\273\261\022\024H\020\203\013\032to}\347m\337\376\371$\250\255\321r\016\006\274\367\311\323\243^wsG\237Vw\004p]\325\261\365\027\356b\230\205\322L]\021\203\371\2709d", 64 }, + { "\177\335\200\3270AM\247Y\322\010*\234\035A\261C\366n\036>r`l", 24, "\214\014\337\257?\303=\024\240\307\343\00255#\326\0235\267\327K>\354\375\211\321b\021[i6>", 7000, "K\000\352K\222\245\260\275\361\361o\365\326\364\036\2770\207\331 \312LL\350c\006\226\247\014\217\217\261/;AP2N\327\343\013\246d@f\250-\364\304\013\002\314T\032\025\247\017\217c\366\003\305\037\362", 64 }, + { "\200s3/\021\217F\036\305x\321\206\215\004mk\314<\000\300\226(*\244", 24, "\247\250\3112z~\236L\327\215\003\367\022\244\217\201\373f\010$HE\221\026%w\326>\033\017\226\020\207G\367\352iL\322/", 7000, "\311\374\230\374$\026\042\360\254\307\307\252\207ZP\232\364", 24, "\207tG[%\035\246\377\337\325\331N\022~\365\236/\304\201\374\021@U\372] \226\375\037E8\007\254\354\370}5vZ\031\206`\366!\322\366\342^", 7000, "\245\210\355\305?\007\012\026-\377\272\025\2700\270\375T\332iM?\216$tT\216.}\356\005ExPe\005\262?\223\226,O'\365\000k\246E\202\021\213\324\035qRg'c\024'\200X\026\240o", 64 }, + { "\021\300\216*\364\017\360\1340\321\362\221`G\234W\363\333h\324\216b\217\307", 24, "+E\251\013\223\005\246S3R\255\016G`\212\214\246\352\012t\353\324\237\230\242\241c\227\021\374\316#\260\351\317\0252\243\007\002\346\026\237\023\216\3117\344S}.9\274\203h\371", 7000, "\362\315\306z\261\307\255\373\276u6\243\021\347\234C\370\206\306Bv\257\211\347\242", 7000, "\033\256\213\370\341\215jM\215\216\262\324d\007\316\365\227\371\2034\134\272\012\206h8\212\253Z\027\314\305\017z\371\010\216s\343\313\277{A\262>\312k\376`*d\300\360\2516\241:%aj\215\242\275\375", 64 }, + { "2\214\342\377V\332?\2433\233\177\347:\352\242\364\337\340\331X\237\257}6", 24, "\320\326\244\261\006:\026\037p\252$B\205\265\036`\362\327%w\241\271\317\367\004\026\215\364\260\023F\3245\220\276\367\347\260G&g$,\2219\015\177a\224\211\313\016\346\027+ \011\354\017`\026#>a\327\022\372\177|_\023\231", 7000, "\332\3414\351\013\042V\243\371\033\321o\023\023m7T^\220X\343\300H\010\306a\307+9\326\315\323\226\032\205\030\024b\371\365j\220n\014\312\024\003p\345X\017\341=\321\304\205\340Q\300\362`\307\314\365", 64 }, + { "55v.A\333M\011\253\244\245\331H\317t\353\235\243\306\200\307\241\330d", 24, "\301\032\244\327Z\351#\344", 8000, ">\334a\343\370\316\221c\363\253\306\042\325\007\310UU\351g\340|&\203l\034Q*\36754\206\134\264<\341q\342\332bg\014\000\301}yR:pI\342\301\343\250x\232p.\373\211\033o\016\015\300", 64 }, + { "u\034\247\2249\312\031?K\134\367\227\373\015w\005\303v\375\311\227Y\264P", 24, "\347\374w\031d0O\321\342+\036q\026\015+L", 8000, "\000\307\323\245\336\306|\361i\245\221\003\013Mn\233\211\227\230=\272\211Ybv.\007\256\244u\364\350\201k\274RA\022\327\212\325\234Or\0137gx\340$\365`\355\255\3310r\205CF\246\3554\003", 64 }, + { ">\372\324z\264\3456\210u\275\205\315\302%$\323\023\204.\245\305O\266\215", 24, "\210\036\242\335\310\002\367\363\365\034\003\030\207\017\007\022m\0369Z\322\032\272\213", 8000, "wO\311(\236\027@\354\006YJ\353\207~\360\237`Y\316\242\247\307uz)\307\023\267\262\340\007\307u\2256\0220\347\1774\274\042\271M\335\026D\342`\356\004\255\2702\21587\0270\346\310\231\303\215", 64 }, + { "\205\015pw\204\330\315l\327UI\003\134\005\033j!\202\007M9\030\017\257", 24, "\243\006_`Ge\333\270\232\361\256\305\266\204\351\231\232\310k\230}\035\225oh,F \177\213\3508", 8000, "|\206d\356K\204\337\023\357\324\325\377U\314\343\001\177Q{m\277Y\3232\347Z\264\343\032b\367\337\204\347\237\340\220\000\005\240\015\256\207\240\266\020{#p\216Kd\031\245\266\237\366\327\003\352\20096\270", 64 }, + { "\234\317\267X\261\316p\305\317\270\037\223\364s`)\266\360\255\372Cx\034\344", 24, "\037*ZQG\262z\310\302\331\247\036\355\331S\227\271\245\240=K\342\360}\015o\376\275\353\370v\326\011\352\366\011\035\346t\315", 8000, "X\246h\312\331\270l\217;7\371z\357\213}\021\200`\035\335\277S\211#\024\257\253\367\270$\306\334\346\236e\030r\031\356Z\314\340_\237\242\025\134\314z\360\216\020\337\205\272z\314\036L\216Y\217G>", 64 }, + { "\216\336\334\260\010\376\034\330\025Ilx\217\376+\341?A\303\320\212)\242[", 24, "\002\257\245\0163\344\244v\375\344\023\272\244;\353\242\371|\010H\337(\200ut\252\252W\260\256\355\251\244|\013H\257\350P\003\210\330Ji\026\361\230\313", 8000, "H\320\325\372\034/\365\265\000Z\356\250\353{\205\202\247\006\313|I\032\013+F\373\270\134S\015\036\3443\240\376\334\3018\3343h^\344\200\243\312Nk\264,\302K\365\267\315\346y\030!\020\313\373\241\272", 64 }, + { "\364[\025a\015\244\351\226\361\277\362RnY\016Vg\011\004\032\0243V\334", 24, "\303\035t\266\010\251('\331\304\035\276E2\030\216\305\330\026\3153\271\227szf\361\307Jg\217\003\200.\031\034ga{\247\042\021VG\262\216\264t\015\006\014\232\236\300\335\360", 8000, "\373Ng\266cw\232\023\340\345\134(\241\223\330\251P*.\251p\023I\216\222\016s\274\2610\2719-QX\017s'\364\367\203[z;\321\275\367N]\016\205\216\032\246\351\013\014\230u:a!\340\344", 64 }, + { "\036-\324\033\321\251\200\377\035C\2173\352\252);\211\025\316\215\375\214w\215", 24, "\300\007\353\005\230\026\313\261\017\376~\245\312\375R\275\336UpX\223\261R\321\012\257\305\361\354\305y\016[P\026\302\367\203\210\222\320\267\341A\374\323Lk\237\360\277\303\226v\214\362\372\303\363\2325\032Y\216", 8000, "G\277\034+\204mQ\037Jh\3735M\226yb\271T\333\216\320\233+\3414.\010\243\335\030vR\223r*\272O\263\222\310\204\366\266)\037\012o\344\333#\027\260\037\300F\010f\336\236\236\367\203\213\222", 64 }, + { "\266c\307\213\340;\202\254\364tO\370\023\221\332\006w3Q\352d\224\000a", 24, "p\035\261\247\274*,[\341\236\263\237,\272\361\301\232\301w\203\023\024}\265]\313E\203g\364\247o\005\134Az_\007G\007\010\220;\326RR\216\262\025\200\255\262>\330\321\276\316\331\356\310\334(\241e\345D\263\330Gx\324\325", 8000, "\253h\230\377\267\373 \214\322-\273\273~\336\356\177\024\205\277\240\277[\227\023\332\316\315\374\000\272\351\357Z\011\021\300\377\371\376o\223\336\235\312\021U\330\257mz\250N\206\210jB\134m%\276/o\357\354", 64 }, + { "\245\221f\320]\012k\303\031\336Wr\336'kl%\250\3559=\266P\274", 24, "\243 \351Hp\230\003\351", 9000, "Z0\012\276\353\351\232\246\223\035\333\243S\367\365\272\376;\035\314\004HG\030\213\275yU\355\005'\341\134\002O\014\310\134\21217\020\011\317\311\032\031\317\355/=h\201N\305\243\232\300\354\342\005\206\216\200", 64 }, + { "K\213x;{\306\322N-=\201\352v\366\255\013\005\012\221\2142\336\014\300", 24, "\200>\242~\026\241\226\204\221\351\213\303\223\237*\345", 9000, "\273\325T\251\032q\370\2077\310\220FF9e\204\342\226\374\247BP\370_\273\024%\314r/Y\270\231\343\323\353A{r\334\013$\315\224-\226\272\276\244x\337\220d*H\021G\307\271\347\251\304\360a", 64 }, + { "X8\022-Z\303\263\357\3236\371-\322\352\212}\226xVF\200KH\271", 24, "\352\321\241\333\217\016\012\344\245\240\216\017-\367\340\324\260i/\320\377{$Z", 9000, "\363\313A;\203\243u\267\276\002\327\036\2234\323\217o(k\372\333\023\240\221\300\254\2677\234\2040\300\350uv\327\371\262\215\272x'\213\274\010\021\034|\352\3338\353\273\027\272\265\376n\134\210r\300\006\247", 64 }, + { "\335y\005\355Q\326\204\360\222$g\356s\374o\200W\011\220\001\247\025'u", 24, "\035*\242\310`G,\244Q\372\256\301\305p\034\271)t4bW\2076\225\177y\335\322\317\245\256&", 9000, "f\326\017\227\016\302R\363\324\314\010\271\320U\341Y\222\370\265\277z\370\313\303TA\334b\371\226\254\264pq\336^D\330\134Q/n\324\320,`ay8\203-\035\223\351\301%3\032\355\217<\233\256\236", 64 }, + { " \250t\357\202 ;\3730`p\201\373k+r]\354;\370\244\030p?", 24, "\363\217\315\313~\351\231+$\215\216\362W\26569\223\027\300<\252\336=?\320\015t\333\004\265\316$'Z\010\337\032\300\356o", 9000, "\013\263\374\335\225\200S$\237\251\312#@\227@iE\373\364tpE_\342\203\204\364q\350\333\215\237\345\262n\217X\023\020`\257\327\257\236a\273\007\271\020\213`9\363:\011\240\014\257u\013B\302\365Z", 64 }, + { "\037\211\342J\233OL\256\313,\272\317E\355__\006\211\354\343)a\326\366", 24, "\3069v\303-\210\007`\270\242\024-\010\203d\242\210\250\347g\031\343\265}\035\317WY\2600n\342\263\317\300\010\007A\023\313\311\320\361Y\266\206\326\256", 9000, "\037\232\322\324l|\277\265I9\377\203-F\026`\202\206;f\256-6\312\374b\0152\016@p\017\374*\250\213\255i|\274.\326\364y\336}@\252\012\377D\202:LL\274'\010\222\304\265\360\324V", 64 }, + { ";I\027SS_\355\250\257M\025\034\252\332C*}=A{S\012\267\020", 24, "h\324z\036\2161^\373N\027iO\210.\344\361\370\213\300\274\204!q6\277rja\216tk\243\371#\353\201\272t\312j\206+L\005*fh\033?B\323K\213\300u\310", 9000, "\323\004\241\010\242'?&\207\347n\2659\262c\327\356\373Af{\363k\244u\315\271\257\215\002&#\350\244\253\345\004\362\245\341!\370\367\235L\324t\325V\232i\261\177\3241\010~\310\347z:\263\177\211", 64 }, + { "\331\363[@JRZ\206\223\334\330\027\234\035\3774\273l\316\322]\310\212`", 24, "\250\0109m\246\376;\177\2612T<\274\327\2363\344\324U\343\343\340\206%;\347()\364\322}?\376\214?\246\361\005#\273\020r\200\260\3608\335\217\017\202\212F7\202\325\353\323\367\305\034M\033\303{", 9000, "\205\373\010\365Z\241;\3701a\253D\025\351\374\254eX\244\037?u\372f\346\231g-t\274\325h\030\365X\363\322N\011@\270#\027\212\271\307\221\302\275(\033{\221\270^\264ku\017H\367H\201\002", 64 }, + { ".\354\201\342\256\244\227\276\215j(\026Va\3359\206l\377\020\253\376vu", 24, "\014\346\240i\217\206\263\300Aq\336\242;,,\240\035-\253\3070\367B\352\325\042\366\351\013\200\134\372\245\227u\233B\212\016\244.\021\362!\214\221\016%\224A\231\004f/\346\343|\007\3014K\334\015\2660\302\332\243\330\331\277\225", 9000, "?\341\377#\006\027\300O\217\020\267]\3708K\301b\177Flug\301\212T{\304\255>\260\357\266\2368\336^\134\326\335\0268\357\214\230R&&\372\223\315\212\374\341\320\234\224\203\017\310f\254\017\365\371", 64 }, + { "\035Uw\245\207fy\341\213Cf\313\250\356\333#\365\330\025\214V\365V\315C\301\312A;\265\324\333", 32, "\237\306\371M\211\275\020}", 100, "\277\325\220\301\016\372\256@NS\004\207\201\3778`\215_\211w%.\337\374\353\367\220Z\272\373\326]\275\224,^\036\311a\206\211\260\005\317U\0154\001\237\273\305\316\033uu\251Q\213z\351x\036\243\265", 64 }, + { "I\333\366\014@\0225Jgoz\373\270\002\020\037(\012\177V$\232\250(\264;\320\371!\324p\235", 32, "p\340\214\234\324\205\224\324\020h\221\357Ej\330J", 100, "\317]\000c\226\304\271\261\023h\365\3636ZV\016\353\356\222y4 \340\013\223\223\301\356<\004\234+\300\201V\230\370\375z(\177m\364\306\351\231s\254\360\227T\351ebLA\316\207\011\273\353n\323c", 64 }, + { "\342\206\301N\363g\353|\226Wd\356\240\3630,z\343\225\024\031\252a\275Jg\337\361\000\224_\273", 32, "F\342{{\365w\331/Pi,}$\303\260\344\265,\032\134r\362s?", 100, "A_o\223\300\360\016\264Z\223&\300D\2500\310\316U\347\004/\226\364\336\353\034\217\011](\237r\356hd\245\205k\037\252\042/n\241'eZ\316\310K\233\017{\247\234\303/\205,J\373l\362.", 64 }, + { "k\007z\262\2607\030\372\326\240\273\317\332\2406\031\203\014\211KOT\330H\001\356@\360:6\310\336", 32, "\301\261#\301\224\212~\323\326\237\037\202\036N\342\034\323\034\332\245s\002&n\035\265)kU\314+\244", 100, ":\276\200\342\261\1345\243N\265\304\334\375\364\323\371\304\213KB\336\372i$5\205\344\313\012.X\273\021\306n\222\025\224\207\321\365\265\333\304\363\225C\256Yf$\235\340d\026\027\207\216\267\006\361\030\353@", 64 }, + { "\212nj\377V\332\013\370O\246\366+\370\264\321V\252\246\341\232\000\250t\341\241y\217\2764\213\234\203", 32, "\210\370\011\356\265\343X\235\3101\255m],h\253[\347{\134B\360x\215\222\324\275=\212}\363\247\326\004m\034\003C\241t", 100, "pc\205\224\356\344\247b\310\251\222\224\357\315\277]\000\272/\303T'\371\336\221u\370\355*\264\226~L\357\004\237\345\215\236\224\310n\032n\345\357\347\204\231\2543\020\234\032\042'\014\361,o\134\305\2233", 64 }, + { "\227\222\262P\202\346\315\316\216#\250\032\346\007U\375-\317j\020<\220F\344\215X\234\004\374uM#", 32, "\215\215\254\311\351\001\253\313\331\364\304\315\032\276r6(\261\325\224\346 d\357\257\013\240T%\314\305\270\200\350\204\343\276\371\021\011\206\221(\310!+\034)", 100, "1W\302\356\244\310\375,&oW\334\355\230ipU/\026\236\352\250X\010p\335c$\032V=\375\316\037T&ja1{\225\262\177\313M\360Q\313\220\177M\307/.6\206\333\256@<[\331x\212", 64 }, + { "\016j\376}|\201\341\346\214\014}\023\353||\360K`\336\205\261\336\015J\243MP\341-Z\016\224", 32, "\013\350b=%\356\202\247\222\201\3362\222gr\331Lf\201\340=\365\002?>\011h\246\306C\361\274\306mK\002\005Z\230\267\372\0364\342\254<\032'\215FR\231\210re\035", 100, "Fr\342\330}\351*D4\314\003G\366\270z\016\345\233\241\331\225j\262\324\362o\016\306\205\272\333J\255\350G\001\365\225\2548c\202\036\275\353\375-\031\032\023m\220u\337\236\265f\357\033O\341\332\235\246", 64 }, + { "\037h\035C\201\200\227\347\245\205a\334g\343\330F\330\267\276\254\350\234=\317$\220e_?7\014\020", 32, "\363\34664\0316\003!\264\262\016C\225\026-\230(\363\007(R\347\013\014\012\304\244S\032\367\203\336x\251^\365\200\004G\354Vv\236\277S_2\363\260MU+\240\263p[\274\357\343\227\264TN\244", 100, "=\304\257c\200^\221\207\253\275\301\300\245\370\303\326Lt\026\235\337\334K\026B/&\0273\352q\024Pf\377\305\326\015\353\217~:\223bxyC\036/\021\134@\324,\337@O\024\356\252\352\314\001w", 64 }, + { "\350B\315\204\370D;A\224\200\004{,\202\302Ba\310=\214\012U\002\007\265h\007\262ou\251f\372\337\227\012\310\357\277\346\321\351\236?\310\303.\263\377`", 64 }, + { "\372\252\370u<\365\355\222\214g\324\027\302\020\214\357\013;\334A\042\331\227\267c\3001\035\215^\245\316", 32, "8Kt_\242\015\235\007d\013\376\241ml\211Bf\225k\357\226\031\042m", 200, "\214\323$\343\001&.\301\226\220\260R\263\253\207\226\321.\276E\233\267\351BW\230\365sc\273\034\005\342\006\033\2051\227*1\017\216\221\024\276Db\222\212Y\032\017X\333\320\210\177\356U\366\321\256\002\216", 64 }, + { "\203\000$\374>\2270*\334\000*\254(8\020o\311\213!\000\253q\333`r<\201IS\020\217\246", 32, "d\315\226\314\202\321\343\360\351\203\033\343\312\315\245\024x\351\274&\032\034\364m\241}\376}T\253]d", 200, "}1)\202\266\331\2179l!M\277\251\265=\3449\310\220\346\310w\330\210\026\305\251\375*\207\233\276s\277\273\202o\326wes\224\023\3222\223\365\304\375\371K\274\344t+S\314M\217d\320\221I'", 64 }, + { "\2519\015GJ\241\362a*\252\307\253B+\226\204\226\320\276TlW]xHr\244L\354<1\363", 32, "1\207\307\303\232\276\322\277\037}b\023\256\211A\371\333\220\217\342\216\304\011`\3450\270\207\343\365\277\311\301\351p\002\223\011\372\362", 200, "\354\034\351Z\226\347\033\212*\253\011X\355\254\336s\363\365\257]/\202\256c\305\203X>\251\027A\233\357s5\337\022wW\240A2\351\271v'D\376\205[\246\313\361\375\301\251\307c\202\365tf\000\305", 64 }, + { "+we\241*9\342\353\272\365\313\366\241\031\272\231R=\310#\372'\322s\014\253y\372ym\314\260", 32, "\230\327\217\225\203D\015\036\364D'2\042,\001&W\310\326*\375n\255\2530*\323\210~\203\361\234m\375\215\2151\342`\360\353\224\224\2510cW\260", 200, "\017\317\2567\134\357G\343 f\3122\011\377\334R<\365j\230\021_N\230\235\006\245\035\274\037-P\012P\225D\024\021Zy\256o\223\242\030\032Y\024\213z\265\012\374c\325\342\2735\370+\274\360&\020", 64 }, + { "\234T\251\237\350\325\232\3613\253\322p\252\327Y\212\213,\374\326\203\235\037\274\203\2665kO\025\356\012", 32, "\263Bg\330\260$a\243\027$\303M\2553\2347Qm^8\2041\011`\216@\013\011}\302%\352\360\316\352\370\003\220?\321F,\236\360\362F\327\350R@\327\247d\325\272I", 200, "\244\015\341\362\031\363\032!/\221\207\204\325\303\254xl=\267\373\336\357-\322\304o#\314\027Q\015G~\012\211l\314\265\3305T\005\247\324\000\2406vp\372t\352\204u\374O\347\032\010h\277[8\257", 64 }, + { "\257\330\002\330n\015\300\364\026\251V\016\3308\231\221\207m\003\024CL\271\251\364\324r\036\313[u&", 32, "\240\032\225W\314\311S\204\0351\027\177\361\367eO\224\260\214\274\266Yj\275#V\265\32533\244\00139m\356\256\363\312\221\015u\334\036r\205q\300\024\264\002\311\277Z\271\333\006a\326\206M\357\253B", 200, "\270\367\357\237\004\177T\024\266\332\342 g\261\336\024 \035\243\255a\336\2006Uq\217-\362\372\037S\301\314\314\327+n\252\235c\004\042\020f\311\337\177\211S\266]\346\033\210\244\254\377\333\305\314\007\355\311", 64 }, + { "\224!/\213\360\357\220!5,h\322LnTY\025{\334XqV\236qY\026A'`\021\364/", 32, "\247\213\203\223K\362\366\255\020\217\2265\222%\030T\265\313:SW\237Y\346\256\324\012\2358\235\257J\276\034\031a`\337\202\317\352Z\017\323\303 \264\042\016\015\012\253\004\264$i:F+\003\301\266)\270Im\234@\271\014\026\312", 200, "\207\261\336J\2314\262\330\025I\012\316}\354|\357\033t\006\361\326\333\232\031\325y\003K\277\3518\334\301\357\365\234\301.w\230K\256\201\266\350@~\340\222\310\014\376\355Fk\257x\242D\374\037gxU", 64 }, + { "_\005\231\003\225\334q\370mQ\321\252X\031\265=I\224{\343u)\217\201\370J?\364\013\315D\177", 32, "Q,\356e\355p\312\232\311\270O\333\024g\301vY\364\032\351\352Nw\320\247!\241\367\003\006", 64 }, + { "92\200 \224\243\3026Vp\376\270X,\300V\315\265\270$H`\262\324\271\337\320\253\367P\2525", 32, "\360\371\017\302\303~\016~\334\013(|S\017\315\2465\264\227\3060\334\014w6\235C\256I\346\022Z\012O\023\221\262\252\355\237\346\323F\3111>L.", 300, "\274\0251\006\345\321\275[id\316<\370{\026\210\350KjB\324,lS:\345O\263\301\355J\364\346\271/\3262\223j\347\231\245\234\022\241\254h\002\265\234J\275\2521V\325Xg)\215\300VFN", 64 }, + { "\224-3\372E\373y\366q6\375r\201\250\276\235\212\276R\275\347\317\331I\2572\031{k\354Sm", 32, "\335\213\324\011\243y'\302X`\317 \300nj\240\002\355\177\322\003\350\004\250\3265\333L\210\134\354\260\327Qty\007\033\337\350\234\216\340)\230/\321!|\361\2669\246\335\266\360", 300, "\240\270\256\340\027\016\010W\030L\305\234~\362\011C\234\022\267g\207\301\246p\216`\234>\245`0n\231\326\303\032\2464.\215\310\347\236\237i\220 \336i/\275q\315\205\034$Y\307\2310\326\276\252\224", 64 }, + { "\347w?8\316\356\356u\030FA\011cQ0\032\301{\322z\364\007\344\244P\003\312t\271\370\022g", 32, "\270\003\340}\246\274jA\267\033\366Z\275\177\227\331\205%v\323\260-\012\340\015?t\2752'i\302z\212\300\332\317\231\234\220\015\241\035\3523g\025\263\244\042y\340\274\322a\252\005\251\336:\275B\020E", 300, "v7\377au\016Z%\270\215\300\011\237\324S\021\207\014\357<\335-p\306\034\224\362Dn\331cK@Ji\354\217\324p\324\212\310\313Ho.\224\340\031/H\373*\335\033\357\253\037\222\204\234\265\037-", 64 }, + { "\255\002vG\234h\247N\257\033\370\323\353\003Z\352.\361\373!\003\304Z\374R\012\265\255K\273\223\005", 32, "\335'+\321\275\250\200\315\216I\235\253\307\266\310\357G\004\372\301\311\031\352y\004\247\252\277\325$-,\340\352j3\331\042\360S:}>\276\313:%N*\226\273\311\264\363W\217yBLK\225?\343W\020\360\261\347?\267\344\203", 300, "\212\336y\264\270\212\272\345y\231nX\323\343t\236|\334\370\346<\347\322[\013Z\036\200\267\333t\014\3361\347O\210\357\206\031?\314Q!\275\310)%_\325T9\376\204\260\241\223\003\363\334{K\360f", 64 }, + { "\257\324S\205\231\324\023n\317*\321\373\341\307p\302\300A\251\304\014\325\276&p=\307#\341\220\274\000", 32, "\203%ft\036\202Iv", 400, "5\213\375C\213\233\346\347\003\243\243\304\255\035\213xV\007\275\042\013\265\015\231\267\322\021~rZ\271\227~\010 T\277rS^\326\211\305\032]4\023G\224K%x\005\312\3131No\177\230O#\0423", 64 }, + { "\234$\001\017m\223\035\315\265X\360u&\202D&\321\020\216\334\261\236QA\302\004D\367R\302\255\341", 32, "\247\334\314\177\366|5\235\231h\323\217\332\364O\016", 400, ";\015\000\340\014\206\252\307\206\376\314v$\224x/\033g\027S\003\262\270\273bT\036\020\001!\261\003h\314u\003T\014\030\037V\202\005\327\216\324\213\336\020\303Le\3237B\012\374B\310\035\322\320\006\324", 64 }, + { "!B\007Pw^\277\024m\232\342jH\2722\376\326+?\3568\217WT\037\273\037\311\352\240\007\273", 32, "\374Vhd\263\246\255W\226\015\276h\241\253.\274*\012o\003D1\360\021", 400, "\0119\322\250\350\027\226G\260\203 \316\245\027[lV\313\005d6K/\217}L\353\337\273*\250]J~\223\320\266\331\225\222p\262\027\007\227DV\223\340\332\305|\211\303~N\211~\353U\340\324\261\042", 64 }, + { "`m\302\221<\360\306\306)\220)\2751sl\022\216\363\233*\257\000\251^m\006\261\367k\007\355?", 32, "\300_\016\250\265\234\3131\241\030\033L\253F\003B|\272\250\021\242z\235\011c\013\231ty\277M\027", 400, "Rb\332\252\340\0128\177\311\030p\330\0265\337\206\212\217\213\322c\240\370\200\016\370hC\012\026HB\275W\255l\316\354}\225\354M\310A(\307\372_\254\260mY\277\032\375F[{\323P\030\273\321.", 64 }, + { "\020\301r\264\274\330C\264`DH\360>V\370\005\234\013\270\273\223\234\02137\345\275{\042\326\236X", 32, "\274(\277C\310%D\305\035zk\212\360\020\324\324\223\212\234+\312$Y\221\250\006\357\325F>9\212\313n\250\2323\314\343 ", 400, "\276\012\347\225\301\271\344\223V\3001\004\212\033y\001\351\313vU\331\021C\036\360\343!\324\321%\222sh\221\232\313lo\3063\2471\354\335s\256\237.\241\267\323\247\261\340=\272\370c\276\336\134\214>\204", 64 }, + { "H\325\277\243\331\206\273\317R\005\324\030^,\370t\276j\0003\230~\370i\346\363!\223\273\244d\333", 32, "\367\241s\025\264\023%I\355:^XHr\003\230\177\331\245\347\025\372\234i\325\350-_\177\375\323\370#\320\332\320\311\241nED;\134\370:\012\026=", 400, "5\325\243\265{\033-\344\370u\020\1342B\017r\301\277\134+4\016\001+_T\367\354\012\325\311\257\023\200s \262[7jy,@\205\254\364\350\033\212\223\275\236\332o\031\350\026c\366%\377\272\333,", 64 }, + { "\012rD\010t\322\202\251\355\253W<\201J\363\312\206\323\337dN\244V\025zG\324\375\361\207RK", 32, "\207\227\350\201v\263\376\206\215\360\221\3046\022\217\002+\022[0\216G\225bQ)s\204\321,\225\352\256`!\250\333\216\364\217\30602i\017\262\013\352\326\301\250\022\244iLf", 400, "\034\033\242g\257\230{\316\363{U\253\0049\000\257\265\264\030\264\011E\320J1<\274)\201[c\252\323\266\353\222\022Jy\366\301\024\252\024m\272\261\307=\2047\371Ril\222/\230eL\003\325c\276", 64 }, + { "\207xrV%\324mBu\004\356\222\302;`T\347\0040\302\356\324\012\335\015#\324\330\214\335\221\205", 32, "\346)|\356\355q\266\340?\377\220\364\361\022\004\274eTvh>@\231\205\003\3354\234\001\337\260\031\225\3546C0i-\377\3657\021\340\354\225\352@\314\313\336\035\313\014\347\327\320\250\314\276\247#\356`", 400, "\341\017\177\253\177\265\002.\322\235\224\177\244$k\307H\245&fLi\354|u\241^^\0231#\300\317<\316\230\254\0302\264\134\011\016\275\356)\307\374\365\313\324\311\267\246\236\371Sl\366\327\254\333c!", 64 }, + { "\024\201\3045\325ty\362\270\271\253!\260hE4\220W\255\240\277\377\326\320\202\206t\264I\324\215\204", 32, "_\271\352z\017\375Q\326\256`\372g=\274\261c\367\033#\275\356\0242\315<\220[#\023\371\2636\3131\360:\324\375\242 mC\227\315\220\302\006#\204\273\011\252\245\002\026\030&_\241:T\215(\002\372\213\252\331lX\017\370", 400, "\242\304\265c@\230\004N\354\001\252\263\211\037\201\276-]\015g\365\204\323\252\355\272\3165iB\364\357HS\345\253\303+\006\251g]\370\323\204\267\346\031[#`\225\343\272\201\253Rxn\347l-\3050", 64 }, + { "A\316\347I\012\032\011\224\206\310LF}\377\212\035q.\031\206\241Tt\346\252\220(o\223\272\325\257", 32, "\011\025\200\201\221V\177\373", 500, "C\275\213\366A\324\330s\323\322\231\342\353\355F\226Z\253T| f\331\134\377\337K\325 ^[#\275\012\231\325\032\362S\371\027\312\223*\356\222\364\226\042\311\006\260s\360\236\034\253\310\357\365\265h\374\236", 64 }, + { "663\230\3430\362\027D#\210\010\013P\017\224>\020\005\216\272m\006\035\225\355Zly\221\005\223", 32, "\335\374\334\026Y\254Z\211\272\353\306L\354)\251\002", 500, "\022e\035\371\012\311q\335%W\011\312B\377\263=\376\214'\275}K\254\221R\205\321\212'X\221\354\337_e\327\362\372\323\320\311\300b\263\253\273\020\305\302\251\002\266\005|F\245g_?<\361\314P\201", 64 }, + { "\031\236|\263)\012v8?A\033\332\003\363\2020sLS\230&\353B\031\242\010\245=\027\217\037p", 32, "\012]\202\012\2107`\233\373\265r\217\234\273\213|M|\315\357Yue\327", 500, "g,v\236\024\021\267gL{\262\341\213\346\356B\250a\361\354\276\267-\313\201d\211[\001bu\314`T\036\134\212\022\330o\366_\254\3731\354\024Z\300\272\250>%Y&Y\354v\271K<\316\246H", 64 }, + { "\301\031\014\272\325+ \361B\361\360\204\343A\230\220l\221\017\337\250\316\134T\351\211\037eO\305.x", 32, "J\244-\214\267\363s8\302\242\237\204\351\274q\204\3478\227z\263\311u\312~\336\317\250\241\341\206q", 500, "\316\205\233\374\320\350\232\001\355\277E\227\230:\372q\230\024\373y\356\264\306F3\2551\320\246\275\025\036\206{\323\264\272f\276\330\1778\262?\235\204\363\363\261w\030\251\242\347}\002\305\223|)\340{\264\257", 64 }, + { "\364wG\247F\300\250\203\364rB\337\311\272Td\221\207\034\251\303\265\217\014\273P\034\377\342\254\363\037", 32, "\361\134\360\257\305\010\030w\345\030Y\244\236\002ge\324\326\340\276\022\362\335\353\366\362\205\307\020A\232\274\034\240\366\274\310C\242v", 500, "\260\311x\272\213L,\223\333U\363\022\355\366?\231Fr\227\025\253\321\203\025\013M(\033\300\302\226\256\272\344\370\217\034\256o\376\325[\004\035\007\004M\220\005\334y\234O\367\334wp\2750'\032y\306T", 64 }, + { "t\246\251p\322\247`B\337\225i\007\362\317\201\023\010\263H]\373\344\226\005\304^@z\226\210>\250", 32, "\315\310T\325\200ys9\324G\3320\034J\376\024\366\365\310\351\350\221\362\251u\372\334xiUD\205Q\247\206\276\232\204\015\2034\264\347x\303\270\375[", 500, ">F\372\306+\2150\024\263\031\340\226\215d\350\373!\237\272\263\340\362aBZ\354\263N\377!r\351\307\223\257\215\224\322\305\253j\016\201W\303\3706\177%\262$\212\334P\015uwj#\267\037(\254\204", 64 }, + { "\351\275\340\351\264\341\017\033f|\233\331pOK\277)\013\354\312\356\211\344@(\320\321\322,\367Z\212", 32, "\360\340\021bp\367\336\246\352\231\244.\232\370M\257\204\033/v\236\226I\215\033\243}#e\362\030>g\361\242'\334\220\177\003t\353<\370\023f\034\354\177\017\267\013\335\315\350\355", 500, "\001\266i\240c\265i\314\204Y\252!\335\042\373\211\332U\303(\273\304m\261\020l!\360\300\006\376j8\2547E\037+\242yO8\002\377]\256\245Q\032}R\343\311\344H\353/\227\3566\270V\263D", 64 }, + { "\217\025\363\021\024\006\013\355\005N2/\250-+\3704\354M\001t\245\000\233\361j\324:\340\266D\036", 32, "\177\226\351\134a]/i\247`\370\346\243\006Q8\302\211r\021gQb\006\244s\350\273\303\202\220\236\341:\372\026\335_\247f\203\254\303\010\231\035gG\252e\375 \326H\3469\270\014d\215\273{yw", 500, "\270\334>\273H\035}\215\322\350,\353r\212\020\362Hd\033\214\021g}\366\352\346\2725K\022K\217\220z\221n;M5\024\012\310\225Uv\377.\203\260\026W\351\000\263\003\266\017\202\324x\313~/\302", 64 }, + { "\214k\277\217\215\031\022\204\207\011_E\321BRrkE\020\015\375\223\367\346\370\013f2\306R\217\356", 32, "\307\337r\321\366\245\307A\013\015t\352\362\006?\245 \333\334\264f\260N\250\225\341\030J\334`#\263j\275\231WU8\366\203K\223\365X,\266?n(_v\347\303\305|\316\207\013\042\251\233\232\011\324\3714g\010#C\241\336", 500, "\007YI\203\310+\236\336\020\221YU\351\376\232\266DF@Y\006\226\242\256\270r\303eO'\366?+\323\032\225\345\320\015\227rsge\317\260\342jp\231\372\306nG\350Mx/\337f\2757\0121", 64 }, + { "\134\355\220\225k\203\013\271o\037N\364\237\343\352c\336:\335n0\213\247\365K\204A\253\005\205\211=", 32, "u\267\316\322\344I\327a", 600, "\263OO\366\217\232\213i\216se\234\231\2740!\311#\256~2\267\134\025\367\310\020\3541-T\223\227\025\010\276\212c~\265Sf1\200\017MO\002\006\352\374\316}\313\032\317\221\007\322]S\224jl", 64 }, + { "\014\274\263\346f\231?\005\223\3336\036u\301z\361\324\277\351\013\320\244\247_\365\315n\222\345s\023\134", 32, "\336I\3260\310g\341\234\3012\376\205\002\301f\311", 600, "\362\246 u\364\216c\037\232*\037\253\031\335\347\022[\007\256j\303O\225\270\204/\031E\244\253FdC\272\305\233i\343\357\327b\273\241j\243\261\321\255\345\304\365\363\337\277\222(&hL\325\361\011J\266", 64 }, + { "YC\314\276\211\370\003\272\320\325\232?v\203\001\274\2738qt\256\330\365\276Ad)\256$5\353v", 32, "g\346W\016*\233\311\344_\267D\346\261\322>\031\274J\300A:\355\232\330", 600, "\304\2457j\205\3131Z\021oA\234FI\254(O\026\334N\017\324\206\033_C\375\231$\314\270\212\245aV\035+\220GC\264\035@\241\231\0124\235\014<\334j\257d9\355\301(\236\226\210$\235\230", 64 }, + { "\207j\363\010\013\313\273v\326\270\265e\260\033\313\3237\211*tQ\366\215\216J\212\235\324 W\035\033", 32, "\303\374\023\372y\363\307\320(w\236\200H]\371\262\010\006\020\361M\030\346\222\361\216S!bc\3612", 600, "Y\301\037?z\341Y\350_\374@\210\324\274\014f\377\317\023\303lOh\032\253\035\332\217|\375.m\203\031\361^\320v\323^ s\031\347\215Z\012Zj\335\206\363\024:F\310\035\211\255\216\301\203\251M", 64 }, + { "\216PY\256\343yt=H\205\303\011\353\232\340\2630^\021\365\266\004r\001\307wV\251a3k\370", 32, "I\256\322\255atb\305@\004Z\352H\032\205\212\254\215", 32, "vU\273'/j`\351", 700, "\360\255\227x\024|z\360JY\364\273B\240\037+\027\376\346\207?\030A`K\216Ba\366\241^A\030n\027\363\225\301z]Y_e\012\273*0\222\274\242\313Q\003\201\336\034\210T\361\2268E\243\303", 64 }, + { "\352J\265\255z\256\252C\363\273\332\3044\351\214\311\012\2516~\226\355\225/\347T\264\260A\330\377\355", 32, "dv\016\032\340<\207.\260\037\354\234Csm\337", 700, "\360|\337\257\240\016)LW\230]\035T\016\001\256\252Ew\222\016\003{yE\025^A\274\377\346\265\370W\361\336`\352\0118~\241\356BW\272\315\260P\240\273\273v\322.P\322\301\177\033`\317\244\346", 64 }, + { "Q\026o\230\010\276b\336kNrzjJ\021D\302\364'\353'1\202\345\207\203\207\201\034\203\000\257", 32, "lwS\255\204\030M\357jIx\363\301\271q\304!r\215s\356\322\340$", 700, "Fx\263\350\210|\223Thrl\326\215A\366u\2168z\225U\255\314_v\020\017\314\025U\304S\023}N\021\363a\314\267G\2444\205C\200\011^Q\253{\216}[zfQG<\232\242r\314\334", 64 }, + { "Y+b\271\212\342\325\025\343\277\012\223\0121\243d\004\240\342<\205\013f0k\307\254\335\014e\364\261", 32, "\343j4%\254\352o \0116ksr)-\341\366\366P)\021\362\305\305\003T\204\302\317\312\313f", 700, "\016r\343>\207\376\003\177dw\037AN\262\334\017Y\236\374L\253<,\226\027d\317;\250`\216\326\334d\251\355\300i3eV\241Iy\220\001\356\035\364[\303\220:\242|eN\313\354\3039\3309\272", 64 }, + { "\354\261t\321\217\227\3512\321}N\214E\257\251~\006\014\372\200R\017\261\007\021\220\371\370@@P\222", 32, "\277\301+;*+3M\352\373\365\246\304\356\250nf\320-\241\325\244\306\357kXYX\325R/u\326*\277\265<\200\360\270", 700, "\265%\225}\007\257W\255.\306\000\201U>\271\330F*\253DD\317\021aj\374\223`3\367f;\026\010\342f\0150o\232\303\015\377\017\205\357%\277]\277\216m&\236\344\366\313?\373P\214\223\000\324", 64 }, + { "\310F\324\335\367\301A4\252\337\342\331\016\000\241V\341>\237\034C\204\301\276\255e\276q\341\3778\301", 32, "\214\222\134\343\224:\336\012B\323z\310\262\021\205\225\216<\313|\227L\267\024^s\316\257\014\2259\261\371tB\242\373\366\232\374\353\336[\343\026k\307\256", 700, "u:_q\370\012\235@\315X|\367\377C\217\353(\3051a\251\001\003\226\205\342\227\212\306\337$\274\201\212P\315\017\221\347\006\021\230\354\266\200.v\213\361'\320\227\331Wi\034\374\346)\332\273O\372\225", 64 }, + { "o\210\323\375q@\013U\011)\020\252TE\206\233\306\2058\324\371\354P\374?\212\235e;r\207\261", 32, "U[{7\230\215\213\276\344\336\223\322,P\214\360\205\007\202\276e\005\025H\2048\212\247Vq\232q\303\272r\273\001=\201\261\265I\311\266\323\206\203\207J\212\323\200A\375!\276", 700, "\211B\011\227\272\0275k\016\015\266\202B\0301\223\226@\037\005\377H#\302~B\020|\002\226\015\242C\342\273T\306\245\376\307\320I\301f\021f\316[_Q\356\210M!\271m\011p\027\361x\316\353]", 64 }, + { "\033\310\253\302A\013u\205\252\020.\233;\372vs\243\275\351 \015G\220l);\265\245\362c0[", 32, "\306\233y\253,\303\222I\343\335\211\242\243\026\320\253\177\211x\215\033\234\177*\333\343~\215\364\333t\326\005\240\256\300\362\015\022\344\212+)\237\277k\354;FFL\323\373\2342\022\001\254S\353\265\253\323\363", 700, "(#\342K\312\320\243\035\234y\366\000\333\023\256\305\042\361u\035\026\201?\252}Y\015=\203\332\235;&\344\027\235f\353\252\235\257Z\042k\377:\346\365l\236\335\035\274X\237WL\342\237U.y\003H", 64 }, + { "\003!:\341;,\031hr\233W\265|O\015!eO\352\272\355\210\304\360\3318q\004pw)\364", 32, "\317\243\314\370\315\317\025\017\002\273\020\344\354\222^\007\217\245\336\362\002\307c\207\376\236[\373`\257\226\332\025\202\246\010\230>\311|#\273\134\322A\364y\354V\021*=\344\326jb_:Z\221\214\203\011\277h\042v\212\211\241\303r", 700, "\252'\212\362^\0326\2114\216J#\367z\024KZIf{~\375\345C\302\307\236\030\002\262\346\012\033\317\272\230\244\320\220\272\242*\021\327\240>k`\222\263DT\231\204';\301i\027.\302\223\320\236", 64 }, + { "\321\334^\2313\347D\003\200\003RyA\002\241\321b\264d\337k]\005\260\265\226\001\017\3361$\341", 32, "6\327\246\342\376\260\013\303", 800, "\304\350\334c\025Q\240R\263\243M\320\011D\351\230\375\257Q\134\346V\303\267i\362\221\277?\323\363\207?`Qx\023\356H*wm\032\343F\017\304\033\327\204\242\2064^\214\204n3\000oqF3\347", 64 }, + { "<\204\330om\325\200\322\261\262\343\010\364z\017\317\223\366\313\311'\263\344V\270\134\2008\005'\267K", 32, "\015<\014\200\270\270\134\036\277\352\025\350Gk,\301", 800, "\331[p+\273\317\247\205\026\353\262\311\226D0Q\273U\014\366Rc\371\346>\255\206Z\253\260\267\226\200\321\357\134\3309\002X\014\015\241Wu2Y2$\331\265M\267\377\262\255r\252-\021d\201\341\217", 64 }, + { "\206\362\247\200tY~\344\264,\2113{Myk\366\370\3025\310_\343g6 \261nK ~\310", 32, "\323\372Uv{\243\026\035\350\261\323(B\257.\334v\024K\016\334\227\034\266", 800, "]\275\033\351\007\357\036\375\264\375$\360\322{\213Jaxg\027\21729\251\357\274\246\222\267K\271\351\237\321o\2451\035\310\2423\267|\272~\254\222\030\356c\003\240\337\373\231\033\270\340\277\240\3505V`", 64 }, + { "y\207\206\361\236\374\200\304St\364l\263z\244\375\270!\355\334\370\205\372(\027#\320!xij\313\314", 64 }, + { "\200\364\370;\271\323\015f\203%k\217\262E?*\305\243\211S\370\010fV\255\271IA\312sL\303", 32, "P'\305'\353+.\324[\364\241]\231\231_\215\357\004\345\322\2315\250F\335I\3471u\026\325{\204\241l\235\365\233\357x", 800, "\226v\235\300y\206\023\337\027\266B+1\377\312\214/\027\343m~\036\361\222R\024}\337S$\003\001\330\317cW\200iKJ\362sy\227\307\2670S\341;\252dE\343\217\375\270\206\373,1\020\352\312", 64 }, + { "ZN\344\3253\000'\217\224\223\206\257\3662\321\235j\204K\236\264'\312\030\327\276*\363\001q\272\223", 32, "\246\017~\226\231#gE\374\224\224E\374d\367\301\027\336XL\242+-\247\227\020F\215e\354\020i\272\214\271F>v\030\230t\007n\263\301\275\231\214", 800, "\332\003m>\274\2375.p0[\0234\037\245\256\227\2617%2\374u/\201,\316\324\200\323\225a\242\023c\332\233\211\342\254\011\230\032AV\235`\246PC\222\301\222/\342\354\261\251;\3505\357ey", 64 }, + { "\371\374\236\365\2432\210\021\205\300A[\365\017\207\2611\252\236`\015\031\205\326E\324\010\253\037\312\267\304", 32, "e\316\2516%\025\333\014\300QA\220O\343\366\001J5\251\353\300\262\262A\2748-R\025\027\263\227z\231E}Z\207\017\250\365\030\001\344\231\376\002j!\375\317\206 \347\3046", 800, "S]:v\220\373\206M\244y$\240\260>\030q\335+\206\205\305\361\251\326\0039\332.\034X\250x\004O\016\221\022\027\001\022\221,r\377F\262M\307=\033\042\341\312\014/\024v\224\265\200R\363\223|\360\235\200qp\225$o\201\020\2500\375\024^\217d\347*\355\257\211L \007", 64 }, + { "\206\307\0424\261\034\255\242\033\233\205VS*\003W8\226n\302\042\263\366YL\343\033\256'R\007\331", 32, "\035\241\217\002\364\341\305\313Cu\347@)\020\376\336\372\375\257Y3\202\237\266\365)J\270\351\265\310\212v$\201\207_@u\013\301\177j94\202\304k\345W_\324\310z\215_\304\2554U\236\245\314\330\313r\271\001\335\0075\322", 800, "\237\225\217\301\200\264\242I\240Z}\303\365n\227ps\365\302\013U3\373\311\273`KQ\354\360\335\212p\227\245h\332\225\374\375\374\300\261#[\240\246y\212\013\332/\342\212ns\243'\243\036\023\375\002[", 64 }, + { "d\375\042\033\372\337\277O4\004\270\037G|\234oY\032\214\211|6\374\374\207\221\205\261Z\034h\362", 32, "\332jcz)%\345\206", 900, "\312\233\266M|)\265Y\277UY\323MYj\034\203\011\353\215\361\247:(/o\270\321\362\034&\302$\2402\277\260\262\371\231\030\204\373\230;\276\371\000\323\302\025\314\027\205\035\2404\257]Kyl\363\203", 64 }, + { "\272\211\350\227\343N9\013\232\254RC\003\362)-M\324)\211\002\343l\331\300\177`\255\373\017r[", 32, "O[\2002X\323wW\374\204vg\355\270\003t", 900, "\243FM\260\206\333G\331\341\347\337\336\001;rr\306\343\211\360\272'g\207>'\224\334\2664nLA\311\221\321\030\024\015\036\246[\224\364P\270\223q\221QN\254\272+]\246G\337z@\211FQ~", 64 }, + { "x\357\024\247\310&1j\252\035r\024\301\217\241\012\336\300[\342\201\312\335<\307y(\273\321Wp\323", 32, "u#j\303\340\326h\242\367\023&\377\334M\201\202Y\342F\205\241\357\220\036", 900, "1\343\316\341e\365\233Z\355\313\013\021\302@\027\274\223\342\331\367\343z\353R\276r [\273\344\332~\015\311\255\324\325\014i\266dH\357s\3040\304\002\355\257\274\022\212\346\27511\300\272\215\210m\042|", 64 }, + { "Y}\011\134e\265|\3432\274gZi\334\340\320\011E\360\353\033\374\373\004\023n\025Z\325j\036\003", 32, "~\034V#\3239\346\017\020m\212/\203\370\372'\341\005\021\246\304\341v\352\275\224\036M\313S\211\257", 900, "\377\374\030KE\325Clh$K|\350#Ns\267X\3442\031%\270\012\024\17744_P\317Y\244\316s[\240\312\347F\305Q\322\021\013D\350\022V\014\2677\017q\306\361\222\260\306\037\257\236\010\263", 64 }, + { "\301\271z:r\325\332&s\200|W\361\220\270V\327\337\376\266Q\343/Z\224\245\021\226f\012\227\321", 32, "\1342m}<\220\234r\367W?\235p\234k\216.Z\260Q\304\212u\006\323\317\3103\300&@\257\354\276\245\311_9\004\252", 900, "\351\010\311ad_\347\271\204\243\007\377\311\236C\027,\215e\200\030\024=:B\253fp,1C\221\311d\214l \317T\027\376\030\320\204o:\362\235h\270\366\353\001eJu\004\202\300`\215%\355\201", 64 }, + { "\241\371#\267\251}\342\250k\275/\364dhP\000\340rX\010\006f\241\371\377>>\032\370\265h\253", 32, "\333/\273\006\213P\330\305\304\357\357\324.A!\002\250\210brD\302{\026n\007\350}\327,\371\260\240\322\253Q\243\266\254\037\001fm\233\257Z\315-", 900, "\030{p\375!\357\134*\353\017C%\217C+\225m\005_\206+\004 J:N\370\367\2041o7\241\236\222\261 \313\222\177\340\134\376r;l\224cC\035v?\022\316\321D \372K\214\317\216A>", 64 }, + { "\014b\217 (,\360\311\026\343\360yQ\215\363?\030\3467f\352\251%4\361Pt\037\261\371\014b", 32, "\032\257\353]'\003&l`\315\012\274\356L\346\001\255\303\3150{?/K\270\305\346\2311$O\244C--\351\004\206n\327S\217[\134\274c\372P}\243\355A\354\266\207\006", 900, "\007t\223\367\034\352H\312\205\030\314|\272\240\360\362\006\002(@\261\224\004\225\204Q,{qhp\240\271S\340B\015C\376f/\370B&Gf\024\022\312M\262O\316\177 \325i>\274\377E&\220\220", 64 }, + { "=`\230\314\234r\206\304\134\367\363!\023\2774\301\323\026\011\366\265\265/(\343!\007\335\242\214P\012", 32, "e\024\351\002y\227a\260\331\026\213Y\267\251\310*\230\030W\214p\255\230u\001j\3704\315\375MSX\030c\336\306w\325\346\262\2640\255\2465\253\3334\337Nex\234\334\216\316\314|-\257\017\022(", 900, "t\221\347C\244\016:\216QD[$r\347\227\325\256\343P\203.\012\277\3216N\241\351!\037\211\322U\017h\021\042\352\030\221=\317r\306 \367G\372\270\214\004\000\207n1\3646\344\034\371R\215K\305", 64 }, + { "\355\361\227|\310\247\256\014p\026\017\037?\364\277\355\314\030\236\306\032\306\240\321%\262\256\265\244Y\216\252", 32, "\263\354<\350\215\312\311\366\242xX'\234\312}f$>Ez\327\023x\320\355\331'\372uF\231\257\251^\034\364d\230\022\304\245\322\261>\325,\273\357\303\311N\3374~\323Q\014\342b\342\025\226y\307\245\026\231Q\266dm\215", 900, "\325\361\300\010\312\311\037\017Mh\310]\254@NC\324\205+Y6\027\362'b`x\353\007\211\035\264b\005\225|&\321AH+W\007z\377#\361\274\265:\371=\257\225\361ec]\315\203Jv\203R", 64 }, + { "\242\341U\355j\004k\356\204\330\351ufb\327\337\357A\223\341\233\3668\220\352\134\247\202\373\006\310\323", 32, "]\331\327\016\205\272\246\206", 1000, "?\230\007\216(\272\307M\015J\344W\242_\233\230\2201\243iM\254\362+\254\333\3658I'\335\241\377\2061\013d\212T<\327\201\257*U=\014\226\321\251\227y\370y\016\216=C\363$j\272\241\365", 64 }, + { "\017\376\364^4\254p\016=\353\344\366\352\006\227)\030\357\004\263R\373\177#\211 \335V*[\344\257", 32, "\3722\017\275\232\262\323fcgiW\232\224\262f", 1000, "\373P\274\357\005\026n\3021wkI\355\325\026\376\021", 64 }, + { "\042t\014\315\227K\273\323\237\220!\270\0172O?\2645\030\265J\325F\343!\241\344\323\301\241\024\272", 32, "\316\027A>\233\225\212m0\037Z\277d-f\017\200\303z\334Y@\261\230\254XT\227P\301\260\014\242\266\244\262f\334\365\324", 1000, "q2\353W\236\364\266\204\340G2\337\224;\220\223/|\2132\202%\215+\362\023\340>\210\360]\217n\374'\353-\010\217\000\212U\335,\012*_\325\001\370\037\322\007uCu\037\331\242\212eb\343\035", 64 }, + { "|{v\001\223\245`d\005\263$\321\225f\344\340\010,\305\273\025$\370\275<\315\373j\304\226\350\233", 32, "\224\263<\367\330\351A*\260\300\235\337))y\221\367\306\373G\324\266\227\372\027g\013OH\321f\326\025\333\334|\013\002e\005\025\205\004j\212\206\244\216", 1000, "\341\371\031\340\344\313\002M\255\020I\333\324\265\242ra\371mhr\017\214\366\274\337\200l\336R\305\276F\024\264\035:'Hg\231\245\217\350\306\251\376\032\310\010\311\250\013\354Tr\017c\367\241\300\031h\211", 64 }, + { "\303\341\317.\250\305\257\235F\324\011OjZ2\312s\224st\2041KS\233H\022gm\354\276<", 32, "%\264\212\004p\266<\314:\376\324\250\341\3151\251 F~\223\267\032\252\245\370\001[\257~v\363\242\253\240g\042j\306\233\336\312\042\345\257:\266Rc?\011$\344\313\267t|", 1000, ">a>\272\354,h\337\205\232\204Z\212\230\257e\307D\322\263\2539,\264\271!\034Rg=\201\334~\201\252@etE\326\241Q3f\205\314cc\237\216\373\272>,\0112\010\273 \307\332z\223\274", 64 }, + { "\211\211\354\215f\332\255Z\340\337P\031\217G\266c\200J\323\042\361\250[\210\022\007R\341A\017xD", 32, "\256\303\241\352Ij\317\253XL\262\221\031\375S\343\275\225\301\033\356\264\332'\014\004\326\230\036\275\002\325\260\301-2\223\247\0041m\251\210a\356\251\274\324\204\361AP,\312\025\247^\363t[\350\223WY", 1000, "\311\035\334V-zy\017\370\244\203\300W_f\2177\002\237T;\301\261\221G[S.\037\2030`1\321\010\300(b~\371\217\034\301\276\250\023\2462\342\374\332`\372\204x\035\247\012\237ju\275\224\362", 64 }, + { " \313\304\230\206\234\222pk\244\005\2711u \340 \223\322\345\002w\275\020\324\316\224\325\036r\223;", 32, "\372\344\357\324a\333\254c\215i\177\320\300\242\020\025[\005\3252;b\277&@I\270\015}F.;\242\304!\177\343\012=U\253\253o[qR\371\201n\357\361\330\277\253\346\177^\332\042\322$\201\377\340.IOk\273\363\005w", 1000, "\310\012_\254\372k\220\263\272\361\134l,\345/\371\371\357\237\301>\205\237\237m\036\272~^L\355\0210X\221x\331\0256LD\264(1f\357\014#?w\034\023'\210&\355\261\235\361^\004\277\313\014", 64 }, + { "\373\253'\357\233\227]\260\212\305\037\273`\364\001\032H\177\203\342\012\022\225\2572o`\240\277|\275M", 32, "U7%\340\031!\012%", 2000, "\024\2525\230j}\315\267\244\345e6oY\226\027\347\017\336\134\316\355*\252F,\034\247\267\270'\017\245\201I\2735\205^\205!\205\312\221\352\216\270\274\222\276\011 |-E\301#\240ifGA\375\210", 64 }, + { "\207K/>\226\027\221N{?\037s\003\323&S\243\355$R\361\254Q\026R9\2540\231Zx\374", 32, "\314\260\226\231\312\037\245u\230\345]T&\037>\375", 2000, "\010\267\374\351\370\303s,\323\030N\244\353\252e\275\205\253\206TL\340\3205E\004\253\204f\220\362\330\231\037?\204'D\274+\367\363\316\340\340x:\230\254\313U\016\347\023|G?\363\017\037M\177l\321", 64 }, + { "\215\3425\215\223\0224\311Y\251\213\337\240nw\233\343\320\335\244U!\300\023\023\347\012w1\222\011\263", 32, "\010uJ\261\030JR\357vV\257Wd\012\004i\257\351\360\266\303\200/\256", 2000, "\211\243QK\231\376\321\212\322\350\321*\245~\311+6S\013E$\351\217\227\224\217B\006\230\212\251L\264\245.ZJ\350$!u\000Q]\021}`\022\370U\364\224\215\274%\353\333Ys\177*\265#\314", 64 }, + { "O\2649\000z2\177w\372mk@\345\277\270$\231\330\246\001\334\350\271-\264\343\307\342Nw\231\221", 32, "\201VZ\223\246\217\224\263\241AO\325\367\251\031\322\221\200g\354BM\2600\340x\276\307\246zIT", 2000, "\316\341$\022\261\303\322yZh\227\205\310(\347\233\326g\031\220>\011\226.\352J\242\311\274\247\211\010\355\336\220\214,\2440\214\311\241\253I\042^\257\361\336\241\360\177UB\356G^\325\203A\3040,\042", 64 }, + { "\177\016\252\362g\010?|\0168\364*!(\042\343\015]m\253>\012\012/\3471\205\015\321\014jh", 32, "%$\263U\023\275\273\230SxJ\363o\373\241JK\234\252<)\207\026\302\267\215\016C\357\014V(\021J\336pq%\360\214", 2000, "\301\365\314\263\264K\025\305[161\030\015\211\207\0358h\020\231\042\351\031\323\253wC\320\330\351\205Nm\216\024\033\201e\324\037\354\006Z\331\305O\335\272\333\233\243\262\271b\023/\342\320l\177\311L\000", 64 }, + { "L\027CQ\252\262\232\343\237\205\245\344C\014F4\134\210\345\213G\256.~;\240\252<\332\202(\032", 32, "\313\376\250X\267T\235\320\236T\242[\255'\0117\207\332 \2130\242kz\246}\336\321\022_\316\377\323}\340_H.\001\337\327\205\372q\022\355\013m", 2000, "\302\002\343\242\245\365L\016\366\205WD\242\015\330\375\300\357\357\020\206\344j\237\022\002\036\247\265>\350\036\212\027\242\325\2135a\320\312\344\330O\366\335=h\253\330b\216\221\017\031\026\027\233 \260\254\204\345#", 64 }, + { "\013\207\005\265\235\252\020\354d\367\342\006\341\2004\311\021l\000\256\246\241\342v\342\026B\225\333&\214L", 32, "xW\265\230\242\345\002d\230\216\315\347!\232\272\3751J7\3271\011;-\3309:\207\374\204\244\203\244\333\026\011\344\366\134\364j\324\004y4\347^\005\313\202)_\030\217\236\355", 2000, "F<\236\376\203\266\204\306\361\367/\001:\220\350a\366\035\326\374\332\244\304`\202\367oA\335\331\013\330\204\361\353$\347\206\345\231\005\231l\215\013L\351\302\267]\244\006\335\374G\342\311)\245q\301B_I", 64 }, + { "\241\021vc\346\211\270V\212A\302t8\233G\232&c\001_\263\211k\232~\241\001\305z;}\204\371F<\200\350\260%E\036\374\013Nu\200\242>\321\234\316Y\232\375\220\036\243C\250)N\375\341\3775\336\357@O\232\304\225gH\351\270\316\003V\364\003\206;\352.\320", 2000, "\360\350\222\354\320\364\042y\245\343W\2413\024\250\221\377\245\325GH\277ZAu\274\026\265\275\231\304\2722.\010np\217\302f#\346Z\347]@\216a\302\177F\233k?\326\337x\301}\230ek\300\332", 64 }, + { "\030\344U\2107\244N\237\230d\255\376\324\213\343l\224\201\325\027Xb\201sH\200\245\263\244\035\005\300", 32, "]\371\274\014\217\177([--\347Z{\021\350\330\301\134\255n/&@N/\177?\2006\2026\360\241'\3025\215\362\253\322\027\034\201mA\353>3\247\366d\327\007g\335Z\367|L\026\234\301\340\016\325\204\261\244i\036\016*", 2000, "\225q\223-\325\221\257:\351t\266\032n\250\357\002\350\003:\020\242\302\236\311\245zi(\333\010B.\311\256>\265Uue7B\030-\243((%\332\362\303D\325\242\314\243\321g\264\201\331\001@\207{", 64 }, + { ".\356\217\343\212\004\001a\027\213\207[,\042\231Xj\221\315\276HB\037F+\372B\251|\265t\026", 32, "\330R]2\031E\351U", 3000, "Z\271\372U\365\246\007\342\272\236\251\271%V\347\027Q\303\237\356\304\242\220\231\026GJ\011\031R>\252Y\223\014\017]\311\365\265>8\370\211\323\014\2027\225\304\030\273\000[Jj\204\015\025c\211\302\361\331", 64 }, + { "\333?\003\246\275\035\007?\027Y\354w\012\344f$\3309\030Rf\263\366\306\350]\332\002\221\346/t", 32, "\361A\234}\315\361C\366\227\177h\325\235'\001\205", 3000, "f\367\374\346\006B\013x%\010]\371I]\256F\042\264\334\233#'\013\271|\347\355I?#7\266\257\253\353\027\217\025\276/G\334\020'\271\004>A\033\233WM\237\377S)\347}\2357\252=\277\313", 64 }, + { "\334\276\227$\003\200y\2567l0kC1\3330\310*x>V\273\021\015\305\246=\250\353\361Y\221", 32, "\364\023\034&\371R\363\231\003\342\350\236\0131\333u\266\314\327\266-8\243\374", 3000, "(\004s\333p/\003\201\333\376F\024K\313\004\374\371\310W{\037\313\377J!\304[\303:\3329\340\200E\204\177\212p\235^\221pu~\270\361Jvl\267;W\225\034\311Lm\371Yl\301Q\032f", 64 }, + { "\221\326\310\317\321-OH\334\006\007P\374uz\213\300\226h\231G\2220E\237\235\323\030\235=\316\267", 32, "ZO\241\0178\261\034\025\311\353E=t\353\331\003\364\243}\005\343\364\006\340\024t\341w\310\303\235\035", 3000, "\363Nm\010\373\315G\216_\354\021\200I\242]\014y\026u\301\346?\273/\304\213z\264\231e\322\304\010\217\205\303\204\277.\234\371\22699L\242\342\313\027\210\316\026z\252\215\235\307\347\361\002\306\037D\302", 64 }, + { "\032\370|S\365\270uTK\326O\353r\255\271\034#\327\307\370\242\262\374\266\312\263#\277J\215\251\362", 32, "\301\225\303\340w\312\303}~\011+\261z\216\320\220c\237\250\037\011\253\300%\267\011q\224\266z\271\025m\266\361|\341\374\301\007", 3000, "\364\037VE\343\326\327v\222\042\300\250\272Mr\036\023\270~o\316\314?Z\321\232c\261\374Rq\020~\032\344\333\134\272\223)\035\005Di\205\345\012;\3076\227\205Y/Z\350\016\236\317J\253\323`=", 64 }, + { "\245\223u0\342\000R\223\240\033e\340**\244\254K\302\031\363\177`M\240$\247\361\317Y\220\227\344", 32, "\372U\371\002\134:\304\002\023\314\037x\372\231\375\241\210\360\224_}r\334\302+\372t\2741I6\035\232\226\036\336\012\211\316\260\205\220\3374\316\256m\343", 3000, "\273\361\376/\034`\322Sy\031\333*\033\134U~$b\362\363\236\361$\313H\022\243\203\306\352\314\375\204\347\223S\246\314\230jB,%\241\000\335\237\364I\000\215\266\300DR\211`\322\271\306\026.\215\341", 64 }, + { "\273G\256e\220\336\234\0325]\177\324\012\204\230\031\322\023<\020~;\347J\355\027\244\032\342\304\340t", 32, "A\350>\021x_\311\275\017\322!\315\376\357\177t\236\001~\355\315Tg\344_\012\002j\2454\002 \233\012&\212g\224\221m\242\315\353\250e\322o\004L\005<)\220 \177R", 3000, "S:z\324\320\361s\320>bW\326\0118\026b\316[\021\265\375\273\021\343\031\205u7-.\307+\360W\237\321\236 z_\347H\256q\255\022\242%\2746\032\251B\224\2446^\266\261\177|\272\010\246", 64 }, + { "\367>aQ\260\374\262\260\020\201%\260[M\244G3\337H\200\025g:\002\275@\373H\364Q\030x", 32, "\321~\273\020-L\224;2\342G\223\025\235i {\256\342 =\316e\376\014\215\221\034\252\235\25762\007\210\3158\257(\235\277i\350\272\011\016\231fb\007\243)\307\376\2409\234\011\034\207\262\307\026\230", 3000, "\307\312QT\215\034\320`\314\352\251]\210w&\203\004\2716\352\251\311\311\261\001\220\276\224\301Y\020\241\245\364L\305\335NP#$]\251\023}z\304\351\304?\214\000\354r\323\000\300\220\003\343@Q4\366", 64 }, + { "1\211\332\336\2713\223\3103\310\247]\376\015\275K\036\233\266\036\275\362\211\343\013\312\134b\306v\227\272", 32, "\134\253eO\347\267\226\220n\360+a\374\362a\314\202\304\221oy\275\020\367\201}:Eu\214\303\2002[\2270jFO\245\237<\241\323N\032\200>\314\330\261V\342\364\361S\243\215.H\012gTu\345\212M\026\024q\236\337", 3000, "m\324)\245\253\323\022\134HK\340v\314\270\315)~Y5y\270,T\3453\366\376\360 @\234\362\006\012\216\210\216.\360G\233.\326\363\253\006\031\277q\303&\215O\203\257\214\002\037\223\365\023\022\303\361", 64 }, + { "v\352_\013\314\201C\025V\042\015h\374\375\272=\361\320\337\302i<\264\275H\002\2622\321\3266\265", 32, "\361H\3748\322\242\2249", 4000, "\025\332a\365\371\230\207\270h\260\011d5`\307%\235\311\354\337r\012P\323\005\214\330\202aT\356\202\225(Z1'\237\246\177:I_]@\327\317\332\266E\241\233h$\312q\217\325\256\230L>\353k", 64 }, + { ")2\223N,\364T\011\236\322\2671\214\240\220\306m,Xt\322\025\241\013\276'/\027\022A}\367", 32, "Pv\327\262\275\253WCP\010\004\341,\227\242\263", 4000, "\206\345\207oIg\320\275\200\246~\243\233S\303\330a(\301\367;wh\212\016\243\335/\034\202\201yN\352\200A\261;\226\277\222\230\256\243\342\021\340#\006T7=\324=\013\231\376\255\216\025\251C\224!", 64 }, + { "A\375*|\023?\215\251\2717\204\366\2310\356\004%\206\331\326]\022-\234\372q\243\371\231\314\207W", 32, "\031\003f\276o\314\232\2038@\307#z\312\222\376\007\376\351\346[g\005i", 4000, "\252e\003QJl\010#\235*5+8\210)A\251\250\032<6\003\215\221\364k\211\233\312\225\356\026f\220\254\303H0k\201\2565Adv\236\247Dt\3735](\3508\2602\315\035V\240\247\013\266", 64 }, + { "_\026N\013=\247\000\330\377\233a0!\007H\0054\021\337\027\242\315\361\004\373\360t\216\203\240qa", 32, "<\252\210&-\264*1\312\334\235q\316\011\024-Cm2bX&\356\033\233\207\001&\277t\311\325", 4000, "\002R\002W\3036\276\213w8\007Y\362\377y~#\347\207+\216\225\2272\271Jh9\354*\016\361\2554\233\263\025\353\267\015\026K\016Y\340\340\377\304\015=iz\341-\275q\315Ed2n:~4", 64 }, + { "\217\243/\333S*\205\365\302\330HZ\235\347C\007\003m\364\015,\316\032$\036\274\225\317\010,\244\213", 32, ":\226\370{n\035?\032\006(\257\302\366\036\301\275HI\342\230\303 \230\301\230\226k_2Ur\210=O\3602\253\277s\205", 4000, "\266x72y\026W\037Yu\222\207\244(0K\340\305\233\310s\021\011\275\022\004\213|\210D\002\240S\276\207\000\207v'\206w\271\320\362\302{q\231\355ff\361\374B\022\363\272;\223\316|[\301\217", 64 }, + { "Yf\027I8L\371^\314Y\006*BK\36582A\221\252\030\322\352D_\266ux\377\035\367\023", 32, "\362d\335&o`\242r@\363\2426n}\234\004t\275\213\254\236\020\341\021\304.\042\321\361'o.\002\223[\266\224\233?%\004\337\240\340<\323\267\3039\220u\334\330\242\3239", 4000, "d\315\310\234\260\364\012\230\023\235\2756I\352\305\247_F\260\3602\350\324\2067\353\341-\232\020?\247\302\014\232\253\006S\016\241\320\251\000\022!DA\022\011P\356\372qL\277\263o\303\242\007\347\225\370\331", 64 }, + { "@>\004\006\352\316\314\230\032\255\237\021\276h\037i\032/=^<}}R\313\265\001\270n\267\274\340", 32, "3\245B\276\234\220I\261\336\323\014\353\325?6\360_O/I#\270S\362\331\270\200\360\242Mp\213\361\356;2\316\304\251\227\003\352\327\027\003\271\026\275\230\237\233'\316\003\332j\260\032\014\323\243SO\006", 4000, "_\347Q\374R\016[\274\365~\217(\266\016\364\253\306\365~W\335\223:`Q\301L>\033\344(\253\027\211\372\352.\355\251\233\005\036\225\134\220\034\357'<\031\227\223f\253\240[>\031\344\300+\025\243\365", 64 }, + { "\017\024\253{G\272\276x`\224}\324\216\324W\363\357o\266{Z\347\200\342*s;\3159\036\320]", 32, "/\203\306Y\243\30672\2236\257\335\233\352,W\351R2\004\237n\325y*\3525\371!^r\222\364A\217\311\370\301\3677A#9\212\030q\220r\042\321\031\303\036\003\235\274F\252\134\327XKI\344\370\215\266\316\013\3704\352", 4000, "\216o\275\201\220\001\2209\010\241\307\260\352\274\220\020\004\352`'\3552\372T\204{M\221\202oy\226\223lhIe%\260\325\303\314BX\347\331\316TN\311\332\177\251;W12\006X\376\307\235^\227", 64 }, + { "\375\367\261\310P\032\253\300s\271\362\034Q\000\267\231wh\274[\367N\031\272\313\333Lg\016\233\032\246", 32, "w4\376Oe\334\337(", 5000, "\265\320\254NT0=/r<\341)\226*\376\345\364\004\134\201\024m\020\375Z\216t\212l\313G-\232%\321\272\256\336W$\371\310]m\335\334\242\306\241\367\220\263}F0\216\267\364\341D^\212\251\341", 64 }, + { "\341\3615\215\010Wr\235\353\224\272`%vA\336\2122KT\237t\233\321(\213\316$\340\206\237\001", 32, "\337\362\246Z\225\307J\215c\244\007W\221/m\027", 5000, "z\033/\267\300\001z\320\334\020\034\255m\3321\364d\227\012\247\032\017\370C\031\340$\307TCn\004Y$\017\220\371\274/\350\306\303\002\012,]T\034\301\017\3459\365\252\032\321\316j\231\245\341\322%)", 64 }, + { "\355p\310\241\334\272\230LP\241\235\324\302\312\202\002bm#\375\324\314\266L\212\016\340x\0370\333\304", 32, "\031\3057\204`\205\372\200;\320i\264\027I\007\027\267*-\365K\134\243Y", 5000, "mB\302\302\253l\313x;_y\012{\273N\340\303ohA\210TQ\310\321[lK\015lWL/\252\134iB\224a\265\207+[\016\241\330\005DRam\250\335}\356wZ\006\015\256\226a\216h", 64 }, + { "\240\367\032Y\306a\312*U\314\322\335\022\016\377\213jMmr\244\042\274\257)\267\220\3307\221\033A", 32, "\027\277\033\343S\023\203\300\354nzy\226\254a\307\2146\215\033 p\256\342 \016B1\015C\027\266", 5000, "j=:\035`\342S/}\343\240\311\033N\227\377\327\270|\215\353\241\310\206\042\265\367\206\243\222\315\023a\303\274G\037\245\345\323H`\010\231\344\342\351X\001^r\353\314 &\234\024\002\242\317\021\254\340.", 64 }, + { "\250\277w^\361\217\026b\210\177\306\3461%\252=\266\234A\211\002q\264\357e\232\3257;\036-\362", 32, "\261\363r\305^\275\322\224\3328\261\352\242\275\201O\317\275{\020\263{YD\241%2;\340\352?\366t\300\272h\351W\303+", 5000, "d\364y\350\264o\356\017\320\011\2317\326\027\254\033V\326/\200\276\374\360d\321\265\015\212_x\017\246bE\003\256\337F\265\260X!N\354\031o\216\335O\3278\202\027\222\266\262\356\311]Ok5=m", 64 }, + { "\374;\134\361\232\355\314\370sC\252\275N\372\2732\335\213*\232*\310\352\0312\0047\3758\230\022\010", 32, "\332\205i\265\023\022\002\372\234S\253,W*\303^o\204\316\360\332\353\237[x\030\210\2003eBX\342u\224\363\232Q\262\220\212`$\026l\207\330\302", 5000, "d\021\307\254\221XR\257$\322]9\306}\306aqr\333\224\337M\266\245-\001\2148\203\346\002\032\031ax2\336\230\024W8p\346\310\300!\213\203\241\306|\222\206i.\272\251\026\022O\007\207\262?", 64 }, + { "\204K\335O\134`\227I\204P\241\370G\324\350\313\305\346X\221\312\313S:\371t\341\011\275\327\301W", 32, ";h\002\331bk\375\014\232b:\334\367\341\361h\261\005\266\265\316!$N/i\201\002\272\005\351\212\031<\332Y3A\243\036\303\254\255\317\317\0356\020LD\210\337aU\007\023", 5000, "\002\036\314;\347rW\266\310(9\304\223\015\220\367\334~\3175W\354\233(\372\177n\304)\270\221\352\233\256[\370\320\222\042\202!\265\201\251\262\214m\234N\352\371\314\2724\201\001\272\3643\347\265/d\205", 64 }, + { "I\304\026\242\014M\013\255)\257wq\205\273\337\252\256\2626\233faR\365\262\257\010\010\333@~\322", 32, "\377\235?i\251n\222\2608\250N\304r\353\331\313Byx\236u\212\340\322\243\376y=fv\367\244\303\232A\214\244*p\253\333\134\335\250X\223\320\325R\311\243G\2524\337\344\134I\340E=\253\300\301", 5000, "\335\011\020j[V\242\266q\257^\2139\027XpWl\367G+\224\210\371\320\002\2170\007\223\361s\271\033\374\134\301A\320\234N\357\252:\343\275\025'\012\035]\311/H\341\315\310\303\310}Q\021\375r", 64 }, + { "Dml\351(\305\351#\355\004||\231$h\227j\361\3136\210l\375T\213\315\375\234~dF.", 32, "n\353',\204G\017\242\020\255N\026Io\221\224v$\324I(\246\016\036\035\374[\343\260]\326\021\013ne\371\356\301D\350\030k+\357nGJ\270E\262\035\351R\303\010f\233\246>\326\355|:\2552\003\021\234>dr\313", 5000, "\220\243\001\307\364\032\262\304\372\017\266%r\204;\301!\374\042[+,Z\321\373\020S\014\243s\305\335r\331\350\370\216\277\267\224GT\035\301\030\261\237kge\006\017|z\220\224\274\033\215\201\301\026uJ", 64 }, + { "\270\0170\011\344\012A%\357\323\236(t.v\263l\231\00450?bA\325*?<\251j\256\230", 32, ";\354h\272\035\251\026\346", 6000, "<\220\344\337G\206\302WjF\342\302\323\276\371\3105d\240\376QF\003 VL\024\357\217%\237\331\360g\326\362\224p\322\032\204Y\254\230\227A\2048\201\023AaN\363\264h\347F\222'\232\352\356\042", 64 }, + { "+\2547\326e\016\371\243\360E\373\0228\222sO\203\374\322\204\247\240\320f\227\201\364\371\223\323\216-", 32, "\215L\237\227\342\276aw\036\025\374\246\201\030\010\352", 6000, "oT:^\276\374\027\266\300\375v`Yz\330\206\325[~/\134\364o*hW\371\213\375w&\275\006\011\361\037!j\370\317\337\301\346\234\341\354\225\321\264\305\346iz\313&\324|O\305\317\2629?\022", 64 }, + { "\354\332\023}\256\222\332\241 \362\302\351MG\3479\276\332\334\023\362\271\253\211u\275\200\334/\246\013\244", 32, "\266\243\134H\272\356\332/\011\305Q\357n\371\354\001\020\307\177\333\037\362\315\242", 6000, "\306\231\246\333A\300/\22328l\017\305+\010\037\256\341\202\313pq9'X\264(Z\246m\177\300.\352 \372\20368*\274p\305\033\2251ar\211.\2624,\326B\031\134\335o\033\310\037\2469", 64 }, + { "\327'\333\2626\365\015l\373\244\377\016\314T\205\023\255T\244\217\346\304s\275\370\134o\226\241\000\3653", 32, "\204\340\237\333\347B Zh\352@\2206\262\303\002|\312\203\327\333<\372o\200\035\276G\210S\134Z", 6000, "\334B\327\177g\003$\351\375\134F\266\375\211\212\241\366y\323\375\373_\267\215l[\203\305\370\216\202$p>\241\264\377\032\022\211I\257,:&\317f\245\242w\364*q\037.\347\276\277\275\244\205?\034\317", 64 }, + { "\234>s\026\201USYC\367\314\261\324w\355\264\037\377\236\274\021\3211\006\372\354\201\250o\20011", 32, "'&A<4\356\331\213\213y\222#=_(\361\346\226\350\3564\177\261\024\350\3528 \331\235g?\007\361rYB\003\220}", 6000, "\304\232K\203\301\022\0351\220\354\260\350\311\321\337\023\264\354\256\365\333\215\373\325\201\274\204\216\310=\252y\006I7\250Y\210\204\226N]\036h<\016@\231$\234\134\271\357\307\225\273\331\245\272\2650\357q\203", 64 }, + { "\351\000z&j\354\276\2739+7\300\022\264\327\244\275\345\003\365>\204;\276\217\307)`XP:\345", 32, "\234\365\001{\277}\042\367\222\230\030\327\264\201\016>\241\001\037\336\340z%>\324\032#\352\204\351\212eC\304\027i\205\362\215Sn\226i\215\313\374\210\354", 6000, "?A\017\245L]\214\344\373i?\212\306\252\013Lg\277\015\256\260\001\306C\375\354D\025L\134\337\263\363\025V\336\227\013\237\353>F]_\035\314D\240ES\253\357\210\344\014r\220!\222\220\010\374-\265", 64 }, + { "T\217D\316|\373{}\037\354\234\177S\327\270\016-\231\316RE2\376E\030\245't\005)<\200", 32, "2\316\204\337k\213\260o\273\020-\351q,\220\202]e+\376ci\312\367L'\331\237\035\024\025,|\323\220z\332\211B\314\226\261E:.\002\0238\376\315\320\274.&\233\036", 6000, "\312X.<\3273\237\320\2349\267Rg'\337\230\326~\223\323}\204\010\005\352\035\221\223\244\374\262D;O\2356i0\311\333\360W\203%\321m\037\3220\267\0162\254w\0161\342\320\031u\206\032\370\271", 64 }, + { "D\243\026\222\253]\312\252\020% ^w\024\024\377\312~Q\221\334t\215\377\365#\353\305\340\273\341\364", 32, "r\012Vc\246\013\020\364\221>\227\273DJc\233\2373F\235\001\307G\223\210\260\033\236\361\365J\037K$\372\245\270\370\2402x|\360\033,\002b\307#\305\026\345\2572\325\241\321Sk#\364\035\342\363", 6000, "\342\3053\272\022\221\021F\344AvW~\350\355\314\342|\303\324\315\002U\311\236\315#\2776)\3219\033.T?0\035\264\207\350d\247\247\042w\365\371\262\217\2051\001E}\201\301\034\025\177\016\314\246\312", 64 }, + { ";\370<_m\217w\363\0054hx\333\347:\247\033\337\364\363n\370\042\244\303\014\306G\322\027\323U", 32, "4\331\020,\014\345\314\367~DR7\345\013\2001P\261\273\333\257\306\373\300\033\361\257\256\271\362\302\134\342<\320\301\224\034\034g\033\206\022\005\220N\260\014\207\347\265|\206'Q\323\214\276\305\357\356O\355Gr>\237\204Z\371\354\375", 6000, "\027\304\207\017\213\207_\0117\262Yu\004\012J.\274\307xu\273\372V\004z\243P\007n\363n\222:A\311\351\031\212\2748f\352@\217\347;[@\177:\023nq\260\221n\244\014\246*\361\033\212\042", 64 }, + { "~_\236f\256=\004\026S\320\325Tz\237U\327d2#w\202)Ir\003%\220>$u4\215", 32, "\372v\342\354;>9\312", 7000, "\134\017I=\243`|\314\225\014\263\254K\014r\372l4R\015<\3138'3Pw\214\3051 J!^G\364l\334\037\314\177m\220\247\321\001\307P\317B;\316\037BC\246\310@\250\250\367V\031\223", 64 }, + { "\371\311\302+J{\330+%\236\312\021P\377\377I\235\356\2664\000[\270Q\042\022\357\235\374\307.=", 32, "r\244\035~\327Y\310\266#\364\324D\203hd\266", 7000, "\272\304O|Wj\3136{g_+\347\355j\265/\300!lR+\341\231\2032\322:\032\272\350\331J\347Q\203DQc'4\335@i\347\334}))a\004(\313\255\3220\206\000\346\014\206\206\365\012", 64 }, + { "4\203\215\242\377.\236%\324\260\315@\275i\310C\241U\350\363\3107\337\371\2607\223\036\015:tQ", 32, "y;\315-J\314\274\357\264\210\020\222\007\240\272N\015\331\370\037\334Y\267\016", 7000, "\351\334\341R\305\301\022\273C8\001\000\270i\226\343\304\016z\322d\370_Q\377\2671\215Zu\376nS\245\030Za\374\353\255\305H\024\202\024\0110\037i9\003\363\337\377\304\214\331\207\366\226W\012\307\376", 64 }, + { "l?\242\3334\336\353R\233b\216|C!\013\000\022\274^$xfn\231\237!\037\357k\351\345\374", 32, "\005\276\347\3550\023\213\226w\2313\312\351\253PuJ+\027\003!\255\322\340\006\334__\017\317!\341", 7000, "=\015\237\267?\333$u\274\201\353e\204.Zls}H\344O\020!W\036@\222\362Qp\013\212\225T\274\265\256\024\2221#v\245\254\203K\202\020\355\0118\262\001\333\346\364\332\240\347\017\3227>\245", 64 }, + { "\027\344\376D\230{\335\276\012\027xc\247h\300\221\253\2004\231N\337XVPH\350\177\202\324\336(", 32, "\014;\3008\375\017N\372G\354\331\201\031\263A\027a\351\315\256\344rE\326P\247G\375\2502\262\375\353\344NA\035\317i\212", 7000, "Y\222\200\251;I<\227Q]\356\335\317\263\351\231\042Q\322s\313n\006-P'RKDZ\330\237q\213\332\374c\266\022\352,y6\231\226\001\233\354\027\245k22\312\331^i\026\2764\244\353\306\251", 64 }, + { "\267\366\277\006\327\363\330(~,Wd\275\303A\203\315\016\230\333\327X=*\326yB\364\213v&%", 32, "\274M\257\261N\266.k\356\343p \331wdX\324>\366a\031\362\207\3732\323\302\255\013\212r\003\321:d\220\200PI\010\0029HA\011\003\326\220", 7000, "i\364Q(V\223\200\223\340\007\374\330&H\342E\032\215\2515\3556X\022\215O\365\363\264\247Vwu>\371\320\332j\305\354\267R\323\022\274\232\216\262\361\301\225\3124\004\215=\236\237\341\347\365z(/", 64 }, + { ";~ \241\225\021\325\357\016\232\310=\214\261\3451\270\316\233-\303g\361\216\033Nxz\377\361.\236", 32, "\272x^\233\036p\375\304\204\200\034\306\224\352\307g\361\310\003K\224\276\211%\202\336\346;c\207\240A\021\005\206\255\006%6\312\233G\017,3\230\310\301\202\226A% \0341\353", 7000, "\331\326\014\373X\343aJI\247Cn-?\201B\223\271R\230\015\346\204\350\350w\012Y\373\240\265\020\274\232\000\366\207s\263\360\323\0254S\226i\007\371]\354\314\015aV>\337\303\260f\030\275\214\233\372", 64 }, + { "zt\362W\316\317\032\273\343zzZ\207)ZLm\224\345=\350_\361:\033X\324`\305\306\202-", 32, "\010\306xU:i\204\2235\375\346w6Q?\036\010M\267\275\265\240\223[p\022\255\213K-iKnR\263oP\263\002\036\331\200J\363\365\314\214\036\026\343\304\316\352=a\211\274*I\340.\266\015\265", 7000, "\337\242\214[V\263\350\233\377\006\301\201\275G-\365;\260\241\030\035\355\010\242k\361,\271\344\377bB<\304\242h\357\015\225\313\203\266b\031\322\270\235\376\365\351h\212b\2250\317\2567\254\033\223PLq", 64 }, + { "\004\221\352\003\252\354\313\377UT\030\207\205\362+\004\033\015\2140\004\261Yr\001\340jA2\241\2625", 32, "\256\300\3735\301\013\223\035\221Hl\304mj\340\375\215\254\337\0332\3472\274\254g(.\323\322g\0122\177\347\377\343\353\271t\010R\024\215\331\033\0027e\237\305{U\034k\357\220S\240v ;R\266\177\344p|Tw,\230", 7000, "\335\227U\002aP\016>\270\376g\266\312\211+\305&\013\273\312\262\364\365*\002\227\256/tg\007\341\3777 \351\323\337\031\246\025\227\301!\330\221\032;tX\007\030\004\353\004oX\277j\250\257\323J\230", 64 }, + { "\347\324\310U\204\323j\341\215\317&\325zo\327\025D\024&\352'gZ+>w5\256x\3500\353", 32, "\311b;\237!Zc\350", 8000, "\032\210\262\273W\324\134P\216\315\300\312\325\270\346\032^\031\022\260\372u\313\336\234\315h\005\264\2010\373$4u/\271\311VX\226V\304\261\042B\241A\227}\265jR@O\3651\364!\012w\246\335\200", 64 }, + { "Dn\207\341\204X\030\206\355vO@\340B\275\354\000\023\311\265\225T\237m\013\364\034\247\353\217\316w", 32, "\372\366\303\033\331\272uy\262\371j\302\256\356\334\257", 8000, "\250KJ\204a\031\225\204\016\325x\310?\230\013\2070\322\302\263\231r\264\001\240VR\237\270F#\330\353!\337\330V\256\223\357\262\030\2421\205\037x\272\305L\350Z\031\245W|\360\325\305w\223\020oc", 64 }, + { "\355\015e\250>p\225X\225*\011\316{\311\244f\364g\372\300\336\351=\216-W\324\257\316\373i\376", 32, "\226l\330`I\331\035r\203A\354~\251\373^yQK\322\343.Z E", 8000, "70`<\225^\221|\350*\017|\244\004`\317\221\134\376\352}%\245\324\360\216IY\042\311l|\201\350\230\210{\346\034\271\264R,&#\001\337\261[I\357kBl\336\335\213T\352;\015\024\301\033", 64 }, + { "\317|uV\275\303X\214t\250w\274\335\0028z\376\025\223^2\326F\250i\006\024\006Jm\303\017", 32, "\012\375\360\206\245\022J<\212H\177\267\247\370gr\326\322\251\011\324\331\010B^_IC\317JP\327", 8000, "`n\314\361\221\2161\263%w}y\006-\323\010S\354\240\332\026l)\325\266\023\013\036.\273\000u\247'\273Y\316j,ap\345\206*\264\324inn\022\203tj\260pb\023\210c\306R\234-\320", 64 }, + { "\231\230\221\276\330\2648\017\330v\311\346E\364\272<\037\243'\355\356\252*\210f\006\036\206Z\346[I", 32, "/Ws\213\262\202\020\005n\351i\334\233\303\375~\374\341\251]\227\247aeU\246H\263\031\035\015[\250\316\205\031{\222\016\205", 8000, "T(\016UCC$\370\236\251|\013s\237\023\325G\014\327\376Q\013\306\244*\233E;\014\264sZ\2449\242!m\200\243\264\342M\257\0350\370\357\224\373\262\201K\023\204\334\320\340\016y\272P\311A\217", 64 }, + { "\372\310Z\030\0367\234\257\361J\306F\267\310\216\2069+\013\224\275T/S\257\3554e\177P\243\134", 32, "p\237\036hc\362\305I\350\222\316\022\310v\240\240rE\200\277\241\212\245\330\260\035y_i\374\332\240\304\031w-QX\357\022Q\025\343n\371\273D\201", 8000, "c&\346\353\305F\004P\307\212\3268\356\255\252\225vy\214\213%\340Zz\242\252\301\263R\344qUhOG\334\363\177\203\030\014m\241\306\313\366m<\322\241\254{\334A\007\371\035\0210\211\320\357\042\014", 64 }, + { "\274\023\233g\226\220\266b~\011M\215\240\304:\345\216)\2338O\031\205c2nj\364\332\245\252\275", 32, "\023x\251\256\246*\363\004nr\336\240\357\031\011\315J\210\243:\023f\263\202H\333u0s\323\345\2516i\212\012>d\344\004\231:\217\371%P3\004\333\225M\037\321\036'z", 8000, "\305\373\334\202\333DvE\007\302L\246\273O1\312\006\327\203m 1\227\322\262\275\262$}\343n\377\275\325\034\323c\242\337e\352\247\217\264\200\276l\203\207*MG\245wI`4\261\200\025w\277\374\273", 64 }, + { "\310M\231/BX\015\3022,D\221\343\336{AB\373\305\232\223~\332\001$p%\236\311?\307\255", 32, "\346\237C\3322L\307\240\003+\342@\244\356\210\3652@\231uyajh\3672)\3133k\015\247\011\221\360\256$}G\232\326\344sB9\266\326a\273\276\273t\134\330Q)\2555O\212\204\207K\251", 8000, "Fg\027\253\252e\334-\306!7\300\374\277\235\274\261\350\005D\327\262\302\037\025\016\306|p3+\031\230\216\224\362\370&34\314\240LA\326\010\307b\371\177Pw\310\2605\210\275\305q$YPw\024", 64 }, + { "\243%\302\344P\210:6\271\3316\330|\234\377\325x\317\255\356u\266\204_\264\232\306\221H\235\323\233", 32, "\203\355\374\337L8\346\314\340\310\310)iB\261\313\303`\254\263\356\011\360LVf[\240\372\033\263\031 \237\361\263\264\007\257\323\224\205\207\366)\344\220\270H\216\005K\310\200\256~\341w\352\365m\305\316\231\315!\354\232\270\030\327\027", 8000, "/p\266KV\336\250\270\214\3752\255>\253\011\261\353Lu\022y\313+\300v\201\005^\333\310\370\016\375x\023N\340v&\222\042\353W'\277\014\226ss\240\314T/\020\347\2303\225i\337\255\217\275\310", 64 }, + { "\020\352\211\2704\337\355MK\251\237\315\207w=\345M\253j\013Q\312A\323v\256\212\273\346\314\206Z", 32, "\356\327\312\324\304XV\042", 9000, "<\252\305rA1WHK\030\310K\220\312\214/\225\222#\211\020y5J.\373.\375\250\246\344=U\326_\322\205\303\357\316\212*2\252\1347yP)/y\330\030q(;\275\222\316B\345N/'", 64 }, + { "\246\200\343|\000\363\320\004c1/\252 \230\027f\221\010\300L8<\315\333\014\000~\013=\224m`", 32, "\344h\347\244\325\331\22483=Nft\360\302\261", 9000, "\330Y+Q\337\302\005\230&\257\271\201\020\266\346rXi\310\342\234l\365\374}\242\365&\377\214Fn\240\315\272\026\322\326\2318\332\325\001\362\007G\316\346T\001\225\273\377\042\345?\377\330\302\361:\354Q\270", 64 }, + { "\300^\277,{\327^\347;\023\366\331\344\214@\224\226/\231\304z\212\024\264\343\305u\353Y\301\305\031", 32, "e0H}\001o\0238|<\317\200\275\255I\300\2211SZ\350\024\010x", 9000, "\346\352\302\366Gt<\261;\010((\022\360\232w\323\024~\3107\323\001\003\331X\006\245\235\364V\302\000\233~9\370\225\340\312\2120\011\362\274W\036\272\270\3168\311d\366\361\270\254E\363Zg\001\326\227", 64 }, + { "\302\3170F\365\303\367\304\340\000\332\3223F|\363\231o\336\315\010\334\000\327\225,\300\205\214\301\272)", 32, "\017\015*/]\217\334\262S\312\317\235r\371m\225\273\013\215N\360\016\324\003 \257\222\315\371\014\326t", 9000, "Q\213LROW\365\360C\375\251\233\235\237\273f\370\333&Qv\035\231bj|\2621\134\365\213\254\264\221\377N\321\305\036\272\236I\331K\375 \276\212\177R(T\370\030\376\322\201!a\230\014g2\330", 64 }, + { "VW\226?\011\206\237\332\316^\201\211F\363\242#\2414\260\034f\253F\020\015\356\022\026\030wy\207", 32, "\134X>oO\341\2221p\023\236\217\357\355\213qc\222\237$q\311\271\224\317\005\354\243\010'\365\246Q\371)N_\226\353m", 9000, "\310Z1\202\257\017\276\0118bF\322\213U\222~\243\033\323[\324\371\365(\344R\363\347\313\342\255\033\320\316\374]\207\371\004\353e\311+\316`%p\236\327\326o\017\235yu\234=+\216\303\3420\246\333", 64 }, + { "\265\321\227\226\355\037\225\225f\000`\331\364x_h\261\236\302F\356\277\305\203\337n\324\242XlX\276", 32, "\353\325\230[\314*\371$\233U\335d\302\356+M+\217K\255:\305i\217\315U5dmm1r\034`^\033\200\311\366\323\244\254\134\354*.C\261", 9000, "\203\205\206;\334K\261)~\005a\365\232$.\246\250\333\351\036\237\227T\326\007\266\277\337\267\012i\252\277f/\367", 64 }, + { "g\342u\261\360\205W\253\3757\224>\2007\261$\321\326[A\030Nl>\300\255\270\310j\230\000\317", 32, "\205R\344\134\355S;_$R9\207\216\351\035\355\344\246\230\347\305\225y\365'\264\273\273\002\3004\3074\321%j\237\246\352\345Y(\224\334\371\274\012WL\232$z\246\331m\020", 9000, "\042\307\336\011n\273.\027\006Z\200\335\244N)\210\325\177M\000\270U\2167\007\331\217\002u\262\030\257\223\325]\371WI\207\226\211\331s\007.\224P\3330\023E\273\3256\324\2250|h\332\134\306M}", 64 }, + { "\205\222\255d0\015\236\365\024\002w\355:\025Q\206(\000\014\315*`6\343\233\217\377\036\227\231\001\310", 32, "\031\345\002\252\206*\014\226\235[\012\333\340K\207$\010\010\332s8*\346|\245\323h}^\202`\233\200\2460\304H9\031H\2321x\013\033\363\322=B\223\224\321\2335\204\262#%\245#N\236\205\360", 9000, "\376\304\247X\265W\252\204.\025\177:\360\227\0259$\005h\205\364\030o\324p\023\206\006\325\302B:\311\252\240\015\253\000\370\313\007\002\276:\037/\001\240-T\241\221\007\247`Z\012|M\027\316\2303\004", 64 }, + { "\262\332x\2240\1348{\351ow\377\220.\005\010\351\313\365w\310\006\042\312O\234\256\254I\225P\236", 32, "\003\262\327\213\033E\352\255k\031x_V1\330\217\232\333TCjCG\257\222\207\302aA_&\303\022\242T2V\301l\230U=\204\255\013?9\212W\217R\254\246\264J\310\243\340\215\276\324\264\211\371H~d\334V\0048\210", 9000, "\2428\360\032\336\004$\015\303\304\203\271/\302\252\361\204\366\314\201\231\324\323\340\031E\355\205\372\201?JX\264\256\177\242L\362\001oc\310\134{pO\232\234\200x03\270\364@\346\134\214\330\202\010\254\350", 64 }, + { "`\210\003\226\023\271\363\251\376u\032@4R\227A\233\177\204+\331D\302jJ\035I~\033Va\334\306\134\337\3708\3159\374", 40, "g:\354\200:\353\237\314", 100, "\247\204y~\264\003\374\263YbJ1\265\256\370b\020\377?\034\240{\014\275Z\011\347\213\206\356\037Q\010^\306\207Q9\021\374q\270\242DI\034-\232o=\212\202\134\037+\305pB\2152CI\275[", 64 }, + { "\330\3067\035\364 \2267\266\226]\315\242\015X{\270Vn9\260\277\277\375a\014\251k2P\003f{Z\037[t|o=", 40, "\375\276EL5\306\235A\371\032\272\364\014\340\014\374", 100, "8\255\030MN[\002\3162\250\340\323\262\011O\0374\012V'\303a\010\026\372\337\022p\002\321*\032\255\205\217\377`\264\015\255\217\005\300`\352\261\313\370`\217en.\252\205V_\331b\261\302g\333\273", 64 }, + { "\247\3113>'\341Z\226\015E\235\221\200}d\217\021\263\134r\205NX\241\366\014\257\243\261y\212r\263D\272\243\021\207\235\216", 40, "(\213\353B\221\216\0302\003R}\310}\331\006\343\001\333\326\236\017x3\005", 100, "\261\201\255\301\037\027-\004\242}\361\027\264\250\210r\231\274=d\010\371\2662\357\017\233d\224\230\0300\356\273\264\245\212A*%\333 \326(c#\273X\026\312\226\317\031X\257,\353\213\307\254\304\337C\326", 64 }, + { "\024B\327M\362\134\210]Iu3\223\322\277\361\3646\276H\263\030\2348XC\271\206d5\242\231\263*\334w\317\015\376\002\014", 40, "\321\357!\351~\005{\304\267\313\205\027\005\307\232a\367\212r\302\306\032\231\26567\246\356\227!R2", 100, "`\236%\333\327{\331~X\022m\274\337\203\257\326\012\247\021\326\270l\3271W\244A:T\261\250\252n\230\327\231\305v\024\245\371\377\346\007\305\204\360\215\252\267G\007\005_E\0221\223\340\3714\243\220\303", 64 }, + { "\002\325\230\270\245\022\320|\042<\274\236\243{IF\255\2123~1\324NX\343\212\002\230+,\321\253\320\334\246\273\264\265\215\350", 40, "M\361.*\033\362\022\226*k\333\225B\320\377\266\011\307\034w4s\274\316\217\034\221W\373\003\256\244\210e\260\242)\206\254\223", 100, "\371d\211g\2024\010\257M\023f\177\247\376\000e\036\353\372\375%l4\272\370\026\343\330\240\022L\214y\025\235\360\0213\014\375B\326\331\300G\336\212}\342*,\254~\001B\204\370\200d\254 \303E\367", 64 }, + { "\243\035i\361t\264\370\31688\017\261Ph\267\224\271\357Y4\035gZ\2631\021\253\236\364\311\031E\364K\240\313xi\253o", 40, "\313h\035\345a9\260^n\335\014\337v'\371\330D\215`\332|1\357\023\253\215\213X,\215h\306X\244C\232\236h\256\372\247\020N\275\020d\360\005", 100, "{\320\345i\277g\336.\253(|\256\347\302\022\260\330\315\247j3\217\257\236\260\302\024\204\000,+}I\202Ow\321\205\013\315\324\001\332\331\003\367E%C\205\354\345\366E\314\351\032\340\314\2568\233=#", 64 }, + { "R.\220Q\306\005\331\013_\274\263\364\305\363\253ut\215T\042\354}\011\014\256\254J\245c\353f/R3s\342$<\205\366", 40, "\042L;\375\240\241\376\322\232GY\375\004PV\261\331}\305#d=\210T\261\233\246\322\377\365\350\365\304\202\256\264\003WX\021=\273\247;\007\215\377Y\360\212\004\324\2525\260\223", 100, "]\370(3IL\232v\357\336\347\350j\3428=\337\205g\331\211=w\023\373\311q\321fM\372\134\037o\312\270\207E\232$\246\224\0069q\245;_U\256\207\246\224~\265lfX\217+\241\177\012\000", 64 }, + { "\005F\364\361\037\250}\236\013\315z\330\022B\011U\222\372\236Z\033ZH|G\313j\247\263\363\222\350\362\243~;8\203\276Y", 40, "'\006e\223)\331-D/\272>1\236\236\202\360\034\015\253\305\312\036\202;\306\254\036\313)\235\011\217\270y\235 9'\355cs5\311\300I\042\235ls}\202\364\002\303S\223L\3528\262\305\001\203\011", 100, "NY\261\274\311\225i^\034\326=\353\301\204\312\357y\263r\031\234\240O<%\253\221\022\321\264\015rH\311\327\302\201yi\304\360\3748z\036\022\205\236W\026\023\006\256B\227mJ\234\231\263\253\3368\202", 64 }, + { "\006\336\254*o{\322\024\361\337\007S\353\357\243\370\244\033\261\024`\3159\311\001\027:\342h\275)R#_S\030\217V\336\024", 40, "\001/Wmb8\260\026\246\270#\346W\360\277/\347\177\233\322t%|\226\334\261~\001tJE\326+\204X\304\324&\036\134\252\004\362\020Y\347V\245\015\023\332EQ\345U\002F\321\202T\012\356\313\235f\206h\356]+\314\324", 100, "I\177\227\177z\320\023\255\352\036\233\272\216\032\231\236\236\220\034\304\263\006x\212\004\340~\371a\034\375R\254T\321\237,\351>\367Be\335\020d\343\363\216\271\011!\344\345\271\325u\006Jdv\004\350\277\301g\007\211_\336", 64 }, + { "\011d*\215\352[\313\3051?\362\360c\277?7\1771\306\221\271\022\275\205Y1E\240M\214T\225R\363\010\3130!*y", 40, "\310l3\2262\346\215Z\223\005\236\302\241\025~\276'\334r<\030Ou\273", 200, "\022\251\266\330\274\244\022\001\042g?\014Q\334^\032\320\203\004\023\231VI\236\351\032\234\200\220\272}/\255\356\322C\342\315\340mR/\024\003WvC\362}0\204\274x\315u\216\014\203\337\353\0350\216\241", 64 }, + { "N{\366HE\323\251BA2\337\035lQ9y\377\206_\354\217\210\210\237\301\277Tm\234\001\033\237\200\261:\314$\007Ro", 40, "\226L\252\227\244 P\217\303\022\353\351\357u|\367X\206\134h\354]\006\257\247b\277ug\266\371\305", 200, "\331\343\322@\363\303\324CF\204on\225pD1\260\342\250h\337\376<\376oqrOrC\260,\014\330\234@ \363\236v\206\201;\335\020+\253#\232x\267-\035\035P\010G\277\322\200d\241d\337", 64 }, + { "RjMU\235u\300\005\020s\3026\244C \010T\277\204\025}6\221\260t\030\347\262y\246\004\004\022nP\003E\224B\275", 40, "\361|Oc\337\006\334\314}y\037}5'L\363\3776(W\331\015+\005y\211\036X\006\33121\012Y\017\011c\016\353\025", 200, "\037^\036", 300, "^b\177X\310\203*\016\340f\343R\233\025\025\222\017l|R\203\227F\217\311@\261\207\325\013\273\042\375\260\256b\333\036\221\220\026\377\223X\336\243\217\235h\006\3110\231R\314\247\3401q\365>dA\010", 64 }, + { "\350$\307\023\016\225\330\3677\315F]9\3447F\306\036?w\000w\266\266\214\244|w\354\204*9~\331y\262x4\237E", 40, "\023*\200k:\322 \321O\214W\374R\223>\232G\202\230\223u\231.\266", 300, "z\223\217\302\200\321_U\300\304W\241/a~\367X\24385\244\207\224M/\255,\232\252\366C\377>5\312\210\273k\001\377\353>g\204\032>\017\303\207#1\021\373\257\031(M*\014 h\334P\370", 64 }, + { "\341\320\235C\357(E\316\332\224\353$\002\330\352{m\215\310l%\255\247\035>fQN\270\217\001\211\355\265@\2036W\263\210", 40, "\232\001\020\307\220Q\244C\312\213%\0206bK~y\272Bh\302\323D8OE\205\323\356\003\235\300", 300, "\227\366^\335\033\330\023e+w\242!B*~t\226\326\322\201\020\251\025O\336 \302\354\355b=\3732,\304\311\025\005y\032\376\005y\347I\031\260\336\360puq/\340\235\325(\337\023\344y\225Hs", 64 }, + { "E,\342\3250\250\275N5\307?b\016f\215\200E7\3260\2062z\026X\243R\245A\210R\014\262\240r\305Z\303\211\042", 40, "\213n0gD'Y$\2742\031\330\027\247\253\343Y\345\263Y\335\354\270\0275\205`\015\227\002\3527\336\367\354\337\024\204v0", 300, "\305\042\312\304t\351\241\223H<~\212\257N\201\022\363\032~\231\241\373\300L\344\333\302F\272\233\306\037\231\260\236\243\326\035\370lOM[v6N\214\042\362D\224\001\372\316Z\372\220t\177\301>\020}2", 64 }, + { "&\3372)\301\232E\222\030&{\236\272\013\210\011\034%1\352s\310\341^\310\251\352\177\257l*\3071}\343\011\317\377\012\221", 40, "\332%\357\310,%\202/Ei\2600\0219\256\305\225}\344F\273*\231\272\317\004@G\334\242\311\270F\0232\240\264\003\234JL\304P\2627\271\234U", 300, "\017\356\256\272\201\031Kf\300\365Z\246\362Z\2765b\346\272c\011\222\241\033\337L\356\323h\034%\001\270\020\016u5\251\030\013u\343%\361%c\005d\242\340p\224L\255\261\370\025\216=9S\225\027X", 64 }, + { "\023\225\225\225a\205\3544\023J\002\345\037\024\217$\252P\240\347\025-\206\0266wn\353*Jx\327\323\213qo\322~JV", 40, "<\225(\247f\351\21182x\003\036Z\333I\376\347\211\037\340{\241\0017jPQ\037\206N(\365\354$$\001X\253\3713\253?\263.W?]\260\327')\347\200\240%\354", 300, "\362wD\306Q!\204\002\0347J\363\256\214\210\3030\266\007\3170\323\346\375\301n+\300\010\025\345\010\0316\363\344%*\377\360\260#\212Ut\324\347\334;\011\356(&A\207\0332\013\320\3060\367\271\333", 64 }, + { "\267\244\274\263\273\230jf&\202Y\220\226\354\216\363\010\031\206\326p\363ux\3536%.~<\213\324;vCi\0217\004\311", 40, "\230\250\225\200\265%,\326\017\035?\274\237{D\272\224\303\3037ea\205:\042\022B1\272\017\275G\263\317\344 \306\204\233\244\273\254\235m/1\317\223\344Uf \273\372.\305\306?\005\011[\217\302p", 300, "\360\214I\303\037J\034r\211\204\333\023u\217\274\134\373G\024\327Z\016\331\022\210aOM\014\212\226\240\257N\215nH\266\343\006e?X\244\370&-\313|\252%\353\351{\345\340\004\345\271\004Q\314^0", 64 }, + { "G.\325\033\317\202j\005\253z1\227\033\207\2061<0\003\311+\3337L9\264\004h&\027@:\030H\331\313/N\270/", 40, "\006\032\324w1\247)\271\337H\335\312\316\2467\214\042\207\245\373\361\250J\207\354c\253f\371\001\276o\343\300h\010A\300\366\331\301NI\255\322\270\350lf\246\020\257\263m\231\311H\3175{>\257\223\313\262Y\245\254hghv", 300, "d8\023\233e\020}\215\007\036\002\367H\003\367\336\010\260\364\255 \360\200\223\265\252\203y\315\322\013\252\376E-gi\000IY\325\367\353)\322\311g\023\301\245\245\134\223n\211\324\245\301coXc.\320", 64 }, + { "\302\347\272e\366\307\3749\015< ^\330\275\344*\370\033\274_\361\227=-\350d\340[V\025#\225\255\017\252g\325;H9", 40, "\272w\001\242\254\207\370\351", 400, "\304>v\275T\012F\025\366\200\362K'\263v\211\232\267oM$\337\134R~&\262\205IM\300\372\3549\014\177\267H{!\241$\234S=t\355T\247O|?\310\247U\263\326y\000\221\214\2404\266", 64 }, + { "8\217\216\363!u\361\212Kw?\134\251\346\316\012\000\0055\042g\230\010T\374\365y\312\213\333\307z\022\363\313\330d\354\226\325", 40, "\331\326\007\325[\226\374\225\250\021\225\214\012c\240\310", 400, "\016e\302\330?9\223s=\3620\302X\221\336==v\365\351iF\340\227\223;?b\005;\010\201)\327\262\006\247\0077\345\224\250=\026\341tP\303-+M\025\014[\367\007\022w\013k\374\032\234&", 64 }, + { "\027\271\230\271\345\254vz%`\006\201P\331\3222-\323\374\222[S!\003\011\323\231\262+\325\224\250=|\277 \201\254\201_", 40, "\010\214t\242\242\352\314\021\304\320\367\322I\3120\314Ry:\334u\354\272\370", 400, "\334\230\272\330r `\333\030E^\250m\023}\302\022\025th\024\364UC7b\001\301\023d\272\265\207.\037\377\371\011\362\344\270o\2101Bk@\340\332\351\253\257yp\361\377\331v\016\3105\020\363\317", 64 }, + { "B>\351\352\241\021\035\330U73\250J\266\243\374+\340\306\337\263\316\377{U\331\250\304\033jy\0032\216\021\211\345N)d", 40, "\250,\252\367X\257\022\264\331\373\042\223\226Z\021PQ`d\021\371\201\227w\374r\2028\033\3662\377", 400, "\315j\243\042p\000\266\016]BH\350\270\356\257\236\013\214'\347\347\001\010\341v\357\271\355avY\354\250\367\032\260:dRv\377\134?Abn\262\026\020\010\371\255#\227F\035\326,lx\251+D\372E.\263A", 40, "\350\3618b\270\207+:1\033\366\322`\321,\240\244/TDD\315\362\335\354\231\327\333hI\365~\270\271\244\374EU\237\270", 400, "jY\035\262\337\213\327\204\367\352u\230\024\020\021/\027\261\021\037D\2740\354\276G\035\222~\037\3065\201\002\350\042\371\276ye\020\253^B0\234\237v\363\252\267\221\305\373\336\016\034\351\236\243\215\375\236\305", 64 }, + { "\270\322\236\314\345\206Gv@\370=\210\267\316\245\215!F\264\211I7\032\231\225\360?\020\375\256\371\0020V\204&\134\273yk", 40, "\265\257\037\360V\302\357\200\373\024R1X\211!\362\327\027\275\134>X\371\334W9jt=1\331r\241\0138\265\344{hWe^?rZ\301\305\375", 400, "o\212\230=\031.r\255\037}3Q\3413\237%\320\323\362\260/\014\377w\312\370!\236\335\371\010\377\240hR\252\254\016\000\030\332\004\243\305G\371\024<\025r\243X\312\371\320p%n\340K\317\346\2710", 64 }, + { "v\203'\352\031\202O\037i\246\205\355\211^AW\331\251g\257\356vw5\003v\247\304\225\310\232\206\373kqS\360'\252\255", 40, "\252\275\277Tw\316\320$\304s>\372\236\264\330\354\341\314\275\315\034E\240f\001\330=ZK\001\026b\317\333\007\224\230\272\020\366\314\332\027\265\221\033\244\034fA\323\214\032\227\010\225", 400, "\327\262\021>\322}w \177&\302\357\351\356\350\345\217\300\004\24057\0254*\367\365a\200\263\353\000\134h!\226O\243\202\231I+\003\006\244JK\210\005\336\363\032\352\242\206\330\266JQL\013\356\356\307", 64 }, + { "@\257T\377\244\313W+}\242\241gP_\252\2466u\016U\335\230\344\210S\323\030\01608\237\351`\320\332a\3702t\327", 40, "lB;^\004{\301\301\2000\367\227\226\026\222cQl\322\225\374\221\351\277\134\301\023,\002_c[V\333\010z\271\200tQP\237;\277\213\265C6\3474\361=cs\267\200\247\012h\253\233\017k\025", 400, "b\016\304n\314l\007\256\316\042\300\033\006\033\356\305@\237H\356s\026u\276\013Z\016%g\340\344a\0330W\004\244 \241K\216\255V\345\360;\026+u\340\374\006$\201\371\004X\274\332\360D\233s\011", 64 }, + { "h\026\013#^#\3608\361\241y\335\311\364\257\251\0033\202s.0\032I\254\256\250\305[L\332x\032\035M\275\373#41", 40, "n\272\237\200{L\204\300\313\253c\332\220c\225\325\024\243\266$$\364s\344\271\327\270i\245\375\002yu\245`\250\042!\341\200\025\017\203w\253\002{9i~Y\337\316\215G\222\273\031\200\005\221)\370\004e\200\313\2531\335*)", 400, "]J\212\037\332v\225s\225A\361\336b\015`X\010\301\352C\225\020\333\215\226\354\264\205/\034\033\345Q\316\310\311\335\025@\323\376L\373\365N\014\207\333\377\373\030c?\263o \270y1\327'\011\275\300", 64 }, + { "\037$\023\200l\203\315\362\001r:\251Y\265N\006\033\223\177\266\276}\235\042.{\340@(\361\042u\250\364\374/\017\225\203?", 40, "o'P\035\276\332b\015", 500, "\027+\241\256=XP\216\265\203C\372\367\026_g\042W\277\042\017Q\200\260\363\021\031\370\017\354\214H#\247\233\012\244*\277\325fi\261\344\005\026\206\262v->\344\340\332\367C6RpF\273Y(c", 64 }, + { "i\356+\334\331\004\246\024\364t\321l&\254\240['=B^\351Y\222e\332\267\227++\320,\351\315$\025H4\036\307\305", 40, "\232%\344]\343?\304T\007\016\323\211\341\264\350\003", 500, "\376%\230\250'\221\371L\315\021\017^\256\034\273;\335\337\360p\305k\331\256\370\021\371\230kZk\234\353\026\227\340\313{\203\206r\032\034\034\374J\025\352\015\335 \373V\365\347\024\005\276*\363\021\331\3446", 64 }, + { "B\276J\227\335\347dq0\204\341\373\352\264v$\311g\306b\314,\252a\030^,\333\202\327\353(\245l\240\313\267B\243s", 40, "]r\312\3217\237OJfZR\274\021\261Q (\244\241\013bm\306\001", 500, "\020\307H\233\2222\307\276\233\134\220Sc\226&\230\273\353\315\265\004*\253\030\222\031\016\203\022`\242\360/}\301z\226\270\231L\203\346\034sh\201\216\030\201 \223j\341Y\337\350\366\256\347\301X\372V?", 64 }, + { "\367\373\350:\033`v#:q\264G\032\235Y\3419(\211bK\002\012\317\237\217\261\277|\367'F\225\346\322M\262oO\032", 40, "\017q*\266,_U\373\216\351\001\035\3237u\354\251^r\022'X\237\206\230]\331{@%\301\311", 500, "\211\366\134\340\227K~6!L>7(#\032\2176\230\000J\344\321\013\371A6\206#^\350/N\021\341\365V\211\230;\266v\013\327\000\221X\360\025ag]\344\011\002\322\357\363\254\270\324j\333e\232", 64 }, + { "`r\253B\0145\341=\303\240Yp%\023\256\003\232\354\212!F\246Q\232\207\224\337\347Z\216\261\235\244c\332\242w\206-\337", 40, "Z\216\370\311}==\002\367]w65\340\302\340\221\002\032@\302\210AP\273\215\335\322Q>\011I[\004\231\241\310\246\022\322", 500, "H:DD\322bY\205\003\134,\367\345\265\352\021\331\375\007\261\2251\334{g\336\022bso\015\203\277\312\264)\005\2372(\335RK\225^qM]\2626j\266\324\006\023n\371\321\340\260\354/\357\225", 64 }, + { "\036;{cq\252\200V\205y\367HY\042\373\323<\235\252F4\31601v\341\235\005%\204x&\177\316.\222\032\214\357>", 40, "\023\321:\305B\361\352\322\345J\042\202\333Q\214c\007-\026MN\352\252\231t\205\012Y\365\340=\212\374\245\275\021\177?g)\006c\0104%6A/", 500, "\250\303\354\237a\347#'\230\270\035^\357\275\231\254\000\001z\315{\312@u\365s\310x\326z=\007S\213\336\026`}/\324\220\275\217\232\323\321\273Z@\027\317|\223\011e,2\023P\021^\325\000b", 64 }, + { "*z\225F\206\0151/t\213\026\2309~\313\313\374\205\235*\342\026\003\267\347\223\333\034:N\2051\001O\3031\207\375H\265", 40, "/?\0267\245\223\272\370\225Ad\214,H\332\265\376'\377NE\035bP\342\311\030\202\031\311\014\340\276\266 bW]\373\255+W\316\020\211,\277S\035c\020%\365g\350\271", 500, "\031Q\035\3656\223\042s\342\21538\340\235\226v\014\357\260\013\363\201g\241\271\226\213\220\316Zj\000\306\000\220\021V\027\250\230\302\265'\255\235\334N\230\355\251\326&\207\307;4\2550p\377d\315\342\222", 64 }, + { "\247g\321K\211\224K\024H-}\217\260\373\332\325;L/e.\307e-,\013\263n\255\271\312\213\231\241\266\264\264\010\220\177", 40, "\026\227\357\264\367\222d\234F\311\363\371\316:,\366\007\007\240b\272\361\244\215\007U$PW\007\321jGm\033]M)@\326\234\341K~G\005$\024MU\266f\333\247\374\002_\34273\020\301\036D", 500, "\2177\022\2258\227\032v\042f\134\2542D\314\315\271\320\315\026M<\2708r|@c!\351E%\035@v~j\245m\276a\367\364\311\237\016\370Zy\352k\230\322\315\355a\3212\367\252'8\027\010", 64 }, + { "1\010\366:\322\246\037\312\007Jc|d\302)\233\366\134\224\351\272\237\3669\305\247T}\245*\3402m\241\214\035\365\341\274U", 40, "\260\042\205\205\337\006\014\3020%\243\020\221J\361\352\337\003\317\352-\006\303\032\353\333\030:y)aP\003\206\376K\313>\332,\340\202\245\331\333\034Hd\342q\315m\002\256M@4\340:99o6\013\3201\253\355\347R;\022", 500, "f_\215\220\321\254\317rr\306_[\007H\267\334\332\271P\270\220\360mbZ?\012\220\322\357\351e\330E\250N\251\256/?z\261J\276\013\226%\224.4\327\367\310.\320\324bk#x\250P\205`", 64 }, + { "\205\310\260\004\314\016\205\266\337>I\276\336XNQ\371\2057\001oj0|\033\022u\255\233\250\307R#\220_u\021\350\222\317", 40, "\321\234C\254C=\026\005", 600, "\230m\022Q\007v\331W\031'/0\0336\235\241\254g\231v\367\244\013[8\007\016\351\200\371\305b\203\231r\241\324\363/\246\256\222\234\001\223\325\231\267\245\005Pav\241\257\323\265\254\355\134\250\224\033\245", 64 }, + { "\032G5\256\134!\321-\371\005\331b3\321\321\351'%v\361\316\2378\213\356\032{o\042\220\355\006z\277\351\332\342\304\3146", 40, "\200h\016\361\347\034\302\327\3315\371\344:\203\331W", 600, "X\275\364\247\307\262\230\202f\255^X\225\330\225\254\223\203iL\037Gq\001M\304{&\330\342\354\002\322\252\001\301=\231\313[)\236v\012CT\2719\340S~\371\001=\312\234H\323\217\343\020\022m\237", 64 }, + { "18\333\277\367\221\366w\230\253K\012\351\2526\234^\270/\247JD\204,\034\361!Y\266\336\274\354\322\226R6\030\207\305\304", 40, "g\241\307h\373\326X\200\134\002s\362C\011\230-\012\277-\011\377\001\274`", 600, "\236\207\032|\264\025\321-\203\236Ug\306\360\366\262L\022\333\370s\207O]\344+\326\334U\266\340\310>=\360re\227\017Nz\026\216\331\204n$\007\365\323\257>\334;M\213\024\320\252_E\010$\042", 64 }, + { "|\017\325Z\222\240\336\245\247\207\000\326`\221e\2770\360\226\232$\274\375(B\024\264\336t`SwhX\354|D\327Z\236", 40, "\356^\021\042^\200\272j:Z\377\216\247KVH\334\241\263\307\220\223Gi\337r\001Q\246\261 \207", 600, "\323\247\260\306\013&\234n\235\213;{\234\276\241\016\270\012\006\340:6\337g+\234\0264cV\367\307\361\341Iqu\210\307\370\0056\002\343Oy\264w\230X\3239H\024\207\027\377\315\204\333\340\302\220\250", 64 }, + { "}\017\344\277/u\246\350\315\226\323\033\277\356o\024h\004\234\343\036\005\014s\265\375\023\001\363\206d\265a\266\374\036\344\200*\364", 40, ":\361\031\206\006\321\276\321\206^*\330\027\257:\204i\311\012\233\3404\236\0040Zk\326\007\013\015\310\022\367i\313)m\341\026", 600, "\236\317\231\200E\323\025aM\347\231R\345\020\324\364\254\367{\024F~]c\204\350G\364\364\204\355k'4k\343\221\034W}TL\311B\027T\246\353\311\333|\340\2266\231\017\323\307\254\337A\007\373\333", 64 }, + { "\247KD\327\323`\024v \344}H4C;\307#J*\323\314\021\362/\214\254ED\201\042:\341\204\313\231U;\351\362\336\362\024\223^\341L\0328\350\235\247\342\371\254'\257J\357\323\2046\362\363\247\260 V\025w\244\253\246\177&n\275\212.V", 700, "\310\245K\3722\340P\316g\224`\021\2139\225\207\324\277\251{;\036\376\001c\235\342[E\314\007\324\217J\316\331y\216\216\305O\210\374\277\3710\227\276/\033i\205\316\247/\215\256\330\037\271\273\251\310 ", 64 }, + { "\250\003\231s\236\374(\2562\314\007\365\037&\2730O\376=k\236#mm\035J\315\333\335\022\377\236\2177\304\266\177\037\352\201", 40, "\207\207\017\306y\205G\030\023\012\312-\215g\345\252\016\244Z\215\200b\021\201D\253\306\001|\024\227\363V\313~`\207o\003\263\207^\246\345\025\262\252\036~\262\304\350kvD\365|\377\301\346(\252}D", 700, "\002\345y\325*\313\214\003-7\371d\134\220\017\215j\246\304iH\271Sx)q\275n\016\361L\253\213\362\206\367\022\017\375\272Q\245\220\353.\264\011?\257\311\233\013\3441\005\370]Z\235@\200\010\231h", 64 }, + { "\266\361)\254\304\357\342\2513\207\262ND\246\022\210\234\262\013m\331tD\036\216\256W\221\337tW\201\245\254\035.\252j\037\246", 40, "\317\036!DOSD\017\215RzN\235\344\266R\320\275,R\030\356\3542\241\217\346\310\002\020\264\260\235A\022\016\037\247\027zb\236\023\323{\301\205\323B\342B[-2\312\363 \217~\216\332\347\317\355vnZ:T6/M", 700, "\254\355\201.s;\233PQ\344\304\255\230\272\016s\332\341\035\014\023C\254\352\2167\010R\037\253\025\325PV\305k\336\364\316\347\370\375\317\247\274\3319\015\375*\265U\222g\00126Y\265\220\331W\026\300", 64 }, + { "\236\003\332\3109\303\331\310\316\216\276\331\011\305\003\217\316R\343oW\036\362\015\321\205`\224:#cpm8v\202\200z.\316", 40, "\226\1340\320oh\347\016", 800, "N\251K\255\026\242\251J\361\374\033\356\007.\006\205\035\317\006\202\272[&<\255\244D&D\032\017m\307\345 \001\016\272k\024\134\252-$\346Y\330\031\035W\250\031~>,\346\260\242\352\001'Iw1\363\365\223\255\3738\276\344\202\325\042C\2714\252\254\273\215\244\250q;\375\344?\201\233a\334\332]", 64 }, + { "\272\210\031:*\250\216=\324\274\240L\340\220#\351\042s\203zR\2328\367\012\014\265&\372\225p\204S\310vFS\360\221\304", 40, "\244D\351Q\254>(\306\235&\226\314|\306\211\364\010\247\323\361\356\247\224\340", 800, "\360\245`M\036\222\270\011\207\000\377,LH\254\217\034\273\023[\367C^\366<\213\302\352u\035\355\367H", 800, "m\230\007Ou^\233\342\007\326MA\333J\010\256^\336\231mw\3463S\203\035~63\363\222U\201\375\311:\032\3244T\316Z\031\345\021;\356\222\010\245\262\214\204\316\273\320\266\036^\371W\005\372[", 64 }, + { "\025U\274\365\264D\325M\362\270\031\134\277y\240\201\017\367\011=\234B\206\216\275Z_:\310\022\034\226#\276\311z\356^\006m", 40, "\375\252kc`9\356\355\347\361wv4~\324\024\324\242", 64 }, + { "\2277\226\352\341\316T\3078\305\005\370\357\257\3065\270d\027\031\200I\245\016\243JC_\301\332\230p\323\345\274\252U\345\364\374", 40, "\321\257\023dE\264\202\246\274\342\024Y\307\377L~\244N\254\213\202\027\2641>\015\235\205\020\010/\333\275Z\350\030\305\006\3614\266\034\244\251\211X\241\217\212M\315\310K\252\374\351]f\267$X_\266\242", 800, "\303W\001v\301H\013*\303D\267\013\246\003\333Nr\213\363\214\023\231\300\334B\271\240\020A\214+\321\006\250\037\251p\230\373\020\262\333\255\210\251\031\013\206\366\000\246%\005\250\266\006I\274\257\337\031n\250D", 64 }, + { "v\036\315v\000\305_\303\343^\006?L$\025\304Xr\014\203'\257y\2462\274p\251\351\221,\211\001\313\024\234ua2S", 40, "\004\222\311 d\350\256\035pO'\302\255\260%5\210j\277T6a%\251F\017\013\300|]e\360\317\0245\037B\216\276mMZo\247\340\021\017~\305\326\242=OJu]shHr\212Y\254\304Gl\236\332\2600\042\216", 800, "\323\004MM>\322@<\321\23672O#\360\030\234\335~\352\345;\016\301^\237\304\260T\274\304\010\247\356iT\207kU\207\134\353\235\251 \377\270M\303#\300\274m\3151k\2259\240\327t\275\371d", 64 }, + { "\272\246\030\303\247i@\262\342\042sn\0006\222\247\366\013\002\205\034\363\246b\237\226\032\377\226\244r\243\377\362", 40, "1\324K\006\307I\330R", 900, "\215G|*\014\234\000^>$\313\363p\327\250QD\343\337\232D\042\256\331-\303LE\3602\0019\3137]\337\006\352\017\026 }Q\035\036\325\261\246\320\027+\357\007HP\200+\345\264\300\362\026\374\320", 64 }, + { "P\255'\277m\2654\026\225\362y\206\002\311\313\032J\213\315.R\201\375\025rP\236\254\333\357*\221,Nk\025\004\014\005\271", 40, "\322\002\261\273*\303\310\2203\375\240s\317\027\206\265", 900, "\311{\342#h\025\214A0\351T\253.\361\350w\200\336\367\331\241\023\006\201\375U\264\376,AL\276\373\360y\266\243\017\253\252'\232\346#\207\223\254\023\002Q);r\223\271\025\322\035\336\266\001*}\314", 64 }, + { "\375\021:w<-\363\227v\242\220s\343\37651\006\257x\331\004\213\363\336\266w9I\336\323QCN\216\354\215\306>[ ", 40, "Xm?\205\340\010\207\256\003#g\224\331\333XE\251\303\331Gr\025N\217", 900, "\316YO\221\237+`\004\0179 \317\322\220\374<\266rl\377\246\331T~3\235\304\014\023\335.'\273\034W\340\226\235\244 \033~J\222\021\240\014\327rD\007\235lR\022\321u\264~Yd\337\014\200", 64 }, + { "\035\264\036.]6\335\000\277zG\326\304\363\236\012\215\227\334\226 \375\220\325g\312D^jv\014\011\001>\263\364\330\260\271U", 40, "+\134<\316[s\224\272\360\201\201\031#\233n\261\317\205v\363\230\262^\215\213b\2162\244r\322Q", 900, "\373fya$\300>\001=\340\335\240\200T\321(\317\310\227xM\241q\237\305\351\335\253r\027/s\277vc\212\232w\332\026W\362:\361=\302\377\350\317\227\365+\223\033g\337\347p\344\273\012\366\317\345", 64 }, + { "\007Z\255E%IM\035\302\343\304d\276\354\312\042\211\015\266>|0Z\377\320m\303\254\334\231\206\266eFw\314\025\2734n", 40, "\354\272\341\373\202=\177\030\134A\224\256\246\217\336,\207\375\230\241D{\035\222q\275\220:o\240\321\375fP\303\375&Ak\205", 900, "7>\250Ar\323b\375\207\336\000\003\257\204\244\203\0137b\213\042\260\134<\372m\333*\3515\200\024\211\313\365y\345\276$\016\276\276\253\032Y\321\237x\367\000u\245\026s\015\014\326+\347\245j\251\221\236", 64 }, + { "\234\012J\305\000\361\2322b\357\3757\252\2230^Y=\310\353|\002>\013\257eF\230\200s\275V\214X\222\272|_j\215", 40, "\266\305(\042U\226dza\035\006h@\035t\335L\247#\360IqL\260\307\347\2761~_\316\032U7\206\255_\222\205\301\207\324\325<\222y\373\335", 900, "\373q\021\255\334\2365\216.\366\206i\034\217\256\227\210\3675\314\274\3716G\032\360\030$S\270\313Y\314k\022y\2272M\033C\277\003\221\334:h\001x\306\302yx\221\217\016\277;\012N\261%\211\240", 64 }, + { ">\346'MZ\252D.\350\326\241\240\2335cH\334\261f\371\224\236\032\375e\312b~\0165\324[\012\134\215=\277$", 900, "\027@\215A\225!\233*\003m\364\006\373+L\031^\007-l\010\242\377\242Y6aa\235\313\265\260\262b4\325\305T4\203\011\315\320\336_>\004\342\264\353O\351\266O\226;\313U\214\353\362RI\277", 64 }, + { "\223)\222Fg\257\022\2141\375\232Q\356\251\270A\021\237u\213C\010\371\243\250Z\233&\002\334-|\3267\340\026\354\276k\221", 40, "\243\370\024\263dz\312\234+\326\225\267g\254\317\205\346\350\303L\311\026\225\024\042\20679\266RG=\022\273\276\021\342\324\336\314\353\232M,M\334\025T\035\340\210\225\357\316)\374\265l\031\215\222\011\201K", 900, " \321\337\221\312.4*\351\042\242\026\134\221\002f#u\342\266\033\015\007\335\230\205\037E\016\324P\273\013q'\210\002\344AE6\206P\323N\221\260\362%\346\301t\246It\230RY\366\020\220\334K\017", 64 }, + { "V\215\330\206\025D\027\363\346\134\010\376\201\305\275_\366\034\344i\231\017\236\007\006\330s\351\033\336\011g\325\037\3173\023", 1000, "\211\272(\272\325\230{{\033k\220\260\341\026\225m\365\201|\276)\374\355\255\221\223\352;\235M\001\010\006\023tE<\340?o\001\246\226\232\012\343\306\234\001Iq\371\373r9\021\032\016:i\277\351C[", 64 }, + { "d\211\205{8\004\024\223f\011\313y\323\344\034\326\362\304X\320\241sG\235W\201\352\340u\215$\271\330\320\376\267\237 \324s", 40, "\310\034\021\375\023\330\206\027\323\1773D*N\003\317", 1000, "Pf\365\012\011i[?I\015%\343W\233\027\345\005\345\344\024\271\203\355\311fS\212\012\3022\021k\366\316\200[\250]\377.J\322u{\341\313`\323.i&*\037\327(\325\237\372\377\015)C\3507", 64 }, + { "\263\011\250\275\025\371Z\0101]\350mf\343\257p(\232p\375\013\350\2748J\327\024W\310-Xo\033.I\213\263\307T\350", 40, "/|\3329\253\374\350\017{\246Y\213\340\232J\226\261|A6\2306\220\267", 1000, "r>\177\026\256\271\343\015\236\212\217l\216R\0140pA\371\321\027:<\005\270,%\364\263#\221\274\344{8(;cR\346\302,<\035jG\247B\242\213\301\310\334\025\257\026B5[\023U\235\231\021", 64 }, + { "6P\203\023g\301\004\023\216)\306^h}\224-\020u\277\202\005\215\326q&\301\305-\001\313DU\343i8LJ\261%#", 40, "H\373x\252\220\007\246\251\353b\013S\223\314\364\017\305\326\341\347|\003\361\2411\215\363\2177\362}\333", 1000, "\035G\260X5\372\306\321\216\255\336\177\226.\2416j\302\315\220\270\2442\343(\236\017\376t\344\377\355!y\236L;\352\200\2603e\255$f\305\304\025\024\034\320+\000g>\371.)d&\201\225\211\001", 64 }, + { "\275\267\241\311\255\003A\347la\224=\205\012\312\320\315nNQ`B:8E9\257z\261\210\251#\003\321\007\360b\210\352t", 40, "\326\364~\371\340\012\011\247\221\223\373H\221g16\321\317\335\271\264\263:\217\201\373Cy6\344bG\315J\376?@\353\341?", 1000, "\334g[\011\227?\316|\030~\233Q\030\326\237 \244\376\016\026C~E\032_\022S\214\317\331L\270\3726\030\306\333\344ce\006\016\371\254\251\254m\254\225\305\277\301\000\257\035\363\340\321\350\211\332\000\023\304", 64 }, + { "\313\260\003\264?r\237\205$\220~n\016n\036\252\311\2724\241_\356}\362G\340K\373m\034\233\362\000\373\2329\204\253?q", 40, "\213\252\265?\016+v\221\020\234\261\012\254\305\200\326\027~a[\252^\024\350<\334\205\253%v\362\277Z\327\356\305/\253\215\010\261\221\276\224\306\355\237\033", 1000, "O\257}r\305\306\214\240p\023N\367u\336\275Q\340\011\005\377}\001\203\231}SE\221\303{\251\310\027\200\326\026\300\204p3\2726\212\224\355\237u\200\233\004\215dNd\243~\254\216\323\361\201\233\220\277", 64 }, + { "\217\252\036 M-\337\272Pzu\215\221?!\253\134\220\3331\320\352\2520,\232z\372\304\3133X\320\270ba\042\363\222\335", 40, "\331E\026\277\027J\200\301MA\345>\306@*L~\347-X\242\361\035\042\251\230\177\334Q\235\330\371c\322\300\242*c\322\364>|\250[\326\350\022\241\216\303\243\221\267\206\253\225", 1000, "\312G{\134\201\277o\201EE`\260E=~dQ& \212|O!\2507\177\336\274\220\0060G\354\316\006\243o\254lC\231\371\002v\004\013\234\251;\361wZ\210(JFj[\210\360t\263\363t", 64 }, + { "c\346\307Q\376\034zU\020%+\207\274\361.\222\231W\233\034\024\371\302\335\243\214\034\215\244\0076W\3629\367e\233\031Z\032", 40, "\042\006\220\030}-~\351a~\0349\354\270\336#c\301/\347X\014o\256\265>\357\004~\002\261q\215\012\042\025\370\260Q\236\324\262\356C\207\010\245\376*+\031P\320j\277.\234\231\377~+\003\022\356", 1000, "\233i\253\245\234\027Pe\201\215\321l\262\350\352\271\202\232\307\004\000Aaj\327W\265\372 \210\211 S;\037M\037/p\341\267\246\017\273R%\003\316\313\226\342\365\012\347\000\274\001\331\022z\313\2502\310", 64 }, + { "'\241\373B\206`\215\306\266\042\273F\242\205\356L\323\370\370N^\332\331\312=|\015B%o\004\337\361\346`\372\001\325\314J", 40, "\273\037G\277\315+\250\305\332`Q}ou\247\2227\357\012\336\255\366\303\027\330\247N\262\212n\277\213\241o\0010\231Z\210+\312\277\021\246\010m\211\377\001\376\325\234\303\033W\3723\222\240\351&\215\005\214\220K\257\3311%g%", 1000, "\276\005n\341E@}\262\034\244t\311O&\246;9s\034a\342\211H\004\275d){G\013\374\207|\271\023\316\303\365\337DdUY\337V\0375_\320\221\337c\202Evx\024\032\266\221\274\213\031\025", 64 }, + { "m\134\004\204\357\247%}5\327hN\356!\226\021\240\014\006\222\300\202\233H\366\245\235`\263Ua\000\220K\361\222\315\030\030V", 40, "Q\241\243\224|\243\305\211", 2000, "\320DN\260\222\254\336<\304\3538\324(\233\233\242\274S\372\224\216]\267\042\340\251\375S\213\335\217\243\3523\356c\325R\255\011\002\347\022\236fb4\242\363~n\301\226P\255\237P\030\362\324\252$\372\204", 64 }, + { "\342\007S\226t\2532\237\254u\361MMY\246\177\214i\256\343M\246\362\204\355'\335#\264\276\315[\321\236!!G\134\273\217", 40, "\246 y\253.\353\205\022se\355\015\273\352iI", 2000, "\201\303L9\227\266\301\245\372\243\036\235\016@,\027\370\223a;\331>\271^9\342P(\003\344\227\265=\032\033\022\224\0165\337\002\375>A\316\203<\222mp\016\0243\3068/\353\367\306\270\306%\177H", 64 }, + { "/\252\340\020\222?k\371?|p\371-\271\012O\002\255O\316\240&\303.\226U\204\347Zp\352\355!X\221\225\034\205\355\331", 40, "\241/\342\261\015ZAZM\217\316\374\357\212c\330+\203$\375\255\2075\341", 2000, "9\213W0\242u\022^\357\327Z[m\023\177\310\237\346J\340#(?4&\031y\310\005\34293\232o$?~\200\277O\255&=\360x\310\336\304\314Y5\214?2\313\034(\312\375\350\012=\334\263", 64 }, + { "\2058\365\033v\273$a\001\305%}QW\037\376\212\377!\005Z\347\366\375\010\253t\032\240\012P\247TC\267\330Y\335\206z", 40, "N\027>D\017\2778\324\346\012\264?\222w\276\202\207#\367:\206.\0313E\363\330\275.\265x7", 2000, "\254L\354\232\275\274\246|\323\213\236X=9'\332\233uX\333deG\013\217\262y\223\314\007\350\331S\244\356m75\016\015\314\331\334i\350za\010*\360\373\206;\272\003\336|\007\226!L_C\252", 64 }, + { "H\004\267\271\232\367\366y\362\342,\221$\037/82, \256\014`1\226\215\035\303%#p5\303\015\376\333\362\371\352\342\310", 40, "\022\3154\234\374[\232 \030HA~S\321\207\265\272\330z\236\356\212\360\236\323\215\373\231_\273Gk\220\256\331\264\005\230\267H", 2000, "<\360\033NOuN\014\207)\325@\302\0262\210\355!\367\033\302\253wN\372\370?|\217m\215\234\242e\243\004z\010:\330\032\315/y\326\213\267U1\362\242O5_=\264J\253\377\364\032\035W\375", 64 }, + { "R\225J\021F\232\376(\260\300\0304y\230%\327\352%\352\204\211\013\362\265\375Jc\0326A\206\0357\042\005G\025\354\253\006", 40, "\232\212\252\221\374`\030(\227%{\023\327~$BM\376\226?\177T\3368\353\214\321\216b\367\353S\366\042\177\330;\341\230\353\214\363\235\324\005s\234E", 2000, "O\021\336_6\247)\246\005CX\031\302\346\241\035\365CQ\310\037\274\265\377\247\235\257&\254J\315\250'\210\356hl>\027\246\013)\350p\004\267'=\025\236;\220\002x'\035Ij0\373\265\013\357\023", 64 }, + { "\374:\010\203(\0329\201D\346\246`\372\311\221\036C\256\030\024\335?\312\277\340l\344D\307\254\246\342+3;\312\301O\235\303", 40, "\237\233\317JL\336\027\026lj\264A\012)\005\225\210!b\267fn0\264e\2521Ko\235zd8]\031\213@\230T\3726\256\304\213K\211\231s\307\015\031!\237\020\233w", 2000, "S2\030\011\244\331Oq/{\000\330\177v-1X)\207\226}8\020\032H\310\000\215m\214;\011g\215\233\033\000\222\201\317c\237\2358T`:@\234\316\034\007A\337^\235\315lW\256A\214\237l", 64 }, + { "\270\224\207\301\240\001`\311\327\371\211\2550\254>\220%k\025d\306xg\250\276\322\245;\326N\237\311\276-\372\321l\214\321D", 40, "l+#\215\304\301\264\331\303\363\021\304\237\366gT\333\340\240\302{\200\370\207\221\205F\243\375t\357w\303<\371GM\237\006\352Q\344lg\266q\020\223X\274\023>\302\007\371CI\240e1U&u\223", 2000, "\017\360_\264\037\250\221\031\134\274\315\265\177\377m\355\205\246\202{\016|\214OI/\327\205\270\017\220G\3402n\014\233\236i\017Z{\036b\356\340O\033~\037\362\306\253j\324I'\265L\211wO\000\237", 64 }, + { "HU\270>(\233{\312\014\211\005\242\206\341\027\033\347\217KY\260\231\255\010\207\340\030s\037\340'\031\003\231\267W\031)\324\270", 40, "\304\232F#\277'\371\351GwI\343\233\374\2569\004Q\336\322z\305'\243n\270\023\377\330h\375\235\365F)\244yq\027\276\223'*\033\311\362h\221\322g\300\356+\241\300\365\301K_\231\363\005?[L\374\227\255j\216H\347", 2000, "\377)\253\322@\211\324\134CI\333\034>>m\374\270\207\375\025\372\367$2\235\337|\331t\251 \244\370\271F\012\341\250$\0221\210\276 \026\134\031\224\360k,8\034\262\013\360\225\260\352\031\240@\303\243", 64 }, + { "v\014\202\367\330\015\0016v\220\351\311\003u\263\236\205\251\334\260\257\203\020\300\204\332\245\257-\350\3476\303\325\377t#<[%", 40, "\346x\031\351=\212\362\002", 3000, "\236f'\326l\345\210x9\310\206\304Qb\247\335\351\246\310\255\200\007\373\301\272{Z\360h7W\005\355e{n\312\226\203/\357}\332o\314\2270\026'\357\342\012\331\376\000E\337U\374&\256\367\252`", 64 }, + { "tHN\335\351\026j\345\347\265\303js&\276\000\027`A\251\242\263\016 #\267\313\272\242\275\024\3430\333ah\276\342C.", 40, "\334\020y\342a\350!Y\332p\012a\247\217\223t", 3000, "\343ur\205\201\3444\263\011\373snRl\207\002\211\2332\260\302{\022\250t\210\250\030\177\277\304[\315}Fzi\333\210\303\234\010\337\244\216\360V\007*\305\243\327\371\007[\330J \027\257\1770:\001", 64 }, + { "\020((\271~1\371\354\134\256\025\362\323\332\010\200\010i]3Fw\003\324\237\250\301\247p\311\240\342G\335\255\006s\265\351\373", 40, "y\365\011\223\001\346\262\360#\245\027\313\026i\213Q\372\031\005\017sr\242\221", 3000, "\042?\357Y\375x\355a\024\200\003Y\245\356A0\267k^\203 \224\232I\260\304UQp\355D\233\253\326T\353\271\022l\377\247\300\307\351c\177\233v\002\266\336>\035\2711\307WM\321\377\000\371\007D", 64 }, + { "J\236\237\344\246\252\331\360~/\033\032kpw\321\235\036-}\233)\250Z\017\316W\3158\042\334(\216\227\373\324V\374QL", 40, "\216G\344\346]\013\356|g\005\363k\250\360\255E\225\263\327n\332\225\253\033\364\222.4#^-\355", 3000, "\324\224\245<*\230=\324Mf\352\224:\004\024\031\255qI\327\377'\327\223F\007\264v\037\367p7\301\366\253\225\266y\320\025=AZ\373\310\034\326n\311\272\270t%X\253\232\372\357X\270\205\201\376\036", 64 }, + { "\350\312\011|2E\205K3\036eK\177\355\265M\344\001\255\277(\231\376CG\301'\237\346pN]&\177\273\000R\015\336\353", 40, "Ui\256\334\260\242}$\372\237U*\265\020\023\264\027\247\367T\234\351MN>\0126lLv\360\016\223j\343\220\034\325\374\365", 3000, "#\012 \354\261\226\226=\251\271l{\001\013\301\260\012W\247\020\366\204*\341\352R\371\353\010\036V\375\037\345o\244*,\000\262\013Y\375\311,\033@R\3140\037\264L\031\360\020\354A\210\213\022\201\336M", 64 }, + { ",\347+3\364\305P\245\223\300<\323C=\213*S\373\0163>T\357\360\304[\202*P\004\004\224\33585\3249\332\032\253", 40, "Gs\271\225\331\274\026?XX\021\254\205\205Mrn\341s_\217\006\000\134\375:\301\334!\341\322\202\262\002\332\365\257O1B\305\376]\016\021l2\225\277\025I\012U\321\363\221\002\206,y\210\224\217g>\0258\254\261M\340\3714\274\013", 64 }, + { "\277\313O\320\373~\303\235\255\327\022\212&z\367\015r\270i\332A\222\320q\215\025\263\233\215\371Rc\337\012W\360t>\202\337", 40, "\005\271\372\326x{W\034\256\244\343\013\305\332\342\036R>\205'Im?z\350\014\006W\227\032\022\235S\352\025@O\036^\002\364\333G\373\242\201R\325\214\011W3\325$G\024", 3000, "\033\333ct\032Lr+\011C5\034>k5JL/l\003y$\225\022~3\347I\361fd\321\376\351\366\004'\365if\320\014\362\007\377\204\313\254\347\210]\033\331\025\005\243\255\271\037 \243\2633\254", 64 }, + { "\022 \253~\327\267\303s\016\037\331T\333zT=\330}-1\364\022\343\360D\307\377<\232\364Z\001\205\360\236\030\376\2163\243", 40, "I\222\331\177\265\220\372\015\351\001\220\213'{\334\362G\365\252s\201&#\263\357&\366D\302\023k\360#\2510bJ\342e\306\220\005T#\323\365`\013aQ%j\223\275\335|\363\200\304]m\212\251\304", 3000, "#U.\217\271\211\346\352y\3342\365DQ\035\374r\207\331\356u\346\211\246\255\347s\011\252/\374'\357\002\227zv{y\211Rz\300\206\254U\225>\207b\011\222f\313\005\374\202\010\272\313\032\242'i", 64 }, + { "\221\335\035[!\200\342\272\204\016\320H\250x\225\264Y\371rO]{\247I\316\020\314\376\256\267\331\302\311?\300[TGK\302", 40, "\214\217\316\227\270t6\374\010\211\320\217\213\220\023\004\305O\251m\306(\222\361\037\001r\3364\331\376u\203\344\273\342\266\224\201\215%\230=\235\341\331X\255\232\021\304\227\346V\340\331y\272\3321\216lKo\310\233\202\301\200Uk\355", 3000, "\222~6LF\263sIa\313\266\021\262\264 \250\012\2010\247\336\275\011zySN\270~\272\025N\025wT)%\206t\312@\253\352\033;Eby\270\231\025\207\362\363\356\3531\304\244*\364!\361s", 64 }, + { ";\244\030\035\035\032\256BP)X\202\277\214|]c\002\361r\214\220\367\037hU\347V\241\314\012\250\250\321p \032\254\335\031", 40, "\377\311\272\264\0173\245+", 4000, "\317\333,\233.\220\351\334\236B\341\200\252\021\306\254\001\355u\307\262\022\275_\236h\035\322|\370\346n\004\303\205)\037)\321\253\267\221\236\2446\252\226\250\334\225s\2761\334\244=\323\376\240\364\237\037\206~", 64 }, + { ".\362\232\346\221\3370e\363\2018S\366n\220\212CM\354K\015L\214\205\271\215\301J\003Q\240=f\001\240\036\027\363\245\210", 40, "\270$\3356\362\262.g\261\204\001\177tH\303\223", 4000, "\365S+K\204p\330\243\342\230\343\225\342\266\277\306\0113\001\027\214\326\2070r\334h\256\361$5O\033ze\336#\242\260W\321\311\211\020\262\342v~G-\223S\267\263\372J\305Kw\247\274\354\233Q", 64 }, + { "\221^\330\236-6\207\017\240\250:\317\255\035\234\362o_\344:w\334\236i'JH\304V\320`\255;\363\011H^\207J8", 40, "\305OM\233\221\204\0010\314d-}Z\376pSi\022\323\313\023\370\346\024", 4000, "\315\312\356\271\366\301\134=4\222\013qYj\206\352|\015J\312C\206\327t\305D\225X\324f\337v``\035u|\317\206\342\000\367E\233]M\372\351\134\304A\245\271\206~\301\362p#F`|+\206", 64 }, + { "RL\275F\026S\037q\0277\023\207\253\245s\301\363\002=m\307i\003\337\313\026\336x=\017A\212\343\206tGb\346,^", 40, "\262\215\200|\220`FH\353\321[\022\211\321\357\207\355\352\361LY\3416\032.pv$\202\200\311,", 4000, "\327\303\255\024\231\307\253\007\274%9\207\240SxB\223\037\367\203\246O\316\351\271\260<\312\223\305r\025\366(\214\276\334u\266\274\023}\343)Sr\332\206\224\333\375x\354\020D\243\013Z\374:\263d\355\230", 64 }, + { "zoK\020E\344\266\327\350\326\301\042ay\277/\027;k\036\210\343[\377\014W\307\277H#%\023d\323\255\373\3728\355\334", 40, "\224{J\344\244\356]\345\376\235\2521|D\210u\376\0337\367\245\343\360\035w\342y\351\340\030]Ys\320\3052H\036\253j", 4000, "kX\307\311\033v\211\230i\303S\020\231\313\334e\251p\010QnHK\261)\001W`\275\261:\347\345N\232\346m^\042\336oI\216\342JB\245\347W\227\234K\264\330\376\373\003\301\277Z\007k\311\003", 64 }, + { ";\346\033\200\372(h;\347\364\342\013\240\320J\254\311\313\326\332\207\020\012\276SlpS\221\206(\276*\012]2\264\357\353\333", 40, "#\233j\343\021\317\331\033\241\204O\326\207\375!\221\247<\271\237p\343R\253\017&\327\356\221[\255i\251.g\212Q\014\320\276~\244\005\3155k\251\010", 4000, "\276\001\247\265\317\006\331\235\337\310\301\212m\344\013v:K\337\134\360t\024\012\244\023\311u[C\303\324\033\351E\015]\234\363\351>}D7gL\324\364\244\306f\267\235\377\231z(I\214g\346\240\3447", 64 }, + { "}\251_'\352\042\262{u\213e\353\301&,\023\227\327\006\206\356\215\016\233\255B\015\033\211l\015\360\237\322\225\013zx|t", 40, "F'm\243\321/\261\3521 \366\342n\017\322k\333Q\026\010o\306\004x\254a,C\364\201\027\231\232\215\353\003ZS\227$Xk%\313\201tX\327\216|\275\242\313s\320d", 4000, "\217g3\243_\275\301\025G\345\354\363\253\220/\024lL/\351p\337\302&\263\011\300&\23191\345uu\345\301\230\337\362\042\360\352rZ>\312M:\355]`\360\273\205\223D \002\042\221\003\306tH", 64 }, + { "\245HR\177'\360\330\340\032[\203\254Z(,\272G\360\223\201\306\364\234'\010u\217\013\273\227\026\037\251\221\007\246 )[\235", 40, "\371\255\347\205\201U;\255\350_(\222q\235\261p\376\325\326&\203\042\224\3215Jy\352:\205\362\211f@l\221\015E\002P\207\252\200\233B\207\3329\202\042\256\001_\334h\023\001\003\374\216\237\353qJ", 4000, "\311\262\026\036\313\3243&UG\006\336\224\261\001\353\210\355\032\2372W\316Sw{\254\267\315\234\263\024\365\256\220\021\220A\231F\001A1\347\255q\224\305\220'[0\315Q\240a\221\236*\221\034\376i\313", 64 }, + { "j \331\356\021\266\302\373\305\037\234\305y\013\367\372i\222\236#\253E\221\215\222\022\223\007\203\134\207a\300\321\017\346\222?=v", 40, "\336\220\315rU\233\013\342D\314f\016\037\230\372\007'\003\361\037\234Q\221pf\356\017\203\010\264\321\370\211\360\251V\353\236\232l\220@\004\027\334b\366\265\006p\225JW\236\227\251fiN\232\233\200o\234|\274\015\265\317\001\200\012", 4000, "~M\276\371\346\345\324\242\202\212\337\025\277\227\024+\037\371P\263U\015\016\007\362\177T\370Y\346w\025h1I\307F\364\303<\023F\014\350\221\215H\276\353\206J\244kT\031r\330\246\016hj\250x/", 64 }, + { "\302E\227\301\254y7\247\337\332\015I\243\021\025-\320\361\315\262\377\327Q\277\367Y\203=\011\366u\362\006Ci\374\323\203B\236", 40, "\003V\223D\273\375{V", 5000, "\231\305\276)\251'^7\336\227\212\234\230\350\034\353\304=\215\033\230~\340,\261\351\317\246I.\212\023\217?_\225\012z\002\356\201v\215rA_6o\214/\264\347\006W:\006v\030\212=o\327\226+", 64 }, + { "4\314(\203E\260'\215c\345\331\341\017V\311\346\006;\013e\312\022\215\021D]Y\251D\227\027\366c_\276V\022\037\340\264", 40, "\2103\375Ru\276NAI\345\254\036/\252w2", 5000, "\214\345$\014\000\333\027\204>\326p\320-\020En\034\371+\207\023\327<\314\266\312\277\010\353H\2049\037J3\220\247\3302=\032'\205-}\005BB\372\355\371X\365\325}A\025&!.\311\252|\236", 64 }, + { "_[\347\031\345\200`\000t\302\207\327=\366\270/\322\350;\007\221\207A\027\256\250\364\313\355\370T\240\317Xb\224\363e\313b", 40, "\337\303I\267n\336+\240\134\243_\351\3100\317ZF\016\302m\263\220\302_", 5000, "\213\263Za\221\346\370\303+R\024\335\214C\222\372\332u\313\252#\347\353\006\332 \010\324\034\276\310\321\2165\2403\016\342\306\322\026Y\134~&g\367[\346\021t\221X\035\223\317t\270j\212\211\334\003Q", 64 }, + { "\361m\332Y\307\254=\374\376\312Km\012\013\312\012\206\210B\313j\227:\323&\233>\240\314\211\353\226%\322\035 +\346\305\302", 40, "\211\014jR\233\265\360\224\042\274\034\326y\311\310\200\016\376\356\301\216\205\353+6V\302q\276\247\253\240", 5000, "\201\205\336\014]\323\211\027\312]\276\307\034f\002g\035\310\214)\310d=\376\334\221\252\271L\014\307\202\373\357\226i\0365\210H\0201\260\227\277\2070\222\354\230\277\265\341\251\037\030?\270L\300I\342\030k", 64 }, + { "\302\265\353\372,\300O\312\032\035\205\376^\333?\330\362ZW\004\004\030\264\036J\255\341^b^\024\177\035_\0129\230\335\206o", 40, "\347/\326gV\324l\210\233\301\013\375\3151\314T%\271J\374\327\331\177!\035\312m:\376\247-\271k$JE\262\243}f", 5000, "\042bQM\317\245\256\010YW\336e_\023\354\372\206v=Y_\033!R\342\2103\331\374\204\034\016k\324H\374o\332\032*\012\014\031d\255k\324\300VI\351\244I\230\027\025\357G\206\300\000\222Mk", 64 }, + { "u\263\272CY\021`n\345\307\203\030\012\357T)\377\317\357f\025\361\015\337QM\253\215\367\022\217_\275a\244=/\205\360)", 40, "0M\352w 0\255\033\242penz\365\252O\327\002e\241\263_\015%xG\333g\344}\340\243v|\377\240e\011\354\203\316\352\377T\2143-\370", 5000, "49\310^\216\307t%\355\337\227\301\342\365\302\225MG\223\201-e\203\370Q\376\205w]\264\250)\010\002\367\213\303\256\363\265z\364)\201\276f\006\002\366\2458})4F\250\364\233m)\207 R9", 64 }, + { "6\353u\336\003\275APas\275*\356\210\325\270\274Z\303`N\022\261m\250\235\247\205\344\033\003\343\322o\000;\335R\023\273", 40, "N&{\2130%\355\335\335H\033\2166L\222\371o\374\246\012\033\256\301\235\271\314\345\206V\267?\013~\030\032)k(5\362\267\377#\276xRs\377\205\322\006!\225z\314~", 5000, "\256\213v\006\364ft\342-\254t#\024\244\020\015xM\036\337}\036\267\313C#*N\210\207d\351NG\037s\250\336\257v'\333F\253\244\242\207?\227\317h\337\025\344\2602.G\325:\214\337\373\202", 64 }, + { "\261q\320\011;tg\211\011\333\365\306pUw\272\271\276Tm4\370\373FXt\201\262\031\270\3704\177\0214J0\234\235\324", 40, "\316\264\004\246\371=\031\371*xZ\010\256\245*\355\022\012\260\231h\026z\214\363\277\372\250\302X>\016`\336\345\007\304/ >\234\217\330[\362Z]\343\275e\341\257t\316\232\235 \320\273\004f\261$5", 5000, "?*\034kY\205\002\241\226\003-\242e\003$\020?\345\005\311y\237>1\241\3324s\363\230\356:\206n\042\257\326\366\276n/\177\360\217\322z\335\016\203\353\356\037\213+iH\374\350\371\346y{\177\304", 64 }, + { "\027\252\311\265\024\350\347@\042Uh\245\021_\024;\241\265\2175\345hmj\365\325\300\362\000o\205u;x{cX\313\004\351", 40, "?\177\260\340\0031\020n\352t\261\032\361g\275\207`o\246\031\226\020\361$\352)oN\334\330,_S\2148\005E8\016\263\354i\243\322`\032\024w\307\225\011\275^i\312\032Y-,;\333c\375aX\002\214\327w\374\253\240", 5000, "\252\310U\245\245\134N\247\374z\317DEN;+\342h\231n\000h\015\032S;\333\245\244\201\340-\235\015\332\015\277\253\377\200\271\203\223p\204\252\341\264<\231\134\300\224c/\366u\253f9\337j\200\224", 64 }, + { "\001\257f\007F!\225t\202w\366\277\211\232 \202\246n\204\200pgdp7\365\033#\221\341\023\310\230\216\013\245#\201\365\274", 40, "\372\277\012\266\031\334\375\215", 6000, "\273HFL\315W\015\217\2275\377\356*\225\2074\351p\227\035\365\271\016\312=\373\220\251be\344\345\223\363\261\035e\330\2327\377z\226\355\015\242\314V\326\331Skm\311\323\252Y\3536?.\334\013(", 64 }, + { "\200\313\010\003\253\353HE\362\346\303J\205\346\232R\2477C\217\312&\023\244{\324A\310\2625\260\370\303o\353\360\262\267\236y", 40, "('z_\337\037M9\2131\036\204r[i1", 6000, "7\134(\341\220\2024\317Zm7\323Jg\267\274\376x7\377\253\016\254\366\213\363\24001\236\245'dr(\303\311#\015\335\223\273\342\323\353;\372\342\252\026\372\023tW\241\240\364\357\306!\3761\201\010", 64 }, + { "d\345L\034\356D\017-\277,\007n:5\226\014\227\210jN\000e\020\307C?K\267\323\010\011\257\347\277\350\032^\017\227]", 40, "\3435\273ab+KN\264O\201\211\242\325\251\233\311Hi\363\007=U\026", 6000, "\016u\265\242\011RP\313\341\316\345\370\303\365\327+\225\205\352\312\221g\001/\266\027\312\333!\247\361z\277\336\303\000A1\3715\341\262\374\224y{\223\013+'UB\242u\003R\217\311\316\042N\231\265\033", 64 }, + { "K\264\033\201\243)o'2\253\305C\007\355O\353r\310h\321\256zd>.\221\0330\244j\3349\015\240\225\317\347\344\260\220", 40, "/T!4a/\015v\243}\342\211f\274p\314q\267M\2352v\251\236r\015\327u\211\343\212w", 6000, "\037\211\024g\307|V\037\007O4\006\262\227\335\3174\306\011\015\230\277\022\207\374x\014\234\234_V\026.\352\232\231h,\236\205\035\333\271\227\335]\373\020\320\262\263\216\372\243_lA\244IEK\251}\272", 64 }, + { "\003\006I\015\227\203\320\264\024k\261\002\261k\375`\001\247\333\260\307\364\351\217\3228\377\342)\243\213\3446\351\266)\355\232\353\271", 40, "\245\033r\214\247\344II\366\256@\036\015\015{\260[\270\227\253\254\350\265\355\024\247&g~E\301\015\027\006D\346`\243\317=", 6000, "J\334\343\350\306\134w\367\333\377\220\004\201\025b\236\245J-\005\370\004\235[:\3718\222G8\027\036\215R\021\317\012\013\321MF+R_\341\004\206#\230\134\346\025\353=\026\200\216\256\203\342@\344\251\244", 64 }, + { "*\266\352zh\265\215\235\307~\357~&\262\354\232I\235\376\233;\3240\273r\243#^\003\354\0300\267\325\035bB\346\355\274", 40, "\270\274{\245'\246\304\0049\366\304\300\227^\302\024-\2140\261\236\323\273%:O\022\013\250I\354\275\223\372\037\270\177\301\304f4\2508\252\247\005pb", 6000, "\2323\251\356eT\177\244\020\004\264\251\320\327\0007:\037\322\227b\253Z\010z\305\204Z*\303(-v2W\266u\001\256\373\352~\017\215>\316\340&\333\331\206\030W\366\336D\3000\235Ma\270\031\003", 64 }, + { "\257\247u\250\333z\015\007\221\013\031nz\017\272\216C4I$\361h\310N\324\260D\223|\213\252\237l\007\300\361\2308\033\265", 40, "\300\351\273P\263c\222\222=\356r\337%\037a \226\002\355\330A\207\033\306z\214I\374qc\342\347\251Cp\237\204\322\253\214\010\221\361\324\351\314\030\0330\266\202\002=A\320D", 6000, "A\371[p\255$\364]A\313\177\322\346\354\270\250h\364\347m0 [*\376\213%\211\025L\263!\224\307ZR\263&\202\324n!\223\3475\374:s\2036\225'\347\356\025N\207\375\337r\011b\037\274", 64 }, + { "\251(R\225\234\026\3011t)IIC\345\235a\345\203\270\201\226\235\000y\024\356\240D\325f\210\200#\332\333\277\266p`\254", 40, "\375\010\333?yf\325\367e\202l70+\257\312\3228CX\2546\235q\203\245\134bk\316/\202O\0152\320D\002\3327\037\013\007>\222\247\351\334\2152\316\310H\304\251\200h\230\360\277Bh#D", 6000, "\030s0\2213\201\230\035\216*s\037\014}d\272{\006\372\177\237\036&\246Ylz\255\345\373s\042\333\034\005\244\235M%_[\026^\361\217\3119[\030\004\311e\205\316\003@\010\322I\017A%\246\370", 64 }, + { "\012'`d\013B\231\266\374\302\004\336\016\202\214\333\0120\246?\302\270a\242\003\334\343\022\341\241\352q/\273\323;z\012\355\306", 40, ")mKR[\252\253\024\321\034\236\033\306\243\360\320\331\300\261\346W\361_\263\226\310\013\346\010:\037\200\333\3300\313\255g\223l\177<\306S\216\325\346\335\027\244s ~#\256\224#\011\214\342G\350\015\021\315\307\335\214\027", 6000, "\023\220\224\005&\237LK\2207\363\221\020\037dL,\0230(\230\017x\375*\272\344\031\351\247\012|g\364\342\022\220\2566\221H\020\200\350\211\011I2\341\3277\3609\250\3164\332\377\370\241\227'\243\340", 64 }, + { "\262\362R(~\026\210J(H\232\034\237\314\321\227\376\272\252\242\226\0027uC\035\042\242R\377Pl\016\220T\242H\030i\320\215$\254`f\333>\024(\322\364H!\0008NK\000quQ>\027\363\013", 64 }, + { "\230,\310\226\255\024)\207\357`x\314\210l\252\361CC\240|\363t\322X'8Xbz\231\245d\000\003\025]\260;\350\245", 40, "\255\007Y\022Gk\265r\304]\207W\352\027TC", 7000, "\355\353\317\011\342\342f\336v\370\313[a\363\352\234?\371\234\254*\017%=\032}\257\375<\355\000\232q\305I%\327\017\300\032\253md\250\037\032\306\241\320t\211+\231\364\247\375\314[\204'j\322\272\022", 64 }, + { "B ko\350vU=\244~\353q\233\037@\022\215\273J\313\235\376\001\241\237\341\330\000\310\371J#)\335\262\245\000\207\325\023", 40, "\320\265\271\302]5\246-:J\0011Q\355#\373\271]\236;:l.\244", 7000, "HS\236-\206\233bC-0\327\311'=\206\014-\343gW\021\232P\246L\020:C\226\252(,\134M\240FIa[\260\277\225\015\275\376\000\273X\213\033p\241\371b\212\356\272\316\253\204LuK=", 64 }, + { "\210\323\042\001Y\3122\230\004\020\236g\001\016)\260\323.\204Xj2\360\320\343\357aW\214n1`:\277\352\264\376\356\367\227", 40, "X\014\020\274\005N\342\004\211j5=\2640\262B[?U9\334\020\277\341\255\234:mzGD\270", 7000, "\035$\354\365k%\310\367W\3049\001f(\207s\242\376\026\361v&\226\042\361\247\201x\322\212\233$\210\227\214\250I\346\236p\370lp\012a\215\351\217\304:\326(1\013\017\257\243\352!d\261j#'", 64 }, + { "~@<\225p\276\020\313]\245\331^8\017\204>\310\231E)\346\006_\362\236\331\253}x6\316O\237\271\216\000\253\304\371E", 40, "BD\027\320\345\300\267\013H\342\332\216.\227\247G \212\367\207\017i\365\257\212\317\333\351\217<\361b\010Xy|l\037\216^", 7000, ";t\042r\011\377\204\033\036\235%.\271~\235q\355F\264\215\236\250w\022#\255u1\252M\376\267z\337\004\236\346\203.sqh\223\025\002\033BE\204h\317\317x\026K\332;\372\357G\203\362\346\275", 64 }, + { "\027\231\333\257\306\3570\325\033\266\036\204\206#\030\006nT \255\356\277B\331\201\340A{\212ttQ\177y\374\353\254\025\274`", 40, "\321\005\246\023\042\306\027\177Hv\351W\025\0158\315s'\022KX\036~\367/4\247\223\377^z\324_Q\233\206\023\355H\265l0RkB^\241\207\250\366\240\320\340@\376\362\270;\267#\363\277q=%\365I\261\310\3268\201\324x\257\350c\250\256\311\355\2006\366", 7000, "\350\312+\222.\134\265\366+j\362t\042\317\014\307\2450\236\361/\207\324\362\222\360\262Q,I\254s\370\277w\346\203\261s\302\376\300\030\321\224\327\003\371U\016.$\274\256\362\004\016\312A\236O\242i\235", 64 }, + { "\035\376\031\3777\014\372b\372\316\207\314\334\245\242\374\022\233v\226\227A\303B\245\367\006U\032R\006\032\357\205\345\275Xe\344\001", 40, "v\277\337qw\301\203B\207\372N_\216\332\311p\0101\134\035O\232b\314\331\362z\036\005\327\205R\261\024&dSW\255\252\370\315UY\2716\335-DH\260\222\3627\371o\217\313\236\323\365H\310@\226\032\031\256\347lN\302", 7000, "iz\243\257\217P\205\341\3410t\250\341\244k\351\022\334\311\347I\221\216\244h\352\242y\355\253\374y\323\237g3\235J\232D}\333\310\217p\220\231\304U\026Kf\350\013\365\251\042\275\334\306e9\234e", 64 }, + { "so|\334\340\356\262\312\334\317@GX{l\234\03104Tw!'\332\237a\270\271\0246\333\31447M)3?\036\357", 40, "\357\2626\371\375L\006Q", 8000, "[\347\034s\255S\2004\012\233*\013c_\343\277\213p\314r\274@\373\230\252):;+\007\232D\276\3402\372\300\330\3713\307\227\303H`\376c<<\306\252\251\0241]u\256u\272U\332@l\330", 64 }, + { "\222y\345\357\037\366\020t\321\270\236H\262\273]\244@\253o\365\224\376,tN\245?^\216\034{\361\240`\022\001Q\354\362\357", 40, "\356\310w\353\307t\362\346'\204\202.\277\207\310\341", 8000, "\350\247\235\274\265\301\315\232Fj\366\3460\255\225*C\203G\033\320]\311j\273\264B\276\202\370\274&O\303\374\327$\373\023%7kX\0061\212\274\252\3371\332\213\232\313Cn\353\364U\326\215\352\347*", 64 }, + { "I\221@)\032\264\220^\211\253\025\222\202\236z\335\177\333\225\247\134\321\377\217\321\224\024Ve\304\364\302G3(3Y\266\221\020", 40, "%\242\270\266\326\262\215|\351\353\370B\336\312g\222\343\227\366z\341\036\207=", 8000, "\234D\201\323^\351\320\034\2358\026\360\032fU\357\030\234P\354\247/N\250J\355\011&;\277\134Z\024\343o\262\270\206m\253\254\366\375:\265$\034\321\200\011\261\347", 40, "x\373\357\225\035v\364\3700:\356eB\206\206\266\037L\356ip\301@eI\027\371\253X]]\326$\245D\357\322\007G\214\347\374\350~@h2o\021\001\251\247\224\030\250;}a8\256\247\005$\206\242.\212\261 ^\341\004", 8000, "pQ\266K\355\240CT\242N\326\002\026\241\300w\220\240\026NkK6\201\010N@\177\315\324\276\214\210\333\200\240:iX\216\206\252yy\322\333\330\317_+\235\273\317g\220\134 \203\302D\254$\360N", 64 }, + { "\207\356hc\332\311\262\221\017!\224L`\234\322g\242;\311\030t\240\371\247\304_\367\262\204xz=\306\351\367\007\3268\002\022", 40, "\024\231\371\007*\236k\272", 9000, "\232\035\200\0108\362\327\310\016\210h\244bi\365}v\342\243\034=\366\313\310Is\364\332\360\216\247\231g\352\322\364~R\360v\370\225\225{\034\007\325\305\231\025%\327O\231\272\3101\011\341\356\357\322\204\243", 64 }, + { "\347\232\037t\232\325\134\270\246\231:\000\216\341\364\327\243\233\336\374\233\254:f\234;\261\023T\211^\023\274e\277\331\224\254\361\022", 40, "\231\374k\017\264\022Z\310E\224\373\215G0\323l", 9000, "\242]\315\226Pn@\346\220\257~\134\340\031\325w\0057P\354Z\227\213\004w\255\215\244\305&\020\324\220`NY\262\227B\261\357\337\347\035\35701,jH\237\031\0423\262\321\344W\307\242\042\204\370?", 64 }, + { "\351\222\0071B\005V\022\340\224\323\035\331ry\303\333\214g\374WJ\346\310N\034\027\371H\021K\261b|\212\221k!\227\374", 40, "\235\3570\3671\254\004\034^:g3\274\230\042\314F\310\274\355\226\001\253\315", 9000, "#\335\027Q\374\272[\264x\366?\330\347\372N\366b\336\306[<5\314J\333%\223\321\016\266\333x\251\036W\266\336v\212\332\333\3400\006\302 \334\370{h\015n\374Q\276\026M\244P\026\253\352`\206", 64 }, + { "A9\335N\304O\264hp\360\036V\277c{\356\037$S\331\272\246\023#\254\341\345\252\372{\213q\005a\022\202 \336G\032", 40, "r\333\017\004\376\276\347\351F\362\241\221\026\211HC\374\032\022\004\0101dU\326(\343*y\2774\370", 9000, "cux \267k\007\254\005\211\304\235G\336\200\207\003tZ\010 WP<\360\3709\037\367\233\377\222\360\210\325Q\351\002/\325\134\234O\275~\363\355:_\267\006\316\362n\012\225\265\210i\2451\355\327Q", 64 }, + { "~\327n\210\367Y\1346o\001\235@\031\265\026\331\247;\262v\347,=\310\212}d\327A+V\372\246\011\034F\307r\021\236", 40, "=\232\244p\320Q\003B\224,\020}\340\267\270o\2408\321\256\261\360\332\211\346qM\345\276\004lS\270\010\336|\274\215\224\257", 9000, "\255\314\336\220vu\346\367\321\212W5\010+J\134\275\310\202\350\334\214\252,f\205t\2525\252\344\344\023\277G`<\353=1h\257\326U\025SY\027\352 x\340\026\272\363[\016{B\364T\347\337\025", 64 }, + { "&\007\346\021Eya_^(\217&\372\222\020X\246\367Q\015o,y\240\273\357\352\345\321\005\264p\031\034}e\244\274\003\247", 40, "\341E\304{\336\344\364w\231.Q)\334c\3024\305V\375jvam\004:\235\312\305t{T\205w\313\374\021\345\251\023l\264\036\325u\375\352\3710", 9000, "M\2779\257\330,\023S\354jg\345M\306tTW\036)\015%{\313\032\005\261_\377\370w\220\360N\266\366H\222U;\032`\031\261xzOS\356~\327\232\030\017\321!\334.\216\271\203\205\246\304]", 64 }, + { "\214e\042X\244P>-7\351\310\252\242\311\223\032PFX\215,\333\313\036N\0322\322\325\3340\366\242\226\366K\345y~\306", 40, "\134\307Ui \271\307\301p\225)\267\024\373\303\363v\214\002\017\270#\300\321\024e\025\371\025\305Y\252w;;\327\357\337\351\2130\244,\252\005\316D2\375\261\034^\367Ar\002", 9000, "_\227\217\237;:(\330\254\277(\202\301\303W>\346\372x\012#8\272\244G\371\134\214S\301\252\010\241\315\313\362\027\035\203\023zUV%\347\337\354,\225\375\345\275e]U\234.\007\023-\320o\272X", 64 }, + { "\254|F\033\270\264\331\247\266.9\233\013\212\036\3258H\203}\237\003\267O\325\317\336\375XC\220\362n\241d0\256\012E%", 40, "\340$\356g^;\224Y\340\2251\367\212\235\134\264\216\316\023\316;s\3010\272\340\242\313\244\206\310\354J\305\264\021\334\265\216g\331\304E\212r\010\341\224D\252d0\333F\246\212)\220\313\007W\2412\323", 9000, "\207w8\211 T\261\360\276u.\263)\252\303\233\270\317p\352\213G;\021-\025\2572C\250U\260\031\263\025?\343\216bs\042'\341[\007\242\337\342\022\374\207\237L\266\005\3305\305\366\335\231SDx", 64 }, + { "\212\341\3665{\373\267\340\360b/\234\313\327\235N\242%\334\246\274\216\024\350\304\134\271\321\0316P\013$\332\370\346\010r\351\326", 40, "\372\263P1\315\027\012\301u)\234\334\365\211\333\310g\303\203\240a\312_\276\2755\333\324r\275l\014\2311\356,\017\272\010t\033\354$\010\347`\321\235A\221\311\205\327\276\310\257\305h\262\245\315\204\366\334\013\313\363\027\303\216\202\015", 9000, "\257\316\015\202\024\245\365\303#%\303\351L\327\332L^\317j\370\250\261\337\177\277\276\321\302\246i\275\270\324\311\224\264\252\024\346\262Q9^\001\205\223l\250\343\007+\372\344w\270\350\372\350\326K\015v\346\014", 64 }, + { "\031tE\340P\214\336\351\311:\226@\254\206?MP\247\224d\271\251\266y_\036\371_\134\275\227\333\311\235Sb\307;\272\024\303\302\373\007M\3414\037", 48, "\021\201\255\007\253>\337z", 100, "\177?Y\235<\025\237c-q\203\035K\253_\276bE\236?L\220\016\237d\317W\376\337C}|\370d\000\004\304\331sJ\264\251\345\322\011\033\352k\341\272\323-\003\313ss\020F\201\021Yy\274\370", 64 }, + { "\361\225EV\034Lo\324\302\177\265\004\352\340\300\271K\372\263'b=\021\014<\244\035I\231\276\270\273o#\334P\227\317\364\026W\316\267\033\030L;\331", 48, "\347\276C\014\313y\201\013\217\230|\315\356=\256\213", 100, "\373\302\027\231[\013&'\375J2)\3601\356\260\356\226\377q?9\342\027\023\255\346\2219\302\301\256k\004\224\005\361\027\301d\255\322g\375\177\033\302\226V\232Iu\300\000W\364\010'd\033'\002\271\243", 64 }, + { "\232)\225y\274\233\203\256O[*\212\311\217Cr\005\332\031]I\212H\327\370e\203k;\340G\263>\321x\214s\350\262{\276\042f\370n-\325c", 48, "\317\277C\314B3!\207\217\214Y4m#\202\036\011\264\206\310L,}\225", 100, "U\263q5\313\207\331.v\021z\020I\204g\322\255+\326<\304@d\256d\020\203\205\342m\237!\337\005\261\353\302\216\215)\334\235-t\203\303\324P\3069d\314\253\301u\223\223\303\224yA\325\311\206", 64 }, + { "gk\0051\366\256\225\374T*:8\016\307\211\042\332\356\020\206?\014\353 UK\256\300)\371\274\356c\374\250\042\311\377\275\242\334\276\247\311\015\001\321g", 48, "K\346\020\021 \322\220\223\362\0178i\341\312b\223\200\241\310\011\027\020bR\343G\305\211\220\340\315\004", 100, "\3516\020\200.\042\206\302\212K\340\037\370\271@x\0013\251\301\012k\272\352wA\216\006y\270%.\343?\341\237\253A\236\232\377\217\240(\002W\345\311.Z\327\224K\304\015\251\200\252C\021\316]X\307", 64 }, + { "\241\243\332j\033\357\354S\364\247\334i\302\264[>8\351\326;A\030\003F\270\016S\320\014*\013\3555\320\270D\226\371`v\003\357\331\326\306\231\311&", 48, "\026|\301 \027`\301\032\2317\230\246\376\352>R D\250\263!\250^Q]H8\322\217\2377N@\341$\273\341\031\306\357", 100, "\377\025\011\030Ve\223\272K\275\230\002&=V\271\2043\243\013\004\270\016\201\377z1\335\241\005q\035\016\016-\314XR\177\3371N\252RR\206v\351\032q\370\207\321\033*\3410\277yjA\320\236X", 64 }, + { "\304\2053\034\271~\263W\025\300\311\253\321\265\201\303s\336s\262\230\212-\374\3737\336\331\0256\205\226o sp\264\274B\267\356\034\362\0130B\255R", 48, "\376\306\264\014\224\245\200\022\344\367\353\213s\376J\261U\200Q\371\330!\263\206\360\251\351_\0140\205\004\255\257\205\261\017\243[U\351\372~:\0350\211~", 100, "\272a\373KE\010KD\001\361\134\311\345Z\005\341H\036\035\324.r\233O\037;\217Z>\273\355\267\035=\204\215\017%\270,\256&p\212YI\356\246RL(\025Y\026Yd\237\264p\364\244\134\011\361", 64 }, + { "\246nj~QCr|u\223\234\331<-\226\320|\356\360\236j\273hr\021R4\254\034\345\032\025\262\037\042S\274\216\236%\375\361\224\006\243\357f\335", 48, "\200\025\363A\033\210\2445\333\263&\244\002R\026\227\221\024\177\236\201\2766^.\250\262\240W:\352\334F\233\210Hf\022\273\305-\273\312\246\274\256\257v\344\361\346\333\233\216\375\033", 100, "\336\007\257\321\234\327\323\354\251\223\244\266\331&\032\352\220\335ZJ\000\002\222y-\022\3648\256'\355\003\256\333\211\276\321fY'u\252\017\202U\353\0123G\012R\002\206\374\023\026\341@\356\202\330\243\357\017", 64 }, + { "\334^\236\035+\253\251\261\313#*C\273\226\221\266\223W:\322f\340F\234\241\277\031\002\263\340\347\271\017<\025\261\334G\313\035\343\042~\342\320\221\2420\042<2ZN\227Z}\221\231\216\134\334\263", 64 }, + { "\322<\332T\271\207f\242\337\256P\376\331\274\220E\351\251\331b\324{\261\315\353\237~\267\134O0P\244\205\334D@AR\020Q\305!\217}\204'\034", 48, "\134\277\013\215[R+\223V;yS\134\334~\311\351\017\321\246k\0349\207\300\221\332T1\227z7\256\003\371Wh\313]m\037G)4\257\177\031\373I\353\227\355\3219\365g4\010\362\243O\251\333\342\015\300\227\205M-\303\261", 100, "Z\032\013\325z\312$7B\024\241\035?$5\005\374h\300b\267\375Ah\251\311\210l\200\323M\333}\203XIf@\367\222\261\357T\301\256(\004'60\334\304\255\237h\300\361, \336\331(\364\335", 64 }, + { "\333'(\350\331\304A]*\271\315\031\002\372\361\011\035\211\317'\010\355\320.\376\265\262\343F\222A\006\312\037k\224_\327\003\312\256x\337>\304\205\2778", 48, "\215a\037X\3719K(", 200, "\203\363`'\026\233\226/+\260O%\306s\361\015\257\363w\326\042\212\250V\025\023\271\344\351/73\211\206G\2627\355Y8p\324\224\335\242\213\247DJ&\343\031]\362\343cQ\360D_\031\300A\005", 64 }, + { "y\042\366\351\206\036<\213\015Y\013Jb\245,\200bcRZ\253\013\034\346\276,\352\221\365{m\215\255(\251\274aA\231Qo\314\220\000\215[\025_", 48, "/\272\034\233d\274\376i\001\316s5,.qf", 200, "\301\322mH\217C4\207\042\375a\020[\315#$\336\264\012-\236\372\247A\323p\016\370e#6\221\224w\305\331l;A\233\374\311\231\030\236\244\022\002\336\313\202\300\333@)\316\325\042\017Wl\010\352\244", 64 }, + { "\243\034\205\371_\266\334W\037\345\300+@*7\033DN+\025\366\316\235\3720\177\267J\007\004\3030a\356\245!{/Ph8\223\037 %;\320~", 48, "\211\332\202T\321|k\027\207d!\223x\036*O\210U\005\032m\245\306\276", 200, "\214$\026\211\256*\222r|\334\364\000\232\005/I\277\030\015\264\336\344\000q7\235G\327\274AKx\221\257:\004\244:?\030\257^r:\251\312vj\036V\304\231K\317\325\215\015\202?\305\357\225\311\223", 64 }, + { "BS\204Y\226\027rk\273\322\022uFq2\343\324\373x~?\026\003\350$\370\276\242\314\374\177\325Z'\035uh\2213\204Z\314\340\243\221=g\037", 48, "<\225\331HzR\273\272\323c\203\312Z\302\344\226q\305\0241AE\042\251\336\274r<+_X\244", 200, "k\042\212\314OLc\3329\373a\353\256\316\2749>=\244P\260\134x,w\006\203\000L\004\230\223\025&)\241:\255\226\210\265K~)%\134a^\236\215I\023\3725\346Z\327\204\221\350\032\334\376\355", 64 }, + { "\025B\316\263\210\305R\004\013\362\2013\345)\237\023\006uR\305a\366\347\310\001\215\246\021|\014\006~\340\274\335\302\017~\350C\310\0151\204&\015_\332", 48, "\243j\023\234O\272\233|\212\264\2748\340\023\240\360j\314,\213H\367\344=\320\205\336\312\333O\314\344\002\230\316\362e\347\033x", 200, "\341u\033\206O\346\300\206_!\331>\002\203\273\352\351i\007\272\371 \2139:\353\231\255\015\223\262\035\355\375W\213\004\237>&f\042xi\242\266\365g,h\350\324\007\271dt\350\323\267\317\232\346G\247", 64 }, + { "3\303\365\236\271x\021y\227j\002\351\255\225&+{\221\326cUA\331\315\012\325X\035.\014\037\215ng$\370\345gG`\004\353\305\366\226\350\344t", 48, "\366@\247\226\256\020\017\215w\241/F-\033\315\347\204\250\252/\277\336\337\022\211\365\314\036\204z\261\226T\016o2\361}\321A\256\017\270>c\216\010\231", 200, "i\350\326-\342\324\032\205\034>U\346\2228q\207\207Z~\315\375\253\317\222>\373\035\212\021Kiq\316\352\036\3025\037\220\011g7!NHAO\332\257\220\304\206\202\236\246c*\3167\227\024\234U\207", 64 }, + { "\311\3651R\231\201cT@H_\210\352\224;\273)\3454n\213R\377\022Z\244[\222z!\234\004\3760\3162m\310\333}\022\353J\016Vb\367\245", 48, "\267G\341\021\361\231D\345\301\325\277\376g\305\256\2147\271\202Q\320\341\034M\333\251wz\247'\274\311\373\037\263\250\345\233\004\337\345l\325\321\266\370k\222\017M\030'n\033\210\363", 200, "zq/h\233Q\377\001\007i\020d\371\241\217\354\307\022$h\236\210\210\042\233\370=\246\323\236o\222\337;\316\213+\332\251\343\020\320\006\003g\013\025\230\250p\263\252\367\362+L\304\213\356\222P\317\024:", 64 }, + { "\030\263\375\013(\031\042\343_\203P#\310\021v\261LD\272\340\025\214\214\257\216\345\030Y\373\011\303ei\005Ni\351\274\301\233&\177\315\327b\2152\234", 48, "a\314:\244\203,G\3300\354O\351\365^}-C\261\323\264D\347T\032\343\306\260`\217\365\377\355\272\031\010+\354#hm\032\030\317\231\311^k\307x\273(b\377\216PS~\213(\2049B\331\031\210LR\030\304\017\276\033\231\243\013\005l\213\356\371\250\373", 64 }, + { "7\203E@\331\362\342v\215H\331TC\026\203\3529\3126%u\000\371\243Y\356\345\012\216r\010U&\255\250\230\374j}w3X\344i\005\375\251\357", 48, ">yI\373BV\344\272", 300, "\320!\237\325\213\376WNEzz\377\263\027\376o3\337\275\021\042{\031\275b_\276\037\255\362r\273\033\333i\032\235\331P1\022\222\366o\002\026J\272\254=<@\325\333\310\314s\206\322\222\217\003\261\253", 64 }, + { "\243^\316\005Lgw%\224?\224\312\327\213`#t\212\016z_\253\334M\004\366-u\001\213\210W\276\351\230\026\356k\214\001d\010\332\000\364", 64 }, + { "\023\134;\300q\314\030\265\207\212\361\313\372\264\332X\243\264(\256(v\253}o\177\213\311\032\257\255o\323\372\201~\315\211.0\271\302T\340\353\267\235i", 48, "D\212\335qs\015\003\036\222\2433\1777Y\304\203\010\354\344\224\211\225HU", 300, "\026\377.\360\022\037?\020\355S-R\016\007eQ\037\346\240\011\256f\247\220\275\316\322P\235,A\003\203\356\265_\013\263v\001\205\033\240\332T0.KQ#\023<\363\321\365'\214[\3431\021\042=4", 64 }, + { "i\370\260\321E#\005\300\262\243\307\235l\134\036\300\246\317i\303\357nc\011\026\244]\323\336m0\254\343\222\036\242\316(v\253,1\013\272?\226\316\324", 48, "j\207\261d\374\353\025\324%B\3405\277\242\221vw\362.\371z\231\256\3656\205\235\025\247w\010:", 300, "\202\272\354t-\235\251\270+\342\276\221\177\315'\300\0139\257\362K\010G\350Xq\252.\007\000\277GU`\221}\36154\027\004\330\017\336\350\015\255=\330\274.\340\231\257\002-\005\315c\221\270eo\001", 64 }, + { "\227a8\244\377H\027\274=\343\334\340\007\366\363\017\202\216F\330\274\351\376`\326\326\301\273\230\217H\2314\242\370tSFKZ\373)5\235\231\360IQ", 48, "\221G\231\014\177\335\260\337>\302c\361z\357(x\252\023\245\026:\242\377\016\036G\020nv\134\305W\010\007\214\201\300\242\370+", 300, "\220\134\335]\016y\345X\015\331\252Rtn\202p\360\370\363T],\265\246J\003\327pw\327d8Z\201u\023\316O\310\034fG\034\273\266S:q3\013 \322$\313\0035\371)\307\320\277\352\3237", 64 }, + { "\377\223\322V\2421\377\021;\314A\312\013I\002`*\005\206\310`P\212\210r\267\352y\207'\001Le+\177\035\215\362%\227$\023\366\367riop", 48, "\010\213-\360\006\216\252\220\242C\241m\001\005D\017\274\206\220\007\004\134\273\213\303U\274K+\276:\212\011\275\027\024\212\032xet\2322Ml\3006\003", 300, "E\007\311b\314\240\305\203G\221|\007\203x\245u\261\042^\000\237o\205\252\002\272\343\372\376u\360\217iWRTE\0233]\250\267^\036\237\341\255o`\301\177\3269cM\253\235\232N\342g\007\021\032", 64 }, + { "W(\0051\335}\220:N\267EJ\316{\242\334\006M\0343\347-\217\364=\314@\270\274\035w\242\304h\301*P\177\252\346\310\022m\237\017T\271\376", 48, "\310\204\034\365\366\004\3349\213\306;\215D\255\214<4\317@\274\261\272\343B\343\034Q\374\315?1Q\317\037*\002\306\244)\203~\005`\256\335\375\316l\322R\234B\214\265\370\203", 300, "\035\014\134\361\032l~\346\263\261\204\352\2608\012\261\3559D.\014\342\134\253\335\266\000(\003\300\022\200\003\037L\343{\201\364\242o\342\301F\367\222B\211\325\226\027[n\363(\273\341x\330H\256\346l\307", 64 }, + { "\273\305O\363\244\251\012RTN[O<\200:x\371\134\252Z-\221\030'\217\032\222\177\253\321M\321\257\226G\365\335\203\347(7\310\005\262\312\366+o", 48, "C+k\220G\014P\262P\347\343w|\262\376\021\241Zp\200}\206I\310\364Ex\343z\255\263\240\267\005\274c \276\236i\031/<\200R\307B9\207zRU\307X\005\251v:H*w\033M\310", 300, "u\315O\345\351-\037:C:\266\343\334P\352\377\020XX\206\343s\306\331\260\215\015\362m\000\233H\035\271{\272\374\232\253\035y\320\270\015\367\240\304\372\277\021\356\237\376\276\355\273\370p\322\304\314N\212\031", 64 }, + { "\037\377\234r\001=\326\224fV\371b\277dT\313\211\342\022\3301O\023\333\325E+^j*\266w*\016\355\217-\210\315\314\323Io\260\254\200\027f", 48, "\366\1344\335j\302\272\357\030\213\010)Z\200\303\256\252\002\236w\375t\206\272\002X\364\277\214\017g\016\213'\346|em\277\271\303\262\277\236\217\012\220\210\225R\325\363n\042\031]\245\323\355w\002\305:\324u\376\225\332\300\247\300\244", 300, "\310\366\343\314Ew\224/\024\374\010F\315\303\005\266A\346Nh\271h\027\273aL\371\024L\276\035\327\3775\001\361\247?\035\366+\361\331\021\250f\343^\231\015\334\265-\015\207\324\377\213\242\235\225\325\342\202", 64 }, + { "q\216\352\220\031\240\322?\257\356\011\021A\025\366\2248gI\362\345l\024zM\215h`\360\354\042pW\242\201\177\372\324c6@~vf]m\315\270", 48, "\336\322H\015\245\215L\261", 400, "~5\026|\306\036\242\241X8\335\301_\333\342R\256W\361\337\3755R\0067\014v\203\345r?\350\365$+\365\326\353\241\351\345Q\377\203v\333g\251\260\265\235#\250Zzu\364/\322\342:9\020\312", 64 }, + { "\254\002\323B\222\254\231\261\351\216\333\242\326`\343\223\134\243\236\217\030\311;q\323\257\337\267U\336\270\255\321\247s\042Ys\326u\324R\344\335\020\241m\256", 48, "\325\331%W\363v\345W\025DJ\267 \364vS", 400, "\235\322\177\312r]1sV{\202',\003\364\230X\005\316\021\301r9\323\214g\223\357\322i\210\355\032\205+Kh\037\247\216\360\247\024 \372\023\263[\266\033\213I\335\234u\030\007\311>\312\004\247\377\242", 64 }, + { "\265\265e\302\307_\364\373\276.\2365g\272\004q$\030v\017r^\333\333\354<\302\020\343\232\376\215\031\2677a:\213\231\277S\232\261\017\010\042\241\361", 48, "\012\336\215\206T\254~\376\336\370\250_\362\017\336G\370\026Q\214\302\3651~", 400, "\025\0248\217\317\026\016\213\3650\257\203??\206\015\310\034y(5\365\265\277\344\342~w\336\220\004\335>\2166D\002a?\017\341\373\345K\274l\336f\304k!W\344\377\315O\023\217\303\243\366%\200p", 64 }, + { "\340\263\354\340u\240\277Vg\021\256\236\340\215\342u\323\230\306\225)CE\013\330 v.\005\216\3626\007P\342\134bF5\277\021o\030\020\042\341W\333", 48, "\333\203@\327\021g\014\204\347\341G\300/D\226\363\366,m.\212\204gyyv\224\277\376\3474\224", 400, "\366K\013\224\363[\340\332\217\030\377~\236\344\251\241I\015DV>v\244\2319\254}\316\010\270\375Zob\025\354f\262\240}\231\316\310D\347\216\342\332\266\340\007\246\213\215!\022d\352rC\345w\320\301", 64 }, + { "n\331\266k\177\321H\344\257\006M\206\270\313\010\035\226\3450z\345\235\213D\010\342,Dk\233\344x\2470y'^\353Y\264\177\012\220^\231\037'\322", 48, "#sr\373\330\006SzghX\015\241\336\340[\246\235\345\273x\303\020<\357\377\347t\222\323L\333\302\354}e\342\2500\232", 400, "#F\335T+\356\202S\240\036\262\301\212\035M\211\303\254\212a\313\270\263m\360\274\325#\225\241\222\333\010\244n\202\334e\353C%\364\3125\340\226\006\336Y0.\272qy\375\202g}\330\300\234\347\333[", 64 }, + { ",\250f`d\312\224o\3502_\307\205q\231(\032\260\346\356&\274\224\201}\307?8-\241\270?lF\177\230d\313T\3034[-\000\2478J\232", 48, "\304]\024\312\306\300\227\350o}\211g\265Y\375\353\245\026\033S;\350\247n\326{7\340\352\260\366\257\206P\207\204#%\032IA\325\250\210DYAO", 400, "b\273\002\314\350|E\207\361\362C\215{\200\037\315\253\034K\275\201\273\217UQ\364\223\326s\215\330e\014V\241\376?\315k\134a\360\241M\317\266\312F?\032\332\036\347\312\216\341\362\031Wy\234\026d\323", 64 }, + { "&\334>B\230\255\211J\214\377\011\243\316\006\240J\320l\007\353\335\343\332\3404\031\3302j\330\214(%\210wa_\021M\016\363x|\351\264q\252\247\037q\204\260\252\207\363\334\022\305\303(\014\254kh^\3033>1\257\232\267K9\321\252bj\231~\300\363O", 64 }, + { "]\332?$\004\366\254\016\341:E\226x\306E/\020G\020m\026I\377\276\3517\331,\215\3616G\214\242\004\244\3532@\323\011\366\223\017}\327l\241", 48, "k\306\002\317\350d\233|\226J1\304\207_\012\134p\265/\324X\377c\323\247\315\353\213(y\011k\316R4\002\010~\355B\343\004\233A\361\215\202\360\350\225l\272\237\037\231\370M\014\272\350\376\373\304\016", 400, "F\306+R\313\313\356T]\265Q\302M\033,\302]0N\336\324\247\376\036r\200\000\177XH^\326}\032F\301(\267\322\005\317\210\276\345\360>b\311k#\236\232\230\001\261\334i\324dovY\276\016", 64 }, + { "\3002\251i\014\011\374s\231\015kG\350\042\210\134\315G\301Y\247\360({\214\233\265?\262\235.f\354\001a\177\025\002\333,\253Fk\246)\033\265\247", 48, "\022\026\023\327;\252\020\230\316\273D 2\2074-\332\305\324H\236-\376\243\023\200h\235[|\245\033\311\025`9iw\356\330`\366\252\305\342\013\202\201\363K\0048\177\274[\013\0050\026\226\353S#\354\016\326y`\273cA\014", 400, "\321\352\231\215\0032\300\237\2400\015\276\334=\241\211\220\025q\201q\375\205!\314\036'\032\215\205\0041\245\032j\220j\274\233\237\177\034~%s%\317\265\037|>\037\247\021$\255\305\244@\304\227iJ\024", 64 }, + { "\347\261\210\236[\316\372Q\373\250a]\234\250\256`\354\007u3\325\363(w\237\356*\212\012\367S\302\3633\016<\201\267\275C9\355\313\366oT\233F", 48, "(\350\024\322\324\365?V", 500, "\216\260OQ\232\243\336\366\227\227.6\271\255:\375d\272\255:\262<\376P\2549\0140v\276p\355\312\315q>cW\004\256k\177\200\352\373\134\035\230+\275E\242\341Z\331a9\305wnc\033;\341", 64 }, + { "\332\321\232\255=\252\364\2101\220\275\324\022)\272.,\207\005\354\260\373*Tp\332\213\002\2209\302\225\377UN\371\226\271\347\035\344\016\314$Z\005IB", 48, "h\225/\013\200\311\354\235\201\312\212<\310i8\015", 500, "u/#\332\222d\355\2471*\030bp\331$Q\254[\252\232\223\365b\243\274\216)\302u\244,U\317b\015~\307\343\032\351\333\025\243L\201\256B\223l\013\200\267M\035D\346\203\324\301\037Q\000\007\226", 64 }, + { "\345\3040\031\263\343t\315q<\316_\202\027\247X\240_\301\275;\203\244\363\257\257\200fm\334\370L\216<5\313?\305\211W\262\001\314\212D\237X\332", 48, "\367\215)\3624\242s0\026R7H\242O\221v9\316\236L\321h\321A", 500, "\246\314\355\264\242\254\245\2515~\235\036jS\276\307\364\204'\272I\310UY\256\300(\276R\313\336\007__\031E\240\300/\355\302\253+Z\213\244\262", 48, "Ub\241\246\347Ra\255\251\336\265#K\007\226\252\220\300\013\207\037\330\325\347\332U}\377\031|\270\341", 500, "R\2132\007\270\222\307\022\200\364k\005H\305g\371d\243R\215Q\235\024\006\352t\320-\317\356\374?\367kW\353\006\253\355\220Z;\227t\306)\034\134\314=/\376\206\200$\226\211\007`\374\323\215\365X", 64 }, + { "pJ\004^n@\211\310I\346\177\373 \366+\036w\030\022\211v\316\257E!\344\2632\234\355T\216\003\336\213f\262<,\302J\302\304\363@\224\310\267", 48, "\343%\240\355?TI\033n\020\017\177\317\256\325N\015\251|\011\347z\200<\271\3260\213\260EV\312\327\030\313\357We\033\313", 500, "\342\014o\300\351l\227\010\364\241!v7\252\370\325\202\325\002R\347\264VT\022\361z\303\310\036\203Q[\357\367r\262\375I\245\377.\221\320\023P\336\377W\273c.\3756c\277\273\233:p\330\325\042\226", 64 }, + { "\210ll\2324T\257k\254\312\330\015\341S\301\377\355\212D\265\014N\260\202v\254\306.\371\264\264\347\270%\313\241\307\030\250\240S\340I\010\261\026+\322", 48, "AU6\242\222QF\265\340\334z~\264\340\232k\011bK\313\377|!\377\355p7\241[\302d\274Gb\032G\266\017O\250\373I\2458\340\012\217\025", 500, "\247\301.V\025C\231\205\373Jnl\326\2618\212\313m\210y,G\020\007\354oQ&|\270i\031B%#\232\311\3333\353_.gQ&[\010\262\2363N\321@\376\034\000\213\023\236\305\000\311\226\042", 64 }, + { "0\326\250\274~\355\236\276X#\262\307\275K(e/\257\266\344\212\234\325h>\322\321\023 d\0236\203\2079> 3\345 z\343\362\271\335\0155x", 48, "\005\230c\213\230{\007i'\013\361ABj\027h\264o\307+\004\374\233\223\332\025m\134<\250\242\257\267\024\215\243\025\030\210\324\024\030\243\3245\001\021\335\3000\274\211\364\033\3308", 500, "\341\304\000\2766\033v\3629UDS\225wg\213\331\360\244\367\252\372\034L\373\307\273\377IP\207\247V\273AK\324V\234\263_\263\263\036\004 uH\202\340\213b\236\254\336\375\203\017\247\362\016q\220\346", 64 }, + { "\237V\2613\263e\030*\265P\032\345\337d\301\335\255\030\217|Q?\026\346Tz\012\015\367 Z\312\344\201$\240\235\031\377|5H\345\215\301\015t\327", 48, "\301z|\375\223\324\351Y\177\325\372\031\244#\227v\311\322\316\306?v.F\037\221G\233\346?\377\200\237\224\343\011\353_\362M\042\301yi\030\260\201=\177\351\260\264w\005\250\214v\205\354\336\010\363\365\004", 500, "\362n\263\316\332^\2014\345\205\300\305\365\376BY\376\236\024idk\032\355u\271yaJ\333\351M\347\331v\015\223#\016\375W\237\025t\030bT\005\316\010\270\024uaW\226\247\213\355K\371\241\031\023", 64 }, + { "Z\324<}Z\312\004\205\034\362\365\225\212^\232\177\257\300(r\267\030\0117\335\270\354\312+4Y\241\042E\315\212\020\033\211]\004&v\306\303\361\277B", 48, "\225h<\331\365\310\362\347oq\354\022\333\021m\232\204a\007(xP;T\302\262q\275\200\206\300\255\206\220\213\354@\333e\033\2401w\241\242\347\264\001.B\042\036}9%Ni\253\205\235\271Z\3507\304U\265\254\3725\236\265", 500, "Z\277\007\350\355e\223\237o\254\371!\243\351\042\350-\016\364\233\247&P3\341\350\205;\247\273O\252Xre\372\362\263\344)SN%\251AF\012\235L\305\222\031nq\017\334HWP\231+\304\036\221", 64 }, + { "\362+\275\020l\220-\027\255\302\003\212L\352\300\371/\042\321y\361\331\224\037X\325Gbd\042V\262\370\177\271\357\314\251BP*S\262\244\014\351{\334", 48, "W\333\001kC\344\327Z", 600, "\347\012+?\027\303\377<\247Y\200\360m\247\332\272\226\273\256\033\254\001\362\266)N\265pVX\033\241\251oI\333\3353\200\270\035\237\265!\026\353Z\030\364m-up;`H\263F\321\233\321!k-", 64 }, + { "\314\311#\207T?\270\042x\212\336\253\220\025\372\314\334\237\020_\254?\312\352\344\320.\333p/\273\351[d\250\012O\361\354\035>\343\327y\251)\254\274", 48, "&\315\257\244q\375jM\260\011\013F\216\326\2114", 600, "\015\316\321x\304\314s\252G\345O~\354c\271\254\371j\002B\317\007\357\345\362\273\230\326\230\320,'\203\335\330f\346%\360\372\257q'\005\177)\240?\240\230\200\364j\027\235\200\266(r-\335\027u^", 64 }, + { "\243V\242\374-\376|\230y\305\314\334\337$\3249bK\360\3320\310\022i)rK\332\206\315a\303\345\011$\261\036\277\001\015$\373n\020\2140\377\351", 48, "Fw\252\245@00\247\345\207\201\236\374\007\267:\260.\202\035\320*\372\234", 600, "q\272\365\007\204%\247\323+\300\214X\374(\236\020\377\277S}\222\304R\016\303\332\033*\2563:f\000\262\215\343G\327\363T:\010\301g\033$\251\307\264\230m\315\226\271\234\343\363\374\010`\012\247\377\263", 64 }, + { "LB\232)\011\316\200\323\234>\215\367\321E\017V\134,\200&a\236\134\370k,\365\350%B\026\275E\006-\031\360>e{\262\303\365Ta:8\033", 48, "zBr\3266zM\310\350\035\361M3\205\357\300\213\215a\306h\365\250\202g\337\241z\275\364\210\301", 600, "\304uC\301t;\321(/WD\0335d\3120\024f<\312g\372\000\032L\337\234#0f%\230\366(e\271\255\024\335\021\215Y\336\373\340O\034\301\256\032\223\330#\342p\325\222<\244\306>(\2753", 64 }, + { ")C1;*\260\313J\252\203\034\314F\371\345\214\330\210\235\317js3\232\207r\320\036/\034\241\260\014\233~#\375\214\013q\327\025\365\001j\213+v\015t\257\303\352\352*H\257K\306\216", 64 }, + { "\224\321t\031\261\362I\335m.\206\266\227}\223^i\236\276\262\233}\222\306\252\002\206,v\216\257 h\022YL\003\277I\266+p\000P\226\340[A", 48, "(\273\350\346\347k\353\022\022\201\352e\134\317\042\230\031\255\036\317\313?\042g`\231DS \025D\042\350\243\327\210\134\0016\042L\023e=\335\033+!", 600, "\233\23450\212\372m\212\331\233w\270\032\374\373j\002^<\316.\261Ps\247\3500w{\351d^\320\330\254\352\347\233\333\203\364\347\201\260\007\225\274\027\343\311\226T\221\207\265 ;\003\271~\275\237*\260", 64 }, + { "\247\241R\241\303x\201\231\303\2228\270\210\225h\230S\206\376\017\210\256V\215\371\223\031\226\017e\357+\244h\227\273$7\223G\233\322E!\200tB\221", 48, "\324\341\244\226\271\020\034\217\024\010\352\015$\273X\277\302\375\004\011I}?\001\230@\313 \225u\357\312\022\011_t\036\204\012\252\023\345\244\336%\370\243\376i\3665\015Z\357\134\202", 600, "\036\224U\257a\306\355\351O<\372\250\351\014\302\360\020~\361\242\030%\270\033\301\310\014\256\301#\204\341\004\272*lP\351\340\017\274\004\321=\203\271\363\004V\311.>\322\362\365U4\346`0\321\220\276\343", 64 }, + { "\342\223\355\255m\206H\340-\134\367\357\363\242Cy\207\362s\033a\367\377$\332g=7%;\321_u\213%\325,oO\334\256?\241\1770\270\005<", 48, "T\221\256#\230\334^\234\246t\301\256\2019\004\260\240n\374{\006<\375u\020-\361\264\303CW\027c%kF\004\316lf\313\222zr\365\025FC\246\343\351I\330\233\001\345\371i\266s\033c\237+", 600, "\225nTZQ\036\2149\344\253\357\027H5.\276\235\365\252\224:C\014W\303q\257\006\315\004w`r\233l\026S\013\230G\247\035\343_\021\134H@I(\303\257m\356\353\361\354L'A\355V4\362", 64 }, + { "\212\030\031\247\326%\221\3514+@B\027\306\333\274\374\005.oX&e\354\326\255\345\253a\360\232\356\257\343K\374\237\317\023\270\244R(\352\303\034\012@", 48, "\367\231Q\247&y!h\315\323\315Ie\352\330\336\205\332t+t\001c\016c\302pPW\325\313\352Y\007I\320\364\0059x\24245!\0176\275\360\306\276\340\303\011*S\207\275\232\275\006\370\003\300x\313y\301\272\310\364\356\246", 600, "\323\242vD\355X\240\211\213V\235\204oP\327\200\224\365\3275OO\006\232\360\263\273~\255\323\3613\362\365]\255\250r\010\352\366\0308\010\341\310Z\2400\206\242\373V\236\230z\333\241\032\032\303A\234\001", 64 }, + { "\244\324\240 =\357~\230\377N93\227\276\357\224\031 \366o\371\377G\251d\012\013\346\236\351\375\342\227\271\271\346\373\366w\042W\322\310\235\005]B\241", 48, "1\246T\373\275\002\241\246", 700, "1\030\274\257\036\365\235S\230\232\301\331\344\261-\205\274\244\257j\007PX\017\037\032", 700, "\360\017\002l\347\336\213\357\000\240t\330\006%\301\341\215f\3521\365i\345\270@\372iT2]\342\345e\311u\3417\274\014\263\261\373\3254\221f\275\343u\321\365\210\365\277y\365]\340\372;\363G|\232", 64 }, + { "\357\217\262f\233\325\3650r\024\267\274\264\221\023\377i\273MUv\215\236I\345\302<\273\325\316\265\274]1RH\270yM\021\000.\332`\247\207=G", 48, "~\214\270*\361C\037\207|x\267\021\333\027\363\3306I_\376\345\355\0267{\042\375\006ap\227\005", 700, "s,\213\3052}\245\352r\353E;\351~U|\333O\276,k\240\177e+\242\024:;^\012\255K4\245\212\042\376\037\245\033\355\042\236p\207\273\3456\257u\005\227\024q\237\312\232lArBH~", 64 }, + { "\0018\243Y\355)\330\007|\373bm\266\337CI\333(\346\235\332\177s\201\340\232;WlO\013\353Iy,\270\300\012\356\357\345\264\321_4\330j\357", 48, "\363uu\356\257\354\022\002\327@\005\344\314H`\250\265\134\005b\3403Y\023\364\333\210\264\2741\351\2079\216\225EJ`&\035", 700, "&$\224\203[\324\0071\206R\231K]\245\215\015\256\376o=Z\223}\262\233\370\370\361\020\012n\377\024c\263O\306\030\004Az\242:\320\316\020\263\037E2\234C\227q\220\232\201Og\247?\265\276\244", 64 }, + { "\217\033d4\231CTki\200\177\035l\364I\370\042|\360\030.\343\314\311\316\366D\235\355!\316\020 0}\034\030\267\317", 48, "\004\335P\231\267X\217\216c\347\303-\007u\023{\357^\212\255\231TN'\337\374\264\036i\305\220\327[\372h?\321\331\227\012\200\257zc\340\004\221\211\246)\257/^\243u\301", 700, "h\237\233f\334\277-\365e:I\267\2437p\204\350\331\350i\005\267\272\370\257\232\315,,\332\351\315\360K\177\3314\013\341\334\227Wi\252\333;m|:\012%;\210\230\353\030\305<\215\220F\005\343\234", 64 }, + { ")\022\305\306\361\300\211\276\342\335^\263\360\257\015\345\322\2214Z^B\211\002P\343\367=\241\217Z}\023\355`3\221\323H\031\214\307\323O\002\374\221U", 48, "\006\025\224\362\004\313\003\032\304\331\345\373/\372\376\0053\377+\356\314nzI\366\307asa\023\353\227\261^\377\212\353\004j:\377\237\264\203n\326\314\362Jy\320O\217@\227\200B3\021\371Q9\267\033", 700, "\212\261\233,\042\243\250\260\355d\326\256f~\343\274<\225E\277\310a\237\267\276v\312\232U\272\257\177\226\2462]\262\037\365\304\355\336\354\203g\035\311\265\035\206\017My}Lk\222\034K\362\362I\222:", 64 }, + { "\020\240\200\016Q\273\3750\000\0070i&bR*\375`a\224\005v3\030\01362\037\302n7\217\364`\307}[7\352\375\235\134\215\023\333\2273/", 48, "\300\322E\333\374O\2276{!\326/\355\277I{Q\341\031\024`\222\337w.\200\252\003=}\203\315\224\033\034\042\325\311\334Z\215\360\234\221\262D\206\257vXN4\360\263\311Nf[x\366\320\205\257\015\201", 700, "k\031\342\357\021U\327\031O\214o\214\265\014|[h{\220S2\275\005j\016\025\230\222\235\002\221\012L\260\234\200`\324\370\134\275V\355}\261\344\306p8\241 \311D\336\341\236\256\243k\312%\225\042Y", 64 }, + { "B';u\226\317C\307z\011\313\345\012=\3379\372M\200\331G\325o\372\014\367\221\001sf\275\355\201\221\033\042{\247tU\347Nf\025\301U\341\267", 48, "\303\2054\237\224\337+\267", 800, "\300:\200 \244\004l1U*\251\235N\006-\263\037\216\257\277\235\366\214\330\256\134)\373\377\242:{\337>\376!\022\037\232R\333(\221\313\353m\322\371\321\236q\373\272\313d\320\355\213]47\243\243\004", 64 }, + { "\224\334X\314\371p\0310\2779rv\320JV\271\217\361\014)\367\024\365\345\006\254\224\254W\342\265\223{Q\2174~\372\312@g\003\015\314\365\242~\347", 48, "[\336y+B\026\336\220\304F\220x\357\277`\042", 800, "\306)\375$\247\2557\307\213\245\306I~\020G6+\374\250\231?L\275\030@\245\200\274\245\265T#F\3222?\224h\216Z\334\334\2002|\266\333\363\203R\033\316\243\021\217G\215^\005\356@\230\260\277", 64 }, + { "\234\214!\015\311\276(\370\327\340\215r\272\251I\025\366\347\373^\240u\274\212|\317(\271\205\217e\277\373\252\243\223\346 \316\347\3356\321*\035\212\332\212", 48, "\261+\374\0333,\372Jz\034\222\345\233=\235G\300\307\257\244\333\253&g", 800, "Ty+\353m6\340\005A\316\257\336{Sd\2755\205\275u<\274\232\356)\333\134\006n\244\357\347\317\226\271\305\237@\347\202\020\316\256\353\247^\373=-\253bQ\001\370\376i\203\216\265\215\375\2636S", 64 }, + { "\000\315\257\224\310\010\271\202m9\212\034.2\305:\316t\375q\212+\355\260A/\022\032\014\225\350\277\007M\273&\002\3738L\353}\016!\134c\037C", 48, "\333\257kres\311,\263\242\350B\203\361\204\322\216\207j\246d\267\037\342e\235\031\302\320\374c\376", 800, "\211\301\301\237\314\002\205\216\030{\015\274h}D\216/\262\314s\331\206P\275\332F\372\264\300U\216\034O\330\202\362`\3476\000d\337\037\032w\327\365#\233\377Wfo\361\376\244\302\177\361o\370Q\270\354", 64 }, + { "\222ma\214\201\372YU\315 \371\0023\242\340\235G\361+\3025<\313E\235\276*yi7\277\213\3009\210\265\223\334\355\344s\322\224\240\312\263B\210", 48, "\367f\326\215\006\346%L\022U\305AI\343\307\223G\372[\320\012\017\205>\031\243\313jp\223\250m\213v\251V\177\276~#", 800, "\344\224\222\246h\225\325\010\301W\042\033i[\354'|\366\036\244lc\270J\217%\351\032\257,\177J\031Q\017\007\270@\254&,\336\317\312Z\321}\010\332p\200\237\014\247F\277\042Og\304\247\227\177\367", 64 }, + { "\305T\312l\0366\032\354\011\006}\324s\203\365#\335 \324\375\305{\340D}\300\247'\254\303`\310s\266\023\003|[\367\371dw\2262F\361uh", 48, "I\225\007Fu-^\010b\363\356\312\306\034\002E\024\262\3241\377V\270MZ\334\270\314^Lm%\011R\3446\244\261\335\355%J\342;\301\353\337\237", 800, "\241\377\320\274$n\333@\2541*\312\320\245\211dJb: \266;\370[\2713\306\253\275_\217Ex\306{\271x\025\236\253c\024\311t*\336~)\355\026\016\014\022\000T\335\340[\360\264z\016|\323", 64 }, + { "u\217]\362\346\353\367\227:b\317t\237a\344\024\267rn\332'\001\364n\042ar\020\134\357\134\314N:\264-c\306\012\331\342sRH\334\213\242.", 48, "\352\134\314`%\177\025\022\230|\001\026\271\314-\001e\006\360\250i\214\201\261Y\313\325]\354j\3024J\364\327\304\302\340\242\373.\263\246: \026\376)\265\210\031\212\365i\254\201", 800, "\366/U'\255>-\370\322\007\215^\264\321\302\234s\010\275\234\321H\316A\236ES\026\341\361\212\251\214is\367yj\316l\2133D\347\346=p\006\254\007\256\016\021}\367M\013<\374T\210$\357\005", 64 }, + { "6s3\342\014\013\351\345\270\270\207\354\004l\213aV\227<9\267v\223\260N@\376y\3072\273\333\274\353Ni\231e\372\316\022\031\375b\365\336\042\023", 48, "\367\231as\364\300q\204At\274\235\343:\205`\017#\210fhG\367@\333\007\3350<\303t\377\025[F\036\235\214\246\326\024\312\257\372\003\232\201\013\212\220\354<\377\251\315\314\2205\360\304\020\233Z\215", 800, "\241\341\300\227\005\242I\331\031\003L\263Z\361Bp\262k\134u\330 };\234f\203H\217\033k=\301N`vwY1\017j\331\177$|\360j\014\021]*s\177~\223\237$Oe\037\216T\321y", 64 }, + { "M|\210\012\365\274\254wp+\240G\372\252TY\020\227j\022\025en\0219)\235\020\314\364`#RV\236\261\342R\211\312\034.\3324P\0170\342", 48, "{\031t\3021\3312grv\026\210\373\311\024\024\271q\246\333'^\307\355\253\207\256\345\351\365\030\377\374\366\355D\332 '[`\177 e\354_4\242\316\221^\0170\315$\336\355#\037\343\215\224\244RL>\245\234\247\244\272\243", 800, "\304\257D\322\243\321\011:2U\022\270D,\375\011\236\265\262\331a0G\230\003L\302\241\220\217P\332\244\364\016\037k\222\375\200\277\321\332\3647\033\360A\261\365\013Q\337\036\355\2522N\263 \000:\2164", 64 }, + { "^\372x\204\356\231\244)r\277\370\0230\001\365\232\216\214f\3107\302K\351\020J\252@=\377\261\247cy\177yz\211\035\354w-\347\313\327\363\253w", 48, "\261\352\305:|I$\225", 900, "p\326+\010W\257\325\370`Y\007P\030\035`\373\3055\215\031\346u\033\230\025\367xs\007j\272\266\260\357\265w\365\017\264\353)\364;\275\026\215p\0212r\206\277\260\207\272\373p\245\363<\224\247\300\375", 64 }, + { "\306N\274\353\353\372z\375Gg\351\310\0275\021O\333fd\031\246M\223\211$Pt\320\253<\226rG6\333n\030\330<\265\243.1tM\035R\276", 48, "=6\352\317\376%,\275\010\326Y\005~\330\214\350", 900, "\012\237\260X\323\007\306\233\331h\3306VN\350\366\337d\232c\364\370\360\253~\017|=K#\251p{\327\260<\230\021\330N\036'\233\200Y\2201\303\177\247\224\316\236\243\2265g<\374\363#,A\340\332\326\036\1347\373\372\346", 64 }, + { "\354t\342\3266db\242\371\260\214\214:1v{\305\361\203\325\006\360\237\220>$\341\235@\201s\345\304E$\305\021eRg\007w\272\037\252v(\334", 48, "\221\370\256\213ef\313\016\345)\3576\021\026\302\365\037\134\353c\340DhGJ6\042\355\375\3328\377", 900, "\345l\321\036\300%\257\015@E^\357Q\275\266>\303\007\334\324\323\032\346\302n\345\214w\311\031\300WU\201\030x3\361iP<\012\321\360\314\017\245\351H\3768P5Y\255b(\367\377\225QD\244G", 64 }, + { "\212h\203\333I\202:\236Ev\276F\360I?\017\270\313\366\342\033Q\204\013\025\020\255\271\261N\327-\327H\134Of\300z!\252\020\205\330\352\3010\273", 48, "\352\304i\241\366\217\357\216\232b p\017l\214\224\346\260\014\320&@\264m\367'C*\363\343\316\223:i\032\357\312R\333q", 900, "\334\371GE\312\010\314\257m\035k\020\026\204\266\255\300\251C\343\243fR\303D^\302\365B\014\266J\034\227\214 2\215\374g\012\361\261\247E#\327\314\331\326\224\023\267\015\266\212*\371\346\014\305b\342\020", 64 }, + { "\251\205\204\301\302\247\005<\367\134\236\323C>\205\277\311\327\013\270\256s\364\212\366{|\252\374%\311\335C]W\215\312$\377\205\206\325\231z\220\370\367\355", 48, "\222\334\262\311]\217\213J\362\262\354\035\236\301\316\300l\210\205X\233\026\034\253\372a\037\025\035\235\311\224\313lf\316\346{\300\225dB\217\267Q\303\265\277", 900, "/r\256\217\345a\345|\227\372\323\205\274i\013\367\222\222w&R4\216\337k\271\345\342\371\345\205-\263\333\263$\217\204\347%2\206?\347\216\020]\202\240\011\276A\232\031:\252\257{\245\340\177\005\017F", 64 }, + { "o\203@)\270@p\026\240\016>\025e+\365\367\243h\253K\134\252_|Z\247\311\374\331\220!\304v\203~Y[\001\314\316&\235\3662~'T\313", 48, "3Z\266`\240\015h\363\033;H\005f\316\213\360w\276Ic\224N\006\026\241R\345\252\317M\256.\217T[9yc\2416\220q h\214X\303@\264\352X\033\013i'4", 900, "qY~e81x\267\010\355\256\346=\217E\3054\367\033\223\305\265\240iW\205p\016[\367\253\201\253{\327\375\3426\226_\315\323\340:,\321I\253", 48, "\210\226\334JU\226\325\266\244\370\345\005\026\340\004\024\034\261\250\302\343\237j\246\213\011\250\262\351(\221\017\263\346\252z\023\353[\234\217\022\263\270v@\042\021\360\264Qq\266\347\007\352\253Df\025*/\233(\030\261]\035\305\365;\216", 900, "\262)_\014[\213/Ped\016\343\251\006\032W\376\035\321\022f\030\360J\212\031\327\301:\342\020\324M\347\250;@\032\342As`\272\006\261\364i\333\230d\341y\361\356\001\347G\341\026C\374S\244\323", 64 }, + { "\337\340\0338\311BN\317'\345\351\252$3\346\367\035a\346\204V\341\244P\333\351?\304\014\356V}7\274\235\011\272\134\337\023Z%RB\214\360\035\236", 48, "\342_\030\013\242\335\241\032", 1000, "\233\012\250\243\257`\267\003\230\221o\226{\3123\032L\3124\301\353\317Ky\215\320\342\013\035\236)f\025\214\315Uh\015\217\266\012\006W\021\003\210\327\263_\021}]=M\357\3613T\325\017\272m\235\341", 64 }, + { "\337\245B\343\267\275\006*\002n,!?\206\365z)\211\020$I\326fA\217\335^0o\335f\351\004\364\177E\244\016\325%\036\342*Z='\332\303", 48, "\231\263\316\356f\366(\017.\272Af\207\263\015\237", 1000, "\366\331\243\333\005*o\210hM\134\333\007\216\207\134\001\346y\272kq\013\256\340x\260!Hb-\276^\343\243\223\015=\001\271\3758\021Y-nX|\361;|.g\352\265\341\367\236\042\324\201*\177r", 64 }, + { "4J'\377v0\337*\246\270\014'\357>%\333\012\352\014b'e\277R!{\340\020\305\377\017\242\357\331-\042\324\042I\225\306\316i\242)\026\212\234", 48, "\370U\302\377X\352\001(\222\226\2464\316>\362\240[CF\230@\021o\215", 1000, "\003\013u\035\376g\025\240h=6\312\213\361\342_\366\363\230\237\217\246b}6\221\002~.u\315tI\200\263\370\270\200I\351\234+\266Q,}\022c\007\317\274\352&\257\317\234\276tRI\013s\221\215", 64 }, + { "\254\355jOV%\361 (\374W\3124aq@;\207s\010\270rU\204\001N\023m\340\312p*Z\245Zt\333Kr\223\347\200a\355j\020K-", 48, "x>\324'\200\030\360\316\304\012AL|\0303!\237(\245\212P-C=S\375\037i\225\324\362\265", 1000, "3\026>\262\353\324\014S\233\316\233\302v\2516:e#\262W\273Jb}po\305MV\036\035C\355\371\317\304\306\326\026j-\345\241hW+\234B\375}f\273\244V\321;\220\343\272\376\365\214k\267", 64 }, + { "\220\006\340z8\343\225\036\035\177:\232\026\227\343\356\342\3432\360\362R\213Y\225\217\330P<8A\277\307TOY1}\311\304\263\343\342V0\000\012\223", 48, "GG\036J\266\271\226\234\207\222\0130\014\300\244\263\233\267\215\331a\216Yxas\224\376\222\023i\317]\134\3245\306~\251/", 1000, "\363\205\315\022\320\352![\327\042\242\255v\343\252\252\243\324F\244DmR\207\347\340\215\020\224n\212\270\267{s\243d\203}\2477\342\033V\265<\270\306\020w'\330\027\301\023\006\026P\025\005\260\002\251\027", 64 }, + { "\025@\366W\027\237i\355\013\010\332\335\263P\237\354Z\243\240\335\322\204\025\275\007\037n\304\266W\366+\321S\005\216\273[,\244v\026\372\021n\326J\323", 48, "\0339-$\266`\367\240\245\215\206\027\372x\252`\265\177.<\227\306\365\031\275\001\373\011*Nt\2434x\312\2426\344hK\336\275\240$l{\211O", 1000, "\030\363\332\336\2309\300\376\2105K\232]U\260\214I\315\372\310\005s\134\2602\367<\325\362\001uy\274\024\251\241\320\205\0200+\020\372\020\2508=\036l\371u\206\377W\306\233\317\011\034\007\335\252\262;", 64 }, + { "\306z\302\361)\273\335\030\357Y\233 \371\307\225\013\357;(\372\177\311J\0321\030\215\300\334\016`Hp\000\031.\2527\270\223\320\243\022\255i\303/*", 48, "[\227\377\230I+\177\3633\223\205\206\332fx\307n\311?\330\333\017\314\311\260R\325\327YOA\323\267\227Z\271\255\217\363\310+'\377p\376t\011\032\024\370\265\036R\242\373\015", 1000, ",\020\2650\007=\026=\341\204a\301\0055I\266./[\231o\215T\212=UyCm\037$\370\020\360\003\335(=\205\355^\235\317n\035/\224\204EDe\277\373\240\312\267\007$\177Eo1\2219", 64 }, + { ":b\302_(\317\016\2317B\264\327)\3143:\022\342\006\301+\232\213\330\306\230\374~\370\240\012kE\341s\335aW\251/\312+JW\027\263U\006", 48, "\3375\236Q1\357\250\336\333\006\021\304\360r\200C\021U5\340\010\245:\277\253D\271\370\334\030V\225\262\314\017r\3349\253\023p\324tn\325\244\207\271\017\030\260@cQ$\243\015U\004K\013U\354\033", 1000, "ic\217\365m#\204\032\232\010E\014\365\342\0233\020&\275\373\222\234\363\325\332\243\372\333\243D/B$\315\301\012\242b\274\2227=\267\332\014\2423ex(\366\000\246\373\345\022\210\275+)\220#\360\023", 64 }, + { "D\315\013V\224+\374\237n\031\224'\255\013\232c\253\306\375>\262\021\031S\226\201\306k\376-w\361\307Z\310/+\217\354\275E\343\300v\012\244x\210", 48, "\020\347@\330\323d\010JOB\256\253\246u\216\337Xc\021x\267\205(\267\223\270\243O\207#\314\321?\373\013=#\364NbI1\376\353 y\200\2405J\271??\212\311\0110\343]-\367\367\2138%\310\037\307}:\331M", 1000, "\213.\303\017\302d\026\245\260\374\325\377\261\222z\035\373;\026\230BxS\007\270\331\223 \337\311O\003D\374\306\323 Q)1+\357N\200\264M]\376\207\335\007\025g\263`\004\363'Q\252\376d\277\373", 64 }, + { "i\013]{\003\324\227Q)^>C#/Z\262\301\265\302H\322\351\253\270I\351\306jdR\201\307\204\023S\317+\362\215\225\275\217\312\245\335\263\002B", 48, "\347\245d\24117\217X", 2000, "\252\021\376z\035ajL[#\211I\212d}|;\340\330\020n\263\233\030\267\304\317\027\377\177\336\263\343\360\0338\274\357V&\232\302u\306Ni\245i7*\221\366\360\201;\363\003\3616V\250:\221\342", 64 }, + { "!\264\005\243\327 -\361\350q\242\274\342\2628\340\356)<\202FZ\323w\270h\033\004\207!\005\362G\227\033t\377\376\243%\177\216\024\370\372h\330\246", 48, "\352\242o\245'\2623\223\200\042(Y\230L\320\226", 2000, "\355\002\347<.\274\221\344h\015\206\006(\237\036<\355\002\272X\346\332!\255\233\012\273F\243\202\252\042\004\204\344\021\253{&\375\217v\242\265h\341\224\011#\273\333\253\265\262\030\330E", 64 }, + { "M\340\026\216z\244\214\273\267\211\2041%:\240t\355\224~\333\021\361;\271p8\025\220\007\377\356\333\213\206\037\014\320\253\034x\011oC\231\344\305ja", 48, "V\300$\325:\253Z\302E\030\214R4\216\327\232\315\2723\253\363\006\213\320\217\274\240\331\372\305s\227", 2000, "\300\357\340\235\202\210\212\275\015\205?\025\231\247\274\210H\300\263\317\2613\260\221h\271O\255?e\364\355\312\320\366\300'Y\321N2\317\253Ya\236)G\221Z\325\307g;\354k\014\271\354\365/\332b\374", 64 }, + { "\375\212C\210Q\364\343)\3230\344U\330u\321J\021\357\233|%z\031\015\224\241\327m\017\327\222\002\233\261!*\363\227\262,\331\352\026\015X\204\276U", 48, "\353\2518\267\016r\004l\332\207\315\035\225Q\350.\006l\206\032'\016\333\214\320\363\351+\376w5\2366\373\012RQk\240\376", 2000, "[\320\320>\243{\326ur\261\213\262\233\332D(\015:f\345\350\311\373\331f\264=\035\377F\014\354\0119\003e\335\251\014Y\342h\2705e\257\012\253\330D\355\226\312\220\255\263\316\253\274IF\256\302\356", 64 }, + { "\233L\025j\314\030PY\235@\036B\204\001\210\244\2427)\011\255m<\372 :\324\337Vp\024g\214\254\042\336\240j\367\322\003\367+\266(eK\206", 48, "\012b\352\220P\200x\257\204\203\205h.\013!\247\214\243x\255\203\215\375\200\042\217g\262Gn\275\245\222\217C\304\222\326\020\026\304\270}\031\202\310\003\001", 2000, "\215\256n\367\035\246VM[\303\337\002;\371u1j\3772\365\025Om\376\344\206\203\247Z-aS\367\315f\306j\272\034zt\223\313\317\267x\015K\304\321\024\340\214e\252\014\225\346\021\311\266y\377G", 64 }, + { "PP\000\272\244\310c\353\031@\350dg\375\031\012\334\360l\235Z\306\031\201\024A\311\376\023C\261xB/\247Kx\210-5\042\234B\261U\025\235F", 48, "c\314\347\257\272\001\350w\215\300\317Z\254\214\231\266&\201v\245!a\032\305\253h\316\363NG\326r\271F\324\370\312'f\001~Lw\337\375\333\257\225\002l\315\022\134\305\246\300", 2000, "F\355\345\302=rO0\210\341-\350\007}5\237]\220\200\010\001\312N\215Y\252\374&\343a\011\012\030\017\220\324\377VB\224\315\307.\351\310}\372\321rl\277oX>\311T\007\321\312\377\036\211^\250", 64 }, + { "\357Q\2640\367\013[\237\343\200\235(\262\251\2104[\000J\360\000\337\260\264\205/\273\016\033\005\373\036\336{~4{L_\017eNq\302\342\023\270\350", 48, "\035\320\035\370\304\326\354$\262\261\351a\327\357&\263gU\030y}\207^\200\217\270\316rL\335\304\012;e\250by\134H\042\325G\326\314\360\211\262\355\020\275m^\031;\350\020=\367$)\024\305#\042", 2000, "\275UOs\241\037c\027[@\215b\316\014\2558]G\202\346o\365\223\301+\226a\361\303\012\031m\304\244\371'\212\034-\036Q\264\374\317\241G\001f\211z\306O\225\360/B\366\0345\376\301\332\354\253", 64 }, + { "\241\344U\007\300\201.$O@f\017\377\351>\243\003G\317\366\271\324\000\012B\235u\021\217\332\226\032N\2350\350\223\241g\303S\312\264\372>\012\257\213", 48, "\033L\372\351F\221i\236\310\273\3213\354\232_TrQ\266\310[\225J\034\220\354\236\205\360K\271\223\320\273\002\205@\313\335eI\267\232\246\236\3417\266\210\246c\244=\260\314\365]\367\312\246\010\202\372\015H\354\336\337)$f2", 2000, "\3719\006\261\234\375]Z\246B\227ji\320]\221@\263\354;\223\373B\252\216T\375\271\263\220\366\353\266\260\016\241y\261\217\2078\300\263 \204\331b\000\304kQ\233\363\250\030\306%\263\217]r\276\217\376", 64 }, + { "\011\251\033\027W\032\0163\012\321\2718\307\354N\317\266+\246\213\235\254d\323\344\203\001T\2328\303\001\340\213\032\251\253\022\007H\223\334\250^\267e\357\214", 48, "\242\250(\362\371\203\3470", 3000, "\042jz{\220q\271\020]\035\344V\275\242\245H\266\275\212<\0156\354\231\375\252\263\362l\037\365\361\002\315\262m\246l\241c\270|\220\254\317v\042k-\255h\006\332\232\305l\243\316+\344\324U\200N", 64 }, + { "\350\372\007\023\273Z\254\346\261\245&\340\367v\216\222\034\012u\277\003`\227\271Cu\015d\332D;\000Y\247{\273\313\250\003\024WVV8\262\325\314\237", 48, "\365\245\257\230\323\214\245\206\206c\036\016\026L0\313", 3000, "\230\372\346\242a\010!u\234Fd\303\013\324&\361L\036\033\344\240$\260\013A}\304\010b\323\321\177\031\326Ti\042q\312\276\223\242\254 \042\366\264\306o\274\247\310\367\005u\0322\2355|r\250\357\313", 64 }, + { "p\327\375E\323.;\341\267\210\266\314\244\010\210n\353\204\352\260\221\357N_\042s\242\006\374\315a\013\276m\015\316\012H\257\307C|\215*\224c\235\341", 48, "\304\250-\345$'x\301i!= \226\320V\310\361z\213p^\225\033]", 3000, "\232\022\311\007\230\342#z\334\363\375\304\274\337\346\272i\321\333\304\301\320\341N\377\270u0!my\300\311\023\3241\255\277s\206-&\245t\245$\375^\347#Gg\332\015~%*\243fL\236x_\317", 64 }, + { "\011\241]\247\315\307\354\015\314\272\351hk\3047U\354O\260n5\374V\023\366\353XmY\257\270+\276\364\370\333\273\213\257\216\2041\267\2101\320\221i", 48, "N\200\330\312\255\302\343\305\340N\326\361U\305c\242s(8\370d\276\306u\2260U\214_\215\367>", 3000, "\255\011'p\346%'UV\324\025/\215\356\265\262N(`w'\023\371\010\005C\272\370\331\325\222\307~\374L\016\042\027>\244\355{\001\227\246?\2450`\222\264d4Le\242o\323>\271\344\264\237\326", 64 }, + { "\022B[x\327\005\226EU*\134\207%J9\322\366\315\277q\036\275;\027\277px\362\012y]/w\035;\014*\255i\356\364\034\272/ \217\234\346", 48, "\210\320K\265\034C\207t\341\010j\232\321\037\012\214\344\320\233v/z\244\206\375\325\303\327\324\325\350r\313\243\321\332<-\260\016", 3000, ")\377\352\240]\226\024\322\357[P\205j\005\234AS\2677\036 vu\034q5\250G\325:P9\311\021\344\177]\214\307\342\016\374p\234[\2658\370\351\267\237n\340\355EM%b\317efO\005\230", 64 }, + { "\037\032\0421\375.\312\217\315%\333}%\301R\310To\202s\210\221\3768\216\022LG\216 \236\267\025\222\177\240=\014\013m\377-\271\253}\362> ", 48, "d\302P_\366e\211,\215\037\344^St-9a$\030\033A\235\004T~}5\344\260)*\205\031\312\215\305\221\330\3048IJ1\352\351\271d\225", 3000, "he\347\374\343\203\012\310T\325/\311of%\225\362s^\023\021\027dh\004\210\207\245ou\033\207\036\215:\006\015\3118{\272I\014{4\247\373\231g\306m\022\221\227)\211s\370\026|\000\261\035h", 64 }, + { "\325\337\347\355~\224n\005\241p+e\350\351\034b;oP\302\025\342\211_\254\374t,#\241jSh]\366[\003\2036\310\2625\354\224+\276\207%", 48, "\015\371\213\314\256\360\017\223+\036\362\003S#\004\032\256\260\301\321\352A\357?NTh{Q\235\027\272\252I\216d\332\0320W\224\0204%\372!\265\313;\344\2342\365\3002\225", 3000, "\004\331\012\301k\262\314'@+*\314+\134!c\306\224\030\310\241\013=\017J\234\207Gr\304\212\220\032g\232\315Z~qg\217\336\2405se\260\355\177\302u\134\370\251l\213\342\325\207\207h\362 \017", 64 }, + { "\2202=\274\020\024\341re\233w\032m3\255\235\237\234\253\224=V`\344\002\214C\036J\364B\261v\211L\236\246a2\365+a\212\300\375\3218\244", 48, "a\177\237Z\273m\345Q\025%2\012+\265\024\252\357\037f\271i%x6'\276\211*\373bKs\331\252E~\211>\010\215\020\013\256\322\205N\323\337$\251\342\017\306F\033=bu\331K\251\214\203/", 3000, "\035\344A\362\262 GZ\226\226b(\332\021>\336I\375\360\241\373QhAXD\247SM\300\205\362z\327\330s\017\351\257i\036\001\324\255IgD\3202\227\021\300\274\232\223\370\202i\033\311\260I\266\376", 64 }, + { "\034\210\177n\354\347\241t\016\207;\333n\370w\247\036\226\214\1346\362\015[x^(\2728j\264\006\225D\240\217,\315\235=\246\250\012\3513~\335\355", 48, "F|\371\315\340\304\207u\251\277/\356\375\342\305\036\023\245\250g~\346\306X .\024\010\250:q\310\0231\307\020A\204P\351\004H$h\327W\015\024Z\027hi\226\323\232F\312\231\211\321\367\235\340\0053f\345s\031\315\237\004", 3000, "\342\210\306\337\352@7g\277\0363\037\232\2449W\324\213\345'6\016\325\354\247<\253[%\224\3461\3136\267D\373~o\255\344\215\211hX\313\200\217\240n&:Q]\257\343&\323\321J&\247~\256", 64 }, + { "8\374\360\327\244\242\3112V\356\023\253\201\343J\333\370k\247\304~\341G\326E\021o\333\262\016-\233\134#E\3341bpM\001aD\246\230\027\003q", 48, "+\355\360\253\224iM\011", 4000, "\203\026BJ\336\023^h\371\300\255\212\342\245\242\212$\313\275\010\022q\317\023=M?\245\3243f\242^)V\011\001'\321v", 48, "R\134\353\337\330,\216\250\301*\3737\0046d$\362\331\335\366\362HZ\236\213p\247\214\241\134\225\304\016\200p\234B%\332\372D\377u6\226\017g\354\233\232\014\2565\2067+", 4000, "'\035y~\311L\376\346\274\277s\377c\376_lgN\042X\313\265\257\207\042.\264\262\016\023\006R\326\332<\000\013[\001\023I\224\134\007|\277\203,\322\353cF \331E\021\331l\217!\220\221$\365", 64 }, + { "F=\037\315#\006\331\015D\027\243}\342\276\200\275\364Q\265,l\353\350\011\021\234U\026\333\260\372\274bM\244\323\344\001dt\347~\265PFr\301\252", 48, "\007\302\227'\205~H\223\003<\261\020D\200\337\311K\216\017y\360\204\337pxm\323Po-\275\304\207\032\314V\310\247X\254|s~\313\335@}i\371\226\254\374\304C\215|\327<\023S\2637\330:", 4000, "\012\324\351\266\333\245\343\256\371\303x\256\005v\321&\235(\235\235B\240z\352\335\266\204\344H\312\030\306\221,u\021\343 \365\005\204\023\330\001\202\271v\355\215\254\363j\254'\327X1\360\201\252o\034LU", 64 }, + { "\023\234F\343\274\225qk\015\243\251\233\275\030\345\306\312\253\305\027a5@i\226\232J\343\242g|qW\267\315:\377kB\352h\357|\252+\362O\376\305!1\015\320\235", 48, "Kr\275\216o\247\366\204\374\356\325\271$P\244\030\0234\347\212\332\246\337\236I\273\134\210<\006\266\263", 5000, "\370\355\024\360\323t\303\313J\336\317\261\275\231\002\363\366\250\222]\007\367\367\240\245\271\177SZ\273\025\034\326qy\234H\007\261P1\345\241\327\313,\2257\004\345\255\036\2435\220\244L\024gF\326\210;\016", 64 }, + { "\213c\353\311\230pI\234N\210\337s\351<{\011\206\001=\331\330^\024\341\004\202\351\210\330_\264\334E\233\376,\002=U}r\014\246\210\254\272`t", 48, "q\237\222\276+\321|\252\350S>\357%2U\365\355\314\213\272\2704\037\276\346j\342\352\226\225\366\273\030\353=\236\234M\230;", 5000, "\324\240\327/UF\025\207\247\256\031\207\333\020K\320\331\0038\221\217n)\032\310$\235\345\027\373\233\247$^\206[\274\211Z9\245\002\344\010\345\277K\300\201{\317\304\204e2\027&\301[\213}\020\270g", 64 }, + { "\352l\231\276\004\222(\213@-\210\331gUw\021\350\216'\036V\204\271\373[6e,\225\246\3039\030d!,\222\226/Q#\351HUT\325\245B", 48, "z\356\375_\243'\235\334\0145\211\240\031&Y\256\211\205T\210\024K\262N\235\021?\211\014\305]\345\271\337\341\213p}=\306\027\203\220\303\273TQ\315", 5000, "K\037\010^\360\223\277'\320\341!N\015q\037- 2\363\277F\177\304n\221E\272}\364\231\333\340\003\030H\014\027\213I}87\214\2126\204\272\235\326\232\0349\371\312\311\334\262\341\257\356\034\034\233\042", 64 }, + { "\323\332\347\327&\217\310\364'\3106\2004\223\013\330\317\201v\306\357{\246H\315\260c\274\334O\356\374\234\272\021\311a\251\233nN\252\326\226\343r\276G", 48, "\245\374\354p\243\215\017\253\253q?\323m\006\333\335\311\223IC\033z&\370\177\245\363\042\202*\363\0069\216\343\353eY;=C\013\274\022z\233\011]\374\352\250\366\317\267\3122", 5000, "s\376^^}\223\305-\342\007\035\301):\022)k\266\363\037kcv_}\310\345\223\324\361q\355G\300\365\242\266u\213\275\252\246\022Tha*\002\262&\330\005\366&\011\223\025\217\347\035\134\2571\365", 64 }, + { "'\355\206\021\304B\220,\312,1\246/\371@>\275\032\265\313\014\223\366\343\310|\000\210\331<7\375.k\236>D\325@+ {\017\254\343\255\267\272", 48, "\365\271\004\226\353\033n\356\215F\020R\271\301r\254\335\357\251\256\211\021\015R \375L\372[\327&\266\207\350\304\230\226\246\276\333G\240M\234\316!\361]\313\017V\316\300XIM^\366\234\252\042.\227\007", 5000, "\030\024\256\214\270\375'\000z\200#\000\342\203\321\267I\351\212,\357\3654\231\213`\264[`K\347\224sC\321\303d\347S\245\336\241\330-:Bxe\370\002\264\265&\335=F{\362\025P\324\214OQ", 64 }, + { "]0\343\335\304\302\210y\374P\037\267j\222\3041\375eq\216\007\265{\327k\025\205QV\274\002C\300\272@\262\316\304\302\260\024|\237\261U\274;\304", 48, "\346\021\323\003\216\205t\265\022\345\335W\352\347\346\324F6E\227\201;\012\262\372\304\255dPhVx\277}\011.\001\255\004\232\356\031\300\313\247Q\034`\225#\025qq\231\207nM\222\370\207mI\216k\227D{\304\342?\322\367", 5000, "\264\246\376Y\226\205\015\312\251\312=\370Y\213\241'\375\372\275\202\011Cg\307j\320\312\2272\377\302\240\232u-oE\244\222A\036\0045\322\221%#\212\036\014\263\302\366\326\333\376\035aT+C\244\302\335", 64 }, + { "&\314\267\351\254\337\360\243|\246g\134p7\225-\222\352\376\325\207\333Q\306\217\230x\247]\134\375\037\273\360\373B\235\241\333\236U\007\315\005\250\345O\035", 48, "t\335\342\323\366\315\332\216", 6000, "\340\342\325\222\362\036\255\2425Ep\336H\004\027\315\256\270\275+Q\224\273\256\230\036\303\351\035\220\023\326#\270\342\265\2144!\320+U=\200C\326\367\012\343-^r\305(\255\311\2550b\014\013,C1", 64 }, + { "r\226\021\010\302\035\242\206Iv\266,\365u\252\220\200\200\311N\366G\25216.Y5j\234\023W\006\326:\254\007\222n\314\037\334^\244@\020\2737", 48, "J\220\003R\307\360\321\302\352\204\255\226\271O\352\332", 6000, "\374\236\255\373E\223\332\214\005\205\320\376\311\314\214\366\326Q\314z\220\264\035\263\031\201q\360\007L\235\205\014\307\256\241\342\230\027?+\364\001\263\362\346\016\355\300P\033\201\365enL\223\010]`\262Lh\210", 64 }, + { "L;\320\273\354\350\215;4\315j\215\244\020Ym8Y\220\042\235*\315\303\340\317\301g\231nx\226e\253\344\033\317'\241~%\252\241\225n\375\016\361", 48, "\017\357\243\317\226\303r\217\325\237t\264\2722\236:\221ov\211q\316\304'", 6000, "\337\331f_H\255\303\312P^^\373PR&\322\000\3774\337{\251u\2611,\232a-\021P(xPMnO\335\3768n\246\207\307\015w\367\326\210\022\303\013\242u\316\325\254\373\363\223\340\235\3568", 64 }, + { "\026z\355g\254\372\266\217i\200|\033\341+\333\302w\014e\257a\261\235\233=\360\325\206\361\007\245;\004P6\201\307\272\3722i\333Y\365\2472\004\357", 48, "\203g \356\266\241!\202M\221\302\274\374\222\227\2624=\3567(\304T\030 \034[\042\313\321,\353", 6000, "^\326\234H\2378\261\330\300\316=_\220\206\013N\342\376\352m\316\311VD\021\237\273\213/\341\362\341>\246\200\037\375b\013D\242\226I\324\253w\266\036Q\015\366\032\030\337\033\042,\033\020\002\254\354\032\242", 64 }, + { "\343\340C\210\270\266$\260:&\177c[$\253\002\002~\312\023_QP\314T\343c\260\322\315\325Z\001\311\313\260v6\367J<$\023\231\263B~\321", 48, "|\254\3234\277\240\314|\231\223\315%\307N\027i\3460\277\353\341\257oJ\350\007\313[b\264\373\320\352\013\323D\310w\374L", 6000, "\276?Q\275\236*\251p\201\300\011\221f\203b\316\220/SF\371TjN\241\354hM\244\263\336\360>)Q\3546\312\022\247k\042\207=\216I\230\324\242\202\242\372gw\034Gk\357Z6\277\370\336/", 64 }, + { "R\361\275*\210\356\262[\2123\366\242\260\237^\2774\177V!\237\033\303\032\034\206\256\346\021\357u'\215M\241\026\305\350\3443\015&\003_n\247d\327", 48, "\311\353\274\027EKE\022\363\277+\202P\324{V\201?\220(\266,\344\216w\024l\263LYKx\214s$\3730\354M\002\371\234\015\201\305\035\012M", 6000, "\344,\004\363\340\373>(\311\007)\224J\235\227\177\373$m\252\205G\011\205\301\276\222j\245\360\316\262\214%\220\272Q\311\246\373\335\343\026\317%\245\223\330*\005\025\215\304)\370\031\363$<\030\217\347\302\035", 64 }, + { "\342\000.k!\021\356\317\366\030e\177\037^\321B\177\272(3\267]\3522!\323\025\263B\365L\343\245\343\277BdJ\334G\255\230H\354'S\316\227", 48, "9\223\367\206\021\213\002\275\002\235\362\017\016\306\277J\314\357\220{O\1340\026\233\310\267g\276\322\205\023\347\343\357\024\361\263\354>\324\226\336\303\243Xr\3423\324\245\243\034}fL", 6000, "\277j\214\037\253\214\326\003\337pzF\020\200\307\210\002T\256\214\340\356\266Z\261\262\220D\264\003\315\362$W\333\271D\305\223A\330[\302\240q\251\211\350\235", 6000, "W<\311\356\037\256j\327\035\206b\373\235\343\260\363$\224\3011U\214\334\247\035\241\037\326V\235\270^\346\375\375\251\042w \222\302\0153\202\017>Fi`\345\210Zt\014+\305u\204`\004\326hI\306", 64 }, + { "\207\335.W\320\222^,#\374\342\226\224\016\236\210Xx*5R\005\0368G%\357?|\305\355@L\032\372|j\020\376\251\275\336\351\230%{Q\222", 48, "\204\232\373f\211Nj\361", 7000, "\312\237\260\312r\315\032\210jz\302I\276\243\250\265/\027u\037?4(i\216\025G\352\033\272\362D8\230\304\304D\007C\223\335v+wm\371>\244\313\275\223\226\255O\273\265\322\302\026\266\210\033,\032", 64 }, + { "\351\315\015\007s\036N?;K\276\313\305\027\3443\241`\3168\353\264\273\021N\000x5m\020%O\372\011d\210MeY\303\316<8\033\026\027\330\274", 48, "L\250\331\250\232\324\035\255\344\227\313\334\367T\221\343", 7000, "\345O\261\350\203\357\344\350bs\264=\3658\343\337\373H\266BtY\252\352a?1\330\244\323\366w\357`\327\316\312\253\327Z\277\032\330!)Y\277\270\214Hh\372\277\371t\017\365j\246\204Cn\257\277", 64 }, + { "\015\316\026\222\224Vf0\216\243\304\215\330\317\303\245\261~\333zMF\362\033q\266\2464\351#\206\247\244\002d\315H\356IV\200\226\352\023\230Lr\220", 48, "\201\320\347\200BI\226\316\323f^=n}\360o\302\253\021\364_\017#\230", 7000, "\263\315,\274\011\320\250\250\204a%qyyc\203\305\334;\271;\226\307\342\337\331\311\252\211\374O\211\222\3216\275\355\335Ct-\357nS:W\367/o\330\263\026\033\026\220CmA\011gr@\025\270", 64 }, + { "XxQ`/\267\322\333\311\314\2604r\247.,N%,<\343{\260]\203\213\224\341e\267\016&\300%\223\372\306\356\344\036m5\376\277_\307\215\365", 48, "a\322\236\225\2352\213D\371F;T\265`6*\242\252\354\005\254\235\222x[\026\373{\347\364S\311", 7000, "\037\000\251\334x\275\265\323,\026\256\3703\206\375:x!\373\337\270\306\005\202\315\354\015\3161B,\235m\366\267\037\374h\273jgM\244+@\366H\217=\223E*\203 \372p\214B`\372\223\250\355(", 64 }, + { "\320r\000A\354\217\332}\235\330O\006~\362\321\212\242!\204\377\275y\337[Mv\355f\370\334\365\207\260\247\262a\355\353\306\323\207\305:\356\023aE\227", 48, "\006\374\337\262\336\367\244\022\313\134\371\266\263\003\206\301\262\300\260\217!N\274\352Z\031\267\376\264\305\024]\027XK\006J\244o<", 7000, "\275\245\364\263\007\213\236a\353{\250\227\231\027\263\320\254\216\376Z\275\260\311\251\001O-\266\364h;\001\236oZ\035\211rI X\234?i;\013\330\267\254\223\310\001\367\327\216lU\371\212\277=x\334t", 64 }, + { "4\253\333\315\017d3=\373D4DP\354\305eE\237uAh\337\2405\362\3017E\345\377\225\222\345\321kD\240\365\222\334IZr\011\277a\307T", 48, "\017\205\042\033O\271\030)}c*\006\037j~\34208\276\254\373\233V\266Y\317\2051\215\277i\003U\375>\320\234\334$`\271\301\251Ir=]\025", 7000, ".\331\203H\033\314\212\327R\264g\305d\305\252IS\300\202\265\017[\263cj\353\222\274\363\302\245\326q\270LV\257\262\177t4*\177\213\365\347,Xx\027]\325w\210\362u\205\334\305`_\343W\251", 64 }, + { "\302\357\007k\362\234\310_\213K6\226\006\311\313\342\227\347\226y\210\253\273\302i)R\305\001\365o \335\206\030<\352\311\030hL\361\320\342\2430p\201", 48, "\216v\267\216\340\203`\177\232F>^~\357\222'\013#\032?*?\025(\206I\307R\227N\235\214r\266\202@\242\202\215C\356\246'\014\005-{I\331\367\240Z\224\227\247\360", 7000, "#o&\232\242\232\323\234\371`y\242\302\373\002\276\300\013\255\272\225\242\261\223\354Vvt?\372\034\265v\357\375\206`]\236\376jl\202H\207\272\250E\304\005q\357\220\300\335A\266\316\314(\377\000$\204", 64 }, + { "\221\031\331\246\220\371y\353t\234h}\010\235\134\014\244k\273\274@\224|&\273R\254\223\012>D\333\025\273\262\012\222\370\255\201s\234\262>\311\345y$", 48, "\252Q&V\341\266\330\215E\337c\302yt\227\314\264\036c8\356\240\026-\250\0220\271\203\311\326\260\320\262\007\375q\242\200\323\345\042|\304\367I\231\202\333'$S\245\252G,X\343QRK\3553X", 7000, "\027\3340\256v\217\244\245}\245B\350s\270pF+\037t\340\3040P\325\224\2044\006,b'T\235\013:\367\273\336\255\227\230Ao\243\355\251^\324\370\325\307J\202\275\004\371\256\321\260\305hIF\023", 64 }, + { "\325S\032^\015G\353\362^AO\356\302\266\246\251\226/6\276\271\210T\320t\252\362\034\314\366z(q\005\031\033\342A;M\235q(\005\265_\332%", 48, ".\022\232\355\300\311\020\276\304\300\331\006\273\224\244\305Bx\306\317\245%2\331\266\201zR\376oei~\325\255\025\366\320\356(\315\216\024\345\001\021O\2571G\222\244t\012\230]\327%n\353\253\3527l f\356G\364\345\213\315", 7000, "\324!\305T\363L\134\004I]\010Z\335\242p\250\335x\240J\277U\270\231\027c =\335UU\365\266g4\003\360\025*xa\304\264\017-\311\204\236\355\341\273\212\252\320%G\356\240\344\034T\267?\217", 64 }, + { "\326+\305]3\260\0238\247\332\3650\203\234\222\232\272b\202\012\022-\363Z\022\313\261/\375\242\323\227\327\203\033R\322\221I\232\274D\002\305\207*\320\207", 48, "\322K\205\015w\314\267\314", 8000, "89A2\310\212\272\365\307\347\023%\263+\263\307~8\240\335\350\374\013\000\304\370m\244\346\311yH\273\020\002\237\366\362\346$\021\027\320\277\327\361\353^Y\024~\1340\037\203\002\035wS\273R\244\274a", 64 }, + { "\356~cy\304\371+X^9\335\304\257\0078\262\274\237\212\326RZ\213enC\237\225$X,\265\177\226\2052\275\025QU\002\203\204'8E\230\277", 48, "\362\356$\042\252\310\332\267\355\011\303\374\341\317\023\351", 8000, "\022\336\207\312\365\207\005\232<\303THN\303x\275\201\251\320EQ\363\337\253\242H\227+\346\003W\235\321,\3438\227\205\244_\376\252k|\004\373\370\271ZY\341\332t%\235\304;.\377\343\352\310\230\334", 64 }, + { "\203\020KLv\231\231l\311\355\270[\202H\231\350(N\333=\223\020$\271\350V\005\361!\254L~^\011\003>\223\313\216\314\334\363G~Nw\001\315", 48, "\200\016!Cw\267\245}\322\354U_*\331\015)\375}\273\2213\373\314\005", 8000, "\307\340\243\202o\300\337\213+\0209\266\311\252\251\036\371\2202T\000\037\220t\224\255gD\362a\327\314fU\246\237s\006\237\376\246'm\0250\370\206\373\234\247je\347J\256\036\004\003fB\247O\011~", 64 }, + { "\002\342c*n\2159\201\361\007\267\221\245k5/!R\224\257\201Z\352\271\256!gJ\3163\323\204),L\204\256\257L\233\221\310\326\357\016\334B@", 48, "\255\352\265\017\375\006\365\360\372M\376\355@By#\313\251\177Q\277.\235\015\230\261\015\002h\220[\315", 8000, "\314\310\364C[\214\206\177\205\313l\373\357\226N\226O\231\005\221\251'6\257\036\234\014w0Y?\330\017\024\030\245@\015\232\373\323\361\2165\360\273n\311\203\207\313t\012\360?n\012\374\370\2178y\250\340", 64 }, + { "F\220,\342\271\325\224T\276\021\206\271\276\014\204\027*\002T\030\003%\251\226N2\007\274\235dKT\341\320B;\220\042\021\220\240\313\025@\213\361|B", 48, "\2715\352\303y\267\260F3\042o\376\220\241\370\322+x>\006}\011\237\26568B\355.\333\217\220]\352\205\314Z\033\024\230", 8000, "\325\200\311\010\255\014\015\012\0312\227\023t0\010\257\036\321\035Ub\356\313\263rW\246\023\370\021\134d9\251\225\366\253\324\035i\003\312u=9[|F\375\343i\251\274m\2166\2128\355Kr\021\036e", 64 }, + { "\3470~>\252\201\367\3254\2660`|\260\265\263\306!\004t\241Z\312[\234\240\316\272\001fLF^,k\034|(\360\201W\351=`a\2559+", 48, "\203>\324\207\242&;\023\272Y\300+\357\321r~\302i\341\336\335Y\271Be\313\260\345#\315\361\373C\207M^\013\276h\231{{B\255\376}\237}", 8000, "\023\012\014{u\274J\027\303\022\322HV!\015\321\376\204\332\301\306\001sN\366]\215\276\237\206\257\314\245\004:\225\260\221\327^0J\351+|\334\376\323\002\355\302\310\000\012\361\252\307\334%\303\340~h\336", 64 }, + { "\322\200B\315\306\217\003;o\030\200\3471%$\366\005,\332wno\352\224f\360E6\215\240\374o\212\302\352\366\321\310};R\334r\265\307\356\0129", 48, "\301H\225\260?'\355,T\004\020\030a\360\221\340\207\021o\014\027\246I\262\351\226\342Y8\017\3427[\372M\316e\034\343]\335}\334s\343\006\322\255\345k>$\317\243j+", 8000, "\331n\235\013o8\255r\261\356\317\262\206\337\206BU\272\272\042\207\372}H\252\332\331\337\033\001\336\372\364\023q\360\313\020\250k\315\365.\134\201\316,\2169\3411i\357^I\204\325\374Qk7\315\205Z", 64 }, + { "\240\276\020c\257\224(\207\033\214\361\277K5S\241\177xl\335\266\325\221[\005\220\031\376\264\277Ip]\251t\220\240a/\260,\277n\365\254=OO", 48, "\231\006\313\201\376O(1j,HT\376\334\306\242>b\356\347\360\350\353\326\033\206\252\277\021\216P\037iN\014\341\371i`ZR4\016<\215\245\013\020\255@\002\267\035D\352k{&\2365\273[`C", 8000, "\264\261\232\201\346\355\306\350\271{^\217\276\005\237S\202\320\020\322\205\334Q\345z\210\357P\217y\216\2704\015\357'\254\021\234Jo\355\322\037\0423\363\027o\227\345\316\3609\372\310$\307\236\370\322K\213\252", 64 }, + { "{\262\366\317\260L\3010\312\213I\2542\251:\314\317^B\355\011|[o'\316\312\300?\221\021\331H[\253\2024,2\362\332\021\374g\252\221\375\213", 48, "r\254\355+\274N\204\306\266\333\332\003\272Jrn\324\352r,\322\376\253\363\031K\201\312\004\277\356V\212\231R+\306\230\341\242P\306U\014\357\227\220\306B\302\230S\211\030H\240\311\214\247x\340\033\032\302\134J~\212)}\315\324", 8000, "\336?\2265r#\010\232\375\031y\371Z\024&\357\366 \263\024i\234\316\233]\243\222\353T\224\002\005\015`L\227]V\361\256\012\203u\004\002\312KT\003]\241hy\001\306X<\211H\332>\357\210`", 64 }, + { "\327L!\213\262\001-_\342\022\310\370-\277\240\035m\200\025\343Ae\202\257N\004\355\017\307\362^\035\325\356\277\013\271\001\320\266nda3\313\346\336\337", 48, "\303\376\271%f\011Q\244", 9000, "2t\312O\303\020s+ \231\346^\312\273\000\330N\206\362\226\254\206\362\315)f\357\316\034\002\005 \250\306\354=\336\247o\313\312a7`_\242c\356o>l^\034\267\032/d\302Ru|X\331\272", 64 }, + { "N\326Q\311\276\010\312\331\314\341\234\342@{YA\252\3404\314\031\2613P\020\011\330\310 \224\177\030\032\247\262w\321\2302\370D\006\235\027\360j\034\042", 48, "\365\031\352lZZ\210\223\223\202\302\3472'\215e", 9000, "Q\271\224\222e\316A\255Z\177l\026\030NT\242\263\3773\025]\376l, Jk\134\221\025\316!yj\270R\242q>\260\277A\213Yr4\211\354\345qH\200\134\304j\026\030\275vG\042`\205\234", 64 }, + { "\201\345\257gf\2623\322\007\016\3369\245$\351\216z\224\311\217;s\202/\002J\364mr\312\262\315\270ytO\001+$\273\205Y\327\212r\322\177\230", 48, "d\210\377\354v3\326\227\321\200\315\340K\022\035\2222<)\035\336\325,\376", 9000, "\013}\246\202pG\243\307! \277\177z8\307~\303G\223L\317\225\312y}\320;\033\206\360\243\227\035\374\253b\252\035\235c9\200\347@\262\231\313\330\301v4\222n\273\221M\016\025\326\331(\243B\316", 64 }, + { "\205\031N\267\2314.\365h\210\246\265\323(\221\367f\211\300&\303D\036\251\024\331g\354\344>\001/BJ \246\226\003C\260hj!\210\343&r1", 48, "2\315\225\207\307C\267e\233\013\261r\234Sz\255 #\316_\267\355\345#\361d\376X\304S\330r", 9000, "J\222\216Z\305\020u%\261\3464\220[\353\254\271t\377\2558\313\312\262\302\341\001r\037\335\261E\210P\010\365Xe\2034B\377\254\003\256$\307s\213\000\033\371\377?0\255\031\225GGO\274\370W;", 64 }, + { "\346 \313`\013\340\264\251M\026\365\376\001\371\362]\244\256\335\203d\355 H\355Vt\305\235\034b5.d\210\211H\317\000\001O\370\177\317k\355\277\015", 48, "8Y\351\207Y\302\312\327\343C\206\335\011)'G\206\272\366\206\037\320-l\275.$[D<\312\330\032\232\236\037\265\361\243U", 9000, "!\217x\241we\322\037-\177\375B\222Na\017\376\224{z\250\254\235N\263\355\351\215\223D\006J\366\262\342\277v\262\335\334\2752\336O\360\250\256\324\300+\257sA\257\205x\375w\271\016\263R3\006", 64 }, + { "\214\275\361}?2\257\011a\256\243\362\270\356i\270\260-|c\227\311\0175\226C\355O\006\201R4\027a@\004tpx\271\256\371FR\016C\012d", 48, "\264OAA\274\375l\304\035\255\222\230\340KX\003\237\270\240s\134\035\213\360`#\253\256\222\346c\234!\311?\245\036\2402\225\267\033\214\002\251\266\325\363", 9000, "\221\257\256\354\355@5\025\375\014\230\203\257\005z\235\355<\316\312\201\306\265\264\376\233\001\315a\340\033B\260u3>\350~\360q\017\233\367\2368+\210+W*B8ZA\225i\313\364\3755\260,\355\021", 64 }, + { "\024+ob\033o\000\317G\244\001\341j$\271i\270\323\214\227\313\362\022\236\230\333\002I\374\206(o\355\352\223M\367\360\015\134rl\207\275\345$%\261", 48, "\014\212\304\314\363\206\374\206\042f\035Po\265S7\011\337U\275Y\3268\271!y\255\222w`\321-(\245\314\275\326I\204\004l\251\312\3308r5mWq\302y\031\204Zd", 9000, "\007\242\343\025\014\305\013\374\007u\334'\006@\026\301D\330\241\252;00g\200\326\300S\335\327\212h\316izd;\272R\225\037\003\032\272\362\201\351\012\370&\356]m\024-\260\270\250\205\1340\374\277\311", 64 }, + { "JO\370\260\3003\320v\033\332\353\250\340\303H\305\276\010\002|\236DK\246\312B\2345\0427~\244\341\021-\226\260\022\134\225\134\134\342X\216\320>f", 48, "o{\276\324v\343\323_\217\010\307,\371\337e\310\260Kmn\277\351\034\022\260M\226I\275\241)1uFY\372N\375\037T\234\340P\355\276\313+]p\035@\0068\301\215\207\020Xry\302\267\265\212", 9000, "N\005L\3772Y\243bo4^\207\034@Nvf\310\340\342\306\254\3429X\207uVK;\210\346\206.\042\271\013\337M\341d\352\234\335\020\371\316\034\271\134\350-\343\263\234\014#\301/\215'\017Vi", 64 }, + { "\312\367\010X(\322\245\2355IP{\034\252p\332\316\012\224\311\245\366\216\355\261@\042C\341\134\273\021|\351\223\221\375\336\255t\011\022\372\216\370\333pN", 48, "h\201\327\177\322\026\243\273\335\206c\260\337\2178J\247\022X&\314\347\356\2576Z\371\012\036L{/\324\205C\227\352A\017\346(\001p\322\354|\306i93\274\360\214\302M\331\134y\375\021$\376]\021\333\272R\335\261=?U", 9000, "D\220\257\020#\326,%A^M)\203C\031\323\315\212*\366upkT\346(\276\340\033\351O\236T$D\030\345f\340d\370\000\325\263\372\336\246:q2\253\216\236\316\222|\273\215c\013\035\341\346\326", 64 }, + { "\012\0021\2554K\025.\250L\177\034\021\271+\217\314\267\312\217/\201jW\304\134,w\371\030\026~b\345\252\032*l\307A\344tG\201\0277\272B2\274\342[\213\353\232\225", 56, "|\330\307\300\344TdF", 100, "f\325\322\343\327\376\252L'bX\232\025\242\260ML\370L\351\012\200\235s\234\346\035\254\214\346}H\307_\350_)Z\252dw\017a\003\323\320\2130I|r\263\260\252\250 *\314\275\316W\213\365T", 64 }, + { "\265\277&3\336\000p\271\375\024\027\035\316\001\254\254\335?\211A\257\330\023z\275P\334^M\355I\361a\372n\220\236\333\226w#_\241\242\004\355\220\377\317\0139!]l\232\354", 56, "\303\322\337A\240\361\204\250#\325**!30\366", 100, "\261F\372\232\217\353R_7M\315\363WC\340/\014\244\373\0326\330\231}\007Yn\031\274Bp\310\200,\253\020Gq\225\237\366\265\032w\213&\343\345\320HG\004\237\312\256\225({\042\352\220\364=\232", 64 }, + { "ZM\361\367F\257\262^\035/\022\245j\330\256\256\347\246\267\320Tb\231-\224\322\223\264qk\035\0316\326\236\010L\300w\326\031\376\304\246\022\335\200SQ\234\031\023\320\271\030R", 56, "\263\213\022g_7\373\002\213\266\332\344m\215X\035]K\200g\014I\251\370", 100, "\260\220\236&>k\310I\270&\302\250\246%\326x\371\213F#\265\251\221\023l\347\253`\253W1\240\300{;\200\264\213\251\003\240O=\214\240\001\214\227%\271P\275 ;}\216\031{3\237\203c\212e", 64 }, + { "*\255\343C\246<&\316 i\270\001\022~\347X \214,\255R\322\223\023\317rk\231{10\012\002a\235\263&f\344\364\326\017ZN\325\377\330\323!f\314\236\372\246\371[", 56, "\254_I-'\322\233$\007\235\371\306\023\012Q\300\036\341L\233N\324\325p\317L+\013v\311\316\354", 100, ":\233\376\345\015\356\005GU\306t\212\010\042\276\274\263\205\221\353\365\320\315\330Ew\340\020\032\003\367\345\366\016\276\134B\0347%\134\2110 r\272\031\277\024\257\321\222?[T\270\251&\200\013!\206\036F", 64 }, + { "\2373\301v\271\235\276\027\036\310\364\032\002\3031\342\220\363\343\355\315\227\032\177\264\224A\240\010\310\332m\376F\330\212\003\253\264\022'\2329\350\372\007\367\237\363\031c\312\357\015\036\247", 56, "\306\020\351%\320Q\236\371\241\204D\020\273\264\325\322\347\276\202k\347\225\312\270'\364\244\267\253\324\256)\361\362\363T\020#\177I", 100, "\307\203\024\042X\2128R\350\013i`\227\217kE@i\275/\371\365\352F\3261\013\203\253\226\024I\214\005\340\266\0024;\021.\004\325\353\333\340\353,\253V\204w!z\360gV{(\200\200\243\203\203", 64 }, + { "x\012\013\003e\212\033\346\266y:=\322\266\034\021%h\337\263\305%\212\214\345\2142&\347\316o\331\277\344\134`\245[\256\222\134\241\323\006H0\333R\345C\035X\036\011w\343", 56, "\324+\317\332\345%*uC*\367\331\231\375:\012\344\322L8\036H2=\370\337\011\254\313<\231\341Y\037_\203bY\235\316\245D\261\275\260\277v\321", 100, "w\371\345\322vt\024H\034uV\345\273\201Y\263\336\317\352m\326\023\373\210\205\270\270\365:e:\232\341\034\340\315\362\300Z\252\227o\244\260\005s\014\373\344V\010@S\0163s\304\373)\026\215S\030u", 64 }, + { "/\357:\266A\017\267\203\302\030\374\011\337yPe\211\002\325\371PI\036[s&\315\007\363\326\227\224h\202\345\241p\236\263\207R\233\223\255\237\201O\213\300\230h\027\372\270\342\252", 56, "\021\037\205\367\202\371=\373\311$\3276\204w8{\322\326`\222N>)\236\250\236K\333\005\134\243\255 \214\375V\204\343\333\201\031pG\236\212+A\321{\222\231\350t_\262\243", 100, "_1\033g\364\204\217\016J\201\3137(\240K\200a\241d\3443\377\266\017\3118\3247\255\343=\251\042\343>sFI(\237\022\034]\007\002\301B\376\020XE+w\344lm\273j]\236\234+q\007", 64 }, + { "\200\315o\042J-\2216|\324{\301\366\352(\313\215\277\202\134&\354^Z~\224\360\030E\341\262\274>\234x\005\201\350j?\363\275\3310\334\303h\247\214d\251f\322\270_\261", 56, "\003Z\010\015'\3659\371\213a\032\026wr\275]\201oD;'z\336H\360\362\262&\312\372%L:\271\254U\252\177l\015jR\256Z\202\341\342^\344:\321\016\310\225W\246\350\031\260Or\247>\312", 100, "g\260\207\013\373\201\012\363\253\001Q\004\347Brs\317\333\350$\016\325\000$5\347\373\235\020\212Xaz\2310\362\310\304|\342\302qdi\272\020j\370R+ \275\357\327l\233\357p\214\020\025n\260\234", 64 }, + { "\027\214X%t|\276uD\2646Sa\0229U\342\263\204\215\017\265\220\262nl&S\323\335\272c\313\016E\343\327{q\010u\215\271\336\350\236{\010\333`t\321\303\330\243H", 56, "\030F\023\257\276\014@tb9U;z\250\262Q\352\317\240\320\222L\177H\371\213?\334@\277$\3062\006\347)q\340\356OjJ\177q\250]C@>Bp\275f\372\203g\200N*\234.h\256\201\251\312\260\363\211\334\207\332", 100, "?L\013\234\225\011\245S\276\333\202\356\012\347X\343\223\312\310lx\307\243L!t}l\322\360KFqu\263Wy\362!\323\373}\316\276\374\350\202\361\036 \336\237x{N3\261\373\037\303\013;\254\302", 64 }, + { "\201\024\017\256\016\004\012\266\346{\253~\241+K\242\032\340T\200\207:G\234+\336\266\321\374\240\371\313\213\322{\2001a\314vkv\253\270\347\306\241\377u\233o\340r{u\215", 56, "\351\256\262\270j\374*\375", 200, "\225\256W=\253\033\267\207\010~\367W0\375\035C/g9|\3500\237\011}\277\313\023\032\003\017~0\032w\037\327z\257\221\371\272\000\030V\257Z\203p\324\202Bc\262\302\360\266A\027\255\347\016x\277", 64 }, + { "\361\362)H\255\223\262f!\237q}\211a\313\340\013\273\255\244\177\005&\226\216{$5\206z'&\232\273/\370G\216\201\034\205\307\236\330\2132\033\210\257\235\001j\026]^\365", 56, "=\364\001\274f\263e\006b(p\2263\035\205\231", 200, "1\337w.o\2238@\015\221\025g\241\342x\236\342\034jT!\003\023\003\3037\255lvx\252R\377bt\037\010-\263\316\326`rBb\353\202W\270\365\234\250\251\253\013\303\357\007\352Uz)\037~", 64 }, + { "\257\277\134)\332\355d1d2+\353\373\030\375\367\033\252\200\240K`9I5\357-\216\020'p\315c#\221\222\2375\036}T?Q\357?\370\234\226d\015\014\024\362.\230\225", 56, ">\316\225q:\330\227\235\001[\025\200\360Q\020W\213\035\005d\232\310\003\362", 200, "*\337\342 5\215V\033\277\266\235S\275G\3654\274g\323\377\200\327\221\3660\342\337\242\365\025\322\264q\257\354\307z\242\355\276GS$NM\373\212|J\211E\027\234k\215F\241\214\351j\323\227\243R", 64 }, + { ":\334\025\003\012\272\216\010\265\303dz\332\270\244\370\337\337\362]\320\001\374\247\375\211\236K\236\233/\016R\356\242\030k\224\005o\322+_\241\013\337D\345\325\246\277S\245\335\262\370", 56, "$Z\306*\301\024\365\341\272\252\241\256\004f\260\313~`\253\227\307\015.@td\027\352\023\303\037\245", 200, "\205|\242\366\361\322\316\360\003\330?\212\227d\011\367\306H\364]\321\015\013\233Cy\236\301E Y&\336\013\265hE~_d\207V\367\270\362\211\377\351\012\020\037H\323\321\356\272 \345TK%P\317U", 64 }, + { "\231\277x%\233\335%\020O\317\273|\332\300\025Z\375`\254Y\001\374F\277\347R9Jp\257\355\305\314+\222mhE\134\364\261Y\220\253T\016\341\230\220\2049\350T.36", 56, "\273\270\005p7\266fex%\352{\216\324\317\230\347\201-p%\273\305h\030\324\317\005\012XQ\252\204\004b~%\300\350\322", 200, "\225\266#V\362>\224s\003\004\343\234\013\364\250\2561`dF\270+\257\226\314\007\014X\302{;$\376\376b\034\300\350J4U\207w`\200y\011V<6U\217\274\320\134\036\231.\263$\003@6E", 64 }, + { "\335h\233\222\333\376\221l\310\277Qr\311\245\030\026\231~\264\376\374\010\010\352l\367\014\346\2428\204\207r\034\236\367|\202\311\014\200]\042\350\230\014\042\227\315\304\006d\037\354\022\236", 56, "\327q\034X\210F\233\134\316\225\3179\216\311\335\262\213\011+\300\242*\324]~n\300\330\301z\345\267\350M\012\036\267\222\221u\317]*\271\271\350`\027", 200, "X\025\236k\211#\272\010w\252OD(\042\234\244\252b\004\014\017G\377\206\201\367\311\346\225\347\271\013\253\022\224\375:\015M\030a\337+\371\301Y\342][\245V\202F\373\230\325\246\301\030\307\016\316\367z", 64 }, + { "\321h\237?\226|\246\300\002\2461\036r\302\201\347G!\345\243\352\230\212N\212\301io\002\265\224\234r\234)\014$\371_", 200, "\265\256\260C\322\362\025UZ\373\310\042#\355V\2627\214vv\031;\305\177\026\337\033\004\255\344\201\006J\232a\227\215\134\263M+\277vvF\263B\244\366\224\321\200\336\360\273\332\030\273a\177\343WQs", 64 }, + { "\237\177\212\014\014k\321\033U\252tY\371\002#\332.\271\206._\341A5L\365\305\026\303\231k\362\200\314)\236\250\351\212b\3224P\225\361\332\247\275F\321\310]\330\213\341\210", 56, "(\233\022(\235Z\311\220\371\003\035\315$T\361\220s\035$X\370\271\260.\013s\012/k\001s\246\001\216\221\346+\324\262\363\030\331\230#\370\246Z\004\036z\310\034\301\026$W$\322\356\270\315\241Xt", 200, "BP\254{+\275\311\2262%\303\320\352\313\334\326\347\013\025\272.\332`*\242\302\315ABZ\372\211}\352fy\377\276?tQ\002\320s\033d\343\351\036t\033E\326\336\315\335v\310\037\203}}\017\223", 64 }, + { "T\375L\020\260q\210a\271\242\270\231'\317f\366\331\017\022\004\253\275~]S\012\253\010\022\265\134\035\332\351a\371\362d\376\021\006\300\205\010\264$\027V\322;[}2\023\346\364", 56, "~\323Y\311\222IiD\042\377EK3\021\217\306\235\250U/\033\236B\236j\032\134\302\006\304\006pm\2145cN\234aR\017$\356-wwH$^\001\015\317n\014x~;~\312\335\256\227u\237\342\312\217\323\335\250\023\331", 200, "\002s\037\213\325\205)\134>\016\217\302\001+\004B}\232\304\333\211\213\312\037?\020\374\302f\256\204aY\275j\277\020^\005\256F)G\360\212\240v\012\327\257+X\324~M\245\320d\340\360y\357\312?", 64 }, + { "r]\363\000hr\356vY\302\354\336\273d\322\265\201X\323\205\361\277\230\224\273b\320\354\336\241ff\322\356\376\256S\025\375\012d\376J\327\360\263\250\363\265\031\217|\005\217\177\330", 56, "\035\205\201\0145\016\364\255", 300, "\234W/lg\273Pn\323\134\015\0159\035\264\330S\345T$8\376C\327\255\367-\310'\253\355wbj\016\305Yo'$`\327\177\315\254k\317|\270\300\201\016\270T\361\334\237\302\356\262\025\361\365<", 64 }, + { "[\362\344]**s\334`9nhC\212\320(%\224\341\366\347\206\215\337\211N\346I0R5hZeU-\3144\351U\364\272\004\231\316l0\3422D\346\376]3\211\224", 56, "4\2300\026\333\211\255'B\033\267\363\204|`~", 300, ")\333\035#\321\025a\0216\306|\273\331\025\302\306\342\231\036C\012A\240\356\364\001\030y\032\023x\031i*\346\341;\212\261\263\212\274a\017\352gM/)hN\232\262\031\371\267%\032\271@\017\313\342i", 64 }, + { "\0232\236\245\236\367\265U\031\235si\306\327\024\240\2143\261\213\265\377k{\225\2673\026\037G\007{Q\013\2020<\375\340/>\2354p\030\315\354p\375\267\321\266P\2365Z", 56, "\262\3702\216=e\326f\231R\303z\255r\345%/\315\316\340\2004\300T", 300, "\273\376\362\0214\002\345.\313\332\230g(?\206\3403]yk\360\025\233\373H\016$\354\003\240\313\304y\373\326\210[-~\360\200C\023\340\247p\323\224\3437\022\322\255i\364\317\217\354\301\015-\020yA", 64 }, + { "T\317^\247\304\021a\362a\235R{\266[\323\3054\252\276\036\005\327\342vn\134V\340\336\257\005\327\253\236qt\253\356f\003y\333\302\217\224m\030\264I!\207V\271fXn", 56, "\336\036\015\030\323t\010\037h2V\2514\2561\325>\3605\3354\226\363\310$\355@\261\324\321\333\272", 300, "(\202\245\265$K\256\300\037%\010\230\337\266\334\305\207\016\340J\314\233\315\313\257o\363\346\253\306W\245ID\315+\321\247O\240\007\273LG\203\2564\351\371\342\326\210\234\360\356\236\300\037\256\317\313\273\363\374", 64 }, + { "\351{\362n\251\033=\004\304\323\332\276\304\306>\375\250\360\207\263\0359\033\244}\370\0060y\275lA\037Go\351\265>\345\270:\346\011\223\356\233\003\242{\371V\372\030\011\235M", 56, "\205\300\276\134\262\237\230\026U\042O4\354Z\324\017x\370\326~\240{i\211k\326\014\350\350\223<\011\233q\315\271)\201\002V", 300, "\250\302W`\353 ;\013\354EmG\210E\344\244\346\343\303\364s3\207\352\262\012L\200c\342\275_xF\301\302!\030\310\277\305\031p;\327R4]\241\012H]\374y\271\273;\331t\323E\211\346\223", 64 }, + { "\373\344\235\025\313\213\037\314sE\305\217\201\207\200\255>\016\002s\270\276|\2027*t\223\211\253\350\310D\202\223Q\202\273\211\341\214>,|\334\327\375\016\242\004,J\351\207\320B", 56, "\242X\031e\233f\003@\274\340z\364f\303\215\301>\234\335\243\243\334\341\254\004M\006\275\276\266\300mx\346D(\303\207\042\263\300\306\372\240I\252\016\324", 300, "\263\336h\205\364\347\361\237\246\230\226\032\372\2349\331k@\276\255Bc\217\012\0247z\304i\353\367\206\310\311\366SzJc\232\255l1\317\025\2470\235\324>E\367\200\024\027\212H\276\310\370Z\237\227{", 64 }, + { "\242\220\207S\211\213\272\343\333L\223p\271#0\016\251\363%\213\347\017\204;RU\010\270\216\250S@\223\243%\234\013\311'\350", 56, "\272\221\362\224\225\266O-\360\335\247\377\371\205d\236\270=;\2716\353\305B\2476\243K\034\222\007\265\025\314\307\264\230\303g}[\271\253\211\271\012\303v\301\273\214\331\236\267`\366\255\321\241(\342Y\004\224\011\210a\315:\324\264\277", 300, "Pp\361\036\353\372\221[\013\324D\014\252\0254[\234\345Z\245\367\311\234L)\373\242\273\024\233\376S+\3751\373R\030\223!>H\260\010`\015\355\361F\372\263\343G\030\375\222p|\265/_h+&", 64 }, + { "\326.\362@\324h\237\007\317\030\307\035\215[\2572\312\232`\302\265\017\2659-\314\364\241\346\2323\251\225\204\235$OT\271\340\231\377\210\211\254O\013\036\340t\324~\350\346\305t", 56, "\362\042\271\224\360\031\217F", 400, "-\033\3460\367 `g#\240ShxVOKzW\261\330X2\333\232\370\251\274\325i\327\354-\222\257\2552:\373\305\330O\007\227\015\350\014}G\2259\021\320'\261[Gp%?Qy\014\321\240", 64 }, + { "\004\307GI[\200\276k\233\014\225.\363xI\373Z\327\356\255AK\356]\366vV\202\377\213C\2176-\223Ty\221YWH\232\332\364H\236c&\367\375\243^\222\035:\337", 56, "\035\241\360U\224\261\261G\020\334;\225\277L\333|", 400, "\302%ni\223\031M}\257R\257\022N\314\205\367*'\177n^\272\300*_c\320b\134\251\230\346\021*\225X\245\017\336|\134}\177\277\315\310*A\247@\330:\000\370}=\034\010\203\376\373\023\236@", 64 }, + { "\010\202\234\205\036)bJ\310\323\276\032\230%\177\200'S\377vNv\3722\217f\265XA\177\366\223\034\042s\377\317\330\371b\014\333x\240f\366\011R%Dc\366\207K\200\333", 56, "GU\2662\202\205[B\0369\034\035\232c\322W\201\372)%CIV\374", 400, "AvE*\202\274k\201o-{!IEA1,\204\352\330WY\042W+\223\2136\365\300W\324z\355-\303[\013\0224x\222>\025\014H\007\360\234\266w\310@\276\344w \301\200W}\037N\303", 64 }, + { "\234\364\262\000\230\271b\374\255a\300\224e\024\336\346\326\220\022g?H\2258oY6d\335j\004\376\257\254],\005\0062\227\017@Dr\331\027\204\331\012#\303\012=\225\035\363", 56, "\2467\305\015/+\364L\303\350oz\253\3162\204@\375\370\257\233\305W\345-\004O\277\267\227\312v", 400, "\240k\030R\020\201\027\303\363\242$3\312Y\307\276\010\231\333A;e?\005\023Pu\036[w\277\317\300\006\262\277\276(y\334\201D\253\226Q\3711\036H\134\320\253\301\017\225\224j\371\033\320\304\336\035&", 64 }, + { "\037\257\213\333f05\350\261v\2161\360\355\200\033\025~\206\226\363\011\331\343G\013\207O\364U\250\211\216\242\017\242\021\3148?!\024\261\211\200\265\036&\000\3374\207\022\221v\221", 56, "\256\337=\015;6\264Z\355\255\277\257\252\030\273O\375H\350\027\234|jK\222\234\331\033\2259\134\250\011f\267 gd\264\203", 400, "\317X\2557\226\351\276\234\3122\235,.\265\247\003jFE\300\0035\373\3407\001g\202W\337\335\325w\252P\030\272\356f\267\344\276M\205\334\024n(\350_(E\335|\224\303\220\020\232\2223\272\2260", 64 }, + { "M\242\373\013\256\274i\320D\361\373`\235\216\204\374\312Jz\270\266U(W\265|\013\316\254\253?\242\357\134\020\274\352\266:nT\210r\234\034wm:J\257\264\360\023*\015r", 56, "a\273=\277\347*\301~9\022d\027};\355]\344\377\274\236\334H~\304B\202^+\240\367\335\356\204\255+\356\356-\311\371\212\324\201.-B\273&", 400, "\020[1\211\376r{\005\214\205\254G\247V\341\010X\012\020P\235jo\256\032\216\312\002\024\210\034\015\305i\246\031\023\020j\021K\257\025U\352\027\232\357\313\240B\034\214x\305l\233\345|~+\312\233\264", 64 }, + { "\217\266\276\265'6J\215~\014/\3073\036\225JL\323\226?\272\134\216\323p\306\315\353SM\245\364\222\260W\362\242\215\031\221\276N\366E\216\177\042\366%\004\006\030~\345\374\345", 56, "\223\210\035l]P\232\362\025\350\241S\232\012\010J\023\321\374\340\247\014tWQ\307\227\307Q\243\231JO\005\312\010nt\2361\022'8U\017b\261\261%\2319\265.Gix", 400, "\333\355\310\265i%\210\022^\370\231\221\3660_\212\042\274\336\030x\267za\216\260\257c:\251vJ{\340\3651e\013\312>\016C\016V\277=\327\233\363z\244\201\317\247u\344\235\356\212\373\255x\134q", 64 }, + { "\004\033\236\331\011'\042\323i\013\333\304e\236\371\260s8zb\252\200u\025\313D\207H\267V\215\177r\205\3439`UY\370z\033^1\322@\276,A\004Q#\371U\016\006", 56, "\001\265\022Z\004\037e;`\2647\326\311\272\316\232F\267|\344j~\373\340\306\372\263\325 \031wp\234\034\236\025\023[7\352~\330\031uU\356bF\236l%\350^\200\312\012\240\025\351x\007{\247\270", 400, "\372\2501\204\346\276.\2567i\242\306\303\001EZ\342m$\357\302JAt3\201\316\346f2Ut\322B!$\217\332B\216o_T\020\264\035\316\340\2001\243\012\364C\232\224\373\245\260\316\330g)A", 64 }, + { "\213\223\354\023\313j\023\220q~\260\252\263\027\300\332\0118\026\252\311\332\326\212U\301\033\303Y\017\017\244\217s\307\2501\026\007$K9\260\277\361\0043j\350\220\2632\006\211\332\007", 56, "h\026\365iw\313\2138\012\2264\351\335\014\2474d\362C_\024\225\024JXC\305$\215Z\375\373-\236\227VE\254\022\267\363r\372\317\265\325\376\013\241:\256r%\256\326\272\236EA~\261\2327\005?]\316\207ZxfR", 400, "\204u1w\363K\350\277\343\042\223/\257\031nS\341.\313G\374\342,\030]C\324En\373h\031\267\237wB\2101U\314\375\023i&V%@6\310\360\252\214\335\353*\314\225\036\037\273\203\221\312\344", 64 }, + { "8\240\204\313Z\214\303\037\032\177\020\331rM\221\265\375\375\342\313\224\205\347O\206\322\354\267\351\207\346\347k \353\272G\241E\326\336\240:K~%i\372\2757\341z\202\212\030\210", 56, "B\313\0113B\2333\215", 500, "8\362\033\014\244Aj\352OV\203\261\267\326E1\034\316R\217\026')\262}0#\220\273\377eN\224\375}z\320\226\031\315\042p\377\015\232\341\261hC\304W\322e\204\210\001*T,\323\343\223m6", 64 }, + { "\371\222\270\331L\332\315O\2555\300\244\374Uf\224\242z\202\202e\232\205\234L\316\372\320\025\230\031\366M`\357d7\312\022\300\260\341\016\324\313\354\317VH=\265\343H\312d#", 56, "!\006\353F\360\305\222\013\012\364SEB\373\245!", 500, "\220\303\300\031\253\227e\134\203\326\373\024\247\231\262\276]\355\361\027\331\241\307\373\346?eKjt\347\371\357\205\345\313VJ3\363\252F\007\177&#\354\240\351=\010BtFa3Z+\232\042[4$D", 64 }, + { "R\265\240lF\235\024\367Z\231\263\251\216\332\252\303m[\316=\3151j\322\3674\307!\006\356\2235\237\027c\301\344\377\230T\372\346]~Bxm9\020-\234\244\3047\010\320", 56, "*\374\372\266\201`\266q @\376w\353S\356q*A\306\230\376\301|\012", 500, "\367nb\322\341vl<\003a\327\016\340z\3251\262\025>K*c\314c\345R\24464\324\306\264\267\330\352RN\3539-\342?;n\373\013 \240\042\351J\247\001\265K\264r\232b\021\277y\325\371", 64 }, + { "\370\336\306 \221D/\203,\255 `\010\026\322)\320\374V,\204$\2301vdmC\351jXg\225\013cB\250\272\352.\2229\222\236\177\313\206\250Y\341\330\354\313`\217\225", 56, "\377\260~\010\305\305\317\244\3077\342\345j\263\042\013\016\134]\233\263\2756\341\234\031\215\227\211\213\326\036", 500, "\315\244lW\361Y\243\037\271\365\225oJ\214\345\303\276=\210wA\243\020H\347\205\223sB#\307~\325\364\325E\201`\017\2369\223\0229\032\177\206r\024!j\020U\231R\362C\226\000%G#\353j", 64 }, + { "\316&\225G\355\351\364B\251hv\363\000\324{>\214W\000\3614\306\205\177\302\363,\216\346\250\215\200%\335Yo\020\017\3641\377GhM\233\366Hg\354~ \031\242q-\234", 56, "a\217\345\023\221\220\317\354\275\235\300\00708\375&\267x\03222\374\236\307:zY\200\265\352qk\334\024\010\240\332\300\031y", 500, "_R\245\215_hC\024\037\024\3230j#7\210\334\245\0162\236\010zL}8\306\006\024\373\356h\317\026\364\345~\341p\024*B\243\277a", 500, "c\247\212b\321\262\346\313\253N\321\345\201\206\334\254[\373L\225\200\353\000\201\313\234i4\230r\223\225\371\033\203\327ZZ*\320\017\345`\302&pa\332\2166\245\0213S=_\021y\001\274\341*\337\015", 64 }, + { "9\331\351&r\205\345X\365\201a\003T\207\241\036\347@&\221\200\242\042\237\000\277$2>\006\324;\255$\273\354\310\177\254\134\273\360--\330?\347\042\356cf(\260v&d", 56, "\204i\217\313o\315\006\017", 600, "r\332';\213H87i?\177:\367\356\233:\224vY\254\355\366u\01143\356\001Pj\3678\256\305\270\273\352\323\303\242g\006\342|\226\374\252\233\276\250]\324rF\024\032\301\273\256\255m\377NO\265\304\367\203\321\266\310\356\342s\225\032\357+\312\213Uw?", 64 }, + { "\270U\034\335n\235\270\363\250U\320\023\007\303\222'\272\216\363\242\032\275SG\210\330\3754Lc\222\350\134/h\332\371<\224WF\223o\263;\233\353\345\025\350\256\364\327\224\335&", 56, "t4 \226\006\027QS\313\233i\310X\355\276a\331\261\266\2512.=\2357\312\322G\247k\357\302", 600, "$i.\353\372\375\260\262\325\351\0369\026\030\134Ga\203\275,cf\355\334", 64 }, + { "\346m\257\241#\351\207\231\301\364,(\240\272$\033\314\033\026\012~\303ZxP\361\313v9^\334n\030\017U\352\351\352\322\352\355\341\27733\330\042w\027>\247z\005\371\006\226", 56, "-\243o\371d\035\335%L\226\267O x\350\304>\214\256\213\3356:\351\277g\306 \353\221\270\345\301#\037\001\320\260B1", 600, "z\134\243\023\005\301\366\210{\310{\356\254\207t\205;\342d\330\226\274E\005\016\011A\322\242J@\327\364\026\313\016\332\201/\240\024-\004\016\304\264\222\326t\315p\274Z\242b\337\254\3725\377|jIs", 64 }, + { "\250\225i\221wd\264\223\242\322\230Yb\362 \310l\376\353\231\016\230tp*\264\300H0\207\354\033\273@\342\207\220\006*\351\355uc\024\243\257\315\234n0M\342\373\310\033\220", 56, "O\306[7\256]\327\010\244\317`{\320\370\317\362\252\320\237\2253$;\334\266\210\327\350-\033\232A\342e\325\367\3747\222J\230\227\201q\210\315\2072", 600, "WI\236\335P\013\367\250i?\134\202\362\205u\302\026\257\265\341\343\012\007\202\211w\335\314&\321\374\271*-\014\002\214\264\367\270\326\240\3664\325\377y\372\350\244\300\304\300E\201\357\015\375\234S\264\316\271k", 64 }, + { "\317\372\363\304\351\254J\322\330\333\343\342\273X\005eNe\311hQ#\025f\372U\2062\241vTFe\223M\342\232\340\204X\226,\307\327\301\007o\231\023\316 K\347\320\323\260", 56, "9\313\372\250|\034*S\357j\353rj\312\220/\363\032E\263s}\324\261\237S\371\347\017\337\355\250\243\214\347\031\340\346\305\0070\227\371\005A]\231\020\011+\330\310\016\221\337\373", 600, "P\263ay~\314\235\215\300\223\357\3164\035\273M\211\010\315\323\305\374\366\305\2254\345\242\245\243\334\301\202\315K>\361Y\231\214\3736\2526\205\345\362\360s\261jP9=\305\247jDcM\302x\300\203", 64 }, + { "\231\020r\351\222\326\232\3676\363\365e,\345\2735M\305\206D\233\364\004\226\3011\021\350\335\274\332\211\220\244\333\322\233\346\235s\230\331\243\006\272\3071\273\012q\001<\330g\274S", 56, "\005|\314\037\367\277\250\037\357\241\001\177\015\223_\344\034\206\232\015f\365@(7\315$C \236\352Y\245\335\335\273\023\256\224)\3341f\177\240\264O\340s\023\007\2762\203\345\237P\274c\231\226\352\340e", 600, "\305\321\337W\216\330\313m\207O\363\360>\272\366\260\357\323\363\276*U\254\015\2625^\222KpA\305\272\325Q\033HRv\005\257\244\2535\350`\230\367iE\007\035L\370\245\351\376\271\324Z\322b2j", 64 }, + { "\037N\217\212|}\007S\020\333\014\232\251p\372\303K\221\012\246vM2a\015R@\352\207\222L\305,:Z>\366\315\011\337\235\231\005\360\201I4\250\134wA56\272\360l", 56, "4H\225\022^\246\212\243\273\232\202\355\2763\021%\027B`\263\237\262\2154\204\243\206\216V\322\234-s\2118\231\217\231su\271\350O{H\210\3771\336\23025\202\035\033G\3415\002\222o\205h\214\270\205\3148\274b\345U", 600, "Z\265\226\035a\361\003\364\343\370\313*\260FA\335\363\252,1\224\300\031\306\215\323\230\017\032\272\275\001\3052'^Ip\223Y\367\322)\211+\206F\244}\377n\323d\322\301\237\014\223\330\215\205eY\243", 64 }, + { "\376\017\306\373\021\035\314L\023y\325\312\233V\010\210O\177\307pK\372\207\214\273@\320\333\265C\262\224\276,\265\324\311\325\347M\324\362\034\255\025\015\351\325\232\007\216~e?\275\346", 56, ")\344;\206@JMm", 700, "}\216\030\376\247\240\353\010H\313\326\233H\314\300!\3035\032\213\011\273\247\336\015\031\356\221\021\0135IP\004(o\353\266\302\042\345 YNx\2168G\260\000\021\300\230C\263\364\246;\312X\357r'c", 64 }, + { "\200}\3266\3355np\266\024\225\022\220\024\033\35004_\227|\244KK\035z\330\025Z\252\2433\267\366\014,\242\227Xu\243\224\202\134g\364)\343\250\254\027g,h\261\352", 56, "\277m\222\260 \221%\375l R\023\037;\012\211", 700, "\033\343\371\36231\001\307\257\236\264\211\022\323\322\317\274\255\223t^D2\042AS\201w\316\313\346\001z\177\364\274\345\3602L@\330-=\373\251\213\244\304\334\2513\257\244\241C6\257\272p\275\262\320\305", 64 }, + { "\033B\026\222C\254\310\342\304\321\016z\205k\224\252a\000!\200M/Rt\250\353\020D@\255\215\020\246\203\347\014\306k\006\331\301\256\317\275-\012i\355\305\031O\330\225\210\235\341", 56, "\231R0\266\357i\320z\241\257\006\001\305\255t-u.\024\024h\362\303\010", 700, "l7\324@z\220\002\376\016\346\267K\353\372\312\024\27406r\310@\274?bUR\323\257\255\326v\236\242M-\017\002~\264\374\225\260\317\347Q\223\304\343\177\020\302\300\246\200~H7\244\304\200\024f\003", 64 }, + { "=L6\333n4<\267\177\003I\226I-\012\004QV\006}~[{\361\215\263\0223\317\247\322\323\201=G8EC>\001WD\264\246\006'\035\264\255z3~\014\243C}", 56, "z\321\231E(\307\255J'\354)|=\027\244u]\012\375\005\317556\351\3456p\3569\0200", 700, "\211\261\347\230\222\312FWB\3207\257cP%+\2160\254bX\311\00638\260\344\215s\317\267\252\241\240\352\305\334\261\261\305\232\272\272\263\021\304 \261O\321\304m\371\007\265\024V\231~t\017s\321R", 64 }, + { "\300\241\015\235w\211\316\205@\320[\230\373\257\343\177\202i1\227\325\276\376%8\257j\345d\332\205\261\374\2751\206b$\306H9x\306\323\257V\024\272\177I0\353\201\277\306V", 56, "\011\254kz\217>\305\2321\3031@m\376\376\331\021]ASZ\036\237\020\231p\263\203\263\024\372\347\264\3618\205\253\207.\306", 700, "\263\200\330C\011\000e\325XDU\233\255\324k\014\243\360i\027/\302?\241y\367<\021\315\177\032\347\277+\000\033\227\015\223\322\367\252K=\326\373\226O6+\334\250\207}?\001%\272\204\235`D\346\306", 64 }, + { "\347\317\361o\3477X\336\203\206l\366'\212M\042\375\364\374\035\233\025\042\360\344O\241^\341O\015\016\212\341q\233\0156\312u\261\320\253!Kh\314\253\250\302\253\262\005\252\375\376", 56, ",<\3611.\312\336\360\214\022\202T_\330\303!\021\017\016\332\373\032\360\346\307\023\225u\264\236\254\323\336\275JbO\345\304\361\306\026A\032\010\252y\364", 700, "S\323\226+\001\343\205\255/\035F'B\134\273\312\365\350r\203\200\035\340,K\243:7\254\373\340\261\237\317\323\264%\310'\270P\345CE\042K\214\233X\215\214V\233@\330o\351\030A\300\224\326\305\213", 64 }, + { "\307Ss\376.\010\032\270o\023\363\303X\345wR*f\355\2278\346\215\271\311\202\333q\372\007G\033W|\326_\222X\205l\305\372\205\246|\306\240\265\320\207\235\222\335N\233\032", 56, "\226\277\036\252Q\033'F5l\212t\261+'Ty\015L%\006\013\2471\216e\352'T\323\344\346+\362\005\270a\027\220.\242iw\336\030@\321\340\213\371\035\255}\351\330V", 700, "\223\2313\331\263\312\244\352\354\370\016\224\316\224u\3119\012\364\327\273k\037v\311h\317\221\340\275\241\231\026\265\354,-\211$\356s\213\243| \3423a@%5\276\267\3574g;\003\216\264\374\235\370\012", 64 }, + { "\234\134l\273=\360GI\370\350U\324J\330\251Y\315\012EX\346\230\245\201-X\2156;\026r\345Q\226G\304\134\317\322\274\3055\246\2700S{\373\343C\012\366\322\231g\333", 56, "\300\372X\134wN\035\301\010o\270S\177rmj\031\356I\241\024\362\326T\031\373\025\227\310uC\233+59\216{\016\345\226\353\220aN\351!M\332\311S}\365\377\303p\302\215\307h\206\275!k\304", 700, "\233\354\022\017M\373\371\232\003P\033\216\242\3115x=k\226Cn, \327\207\227_\010\035\276j\210\304\210\260\027\237\036\021'\032\367o\2638\346^ *\233P\372C\005\355\266\326g\376\370d\177\376\315", 64 }, + { "\236E\212\232\211L2\265\264\007\242Y\311g\321\356\341A\250\210)v\245\204\226F\020\222\354+#\042\020\233\016\335\042\350\275\313\316U>\253\373R\255\033l\000-\2604\320HL", 56, "&\326\306\023(\224\272\353Oz\021\030VyE\204C\242\325]{qB\202\337\360\302`\210\243\376\213\316\277\2300\375\251\326j=u\033y\366\256\370\320wh7\364R\270\274\200\351'\221\367H\226\355h\250pg4\305\303~\366", 700, "\010\357\316\342\301\241\177Bj\225\314Z\344\334M\326\214cK\222\035\347I\200!G\030\276k\252\322\263\333\320\310\214_\346\033{s\2359j\010\024!\361\350\275\365\025\372\354\360=2)\323[\200\260\261\367", 64 }, + { "\331t\327\313EYj\302\250;|\000\346\337_S1\026V!\360\364\236\033\0107,n8\264\214\0155\204\260ov2\215\317u{\030\036k\314\033\217W\002\314r\006CC*", 56, "=\006\361\134\010a\223\010", 800, "\367\243k\353\347\331\003\316gv\237)tH\371#\370\312W>\217\306&\306[\2226\016\350\2446$\350G\267l\253\303\335\205\020\000\004\314\376(\252\224\373\203\031\335\021n\361 \016\274\223\036f\035\335\261", 64 }, + { "\226\220\3256G:\242\225\364\205Qg-\354\372d\363\256XO\242\275\032\325\014a\277i\010\263Y\221\343\0047\034\231>\222\306\306\227\313\022\260QNjw\303\231O\243=\342>", 56, "H7\265\214\251:\317#Z\272Y\221\240P\025\257", 800, "T\304\334j\357\322[\306\257\254\275\360\371#fRz\253\372G\017\002\246\355\222|\300\271L\303\025NgC\025-\261\220k:\022\352\207\264*\363NB\310\010,$\333\245\351\246\352\300\376\365M\013\240'", 64 }, + { "-\007\335\006p\013v\225\356\002\334\371uL\313\233c\317\220\307+\017\262Z}k\352\334\202\016\251g\204\224\006\356j1-\214z_\272\372\274\224\342\2422.\022\352I\246\303\262", 56, "sC\344\326\346\214\034\354UQLk\364\300}\2477/\373\327\346\210o\033", 800, "\012\223\220\202\003\013-\365\262\214*\345#'\246^9c\311\347\373\031\2731cL\230\034\340\177\213Va\002:\006\357XW+@\334\326\015qN\026\256C-\275W\215\245Euc\026\374q\307(\202\211", 64 }, + { "92\235\215|\036EF\211\322\350\247vP\177\347\305E&u\033\2126Dz\351?\000\134\212\302\215\322\327e\374\227\356_\322\346\275\236\042\351oU\031\011UN\344\323\363\006\201", 56, "\320\011L\355\260\334\247\227`h\265 )E\350h\337\014X\334\357\352\372\260\242\013\257\317:+u\226", 800, "\177\255\370z>\216\202\260\030\342L\331\252~\027\211\035\261\325\321\3237,!\237mQ\371\377\270\221\337F\321@Qr\315\322\312o\233\311\0226\331\311\220\250\3133\335\030v\015\261\325i\362w\3025\256\263", 64 }, + { "*\004^\322\344\321\374\214\034\274\267t\232P\373\214NJ\201BN \373vS\220\027\244m\236\255+!9\006\332\274\036Z\265\321\262\371n\042\317\345\347\3353\247\310!6M\004", 56, "\215\025t\202\003\320\234\240\002=\302\266\002v=\233]:\032#hM\237Y\362\222\366\3609Q\026\330\334\344A\027\025\271\034/", 800, "\362\042\0257\314\336J\177\213+\211\335\345\350\350\260[\317\263d2\316|v\332G\021a\210\006\034\274m\006\210\3024gM\022\354bU\323\255\014#F\011nM\303\352\350_\257L\321\242B`\256\340", 64 }, + { "L\204\346D{!\253\215\200\270p\012\237;<\264(;&m\0102{\025W\277Q7\224\354\342\2443\300nD\364\222\026'\0215e\346\234?\320K\203\2238@#\345\030\007", 56, "O\271c\371\326\253\036\205%\331\031\241?GB\177!\334\254f\303?\361\251\245\303&]ES\300;q\016\267(`\272\327\311\206\327+\017\241n$\225\210\216)\032(\230\327\360", 800, "\134vO?\214\307\042]\0237\300\314EL\026\236\320\035\311\217~\247#L\2044\032\3064K\375\312\004\0045\215\361\372vq lX\234\205Z\265\300\211\313\341\335w\025Is\230\307\035\257\351\316\337C", 64 }, + { "\377U\373\2454QB\021\242&\356&\003\375\232\177\205tY\242\033\352\222\312\271\331\315\350\313C\014\310\010\223\360*\266\031\025$\030\275\215\177*S\177\017R\261C\341F\261\363A", 56, "\345f\014\024\251\226\271\255Q\361\034s0\251\035\322U8\360\036\266\301\327\276\002W\362\210\305\253:\360\022\213n\361rW\021\353RjyW\035\206\35532\371\334\350<\245\020\375\315C\037J\357 \362\026\222\377\327\332\015\276Z\362'\030:c\022\242\346`3WEx\304*", 800, "g#\2761Y\327J\204\256\311\322\357P\261\342\247`c\240\247\217(<\235\314&\032\000\312\331o|\345\004H\257\042,\264\212\007j\323\334189\313\000\026\257\276\204\027oK\227M\353M\313\177\265^", 64 }, + { "\220\033\242\276\005!h\264\205\376\341\025\311\036k\222\327Z\014\236T\253&6\303\023z1\252\263\355^g\205\020\007+'\200\253\207\340\301\252\341\023\016j\301y\374i\227\320\3376", 56, "\035\321\264\204E\217A~", 900, "Vnq\035\354?\010\220\305M\311\232I\216\374\255\027rE\002\356\033\366\276\021\270\344\215,S\306\370M\332\377\320\376G6\210$\373\220\346@!\031bv\202\021%\177\364\274\203`\332@\276\233\006\245F", 64 }, + { "\024\234\347M\376u\337\222\007\262P\325@C%\0125\337\272\317\215\377d>\211\373\241\2224e\025\352\356,\036\335qw\227\376\274\345d\362\332\335\010%\226\342\276\315\312\037\237\341", 56, "@\361\335l\273\026\232(\007\257K\251\361\351B\314", 900, "\232\213\314\327f\002\000\256\230\244\372c\004\211`*\242\352\214\000\007 \200\306\201\305z\227\222\263!\035TU_\301\332\341\221\321E\223\032\363\370\327\377\300\327$\237\312\325\235\026\372\320\014nCrB:*", 64 }, + { "\340\017\331\257F\302X\231b)\377\022!\347l\274\246W\312\3279\367\325\223)\246\264\223\276\350x\246^\264}\324t\301-1\042\234\263\001tO\355uG\243X\225\373\0003M", 56, "\017\260\272\262\357A\271\024X\257\014g\360\256\235\265\301\302O\022\266\003\134\022", 900, ")9\026y\321\012i]E\347\224\332\210Fl\202\025\230\032\000\374\2748\272\007$\353y\264\000{\267\134\204\210\320\011\372x\343@q\254d\3541\334\020\042\010G\003\215\023\330B\33484\372[\272\273\032", 64 }, + { "PK'7\267K\226\322\360\027\207!\2054\016\277p\240j\225\321\204\330\216-*\352V\357\226\177\214\015\312\314\240J\042R\374hh\255\031\022-\377\001^q)L[(\036 ", 56, "\305k\374\025\247\372\352\370\350v\033\271\243\311`\205+]\336R\257\210-4d\302(&H>)o", 900, ":P\335\271b\336\203-u\005\341\313\242\377\314>\015h\021\177O\351\350\320\362*;\2159\322\266CS\253\207G\000@\323\240o\267\011\321:\361\222u\015\346\343\301n\211\375\344\271\302\210\376\342\034\254\223", 64 }, + { "\310\330\242\212\3177\277R\322C\331\374\3326\273\314(>0\320\357\042N\012\024\244`zh\202\376+\270\036\226\026\340L\251\017\200\347\341\205\2739\235\240\034\250\210R\334\320r\241", 56, "4\273\344\355\336\027\241C\220\271\006\026\270\213~\365\236\230\230\217\042\217\317\021)j/\2372(\215\007\266\305{d\370X\272\015", 900, "\242\250\134\3703\336)l\255mX\014\020-BG\206%\351B\244\231$z\260x\276\220}\020\334\310\270\243\036?\223\020\222H\201\326\203\372\252\236\246\355\010*\030\252\003&\036K\324\201\256\262\230U\2049", 64 }, + { "&\221\233\226\351{\314\244R\254\337\341\265v\251H%\373\210W\042\367\220\2458L\214[IM\253\234\315\370\010\0253\366\205\236\244R\207\212\302\206\221\326\351\031\336[lmq\244", 56, "\360\345\305\014\367\322\302-\3147E\243\001\352\002v\326\365\203l\367\0347\375\206z\004s\003\367\201.i\350\331\315\213\236\321\223\2241&\355T\251\366\134", 900, "S})\307C\037\213\352h\346\177\2231\021DQ\000\355\245PH\325\263\376\275U\2040\335\033\333b\306n\002\365~\330<8\024\341\205*:w\305\026X\205Kcyg;\032N\037\274U9\210\264C", 64 }, + { "\324&\3775\250\242o9}\324w$\015O\0148\311\203\332\360\210\352\006k\027\323A\035\207\21014g\021=\230C\317\201\214\035\257\2402*\371s$Y\232\2459>\271\331\023", 56, "\201\234\241T/\225\007\206\237\356Jw\252u\2178\360\372\224\005\217\335\037&)\200k\256]\177\011\013\267KB\314\367\334\305\301\344'\255\373\310jk\371\010\321\134\032\241\241\364{", 900, "\001\351\012\372\250>\310\370\301rr\023\027\025\2269\340\330\321\374I\007\210\042\253M\227\353\361\361\240\323\310l\263\351\204\015A\225A=w~\022\027\357\007\252L1Hd\253\010\214\325\225\034{\005\263\032\033\303i\253\325\021\352\037\236tv\313;)\257\337\270\004\042\340\015L0", 64 }, + { "M\362\244pg1R\245\331\215k\033p\253J\254\362h\362\353~\310\265\210P\277q\330KR\001\303I\223\000\031\345\336L\3653\200\360\273\376\315CN\320=\224\355\345\263\255\216", 56, "\225\250\341^\2263=\270r\030\310{\014\263\222\356\031I\256\1349#\372\347[\363\026\376\231\331\3770\304\331\350%j\344\3715\325\231F_\273\361\237_\225\351\007\031\177\330t\010\206\206\003\343\307\036\310x\226=\031\355|0\255\371", 900, "\375)M\213\204\314\340(\310\013\374\254\344\220\223F\366\003q\303\220h\237\273\320\273U0\3758]\300\042X\221\347\346\012g\263{\353\353\013@\217J<\015\337\013\254\020ruo\310\247W\304g\312\322\350", 64 }, + { "[xF\003\370\236\377\362\276Q\310l\336o\001[0\335\005=\271\226%a\012#8\346\3715s\015\2753\344\340\030\352\264\021\347\311\226\007\315\251\354,-\351\015|F\313gB", 56, "AH\260\363\312\212\224j", 1000, "W\256\352\317P\3549\250_cu0\352\016\305\025\235\306\016\2440W\317\253\011G\365\343\220\317\00560xW\014\377\230fQ\271E]\3461\354\245)\002\233\031c\317{\300\212C|\021\213\370\025W\225", 64 }, + { "x\340\224\033,\037\317Y\242=F\270H08\371\347\210<\350\316p{\213\333\032R\372n\263Fx\000\305H\302\023yO[\254^\365\360M4\337\360\202*\206zg\355\306\005", 56, "P\256\0302\023P\212-\015\302\334l\225\376\307_", 1000, "^\260\023\024\340\263v\275\345\340z!\263S\231?\301\016:Vym\254\015\245\251\321\303\032\247~]N\023\022\372\332\317\362s\312\233z/\031kFT\220\033\317 f9\275\031\213\233\237\014K\232\032\357", 64 }, + { "\357\254\354\376k\307\337\363jbe0\030\3037\307M\334\220\214\350\367]\234^\326,\371\306\201\251\256:1\306\010\300\346O\233\236}p\037E\031\035\360\262\021\243\260\331,-\326", 56, "@-\204\272E\361g\205\037\222\362\361\0137\363\365\010\305\265!\030EE\325", 1000, "\272\356p\267:\251\314(\371\261\3726\356\257\274\305\263\2266QE\313#)\215\010)\342\323\273wKL\300\012\010\036\241\006O9\202\266\207p\307b\301\352\234~$\335\236M\302WEqS\272\317\300\004", 64 }, + { "\354\325X\031\235d\376>\373\207\010\011\3468\2300\273;&\343\367\336\332\212\025\355\016M\000\303i\326uW\227\3625\2214d\202]\015\261zt\212\275#}\363\347j\177\226,", 56, "\364\232I0`\373\306\273\247P^\2322\311\355G\207HQD^\3420\333\336\322\361\017!\247\306\244", 1000, "u\336*z\365\035(2x\346\345[\305\035P9tR\237Z\2155\260X\201R\367\350\362\264\276\306&82\321\363\003+\2172g\305\336\307\346\201\032\335\233\232\000-{\012\254(\256Su&O\260\223", 64 }, + { "A$E\354\351\002<\012j\265\273q\042e\337\317L\005k\370\346\020\014\352u\357M6\276\337\334FD\342e\335\247\262z\246\335\015\336\277\014':\263\344\313\326k\203z?\304", 56, "',Rr\221\027^\012sf\321\001\027\340\303B\305\3400\317\013i\222\235E\320,\252\177\275\330\214\344\336m-'\012v\005", 1000, "\013\222\350\277#\344j\322rT\223\033\217\340]\247\235#\372\300\360\026z\004\026\267I\201\240\215\0025\320\202O\326\005g\032\221E\327\253\257$\357|\216\315Y\351\235I\015*\251\372\272|\375\374\262Zx", 64 }, + { ":\234E\033\211\333\024\266\034[\244X\012\237+\343+\361{\177\244,\3540Re\012\337o\365Z\272e\020t\260\244I\353\267\311\005\015t;\023\035j\246G\0349\346Nd\255", 56, "\212\265\352\026e\2642BJ\250\324\003\336\042\247\320?C\302\227\327\037\317}\276\372\2069\363\025uf\373\333SS\2317\241\213b\026\215-\275\003\353\005", 1000, "]\351\274\246#\301@[\363\331j\241\371\037\334\363\323\307\200\227xT9\227\333\326\001\033jU \011\3063\232\276\015\357Z\333-\300\022\0266:\345\241\237\015\012@t{\315\355K\305\342\023\200.\374\277", 64 }, + { "\230\354\247\310*\307w`<^i?\212\264~\317UY\213\013\303\024\357\233\016\207\312\3043\025\341\361\222+\333\375>F\026\330F\330@\220\216\314\350\231\214\253}\266\221\211\260l", 56, "#C\261\327n\205\266O\013\321\006\257\303'|\253\025\341@,hd\311\030 \317\355^\346KO\262\303\202\002j?V]\001\201\327h\020%XV\221u\227}E0\275\344\034", 1000, "\360\364\326R\272l;dB\247@\272\217\237p\337\322iONk\241F\364\225I/+\352\273\202e\306h\2742\244G\341\325\023\217(\033V\220\311\266\200\010\325\373iA\327\334\340^\203\357s\312\314\374", 64 }, + { "\042\362a\336\307\035\016\376\022AR\316\306:g6\025\316\365\267c]l\365\360\312L\234\021\032\353e\211\213@\366\231\3673\013)U\241^\255\370>\035\351\302\3778\020\264+\000", 56, "&D\222\354\376\333t z\037{=\346z9\354\213y\340H\377M\015\354\036W\361\214=\371\201\336\017\2402\244Sg\313N\2702\362&\037\374+\371\015\255\325\263\261\303ML`\374\016\245*\272\347v", 1000, "*\257\371@pwa\351oY\230\231\034<\205\372\023\224\034\345\372\337\021!\316\271*/9\301\307\363\275\320s\230a\315\345\225\343\336\030\306s\361z\004\301\350\365<\014hb\262\210\340\230W\372\215\245N\225\374\242_\371\134+E\240\307\026\032\257Re<4\373\216\272\336|2\332\325\204\276\333\004\2112D\322{fC\025Z\346Z\205\345O", 64 }, + { "V\227\252\273\367\350U\350`\241\303\266\211\362\001\336\202?\340[\265\201'IR/\201`\372\203\010\250\342'?k\326y\322\242\355Qt\373G\331/\207\240]\347\216\032\205n+", 56, "\341\340\034\243\201>\0261", 2000, "\371\025\042&H)`)\277\361\026\201\356\310d\000Rr\232_\365\341\020l\304Ja\225N\253w\003T\023m\362mCz\225\317\301%\017\016m\276\233*\251W&\335G\017sm\266\015\343w3\002>", 64 }, + { "\000\270B\346\340\316\355\311\177\227\314E\361\013[_\241\226m\370\213o\014Zm\375\343n\035\327.)\221}\006\257P\0222\027\364\007\301\333\231\201\336\371\010\006\207\244\373\336\001\237s\262\261Tj\030J&\214&\202\220:\2579\346\273f\305\344\362\361|\330\335\261\227\017\3607H#\260:~", 64 }, + { "\0161\342:\237\241\016n\241C\335\323\233\376\240\230^\303\263u\336\344\012\360\306\003%\313\345\275\311\252_\016\252:\374\233\031\330\037\001@\304w\200rE\020\025g\341\270\327\314\350", 56, "\301\2278=\351>po\352?\306\024\230\005\246\345\035S\213\035\343\275y\307\370\3432\264q\376t\366", 2000, "\312\034|dHb\251\354\355\247\345\323\315x\273\234\035:}\376\322Y\376\267\306\202g\010u\324\037Q\206\023\305.\004\251Q\256^Ov\261/\233h\004#e\356\375\2403\355\303\334*l\356aj\222|", 64 }, + { "5\221Z\313\212\034\230J\210\243(\250\274\347$kN\323\213\327m\134n\277\263\313\017:e\353\211\223f?\364\255\252\306a\272\333\241\342\373\200\007\240\260\270\177\226<\022G\347r", 56, "\301\012\025e\324\275\356\211/\024\333\010m\340\215$\313\227\353Er\2542!\356x\343\022H^\244\340iQ\315\310\205\373GP", 2000, "\005L\2216\245Z\244\305\303*1y\216\265Iv\251\357}\252\021\266 \360\357\250\2561<\360\252'\367R'}s\300\222\272\222\362\273\213\211\342\217*\331\202\363y\320\252\024\005+\027\362\204\225\333T\350", 64 }, + { "\357e H\330\351\0252zv\002\251-\312\306\276\001o,\362\311\252#\251\333Y\224\264\350\010QK\305\252\267<\365E\344I\027\320V\015\307\262\3329\372\000\024\014\205\275\233\345", 56, "\346\346E;a\347\331\341\314\242\273<\275-\342<\231\250\306)\017\336\244\360:MN\220\017\231\220\261,\245\310}g$G\222\012\300{\225\364\3515\204", 2000, ":\310E5\210~\277\205\206yLcX3R\005\244\000\301NzZ\320\305DY\370,\357\3507P\255\3762\377\260\230\372$\214\261\230?\322\366M\256Lq\314HtP\300L\335\327\363\2175\256\375\035", 64 }, + { "\007\213\376-\304!\347$\204\002I&\3417\027Y;\243$$ \001\007U4J\216\000\331\274\277\232\212'Ay\275\022q^\200\000\017]\320\030\353h\266u\321\372$+&\025", 56, "\243\006g!5q\241;\2612\306Y\356\231\337.k\003\374<\016\275\210\354+\265\336\224\372\004\371\022\036\214\275?f\207\215jk\262W\241U&\006<@\341\024\015I0\034\025", 2000, "P\3443\025\023\014W\177\273\201\340\036\256\201\006\034\204\354\344\237\315\026\230\345l\014 \274\271\331\011\317#r\327G\327\277\024.,\001\323\250\251\326\025\334N f\2664P\025Cf5\312#\033?C\271", 64 }, + { "q\020\016\307\224Z^B\014_V\3456\313\214\221\342\016\374e\207u\306%K\237\276\263\307q\250\240\302~\316\361\031\204\233\2503\261\200\321P\302I\333\372\305\357e<\017R\246", 56, "\215\246*\011\312\342\002\335~z\276\261\301\255\3702\235\375>\201\246\003s97\301\217\361$]~\357\357bpKD\177\276\330Mw\323I\327\300\241\360\010%\363\021D\377\031P`o\367s\210WiN", 2000, "\367\263X\322\212v\325\010\275\376\215ME\303\356Y\010\203_n-\256\242M\346\203\275\334'dq\207h\351\337N _\215\034\021,R2\245\311c\306r]WS\341Y\253.\235h4)t\334\024i", 64 }, + { "\3623\374\265\252\037\207\364r\177\021\313\267\213\015\3318\010\357\361U\227\224\025=\324\274\353`\315\230\325\232\303\004V@f}~S\344p(Q\312b\353\320\326\271\365y\255\020\262", 56, "\222\356\231\372'#\017\236-\027\216\245Nl\375\225\375\202\340\326,\244\254z\316\221t\222\246\314)\2123\266E.\241\257\262\337\353\300D\007^'\035\253I\366\344\274\025\247\371\373a18/\336\037r\201VG\204\012\222Oo\327", 2000, "\024#\307\016\202=\367\037\325C\340\037\311cRcb\024\335\241\363\221eM\037\377\021\301I\333zO>Z#\225\234\267>\177\223\331\002\266\352`\261\321$>bF\370\203\267;\204\267N\234\341c\306N", 64 }, + { "\240\275Z\322\373\303\225\042$\375\346=\213\374\323s0\245L\216\317 \333\302\032\301\334\036\266tNG*ra\263\216\352\324\323u\362-3\205\275\215\333\012\243\225\344\225\253'C", 56, "\220\021w\353\360\341\226\261", 3000, "\015Y\222H\035\213\232=\031\203\016/s\025\216v\004\0029\010\303\245R\026OES1\004\265\376\027\235b\212\2678%\261\351!\025y\317f\227a\350(q\236\270{~v\015\314\3720)z\260\021q", 64 }, + { "gG}W\3018\377\3466b\377\031\366Z\026\034\331\252\004\307\312\014+\347\211\336\012\365\371%\301\000h\324\372\327\231\254D\272x\231\350\256\224\262\363\330\2503>\3134\007\042\035", 56, "d\243\237!U\333\364}1\256\205\030*d[\337", 3000, "]\371\224\340\342\265\361\332\335j\025z;65\363\3553\360\205\210\311\212\241\375h\321\343\010\216\025_\204\324\244\240\003J\301\034Xa}\252\365\010\232\351k\371\363|\216\360O\360\217:\016\207\214\036\375q", 64 }, + { "}\367\206\346f\344\015=\277\240>\323\225\254\033\221\006\240K\373r\332/\360\254\315\022\355\220n]6\316qtg\373jU\211\037!\215F\301p\017\276\014\002H\301\016\011f\240", 56, "\271\340\234\017\256B\004\215X\303_\374\266l\030\302{\307BX\006Z\304\206", 3000, "\014s\2215%\226\346\340D\357\201B\3052\350\376\267\376Cy*\355,\001}%g\3242\134\012\364\251\263p\033E\275\273\215\257\243\025\013\236\033:^hC\357&\237\371\277U\265!H\242\277UIp", 64 }, + { "\004\001=O\220Z\0158\002\250\257\3670\334\230\320\032\324\353\207\026\005\235q,\224J7\350\002\327\316\134!\3016Cn6W\3303\212d\323]bF\366|\246\015\254\225\031\277", 56, "\245(~\264\367\030+\313\250>.\277')/IC\314O\012Sa\335\212\022\276\216\255 \343\341n", 3000, "\033N+$\021\002\355\346\300`\017\223\346c\340$\347\252hPO\370\352A\263\333\322\333\003\375\361m)y\003a\310\347\250\224zSE\271`\320\264\332\322\275\012\256\001\3303\365\343\2637\360m3\033\215", 64 }, + { "wXw\343\314\327\210\242\014(tHaGv\251\302/\202\002\006\335\343T\0174\134\244!\203E\311e\351O\316\013\371\252\372\336\334!\240\367b){\315\2225\257\374?\261\366", 56, "]U\025\035Q}x\210\277\245\337\232\231\333\370\326R\002\367\301z*0,\206=\275A{\011\317\243F\034&\232BT&\374", 3000, "X\277\340\267#\363\323&\376\305SZ\000gE\345o\254\245P\202{\306\026\263\001\2752\011\237\031\345\1778\202\033\334\003\303R\234Z\370\244\217\352\247\226\0127\134>\267R\236\371\344\361(\332\221\315\371I", 64 }, + { "`l\246Lx\0077\366bz\205m\211\202M\321\010R\2037\231\324\262`\034i4\306\020\372\232\240.P$\346\001[\035\225\324mh\023\343\344F\3255\004\256@Mvy\331", 56, "zMu\372:U\247\274pU\027\342\003e\227\367'\031;\036:\031Pq\265>,n\200\263\322\343\020z5\357\306\326\2322\251\304\262\357\236<\264\233", 3000, "j\233\005\346w\271\237\255\003\303\210G\024\326\336'U\324x\031\014P\241x\376\215UWh,\246\312n3\355\336\347\365\027\204~P\276\234\277\240(\233`<\377\134\235\306\317\322t8\312L)07\322", 64 }, + { "h\207V\216\261y\03652<9\227\226&p\356%W\201P7Q\327\364\247F\011\000A\356\231\263$\305\364I\257[\303 \213\352\024oa\276 \340\252\311\364\305\005FD1", 56, "\335\026^\034r\361H1\305`\226r\300\236\216\325'\321\311r\214X}\234^u\326\246|f\034Q\2267[\303J\374\203\320\255BIy@\373\345\214:]EX\262\0339\253", 3000, "E\036*~\347y6)@\261\301\345]\353\273\240B\016\177_\254\357J_\004\366e#\3220\266\306\343\013k\254\230\202\023y\232\335\257PV\227\211C`\364\244f\361Z\367\324\223\321`\024G\3558F", 64 }, + { "\344u\365\374\030\266/\336\313\036%\372I\235\031=\263S\274\1342X\346\342\034OE\2356\342\320\2411\026\240\361\037\005\026\024\331w\307\017\333\242d\231\243\231/H\242\326%X", 56, "x\372l(*&\215\213\342\307\332\300\230N\016\251\301[(j\007\037\373c\033\225P\255\264\010E%\217\252\344\376s\257\014DZ]J\302\345\212@\364\234\276Z\262>,\336\352*#\352\366\236\351\276\307", 3000, "\203\221Z\042(\206fN:\251B\354\270\033/X\270\247N.\231e\211!\232\244;\346%\016\037H\177\257S\301>f\222\232i\304\324\276\301\340\315\274\215\0334\016\216\335\306\370R\321W\267\220\241", 56, "h,\323\026\342C\263L\032\201\322\314,s\342\275", 4000, "\346\360\263\27733\200,\206\350I\346\223\022\365:{cS\036QA3/K\361\015\321~C\134N\223w+F\227\020\213t\310e8\355\235CJEN\213\036,~0GA\331\301\326t\300a\234@", 64 }, + { "L\200\264\320\356\273-!-n\350\372\134\316\366\352\011\272\313\246}\2614\134.$\212\227b\244\333M\004kU{\372\177\342\221\227\267\301\245\202\375w\032!\352\177\014u(\354\207", 56, "\361\360\352=\212)6\356\022\223U\036\002o\321\301\246\310\341\340\225\201\341\252", 4000, "O\235\310\355\252X\357\363oKwU\363\212YD@\010\370\343KV\251\304.\376K\2662\255\262C\366\246\321\332\0244)C\316\010\023\042\240j\313p\231\217&\331\371\014\015\221\325\243\311ld8\264\274", 64 }, + { "Q\357\325\337/\371\325\311\232\367\304Z\340D!\216\222\222+\027\031\306\265\3344i\371\134\312?6\360\300\213\326\017\2600\316\022\202\266\014\012\000<\243\224\200\325\314\340t,\367g", 56, "d\330\321\026/\236J\314\253\311.\012Qo\025\042\344\240\362\324]\330\230\356\205\307%\00267\042\345", 4000, "n \363\265\2479\017\026\366M\036\375\370+A\024\3402\376\221{MY\243\270\264\265\042\304\134O\3327\016\330%wc\013j\016\226Z\317h$\257\351\260\361AM\013\207\0366X\2763\025\212Y\354\310", 64 }, + { "\372\353S\251N*\232\367m\316PS\270aDC\335\0057\230\276\213\354\347\353K\350\024\215\321\227\300%;\023\377\352'\017Y\177C\017\024\200K\323G\037\307:\224\340^%\341", 56, "\253\254\011\237Q\270,\360\004\332\343\026\314\360\214\227\261}\240\006\300\276\374U\0244e\3052\365\307\250\276\210\263pWU\224\372", 4000, "S\263\011c\272Q\306e\3023j\203>\261\036\274\031U8*}\365\317\253\023\255\030^J\277\331J\340]\367hpR\215\345\316{\042rr\217\236\322tB\317=\215D\274\271\371\357V\2648\236\314K", 64 }, + { "\242\270$R\263\302\200C \233E\245^\326\265B9/6\274\201\002\223\356\263X\350\354\260\002\026]$5b\042:\257\361\004\224\207\030L\277\247\314\331\032\017n\266aP\364z", 56, "\362&\253\330W'\233\343\317%>-\037\363\223=\300(\336\20214D\240a\224R\321M\013O\221h\203\333T,\302\274\261Uz\325\276\313\346\374\033", 4000, "\204\302-S\030\327`\373\222\224v\027\247`\266\267!\216\237\241l\313\264\313}'E]r`iU\302'\037\024\375\023&i\201\305\341|\3779\305\007L\035\230\355f\357\026`\031,\031\364\3145\032r", 64 }, + { "\273\3718\272\222\2369\211\313>\0044q\202B_\272?,:\023\313o 9ps\021m\016sc\034\312\341\202\255u\002Z\013T`!1\030>\245\2315H\177\260RJ\356", 56, "\3327\347\342\334\316\323\037n<\265\305\022\026(U\273U\321\226\303\223F\302u\024\212]\022\344\334\232\264\035E\017\254\322.\334\377\333\232\005\331\367tpQ\036\377\341\305Ng[", 4000, "\326\271\016\214\230]\256\374\2779\365\367\251\315\366\330\373<\312iV\334\202\270|\323\326{\316\301K\330\322\342*/$=\222\211\255p\315\341\306\212\011:=\264\201r`Y\201\2273\0016>C\344?\236", 64 }, + { "7\227m\350\134\343\031f7W\004y\036\335\331Ukv*\021\231\007_8t\346\034\230\310\231\026\201\021\320\254x\200wvx\314;&\230\134\0238\205\246^j\004\240\274.Y", 56, "\201\252\334L\253x\376\302\371\036\331\347?0\006\203\256\023\370\355\360\320\024\312\2233\315\307\254l\325\270<5\010\200>l,\341\305\024\352rF*\250\375\202\341{f\303w'\276\354\347\254W\367SV\243", 4000, "\007\253\010\274\354\376#>\2160\217\243{\006:\323\322\316\042\031\353\272\0423\236\335\0314\376\315\212u\360\037\323c\363i$Kj\242]\377\241\254\004\022Z\304\220\362$4\304\343(\245JI;\032:-", 64 }, + { "MXy\263-\363Z\231\232\325\335\271\357W\351tO\264\344\224L\367\236j\344f\313z\312\221\327\355B\3645\205L\314\242\200\017\034\217L%R|TC\241\3047Cg7i", 56, "\026\030Fd\201\364\332\313\27178\215[\022(P4\342Yv|\365\021$\371\342\367\037\220\015\331:\036\345\320!\004\3219\010\023\205R\307\232g6\031`\277\376E\335\255\035\3158e\020-\220\374([\253@\340\203T\320T\222", 4000, "\027h(\353S4\375u\200\241]h\361\360\032d\321\241\301Y\036W0\342\355\214h\253D\033r\330\266U\373\260\356\3252\301\254|\030\233\371\351\271\024\205\207\301?\206\206n\341\202\266\360\324o\373|\004", 64 }, + { "\3277m\327|\262tWVH\216\335G\001\243%\017\322\014\233\370\351e\006\320q\332\366\031N\021T\353j\237\134\371\206\300u\246\343&\020\272[p\251?\012\312\364:\317\342\021", 56, "\212\214\351\233\011\003)\246", 5000, ">\3518\336\250\245\307\302\214\245BYr\177\036,b!E\347\326U6\343\016\373\000C\325\347\367h\000\346w\310\200\042^\276\270%p\260kv\351@\243\026\204\216&q\034K\336\315\332\276\215\352@G", 64 }, + { "\315\332\254\231\206\366c'\237\317\177\274\326\3667\2059\214\225\255\344\206\372\010;\324[\030_pcwg\211\245g\373]X\3327C\205@6x\352(\322\351@\210e\323\237A", 56, "\327\342Ar\347I\232%-B\371\343=\376*\304", 5000, "\343\315\026K\336]\324\3025\256\241%\210}\360pQkbb\030 SL\037\362\033\223\227c\342\247\004\203\277\334)\212GEoh'\327T\327zM\354.\007[E\035\030@\306\365\344!F\204Q\253", 64 }, + { "\231\366\007m:\350\322^\246Z:\010%^\223Uc>\203\023\307\213HY\322\336{\275\262\033\203\207\336GBWB\263\346\214eR\354\273cA\342V\303\230\336\224\212\354\230\215", 56, "E\334\345\266\361\317'G\003\260Ur\377\207f%\276[Y\336\270\034\025\263", 5000, "Uz\2652\273=\0142y8\270q\025\016\351!\314\341]\224U\004m\377_\376\0246\363\3174c\334\223Fs,VZ\016\014Xt-z\242i\372\3237\034k\360\303\011\262_2\007j\327$\032J", 64 }, + { "\315G(\317@x\334\042\352I\265i\264\330\245\234i\007\357Bs\262u\250\275\330\2619\277\004\337\256~T\351:\376\312cD\2108+r\003?\333,>\316\214V\313\315}\024", 56, "\201F\214g\330\034\200\011\016g%i:\334\340)\213\377f>\355\237\344\350*\314D?\376B\031\342", 5000, "\206k\367\203\251N\301q\007V\375J\326\344U.j3\347I{r)\377-h]\134#\275\305\0064c\330~\042\335\207\360\326\333\235e\023|\242\243\242:3\313OZ\240\237\021\344/\317\3008e\217", 64 }, + { "\222\356l\3701\326\313:\246\207\316k\257\360\365\302 G\011\221!\244W\325\237\225\275\242z*a!\346\001\303\334\224\202P\367\220EF\271]U\265\223\375k\366&\015j?\220", 56, "m52\324\242\260GB\307\210\314=\254=\273\244\271\313;*l\0268\203<\307\315\312\345\324S8\310`u\206#\312CU", 5000, "7\31302\342em\337\264\377\024&i\030x@\331\020\317M\332H\357\243\025\033\215\373V'6C\025\235{\027k\204\234m=#\3557\313\035\313K\3265P\226?q\215\231\004\3079G\2557+\277", 64 }, + { "\226\373\245\177k\214Mg\014\217m\351x@\230\2028\315y\262^)>\376\002\214-\3059T\005b\300\010i5\302v\211-\215\324\222'\375\321\016\035\325\013b\033\242A\305i", 56, "Ap\266 s\336[SZ9\213>d(\362r(\022g\234\230\024\255)\364\373\215\222=\320\271\344=\012`\207E5\321\372\326\006\203G\334\331\334\033", 5000, "\364\006]2x\254\337\245\262\307S\262\342\024n8\306'\316@\024W\021\023\255\275q\337\354\274\373\337\3661%8\035\210X\350\000\030\233\344\330\223\032T\302*b}\264\020\327T\021=\211\274 C\304\030", 64 }, + { "z0G\264\233\315\322w\013\330pI\203e\364\345H\0253QO+\233K\247\030\312)X\015\361&\177\011\362w\227%w\026\006\017\303\210\356|\237c\330\217\341\317\022\203\275\355", 56, "\002N90\334\2248\025\372\377\270e\217\177~\022\236\326\204\204\241\027\372\317\341\267E\321{]\035\010K\350\307O\376\357k(\032\353Ss\331+\003\272\227U\020Q\015\3475\211", 5000, "\036gd\256\314\235\332\200\031Mj\321\212\277s\242\212y\260\274\351R\344\306\271\260\251\225X\304\375O\311tD\323\355\354\335\356\371\242\210\372\214\321D\352\275=#\033\330\002wY\037\351W\317g\241P\266", 64 }, + { "J\315\270(J\265\215\324wO\210\3715\354\340\262\266\275\305\007xC\334a\347\356\011&\3040\220\314d\342IP\364\035\236\200\247\236\213\013\276r\036b\034'\373\253\263\025\270\247", 56, "\357L\364\021\202#\030\377a\303\301\252\345\012\036\322\030\250\334\361L\014EO\253\2407\362[|\360\207)\3719\022\363\023\200\252\036\322\026c\354\351\214\373k\351w\237\237\320\316\247MiI\232L\204\264g", 5000, "\037\300n\247=\220\010\004>\324\254\342o\310\320\305\313u\337\240\023^hu\377\250|\342_\006\017\266\366\353\251\373,\341\332\264-\253\364\265\320\212\021\021\252\035B\252\313\372\214fV\214\2120\202T\224=", 64 }, + { ".\364\006\326rx9x\200|\254\252\003%\344un3\024v?D\274$\201\256\336\272\357\324\032\236\307\335\320\220=\272\134]\2768\256$\211\270\013\311\314,\013\222c\315\362f", 56, "\370\015s\034K{\276\233R\352\313\025\300*7\010e\0249F\020)\232T_G\037W\226\320\215\301\204\247\266!\010\3077\206,\270\371z\037\215\353\204\331\316t\220\323~\257\036\372`(\305U1\177\205-\350~cf\226\370\322", 5000, "~0-!\013\375'\213\234~\210\307c\206\216\016&\2051\003\201\000\317_\2407\223G'F\222\370-A)j\205Iuc\363H\017\316\255\236t\005\244\273\030\3047\024\376$$\030\331\003\224\332\012\347", 64 }, + { "\265i\217\357\251$\334\0375\021h\372pW\343\302\015\004\303\330Kt\260\023\217\327\3469\225A\256\236$\246\004\361 \333\033\262%|\262\310\312\211\321\362{\270\207\020]Q\213\247", 56, "\0379\366\2507\005\313e", 6000, "\202\242\214\005`\305n\003\017\252Z\374\202\256\201R?:4\370\220H\042wiM \337\264G:c^\260%@\361\177\033\342\223\356G\2627\252,\201\341;\035\361\015\360\361U\326\212\207\236\017v\342F", 64 }, + { "8.g=\300]\3713\257:\002\227\211\204\307h\332\007'\304\347\274\271\243|\356pR\203Dg{g\034Y\255\325\031\273\204@\212\224GL\020t\3531\303\231:\042\025\203\371", 56, "c\272\265\314\257\347\241c\3479\007\344\302m\325\240", 6000, "\242\2346\366\377T\302\300\331\244\254~O\336o*\342\215\252\261\252K\031m\356\327\3763\213?\345\020\026\035\234\230\357W\235+\215\026z\274P\256O\2303\203%%2Z\237\220&\027\267\371\203\036\276e", 64 }, + { "\2669\264\317\377=\221E\245\027\210r\351\2560 ~2\263]S\005\224\300\206\3775\217\226\357K\027\362\320\212e\241&3w{[\344{U\221\330\242\240X\015\312\245\346\225\217", 56, "\024\226\020\220P\001}\367\223|\347h\300!\204\314\366Vo\037U6Q\360", 6000, "{\005\313E\205\0010v\224\343\220\036\002\365a\312\337A\226ws\026\003\333\342e\351\015O\234i=\355\204\271\221\306\023\366\256\375\365e\227>\013\022<\227\264\357\310[\224\305\211 \206\366\372\333e\350>", 64 }, + { "\341\373\346\376\351}\267\354v\235\244py\242\263\367\364\240\253\027Y\240\233\346t\334r\331\211\033q\302\330[K\374\257\002h\013\007Q\233\272b\233\205zL\353\210\234h\344$\231", 56, "a<\337v>4\001\017Li!\364_\365%\224b\335\340\255}O\321\243\322\033\266\270\371\027\272\220", 6000, "\230w\354\334c\222L\007\012\314\231>\355+?!\216\005V\3243?\014\267A\3444\240\0165[+\242J-\261\214\323\371\007o\356\240\362\007\216\2034%\225V\347RF\275\341P*\034\036\200\257\351s", 64 }, + { "\005g\321\231 \371\325C}-Q\261\261\263VDt\323\261o\206y\253\235 \272}v\262&Q#\233>*r\335{I\225w\015bt\306\226%f\027\277\350\361\373J\304\277", 56, "jv\354\235Jn\361q<\366\253.1\343\216\323\354K\253\023\2310n\237\352\272t\327hO\211U_\333\375\274\215f\231.", 6000, "(\252\210\221r\307[{\004V\233\313Ab\022\227F%\2334\231\016 _\307\000`C\012c\303\266\213t\260\203\000N\365\002\372}\217\001\233\226\327K\332\332q_l", 64 }, + { "\232*y&!\3075^\025\241.\2739{\274\351\310\252\236;\307Hj\002\042#\311\360\251\036\200\250\245\306\012V\377%<\134\370\0221\334n\376,\373\006\375\273\327%S\331\211", 56, "\206\223\357_\031\324\205D\332\203\312\005\304^J4\042lk\323\222\215\235n\331\350 T\260{\236\344,\227\256V\316{\273\034C;\026\343L\031\207\341", 6000, "\213q\256\366\276\227\372\017\204\037#\0034M\233\177\347\250\265B\316xv\373\371\326\260z^r\334g3\244k_\321\243z\220\356\304\026Z)\300\377\323F\302\200\026\265Q\220\376=\025,\211Is\302\264", 64 }, + { "u\243\362\207\275\261\325\345e\024R\034\212\007\252\352\324\225\024l1h\361\331_PQ\270\030aR'G\314\312e\2649O\362z\030\303\204w|\352\342\317\313^\377>*\256\263", 56, "\355\254\364\372\037\042?\221\206\351\017\326\231\365\326\035\222\214]w\246\227\016/\370\271\312\312<\266'\367H4^3F\006\034\373\353\001\233K\031\310\036\341\316\373Y\0211\201\314u", 6000, "\252u\356\0018\177ui\252x\250\037\343 1\276b\011\327/o7+\204\372)Dp\361\042\267L\375{\330\006\201@\357\261\017\315\223RD\332]\247}\231\134\022i{D,\232\227\010\364\274\355\315Z", 64 }, + { "\224G\316\306\324\260\011\215\134\312H\020\222'\036.\211{\211c\357.\270J\272u\217\205,\2230G\273\277\214/\026!\227N\212$\211m\313\372\311F9\231\320\210s\372\264\204", 56, "\272\026n\216\027U\033R\203\262\220\250u\214\312\246S?M\204\334>\237M\277\003\035F\317y\022\006\004}\250\233\237i-\233b\011\370C\211\303X\212\003&\265\224L\177\042p\236\3318/\020\271\261?", 6000, "\134`\303\203\364\271\322$|\256\366P\007\202\226\031\220\025\360/\267\324\273\005\356D\015\207~\356\342-\215\212`\004\033R\215\312\273CWY\000\004W\015\320#\245\202\223\327\373\205V9\241\374\034\022\3159", 64 }, + { "\340\363\363\362\356\304o\2367\377V\014\243\003;\373`%\351\020,H\302\260\232{\260\343\327\340\265\0227A\367\313\221\002\205\242\205G\232*\001\276o\305&b\030m\007\351\027@", 56, "\004\207\302\232q\277;i\254\333!w1\033h\0278\304<\022\035\353\034\010\300\267\232\317\012Pb\207\232\342O\217\005\006\217\273\210iPc\325\252/\003\244\224_!\232\315\266{\023\227E(<\261\024JI8r\210\2710\373Z", 6000, "\334\3669t\257\252\235p\023\211U\354\343\2348\367R\003\274b \134>\313Eh\271i\205\265\000I\354\275\230\017'\271\273J\301\274\233\225xm\222\260\003s'\317\364J\373j\034\014x\250\276\276\376\016", 64 }, + { "w\240a\223(u\245\026J\256\255\306\377\243k\225\340\221i\216\216\302\262\025\341\270U\305\372j\371\305\254\374\334\3327\037\260\012\322\342t\007\214 UMsD\134\250ZS\373\016", 56, "\374\012\220Y\213\257\2431", 7000, ":\234\204\235\271=\021\351\317\3118\177\035\330\377\03744\241q\343\275mE<\376\302\361M\255X\356\275]U\202\346\364\010R\220\374\3200r\023#\236\214\370\134\340\026\244\370\204\324V\212]TL#\251", 64 }, + { "5\251\013\363\345(\332(V5\024,\253\357jM%\002fY\334#K4I\234\274s\233\210\217C\334rz+h\036\300t\226\307\207\245\034F*\235\326\330\011\337\226;\006\244", 56, "\207\350\215\302z\042\273.\320\233\020\200\262\021\331;", 7000, "\346\262\214\322\240\221\245s\337\350\3267Ls.\2127Q\272FR\255\366\374\303\025\231\352&\244\220\337\272]\010\037\226g\001\237\235wp\226\205\337v5\263\253\034EU\272\033\234f^]\237\042M\253\321", 64 }, + { "\343i\022\337+\261\334\250\377\356\317\356Mr\345\361%w\312-bn\326\333\244\177p\301\034\363R/o\305\337w\244\357\233\303\372a\314\3338\3169\011\232\006\317\254\010\035\345G", 56, "\374\240\034\270<\0135\004\003\342X\001\361\307C'\202)\033J\377\231\224z", 7000, "\032J\134\325\346\021T-T\311V\221M\261V\015\2547_\276\042\373X/l\322\321Z\255\371\225\271_\211?\206\316\322\300\015\366\011\366\352\277\215\271c\315\306\134\335\201\031]\353I\332&l\315\302\322U", 64 }, + { "\361\230\217,A\213\276\331\303XzY\367o}\366v\031q\3678\303$\216\277,\217CA<\320\234\035\211\004\033H5\271a\257c\017\254\367\351\235\031KvH\304c\241r\307", 56, "\272\240\335\247\215\351!B\254\027cB\021\030\233w\330\227\344\010_L\226\271\357\036G\242\322}\012b", 7000, "\371?.\335\334\200\306\013\030\243\232\271\360\252\345\372\305p13c\314\327\363pv\232-\273\334jp\352Y)u\305\260m\252?M\272p\377\257\012\244J\020|\212\357\232\337\026\234\245Z\350U$\305l", 64 }, + { "\332\245\264\301\004:\003\263\257\003\277\233\207\246\365u\003F3\221;\300{\371\274\012#\242S\017\236[\006\004\327r!\363I\275\365\356\016\215\025\243\341r\201\016\036\207\306kv\021", 56, "H\314\335L'\331N\267[oM\222#x\031S\3512\206K\204$\252B\204\255\363\371s\372\034\257\334\202\003o\211\320\227\005", 7000, "W\004\203\264\313o\310\202\2079\240\353\344\271\2138\034\377\350\002\226\0277#f\224s\226\274G\225\035\214Sda\326\026$k\042u+\272\004(\341\006\343(\365k\315C;gl\331\364ZS\014\022s", 64 }, + { "#\221p\356\360\223\223'\034\026\030\236\253(\267\033HF\324\300\371\367$\013\210\275\022\252l\203\002\232ojEe\240\204\272\24594\313\241\320\221f\216\022\357\004\320p\252\214Q", 56, "\042\224\324R\270g\373r\243\251\005Fl\020G\233='r\255y}\004\246qg\272@pa\253\332[A+\203+\227Q\350", 56, "\367&v\332\237\321\250\311\225\235/W\272S\301\016@\326\302^\213\034\276\235O\324\005ZM~\373\273\274\301k\313W$b\215\307GW\354\023\331\352\256\332\177n\337&\3119,\356\270\042ZJ\016\206\277", 7000, "\215\036n\277\322\242\306\231gd{g\313l\203\014\256\215\335\214\036p\316\327\237\000\000\364)R\222\316\234\030\017\204\344Y*#\230\033\250!Q\275\332'p\343#D4\250.\300\234\271\032\236u\372\3566", 64 }, + { "\304\313M\022(7c\037\226\260\033\216.g\001\242\2649\367\230\314\317b\005t\341\267#\315:\336\312\261\265\220\015A\2417\002\324\021\323$d\214\257SW\351\336\027\323\367\307\333", 56, "\134]4>Dc\364\251\357\246=;\245\301\335H\001=\247\267t\345\374\013>\340|\340\371\3316q\013C+\356\2779\257\366G\206\346\213\201\254\256>\234\241=\362*\242\303L\207e\341RY\035O\013\266=\233\260\347.7K", 7000, "w\217\204\232\275\237\303G.\343`\214\304\241\322\205\340\342\251)]\306\215\021\031q\373\037U{\037\362\355\343\001A)\337,\222\014\221\231\255\203\272$\365\343\233O\231k\2148&\262u\032\204\326&\001\302", 64 }, + { "i\344*\341C\203y\320W\001f'3\024\375o\222%\314\224\225\314}\213\200\217\314s\333\243/h/5\210\340M\241:\240\225|,W\313\260\250*?\210\347;\232\210\270\233", 56, "\355\247{\345\203\211\353\330", 8000, "\013\202O0\212\372\013\263\373\377\240\212%\277)\275*\276\021\341a\351_\313\2053\217\012*\210\334\023\232z]<\017-}\313\002pMJ\370^\261\245s\004\342\316\232\250\015F\332 \253\027\313\210%V", 64 }, + { "\204\312\321\371\353.\037+\256\220Q\266\226\203$a|;\020\262\301\357W\242I\313\201\223\007x2\017\363=\005\212\253\0135\220\002\037\264\0072\251\256)\346\323g\005\255\340\020\241", 56, "\005\233\241\260k\013\253\216fx\234Jq\311%K", 8000, "\277d\331>\026\270R\316\032\001\263`\347\017w[\020\201\020\021hI\007n\353\256j*\303\2069\016\335b\236\376%r\250\200\212\203\004\236{\350\326L\232hvu\234\232\376\134\267h\246\312\304l\326\332", 64 }, + { "\026+7)l@\230\345\361\206\201\314A`\274\231\370\365\300\033 \367\273\324\226.XZ\003\206!U\3673\371\205\042\324\314\331\340D\350*BoD\357\357W\233\036\243\230\006s", 56, "!\272B\012\3167\023\1341\240\341b\270\301\356\333\350|\252J\364\323\204\031", 8000, "\3419L\027\255\212\337\020P\242\036?\037_\306 m\257\243\017\042j\224\036\365[0}>\226\0314\372\236\343\331d\336\3056D\327nP\310\347\024\031\005*U\025X\004x\332x\240\032\003\004Q\250\236", 64 }, + { "\005\327.\210\317\303\217\314\266\376Z\216\271\252V&\314\021\307bb\010\026\315\004\327\370\015\362A\277\317\307\202\014\035\315\2031\303$\341\275\241\3575n(\357\271\355z\312R\233\361", 56, "\206\306%\304F\216\250\010\260\330\263'o\266\221\373\012I7\311\357\261\273\2506~\217l\246X\372\277", 8000, "\365\200\304y\350\342\307J\247\222M\210\251c+\345\006\230\221h\226\247\373L\212\230\375\243G\224\232\021\022j\261\243\255\230\011\201.s`\325\003\032\237\305\247H},Tu\376,(\310\365\177\007\376\001\273", 64 }, + { "\343\204\321&\260i\336\353\031\313\254j\371#\035\010\304\330\004\331\227[\206\357d\177\205\036\371\267\214\376g\254\215\321i\031\312nR\363Iml\363\323\343\320d\260\343q\375\015}", 56, "k\213\314\005\244\252\010\220A\232`*v\276#\376\206\201\344\331\363&\276s\353F|\2328\203\2217\203\020\256\2654\222\024M", 8000, " [Wz\347\360`\373\002\177\270KD\001\337\200\322\351uWf\264\331\005\276}1;\252\325\000\225\233\236\260\3426\024t\221x\226\024\134\313S\375zf\240\221\202\361\010\367\007?\242\240\372\320\003\354\322", 64 }, + { "\273\306\042\266\301\276\015\366\257V?Za\314\002\353\015\227\312\034\250\344`_[A\371\246\276\362t\023i\361(\363@ f\024M>_\007\272.\225\026\271\005T\042\004\021~\345", 56, "\004o^\305\371\003\222\212\020\013/,\263@A\363\345\010I\373\374\244UU\206 \306M\042o3\216\375d\003H2\034\210}U\015P\221yPa\234", 8000, "\274\240\337\035\373\013\333-\251\025n\350<3\352\010\002\331\257K\307\015vW\177\033N]\020J\200\215\226\320M5\317\030\353\0259\302\344\262R]EI\252\301J\266(S\345\351]Z\206bS\011\024\251", 64 }, + { "\303\311}s\360\326\304\311\252\003\356\334\004,T\025x\011\304l\260\357\243QW\014\330\231 F\343\177_2\323\0069\035\003\357\221(!\214\032\3234\016\216]f\374H\254\250}", 56, "\3039\277\272\024\260z\270b\325\027\026j\255\233\221\005c\234\311\217<\030\334\134n\030\314O\263\206\305\370j\025\247\337\347\357\376\216o\243\017\255\007J\037\306\375Q\032\370NA\344", 8000, " \301\0206&\260h\2467\031\331\261 \357\331@\205R\267\302\356\247\372T\336\000\322\034H.\276S\217\010\014\1341", 56, "\372\0219I\011a\260\233%\216\365\330Z n\326\235U\347q\022F\336\320\221\342\002\250\357\240{\355\271:\306\200\267\210M\330L?\336\013\364G=\316!:~'\321\361\233\220\2210'\247|GB&?\334M\022\334\211\031Z", 8000, "\373\274\245a\037\033!Dp]\3008qd_\324\230\200\320R\360\243[-\242_\342\365\023\021!\033\346\347\345\232\203\365\007\215r\324XG\274\322\310\214\336\334\211\245\257\355\226\201Z\323\3741\337 \237@", 64 }, + { "\370\221a9\304\262cxsb\235\211j\215\035\007\367\226\360\207XE\335\321y\216.\373X\005\364_-H.\271\037\033\354\276\2456:#\334`\235j\363\342h\227\353\373[\254", 56, "s\321\003c\253\276\2318", 9000, "G\032f_\366\311\216\232\014\241\207J]\022\006kT\322\317Z/%J\346\333Rfv&\025y\201\257\262\327R\236\312\235\317*\212\210\245y\330\244\227\233\014m\344c\356\332\314_V\0037\347\206\012\224", 64 }, + { "\201\277`\274\035\031Q\005\203\236\273\347\220\035\376#\340\367W\371v[[]\337s\207\265\363\035o\317Vp\344-\302o]\365\236u|Q+\313\211\231^\015\275\302\355\025\012\276", 56, "bY\344y\232N\353{\216\223\325V\377k\015\253", 9000, "\017Qz\026\032\317\311\344\330\216\374\250\300*\025\247\003\001\000\245\212\310sh:\030\243\030\222\004$\261\000\345\253,.]\360\337\035\374\242(\322G\177\345\357\274|)oyC\224\303\330\351a\344D\031\203", 64 }, + { "\305V\021]v\311\360M+\335\017\306\216.\271\223#u\270OyKv\223\272\257W\300;\036\022\317\246&\250Vbb\253\2122\225\300\360\266j\203J\251\314g\220\206gh\222", 56, "C\377\366\0061I|\266\311\017.\363B/\353Dr\347\231\237\301\342\323\302", 9000, "?\033~\211\011\320U\277}ye\350\012H\024\340*h\203\015\374\244-\324q4mR\207n\321\3211\213\260\311\023/\215\013\374\311\026\256\304O\200\177\375\272\021\214\227\005X2\355\330\207\276n\244<\271", 64 }, + { "r+^\375\266{\207\022v/\232\354\272P\265P\035;\264\325.m`\017o\334\333\226\344\017\375y\376E\321\002?\134\372\036$!\035\331\341\224A=\272;)\277\374\361\3567", 56, "b\254\231v\245\267\217\012\314\266g\273\016\356\241\326N\370\343\360/(\256;\321\030G\376g\2359\007", 9000, "\023\243\234BS\134|\237\3667\244\015\265\022V\002\022\000\343z9g\230\024\331\367\015\012\253\305Z\204\220\333\255\340\027\273\260we\030\037Yq'\037\000h\361\374\207\363\204\276\210\352\343\237\225v\020rv", 64 }, + { "\027\222\301V4\241\222\007\360uI\254\010\331xKUH7\005y\274)\241#h\340\351\346z\225\325\333/\357\354k5Nh\212O\345\215\3552OT\302M\351q\307k\272\003", 56, "\251\362\353\331h\224\336\274W\373]\345#t+\011\300\316\241%\351\232I\220u\277\037\020W\205- \253=\317\304Qgk\354", 9000, ":\356\247\042\033t\204R\017-\263\025@7\201M6\035\021\002.\031h\002\011@\307\247\033L3\227\311E_\271\232\305\224\020\3421A\000H\355\276\011\321\042Y\333=2\325l\361>\315\323\267\3218^", 64 }, + { "L\244\250\363\025\235\235\255\3260\225\365\243\352\213>\241\320\374\321\361&,\371:5\200<#]\371\042\213\300\266\026\240I\213\320\215\224\340\030$9\212T\212GM\331\004\006\345\252", 56, "xU\307)\357\312eO-\325\035\206\250\257\222x\010K(\375\343\032:\033?\351\200\004\221\322\011\024\270\367\212\001)M\247j\015\240\234\2002Y,\265", 9000, "\034\034%B\001tR\035$c\227\2621\004K\323\375N\200,Y\220@\212\372E\325\353?\343]R'~\364\305\236)\255\255\227\211\244\221\210\345\366\026\357\321\307\372\224\001\347\253\351\207\300\257\3543u\300", 64 }, + { "\312`\215\377\377\310\2070\277u \261;l\210-j\210\314\315\213]\335)D\375\273\345\026R\361\250o#\377\303E\030\373e\226ts]\256\177V\335\234\215\237\241d$\327\222", 56, "\347\305\001\344\333E\371{1/\335\261_\226:>U\241v~\364\216\220!\242\367\340g`M&\2664=Fj+\321f>\220\2262\300~\376\201{\341\002\3340\334\353\307\320", 9000, "\027\247P\003\356C\302\177\266j\361\206\263\033\246\011\300W2n\315\227\346\242\2635\226\233P\236B#\351\027\221a\3401$\211\033\342\225\320\241\202\005\373\272\301\342\177G\335`4\233\345z0\2748\230L", 64 }, + { "\346\322=WAC\245\211P\230\220\321`\342\223\247\231\376\006\341\300\265\266-\335@\201\362GRT\360\214\030\247\134\024r\324\3549\254\330[j*\226\234\223\210\314\024\272!\366C", 56, "Y\212p\006\011X\241\036_B\261\231\267\205P\302\2753\212|\263\307gv\235\314+y\317\217%\243\373\3167\354\213G>\360\212xj\134\362}\306#\260\337\244\177\310\365K\375\036\002\036x\025*\374\367", 9000, "^\235\352\306\347\325!\351L8\006\321\215\263\002\366\322\031\314\224\240 P\2427\010@\325\360\003\231\324\264+\357\2474\372\347(t\042)v/\331%\3149\000$9\326\276\233,5\322\017\134\324\022\205J", 64 }, + { "u4J\310\363\243\365\026\024j\324\372\221U\200\235\246\214\236L\300I\270\240w\274#P%\003\323\213\337t\331S^$6\230\374\005yX\374\231\035\225\025?\330\015\015\313P\271", 56, "\036\017\3424\334d\301\015\373x\265\231\300u\306\301d\332\320\350^\011DI\015\033\372\027\352\004\271H%~^W\275\367.\251\206\240\012s\211\211wkK\231\203.\204\021\364,\207\023Z\225\015c5\036\232\030\217\034\027\021\036\042", 9000, "\316\333\210\302\331v\257J\252\034;\332;\344\350\374\266\332\210?7<\307\227\211\342c\016\010\026\367cS\346\370!\266\257\031\341\337\243y\004(\307\0169\301a\313\216\327_\321\261\017\241\021\276\002\240\020|", 64 }, diff --git a/tests/sys/kern/Makefile b/tests/sys/kern/Makefile index 795752cd7779..de1fe1538ae3 100644 --- a/tests/sys/kern/Makefile +++ b/tests/sys/kern/Makefile @@ -8,6 +8,7 @@ TESTSDIR= ${TESTSBASE}/sys/kern ATF_TESTS_C+= kern_copyin ATF_TESTS_C+= kern_descrip_test ATF_TESTS_C+= ptrace_test +TEST_METADATA.ptrace_test+= timeout="15" ATF_TESTS_C+= reaper PLAIN_TESTS_C+= subr_unit_test ATF_TESTS_C+= unix_seqpacket_test diff --git a/tests/sys/kern/ptrace_test.c b/tests/sys/kern/ptrace_test.c index dede0f84f4aa..d53b8b5789d6 100644 --- a/tests/sys/kern/ptrace_test.c +++ b/tests/sys/kern/ptrace_test.c @@ -28,13 +28,18 @@ __FBSDID("$FreeBSD$"); #include +#include +#include +#include #include #include #include #include #include #include +#include #include +#include #include #include #include @@ -1673,6 +1678,1113 @@ ATF_TC_BODY(ptrace__ptrace_vfork_follow, tc) ATF_REQUIRE(errno == ECHILD); } +/* + * XXX: There's nothing inherently platform specific about this test, however a + * userspace visible breakpoint() is a prerequisite. + */ + #if defined(__amd64__) || defined(__i386__) || defined(__sparc64__) +/* + * Verify that no more events are reported after PT_KILL except for the + * process exit when stopped due to a breakpoint trap. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_breakpoint); +ATF_TC_BODY(ptrace__PT_KILL_breakpoint, tc) +{ + pid_t fpid, wpid; + int status; + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + breakpoint(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + + /* The second wait() should report hitting the breakpoint. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + /* Kill the child process. */ + ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0); + + /* The last wait() should report the SIGKILL. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSIGNALED(status)); + ATF_REQUIRE(WTERMSIG(status) == SIGKILL); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} +#endif /* defined(__amd64__) || defined(__i386__) || defined(__sparc64__) */ + +/* + * Verify that no more events are reported after PT_KILL except for the + * process exit when stopped inside of a system call. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_system_call); +ATF_TC_BODY(ptrace__PT_KILL_system_call, tc) +{ + struct ptrace_lwpinfo pl; + pid_t fpid, wpid; + int status; + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + getpid(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP and tracing system calls. */ + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + + /* The second wait() should report a system call entry for getpid(). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE); + + /* Kill the child process. */ + ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0); + + /* The last wait() should report the SIGKILL. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSIGNALED(status)); + ATF_REQUIRE(WTERMSIG(status) == SIGKILL); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +/* + * Verify that no more events are reported after PT_KILL except for the + * process exit when killing a multithreaded process. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_threads); +ATF_TC_BODY(ptrace__PT_KILL_threads, tc) +{ + struct ptrace_lwpinfo pl; + pid_t fpid, wpid; + lwpid_t main_lwp; + int status; + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + simple_thread_main(); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, + sizeof(pl)) != -1); + main_lwp = pl.pl_lwpid; + + ATF_REQUIRE(ptrace(PT_LWP_EVENTS, wpid, NULL, 1) == 0); + + /* Continue the child ignoring the SIGSTOP. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + + /* The first event should be for the child thread's birth. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)) == + (PL_FLAG_BORN | PL_FLAG_SCX)); + ATF_REQUIRE(pl.pl_lwpid != main_lwp); + + /* Kill the child process. */ + ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0); + + /* The last wait() should report the SIGKILL. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSIGNALED(status)); + ATF_REQUIRE(WTERMSIG(status) == SIGKILL); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +static void * +mask_usr1_thread(void *arg) +{ + pthread_barrier_t *pbarrier; + sigset_t sigmask; + + pbarrier = (pthread_barrier_t*)arg; + + sigemptyset(&sigmask); + sigaddset(&sigmask, SIGUSR1); + CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0); + + /* Sync up with other thread after sigmask updated. */ + pthread_barrier_wait(pbarrier); + + for (;;) + sleep(60); + + return (NULL); +} + +/* + * Verify that the SIGKILL from PT_KILL takes priority over other signals + * and prevents spurious stops due to those other signals. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_competing_signal); +ATF_TC_BODY(ptrace__PT_KILL_competing_signal, tc) +{ + pid_t fpid, wpid; + int status; + cpuset_t setmask; + pthread_t t; + pthread_barrier_t barrier; + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + /* + * Bind to one CPU so only one thread at a time will run. This + * test expects that the first thread created (the main thread) + * will be unsuspended first and will block the second thread + * from running. + */ + CPU_ZERO(&setmask); + CPU_SET(0, &setmask); + cpusetid_t setid; + CHILD_REQUIRE(cpuset(&setid) == 0); + CHILD_REQUIRE(cpuset_setaffinity(CPU_LEVEL_CPUSET, + CPU_WHICH_CPUSET, setid, sizeof(setmask), &setmask) == 0); + + CHILD_REQUIRE(pthread_barrier_init(&barrier, NULL, 2) == 0); + + CHILD_REQUIRE(pthread_create(&t, NULL, mask_usr1_thread, + (void*)&barrier) == 0); + + sigset_t sigmask; + sigemptyset(&sigmask); + sigaddset(&sigmask, SIGUSR2); + CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0); + + /* Sync up with other thread after sigmask updated. */ + pthread_barrier_wait(&barrier); + + trace_me(); + + for (;;) + sleep(60); + + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + + /* Send a signal that only the second thread can handle. */ + ATF_REQUIRE(kill(fpid, SIGUSR2) == 0); + + /* The second wait() should report the SIGUSR2. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2); + + /* Send a signal that only the first thread can handle. */ + ATF_REQUIRE(kill(fpid, SIGUSR1) == 0); + + /* Replace the SIGUSR2 with a kill. */ + ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0); + + /* The last wait() should report the SIGKILL (not the SIGUSR signal). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSIGNALED(status)); + ATF_REQUIRE(WTERMSIG(status) == SIGKILL); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +/* + * Verify that the SIGKILL from PT_KILL takes priority over other stop events + * and prevents spurious stops caused by those events. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_competing_stop); +ATF_TC_BODY(ptrace__PT_KILL_competing_stop, tc) +{ + pid_t fpid, wpid; + int status, i; + cpuset_t setmask; + pthread_t t; + pthread_barrier_t barrier; + lwpid_t main_lwp; + struct ptrace_lwpinfo pl; + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + + /* + * Bind to one CPU so only one thread at a time will run. This + * test expects that the first thread created (the main thread) + * will be unsuspended first and will block the second thread + * from running. + */ + CPU_ZERO(&setmask); + CPU_SET(0, &setmask); + cpusetid_t setid; + CHILD_REQUIRE(cpuset(&setid) == 0); + CHILD_REQUIRE(cpuset_setaffinity(CPU_LEVEL_CPUSET, + CPU_WHICH_CPUSET, setid, sizeof(setmask), &setmask) == 0); + + CHILD_REQUIRE(pthread_barrier_init(&barrier, NULL, 2) == 0); + + CHILD_REQUIRE(pthread_create(&t, NULL, mask_usr1_thread, + (void*)&barrier) == 0); + + sigset_t sigmask; + sigemptyset(&sigmask); + sigaddset(&sigmask, SIGUSR2); + CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0); + + /* Sync up with other thread after sigmask updated. */ + pthread_barrier_wait(&barrier); + + /* Sync up with the test before doing the getpid(). */ + raise(SIGSTOP); + + getpid(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + main_lwp = pl.pl_lwpid; + + /* Continue the child ignoring the SIGSTOP and tracing system calls. */ + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + + /* + * Continue until child is done with setup, which is indicated with + * SIGSTOP. Ignore system calls in the meantime. + */ + for (;;) { + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + if (WSTOPSIG(status) == SIGTRAP) { + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, + sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)); + } else { + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + break; + } + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + } + + /* Let both threads hit their syscall entries. */ + for (i = 0; i < 2; ++i) { + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, + sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE); + + /* + * Prevent the main thread from hitting its syscall exit for + * now. + */ + if (pl.pl_lwpid == main_lwp) + ATF_REQUIRE(ptrace(PT_SUSPEND, main_lwp, 0, 0) == 0); + + } + + /* Send a signal that only the second thread can handle. */ + ATF_REQUIRE(kill(fpid, SIGUSR2) == 0); + + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + + /* The second wait() should report the SIGUSR2. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2); + + /* Allow the main thread to try to finish its system call. */ + ATF_REQUIRE(ptrace(PT_RESUME, main_lwp, 0, 0) == 0); + + /* + * At this point, the main thread is in the middle of a system call and + * has been resumed. The second thread has taken a signal which will be + * replaced with a SIGKILL. We expect the main thread will get to run + * first. It should notice the kill request and exit accordingly and + * not stop for the system call exit event. + */ + + /* Replace the SIGUSR2 with a kill. */ + ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0); + + /* The last wait() should report the SIGKILL (not a syscall exit). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSIGNALED(status)); + ATF_REQUIRE(WTERMSIG(status) == SIGKILL); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +static void +sigusr1_handler(int sig) +{ + + CHILD_REQUIRE(sig == SIGUSR1); + _exit(2); +} + +/* + * Verify that even if the signal queue is full for a child process, + * a PT_KILL will kill the process. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_with_signal_full_sigqueue); +ATF_TC_BODY(ptrace__PT_KILL_with_signal_full_sigqueue, tc) +{ + pid_t fpid, wpid; + int status; + int max_pending_per_proc; + size_t len; + int i; + + ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR); + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + len = sizeof(max_pending_per_proc); + ATF_REQUIRE(sysctlbyname("kern.sigqueue.max_pending_per_proc", + &max_pending_per_proc, &len, NULL, 0) == 0); + + /* Fill the signal queue. */ + for (i = 0; i < max_pending_per_proc; ++i) + ATF_REQUIRE(kill(fpid, SIGUSR1) == 0); + + /* Kill the child process. */ + ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0); + + /* The last wait() should report the SIGKILL. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSIGNALED(status)); + ATF_REQUIRE(WTERMSIG(status) == SIGKILL); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +/* + * Verify that when stopped at a system call entry, a signal can be + * requested with PT_CONTINUE which will be delivered once the system + * call is complete. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_system_call_entry); +ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_system_call_entry, tc) +{ + struct ptrace_lwpinfo pl; + pid_t fpid, wpid; + int status; + + ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR); + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + getpid(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP and tracing system calls. */ + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + + /* The second wait() should report a system call entry for getpid(). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE); + + /* Continue the child process with a signal. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + for (;;) { + /* + * The last wait() should report exit 2, i.e., a normal _exit + * from the signal handler. In the meantime, catch and proceed + * past any syscall stops. + */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) { + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)); + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + } else { + ATF_REQUIRE(WIFEXITED(status)); + ATF_REQUIRE(WEXITSTATUS(status) == 2); + break; + } + } + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +static void +sigusr1_counting_handler(int sig) +{ + static int counter = 0; + + CHILD_REQUIRE(sig == SIGUSR1); + counter++; + if (counter == 2) + _exit(2); +} + +/* + * Verify that, when continuing from a stop at system call entry and exit, + * a signal can be requested from both stops, and both will be delivered when + * the system call is complete. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit); +ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit, tc) +{ + struct ptrace_lwpinfo pl; + pid_t fpid, wpid; + int status; + + ATF_REQUIRE(signal(SIGUSR1, sigusr1_counting_handler) != SIG_ERR); + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + getpid(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP and tracing system calls. */ + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + + /* The second wait() should report a system call entry for getpid(). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE); + + /* Continue the child process with a signal. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + /* The third wait() should report a system call exit for getpid(). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX); + + /* Continue the child process with a signal. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + for (;;) { + /* + * The last wait() should report exit 2, i.e., a normal _exit + * from the signal handler. In the meantime, catch and proceed + * past any syscall stops. + */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) { + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)); + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + } else { + ATF_REQUIRE(WIFEXITED(status)); + ATF_REQUIRE(WEXITSTATUS(status) == 2); + break; + } + } + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +/* + * Verify that even if the signal queue is full for a child process, + * a PT_CONTINUE with a signal will not result in loss of that signal. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_full_sigqueue); +ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_full_sigqueue, tc) +{ + pid_t fpid, wpid; + int status; + int max_pending_per_proc; + size_t len; + int i; + + ATF_REQUIRE(signal(SIGUSR2, handler) != SIG_ERR); + ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR); + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + len = sizeof(max_pending_per_proc); + ATF_REQUIRE(sysctlbyname("kern.sigqueue.max_pending_per_proc", + &max_pending_per_proc, &len, NULL, 0) == 0); + + /* Fill the signal queue. */ + for (i = 0; i < max_pending_per_proc; ++i) + ATF_REQUIRE(kill(fpid, SIGUSR2) == 0); + + /* Continue with signal. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + for (;;) { + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + if (WIFSTOPPED(status)) { + ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2); + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + } else { + /* + * The last wait() should report normal _exit from the + * SIGUSR1 handler. + */ + ATF_REQUIRE(WIFEXITED(status)); + ATF_REQUIRE(WEXITSTATUS(status) == 2); + break; + } + } + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +/* + * Verify that, after stopping due to a signal, that signal can be + * replaced with another signal. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_change_sig); +ATF_TC_BODY(ptrace__PT_CONTINUE_change_sig, tc) +{ + struct ptrace_lwpinfo pl; + pid_t fpid, wpid; + int status; + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + sleep(20); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + + /* Send a signal without ptrace. */ + ATF_REQUIRE(kill(fpid, SIGINT) == 0); + + /* The second wait() should report a SIGINT was received. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGINT); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI); + ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGINT); + + /* Continue the child process with a different signal. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGTERM) == 0); + + /* + * The last wait() should report having died due to the new + * signal, SIGTERM. + */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSIGNALED(status)); + ATF_REQUIRE(WTERMSIG(status) == SIGTERM); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +/* + * Verify that a signal can be passed through to the child even when there + * was no true signal originally. Such cases arise when a SIGTRAP is + * invented for e.g, system call stops. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_sigtrap_system_call_entry); +ATF_TC_BODY(ptrace__PT_CONTINUE_with_sigtrap_system_call_entry, tc) +{ + struct ptrace_lwpinfo pl; + pid_t fpid, wpid; + int status; + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + getpid(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP and tracing system calls. */ + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + + /* The second wait() should report a system call entry for getpid(). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE); + + /* Continue the child process with a SIGTRAP. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGTRAP) == 0); + + for (;;) { + /* + * The last wait() should report exit due to SIGTRAP. In the + * meantime, catch and proceed past any syscall stops. + */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) { + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)); + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + } else { + ATF_REQUIRE(WIFSIGNALED(status)); + ATF_REQUIRE(WTERMSIG(status) == SIGTRAP); + break; + } + } + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); + +} + +/* + * A mixed bag PT_CONTINUE with signal test. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_mix); +ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_mix, tc) +{ + struct ptrace_lwpinfo pl; + pid_t fpid, wpid; + int status; + + ATF_REQUIRE(signal(SIGUSR1, sigusr1_counting_handler) != SIG_ERR); + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + trace_me(); + getpid(); + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP and tracing system calls. */ + ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0); + + /* The second wait() should report a system call entry for getpid(). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE); + + /* Continue with the first SIGUSR1. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + /* The next wait() should report a system call exit for getpid(). */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX); + + /* Send an ABRT without ptrace. */ + ATF_REQUIRE(kill(fpid, SIGABRT) == 0); + + /* Continue normally. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + + /* The next wait() should report the SIGABRT. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGABRT); + + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI); + ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGABRT); + + /* Continue, replacing the SIGABRT with another SIGUSR1. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + for (;;) { + /* + * The last wait() should report exit 2, i.e., a normal _exit + * from the signal handler. In the meantime, catch and proceed + * past any syscall stops. + */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) { + ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1); + ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)); + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + } else { + ATF_REQUIRE(WIFEXITED(status)); + ATF_REQUIRE(WEXITSTATUS(status) == 2); + break; + } + } + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); + +} + +/* + * Verify a signal delivered by ptrace is noticed by kevent(2). + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_kqueue); +ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_kqueue, tc) +{ + pid_t fpid, wpid; + int status, kq, nevents; + struct kevent kev; + + ATF_REQUIRE(signal(SIGUSR1, SIG_IGN) != SIG_ERR); + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + CHILD_REQUIRE((kq = kqueue()) > 0); + EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ADD, 0, 0, 0); + CHILD_REQUIRE(kevent(kq, &kev, 1, NULL, 0, NULL) == 0); + + trace_me(); + + for (;;) { + nevents = kevent(kq, NULL, 0, &kev, 1, NULL); + if (nevents == -1 && errno == EINTR) + continue; + CHILD_REQUIRE(nevents > 0); + CHILD_REQUIRE(kev.filter == EVFILT_SIGNAL); + CHILD_REQUIRE(kev.ident == SIGUSR1); + break; + } + + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue with the SIGUSR1. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + /* + * The last wait() should report normal exit with code 1. + */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFEXITED(status)); + ATF_REQUIRE(WEXITSTATUS(status) == 1); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + +static sem_t sigusr1_sem; + +static void +sigusr1_sempost_handler(int sig __unused) +{ + + CHILD_REQUIRE(sem_post(&sigusr1_sem) == 0); +} + +static void * +signal_thread(void *arg) +{ + int err; + sigset_t sigmask; + + pthread_barrier_t *pbarrier = (pthread_barrier_t*)arg; + + /* Wait for this thread to receive a SIGUSR1. */ + do { + err = sem_wait(&sigusr1_sem); + CHILD_REQUIRE(err == 0 || errno == EINTR); + } while (err != 0 && errno == EINTR); + + /* Free our companion thread from the barrier. */ + pthread_barrier_wait(pbarrier); + + /* + * Swap ignore duties; the next SIGUSR1 should go to the + * other thread. + */ + CHILD_REQUIRE(sigemptyset(&sigmask) == 0); + CHILD_REQUIRE(sigaddset(&sigmask, SIGUSR1) == 0); + CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0); + + /* Sync up threads after swapping signal masks. */ + pthread_barrier_wait(pbarrier); + + /* Wait until our companion has received its SIGUSR1. */ + pthread_barrier_wait(pbarrier); + + return (NULL); +} + +/* + * Verify that if ptrace stops due to a signal but continues with + * a different signal that the new signal is routed to a thread + * that can accept it, and that that thread is awakened by the signal + * in a timely manner. + */ +ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_thread_sigmask); +ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_thread_sigmask, tc) +{ + pid_t fpid, wpid; + int status, err; + pthread_t t; + sigset_t sigmask; + pthread_barrier_t barrier; + + ATF_REQUIRE(pthread_barrier_init(&barrier, NULL, 2) == 0); + ATF_REQUIRE(sem_init(&sigusr1_sem, 0, 0) == 0); + ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR); + + ATF_REQUIRE((fpid = fork()) != -1); + if (fpid == 0) { + CHILD_REQUIRE(pthread_create(&t, NULL, signal_thread, (void*)&barrier) == 0); + + /* The other thread should receive the first SIGUSR1. */ + CHILD_REQUIRE(sigemptyset(&sigmask) == 0); + CHILD_REQUIRE(sigaddset(&sigmask, SIGUSR1) == 0); + CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0); + + trace_me(); + + /* Wait until other thread has received its SIGUSR1. */ + pthread_barrier_wait(&barrier); + + /* + * Swap ignore duties; the next SIGUSR1 should go to this + * thread. + */ + CHILD_REQUIRE(pthread_sigmask(SIG_UNBLOCK, &sigmask, NULL) == 0); + + /* Sync up threads after swapping signal masks. */ + pthread_barrier_wait(&barrier); + + /* + * Sync up with test code; we're ready for the next SIGUSR1 + * now. + */ + raise(SIGSTOP); + + /* Wait for this thread to receive a SIGUSR1. */ + do { + err = sem_wait(&sigusr1_sem); + CHILD_REQUIRE(err == 0 || errno == EINTR); + } while (err != 0 && errno == EINTR); + + /* Free the other thread from the barrier. */ + pthread_barrier_wait(&barrier); + + CHILD_REQUIRE(pthread_join(t, NULL) == 0); + + exit(1); + } + + /* The first wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + + /* + * Send a signal without ptrace that either thread will accept (USR2, + * in this case). + */ + ATF_REQUIRE(kill(fpid, SIGUSR2) == 0); + + /* The second wait() should report a SIGUSR2 was received. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2); + + /* Continue the child, changing the signal to USR1. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + /* The next wait() should report the stop from SIGSTOP. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP); + + /* Continue the child ignoring the SIGSTOP. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0); + + ATF_REQUIRE(kill(fpid, SIGUSR2) == 0); + + /* The next wait() should report a SIGUSR2 was received. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFSTOPPED(status)); + ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2); + + /* Continue the child, changing the signal to USR1. */ + ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0); + + /* The last wait() should report normal exit with code 1. */ + wpid = waitpid(fpid, &status, 0); + ATF_REQUIRE(wpid == fpid); + ATF_REQUIRE(WIFEXITED(status)); + ATF_REQUIRE(WEXITSTATUS(status) == 1); + + wpid = wait(&status); + ATF_REQUIRE(wpid == -1); + ATF_REQUIRE(errno == ECHILD); +} + ATF_TP_ADD_TCS(tp) { @@ -1700,6 +2812,23 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, ptrace__event_mask); ATF_TP_ADD_TC(tp, ptrace__ptrace_vfork); ATF_TP_ADD_TC(tp, ptrace__ptrace_vfork_follow); +#if defined(__amd64__) || defined(__i386__) || defined(__sparc64__) + ATF_TP_ADD_TC(tp, ptrace__PT_KILL_breakpoint); +#endif + ATF_TP_ADD_TC(tp, ptrace__PT_KILL_system_call); + ATF_TP_ADD_TC(tp, ptrace__PT_KILL_threads); + ATF_TP_ADD_TC(tp, ptrace__PT_KILL_competing_signal); + ATF_TP_ADD_TC(tp, ptrace__PT_KILL_competing_stop); + ATF_TP_ADD_TC(tp, ptrace__PT_KILL_with_signal_full_sigqueue); + ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_system_call_entry); + ATF_TP_ADD_TC(tp, + ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit); + ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_full_sigqueue); + ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_change_sig); + ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_sigtrap_system_call_entry); + ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_mix); + ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_kqueue); + ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_thread_sigmask); return (atf_no_error()); } diff --git a/tests/sys/netinet/fibs_test.sh b/tests/sys/netinet/fibs_test.sh index 16213071baff..9a5a03d417d0 100755 --- a/tests/sys/netinet/fibs_test.sh +++ b/tests/sys/netinet/fibs_test.sh @@ -39,8 +39,7 @@ # arpresolve only checked the default route. # # Outline: -# Create two tap(4) interfaces -# Simulate a crossover cable between them by using net/socat +# Create two connected epair(4) interfaces # Use nping (from security/nmap) to send an ICMP echo request from one # interface to the other, spoofing the source IP. The source IP must be # spoofed, or else it will already have an entry in the arp table. @@ -51,7 +50,7 @@ arpresolve_checks_interface_fib_head() atf_set "descr" "arpresolve should check the interface fib, not the default fib, for routes" atf_set "require.user" "root" atf_set "require.config" "fibs" - atf_set "require.progs" "socat nping" + atf_set "require.progs" "nping" } arpresolve_checks_interface_fib_body() { @@ -74,19 +73,13 @@ arpresolve_checks_interface_fib_body() fi get_fibs 2 - # Configure TAP interfaces - setup_tap "$FIB0" inet ${ADDR0} ${MASK0} - TAP0=$TAP - setup_tap "$FIB1" inet ${ADDR1} ${MASK1} - TAP1=$TAP - - # Simulate a crossover cable - socat /dev/${TAP0} /dev/${TAP1} & - SOCAT_PID=$! - echo ${SOCAT_PID} >> "processes_to_kill" + # Configure epair interfaces + get_epair + setup_iface "$EPAIRA" "$FIB0" inet ${ADDR0} ${MASK0} + setup_iface "$EPAIRB" "$FIB1" inet ${ADDR1} ${MASK1} # Send an ICMP echo request with a spoofed source IP - setfib 2 nping -c 1 -e ${TAP0} -S ${SPOOF_ADDR} \ + setfib "$FIB0" nping -c 1 -e ${EPAIRA} -S ${SPOOF_ADDR} \ --source-mac ${SPOOF_MAC} --icmp --icmp-type "echo-request" \ --icmp-code 0 --icmp-id 0xdead --icmp-seq 1 --data 0xbeef \ ${ADDR1} @@ -94,17 +87,11 @@ arpresolve_checks_interface_fib_body() # characteristic error message dmesg | grep "llinfo.*${SPOOF_ADDR}" # Check that the ARP entry exists - atf_check -o match:"${SPOOF_ADDR}.*expires" setfib 3 arp ${SPOOF_ADDR} + atf_check -o match:"${SPOOF_ADDR}.*expires" setfib "$FIB1" arp ${SPOOF_ADDR} } arpresolve_checks_interface_fib_cleanup() { - if [ -f processes_to_kill ]; then - for pid in $(cat processes_to_kill); do - kill "${pid}" - done - rm -f processes_to_kill - fi - cleanup_tap + cleanup_ifaces } @@ -163,7 +150,7 @@ loopback_and_network_routes_on_nondefault_fib_body() loopback_and_network_routes_on_nondefault_fib_cleanup() { - cleanup_tap + cleanup_ifaces } atf_test_case loopback_and_network_routes_on_nondefault_fib_inet6 cleanup @@ -221,7 +208,7 @@ loopback_and_network_routes_on_nondefault_fib_inet6_body() loopback_and_network_routes_on_nondefault_fib_inet6_cleanup() { - cleanup_tap + cleanup_ifaces } @@ -270,7 +257,7 @@ default_route_with_multiple_fibs_on_same_subnet_body() default_route_with_multiple_fibs_on_same_subnet_cleanup() { - cleanup_tap + cleanup_ifaces } atf_test_case default_route_with_multiple_fibs_on_same_subnet_inet6 cleanup @@ -317,7 +304,7 @@ default_route_with_multiple_fibs_on_same_subnet_inet6_body() default_route_with_multiple_fibs_on_same_subnet_inet6_cleanup() { - cleanup_tap + cleanup_ifaces } @@ -357,7 +344,7 @@ same_ip_multiple_ifaces_fib0_body() } same_ip_multiple_ifaces_fib0_cleanup() { - cleanup_tap + cleanup_ifaces } # Regression test for PR kern/189088 @@ -408,7 +395,7 @@ same_ip_multiple_ifaces_cleanup() { # Due to PR kern/189088, we must destroy the interfaces in LIFO order # in order for the routes to be correctly cleaned up. - for TAPD in `tail -r "tap_devices_to_cleanup"`; do + for TAPD in `tail -r "ifaces_to_cleanup"`; do echo ifconfig ${TAPD} destroy ifconfig ${TAPD} destroy done @@ -453,7 +440,7 @@ same_ip_multiple_ifaces_inet6_body() } same_ip_multiple_ifaces_inet6_cleanup() { - cleanup_tap + cleanup_ifaces } # Regression test for kern/187550 @@ -491,7 +478,7 @@ subnet_route_with_multiple_fibs_on_same_subnet_body() subnet_route_with_multiple_fibs_on_same_subnet_cleanup() { - cleanup_tap + cleanup_ifaces } atf_test_case subnet_route_with_multiple_fibs_on_same_subnet_inet6 cleanup @@ -528,7 +515,7 @@ subnet_route_with_multiple_fibs_on_same_subnet_inet6_body() subnet_route_with_multiple_fibs_on_same_subnet_inet6_cleanup() { - cleanup_tap + cleanup_ifaces } # Test that source address selection works correctly for UDP packets with @@ -579,7 +566,7 @@ udp_dontroute_body() # return ENETUNREACH, or send the packet to the wrong tap atf_check -o ignore setfib ${FIB0} \ ${SRCDIR}/udp_dontroute ${TARGET} /dev/${TARGET_TAP} - cleanup_tap + cleanup_ifaces # Repeat, but this time target the other tap setup_tap ${FIB0} inet ${ADDR0} ${MASK} @@ -592,7 +579,7 @@ udp_dontroute_body() udp_dontroute_cleanup() { - cleanup_tap + cleanup_ifaces } atf_test_case udp_dontroute6 cleanup @@ -634,7 +621,7 @@ udp_dontroute6_body() # return ENETUNREACH, or send the packet to the wrong tap atf_check -o ignore setfib ${FIB0} \ ${SRCDIR}/udp_dontroute -6 ${TARGET} /dev/${TARGET_TAP} - cleanup_tap + cleanup_ifaces # Repeat, but this time target the other tap setup_tap ${FIB0} inet6 ${ADDR0} ${MASK} no_dad @@ -647,7 +634,7 @@ udp_dontroute6_body() udp_dontroute6_cleanup() { - cleanup_tap + cleanup_ifaces } @@ -688,22 +675,58 @@ get_fibs() done } +# Creates a new pair of connected epair(4) interface, registers them for +# cleanup, and returns their namen via the environment variables EPAIRA and +# EPAIRB +get_epair() +{ + local EPAIRD + + if EPAIRD=`ifconfig epair create`; then + # Record the TAP device so we can clean it up later + echo ${EPAIRD} >> "ifaces_to_cleanup" + EPAIRA=${EPAIRD} + EPAIRB=${EPAIRD%a}b + else + atf_skip "Could not create epair(4) interfaces" + fi +} + # Creates a new tap(4) interface, registers it for cleanup, and returns the # name via the environment variable TAP get_tap() { - local TAPN=0 - while ! ifconfig tap${TAPN} create > /dev/null 2>&1; do - if [ "$TAPN" -ge 8 ]; then - atf_skip "Could not create a tap(4) interface" - else - TAPN=$(($TAPN + 1)) - fi - done - local TAPD=tap${TAPN} - # Record the TAP device so we can clean it up later - echo ${TAPD} >> "tap_devices_to_cleanup" - TAP=${TAPD} + local TAPD + + if TAPD=`ifconfig tap create`; then + # Record the TAP device so we can clean it up later + echo ${TAPD} >> "ifaces_to_cleanup" + TAP=${TAPD} + else + atf_skip "Could not create a tap(4) interface" + fi +} + +# Configure an ethernet interface +# parameters: +# Interface name +# fib +# Protocol (inet or inet6) +# IP address +# Netmask in number of bits (eg 24 or 8) +# Extra flags +# Return: None +setup_iface() +{ + local IFACE=$1 + local FIB=$2 + local PROTO=$3 + local ADDR=$4 + local MASK=$5 + local FLAGS=$6 + echo setfib ${FIB} \ + ifconfig $IFACE ${PROTO} ${ADDR}/${MASK} fib $FIB $FLAGS + setfib ${FIB} ifconfig $IFACE ${PROTO} ${ADDR}/${MASK} fib $FIB $FLAGS } # Create a tap(4) interface, configure it, and register it for cleanup. @@ -716,23 +739,17 @@ get_tap() # Return: the tap interface name as the env variable TAP setup_tap() { - local FIB=$1 - local PROTO=$2 - local ADDR=$3 - local MASK=$4 - local FLAGS=$5 get_tap - echo setfib ${FIB} ifconfig $TAP ${PROTO} ${ADDR}/${MASK} fib $FIB $FLAGS - setfib ${FIB} ifconfig $TAP ${PROTO} ${ADDR}/${MASK} fib $FIB $FLAGS + setup_iface "$TAP" "$@" } -cleanup_tap() +cleanup_ifaces() { - if [ -f tap_devices_to_cleanup ]; then - for tap_device in $(cat tap_devices_to_cleanup); do - echo ifconfig "${tap_device}" destroy - ifconfig "${tap_device}" destroy 2>/dev/null || true + if [ -f ifaces_to_cleanup ]; then + for iface in $(cat ifaces_to_cleanup); do + echo ifconfig "${iface}" destroy + ifconfig "${iface}" destroy 2>/dev/null || true done - rm -f tap_devices_to_cleanup + rm -f ifaces_to_cleanup fi } diff --git a/tests/sys/pjdfstest/tests/conf b/tests/sys/pjdfstest/tests/conf index 7a1168efea13..305a5765afc5 100644 --- a/tests/sys/pjdfstest/tests/conf +++ b/tests/sys/pjdfstest/tests/conf @@ -2,13 +2,6 @@ # # $FreeBSD$ -: ${PJDFSTEST_TEST_PATH=.} -if ! cd ${PJDFSTEST_TEST_PATH}/; then - echo 'Please set PJDFSTEST_TEST_PATH to a valid filesystem path' - echo 'Bail out!' - exit 1 -fi - GREP=grep mountpoint=$(df . | tail -1 | awk '{print $6}') fs=$(mount -p | awk '$2 == "'$mountpoint'" { print toupper($3) }') diff --git a/tools/tools/net80211/wlanstats/main.c b/tools/tools/net80211/wlanstats/main.c index 5716d4be986f..38dd10eda1b2 100644 --- a/tools/tools/net80211/wlanstats/main.c +++ b/tools/tools/net80211/wlanstats/main.c @@ -158,7 +158,7 @@ print_sta_stats(FILE *fd, const u_int8_t macaddr[IEEE80211_ADDR_LEN]) void usage(void) { - printf("wlanstats: [-ah] [-i ifname] [-l] [-o fmt] [interval]\n"); + printf("wlanstats: [-ah] [-i ifname] [-l] [-m station MAC address] [-o fmt] [interval]\n"); } int diff --git a/usr.bin/grep/file.c b/usr.bin/grep/file.c index 81f227d80739..34831f199877 100644 --- a/usr.bin/grep/file.c +++ b/usr.bin/grep/file.c @@ -219,12 +219,18 @@ grep_fgetln(struct file *f, size_t *lenp) if (bufrem == 0) /* EOF: return partial line */ break; - if ((p = memchr(bufpos, '\n', bufrem)) == NULL) + if ((p = memchr(bufpos, '\n', bufrem)) == NULL && + filebehave != FILE_MMAP) continue; - /* got it: finish up the line (like code above) */ - ++p; - diff = p - bufpos; - len += diff; + if (p == NULL) { + /* mmap EOF: return partial line, consume buffer */ + diff = len; + } else { + /* got it: finish up the line (like code above) */ + ++p; + diff = p - bufpos; + len += diff; + } if (grep_lnbufgrow(len)) goto error; memcpy(lnbuf + off, bufpos, diff); diff --git a/usr.bin/grep/grep.1 b/usr.bin/grep/grep.1 index 9e8633f0d2d9..0cc759dd3a60 100644 --- a/usr.bin/grep/grep.1 +++ b/usr.bin/grep/grep.1 @@ -352,6 +352,8 @@ Nonexistent and unreadable files are ignored (i.e. their error messages are suppressed). .It Fl U , Fl Fl binary Search binary files, but do not attempt to print them. +.It Fl u +This option has no effect and is provided only for compatibility with GNU grep. .It Fl V , Fl Fl version Display version information and exit. .It Fl v , Fl Fl invert-match diff --git a/usr.bin/lam/lam.c b/usr.bin/lam/lam.c index 60d1c52e2805..f47115503f24 100644 --- a/usr.bin/lam/lam.c +++ b/usr.bin/lam/lam.c @@ -46,11 +46,16 @@ __FBSDID("$FreeBSD$"); * Author: John Kunze, UCB */ +#include + +#include #include #include +#include #include #include #include +#include #define MAXOFILES 20 #define BIGBUFSIZ 5 * BUFSIZ @@ -81,9 +86,20 @@ main(int argc, char *argv[]) if (argc == 1) usage(); + if (caph_limit_stdio() == -1) + err(1, "unable to limit stdio"); getargs(argv); if (!morefiles) usage(); + + /* + * Cache NLS data, for strerror, for err(3), before entering capability + * mode. + */ + caph_cache_catpages(); + if (cap_enter() < 0 && errno != ENOSYS) + err(1, "unable to enter capability mode"); + for (;;) { linep = line; for (ip = input; ip->fp != NULL; ip++) @@ -105,7 +121,9 @@ getargs(char *av[]) static char fmtbuf[BUFSIZ]; char *fmtp = fmtbuf; int P, S, F, T; + cap_rights_t rights_ro; + cap_rights_init(&rights_ro, CAP_READ, CAP_FSTAT); P = S = F = T = 0; /* capitalized options */ while ((p = *++av) != NULL) { if (*p != '-' || !p[1]) { @@ -116,6 +134,8 @@ getargs(char *av[]) else if ((ip->fp = fopen(p, "r")) == NULL) { err(1, "%s", p); } + if (cap_rights_limit(fileno(ip->fp), &rights_ro) < 0) + err(1, "unable to limit rights on: %s", p); ip->pad = P; if (!ip->sepstring) ip->sepstring = (S ? (ip-1)->sepstring : ""); diff --git a/usr.bin/sockstat/sockstat.c b/usr.bin/sockstat/sockstat.c index e4c5a8f82c5a..dea195c387b1 100644 --- a/usr.bin/sockstat/sockstat.c +++ b/usr.bin/sockstat/sockstat.c @@ -88,9 +88,9 @@ static size_t numprotos; /* allocated size of protos[] */ static int *ports; -#define INT_BIT (sizeof(int)*CHAR_BIT) -#define SET_PORT(p) do { ports[p / INT_BIT] |= 1 << (p % INT_BIT); } while (0) -#define CHK_PORT(p) (ports[p / INT_BIT] & (1 << (p % INT_BIT))) +#define INT_BIT (sizeof(int)*CHAR_BIT) +#define SET_PORT(p) do { ports[p / INT_BIT] |= 1 << (p % INT_BIT); } while (0) +#define CHK_PORT(p) (ports[p / INT_BIT] & (1 << (p % INT_BIT))) struct addr { struct sockaddr_storage address; @@ -111,7 +111,7 @@ struct sock { struct sock *next; }; -#define HASHSIZE 1009 +#define HASHSIZE 1009 static struct sock *sockhash[HASHSIZE]; static struct xfile *xfiles; @@ -131,7 +131,6 @@ xprintf(const char *fmt, ...) return (len); } - static int get_proto_type(const char *proto) { @@ -147,7 +146,6 @@ get_proto_type(const char *proto) return (pent->p_proto); } - static void init_protos(int num) { @@ -167,7 +165,6 @@ init_protos(int num) numprotos = proto_count; } - static int parse_protos(char *protospec) { @@ -190,7 +187,6 @@ parse_protos(char *protospec) return (proto_index); } - static void parse_ports(const char *portspec) { @@ -359,27 +355,27 @@ gather_sctp(void) err(1, "malloc()"); switch (xladdr->address.sa.sa_family) { case AF_INET: -#define __IN_IS_ADDR_LOOPBACK(pina) \ +#define __IN_IS_ADDR_LOOPBACK(pina) \ ((ntohl((pina)->s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) - if (!__IN_IS_ADDR_LOOPBACK(&xladdr->address.sin.sin_addr)) + if (!__IN_IS_ADDR_LOOPBACK( + &xladdr->address.sin.sin_addr)) local_all_loopback = 0; -#undef __IN_IS_ADDR_LOOPBACK - sockaddr(&laddr->address, - AF_INET, - &xladdr->address.sin.sin_addr, - htons(xinpcb->local_port)); +#undef __IN_IS_ADDR_LOOPBACK + sockaddr(&laddr->address, AF_INET, + &xladdr->address.sin.sin_addr, + htons(xinpcb->local_port)); break; case AF_INET6: - if (!IN6_IS_ADDR_LOOPBACK(&xladdr->address.sin6.sin6_addr)) + if (!IN6_IS_ADDR_LOOPBACK( + &xladdr->address.sin6.sin6_addr)) local_all_loopback = 0; - sockaddr(&laddr->address, - AF_INET6, - &xladdr->address.sin6.sin6_addr, - htons(xinpcb->local_port)); + sockaddr(&laddr->address, AF_INET6, + &xladdr->address.sin6.sin6_addr, + htons(xinpcb->local_port)); break; default: errx(1, "address family %d not supported", - xladdr->address.sa.sa_family); + xladdr->address.sa.sa_family); } laddr->next = NULL; if (prev_laddr == NULL) @@ -389,33 +385,38 @@ gather_sctp(void) prev_laddr = laddr; } if (sock->laddr == NULL) { - if ((sock->laddr = calloc(1, sizeof(struct addr))) == NULL) + if ((sock->laddr = + calloc(1, sizeof(struct addr))) == NULL) err(1, "malloc()"); sock->laddr->address.ss_family = sock->family; if (sock->family == AF_INET) - sock->laddr->address.ss_len = sizeof(struct sockaddr_in); + sock->laddr->address.ss_len = + sizeof(struct sockaddr_in); else - sock->laddr->address.ss_len = sizeof(struct sockaddr_in6); + sock->laddr->address.ss_len = + sizeof(struct sockaddr_in6); local_all_loopback = 0; } if ((sock->faddr = calloc(1, sizeof(struct addr))) == NULL) err(1, "malloc()"); sock->faddr->address.ss_family = sock->family; if (sock->family == AF_INET) - sock->faddr->address.ss_len = sizeof(struct sockaddr_in); + sock->faddr->address.ss_len = + sizeof(struct sockaddr_in); else - sock->faddr->address.ss_len = sizeof(struct sockaddr_in6); + sock->faddr->address.ss_len = + sizeof(struct sockaddr_in6); no_stcb = 1; while (offset < len) { xstcb = (struct xsctp_tcb *)(void *)(buf + offset); offset += sizeof(struct xsctp_tcb); if (no_stcb) { - if (opt_l && - (sock->vflag & vflag) && + if (opt_l && (sock->vflag & vflag) && (!opt_L || !local_all_loopback) && ((xinpcb->flags & SCTP_PCB_FLAGS_UDPTYPE) || (xstcb->last == 1))) { - hash = (int)((uintptr_t)sock->socket % HASHSIZE); + hash = (int)((uintptr_t)sock->socket % + HASHSIZE); sock->next = sockhash[hash]; sockhash[hash] = sock; } else { @@ -448,37 +449,40 @@ gather_sctp(void) prev_laddr = NULL; local_all_loopback = 1; while (offset < len) { - xladdr = (struct xsctp_laddr *)(void *)(buf + offset); + xladdr = (struct xsctp_laddr *)(void *)(buf + + offset); offset += sizeof(struct xsctp_laddr); if (xladdr->last == 1) break; if (!opt_c) continue; - if ((laddr = calloc(1, sizeof(struct addr))) == NULL) + laddr = calloc(1, sizeof(struct addr)); + if (laddr == NULL) err(1, "malloc()"); switch (xladdr->address.sa.sa_family) { case AF_INET: -#define __IN_IS_ADDR_LOOPBACK(pina) \ +#define __IN_IS_ADDR_LOOPBACK(pina) \ ((ntohl((pina)->s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) - if (!__IN_IS_ADDR_LOOPBACK(&xladdr->address.sin.sin_addr)) + if (!__IN_IS_ADDR_LOOPBACK( + &xladdr->address.sin.sin_addr)) local_all_loopback = 0; -#undef __IN_IS_ADDR_LOOPBACK - sockaddr(&laddr->address, - AF_INET, - &xladdr->address.sin.sin_addr, - htons(xstcb->local_port)); +#undef __IN_IS_ADDR_LOOPBACK + sockaddr(&laddr->address, AF_INET, + &xladdr->address.sin.sin_addr, + htons(xstcb->local_port)); break; case AF_INET6: - if (!IN6_IS_ADDR_LOOPBACK(&xladdr->address.sin6.sin6_addr)) + if (!IN6_IS_ADDR_LOOPBACK( + &xladdr->address.sin6.sin6_addr)) local_all_loopback = 0; - sockaddr(&laddr->address, - AF_INET6, - &xladdr->address.sin6.sin6_addr, - htons(xstcb->local_port)); + sockaddr(&laddr->address, AF_INET6, + &xladdr->address.sin6.sin6_addr, + htons(xstcb->local_port)); break; default: - errx(1, "address family %d not supported", - xladdr->address.sa.sa_family); + errx(1, + "address family %d not supported", + xladdr->address.sa.sa_family); } laddr->next = NULL; if (prev_laddr == NULL) @@ -490,37 +494,40 @@ gather_sctp(void) prev_faddr = NULL; foreign_all_loopback = 1; while (offset < len) { - xraddr = (struct xsctp_raddr *)(void *)(buf + offset); + xraddr = (struct xsctp_raddr *)(void *)(buf + + offset); offset += sizeof(struct xsctp_raddr); if (xraddr->last == 1) break; if (!opt_c) continue; - if ((faddr = calloc(1, sizeof(struct addr))) == NULL) + faddr = calloc(1, sizeof(struct addr)); + if (faddr == NULL) err(1, "malloc()"); switch (xraddr->address.sa.sa_family) { case AF_INET: -#define __IN_IS_ADDR_LOOPBACK(pina) \ +#define __IN_IS_ADDR_LOOPBACK(pina) \ ((ntohl((pina)->s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) - if (!__IN_IS_ADDR_LOOPBACK(&xraddr->address.sin.sin_addr)) + if (!__IN_IS_ADDR_LOOPBACK( + &xraddr->address.sin.sin_addr)) foreign_all_loopback = 0; -#undef __IN_IS_ADDR_LOOPBACK - sockaddr(&faddr->address, - AF_INET, - &xraddr->address.sin.sin_addr, - htons(xstcb->remote_port)); +#undef __IN_IS_ADDR_LOOPBACK + sockaddr(&faddr->address, AF_INET, + &xraddr->address.sin.sin_addr, + htons(xstcb->remote_port)); break; case AF_INET6: - if (!IN6_IS_ADDR_LOOPBACK(&xraddr->address.sin6.sin6_addr)) + if (!IN6_IS_ADDR_LOOPBACK( + &xraddr->address.sin6.sin6_addr)) foreign_all_loopback = 0; - sockaddr(&faddr->address, - AF_INET6, - &xraddr->address.sin6.sin6_addr, - htons(xstcb->remote_port)); + sockaddr(&faddr->address, AF_INET6, + &xraddr->address.sin6.sin6_addr, + htons(xstcb->remote_port)); break; default: - errx(1, "address family %d not supported", - xraddr->address.sa.sa_family); + errx(1, + "address family %d not supported", + xraddr->address.sa.sa_family); } faddr->next = NULL; if (prev_faddr == NULL) @@ -532,8 +539,10 @@ gather_sctp(void) if (opt_c) { if ((sock->vflag & vflag) && (!opt_L || - !(local_all_loopback || foreign_all_loopback))) { - hash = (int)((uintptr_t)sock->socket % HASHSIZE); + !(local_all_loopback || + foreign_all_loopback))) { + hash = (int)((uintptr_t)sock->socket % + HASHSIZE); sock->next = sockhash[hash]; sockhash[hash] = sock; } else { @@ -646,13 +655,13 @@ gather_inet(int proto) if ((inp->inp_fport == 0 && !opt_l) || (inp->inp_fport != 0 && !opt_c)) continue; -#define __IN_IS_ADDR_LOOPBACK(pina) \ +#define __IN_IS_ADDR_LOOPBACK(pina) \ ((ntohl((pina)->s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) if (opt_L && (__IN_IS_ADDR_LOOPBACK(&inp->inp_faddr) || __IN_IS_ADDR_LOOPBACK(&inp->inp_laddr))) continue; -#undef __IN_IS_ADDR_LOOPBACK +#undef __IN_IS_ADDR_LOOPBACK } else if (inp->inp_vflag & INP_IPV6) { if ((inp->inp_fport == 0 && !opt_l) || (inp->inp_fport != 0 && !opt_c)) @@ -1003,7 +1012,7 @@ displaysock(struct sock *s, int pos) case AF_UNIX: if ((laddr == NULL) || (faddr == NULL)) errx(1, "laddr = %p or faddr = %p is NULL", - (void *)laddr, (void *)faddr); + (void *)laddr, (void *)faddr); /* server */ if (laddr->address.ss_len > 0) { pos += printaddr(&laddr->address); @@ -1018,15 +1027,14 @@ displaysock(struct sock *s, int pos) pos += xprintf("-> "); for (hash = 0; hash < HASHSIZE; ++hash) { for (s_tmp = sockhash[hash]; - s_tmp != NULL; - s_tmp = s_tmp->next) + s_tmp != NULL; + s_tmp = s_tmp->next) if (s_tmp->pcb == p) break; if (s_tmp != NULL) break; } - if (s_tmp == NULL || - s_tmp->laddr == NULL || + if (s_tmp == NULL || s_tmp->laddr == NULL || s_tmp->laddr->address.ss_len == 0) pos += xprintf("??"); else @@ -1144,7 +1152,6 @@ static int set_default_protos(void) return (pindex); } - static void usage(void) { diff --git a/usr.bin/timeout/timeout.1 b/usr.bin/timeout/timeout.1 index c9e838bb172d..f4532b102c62 100644 --- a/usr.bin/timeout/timeout.1 +++ b/usr.bin/timeout/timeout.1 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 17, 2017 +.Dd February 20, 2017 .Dt TIMEOUT 1 .Os .Sh NAME @@ -68,7 +68,9 @@ By default, .Ar SIGTERM . is sent. .It Fl k Ar time , Fl -kill-after Ar time -Send a second kill signal if +Send a +.Ar SIGKILL +signal if .Ar command is still running after .Ar time diff --git a/usr.sbin/bsdinstall/scripts/hardening b/usr.sbin/bsdinstall/scripts/hardening index a39ab7bcbd9d..c6bb586b058e 100755 --- a/usr.sbin/bsdinstall/scripts/hardening +++ b/usr.sbin/bsdinstall/scripts/hardening @@ -36,15 +36,15 @@ FEATURES=$( dialog --backtitle "FreeBSD Installer" \ --title "System Hardening" --nocancel --separate-output \ --checklist "Choose system security hardening options:" \ 0 0 0 \ - "0 hide_uids" "Hide processes running as other users" ${hide_uids:-off} \ - "1 hide_gids" "Hide processes running as other groups" ${hide_gids:-off} \ - "2 read_msgbuf" "Disable reading kernel message buffer for unprivileged users" ${read_msgbuf:-off} \ - "3 proc_debug" "Disable process debugging facilities for unprivileged users" ${proc_debug:-off} \ - "4 random_pid" "Randomize the PID of newly created processes" ${random_pid:-off} \ - "5 stack_guard" "Insert stack guard page ahead of the growable segments" ${stack_guard:-off} \ - "6 clear_tmp" "Clean the /tmp filesystem on system startup" ${clear_tmp:-off} \ - "7 disable_syslogd" "Disable opening Syslogd network socket (disables remote logging)" ${disable_syslogd:-off} \ - "8 disable_sendmail" "Disable Sendmail service" ${disable_sendmail:-off} \ + "0 hide_uids" "Hide processes running as other users" ${hide_uids:-on} \ + "1 hide_gids" "Hide processes running as other groups" ${hide_gids:-on} \ + "2 read_msgbuf" "Disable reading kernel message buffer for unprivileged users" ${read_msgbuf:-on} \ + "3 proc_debug" "Disable process debugging facilities for unprivileged users" ${proc_debug:-on} \ + "4 random_pid" "Randomize the PID of newly created processes" ${random_pid:-on} \ + "5 stack_guard" "Insert stack guard page ahead of the growable segments" ${stack_guard:-on} \ + "6 clear_tmp" "Clean the /tmp filesystem on system startup" ${clear_tmp:-on} \ + "7 disable_syslogd" "Disable opening Syslogd network socket (disables remote logging)" ${disable_syslogd:-on} \ + "8 disable_sendmail" "Disable Sendmail service" ${disable_sendmail:-on} \ 2>&1 1>&3 ) exec 3>&- diff --git a/usr.sbin/makefs/cd9660.c b/usr.sbin/makefs/cd9660.c index 472831672d79..88b3b13fbbca 100644 --- a/usr.sbin/makefs/cd9660.c +++ b/usr.sbin/makefs/cd9660.c @@ -109,58 +109,59 @@ __FBSDID("$FreeBSD$"); #include "cd9660/iso9660_rrip.h" #include "cd9660/cd9660_archimedes.h" -/* - * Global variables - */ -iso9660_disk diskStructure; - -static void cd9660_finalize_PVD(void); +static void cd9660_finalize_PVD(iso9660_disk *); static cd9660node *cd9660_allocate_cd9660node(void); -static void cd9660_set_defaults(void); +static void cd9660_set_defaults(iso9660_disk *); static int cd9660_arguments_set_string(const char *, const char *, int, char, char *); static void cd9660_populate_iso_dir_record( struct _iso_directory_record_cd9660 *, u_char, u_char, u_char, const char *); -static void cd9660_setup_root_node(void); -static int cd9660_setup_volume_descriptors(void); +static void cd9660_setup_root_node(iso9660_disk *); +static int cd9660_setup_volume_descriptors(iso9660_disk *); #if 0 static int cd9660_fill_extended_attribute_record(cd9660node *); #endif static void cd9660_sort_nodes(cd9660node *); -static int cd9660_translate_node_common(cd9660node *); -static int cd9660_translate_node(fsnode *, cd9660node *); +static int cd9660_translate_node_common(iso9660_disk *, cd9660node *); +static int cd9660_translate_node(iso9660_disk *, fsnode *, cd9660node *); static int cd9660_compare_filename(const char *, const char *); static void cd9660_sorted_child_insert(cd9660node *, cd9660node *); -static int cd9660_handle_collisions(cd9660node *, int); -static cd9660node *cd9660_rename_filename(cd9660node *, int, int); -static void cd9660_copy_filenames(cd9660node *); +static int cd9660_handle_collisions(iso9660_disk *, cd9660node *, int); +static cd9660node *cd9660_rename_filename(iso9660_disk *, cd9660node *, int, + int); +static void cd9660_copy_filenames(iso9660_disk *, cd9660node *); static void cd9660_sorting_nodes(cd9660node *); static int cd9660_count_collisions(cd9660node *); -static cd9660node *cd9660_rrip_move_directory(cd9660node *); -static int cd9660_add_dot_records(cd9660node *); +static cd9660node *cd9660_rrip_move_directory(iso9660_disk *, cd9660node *); +static int cd9660_add_dot_records(iso9660_disk *, cd9660node *); -static void cd9660_convert_structure(fsnode *, cd9660node *, int, +static void cd9660_convert_structure(iso9660_disk *, fsnode *, cd9660node *, int, int *, int *); static void cd9660_free_structure(cd9660node *); -static int cd9660_generate_path_table(void); -static int cd9660_level1_convert_filename(const char *, char *, int); -static int cd9660_level2_convert_filename(const char *, char *, int); +static int cd9660_generate_path_table(iso9660_disk *); +static int cd9660_level1_convert_filename(iso9660_disk *, const char *, char *, + int); +static int cd9660_level2_convert_filename(iso9660_disk *, const char *, char *, + int); #if 0 -static int cd9660_joliet_convert_filename(const char *, char *, int); +static int cd9660_joliet_convert_filename(iso9660_disk *, const char *, char *, + int); #endif -static int cd9660_convert_filename(const char *, char *, int); -static void cd9660_populate_dot_records(cd9660node *); -static int64_t cd9660_compute_offsets(cd9660node *, int64_t); +static int cd9660_convert_filename(iso9660_disk *, const char *, char *, int); +static void cd9660_populate_dot_records(iso9660_disk *, cd9660node *); +static int64_t cd9660_compute_offsets(iso9660_disk *, cd9660node *, int64_t); #if 0 static int cd9660_copy_stat_info(cd9660node *, cd9660node *, int); #endif -static cd9660node *cd9660_create_virtual_entry(const char *, cd9660node *, int, - int); -static cd9660node *cd9660_create_file(const char *, cd9660node *, cd9660node *); -static cd9660node *cd9660_create_directory(const char *, cd9660node *, +static cd9660node *cd9660_create_virtual_entry(iso9660_disk *, const char *, + cd9660node *, int, int); +static cd9660node *cd9660_create_file(iso9660_disk *, const char *, + cd9660node *, cd9660node *); +static cd9660node *cd9660_create_directory(iso9660_disk *, const char *, + cd9660node *, cd9660node *); +static cd9660node *cd9660_create_special_directory(iso9660_disk *, u_char, cd9660node *); -static cd9660node *cd9660_create_special_directory(u_char, cd9660node *); /* @@ -191,72 +192,79 @@ int cd9660_defaults_set = 0; * Set default values for cd9660 extension to makefs */ static void -cd9660_set_defaults(void) +cd9660_set_defaults(iso9660_disk *diskStructure) { /*Fix the sector size for now, though the spec allows for other sizes*/ - diskStructure.sectorSize = 2048; + diskStructure->sectorSize = 2048; /* Set up defaults in our own structure */ - diskStructure.verbose_level = 0; - diskStructure.keep_bad_images = 0; - diskStructure.follow_sym_links = 0; - diskStructure.isoLevel = 2; + diskStructure->verbose_level = 0; + diskStructure->keep_bad_images = 0; + diskStructure->follow_sym_links = 0; + diskStructure->isoLevel = 2; - diskStructure.rock_ridge_enabled = 0; - diskStructure.rock_ridge_renamed_dir_name = 0; - diskStructure.rock_ridge_move_count = 0; - diskStructure.rr_moved_dir = 0; + diskStructure->rock_ridge_enabled = 0; + diskStructure->rock_ridge_renamed_dir_name = 0; + diskStructure->rock_ridge_move_count = 0; + diskStructure->rr_moved_dir = 0; - diskStructure.archimedes_enabled = 0; - diskStructure.chrp_boot = 0; + diskStructure->archimedes_enabled = 0; + diskStructure->chrp_boot = 0; - diskStructure.include_padding_areas = 1; + diskStructure->include_padding_areas = 1; /* Spec breaking functionality */ - diskStructure.allow_deep_trees = - diskStructure.allow_start_dot = - diskStructure.allow_max_name = - diskStructure.allow_illegal_chars = - diskStructure.allow_lowercase = - diskStructure.allow_multidot = - diskStructure.omit_trailing_period = 0; + diskStructure->allow_deep_trees = + diskStructure->allow_start_dot = + diskStructure->allow_max_name = + diskStructure->allow_illegal_chars = + diskStructure->allow_lowercase = + diskStructure->allow_multidot = + diskStructure->omit_trailing_period = 0; /* Make sure the PVD is clear */ - memset(&diskStructure.primaryDescriptor, 0, 2048); + memset(&diskStructure->primaryDescriptor, 0, 2048); - memset(diskStructure.primaryDescriptor.publisher_id, 0x20,128); - memset(diskStructure.primaryDescriptor.preparer_id, 0x20,128); - memset(diskStructure.primaryDescriptor.application_id, 0x20,128); - memset(diskStructure.primaryDescriptor.copyright_file_id, 0x20,37); - memset(diskStructure.primaryDescriptor.abstract_file_id, 0x20,37); - memset(diskStructure.primaryDescriptor.bibliographic_file_id, 0x20,37); + memset(diskStructure->primaryDescriptor.publisher_id, 0x20,128); + memset(diskStructure->primaryDescriptor.preparer_id, 0x20,128); + memset(diskStructure->primaryDescriptor.application_id, 0x20,128); + memset(diskStructure->primaryDescriptor.copyright_file_id, 0x20,37); + memset(diskStructure->primaryDescriptor.abstract_file_id, 0x20,37); + memset(diskStructure->primaryDescriptor.bibliographic_file_id, 0x20,37); - strcpy(diskStructure.primaryDescriptor.system_id, "FreeBSD"); + strcpy(diskStructure->primaryDescriptor.system_id, "FreeBSD"); cd9660_defaults_set = 1; /* Boot support: Initially disabled */ - diskStructure.has_generic_bootimage = 0; - diskStructure.generic_bootimage = NULL; + diskStructure->has_generic_bootimage = 0; + diskStructure->generic_bootimage = NULL; - diskStructure.boot_image_directory = 0; - /*memset(diskStructure.boot_descriptor, 0, 2048);*/ + diskStructure->boot_image_directory = 0; + /*memset(diskStructure->boot_descriptor, 0, 2048);*/ - diskStructure.is_bootable = 0; - TAILQ_INIT(&diskStructure.boot_images); - LIST_INIT(&diskStructure.boot_entries); + diskStructure->is_bootable = 0; + TAILQ_INIT(&diskStructure->boot_images); + LIST_INIT(&diskStructure->boot_entries); } void -cd9660_prep_opts(fsinfo_t *fsopts __unused) +cd9660_prep_opts(fsinfo_t *fsopts) { - cd9660_set_defaults(); + iso9660_disk *diskStructure; + + if ((diskStructure = calloc(1, sizeof(*diskStructure))) == NULL) + err(EXIT_FAILURE, "%s: calloc", __func__); + + fsopts->fs_specific = diskStructure; + + cd9660_set_defaults(diskStructure); } void -cd9660_cleanup_opts(fsinfo_t *fsopts __unused) +cd9660_cleanup_opts(fsinfo_t *fsopts) { - + free(fsopts->fs_specific); } static int @@ -295,20 +303,19 @@ cd9660_parse_opts(const char *option, fsinfo_t *fsopts) { char *var, *val; int rv; + iso9660_disk *diskStructure = fsopts->fs_specific; + /* Set up allowed options - integer options ONLY */ option_t cd9660_options[] = { - { "l", &diskStructure.isoLevel, 1, 2, "ISO Level" }, - { "isolevel", &diskStructure.isoLevel, 1, 2, "ISO Level" }, - { "verbose", &diskStructure.verbose_level, 0, 2, + { "l", &diskStructure->isoLevel, 1, 2, "ISO Level" }, + { "isolevel", &diskStructure->isoLevel, 1, 2, "ISO Level" }, + { "verbose", &diskStructure->verbose_level, 0, 2, "Turns on verbose output" }, - { "v", &diskStructure.verbose_level, 0 , 2, + { "v", &diskStructure->verbose_level, 0 , 2, "Turns on verbose output"}, { .name = NULL } }; - if (cd9660_defaults_set == 0) - cd9660_set_defaults(); - /* * Todo : finish implementing this, and make a function that * parses them @@ -335,33 +342,33 @@ cd9660_parse_opts(const char *option, fsinfo_t *fsopts) /* First handle options with no parameters */ if (strcmp(var, "h") == 0) { - diskStructure.displayHelp = 1; + diskStructure->displayHelp = 1; rv = 1; } else if (CD9660_IS_COMMAND_ARG_DUAL(var, "S", "follow-symlinks")) { /* this is not handled yet */ - diskStructure.follow_sym_links = 1; + diskStructure->follow_sym_links = 1; rv = 1; } else if (CD9660_IS_COMMAND_ARG_DUAL(var, "L", "label")) { rv = cd9660_arguments_set_string(val, "Disk Label", 32, 'd', - diskStructure.primaryDescriptor.volume_id); + diskStructure->primaryDescriptor.volume_id); } else if (CD9660_IS_COMMAND_ARG_DUAL(var, "A", "applicationid")) { rv = cd9660_arguments_set_string(val, "Application Identifier", 128, 'a', - diskStructure.primaryDescriptor.application_id); + diskStructure->primaryDescriptor.application_id); } else if(CD9660_IS_COMMAND_ARG_DUAL(var, "P", "publisher")) { rv = cd9660_arguments_set_string(val, "Publisher Identifier", - 128, 'a', diskStructure.primaryDescriptor.publisher_id); + 128, 'a', diskStructure->primaryDescriptor.publisher_id); } else if (CD9660_IS_COMMAND_ARG_DUAL(var, "p", "preparer")) { rv = cd9660_arguments_set_string(val, "Preparer Identifier", - 128, 'a', diskStructure.primaryDescriptor.preparer_id); + 128, 'a', diskStructure->primaryDescriptor.preparer_id); } else if (CD9660_IS_COMMAND_ARG_DUAL(var, "V", "volumeid")) { rv = cd9660_arguments_set_string(val, "Volume Set Identifier", - 128, 'a', diskStructure.primaryDescriptor.volume_set_id); + 128, 'a', diskStructure->primaryDescriptor.volume_set_id); /* Boot options */ } else if (CD9660_IS_COMMAND_ARG_DUAL(var, "B", "bootimage")) { if (val == NULL) warnx("error: The Boot Image parameter requires a valid boot information string"); else - rv = cd9660_add_boot_disk(val); + rv = cd9660_add_boot_disk(diskStructure, val); } else if (CD9660_IS_COMMAND_ARG(var, "bootimagedir")) { /* * XXXfvdl this is unused. @@ -370,7 +377,7 @@ cd9660_parse_opts(const char *option, fsinfo_t *fsopts) errx(1, "error: The Boot Image Directory parameter" " requires a directory name\n"); else { - if ((diskStructure.boot_image_directory = + if ((diskStructure->boot_image_directory = malloc(strlen(val) + 1)) == NULL) { CD9660_MEM_ALLOC_ERROR("cd9660_parse_opts"); exit(1); @@ -378,40 +385,40 @@ cd9660_parse_opts(const char *option, fsinfo_t *fsopts) /* BIG TODO: Add the max length function here */ cd9660_arguments_set_string(val, "Boot Image Directory", - 12 , 'd', diskStructure.boot_image_directory); + 12 , 'd', diskStructure->boot_image_directory); } } else if (CD9660_IS_COMMAND_ARG_DUAL(var, "G", "generic-bootimage")) { if (val == NULL) warnx("error: The Boot Image parameter requires a valid boot information string"); else - rv = cd9660_add_generic_bootimage(val); + rv = cd9660_add_generic_bootimage(diskStructure, val); } else if (CD9660_IS_COMMAND_ARG(var, "no-trailing-padding")) - diskStructure.include_padding_areas = 0; + diskStructure->include_padding_areas = 0; /* RRIP */ else if (CD9660_IS_COMMAND_ARG_DUAL(var, "R", "rockridge")) - diskStructure.rock_ridge_enabled = 1; + diskStructure->rock_ridge_enabled = 1; else if (CD9660_IS_COMMAND_ARG_DUAL(var, "A", "archimedes")) - diskStructure.archimedes_enabled = 1; + diskStructure->archimedes_enabled = 1; else if (CD9660_IS_COMMAND_ARG(var, "chrp-boot")) - diskStructure.chrp_boot = 1; + diskStructure->chrp_boot = 1; else if (CD9660_IS_COMMAND_ARG_DUAL(var, "K", "keep-bad-images")) - diskStructure.keep_bad_images = 1; + diskStructure->keep_bad_images = 1; else if (CD9660_IS_COMMAND_ARG(var, "allow-deep-trees")) - diskStructure.allow_deep_trees = 1; + diskStructure->allow_deep_trees = 1; else if (CD9660_IS_COMMAND_ARG(var, "allow-max-name")) - diskStructure.allow_max_name = 1; + diskStructure->allow_max_name = 1; else if (CD9660_IS_COMMAND_ARG(var, "allow-illegal-chars")) - diskStructure.allow_illegal_chars = 1; + diskStructure->allow_illegal_chars = 1; else if (CD9660_IS_COMMAND_ARG(var, "allow-lowercase")) - diskStructure.allow_lowercase = 1; + diskStructure->allow_lowercase = 1; else if (CD9660_IS_COMMAND_ARG(var,"allow-multidot")) - diskStructure.allow_multidot = 1; + diskStructure->allow_multidot = 1; else if (CD9660_IS_COMMAND_ARG(var, "omit-trailing-period")) - diskStructure.omit_trailing_period = 1; + diskStructure->omit_trailing_period = 1; else if (CD9660_IS_COMMAND_ARG(var, "no-emul-boot") || CD9660_IS_COMMAND_ARG(var, "no-boot") || CD9660_IS_COMMAND_ARG(var, "hard-disk-boot")) { - cd9660_eltorito_add_boot_option(var, 0); + cd9660_eltorito_add_boot_option(diskStructure, var, 0); /* End of flag variables */ } else if (CD9660_IS_COMMAND_ARG(var, "boot-load-segment")) { @@ -419,7 +426,8 @@ cd9660_parse_opts(const char *option, fsinfo_t *fsopts) warnx("Option `%s' doesn't contain a value", var); rv = 0; } else { - cd9660_eltorito_add_boot_option(var, val); + cd9660_eltorito_add_boot_option(diskStructure, var, + val); } } else { if (val == NULL) { @@ -452,19 +460,20 @@ cd9660_makefs(const char *image, const char *dir, fsnode *root, int64_t totalSpace; int error; cd9660node *real_root; + iso9660_disk *diskStructure = fsopts->fs_specific; - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("cd9660_makefs: ISO level is %i\n", - diskStructure.isoLevel); - if (diskStructure.isoLevel < 2 && - diskStructure.allow_multidot) + diskStructure->isoLevel); + if (diskStructure->isoLevel < 2 && + diskStructure->allow_multidot) errx(1, "allow-multidot requires iso level of 2\n"); assert(image != NULL); assert(dir != NULL); assert(root != NULL); - if (diskStructure.displayHelp) { + if (diskStructure->displayHelp) { /* * Display help here - probably want to put it in * a separate function @@ -472,7 +481,7 @@ cd9660_makefs(const char *image, const char *dir, fsnode *root, return; } - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("cd9660_makefs: image %s directory %s root %p\n", image, dir, root); @@ -496,11 +505,12 @@ cd9660_makefs(const char *image, const char *dir, fsnode *root, ISO_FILENAME_MAXLENGTH_WITH_PADDING); real_root->level = 0; - diskStructure.rootNode = real_root; + diskStructure->rootNode = real_root; real_root->type = CD9660_TYPE_DIR; error = 0; real_root->node = root; - cd9660_convert_structure(root, real_root, 1, &numDirectories, &error); + cd9660_convert_structure(diskStructure, root, real_root, 1, + &numDirectories, &error); if (TAILQ_EMPTY(&real_root->cn_children)) { errx(1, "cd9660_makefs: converted directory is empty. " @@ -508,109 +518,111 @@ cd9660_makefs(const char *image, const char *dir, fsnode *root, } else if (error != 0) { errx(1, "cd9660_makefs: tree conversion failed\n"); } else { - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("cd9660_makefs: tree converted\n"); } /* Add the dot and dot dot records */ - cd9660_add_dot_records(real_root); + cd9660_add_dot_records(diskStructure, real_root); - cd9660_setup_root_node(); + cd9660_setup_root_node(diskStructure); - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("cd9660_makefs: done converting tree\n"); /* non-SUSP extensions */ - if (diskStructure.archimedes_enabled) - archimedes_convert_tree(diskStructure.rootNode); + if (diskStructure->archimedes_enabled) + archimedes_convert_tree(diskStructure->rootNode); /* Rock ridge / SUSP init pass */ - if (diskStructure.rock_ridge_enabled) { - cd9660_susp_initialize(diskStructure.rootNode, - diskStructure.rootNode, NULL); + if (diskStructure->rock_ridge_enabled) { + cd9660_susp_initialize(diskStructure, diskStructure->rootNode, + diskStructure->rootNode, NULL); } /* Build path table structure */ - diskStructure.pathTableLength = cd9660_generate_path_table(); + diskStructure->pathTableLength = cd9660_generate_path_table( + diskStructure); - pathTableSectors = CD9660_BLOCKS(diskStructure.sectorSize, - diskStructure.pathTableLength); + pathTableSectors = CD9660_BLOCKS(diskStructure->sectorSize, + diskStructure->pathTableLength); - firstAvailableSector = cd9660_setup_volume_descriptors(); - if (diskStructure.is_bootable) { - firstAvailableSector = cd9660_setup_boot(firstAvailableSector); + firstAvailableSector = cd9660_setup_volume_descriptors(diskStructure); + if (diskStructure->is_bootable) { + firstAvailableSector = cd9660_setup_boot(diskStructure, + firstAvailableSector); if (firstAvailableSector < 0) errx(1, "setup_boot failed"); } /* LE first, then BE */ - diskStructure.primaryLittleEndianTableSector = firstAvailableSector; - diskStructure.primaryBigEndianTableSector = - diskStructure.primaryLittleEndianTableSector + pathTableSectors; + diskStructure->primaryLittleEndianTableSector = firstAvailableSector; + diskStructure->primaryBigEndianTableSector = + diskStructure->primaryLittleEndianTableSector + pathTableSectors; /* Set the secondary ones to -1, not going to use them for now */ - diskStructure.secondaryBigEndianTableSector = -1; - diskStructure.secondaryLittleEndianTableSector = -1; + diskStructure->secondaryBigEndianTableSector = -1; + diskStructure->secondaryLittleEndianTableSector = -1; - diskStructure.dataFirstSector = - diskStructure.primaryBigEndianTableSector + pathTableSectors; - if (diskStructure.verbose_level > 0) + diskStructure->dataFirstSector = + diskStructure->primaryBigEndianTableSector + pathTableSectors; + if (diskStructure->verbose_level > 0) printf("cd9660_makefs: Path table conversion complete. " "Each table is %i bytes, or %" PRIu64 " sectors.\n", - diskStructure.pathTableLength, pathTableSectors); + diskStructure->pathTableLength, pathTableSectors); - startoffset = diskStructure.sectorSize*diskStructure.dataFirstSector; + startoffset = diskStructure->sectorSize*diskStructure->dataFirstSector; - totalSpace = cd9660_compute_offsets(real_root, startoffset); + totalSpace = cd9660_compute_offsets(diskStructure, real_root, startoffset); - diskStructure.totalSectors = diskStructure.dataFirstSector + - CD9660_BLOCKS(diskStructure.sectorSize, totalSpace); + diskStructure->totalSectors = diskStructure->dataFirstSector + + CD9660_BLOCKS(diskStructure->sectorSize, totalSpace); /* Disabled until pass 1 is done */ - if (diskStructure.rock_ridge_enabled) { - diskStructure.susp_continuation_area_start_sector = - diskStructure.totalSectors; - diskStructure.totalSectors += - CD9660_BLOCKS(diskStructure.sectorSize, - diskStructure.susp_continuation_area_size); - cd9660_susp_finalize(diskStructure.rootNode); + if (diskStructure->rock_ridge_enabled) { + diskStructure->susp_continuation_area_start_sector = + diskStructure->totalSectors; + diskStructure->totalSectors += + CD9660_BLOCKS(diskStructure->sectorSize, + diskStructure->susp_continuation_area_size); + cd9660_susp_finalize(diskStructure, diskStructure->rootNode); } - cd9660_finalize_PVD(); + cd9660_finalize_PVD(diskStructure); /* Add padding sectors, just for testing purposes right now */ - /* diskStructure.totalSectors+=150; */ + /* diskStructure->totalSectors+=150; */ /* Debugging output */ - if (diskStructure.verbose_level > 0) { + if (diskStructure->verbose_level > 0) { printf("cd9660_makefs: Sectors 0-15 reserved\n"); printf("cd9660_makefs: Primary path tables starts in sector %" - PRId64 "\n", diskStructure.primaryLittleEndianTableSector); + PRId64 "\n", diskStructure->primaryLittleEndianTableSector); printf("cd9660_makefs: File data starts in sector %" - PRId64 "\n", diskStructure.dataFirstSector); + PRId64 "\n", diskStructure->dataFirstSector); printf("cd9660_makefs: Total sectors: %" - PRId64 "\n", diskStructure.totalSectors); + PRId64 "\n", diskStructure->totalSectors); } /* * Add padding sectors at the end * TODO: Clean this up and separate padding */ - if (diskStructure.include_padding_areas) - diskStructure.totalSectors += 150; + if (diskStructure->include_padding_areas) + diskStructure->totalSectors += 150; - cd9660_write_image(image); + cd9660_write_image(diskStructure, image); - if (diskStructure.verbose_level > 1) { - debug_print_volume_descriptor_information(); - debug_print_tree(real_root,0); + if (diskStructure->verbose_level > 1) { + debug_print_volume_descriptor_information(diskStructure); + debug_print_tree(diskStructure, real_root, 0); debug_print_path_tree(real_root); } /* Clean up data structures */ cd9660_free_structure(real_root); - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("cd9660_makefs: done\n"); } @@ -618,76 +630,77 @@ cd9660_makefs(const char *image, const char *dir, fsnode *root, typedef int (*cd9660node_func)(cd9660node *); static void -cd9660_finalize_PVD(void) +cd9660_finalize_PVD(iso9660_disk *diskStructure) { time_t tstamp = stampst.st_ino ? stampst.st_mtime : time(NULL); /* root should be a fixed size of 34 bytes since it has no name */ - memcpy(diskStructure.primaryDescriptor.root_directory_record, - diskStructure.rootNode->dot_record->isoDirRecord, 34); + memcpy(diskStructure->primaryDescriptor.root_directory_record, + diskStructure->rootNode->dot_record->isoDirRecord, 34); /* In RRIP, this might be longer than 34 */ - diskStructure.primaryDescriptor.root_directory_record[0] = 34; + diskStructure->primaryDescriptor.root_directory_record[0] = 34; /* Set up all the important numbers in the PVD */ - cd9660_bothendian_dword(diskStructure.totalSectors, - (unsigned char *)diskStructure.primaryDescriptor.volume_space_size); + cd9660_bothendian_dword(diskStructure->totalSectors, + (unsigned char *)diskStructure->primaryDescriptor.volume_space_size); cd9660_bothendian_word(1, - (unsigned char *)diskStructure.primaryDescriptor.volume_set_size); + (unsigned char *)diskStructure->primaryDescriptor.volume_set_size); cd9660_bothendian_word(1, (unsigned char *) - diskStructure.primaryDescriptor.volume_sequence_number); - cd9660_bothendian_word(diskStructure.sectorSize, + diskStructure->primaryDescriptor.volume_sequence_number); + cd9660_bothendian_word(diskStructure->sectorSize, (unsigned char *) - diskStructure.primaryDescriptor.logical_block_size); - cd9660_bothendian_dword(diskStructure.pathTableLength, - (unsigned char *)diskStructure.primaryDescriptor.path_table_size); + diskStructure->primaryDescriptor.logical_block_size); + cd9660_bothendian_dword(diskStructure->pathTableLength, + (unsigned char *)diskStructure->primaryDescriptor.path_table_size); - cd9660_731(diskStructure.primaryLittleEndianTableSector, - (u_char *)diskStructure.primaryDescriptor.type_l_path_table); - cd9660_732(diskStructure.primaryBigEndianTableSector, - (u_char *)diskStructure.primaryDescriptor.type_m_path_table); + cd9660_731(diskStructure->primaryLittleEndianTableSector, + (u_char *)diskStructure->primaryDescriptor.type_l_path_table); + cd9660_732(diskStructure->primaryBigEndianTableSector, + (u_char *)diskStructure->primaryDescriptor.type_m_path_table); - diskStructure.primaryDescriptor.file_structure_version[0] = 1; + diskStructure->primaryDescriptor.file_structure_version[0] = 1; /* Pad all strings with spaces instead of nulls */ - cd9660_pad_string_spaces(diskStructure.primaryDescriptor.volume_id, 32); - cd9660_pad_string_spaces(diskStructure.primaryDescriptor.system_id, 32); - cd9660_pad_string_spaces(diskStructure.primaryDescriptor.volume_set_id, + cd9660_pad_string_spaces(diskStructure->primaryDescriptor.volume_id, 32); + cd9660_pad_string_spaces(diskStructure->primaryDescriptor.system_id, 32); + cd9660_pad_string_spaces(diskStructure->primaryDescriptor.volume_set_id, 128); - cd9660_pad_string_spaces(diskStructure.primaryDescriptor.publisher_id, + cd9660_pad_string_spaces(diskStructure->primaryDescriptor.publisher_id, 128); - cd9660_pad_string_spaces(diskStructure.primaryDescriptor.preparer_id, + cd9660_pad_string_spaces(diskStructure->primaryDescriptor.preparer_id, 128); - cd9660_pad_string_spaces(diskStructure.primaryDescriptor.application_id, + cd9660_pad_string_spaces(diskStructure->primaryDescriptor.application_id, 128); cd9660_pad_string_spaces( - diskStructure.primaryDescriptor.copyright_file_id, 37); + diskStructure->primaryDescriptor.copyright_file_id, 37); cd9660_pad_string_spaces( - diskStructure.primaryDescriptor.abstract_file_id, 37); + diskStructure->primaryDescriptor.abstract_file_id, 37); cd9660_pad_string_spaces( - diskStructure.primaryDescriptor.bibliographic_file_id, 37); + diskStructure->primaryDescriptor.bibliographic_file_id, 37); /* Setup dates */ cd9660_time_8426( - (unsigned char *)diskStructure.primaryDescriptor.creation_date, + (unsigned char *)diskStructure->primaryDescriptor.creation_date, tstamp); cd9660_time_8426( - (unsigned char *)diskStructure.primaryDescriptor.modification_date, + (unsigned char *)diskStructure->primaryDescriptor.modification_date, tstamp); #if 0 - cd9660_set_date(diskStructure.primaryDescriptor.expiration_date, + cd9660_set_date(diskStructure->primaryDescriptor.expiration_date, tstamp); #endif - memset(diskStructure.primaryDescriptor.expiration_date, '0', 16); - diskStructure.primaryDescriptor.expiration_date[16] = 0; + memset(diskStructure->primaryDescriptor.expiration_date, '0', 16); + diskStructure->primaryDescriptor.expiration_date[16] = 0; + cd9660_time_8426( - (unsigned char *)diskStructure.primaryDescriptor.effective_date, + (unsigned char *)diskStructure->primaryDescriptor.effective_date, tstamp); /* make this sane */ - cd9660_time_915(diskStructure.rootNode->dot_record->isoDirRecord->date, + cd9660_time_915(diskStructure->rootNode->dot_record->isoDirRecord->date, tstamp); } @@ -711,16 +724,16 @@ cd9660_populate_iso_dir_record(struct _iso_directory_record_cd9660 *record, } static void -cd9660_setup_root_node(void) +cd9660_setup_root_node(iso9660_disk *diskStructure) { - cd9660_populate_iso_dir_record(diskStructure.rootNode->isoDirRecord, + cd9660_populate_iso_dir_record(diskStructure->rootNode->isoDirRecord, 0, ISO_FLAG_DIRECTORY, 1, "\0"); } /*********** SUPPORT FUNCTIONS ***********/ static int -cd9660_setup_volume_descriptors(void) +cd9660_setup_volume_descriptors(iso9660_disk *diskStructure) { /* Boot volume descriptor should come second */ int sector = 16; @@ -734,17 +747,17 @@ cd9660_setup_volume_descriptors(void) } temp->volumeDescriptorData = - (unsigned char *)&diskStructure.primaryDescriptor; + (unsigned char *)&diskStructure->primaryDescriptor; temp->volumeDescriptorData[0] = ISO_VOLUME_DESCRIPTOR_PVD; temp->volumeDescriptorData[6] = 1; temp->sector = sector; memcpy(temp->volumeDescriptorData + 1, ISO_VOLUME_DESCRIPTOR_STANDARD_ID, 5); - diskStructure.firstVolumeDescriptor = temp; + diskStructure->firstVolumeDescriptor = temp; sector++; /* Set up boot support if enabled. BVD must reside in sector 17 */ - if (diskStructure.is_bootable) { + if (diskStructure->is_bootable) { if ((t = malloc(sizeof(volume_descriptor))) == NULL) { CD9660_MEM_ALLOC_ERROR( "cd9660_setup_volume_descriptors"); @@ -759,9 +772,9 @@ cd9660_setup_volume_descriptors(void) temp = t; memset(t->volumeDescriptorData, 0, 2048); t->sector = 17; - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Setting up boot volume descriptor\n"); - cd9660_setup_boot_volume_descriptor(t); + cd9660_setup_boot_volume_descriptor(diskStructure, t); sector++; } @@ -807,7 +820,7 @@ cd9660_fill_extended_attribute_record(cd9660node *node) #endif static int -cd9660_translate_node_common(cd9660node *newnode) +cd9660_translate_node_common(iso9660_disk *diskStructure, cd9660node *newnode) { time_t tstamp = stampst.st_ino ? stampst.st_mtime : time(NULL); int test; @@ -817,7 +830,7 @@ cd9660_translate_node_common(cd9660node *newnode) /* Now populate the isoDirRecord structure */ memset(temp, 0, ISO_FILENAME_MAXLENGTH_WITH_PADDING); - test = cd9660_convert_filename(newnode->node->name, + test = cd9660_convert_filename(diskStructure, newnode->node->name, temp, !(S_ISDIR(newnode->node->type))); flag = ISO_FLAG_CLEAR; @@ -851,10 +864,11 @@ cd9660_translate_node_common(cd9660node *newnode) * @returns int 0 on failure, 1 on success */ static int -cd9660_translate_node(fsnode *node, cd9660node *newnode) +cd9660_translate_node(iso9660_disk *diskStructure, fsnode *node, + cd9660node *newnode) { if (node == NULL) { - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("cd9660_translate_node: NULL node passed, " "returning\n"); return 0; @@ -872,7 +886,7 @@ cd9660_translate_node(fsnode *node, cd9660node *newnode) if (!(S_ISDIR(node->type))) newnode->fileDataLength = node->inode->st.st_size; - if (cd9660_translate_node_common(newnode) == 0) + if (cd9660_translate_node_common(diskStructure, newnode) == 0) return 0; /* Finally, overwrite some of the values that are set by default */ @@ -1006,7 +1020,8 @@ cd9660_sorted_child_insert(cd9660node *parent, cd9660node *cn_new) * where n represents the files respective place in the ordering */ static int -cd9660_handle_collisions(cd9660node *colliding, int past) +cd9660_handle_collisions(iso9660_disk *diskStructure, cd9660node *colliding, + int past) { cd9660node *iter, *next, *prev; int skip; @@ -1041,14 +1056,16 @@ cd9660_handle_collisions(cd9660node *colliding, int past) temp_past--; } skip += past; - iter = cd9660_rename_filename(iter, skip, delete_chars); + iter = cd9660_rename_filename(diskStructure, iter, skip, + delete_chars); } return flag; } static cd9660node * -cd9660_rename_filename(cd9660node *iter, int num, int delete_chars) +cd9660_rename_filename(iso9660_disk *diskStructure, cd9660node *iter, int num, + int delete_chars) { int i = 0; int numbts, digit, digits, temp, powers, count; @@ -1056,14 +1073,14 @@ cd9660_rename_filename(cd9660node *iter, int num, int delete_chars) int maxlength; char *tmp; - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Rename_filename called\n"); - assert(1 <= diskStructure.isoLevel && diskStructure.isoLevel <= 2); + assert(1 <= diskStructure->isoLevel && diskStructure->isoLevel <= 2); /* TODO : A LOT of chanes regarding 8.3 filenames */ - if (diskStructure.isoLevel == 1) + if (diskStructure->isoLevel == 1) maxlength = 8; - else if (diskStructure.isoLevel == 2) + else if (diskStructure->isoLevel == 2) maxlength = 31; else maxlength = ISO_FILENAME_MAXLENGTH_BEFORE_VERSION; @@ -1109,7 +1126,7 @@ cd9660_rename_filename(cd9660node *iter, int num, int delete_chars) */ /* - if (diskStructure.isoLevel == 1) { + if (diskStructure->isoLevel == 1) { numbts = 8 - digits - delete_chars; if (dot < 0) { @@ -1161,7 +1178,7 @@ cd9660_rename_filename(cd9660node *iter, int num, int delete_chars) /* Todo: Figure out why these functions are nec. */ static void -cd9660_copy_filenames(cd9660node *node) +cd9660_copy_filenames(iso9660_disk *diskStructure, cd9660node *node) { cd9660node *cn; @@ -1169,12 +1186,12 @@ cd9660_copy_filenames(cd9660node *node) return; if (TAILQ_FIRST(&node->cn_children)->isoDirRecord == NULL) { - debug_print_tree(diskStructure.rootNode, 0); + debug_print_tree(diskStructure, diskStructure->rootNode, 0); exit(1); } TAILQ_FOREACH(cn, &node->cn_children, cn_next_child) { - cd9660_copy_filenames(cn); + cd9660_copy_filenames(diskStructure, cn); memcpy(cn->o_name, cn->isoDirRecord->name, ISO_FILENAME_MAXLENGTH_WITH_PADDING); } @@ -1241,7 +1258,7 @@ cd9660_count_collisions(cd9660node *copy) } static cd9660node * -cd9660_rrip_move_directory(cd9660node *dir) +cd9660_rrip_move_directory(iso9660_disk *diskStructure, cd9660node *dir) { char newname[9]; cd9660node *tfile; @@ -1252,28 +1269,29 @@ cd9660_rrip_move_directory(cd9660node *dir) * 2) Point the virtual file to the new directory * 3) Point the relocated directory to its old parent * 4) Move the directory specified by dir into rr_moved_dir, - * and rename it to "diskStructure.rock_ridge_move_count" (as a string) + * and rename it to "diskStructure->rock_ridge_move_count" (as a string) */ /* First see if the moved directory even exists */ - if (diskStructure.rr_moved_dir == NULL) { - diskStructure.rr_moved_dir = - cd9660_create_directory(ISO_RRIP_DEFAULT_MOVE_DIR_NAME, - diskStructure.rootNode, dir); - if (diskStructure.rr_moved_dir == NULL) + if (diskStructure->rr_moved_dir == NULL) { + diskStructure->rr_moved_dir = cd9660_create_directory( + diskStructure, ISO_RRIP_DEFAULT_MOVE_DIR_NAME, + diskStructure->rootNode, dir); + if (diskStructure->rr_moved_dir == NULL) return 0; - cd9660_time_915(diskStructure.rr_moved_dir->isoDirRecord->date, + cd9660_time_915(diskStructure->rr_moved_dir->isoDirRecord->date, stampst.st_ino ? stampst.st_mtime : start_time.tv_sec); } /* Create a file with the same ORIGINAL name */ - tfile = cd9660_create_file(dir->node->name, dir->parent, dir); + tfile = cd9660_create_file(diskStructure, dir->node->name, dir->parent, + dir); if (tfile == NULL) return NULL; - diskStructure.rock_ridge_move_count++; + diskStructure->rock_ridge_move_count++; snprintf(newname, sizeof(newname), "%08i", - diskStructure.rock_ridge_move_count); + diskStructure->rock_ridge_move_count); /* Point to old parent */ dir->rr_real_parent = dir->parent; @@ -1287,13 +1305,13 @@ cd9660_rrip_move_directory(cd9660node *dir) } /* Point to new parent */ - dir->parent = diskStructure.rr_moved_dir; + dir->parent = diskStructure->rr_moved_dir; /* Point the file to the moved directory */ tfile->rr_relocated = dir; /* Actually move the directory */ - cd9660_sorted_child_insert(diskStructure.rr_moved_dir, dir); + cd9660_sorted_child_insert(diskStructure->rr_moved_dir, dir); /* TODO: Inherit permissions / ownership (basically the entire inode) */ @@ -1307,7 +1325,7 @@ cd9660_rrip_move_directory(cd9660node *dir) } static int -cd9660_add_dot_records(cd9660node *root) +cd9660_add_dot_records(iso9660_disk *diskStructure, cd9660node *root) { struct cd9660_children_head *head = &root->cn_children; cd9660node *cn; @@ -1316,10 +1334,11 @@ cd9660_add_dot_records(cd9660node *root) if ((cn->type & CD9660_TYPE_DIR) == 0) continue; /* Recursion first */ - cd9660_add_dot_records(cn); + cd9660_add_dot_records(diskStructure, cn); } - cd9660_create_special_directory(CD9660_TYPE_DOT, root); - cd9660_create_special_directory(CD9660_TYPE_DOTDOT, root); + cd9660_create_special_directory(diskStructure, CD9660_TYPE_DOT, root); + cd9660_create_special_directory(diskStructure, CD9660_TYPE_DOTDOT, + root); return 1; } @@ -1334,8 +1353,8 @@ cd9660_add_dot_records(cd9660node *root) * @param int* Running count of the number of directories that are being created */ static void -cd9660_convert_structure(fsnode *root, cd9660node *parent_node, int level, - int *numDirectories, int *error) +cd9660_convert_structure(iso9660_disk *diskStructure, fsnode *root, + cd9660node *parent_node, int level, int *numDirectories, int *error) { fsnode *iterator = root; cd9660node *this_node; @@ -1378,7 +1397,8 @@ cd9660_convert_structure(fsnode *root, cd9660node *parent_node, int level, /* Translate the node, including its filename */ this_node->parent = parent_node; - cd9660_translate_node(iterator, this_node); + cd9660_translate_node(diskStructure, iterator, + this_node); this_node->level = level; if (S_ISDIR(iterator->type)) { @@ -1392,14 +1412,14 @@ cd9660_convert_structure(fsnode *root, cd9660node *parent_node, int level, * allowed as per ISO spec */ if (level == 8) { - if ((!diskStructure.allow_deep_trees) && - (!diskStructure.rock_ridge_enabled)) { + if ((!diskStructure->allow_deep_trees) && + (!diskStructure->rock_ridge_enabled)) { warnx("error: found entry " "with depth greater " "than 8."); (*error) = 1; return; - } else if (diskStructure. + } else if (diskStructure-> rock_ridge_enabled) { working_level = 3; /* @@ -1409,6 +1429,7 @@ cd9660_convert_structure(fsnode *root, cd9660node *parent_node, int level, this_node->level = working_level - 1; if (cd9660_rrip_move_directory( + diskStructure, this_node) == NULL) { warnx("Failure in " "cd9660_rrip_" @@ -1423,8 +1444,8 @@ cd9660_convert_structure(fsnode *root, cd9660node *parent_node, int level, /* Do the recursive call on the children */ if (iterator->child != NULL) { - cd9660_convert_structure( - iterator->child, this_node, + cd9660_convert_structure(diskStructure, + iterator->child, this_node, working_level, numDirectories, error); @@ -1463,10 +1484,11 @@ cd9660_convert_structure(fsnode *root, cd9660node *parent_node, int level, /* cd9660_handle_collisions(first_node); */ /* TODO: need cleanup */ - cd9660_copy_filenames(parent_node); + cd9660_copy_filenames(diskStructure, parent_node); do { - flag = cd9660_handle_collisions(parent_node, counter); + flag = cd9660_handle_collisions(diskStructure, parent_node, + counter); counter++; cd9660_sorting_nodes(parent_node); } while ((flag == 1) && (counter < 100)); @@ -1517,9 +1539,9 @@ struct ptq_entry * @returns int The number of built path tables (between 1 and 4), 0 on failure */ static int -cd9660_generate_path_table(void) +cd9660_generate_path_table(iso9660_disk *diskStructure) { - cd9660node *cn, *dirNode = diskStructure.rootNode; + cd9660node *cn, *dirNode = diskStructure->rootNode; cd9660node *last = dirNode; int pathTableSize = 0; /* computed as we go */ int counter = 1; /* root gets a count of 0 */ @@ -1527,7 +1549,7 @@ cd9660_generate_path_table(void) TAILQ_HEAD(cd9660_pt_head, ptq_entry) pt_head; TAILQ_INIT(&pt_head); - PTQUEUE_NEW(n, ptq_entry, -1, diskStructure.rootNode); + PTQUEUE_NEW(n, ptq_entry, -1, diskStructure->rootNode); /* Push the root node */ TAILQ_INSERT_HEAD(&pt_head, n, ptq); @@ -1585,7 +1607,8 @@ cd9660_compute_full_filename(cd9660node *node, char *buf) } /* NEW filename conversion method */ -typedef int(*cd9660_filename_conversion_functor)(const char *, char *, int); +typedef int(*cd9660_filename_conversion_functor)(iso9660_disk *, const char *, + char *, int); /* @@ -1595,7 +1618,8 @@ typedef int(*cd9660_filename_conversion_functor)(const char *, char *, int); * XXX bounds checking! */ static int -cd9660_level1_convert_filename(const char *oldname, char *newname, int is_file) +cd9660_level1_convert_filename(iso9660_disk *diskStructure, const char *oldname, + char *newname, int is_file) { /* * ISO 9660 : 10.1 @@ -1620,7 +1644,7 @@ cd9660_level1_convert_filename(const char *oldname, char *newname, int is_file) } } else { /* cut RISC OS file type off ISO name */ - if (diskStructure.archimedes_enabled && + if (diskStructure->archimedes_enabled && *oldname == ',' && strlen(oldname) == 4) break; @@ -1644,7 +1668,7 @@ cd9660_level1_convert_filename(const char *oldname, char *newname, int is_file) oldname++; } if (is_file) { - if (!found_ext && !diskStructure.omit_trailing_period) + if (!found_ext && !diskStructure->omit_trailing_period) *newname++ = '.'; /* Add version */ sprintf(newname, ";%i", 1); @@ -1654,7 +1678,8 @@ cd9660_level1_convert_filename(const char *oldname, char *newname, int is_file) /* XXX bounds checking! */ static int -cd9660_level2_convert_filename(const char *oldname, char *newname, int is_file) +cd9660_level2_convert_filename(iso9660_disk *diskStructure, const char *oldname, + char *newname, int is_file) { /* * ISO 9660 : 7.5.1 @@ -1673,7 +1698,7 @@ cd9660_level2_convert_filename(const char *oldname, char *newname, int is_file) /* Handle period first, as it is special */ if (*oldname == '.') { if (found_ext) { - if (diskStructure.allow_multidot) { + if (diskStructure->allow_multidot) { *newname++ = '.'; } else { *newname++ = '_'; @@ -1686,7 +1711,7 @@ cd9660_level2_convert_filename(const char *oldname, char *newname, int is_file) } } else { /* cut RISC OS file type off ISO name */ - if (diskStructure.archimedes_enabled && + if (diskStructure->archimedes_enabled && *oldname == ',' && strlen(oldname) == 4) break; @@ -1695,7 +1720,7 @@ cd9660_level2_convert_filename(const char *oldname, char *newname, int is_file) else if (isupper((unsigned char)*oldname) || isdigit((unsigned char)*oldname)) *newname++ = *oldname; - else if (diskStructure.allow_multidot && + else if (diskStructure->allow_multidot && *oldname == '.') { *newname++ = '.'; } else { @@ -1710,7 +1735,7 @@ cd9660_level2_convert_filename(const char *oldname, char *newname, int is_file) oldname ++; } if (is_file) { - if (!found_ext && !diskStructure.omit_trailing_period) + if (!found_ext && !diskStructure->omit_trailing_period) *newname++ = '.'; /* Add version */ sprintf(newname, ";%i", 1); @@ -1720,7 +1745,8 @@ cd9660_level2_convert_filename(const char *oldname, char *newname, int is_file) #if 0 static int -cd9660_joliet_convert_filename(const char *oldname, char *newname, int is_file) +cd9660_joliet_convert_filename(iso9660_disk *diskStructure, const char *oldname, + char *newname, int is_file) { /* TODO: implement later, move to cd9660_joliet.c ?? */ } @@ -1736,24 +1762,25 @@ cd9660_joliet_convert_filename(const char *oldname, char *newname, int is_file) * @returns int The length of the new string */ static int -cd9660_convert_filename(const char *oldname, char *newname, int is_file) +cd9660_convert_filename(iso9660_disk *diskStructure, const char *oldname, + char *newname, int is_file) { - assert(1 <= diskStructure.isoLevel && diskStructure.isoLevel <= 2); + assert(1 <= diskStructure->isoLevel && diskStructure->isoLevel <= 2); /* NEW */ cd9660_filename_conversion_functor conversion_function = NULL; - if (diskStructure.isoLevel == 1) + if (diskStructure->isoLevel == 1) conversion_function = &cd9660_level1_convert_filename; - else if (diskStructure.isoLevel == 2) + else if (diskStructure->isoLevel == 2) conversion_function = &cd9660_level2_convert_filename; - return (*conversion_function)(oldname, newname, is_file); + return (*conversion_function)(diskStructure, oldname, newname, is_file); } int -cd9660_compute_record_size(cd9660node *node) +cd9660_compute_record_size(iso9660_disk *diskStructure, cd9660node *node) { int size = node->isoDirRecord->length[0]; - if (diskStructure.rock_ridge_enabled) + if (diskStructure->rock_ridge_enabled) size += node->susp_entry_size; size += node->su_tail_size; size += size & 1; /* Ensure length of record is even. */ @@ -1762,7 +1789,7 @@ cd9660_compute_record_size(cd9660node *node) } static void -cd9660_populate_dot_records(cd9660node *node) +cd9660_populate_dot_records(iso9660_disk *diskStructure, cd9660node *node) { node->dot_record->fileDataSector = node->fileDataSector; memcpy(node->dot_record->isoDirRecord,node->isoDirRecord, 34); @@ -1771,9 +1798,9 @@ cd9660_populate_dot_records(cd9660node *node) node->dot_record->isoDirRecord->name[1] = 0; node->dot_record->isoDirRecord->length[0] = 34; node->dot_record->fileRecordSize = - cd9660_compute_record_size(node->dot_record); + cd9660_compute_record_size(diskStructure, node->dot_record); - if (node == diskStructure.rootNode) { + if (node == diskStructure->rootNode) { node->dot_dot_record->fileDataSector = node->fileDataSector; memcpy(node->dot_dot_record->isoDirRecord,node->isoDirRecord, 34); @@ -1788,7 +1815,7 @@ cd9660_populate_dot_records(cd9660node *node) node->dot_dot_record->isoDirRecord->name[1] = 0; node->dot_dot_record->isoDirRecord->length[0] = 34; node->dot_dot_record->fileRecordSize = - cd9660_compute_record_size(node->dot_dot_record); + cd9660_compute_record_size(diskStructure, node->dot_dot_record); } /* @@ -1798,7 +1825,8 @@ cd9660_populate_dot_records(cd9660node *node) * a multiple of sector size) */ static int64_t -cd9660_compute_offsets(cd9660node *node, int64_t startOffset) +cd9660_compute_offsets(iso9660_disk *diskStructure, cd9660node *node, + int64_t startOffset) { /* * This function needs to compute the size of directory records and @@ -1822,10 +1850,11 @@ cd9660_compute_offsets(cd9660node *node, int64_t startOffset) node->fileDataSector = -1; if (node->type & CD9660_TYPE_DIR) { - node->fileRecordSize = cd9660_compute_record_size(node); + node->fileRecordSize = cd9660_compute_record_size( + diskStructure, node); /*Set what sector this directory starts in*/ node->fileDataSector = - CD9660_BLOCKS(diskStructure.sectorSize,startOffset); + CD9660_BLOCKS(diskStructure->sectorSize,startOffset); cd9660_bothendian_dword(node->fileDataSector, node->isoDirRecord->extent); @@ -1837,32 +1866,32 @@ cd9660_compute_offsets(cd9660node *node, int64_t startOffset) node->fileSectorsUsed = 1; TAILQ_FOREACH(child, &node->cn_children, cn_next_child) { node->fileDataLength += - cd9660_compute_record_size(child); - if ((cd9660_compute_record_size(child) + + cd9660_compute_record_size(diskStructure, child); + if ((cd9660_compute_record_size(diskStructure, child) + current_sector_usage) >= - diskStructure.sectorSize) { + diskStructure->sectorSize) { current_sector_usage = 0; node->fileSectorsUsed++; } current_sector_usage += - cd9660_compute_record_size(child); + cd9660_compute_record_size(diskStructure, child); } cd9660_bothendian_dword(node->fileSectorsUsed * - diskStructure.sectorSize,node->isoDirRecord->size); + diskStructure->sectorSize,node->isoDirRecord->size); /* * This should point to the sector after the directory * record (or, the first byte in that sector) */ - used_bytes += node->fileSectorsUsed * diskStructure.sectorSize; + used_bytes += node->fileSectorsUsed * diskStructure->sectorSize; for (child = TAILQ_NEXT(node->dot_dot_record, cn_next_child); child != NULL; child = TAILQ_NEXT(child, cn_next_child)) { /* Directories need recursive call */ if (S_ISDIR(child->node->type)) { - r = cd9660_compute_offsets(child, + r = cd9660_compute_offsets(diskStructure, child, used_bytes + startOffset); if (r != -1) @@ -1873,7 +1902,7 @@ cd9660_compute_offsets(cd9660node *node, int64_t startOffset) } /* Explicitly set the . and .. records */ - cd9660_populate_dot_records(node); + cd9660_populate_dot_records(diskStructure, node); /* Finally, do another iteration to write the file data*/ for (child = TAILQ_NEXT(node->dot_dot_record, cn_next_child); @@ -1883,20 +1912,20 @@ cd9660_compute_offsets(cd9660node *node, int64_t startOffset) if (S_ISDIR(child->node->type)) continue; child->fileRecordSize = - cd9660_compute_record_size(child); + cd9660_compute_record_size(diskStructure, child); child->fileSectorsUsed = - CD9660_BLOCKS(diskStructure.sectorSize, + CD9660_BLOCKS(diskStructure->sectorSize, child->fileDataLength); inode = child->node->inode; if ((inode->flags & FI_ALLOCATED) == 0) { inode->ino = - CD9660_BLOCKS(diskStructure.sectorSize, + CD9660_BLOCKS(diskStructure->sectorSize, used_bytes + startOffset); inode->flags |= FI_ALLOCATED; used_bytes += child->fileSectorsUsed * - diskStructure.sectorSize; + diskStructure->sectorSize; } else { INODE_WARNX(("%s: already allocated inode %d " "data sectors at %" PRIu32, __func__, @@ -1937,8 +1966,8 @@ cd9660_copy_stat_info(cd9660node *from, cd9660node *to, int file) #endif static cd9660node * -cd9660_create_virtual_entry(const char *name, cd9660node *parent, int file, - int insert) +cd9660_create_virtual_entry(iso9660_disk *diskStructure, const char *name, + cd9660node *parent, int file, int insert) { cd9660node *temp; fsnode * tfsnode; @@ -1968,7 +1997,8 @@ cd9660_create_virtual_entry(const char *name, cd9660node *parent, int file, strcpy(tfsnode->name, name); - cd9660_convert_filename(tfsnode->name, temp->isoDirRecord->name, file); + cd9660_convert_filename(diskStructure, tfsnode->name, + temp->isoDirRecord->name, file); temp->node = tfsnode; temp->parent = parent; @@ -2004,11 +2034,12 @@ cd9660_create_virtual_entry(const char *name, cd9660node *parent, int file, } static cd9660node * -cd9660_create_file(const char * name, cd9660node *parent, cd9660node *me) +cd9660_create_file(iso9660_disk *diskStructure, const char *name, + cd9660node *parent, cd9660node *me) { cd9660node *temp; - temp = cd9660_create_virtual_entry(name,parent,1,1); + temp = cd9660_create_virtual_entry(diskStructure, name, parent, 1, 1); if (temp == NULL) return NULL; @@ -2020,7 +2051,7 @@ cd9660_create_file(const char * name, cd9660node *parent, cd9660node *me) return NULL; *temp->node->inode = *me->node->inode; - if (cd9660_translate_node_common(temp) == 0) + if (cd9660_translate_node_common(diskStructure, temp) == 0) return NULL; return temp; } @@ -2032,11 +2063,12 @@ cd9660_create_file(const char * name, cd9660node *parent, cd9660node *me) * @returns cd9660node * Pointer to the new directory */ static cd9660node * -cd9660_create_directory(const char *name, cd9660node *parent, cd9660node *me) +cd9660_create_directory(iso9660_disk *diskStructure, const char *name, + cd9660node *parent, cd9660node *me) { cd9660node *temp; - temp = cd9660_create_virtual_entry(name,parent,0,1); + temp = cd9660_create_virtual_entry(diskStructure, name, parent, 0, 1); if (temp == NULL) return NULL; temp->node->type |= S_IFDIR; @@ -2047,13 +2079,14 @@ cd9660_create_directory(const char *name, cd9660node *parent, cd9660node *me) return NULL; *temp->node->inode = *me->node->inode; - if (cd9660_translate_node_common(temp) == 0) + if (cd9660_translate_node_common(diskStructure, temp) == 0) return NULL; return temp; } static cd9660node * -cd9660_create_special_directory(u_char type, cd9660node *parent) +cd9660_create_special_directory(iso9660_disk *diskStructure, u_char type, + cd9660node *parent) { cd9660node *temp, *first; char na[2]; @@ -2068,7 +2101,8 @@ cd9660_create_special_directory(u_char type, cd9660node *parent) return 0; na[1] = 0; - if ((temp = cd9660_create_virtual_entry(na, parent, 0, 0)) == NULL) + if ((temp = cd9660_create_virtual_entry(diskStructure, na, parent, + 0, 0)) == NULL) return NULL; temp->parent = parent; @@ -2099,7 +2133,7 @@ cd9660_create_special_directory(u_char type, cd9660node *parent) } int -cd9660_add_generic_bootimage(const char *bootimage) +cd9660_add_generic_bootimage(iso9660_disk *diskStructure, const char *bootimage) { struct stat stbuf; @@ -2110,27 +2144,27 @@ cd9660_add_generic_bootimage(const char *bootimage) return 0; } - if ((diskStructure.generic_bootimage = strdup(bootimage)) == NULL) { + if ((diskStructure->generic_bootimage = strdup(bootimage)) == NULL) { warn("%s: strdup", __func__); return 0; } /* Get information about the file */ - if (lstat(diskStructure.generic_bootimage, &stbuf) == -1) + if (lstat(diskStructure->generic_bootimage, &stbuf) == -1) err(EXIT_FAILURE, "%s: lstat(\"%s\")", __func__, - diskStructure.generic_bootimage); + diskStructure->generic_bootimage); if (stbuf.st_size > 32768) { warnx("Error: Boot image must be no greater than 32768 bytes"); return 0; } - if (diskStructure.verbose_level > 0) { + if (diskStructure->verbose_level > 0) { printf("Generic boot image image has size %lld\n", (long long)stbuf.st_size); } - diskStructure.has_generic_bootimage = 1; + diskStructure->has_generic_bootimage = 1; return 1; } diff --git a/usr.sbin/makefs/cd9660.h b/usr.sbin/makefs/cd9660.h index 41125b7f9083..e029d52116b8 100644 --- a/usr.sbin/makefs/cd9660.h +++ b/usr.sbin/makefs/cd9660.h @@ -310,9 +310,6 @@ typedef struct _iso9660_disk { } iso9660_disk; -/******** GLOBAL VARIABLES ***********/ -extern iso9660_disk diskStructure; - /************ FUNCTIONS **************/ int cd9660_valid_a_chars(const char *); int cd9660_valid_d_chars(const char *); @@ -331,25 +328,27 @@ void cd9660_time_915(unsigned char *, time_t); /*** Boot Functions ***/ int cd9660_write_generic_bootimage(FILE *); -int cd9660_add_generic_bootimage(const char *); -int cd9660_write_boot(FILE *); -int cd9660_add_boot_disk(const char *); -int cd9660_eltorito_add_boot_option(const char *, const char *); -int cd9660_setup_boot(int); -int cd9660_setup_boot_volume_descriptor(volume_descriptor *); +int cd9660_add_generic_bootimage(iso9660_disk *, const char *); +int cd9660_write_boot(iso9660_disk *, FILE *); +int cd9660_add_boot_disk(iso9660_disk *, const char *); +int cd9660_eltorito_add_boot_option(iso9660_disk *, const char *, + const char *); +int cd9660_setup_boot(iso9660_disk *, int); +int cd9660_setup_boot_volume_descriptor(iso9660_disk *, + volume_descriptor *); /*** Write Functions ***/ -int cd9660_write_image(const char *image); -int cd9660_copy_file(FILE *, off_t, const char *); +int cd9660_write_image(iso9660_disk *, const char *image); +int cd9660_copy_file(iso9660_disk *, FILE *, off_t, const char *); void cd9660_compute_full_filename(cd9660node *, char *); -int cd9660_compute_record_size(cd9660node *); +int cd9660_compute_record_size(iso9660_disk *, cd9660node *); /* Debugging functions */ -void debug_print_tree(cd9660node *,int); +void debug_print_tree(iso9660_disk *, cd9660node *,int); void debug_print_path_tree(cd9660node *); -void debug_print_volume_descriptor_information(void); +void debug_print_volume_descriptor_information(iso9660_disk *); void debug_dump_to_xml_ptentry(path_table_entry *,int, int); void debug_dump_to_xml_path_table(FILE *, off_t, int, int); void debug_dump_to_xml(FILE *); diff --git a/usr.sbin/makefs/cd9660/cd9660_debug.c b/usr.sbin/makefs/cd9660/cd9660_debug.c index d94ccbe5fc93..1b1c13282221 100644 --- a/usr.sbin/makefs/cd9660/cd9660_debug.c +++ b/usr.sbin/makefs/cd9660/cd9660_debug.c @@ -83,7 +83,7 @@ debug_print_susp_attrs(cd9660node *n, int indent) } void -debug_print_tree(cd9660node *node, int level) +debug_print_tree(iso9660_disk *diskStructure, cd9660node *node, int level) { #if !HAVE_NBTOOL_CONFIG_H cd9660node *cn; @@ -111,10 +111,10 @@ debug_print_tree(cd9660node *node, int level) node->fileDataSector + node->fileSectorsUsed - 1); } - if (diskStructure.rock_ridge_enabled) + if (diskStructure->rock_ridge_enabled) debug_print_susp_attrs(node, level + 1); TAILQ_FOREACH(cn, &node->cn_children, cn_next_child) - debug_print_tree(cn, level + 1); + debug_print_tree(diskStructure, cn, level + 1); #else printf("Sorry, debugging is not supported in host-tools mode.\n"); #endif @@ -141,9 +141,9 @@ debug_print_path_tree(cd9660node *n) } void -debug_print_volume_descriptor_information(void) +debug_print_volume_descriptor_information(iso9660_disk *diskStructure) { - volume_descriptor *tmp = diskStructure.firstVolumeDescriptor; + volume_descriptor *tmp = diskStructure->firstVolumeDescriptor; char temp[CD9660_SECTOR_SIZE]; printf("==Listing Volume Descriptors==\n"); diff --git a/usr.sbin/makefs/cd9660/cd9660_eltorito.c b/usr.sbin/makefs/cd9660/cd9660_eltorito.c index f26a5549b2b3..9970cd9a7957 100644 --- a/usr.sbin/makefs/cd9660/cd9660_eltorito.c +++ b/usr.sbin/makefs/cd9660/cd9660_eltorito.c @@ -55,7 +55,7 @@ static u_char cd9660_boot_get_system_type(struct cd9660_boot_image *); #endif int -cd9660_add_boot_disk(const char *boot_info) +cd9660_add_boot_disk(iso9660_disk *diskStructure, const char *boot_info) { struct stat stbuf; const char *mode_msg; @@ -89,7 +89,7 @@ cd9660_add_boot_disk(const char *boot_info) *filename++ = '\0'; - if (diskStructure.verbose_level > 0) { + if (diskStructure->verbose_level > 0) { printf("Found bootdisk with system %s, and filename %s\n", sysname, filename); } @@ -151,14 +151,14 @@ cd9660_add_boot_disk(const char *boot_info) break; } - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("%s\n", mode_msg); new_image->size = stbuf.st_size; new_image->num_sectors = - howmany(new_image->size, diskStructure.sectorSize) * - howmany(diskStructure.sectorSize, 512); - if (diskStructure.verbose_level > 0) { + howmany(new_image->size, diskStructure->sectorSize) * + howmany(diskStructure->sectorSize, 512); + if (diskStructure->verbose_level > 0) { printf("New image has size %d, uses %d 512-byte sectors\n", new_image->size, new_image->num_sectors); } @@ -168,27 +168,28 @@ cd9660_add_boot_disk(const char *boot_info) /* Add boot disk */ /* Group images for the same platform together. */ - TAILQ_FOREACH(tmp_image, &diskStructure.boot_images, image_list) { + TAILQ_FOREACH(tmp_image, &diskStructure->boot_images, image_list) { if (tmp_image->system != new_image->system) break; } if (tmp_image == NULL) { - TAILQ_INSERT_HEAD(&diskStructure.boot_images, new_image, + TAILQ_INSERT_HEAD(&diskStructure->boot_images, new_image, image_list); } else TAILQ_INSERT_BEFORE(tmp_image, new_image, image_list); - new_image->serialno = diskStructure.image_serialno++; + new_image->serialno = diskStructure->image_serialno++; /* TODO : Need to do anything about the boot image in the tree? */ - diskStructure.is_bootable = 1; + diskStructure->is_bootable = 1; return 1; } int -cd9660_eltorito_add_boot_option(const char *option_string, const char *value) +cd9660_eltorito_add_boot_option(iso9660_disk *diskStructure, + const char *option_string, const char *value) { char *eptr; struct cd9660_boot_image *image; @@ -196,8 +197,8 @@ cd9660_eltorito_add_boot_option(const char *option_string, const char *value) assert(option_string != NULL); /* Find the last image added */ - TAILQ_FOREACH(image, &diskStructure.boot_images, image_list) { - if (image->serialno + 1 == diskStructure.image_serialno) + TAILQ_FOREACH(image, &diskStructure->boot_images, image_list) { + if (image->serialno + 1 == diskStructure->image_serialno) break; } if (image == NULL) @@ -351,7 +352,7 @@ cd9660_boot_get_system_type(struct cd9660_boot_image *disk) * Set up the BVD, Boot catalog, and the boot entries, but do no writing */ int -cd9660_setup_boot(int first_sector) +cd9660_setup_boot(iso9660_disk *diskStructure, int first_sector) { int sector; int used_sectors; @@ -365,14 +366,14 @@ cd9660_setup_boot(int first_sector) x86_head = mac_head = ppc_head = NULL; /* If there are no boot disks, don't bother building boot information */ - if (TAILQ_EMPTY(&diskStructure.boot_images)) + if (TAILQ_EMPTY(&diskStructure->boot_images)) return 0; /* Point to catalog: For now assume it consumes one sector */ ELTORITO_DPRINTF(("Boot catalog will go in sector %d\n", first_sector)); - diskStructure.boot_catalog_sector = first_sector; + diskStructure->boot_catalog_sector = first_sector; cd9660_bothendian_dword(first_sector, - diskStructure.boot_descriptor->boot_catalog_pointer); + diskStructure->boot_descriptor->boot_catalog_pointer); /* Step 1: Generate boot catalog */ /* Step 1a: Validation entry */ @@ -387,16 +388,16 @@ cd9660_setup_boot(int first_sector) num_entries = 1; used_sectors = 0; - TAILQ_FOREACH(tmp_disk, &diskStructure.boot_images, image_list) { + TAILQ_FOREACH(tmp_disk, &diskStructure->boot_images, image_list) { used_sectors += tmp_disk->num_sectors; /* One default entry per image */ num_entries++; } - catalog_sectors = howmany(num_entries * 0x20, diskStructure.sectorSize); + catalog_sectors = howmany(num_entries * 0x20, diskStructure->sectorSize); used_sectors += catalog_sectors; - if (diskStructure.verbose_level > 0) { + if (diskStructure->verbose_level > 0) { printf("%s: there will be %i entries consuming %i sectors. " "Catalog is %i sectors\n", __func__, num_entries, used_sectors, catalog_sectors); @@ -404,16 +405,16 @@ cd9660_setup_boot(int first_sector) /* Populate sector numbers */ sector = first_sector + catalog_sectors; - TAILQ_FOREACH(tmp_disk, &diskStructure.boot_images, image_list) { + TAILQ_FOREACH(tmp_disk, &diskStructure->boot_images, image_list) { tmp_disk->sector = sector; sector += tmp_disk->num_sectors; } - LIST_INSERT_HEAD(&diskStructure.boot_entries, valid_entry, ll_struct); + LIST_INSERT_HEAD(&diskStructure->boot_entries, valid_entry, ll_struct); /* Step 1b: Initial/default entry */ /* TODO : PARAM */ - tmp_disk = TAILQ_FIRST(&diskStructure.boot_images); + tmp_disk = TAILQ_FIRST(&diskStructure->boot_images); default_entry = cd9660_boot_setup_default_entry(tmp_disk); if (default_entry == NULL) { warnx("Error: memory allocation failed in cd9660_setup_boot"); @@ -483,7 +484,8 @@ cd9660_setup_boot(int first_sector) } int -cd9660_setup_boot_volume_descriptor(volume_descriptor *bvd) +cd9660_setup_boot_volume_descriptor(iso9660_disk *diskStructure, + volume_descriptor *bvd) { boot_volume_descriptor *bvdData = (boot_volume_descriptor*)bvd->volumeDescriptorData; @@ -493,7 +495,7 @@ cd9660_setup_boot_volume_descriptor(volume_descriptor *bvd) bvdData->version[0] = 1; memcpy(bvdData->boot_system_identifier, ET_ID, 23); memcpy(bvdData->identifier, ISO_VOLUME_DESCRIPTOR_STANDARD_ID, 5); - diskStructure.boot_descriptor = + diskStructure->boot_descriptor = (boot_volume_descriptor*) bvd->volumeDescriptorData; return 1; } @@ -588,7 +590,7 @@ cd9660_write_apm_partition_entry(FILE *fd, int idx, int total_partitions, } int -cd9660_write_boot(FILE *fd) +cd9660_write_boot(iso9660_disk *diskStructure, FILE *fd) { struct boot_catalog_entry *e; struct cd9660_boot_image *t; @@ -596,16 +598,16 @@ cd9660_write_boot(FILE *fd) int mbr_partitions = 0; /* write boot catalog */ - if (fseeko(fd, (off_t)diskStructure.boot_catalog_sector * - diskStructure.sectorSize, SEEK_SET) == -1) + if (fseeko(fd, (off_t)diskStructure->boot_catalog_sector * + diskStructure->sectorSize, SEEK_SET) == -1) err(1, "fseeko"); - if (diskStructure.verbose_level > 0) { + if (diskStructure->verbose_level > 0) { printf("Writing boot catalog to sector %" PRId64 "\n", - diskStructure.boot_catalog_sector); + diskStructure->boot_catalog_sector); } - LIST_FOREACH(e, &diskStructure.boot_entries, ll_struct) { - if (diskStructure.verbose_level > 0) { + LIST_FOREACH(e, &diskStructure->boot_entries, ll_struct) { + if (diskStructure->verbose_level > 0) { printf("Writing catalog entry of type %d\n", e->entry_type); } @@ -615,16 +617,16 @@ cd9660_write_boot(FILE *fd) */ fwrite(&(e->entry_data.VE), 1, 32, fd); } - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Finished writing boot catalog\n"); /* copy boot images */ - TAILQ_FOREACH(t, &diskStructure.boot_images, image_list) { - if (diskStructure.verbose_level > 0) { + TAILQ_FOREACH(t, &diskStructure->boot_images, image_list) { + if (diskStructure->verbose_level > 0) { printf("Writing boot image from %s to sectors %d\n", t->filename, t->sector); } - cd9660_copy_file(fd, t->sector, t->filename); + cd9660_copy_file(diskStructure, fd, t->sector, t->filename); if (t->system == ET_SYS_MAC) apm_partitions++; @@ -633,7 +635,7 @@ cd9660_write_boot(FILE *fd) } /* some systems need partition tables as well */ - if (mbr_partitions > 0 || diskStructure.chrp_boot) { + if (mbr_partitions > 0 || diskStructure->chrp_boot) { uint16_t sig; fseek(fd, 0x1fe, SEEK_SET); @@ -643,18 +645,18 @@ cd9660_write_boot(FILE *fd) mbr_partitions = 0; /* Write ISO9660 descriptor, enclosing the whole disk */ - if (diskStructure.chrp_boot) + if (diskStructure->chrp_boot) cd9660_write_mbr_partition_entry(fd, mbr_partitions++, - 0, diskStructure.totalSectors * - (diskStructure.sectorSize / 512), 0x96); + 0, diskStructure->totalSectors * + (diskStructure->sectorSize / 512), 0x96); /* Write all partition entries */ - TAILQ_FOREACH(t, &diskStructure.boot_images, image_list) { + TAILQ_FOREACH(t, &diskStructure->boot_images, image_list) { if (t->system != ET_SYS_PPC) continue; cd9660_write_mbr_partition_entry(fd, mbr_partitions++, - t->sector * (diskStructure.sectorSize / 512), - t->num_sectors * (diskStructure.sectorSize / 512), + t->sector * (diskStructure->sectorSize / 512), + t->num_sectors * (diskStructure->sectorSize / 512), 0x41 /* PReP Boot */); } } @@ -672,8 +674,8 @@ cd9660_write_boot(FILE *fd) apm16 = htobe16(512); fwrite(&apm16, sizeof(apm16), 1, fd); /* Device block count */ - apm32 = htobe32(diskStructure.totalSectors * - (diskStructure.sectorSize / 512)); + apm32 = htobe32(diskStructure->totalSectors * + (diskStructure->sectorSize / 512)); fwrite(&apm32, sizeof(apm32), 1, fd); /* Device type/id */ apm16 = htobe16(1); @@ -689,20 +691,20 @@ cd9660_write_boot(FILE *fd) /* Write all partition entries */ apm_partitions = 0; - TAILQ_FOREACH(t, &diskStructure.boot_images, image_list) { + TAILQ_FOREACH(t, &diskStructure->boot_images, image_list) { if (t->system != ET_SYS_MAC) continue; cd9660_write_apm_partition_entry(fd, 1 + apm_partitions++, total_parts, - t->sector * (diskStructure.sectorSize / 512), - t->num_sectors * (diskStructure.sectorSize / 512), + t->sector * (diskStructure->sectorSize / 512), + t->num_sectors * (diskStructure->sectorSize / 512), 512, "CD Boot", "Apple_Bootstrap"); } /* Write ISO9660 descriptor, enclosing the whole disk */ cd9660_write_apm_partition_entry(fd, 2 + apm_partitions, - total_parts, 0, diskStructure.totalSectors * - (diskStructure.sectorSize / 512), 512, "ISO9660", + total_parts, 0, diskStructure->totalSectors * + (diskStructure->sectorSize / 512), 512, "ISO9660", "CD_ROM_Mode_1"); } diff --git a/usr.sbin/makefs/cd9660/cd9660_write.c b/usr.sbin/makefs/cd9660/cd9660_write.c index e17752a974fb..c4d4fae8c642 100644 --- a/usr.sbin/makefs/cd9660/cd9660_write.c +++ b/usr.sbin/makefs/cd9660/cd9660_write.c @@ -38,15 +38,16 @@ #include __FBSDID("$FreeBSD$"); -static int cd9660_write_volume_descriptors(FILE *); -static int cd9660_write_path_table(FILE *, off_t, int); -static int cd9660_write_path_tables(FILE *); -static int cd9660_write_file(FILE *, cd9660node *); -static int cd9660_write_filedata(FILE *, off_t, const unsigned char *, int); +static int cd9660_write_volume_descriptors(iso9660_disk *, FILE *); +static int cd9660_write_path_table(iso9660_disk *, FILE *, off_t, int); +static int cd9660_write_path_tables(iso9660_disk *, FILE *); +static int cd9660_write_file(iso9660_disk *, FILE *, cd9660node *); +static int cd9660_write_filedata(iso9660_disk *, FILE *, off_t, + const unsigned char *, int); #if 0 static int cd9660_write_buffered(FILE *, off_t, int, const unsigned char *); #endif -static void cd9660_write_rr(FILE *, cd9660node *, off_t, off_t); +static void cd9660_write_rr(iso9660_disk *, FILE *, cd9660node *, off_t, off_t); /* * Write the image @@ -55,7 +56,7 @@ static void cd9660_write_rr(FILE *, cd9660node *, off_t, off_t); * @returns int 1 on success, 0 on failure */ int -cd9660_write_image(const char* image) +cd9660_write_image(iso9660_disk *diskStructure, const char* image) { FILE *fd; int status; @@ -66,12 +67,12 @@ cd9660_write_image(const char* image) image); } - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Writing image\n"); - if (diskStructure.has_generic_bootimage) { - status = cd9660_copy_file(fd, 0, - diskStructure.generic_bootimage); + if (diskStructure->has_generic_bootimage) { + status = cd9660_copy_file(diskStructure, fd, 0, + diskStructure->generic_bootimage); if (status == 0) { warnx("%s: Error writing generic boot image", __func__); @@ -80,70 +81,71 @@ cd9660_write_image(const char* image) } /* Write the volume descriptors */ - status = cd9660_write_volume_descriptors(fd); + status = cd9660_write_volume_descriptors(diskStructure, fd); if (status == 0) { warnx("%s: Error writing volume descriptors to image", __func__); goto cleanup_bad_image; } - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Volume descriptors written\n"); /* * Write the path tables: there are actually four, but right * now we are only concearned with two. */ - status = cd9660_write_path_tables(fd); + status = cd9660_write_path_tables(diskStructure, fd); if (status == 0) { warnx("%s: Error writing path tables to image", __func__); goto cleanup_bad_image; } - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Path tables written\n"); /* Write the directories and files */ - status = cd9660_write_file(fd, diskStructure.rootNode); + status = cd9660_write_file(diskStructure, fd, diskStructure->rootNode); if (status == 0) { warnx("%s: Error writing files to image", __func__); goto cleanup_bad_image; } - if (diskStructure.is_bootable) { - cd9660_write_boot(fd); + if (diskStructure->is_bootable) { + cd9660_write_boot(diskStructure, fd); } /* Write padding bits. This is temporary */ memset(buf, 0, CD9660_SECTOR_SIZE); - cd9660_write_filedata(fd, diskStructure.totalSectors - 1, buf, 1); + cd9660_write_filedata(diskStructure, fd, + diskStructure->totalSectors - 1, buf, 1); - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Files written\n"); fclose(fd); - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Image closed\n"); return 1; cleanup_bad_image: fclose(fd); - if (!diskStructure.keep_bad_images) + if (!diskStructure->keep_bad_images) unlink(image); - if (diskStructure.verbose_level > 0) + if (diskStructure->verbose_level > 0) printf("Bad image cleaned up\n"); return 0; } static int -cd9660_write_volume_descriptors(FILE *fd) +cd9660_write_volume_descriptors(iso9660_disk *diskStructure, FILE *fd) { - volume_descriptor *vd_temp = diskStructure.firstVolumeDescriptor; + volume_descriptor *vd_temp = diskStructure->firstVolumeDescriptor; int pos; while (vd_temp != NULL) { - pos = vd_temp->sector * diskStructure.sectorSize; - cd9660_write_filedata(fd, vd_temp->sector, + pos = vd_temp->sector * diskStructure->sectorSize; + cd9660_write_filedata(diskStructure, fd, vd_temp->sector, vd_temp->volumeDescriptorData, 1); vd_temp = vd_temp->next; } @@ -159,26 +161,27 @@ cd9660_write_volume_descriptors(FILE *fd) * @returns int 1 on success, 0 on failure */ static int -cd9660_write_path_table(FILE *fd, off_t sector, int mode) +cd9660_write_path_table(iso9660_disk *diskStructure, FILE *fd, off_t sector, + int mode) { - int path_table_sectors = CD9660_BLOCKS(diskStructure.sectorSize, - diskStructure.pathTableLength); + int path_table_sectors = CD9660_BLOCKS(diskStructure->sectorSize, + diskStructure->pathTableLength); unsigned char *buffer; unsigned char *buffer_head; int len, ret; path_table_entry temp_entry; cd9660node *ptcur; - buffer = malloc(diskStructure.sectorSize * path_table_sectors); + buffer = malloc(diskStructure->sectorSize * path_table_sectors); if (buffer == NULL) { warnx("%s: Memory allocation error allocating buffer", __func__); return 0; } buffer_head = buffer; - memset(buffer, 0, diskStructure.sectorSize * path_table_sectors); + memset(buffer, 0, diskStructure->sectorSize * path_table_sectors); - ptcur = diskStructure.rootNode; + ptcur = diskStructure->rootNode; while (ptcur != NULL) { memset(&temp_entry, 0, sizeof(path_table_entry)); @@ -213,7 +216,7 @@ cd9660_write_path_table(FILE *fd, off_t sector, int mode) ptcur = ptcur->ptnext; } - ret = cd9660_write_filedata(fd, sector, buffer_head, + ret = cd9660_write_filedata(diskStructure, fd, sector, buffer_head, path_table_sectors); free(buffer_head); return ret; @@ -235,14 +238,14 @@ cd9660_write_path_table(FILE *fd, off_t sector, int mode) * @returns int 0 on failure, 1 on success */ static int -cd9660_write_path_tables(FILE *fd) +cd9660_write_path_tables(iso9660_disk *diskStructure, FILE *fd) { - if (cd9660_write_path_table(fd, - diskStructure.primaryLittleEndianTableSector, LITTLE_ENDIAN) == 0) + if (cd9660_write_path_table(diskStructure, fd, + diskStructure->primaryLittleEndianTableSector, LITTLE_ENDIAN) == 0) return 0; - if (cd9660_write_path_table(fd, - diskStructure.primaryBigEndianTableSector, BIG_ENDIAN) == 0) + if (cd9660_write_path_table(diskStructure, fd, + diskStructure->primaryBigEndianTableSector, BIG_ENDIAN) == 0) return 0; /* @TODO: handle remaining two path tables */ @@ -261,7 +264,7 @@ cd9660_write_path_tables(FILE *fd) * @returns int 0 on failure, 1 on success */ static int -cd9660_write_file(FILE *fd, cd9660node *writenode) +cd9660_write_file(iso9660_disk *diskStructure, FILE *fd, cd9660node *writenode) { char *buf; char *temp_file_name; @@ -281,7 +284,7 @@ cd9660_write_file(FILE *fd, cd9660node *writenode) memset(temp_file_name, 0, CD9660MAXPATH + 1); - buf = malloc(diskStructure.sectorSize); + buf = malloc(diskStructure->sectorSize); if (buf == NULL) err(EXIT_FAILURE, "%s: malloc", __func__); @@ -299,7 +302,8 @@ cd9660_write_file(FILE *fd, cd9660node *writenode) if (writenode->node->contents == NULL) cd9660_compute_full_filename(writenode, temp_file_name); - ret = cd9660_copy_file(fd, writenode->fileDataSector, + ret = cd9660_copy_file(diskStructure, fd, + writenode->fileDataSector, (writenode->node->contents != NULL) ? writenode->node->contents : temp_file_name); if (ret == 0) @@ -318,7 +322,7 @@ cd9660_write_file(FILE *fd, cd9660node *writenode) */ cur_sector_offset = 0; working_sector = writenode->fileDataSector; - if (fseeko(fd, working_sector * diskStructure.sectorSize, + if (fseeko(fd, working_sector * diskStructure->sectorSize, SEEK_SET) == -1) err(1, "fseeko"); @@ -335,27 +339,27 @@ cd9660_write_file(FILE *fd, cd9660node *writenode) sizeof(iso_directory_record_cd9660)); temp_record.length[0] = - cd9660_compute_record_size(temp); + cd9660_compute_record_size(diskStructure, temp); if (temp_record.length[0] + cur_sector_offset >= - diskStructure.sectorSize) { + diskStructure->sectorSize) { cur_sector_offset = 0; working_sector++; /* Seek to the next sector. */ if (fseeko(fd, working_sector * - diskStructure.sectorSize, SEEK_SET) == -1) + diskStructure->sectorSize, SEEK_SET) == -1) err(1, "fseeko"); } /* Write out the basic ISO directory record */ written = fwrite(&temp_record, 1, temp->isoDirRecord->length[0], fd); - if (diskStructure.rock_ridge_enabled) { - cd9660_write_rr(fd, temp, + if (diskStructure->rock_ridge_enabled) { + cd9660_write_rr(diskStructure, fd, temp, cur_sector_offset, working_sector); } if (fseeko(fd, working_sector * - diskStructure.sectorSize + cur_sector_offset + + diskStructure->sectorSize + cur_sector_offset + temp_record.length[0] - temp->su_tail_size, SEEK_SET) == -1) err(1, "fseeko"); @@ -374,7 +378,7 @@ cd9660_write_file(FILE *fd, cd9660node *writenode) * Recurse on children. */ TAILQ_FOREACH(temp, &writenode->cn_children, cn_next_child) { - if ((ret = cd9660_write_file(fd, temp)) == 0) + if ((ret = cd9660_write_file(diskStructure, fd, temp)) == 0) goto out; } } @@ -399,24 +403,24 @@ cd9660_write_file(FILE *fd, cd9660node *writenode) * is written, the rest should be set to 0. */ static int -cd9660_write_filedata(FILE *fd, off_t sector, const unsigned char *buf, - int numsecs) +cd9660_write_filedata(iso9660_disk *diskStructure, FILE *fd, off_t sector, + const unsigned char *buf, int numsecs) { off_t curpos; size_t success; curpos = ftello(fd); - if (fseeko(fd, sector * diskStructure.sectorSize, SEEK_SET) == -1) + if (fseeko(fd, sector * diskStructure->sectorSize, SEEK_SET) == -1) err(1, "fseeko"); - success = fwrite(buf, diskStructure.sectorSize * numsecs, 1, fd); + success = fwrite(buf, diskStructure->sectorSize * numsecs, 1, fd); if (fseeko(fd, curpos, SEEK_SET) == -1) err(1, "fseeko"); if (success == 1) - success = diskStructure.sectorSize * numsecs; + success = diskStructure->sectorSize * numsecs; return success; } @@ -433,12 +437,13 @@ cd9660_write_buffered(FILE *fd, off_t offset, int buff_len, #endif int -cd9660_copy_file(FILE *fd, off_t start_sector, const char *filename) +cd9660_copy_file(iso9660_disk *diskStructure, FILE *fd, off_t start_sector, + const char *filename) { FILE *rf; int bytes_read; off_t sector = start_sector; - int buf_size = diskStructure.sectorSize; + int buf_size = diskStructure->sectorSize; char *buf; buf = malloc(buf_size); @@ -451,10 +456,10 @@ cd9660_copy_file(FILE *fd, off_t start_sector, const char *filename) return 0; } - if (diskStructure.verbose_level > 1) + if (diskStructure->verbose_level > 1) printf("Writing file: %s\n",filename); - if (fseeko(fd, start_sector * diskStructure.sectorSize, SEEK_SET) == -1) + if (fseeko(fd, start_sector * diskStructure->sectorSize, SEEK_SET) == -1) err(1, "fseeko"); while (!feof(rf)) { @@ -482,13 +487,14 @@ cd9660_copy_file(FILE *fd, off_t start_sector, const char *filename) } static void -cd9660_write_rr(FILE *fd, cd9660node *writenode, off_t offset, off_t sector) +cd9660_write_rr(iso9660_disk *diskStructure, FILE *fd, cd9660node *writenode, + off_t offset, off_t sector) { int in_ca = 0; struct ISO_SUSP_ATTRIBUTES *myattr; offset += writenode->isoDirRecord->length[0]; - if (fseeko(fd, sector * diskStructure.sectorSize + offset, SEEK_SET) == + if (fseeko(fd, sector * diskStructure->sectorSize + offset, SEEK_SET) == -1) err(1, "fseeko"); /* Offset now points at the end of the record */ @@ -502,9 +508,9 @@ cd9660_write_rr(FILE *fd, cd9660node *writenode, off_t offset, off_t sector) * Point the offset to the start of this * record's CE area */ - if (fseeko(fd, ((off_t)diskStructure. + if (fseeko(fd, ((off_t)diskStructure-> susp_continuation_area_start_sector * - diskStructure.sectorSize) + diskStructure->sectorSize) + writenode->susp_entry_ce_start, SEEK_SET) == -1) err(1, "fseeko"); @@ -518,7 +524,7 @@ cd9660_write_rr(FILE *fd, cd9660node *writenode, off_t offset, off_t sector) * where we should be. */ if (in_ca) - if (fseeko(fd, sector * diskStructure.sectorSize + offset, + if (fseeko(fd, sector * diskStructure->sectorSize + offset, SEEK_SET) == -1) err(1, "fseeko"); } diff --git a/usr.sbin/makefs/cd9660/iso9660_rrip.c b/usr.sbin/makefs/cd9660/iso9660_rrip.c index 1d7539997971..ec473648e331 100644 --- a/usr.sbin/makefs/cd9660/iso9660_rrip.c +++ b/usr.sbin/makefs/cd9660/iso9660_rrip.c @@ -47,12 +47,13 @@ __FBSDID("$FreeBSD$"); #include "iso9660_rrip.h" static void cd9660_rrip_initialize_inode(cd9660node *); -static int cd9660_susp_handle_continuation(cd9660node *); -static int cd9660_susp_handle_continuation_common(cd9660node *, int); +static int cd9660_susp_handle_continuation(iso9660_disk *, cd9660node *); +static int cd9660_susp_handle_continuation_common(iso9660_disk *, cd9660node *, + int); int -cd9660_susp_initialize(cd9660node *node, cd9660node *parent, - cd9660node *grandparent) +cd9660_susp_initialize(iso9660_disk *diskStructure, cd9660node *node, + cd9660node *parent, cd9660node *grandparent) { cd9660node *cn; int r; @@ -69,11 +70,11 @@ cd9660_susp_initialize(cd9660node *node, cd9660node *parent, TAILQ_INIT(&(node->dot_dot_record->head)); /* SUSP specific entries here */ - if ((r = cd9660_susp_initialize_node(node)) < 0) + if ((r = cd9660_susp_initialize_node(diskStructure, node)) < 0) return r; /* currently called cd9660node_rrip_init_links */ - r = cd9660_rrip_initialize_node(node, parent, grandparent); + r = cd9660_rrip_initialize_node(diskStructure, node, parent, grandparent); if (r < 0) return r; @@ -84,35 +85,35 @@ cd9660_susp_initialize(cd9660node *node, cd9660node *parent, * This should be called after all extensions. After * this is called, no new records should be added. */ - if ((r = cd9660_susp_handle_continuation(node)) < 0) + if ((r = cd9660_susp_handle_continuation(diskStructure, node)) < 0) return r; /* Recurse on children. */ TAILQ_FOREACH(cn, &node->cn_children, cn_next_child) { - if ((r = cd9660_susp_initialize(cn, node, parent)) < 0) + if ((r = cd9660_susp_initialize(diskStructure, cn, node, parent)) < 0) return 0; } return 1; } int -cd9660_susp_finalize(cd9660node *node) +cd9660_susp_finalize(iso9660_disk *diskStructure, cd9660node *node) { cd9660node *temp; int r; assert(node != NULL); - if (node == diskStructure.rootNode) - diskStructure.susp_continuation_area_current_free = 0; + if (node == diskStructure->rootNode) + diskStructure->susp_continuation_area_current_free = 0; - if ((r = cd9660_susp_finalize_node(node)) < 0) + if ((r = cd9660_susp_finalize_node(diskStructure, node)) < 0) return r; if ((r = cd9660_rrip_finalize_node(node)) < 0) return r; TAILQ_FOREACH(temp, &node->cn_children, cn_next_child) { - if ((r = cd9660_susp_finalize(temp)) < 0) + if ((r = cd9660_susp_finalize(diskStructure, temp)) < 0) return r; } return 1; @@ -132,15 +133,15 @@ cd9660_susp_finalize(cd9660node *node) * CE (continuation area) */ int -cd9660_susp_finalize_node(cd9660node *node) +cd9660_susp_finalize_node(iso9660_disk *diskStructure, cd9660node *node) { struct ISO_SUSP_ATTRIBUTES *t; /* Handle CE counters */ if (node->susp_entry_ce_length > 0) { node->susp_entry_ce_start = - diskStructure.susp_continuation_area_current_free; - diskStructure.susp_continuation_area_current_free += + diskStructure->susp_continuation_area_current_free; + diskStructure->susp_continuation_area_current_free += node->susp_entry_ce_length; } @@ -149,12 +150,12 @@ cd9660_susp_finalize_node(cd9660node *node) t->entry_type != SUSP_ENTRY_SUSP_CE) continue; cd9660_bothendian_dword( - diskStructure. + diskStructure-> susp_continuation_area_start_sector, t->attr.su_entry.CE.ca_sector); cd9660_bothendian_dword( - diskStructure. + diskStructure-> susp_continuation_area_start_sector, t->attr.su_entry.CE.ca_sector); cd9660_bothendian_dword(node->susp_entry_ce_start, @@ -199,7 +200,8 @@ cd9660_rrip_finalize_node(cd9660node *node) } static int -cd9660_susp_handle_continuation_common(cd9660node *node, int space) +cd9660_susp_handle_continuation_common(iso9660_disk *diskStructure, + cd9660node *node, int space) { int ca_used, susp_used, susp_used_pre_ce, working; struct ISO_SUSP_ATTRIBUTES *temp, *pre_ce, *last, *CE, *ST; @@ -272,18 +274,18 @@ cd9660_susp_handle_continuation_common(cd9660node *node, int space) node->susp_entry_size = susp_used; node->susp_entry_ce_length = ca_used; - diskStructure.susp_continuation_area_size += ca_used; + diskStructure->susp_continuation_area_size += ca_used; return 1; } /* See if a continuation entry is needed for each of the different types */ static int -cd9660_susp_handle_continuation(cd9660node *node) +cd9660_susp_handle_continuation(iso9660_disk *diskStructure, cd9660node *node) { assert (node != NULL); /* Entry */ - if (cd9660_susp_handle_continuation_common( + if (cd9660_susp_handle_continuation_common(diskStructure, node,(int)(node->isoDirRecord->length[0])) < 0) return 0; @@ -291,7 +293,7 @@ cd9660_susp_handle_continuation(cd9660node *node) } int -cd9660_susp_initialize_node(cd9660node *node) +cd9660_susp_initialize_node(iso9660_disk *diskStructure, cd9660node *node) { struct ISO_SUSP_ATTRIBUTES *temp; @@ -307,7 +309,7 @@ cd9660_susp_initialize_node(cd9660node *node) /* Check for root directory, add SP and ER if needed. */ if (node->type & CD9660_TYPE_DOT) { - if (node->parent == diskStructure.rootNode) { + if (node->parent == diskStructure->rootNode) { temp = cd9660node_susp_create_node(SUSP_TYPE_SUSP, SUSP_ENTRY_SUSP_SP, "SP", SUSP_LOC_DOT); cd9660_susp_sp(temp, node); @@ -366,8 +368,8 @@ cd9660_rrip_initialize_inode(cd9660node *node) } int -cd9660_rrip_initialize_node(cd9660node *node, cd9660node *parent, - cd9660node *grandparent) +cd9660_rrip_initialize_node(iso9660_disk *diskStructure, cd9660node *node, + cd9660node *parent, cd9660node *grandparent) { struct ISO_SUSP_ATTRIBUTES *current = NULL; @@ -378,7 +380,7 @@ cd9660_rrip_initialize_node(cd9660node *node, cd9660node *parent, * Handle ER - should be the only entry to appear on * a "." record */ - if (node->parent == diskStructure.rootNode) { + if (node->parent == diskStructure->rootNode) { cd9660_susp_ER(node, 1, SUSP_RRIP_ER_EXT_ID, SUSP_RRIP_ER_EXT_DES, SUSP_RRIP_ER_EXT_SRC); } @@ -416,7 +418,7 @@ cd9660_rrip_initialize_node(cd9660node *node, cd9660node *parent, * * The rr_moved_dir needs to be assigned a NM record as well. */ - if (node == diskStructure.rr_moved_dir) { + if (node == diskStructure->rr_moved_dir) { cd9660_rrip_add_NM(node, RRIP_DEFAULT_MOVE_DIR_NAME); } else if ((node->node != NULL) && diff --git a/usr.sbin/makefs/cd9660/iso9660_rrip.h b/usr.sbin/makefs/cd9660/iso9660_rrip.h index 3570301981df..30f565b0744c 100644 --- a/usr.sbin/makefs/cd9660/iso9660_rrip.h +++ b/usr.sbin/makefs/cd9660/iso9660_rrip.h @@ -217,10 +217,10 @@ struct ISO_SUSP_ATTRIBUTES { ((int) ((entry)->attr.su_entry.SP.h.length[0])) /* Recursive function - move later to func pointer code*/ -int cd9660_susp_finalize(cd9660node *); +int cd9660_susp_finalize(iso9660_disk *, cd9660node *); /* These two operate on single nodes */ -int cd9660_susp_finalize_node(cd9660node *); +int cd9660_susp_finalize_node(iso9660_disk *, cd9660node *); int cd9660_rrip_finalize_node(cd9660node *); /* POSIX File attribute */ @@ -272,15 +272,17 @@ struct ISO_SUSP_ATTRIBUTES *cd9660_susp_ES(struct ISO_SUSP_ATTRIBUTES*, /* Helper functions */ /* Common SUSP/RRIP functions */ -int cd9660_susp_initialize(cd9660node *, cd9660node *, cd9660node *); -int cd9660_susp_initialize_node(cd9660node *); +int cd9660_susp_initialize(iso9660_disk *, cd9660node *, cd9660node *, + cd9660node *); +int cd9660_susp_initialize_node(iso9660_disk *, cd9660node *); struct ISO_SUSP_ATTRIBUTES *cd9660node_susp_create_node(int, int, const char *, int); struct ISO_SUSP_ATTRIBUTES *cd9660node_susp_add_entry(cd9660node *, struct ISO_SUSP_ATTRIBUTES *, struct ISO_SUSP_ATTRIBUTES *, int); /* RRIP specific functions */ -int cd9660_rrip_initialize_node(cd9660node *, cd9660node *, cd9660node *); +int cd9660_rrip_initialize_node(iso9660_disk *, cd9660node *, cd9660node *, + cd9660node *); void cd9660_createSL(cd9660node *); /* Functions that probably can be removed */ diff --git a/usr.sbin/traceroute/Makefile b/usr.sbin/traceroute/Makefile index a3b6a14afdfc..cda913a1e9c9 100644 --- a/usr.sbin/traceroute/Makefile +++ b/usr.sbin/traceroute/Makefile @@ -1,5 +1,7 @@ # $FreeBSD$ +.include + TRACEROUTE_DISTDIR?= ${.CURDIR}/../../contrib/traceroute .PATH: ${TRACEROUTE_DISTDIR} @@ -28,6 +30,12 @@ CFLAGS+= -DIPSEC LIBADD+= ipsec .endif +.if ${MK_CASPER} != "no" +LIBADD+= casper +LIBADD+= cap_dns +CFLAGS+=-DHAVE_LIBCASPER +.endif + CFLAGS+= -I${TRACEROUTE_DISTDIR} WARNS?= 3